Merge "crypto: msm: change clock operation in qcedev driver"
diff --git a/Documentation/ABI/testing/sysfs-fs-f2fs b/Documentation/ABI/testing/sysfs-fs-f2fs
index 91822ce..aedeae1 100644
--- a/Documentation/ABI/testing/sysfs-fs-f2fs
+++ b/Documentation/ABI/testing/sysfs-fs-f2fs
@@ -31,6 +31,12 @@
 Description:
 		 Controls the issue rate of segment discard commands.
 
+What:		/sys/fs/f2fs/<disk>/max_blkaddr
+Date:		November 2019
+Contact:	"Ramon Pantin" <pantin@google.com>
+Description:
+		 Shows first block address of MAIN area.
+
 What:		/sys/fs/f2fs/<disk>/ipu_policy
 Date:		November 2013
 Contact:	"Jaegeuk Kim" <jaegeuk.kim@samsung.com>
@@ -243,3 +249,18 @@
 		 - Del: echo '[h/c]!extension' > /sys/fs/f2fs/<disk>/extension_list
 		 - [h] means add/del hot file extension
 		 - [c] means add/del cold file extension
+
+What:		/sys/fs/f2fs/<disk>/unusable
+Date		April 2019
+Contact:	"Daniel Rosenberg" <drosen@google.com>
+Description:
+		If checkpoint=disable, it displays the number of blocks that are unusable.
+                If checkpoint=enable it displays the enumber of blocks that would be unusable
+                if checkpoint=disable were to be set.
+
+What:		/sys/fs/f2fs/<disk>/encoding
+Date		July 2019
+Contact:	"Daniel Rosenberg" <drosen@google.com>
+Description:
+		Displays name and version of the encoding set for the filesystem.
+                If no encoding is set, displays (none)
diff --git a/Documentation/ABI/testing/sysfs-kernel-ion b/Documentation/ABI/testing/sysfs-kernel-ion
new file mode 100644
index 0000000..f57f970
--- /dev/null
+++ b/Documentation/ABI/testing/sysfs-kernel-ion
@@ -0,0 +1,27 @@
+What:		/sys/kernel/ion
+Date:		Dec 2019
+KernelVersion:	4.14.158
+Contact:	Suren Baghdasaryan <surenb@google.com>,
+		Sandeep Patil <sspatil@google.com>
+Description:
+		The /sys/kernel/ion directory contains a snapshot of the
+		internal state of ION memory heaps and pools.
+Users:		kernel memory tuning tools
+
+What:		/sys/kernel/ion/total_heaps_kb
+Date:		Dec 2019
+KernelVersion:	4.14.158
+Contact:	Suren Baghdasaryan <surenb@google.com>,
+		Sandeep Patil <sspatil@google.com>
+Description:
+		The total_heaps_kb file is read-only and specifies how much
+		memory in Kb is allocated to ION heaps.
+
+What:		/sys/kernel/ion/total_pools_kb
+Date:		Dec 2019
+KernelVersion:	4.14.158
+Contact:	Suren Baghdasaryan <surenb@google.com>,
+		Sandeep Patil <sspatil@google.com>
+Description:
+		The total_pools_kb file is read-only and specifies how much
+		memory in Kb is allocated to ION pools.
diff --git a/Documentation/ABI/testing/sysfs-power b/Documentation/ABI/testing/sysfs-power
index 2f813d6..64237c1 100644
--- a/Documentation/ABI/testing/sysfs-power
+++ b/Documentation/ABI/testing/sysfs-power
@@ -300,4 +300,110 @@
 		attempt.
 
 		Using this sysfs file will override any values that were
-		set using the kernel command line for disk offset.
\ No newline at end of file
+		set using the kernel command line for disk offset.
+
+What:		/sys/power/suspend_stats
+Date:		July 2019
+Contact:	Kalesh Singh <kaleshsingh96@gmail.com>
+Description:
+		The /sys/power/suspend_stats directory contains suspend related
+		statistics.
+
+What:		/sys/power/suspend_stats/success
+Date:		July 2019
+Contact:	Kalesh Singh <kaleshsingh96@gmail.com>
+Description:
+		The /sys/power/suspend_stats/success file contains the number
+		of times entering system sleep state succeeded.
+
+What:		/sys/power/suspend_stats/fail
+Date:		July 2019
+Contact:	Kalesh Singh <kaleshsingh96@gmail.com>
+Description:
+		The /sys/power/suspend_stats/fail file contains the number
+		of times entering system sleep state failed.
+
+What:		/sys/power/suspend_stats/failed_freeze
+Date:		July 2019
+Contact:	Kalesh Singh <kaleshsingh96@gmail.com>
+Description:
+		The /sys/power/suspend_stats/failed_freeze file contains the
+		number of times freezing processes failed.
+
+What:		/sys/power/suspend_stats/failed_prepare
+Date:		July 2019
+Contact:	Kalesh Singh <kaleshsingh96@gmail.com>
+Description:
+		The /sys/power/suspend_stats/failed_prepare file contains the
+		number of times preparing all non-sysdev devices for
+		a system PM transition failed.
+
+What:		/sys/power/suspend_stats/failed_resume
+Date:		July 2019
+Contact:	Kalesh Singh <kaleshsingh96@gmail.com>
+Description:
+		The /sys/power/suspend_stats/failed_resume file contains the
+		number of times executing "resume" callbacks of
+		non-sysdev devices failed.
+
+What:		/sys/power/suspend_stats/failed_resume_early
+Date:		July 2019
+Contact:	Kalesh Singh <kaleshsingh96@gmail.com>
+Description:
+		The /sys/power/suspend_stats/failed_resume_early file contains
+		the number of times executing "early resume" callbacks
+		of devices failed.
+
+What:		/sys/power/suspend_stats/failed_resume_noirq
+Date:		July 2019
+Contact:	Kalesh Singh <kaleshsingh96@gmail.com>
+Description:
+		The /sys/power/suspend_stats/failed_resume_noirq file contains
+		the number of times executing "noirq resume" callbacks
+		of devices failed.
+
+What:		/sys/power/suspend_stats/failed_suspend
+Date:		July 2019
+Contact:	Kalesh Singh <kaleshsingh96@gmail.com>
+Description:
+		The /sys/power/suspend_stats/failed_suspend file contains
+		the number of times executing "suspend" callbacks
+		of all non-sysdev devices failed.
+
+What:		/sys/power/suspend_stats/failed_suspend_late
+Date:		July 2019
+Contact:	Kalesh Singh <kaleshsingh96@gmail.com>
+Description:
+		The /sys/power/suspend_stats/failed_suspend_late file contains
+		the number of times executing "late suspend" callbacks
+		of all devices failed.
+
+What:		/sys/power/suspend_stats/failed_suspend_noirq
+Date:		July 2019
+Contact:	Kalesh Singh <kaleshsingh96@gmail.com>
+Description:
+		The /sys/power/suspend_stats/failed_suspend_noirq file contains
+		the number of times executing "noirq suspend" callbacks
+		of all devices failed.
+
+What:		/sys/power/suspend_stats/last_failed_dev
+Date:		July 2019
+Contact:	Kalesh Singh <kaleshsingh96@gmail.com>
+Description:
+		The /sys/power/suspend_stats/last_failed_dev file contains
+		the last device for which a suspend/resume callback failed.
+
+What:		/sys/power/suspend_stats/last_failed_errno
+Date:		July 2019
+Contact:	Kalesh Singh <kaleshsingh96@gmail.com>
+Description:
+		The /sys/power/suspend_stats/last_failed_errno file contains
+		the errno of the last failed attempt at entering
+		system sleep state.
+
+What:		/sys/power/suspend_stats/last_failed_step
+Date:		July 2019
+Contact:	Kalesh Singh <kaleshsingh96@gmail.com>
+Description:
+		The /sys/power/suspend_stats/last_failed_step file contains
+		the last failed step in the suspend/resume path.
diff --git a/Documentation/admin-guide/kernel-parameters.rst b/Documentation/admin-guide/kernel-parameters.rst
index b8d0bc0..1afb480 100644
--- a/Documentation/admin-guide/kernel-parameters.rst
+++ b/Documentation/admin-guide/kernel-parameters.rst
@@ -126,6 +126,7 @@
 	NET	Appropriate network support is enabled.
 	NUMA	NUMA support is enabled.
 	NFS	Appropriate NFS support is enabled.
+	OF	Devicetree is enabled.
 	OSS	OSS sound support is enabled.
 	PV_OPS	A paravirtualized kernel is enabled.
 	PARIDE	The ParIDE (parallel port IDE) subsystem is enabled.
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
index bef7d96..804b228 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -1638,6 +1638,15 @@
 
 	initrd=		[BOOT] Specify the location of the initial ramdisk
 
+	init_on_alloc=	[MM] Fill newly allocated pages and heap objects with
+			zeroes.
+			Format: 0 | 1
+			Default set by CONFIG_INIT_ON_ALLOC_DEFAULT_ON.
+
+	init_on_free=	[MM] Fill freed pages and heap objects with zeroes.
+			Format: 0 | 1
+			Default set by CONFIG_INIT_ON_FREE_DEFAULT_ON.
+
 	init_pkru=	[x86] Specify the default memory protection keys rights
 			register contents for all processes.  0x55555554 by
 			default (disallow access to all but pkey 0).  Can
@@ -3109,6 +3118,12 @@
 			This can be set from sysctl after boot.
 			See Documentation/sysctl/vm.txt for details.
 
+	of_devlink	[OF, KNL] Create device links between consumer and
+			supplier devices by scanning the devictree to infer the
+			consumer/supplier relationships.  A consumer device
+			will not be probed until all the supplier devices have
+			probed successfully.
+
 	ohci1394_dma=early	[HW] enable debugging via the ohci1394 driver.
 			See Documentation/debugging-via-ohci1394.txt for more
 			info.
diff --git a/Documentation/arm64/tagged-address-abi.rst b/Documentation/arm64/tagged-address-abi.rst
new file mode 100644
index 0000000..d4a85d5
--- /dev/null
+++ b/Documentation/arm64/tagged-address-abi.rst
@@ -0,0 +1,156 @@
+==========================
+AArch64 TAGGED ADDRESS ABI
+==========================
+
+Authors: Vincenzo Frascino <vincenzo.frascino@arm.com>
+         Catalin Marinas <catalin.marinas@arm.com>
+
+Date: 21 August 2019
+
+This document describes the usage and semantics of the Tagged Address
+ABI on AArch64 Linux.
+
+1. Introduction
+---------------
+
+On AArch64 the ``TCR_EL1.TBI0`` bit is set by default, allowing
+userspace (EL0) to perform memory accesses through 64-bit pointers with
+a non-zero top byte. This document describes the relaxation of the
+syscall ABI that allows userspace to pass certain tagged pointers to
+kernel syscalls.
+
+2. AArch64 Tagged Address ABI
+-----------------------------
+
+From the kernel syscall interface perspective and for the purposes of
+this document, a "valid tagged pointer" is a pointer with a potentially
+non-zero top-byte that references an address in the user process address
+space obtained in one of the following ways:
+
+- ``mmap()`` syscall where either:
+
+  - flags have the ``MAP_ANONYMOUS`` bit set or
+  - the file descriptor refers to a regular file (including those
+    returned by ``memfd_create()``) or ``/dev/zero``
+
+- ``brk()`` syscall (i.e. the heap area between the initial location of
+  the program break at process creation and its current location).
+
+- any memory mapped by the kernel in the address space of the process
+  during creation and with the same restrictions as for ``mmap()`` above
+  (e.g. data, bss, stack).
+
+The AArch64 Tagged Address ABI has two stages of relaxation depending
+how the user addresses are used by the kernel:
+
+1. User addresses not accessed by the kernel but used for address space
+   management (e.g. ``mmap()``, ``mprotect()``, ``madvise()``). The use
+   of valid tagged pointers in this context is always allowed.
+
+2. User addresses accessed by the kernel (e.g. ``write()``). This ABI
+   relaxation is disabled by default and the application thread needs to
+   explicitly enable it via ``prctl()`` as follows:
+
+   - ``PR_SET_TAGGED_ADDR_CTRL``: enable or disable the AArch64 Tagged
+     Address ABI for the calling thread.
+
+     The ``(unsigned int) arg2`` argument is a bit mask describing the
+     control mode used:
+
+     - ``PR_TAGGED_ADDR_ENABLE``: enable AArch64 Tagged Address ABI.
+       Default status is disabled.
+
+     Arguments ``arg3``, ``arg4``, and ``arg5`` must be 0.
+
+   - ``PR_GET_TAGGED_ADDR_CTRL``: get the status of the AArch64 Tagged
+     Address ABI for the calling thread.
+
+     Arguments ``arg2``, ``arg3``, ``arg4``, and ``arg5`` must be 0.
+
+   The ABI properties described above are thread-scoped, inherited on
+   clone() and fork() and cleared on exec().
+
+   Calling ``prctl(PR_SET_TAGGED_ADDR_CTRL, PR_TAGGED_ADDR_ENABLE, 0, 0, 0)``
+   returns ``-EINVAL`` if the AArch64 Tagged Address ABI is globally
+   disabled by ``sysctl abi.tagged_addr_disabled=1``. The default
+   ``sysctl abi.tagged_addr_disabled`` configuration is 0.
+
+When the AArch64 Tagged Address ABI is enabled for a thread, the
+following behaviours are guaranteed:
+
+- All syscalls except the cases mentioned in section 3 can accept any
+  valid tagged pointer.
+
+- The syscall behaviour is undefined for invalid tagged pointers: it may
+  result in an error code being returned, a (fatal) signal being raised,
+  or other modes of failure.
+
+- The syscall behaviour for a valid tagged pointer is the same as for
+  the corresponding untagged pointer.
+
+
+A definition of the meaning of tagged pointers on AArch64 can be found
+in Documentation/arm64/tagged-pointers.rst.
+
+3. AArch64 Tagged Address ABI Exceptions
+-----------------------------------------
+
+The following system call parameters must be untagged regardless of the
+ABI relaxation:
+
+- ``prctl()`` other than pointers to user data either passed directly or
+  indirectly as arguments to be accessed by the kernel.
+
+- ``ioctl()`` other than pointers to user data either passed directly or
+  indirectly as arguments to be accessed by the kernel.
+
+- ``shmat()`` and ``shmdt()``.
+
+Any attempt to use non-zero tagged pointers may result in an error code
+being returned, a (fatal) signal being raised, or other modes of
+failure.
+
+4. Example of correct usage
+---------------------------
+.. code-block:: c
+
+   #include <stdlib.h>
+   #include <string.h>
+   #include <unistd.h>
+   #include <sys/mman.h>
+   #include <sys/prctl.h>
+   
+   #define PR_SET_TAGGED_ADDR_CTRL	55
+   #define PR_TAGGED_ADDR_ENABLE	(1UL << 0)
+   
+   #define TAG_SHIFT		56
+   
+   int main(void)
+   {
+   	int tbi_enabled = 0;
+   	unsigned long tag = 0;
+   	char *ptr;
+   
+   	/* check/enable the tagged address ABI */
+   	if (!prctl(PR_SET_TAGGED_ADDR_CTRL, PR_TAGGED_ADDR_ENABLE, 0, 0, 0))
+   		tbi_enabled = 1;
+   
+   	/* memory allocation */
+   	ptr = mmap(NULL, sysconf(_SC_PAGE_SIZE), PROT_READ | PROT_WRITE,
+   		   MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+   	if (ptr == MAP_FAILED)
+   		return 1;
+   
+   	/* set a non-zero tag if the ABI is available */
+   	if (tbi_enabled)
+   		tag = rand() & 0xff;
+   	ptr = (char *)((unsigned long)ptr | (tag << TAG_SHIFT));
+   
+   	/* memory access to a tagged address */
+   	strcpy(ptr, "tagged pointer\n");
+   
+   	/* syscall with a tagged pointer */
+   	write(1, ptr, strlen(ptr));
+   
+   	return 0;
+   }
diff --git a/Documentation/arm64/tagged-pointers.txt b/Documentation/arm64/tagged-pointers.txt
index a25a99e..a800092 100644
--- a/Documentation/arm64/tagged-pointers.txt
+++ b/Documentation/arm64/tagged-pointers.txt
@@ -18,7 +18,9 @@
 --------------------------------------
 
 All interpretation of userspace memory addresses by the kernel assumes
-an address tag of 0x00.
+an address tag of 0x00, unless the application enables the AArch64
+Tagged Address ABI explicitly
+(Documentation/arm64/tagged-address-abi.rst).
 
 This includes, but is not limited to, addresses found in:
 
@@ -31,13 +33,15 @@
  - the frame pointer (x29) and frame records, e.g. when interpreting
    them to generate a backtrace or call graph.
 
-Using non-zero address tags in any of these locations may result in an
-error code being returned, a (fatal) signal being raised, or other modes
-of failure.
+Using non-zero address tags in any of these locations when the
+userspace application did not enable the AArch64 Tagged Address ABI may
+result in an error code being returned, a (fatal) signal being raised,
+or other modes of failure.
 
-For these reasons, passing non-zero address tags to the kernel via
-system calls is forbidden, and using a non-zero address tag for sp is
-strongly discouraged.
+For these reasons, when the AArch64 Tagged Address ABI is disabled,
+passing non-zero address tags to the kernel via system calls is
+forbidden, and using a non-zero address tag for sp is strongly
+discouraged.
 
 Programs maintaining a frame pointer and frame records that use non-zero
 address tags may suffer impaired or inaccurate debug and profiling
@@ -57,6 +61,9 @@
 The architecture prevents the use of a tagged PC, so the upper byte will
 be set to a sign-extension of bit 55 on exception return.
 
+This behaviour is maintained when the AArch64 Tagged Address ABI is
+enabled.
+
 
 Other considerations
 --------------------
diff --git a/Documentation/dev-tools/kasan.rst b/Documentation/dev-tools/kasan.rst
index aabc873..b72d07d 100644
--- a/Documentation/dev-tools/kasan.rst
+++ b/Documentation/dev-tools/kasan.rst
@@ -4,15 +4,25 @@
 Overview
 --------
 
-KernelAddressSANitizer (KASAN) is a dynamic memory error detector. It provides
-a fast and comprehensive solution for finding use-after-free and out-of-bounds
-bugs.
+KernelAddressSANitizer (KASAN) is a dynamic memory error detector designed to
+find out-of-bound and use-after-free bugs. KASAN has two modes: generic KASAN
+(similar to userspace ASan) and software tag-based KASAN (similar to userspace
+HWASan).
 
-KASAN uses compile-time instrumentation for checking every memory access,
-therefore you will need a GCC version 4.9.2 or later. GCC 5.0 or later is
-required for detection of out-of-bounds accesses to stack or global variables.
+KASAN uses compile-time instrumentation to insert validity checks before every
+memory access, and therefore requires a compiler version that supports that.
 
-Currently KASAN is supported only for the x86_64 and arm64 architectures.
+Generic KASAN is supported in both GCC and Clang. With GCC it requires version
+4.9.2 or later for basic support and version 5.0 or later for detection of
+out-of-bounds accesses for stack and global variables and for inline
+instrumentation mode (see the Usage section). With Clang it requires version
+7.0.0 or later and it doesn't support detection of out-of-bounds accesses for
+global variables yet.
+
+Tag-based KASAN is only supported in Clang and requires version 7.0.0 or later.
+
+Currently generic KASAN is supported for the x86_64, arm64, xtensa and s390
+architectures, and tag-based KASAN is supported only for arm64.
 
 Usage
 -----
@@ -21,12 +31,14 @@
 
 	  CONFIG_KASAN = y
 
-and choose between CONFIG_KASAN_OUTLINE and CONFIG_KASAN_INLINE. Outline and
-inline are compiler instrumentation types. The former produces smaller binary
-the latter is 1.1 - 2 times faster. Inline instrumentation requires a GCC
-version 5.0 or later.
+and choose between CONFIG_KASAN_GENERIC (to enable generic KASAN) and
+CONFIG_KASAN_SW_TAGS (to enable software tag-based KASAN).
 
-KASAN works with both SLUB and SLAB memory allocators.
+You also need to choose between CONFIG_KASAN_OUTLINE and CONFIG_KASAN_INLINE.
+Outline and inline are compiler instrumentation types. The former produces
+smaller binary while the latter is 1.1 - 2 times faster.
+
+Both KASAN modes work with both SLUB and SLAB memory allocators.
 For better bug detection and nicer reporting, enable CONFIG_STACKTRACE.
 
 To disable instrumentation for specific files or directories, add a line
@@ -43,85 +55,85 @@
 Error reports
 ~~~~~~~~~~~~~
 
-A typical out of bounds access report looks like this::
+A typical out-of-bounds access generic KASAN report looks like this::
 
     ==================================================================
-    BUG: AddressSanitizer: out of bounds access in kmalloc_oob_right+0x65/0x75 [test_kasan] at addr ffff8800693bc5d3
-    Write of size 1 by task modprobe/1689
-    =============================================================================
-    BUG kmalloc-128 (Not tainted): kasan error
-    -----------------------------------------------------------------------------
+    BUG: KASAN: slab-out-of-bounds in kmalloc_oob_right+0xa8/0xbc [test_kasan]
+    Write of size 1 at addr ffff8801f44ec37b by task insmod/2760
 
-    Disabling lock debugging due to kernel taint
-    INFO: Allocated in kmalloc_oob_right+0x3d/0x75 [test_kasan] age=0 cpu=0 pid=1689
-     __slab_alloc+0x4b4/0x4f0
-     kmem_cache_alloc_trace+0x10b/0x190
-     kmalloc_oob_right+0x3d/0x75 [test_kasan]
-     init_module+0x9/0x47 [test_kasan]
-     do_one_initcall+0x99/0x200
-     load_module+0x2cb3/0x3b20
-     SyS_finit_module+0x76/0x80
-     system_call_fastpath+0x12/0x17
-    INFO: Slab 0xffffea0001a4ef00 objects=17 used=7 fp=0xffff8800693bd728 flags=0x100000000004080
-    INFO: Object 0xffff8800693bc558 @offset=1368 fp=0xffff8800693bc720
-
-    Bytes b4 ffff8800693bc548: 00 00 00 00 00 00 00 00 5a 5a 5a 5a 5a 5a 5a 5a  ........ZZZZZZZZ
-    Object ffff8800693bc558: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b  kkkkkkkkkkkkkkkk
-    Object ffff8800693bc568: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b  kkkkkkkkkkkkkkkk
-    Object ffff8800693bc578: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b  kkkkkkkkkkkkkkkk
-    Object ffff8800693bc588: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b  kkkkkkkkkkkkkkkk
-    Object ffff8800693bc598: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b  kkkkkkkkkkkkkkkk
-    Object ffff8800693bc5a8: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b  kkkkkkkkkkkkkkkk
-    Object ffff8800693bc5b8: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b  kkkkkkkkkkkkkkkk
-    Object ffff8800693bc5c8: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b a5  kkkkkkkkkkkkkkk.
-    Redzone ffff8800693bc5d8: cc cc cc cc cc cc cc cc                          ........
-    Padding ffff8800693bc718: 5a 5a 5a 5a 5a 5a 5a 5a                          ZZZZZZZZ
-    CPU: 0 PID: 1689 Comm: modprobe Tainted: G    B          3.18.0-rc1-mm1+ #98
-    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.7.5-0-ge51488c-20140602_164612-nilsson.home.kraxel.org 04/01/2014
-     ffff8800693bc000 0000000000000000 ffff8800693bc558 ffff88006923bb78
-     ffffffff81cc68ae 00000000000000f3 ffff88006d407600 ffff88006923bba8
-     ffffffff811fd848 ffff88006d407600 ffffea0001a4ef00 ffff8800693bc558
+    CPU: 1 PID: 2760 Comm: insmod Not tainted 4.19.0-rc3+ #698
+    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.10.2-1 04/01/2014
     Call Trace:
-     [<ffffffff81cc68ae>] dump_stack+0x46/0x58
-     [<ffffffff811fd848>] print_trailer+0xf8/0x160
-     [<ffffffffa00026a7>] ? kmem_cache_oob+0xc3/0xc3 [test_kasan]
-     [<ffffffff811ff0f5>] object_err+0x35/0x40
-     [<ffffffffa0002065>] ? kmalloc_oob_right+0x65/0x75 [test_kasan]
-     [<ffffffff8120b9fa>] kasan_report_error+0x38a/0x3f0
-     [<ffffffff8120a79f>] ? kasan_poison_shadow+0x2f/0x40
-     [<ffffffff8120b344>] ? kasan_unpoison_shadow+0x14/0x40
-     [<ffffffff8120a79f>] ? kasan_poison_shadow+0x2f/0x40
-     [<ffffffffa00026a7>] ? kmem_cache_oob+0xc3/0xc3 [test_kasan]
-     [<ffffffff8120a995>] __asan_store1+0x75/0xb0
-     [<ffffffffa0002601>] ? kmem_cache_oob+0x1d/0xc3 [test_kasan]
-     [<ffffffffa0002065>] ? kmalloc_oob_right+0x65/0x75 [test_kasan]
-     [<ffffffffa0002065>] kmalloc_oob_right+0x65/0x75 [test_kasan]
-     [<ffffffffa00026b0>] init_module+0x9/0x47 [test_kasan]
-     [<ffffffff810002d9>] do_one_initcall+0x99/0x200
-     [<ffffffff811e4e5c>] ? __vunmap+0xec/0x160
-     [<ffffffff81114f63>] load_module+0x2cb3/0x3b20
-     [<ffffffff8110fd70>] ? m_show+0x240/0x240
-     [<ffffffff81115f06>] SyS_finit_module+0x76/0x80
-     [<ffffffff81cd3129>] system_call_fastpath+0x12/0x17
+     dump_stack+0x94/0xd8
+     print_address_description+0x73/0x280
+     kasan_report+0x144/0x187
+     __asan_report_store1_noabort+0x17/0x20
+     kmalloc_oob_right+0xa8/0xbc [test_kasan]
+     kmalloc_tests_init+0x16/0x700 [test_kasan]
+     do_one_initcall+0xa5/0x3ae
+     do_init_module+0x1b6/0x547
+     load_module+0x75df/0x8070
+     __do_sys_init_module+0x1c6/0x200
+     __x64_sys_init_module+0x6e/0xb0
+     do_syscall_64+0x9f/0x2c0
+     entry_SYSCALL_64_after_hwframe+0x44/0xa9
+    RIP: 0033:0x7f96443109da
+    RSP: 002b:00007ffcf0b51b08 EFLAGS: 00000202 ORIG_RAX: 00000000000000af
+    RAX: ffffffffffffffda RBX: 000055dc3ee521a0 RCX: 00007f96443109da
+    RDX: 00007f96445cff88 RSI: 0000000000057a50 RDI: 00007f9644992000
+    RBP: 000055dc3ee510b0 R08: 0000000000000003 R09: 0000000000000000
+    R10: 00007f964430cd0a R11: 0000000000000202 R12: 00007f96445cff88
+    R13: 000055dc3ee51090 R14: 0000000000000000 R15: 0000000000000000
+
+    Allocated by task 2760:
+     save_stack+0x43/0xd0
+     kasan_kmalloc+0xa7/0xd0
+     kmem_cache_alloc_trace+0xe1/0x1b0
+     kmalloc_oob_right+0x56/0xbc [test_kasan]
+     kmalloc_tests_init+0x16/0x700 [test_kasan]
+     do_one_initcall+0xa5/0x3ae
+     do_init_module+0x1b6/0x547
+     load_module+0x75df/0x8070
+     __do_sys_init_module+0x1c6/0x200
+     __x64_sys_init_module+0x6e/0xb0
+     do_syscall_64+0x9f/0x2c0
+     entry_SYSCALL_64_after_hwframe+0x44/0xa9
+
+    Freed by task 815:
+     save_stack+0x43/0xd0
+     __kasan_slab_free+0x135/0x190
+     kasan_slab_free+0xe/0x10
+     kfree+0x93/0x1a0
+     umh_complete+0x6a/0xa0
+     call_usermodehelper_exec_async+0x4c3/0x640
+     ret_from_fork+0x35/0x40
+
+    The buggy address belongs to the object at ffff8801f44ec300
+     which belongs to the cache kmalloc-128 of size 128
+    The buggy address is located 123 bytes inside of
+     128-byte region [ffff8801f44ec300, ffff8801f44ec380)
+    The buggy address belongs to the page:
+    page:ffffea0007d13b00 count:1 mapcount:0 mapping:ffff8801f7001640 index:0x0
+    flags: 0x200000000000100(slab)
+    raw: 0200000000000100 ffffea0007d11dc0 0000001a0000001a ffff8801f7001640
+    raw: 0000000000000000 0000000080150015 00000001ffffffff 0000000000000000
+    page dumped because: kasan: bad access detected
+
     Memory state around the buggy address:
-     ffff8800693bc300: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
-     ffff8800693bc380: fc fc 00 00 00 00 00 00 00 00 00 00 00 00 00 fc
-     ffff8800693bc400: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
-     ffff8800693bc480: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
-     ffff8800693bc500: fc fc fc fc fc fc fc fc fc fc fc 00 00 00 00 00
-    >ffff8800693bc580: 00 00 00 00 00 00 00 00 00 00 03 fc fc fc fc fc
-                                                 ^
-     ffff8800693bc600: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
-     ffff8800693bc680: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
-     ffff8800693bc700: fc fc fc fc fb fb fb fb fb fb fb fb fb fb fb fb
-     ffff8800693bc780: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
-     ffff8800693bc800: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
+     ffff8801f44ec200: fc fc fc fc fc fc fc fc fb fb fb fb fb fb fb fb
+     ffff8801f44ec280: fb fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
+    >ffff8801f44ec300: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03
+                                                                    ^
+     ffff8801f44ec380: fc fc fc fc fc fc fc fc fb fb fb fb fb fb fb fb
+     ffff8801f44ec400: fb fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
     ==================================================================
 
-The header of the report discribe what kind of bug happened and what kind of
-access caused it. It's followed by the description of the accessed slub object
-(see 'SLUB Debug output' section in Documentation/vm/slub.rst for details) and
-the description of the accessed memory page.
+The header of the report provides a short summary of what kind of bug happened
+and what kind of access caused it. It's followed by a stack trace of the bad
+access, a stack trace of where the accessed memory was allocated (in case bad
+access happens on a slab object), and a stack trace of where the object was
+freed (in case of a use-after-free bug report). Next comes a description of
+the accessed slab object and information about the accessed memory page.
 
 In the last section the report shows memory state around the accessed address.
 Reading this part requires some understanding of how KASAN works.
@@ -138,18 +150,24 @@
 In the report above the arrows point to the shadow byte 03, which means that
 the accessed address is partially accessible.
 
+For tag-based KASAN this last report section shows the memory tags around the
+accessed address (see Implementation details section).
+
 
 Implementation details
 ----------------------
 
+Generic KASAN
+~~~~~~~~~~~~~
+
 From a high level, our approach to memory error detection is similar to that
 of kmemcheck: use shadow memory to record whether each byte of memory is safe
-to access, and use compile-time instrumentation to check shadow memory on each
-memory access.
+to access, and use compile-time instrumentation to insert checks of shadow
+memory on each memory access.
 
-AddressSanitizer dedicates 1/8 of kernel memory to its shadow memory
-(e.g. 16TB to cover 128TB on x86_64) and uses direct mapping with a scale and
-offset to translate a memory address to its corresponding shadow address.
+Generic KASAN dedicates 1/8th of kernel memory to its shadow memory (e.g. 16TB
+to cover 128TB on x86_64) and uses direct mapping with a scale and offset to
+translate a memory address to its corresponding shadow address.
 
 Here is the function which translates an address to its corresponding shadow
 address::
@@ -162,12 +180,38 @@
 
 where ``KASAN_SHADOW_SCALE_SHIFT = 3``.
 
-Compile-time instrumentation used for checking memory accesses. Compiler inserts
-function calls (__asan_load*(addr), __asan_store*(addr)) before each memory
-access of size 1, 2, 4, 8 or 16. These functions check whether memory access is
-valid or not by checking corresponding shadow memory.
+Compile-time instrumentation is used to insert memory access checks. Compiler
+inserts function calls (__asan_load*(addr), __asan_store*(addr)) before each
+memory access of size 1, 2, 4, 8 or 16. These functions check whether memory
+access is valid or not by checking corresponding shadow memory.
 
 GCC 5.0 has possibility to perform inline instrumentation. Instead of making
 function calls GCC directly inserts the code to check the shadow memory.
 This option significantly enlarges kernel but it gives x1.1-x2 performance
 boost over outline instrumented kernel.
+
+Software tag-based KASAN
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+Tag-based KASAN uses the Top Byte Ignore (TBI) feature of modern arm64 CPUs to
+store a pointer tag in the top byte of kernel pointers. Like generic KASAN it
+uses shadow memory to store memory tags associated with each 16-byte memory
+cell (therefore it dedicates 1/16th of the kernel memory for shadow memory).
+
+On each memory allocation tag-based KASAN generates a random tag, tags the
+allocated memory with this tag, and embeds this tag into the returned pointer.
+Software tag-based KASAN uses compile-time instrumentation to insert checks
+before each memory access. These checks make sure that tag of the memory that
+is being accessed is equal to tag of the pointer that is used to access this
+memory. In case of a tag mismatch tag-based KASAN prints a bug report.
+
+Software tag-based KASAN also has two instrumentation modes (outline, that
+emits callbacks to check memory accesses; and inline, that performs the shadow
+memory checks inline). With outline instrumentation mode, a bug report is
+simply printed from the function that performs the access check. With inline
+instrumentation a brk instruction is emitted by the compiler, and a dedicated
+brk handler is used to print bug reports.
+
+A potential expansion of this mode is a hardware tag-based mode, which would
+use hardware memory tagging support instead of compiler instrumentation and
+manual shadow memory manipulation.
diff --git a/Documentation/dontdiff b/Documentation/dontdiff
index 2228fcc..2e2e52c 100644
--- a/Documentation/dontdiff
+++ b/Documentation/dontdiff
@@ -177,6 +177,7 @@
 mkregtable
 mktables
 mktree
+mkutf8data
 modpost
 modules.builtin
 modules.order
@@ -255,6 +256,7 @@
 wanxlfw.inc
 uImage
 unifdef
+utf8data.h
 wakeup.bin
 wakeup.elf
 wakeup.lds
diff --git a/Documentation/driver-api/device_link.rst b/Documentation/driver-api/device_link.rst
index d676327..7c2b704 100644
--- a/Documentation/driver-api/device_link.rst
+++ b/Documentation/driver-api/device_link.rst
@@ -242,7 +242,8 @@
   :c:func:`driver_bound()`.)
 
 * Before a consumer device is probed, presence of supplier drivers is
-  verified by checking that links to suppliers are in ``DL_STATE_AVAILABLE``
+  verified by checking the consumer device is not in the wait_for_suppliers
+  list and by checking that links to suppliers are in ``DL_STATE_AVAILABLE``
   state.  The state of the links is updated to ``DL_STATE_CONSUMER_PROBE``.
   (Call to :c:func:`device_links_check_suppliers()` from
   :c:func:`really_probe()`.)
diff --git a/Documentation/driver-model/driver.txt b/Documentation/driver-model/driver.txt
index d661e6f..4398550 100644
--- a/Documentation/driver-model/driver.txt
+++ b/Documentation/driver-model/driver.txt
@@ -164,6 +164,49 @@
 the driver did not bind to this device, in which case it should have
 released all resources it allocated.
 
+	void (*sync_state)(struct device *dev);
+
+sync_state is called only once for a device. It's called when all the consumer
+devices of the device have successfully probed. The list of consumers of the
+device is obtained by looking at the device links connecting that device to its
+consumer devices.
+
+The first attempt to call sync_state() is made during late_initcall_sync() to
+give firmware and drivers time to link devices to each other. During the first
+attempt at calling sync_state(), if all the consumers of the device at that
+point in time have already probed successfully, sync_state() is called right
+away. If there are no consumers of the device during the first attempt, that
+too is considered as "all consumers of the device have probed" and sync_state()
+is called right away.
+
+If during the first attempt at calling sync_state() for a device, there are
+still consumers that haven't probed successfully, the sync_state() call is
+postponed and reattempted in the future only when one or more consumers of the
+device probe successfully. If during the reattempt, the driver core finds that
+there are one or more consumers of the device that haven't probed yet, then
+sync_state() call is postponed again.
+
+A typical use case for sync_state() is to have the kernel cleanly take over
+management of devices from the bootloader. For example, if a device is left on
+and at a particular hardware configuration by the bootloader, the device's
+driver might need to keep the device in the boot configuration until all the
+consumers of the device have probed. Once all the consumers of the device have
+probed, the device's driver can synchronize the hardware state of the device to
+match the aggregated software state requested by all the consumers. Hence the
+name sync_state().
+
+While obvious examples of resources that can benefit from sync_state() include
+resources such as regulator, sync_state() can also be useful for complex
+resources like IOMMUs. For example, IOMMUs with multiple consumers (devices
+whose addresses are remapped by the IOMMU) might need to keep their mappings
+fixed at (or additive to) the boot configuration until all its consumers have
+probed.
+
+While the typical use case for sync_state() is to have the kernel cleanly take
+over management of devices from the bootloader, the usage of sync_state() is
+not restricted to that. Use it whenever it makes sense to take an action after
+all the consumers of a device have probed.
+
 	int 	(*remove)	(struct device * dev);
 
 remove is called to unbind a driver from a device. This may be
diff --git a/Documentation/filesystems/ext4/ondisk/overview.rst b/Documentation/filesystems/ext4/ondisk/overview.rst
index cbab18b..123ebfd 100644
--- a/Documentation/filesystems/ext4/ondisk/overview.rst
+++ b/Documentation/filesystems/ext4/ondisk/overview.rst
@@ -24,3 +24,4 @@
 .. include:: bigalloc.rst
 .. include:: inlinedata.rst
 .. include:: eainode.rst
+.. include:: verity.rst
diff --git a/Documentation/filesystems/ext4/verity.rst b/Documentation/filesystems/ext4/verity.rst
new file mode 100644
index 0000000..3e4c0ee
--- /dev/null
+++ b/Documentation/filesystems/ext4/verity.rst
@@ -0,0 +1,41 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+Verity files
+------------
+
+ext4 supports fs-verity, which is a filesystem feature that provides
+Merkle tree based hashing for individual readonly files.  Most of
+fs-verity is common to all filesystems that support it; see
+:ref:`Documentation/filesystems/fsverity.rst <fsverity>` for the
+fs-verity documentation.  However, the on-disk layout of the verity
+metadata is filesystem-specific.  On ext4, the verity metadata is
+stored after the end of the file data itself, in the following format:
+
+- Zero-padding to the next 65536-byte boundary.  This padding need not
+  actually be allocated on-disk, i.e. it may be a hole.
+
+- The Merkle tree, as documented in
+  :ref:`Documentation/filesystems/fsverity.rst
+  <fsverity_merkle_tree>`, with the tree levels stored in order from
+  root to leaf, and the tree blocks within each level stored in their
+  natural order.
+
+- Zero-padding to the next filesystem block boundary.
+
+- The verity descriptor, as documented in
+  :ref:`Documentation/filesystems/fsverity.rst <fsverity_descriptor>`,
+  with optionally appended signature blob.
+
+- Zero-padding to the next offset that is 4 bytes before a filesystem
+  block boundary.
+
+- The size of the verity descriptor in bytes, as a 4-byte little
+  endian integer.
+
+Verity inodes have EXT4_VERITY_FL set, and they must use extents, i.e.
+EXT4_EXTENTS_FL must be set and EXT4_INLINE_DATA_FL must be clear.
+They can have EXT4_ENCRYPT_FL set, in which case the verity metadata
+is encrypted as well as the data itself.
+
+Verity files cannot have blocks allocated past the end of the verity
+metadata.
diff --git a/Documentation/filesystems/f2fs.txt b/Documentation/filesystems/f2fs.txt
index f7b5e4f..3135b80 100644
--- a/Documentation/filesystems/f2fs.txt
+++ b/Documentation/filesystems/f2fs.txt
@@ -157,6 +157,11 @@
                        enabled by default.
 data_flush             Enable data flushing before checkpoint in order to
                        persist data of regular and symlink.
+reserve_root=%d        Support configuring reserved space which is used for
+                       allocation from a privileged user with specified uid or
+                       gid, unit: 4KB, the default limit is 0.2% of user blocks.
+resuid=%d              The user ID which may use the reserved blocks.
+resgid=%d              The group ID which may use the reserved blocks.
 fault_injection=%d     Enable fault injection in all supported types with
                        specified injection rate.
 fault_type=%d          Support configuring fault injection type, should be
@@ -214,11 +219,22 @@
                        non-atomic files likewise "nobarrier" mount option.
 test_dummy_encryption  Enable dummy encryption, which provides a fake fscrypt
                        context. The fake fscrypt context is used by xfstests.
-checkpoint=%s          Set to "disable" to turn off checkpointing. Set to "enable"
+checkpoint=%s[:%u[%]]     Set to "disable" to turn off checkpointing. Set to "enable"
                        to reenable checkpointing. Is enabled by default. While
                        disabled, any unmounting or unexpected shutdowns will cause
                        the filesystem contents to appear as they did when the
                        filesystem was mounted with that option.
+                       While mounting with checkpoint=disabled, the filesystem must
+                       run garbage collection to ensure that all available space can
+                       be used. If this takes too much time, the mount may return
+                       EAGAIN. You may optionally add a value to indicate how much
+                       of the disk you would be willing to temporarily give up to
+                       avoid additional garbage collection. This can be given as a
+                       number of blocks, or as a percent. For instance, mounting
+                       with checkpoint=disable:100% would always succeed, but it may
+                       hide up to all remaining free space. The actual space that
+                       would be unusable can be viewed at /sys/fs/f2fs/<disk>/unusable
+                       This space is reclaimed once checkpoint=enable.
 
 ================================================================================
 DEBUGFS ENTRIES
@@ -246,11 +262,14 @@
 ..............................................................................
  File                         Content
 
- gc_max_sleep_time            This tuning parameter controls the maximum sleep
+ gc_urgent_sleep_time         This parameter controls sleep time for gc_urgent.
+                              500 ms is set by default. See above gc_urgent.
+
+ gc_min_sleep_time            This tuning parameter controls the minimum sleep
                               time for the garbage collection thread. Time is
                               in milliseconds.
 
- gc_min_sleep_time            This tuning parameter controls the minimum sleep
+ gc_max_sleep_time            This tuning parameter controls the maximum sleep
                               time for the garbage collection thread. Time is
                               in milliseconds.
 
@@ -270,9 +289,6 @@
                               to 1, background thread starts to do GC by given
                               gc_urgent_sleep_time interval.
 
- gc_urgent_sleep_time         This parameter controls sleep time for gc_urgent.
-                              500 ms is set by default. See above gc_urgent.
-
  reclaim_segments             This parameter controls the number of prefree
                               segments to be reclaimed. If the number of prefree
 			      segments is larger than the number of segments
@@ -281,13 +297,25 @@
 			      reclaim the prefree segments to free segments.
 			      By default, 5% over total # of segments.
 
+ main_blkaddr                 This value gives the first block address of
+			      MAIN area in the partition.
+
  max_small_discards	      This parameter controls the number of discard
 			      commands that consist small blocks less than 2MB.
 			      The candidates to be discarded are cached until
 			      checkpoint is triggered, and issued during the
 			      checkpoint. By default, it is disabled with 0.
 
- trim_sections                This parameter controls the number of sections
+ discard_granularity	      This parameter controls the granularity of discard
+			      command size. It will issue discard commands iif
+			      the size is larger than given granularity. Its
+			      unit size is 4KB, and 4 (=16KB) is set by default.
+			      The maximum value is 128 (=512KB).
+
+ reserved_blocks	      This parameter indicates the number of blocks that
+			      f2fs reserves internally for root.
+
+ batched_trim_sections	      This parameter controls the number of sections
                               to be trimmed out in batch mode when FITRIM
                               conducts. 32 sections is set by default.
 
@@ -309,11 +337,35 @@
 			      the number is less than this value, it triggers
 			      in-place-updates.
 
+ min_seq_blocks		      This parameter controls the threshold to serialize
+			      write IOs issued by multiple threads in parallel.
+
+ min_hot_blocks		      This parameter controls the threshold to allocate
+			      a hot data log for pending data blocks to write.
+
+ min_ssr_sections	      This parameter adds the threshold when deciding
+			      SSR block allocation. If this is large, SSR mode
+			      will be enabled early.
+
+ ram_thresh                   This parameter controls the memory footprint used
+			      by free nids and cached nat entries. By default,
+			      1 is set, which indicates 10 MB / 1 GB RAM.
+
+ ra_nid_pages		      When building free nids, F2FS reads NAT blocks
+			      ahead for speed up. Default is 0.
+
+ dirty_nats_ratio	      Given dirty ratio of cached nat entries, F2FS
+			      determines flushing them in background.
+
  max_victim_search	      This parameter controls the number of trials to
 			      find a victim segment when conducting SSR and
 			      cleaning operations. The default value is 4096
 			      which covers 8GB block address range.
 
+ migration_granularity	      For large-sized sections, F2FS can stop GC given
+			      this granularity instead of reclaiming entire
+			      section.
+
  dir_level                    This parameter controls the directory level to
 			      support large directory. If a directory has a
 			      number of files, it can reduce the file lookup
@@ -321,9 +373,56 @@
 			      Otherwise, it needs to decrease this value to
 			      reduce the space overhead. The default value is 0.
 
- ram_thresh                   This parameter controls the memory footprint used
-			      by free nids and cached nat entries. By default,
-			      10 is set, which indicates 10 MB / 1 GB RAM.
+ cp_interval		      F2FS tries to do checkpoint periodically, 60 secs
+			      by default.
+
+ idle_interval		      F2FS detects system is idle, if there's no F2FS
+			      operations during given interval, 5 secs by
+			      default.
+
+ discard_idle_interval	      F2FS detects the discard thread is idle, given
+			      time interval. Default is 5 secs.
+
+ gc_idle_interval	      F2FS detects the GC thread is idle, given time
+			      interval. Default is 5 secs.
+
+ umount_discard_timeout       When unmounting the disk, F2FS waits for finishing
+			      queued discard commands which can take huge time.
+			      This gives time out for it, 5 secs by default.
+
+ iostat_enable		      This controls to enable/disable iostat in F2FS.
+
+ readdir_ra		      This enables/disabled readahead of inode blocks
+			      in readdir, and default is enabled.
+
+ gc_pin_file_thresh	      This indicates how many GC can be failed for the
+			      pinned file. If it exceeds this, F2FS doesn't
+			      guarantee its pinning state. 2048 trials is set
+			      by default.
+
+ extension_list		      This enables to change extension_list for hot/cold
+			      files in runtime.
+
+ inject_rate		      This controls injection rate of arbitrary faults.
+
+ inject_type		      This controls injection type of arbitrary faults.
+
+ dirty_segments 	      This shows # of dirty segments.
+
+ lifetime_write_kbytes	      This shows # of data written to the disk.
+
+ features		      This shows current features enabled on F2FS.
+
+ current_reserved_blocks      This shows # of blocks currently reserved.
+
+ unusable                     If checkpoint=disable, this shows the number of
+                              blocks that are unusable.
+                              If checkpoint=enable it shows the number of blocks
+                              that would be unusable if checkpoint=disable were
+                              to be set.
+
+encoding 	              This shows the encoding used for casefolding.
+                              If casefolding is not enabled, returns (none)
 
 ================================================================================
 USAGE
@@ -716,3 +815,28 @@
 WRITE_LIFE_NONE       "                        WRITE_LIFE_NONE
 WRITE_LIFE_MEDIUM     "                        WRITE_LIFE_MEDIUM
 WRITE_LIFE_LONG       "                        WRITE_LIFE_LONG
+
+Fallocate(2) Policy
+-------------------
+
+The default policy follows the below posix rule.
+
+Allocating disk space
+    The default operation (i.e., mode is zero) of fallocate() allocates
+    the disk space within the range specified by offset and len.  The
+    file size (as reported by stat(2)) will be changed if offset+len is
+    greater than the file size.  Any subregion within the range specified
+    by offset and len that did not contain data before the call will be
+    initialized to zero.  This default behavior closely resembles the
+    behavior of the posix_fallocate(3) library function, and is intended
+    as a method of optimally implementing that function.
+
+However, once F2FS receives ioctl(fd, F2FS_IOC_SET_PIN_FILE) in prior to
+fallocate(fd, DEFAULT_MODE), it allocates on-disk blocks addressess having
+zero or random data, which is useful to the below scenario where:
+ 1. create(fd)
+ 2. ioctl(fd, F2FS_IOC_SET_PIN_FILE)
+ 3. fallocate(fd, 0, 0, size)
+ 4. address = fibmap(fd, offset)
+ 5. open(blkdev)
+ 6. write(blkdev, address)
diff --git a/Documentation/filesystems/fscrypt.rst b/Documentation/filesystems/fscrypt.rst
index 08c23b6..82efa41 100644
--- a/Documentation/filesystems/fscrypt.rst
+++ b/Documentation/filesystems/fscrypt.rst
@@ -191,7 +191,9 @@
 If unsure, you should use the (AES-256-XTS, AES-256-CTS-CBC) pair.
 
 AES-128-CBC was added only for low-powered embedded devices with
-crypto accelerators such as CAAM or CESA that do not support XTS.
+crypto accelerators such as CAAM or CESA that do not support XTS.  To
+use AES-128-CBC, CONFIG_CRYPTO_SHA256 (or another SHA-256
+implementation) must be enabled so that ESSIV can be used.
 
 Adiantum is a (primarily) stream cipher-based mode that is fast even
 on CPUs without dedicated crypto instructions.  It's also a true
@@ -647,3 +649,42 @@
 without the key is subject to change in the future.  It is only meant
 as a way to temporarily present valid filenames so that commands like
 ``rm -r`` work as expected on encrypted directories.
+
+Tests
+=====
+
+To test fscrypt, use xfstests, which is Linux's de facto standard
+filesystem test suite.  First, run all the tests in the "encrypt"
+group on the relevant filesystem(s).  For example, to test ext4 and
+f2fs encryption using `kvm-xfstests
+<https://github.com/tytso/xfstests-bld/blob/master/Documentation/kvm-quickstart.md>`_::
+
+    kvm-xfstests -c ext4,f2fs -g encrypt
+
+UBIFS encryption can also be tested this way, but it should be done in
+a separate command, and it takes some time for kvm-xfstests to set up
+emulated UBI volumes::
+
+    kvm-xfstests -c ubifs -g encrypt
+
+No tests should fail.  However, tests that use non-default encryption
+modes (e.g. generic/549 and generic/550) will be skipped if the needed
+algorithms were not built into the kernel's crypto API.  Also, tests
+that access the raw block device (e.g. generic/399, generic/548,
+generic/549, generic/550) will be skipped on UBIFS.
+
+Besides running the "encrypt" group tests, for ext4 and f2fs it's also
+possible to run most xfstests with the "test_dummy_encryption" mount
+option.  This option causes all new files to be automatically
+encrypted with a dummy key, without having to make any API calls.
+This tests the encrypted I/O paths more thoroughly.  To do this with
+kvm-xfstests, use the "encrypt" filesystem configuration::
+
+    kvm-xfstests -c ext4/encrypt,f2fs/encrypt -g auto
+
+Because this runs many more tests than "-g encrypt" does, it takes
+much longer to run; so also consider using `gce-xfstests
+<https://github.com/tytso/xfstests-bld/blob/master/Documentation/gce-xfstests.md>`_
+instead of kvm-xfstests::
+
+    gce-xfstests -c ext4/encrypt,f2fs/encrypt -g auto
diff --git a/Documentation/filesystems/fsverity.rst b/Documentation/filesystems/fsverity.rst
new file mode 100644
index 0000000..42a0b6d
--- /dev/null
+++ b/Documentation/filesystems/fsverity.rst
@@ -0,0 +1,726 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+.. _fsverity:
+
+=======================================================
+fs-verity: read-only file-based authenticity protection
+=======================================================
+
+Introduction
+============
+
+fs-verity (``fs/verity/``) is a support layer that filesystems can
+hook into to support transparent integrity and authenticity protection
+of read-only files.  Currently, it is supported by the ext4 and f2fs
+filesystems.  Like fscrypt, not too much filesystem-specific code is
+needed to support fs-verity.
+
+fs-verity is similar to `dm-verity
+<https://www.kernel.org/doc/Documentation/device-mapper/verity.txt>`_
+but works on files rather than block devices.  On regular files on
+filesystems supporting fs-verity, userspace can execute an ioctl that
+causes the filesystem to build a Merkle tree for the file and persist
+it to a filesystem-specific location associated with the file.
+
+After this, the file is made readonly, and all reads from the file are
+automatically verified against the file's Merkle tree.  Reads of any
+corrupted data, including mmap reads, will fail.
+
+Userspace can use another ioctl to retrieve the root hash (actually
+the "file measurement", which is a hash that includes the root hash)
+that fs-verity is enforcing for the file.  This ioctl executes in
+constant time, regardless of the file size.
+
+fs-verity is essentially a way to hash a file in constant time,
+subject to the caveat that reads which would violate the hash will
+fail at runtime.
+
+Use cases
+=========
+
+By itself, the base fs-verity feature only provides integrity
+protection, i.e. detection of accidental (non-malicious) corruption.
+
+However, because fs-verity makes retrieving the file hash extremely
+efficient, it's primarily meant to be used as a tool to support
+authentication (detection of malicious modifications) or auditing
+(logging file hashes before use).
+
+Trusted userspace code (e.g. operating system code running on a
+read-only partition that is itself authenticated by dm-verity) can
+authenticate the contents of an fs-verity file by using the
+`FS_IOC_MEASURE_VERITY`_ ioctl to retrieve its hash, then verifying a
+digital signature of it.
+
+A standard file hash could be used instead of fs-verity.  However,
+this is inefficient if the file is large and only a small portion may
+be accessed.  This is often the case for Android application package
+(APK) files, for example.  These typically contain many translations,
+classes, and other resources that are infrequently or even never
+accessed on a particular device.  It would be slow and wasteful to
+read and hash the entire file before starting the application.
+
+Unlike an ahead-of-time hash, fs-verity also re-verifies data each
+time it's paged in.  This ensures that malicious disk firmware can't
+undetectably change the contents of the file at runtime.
+
+fs-verity does not replace or obsolete dm-verity.  dm-verity should
+still be used on read-only filesystems.  fs-verity is for files that
+must live on a read-write filesystem because they are independently
+updated and potentially user-installed, so dm-verity cannot be used.
+
+The base fs-verity feature is a hashing mechanism only; actually
+authenticating the files is up to userspace.  However, to meet some
+users' needs, fs-verity optionally supports a simple signature
+verification mechanism where users can configure the kernel to require
+that all fs-verity files be signed by a key loaded into a keyring; see
+`Built-in signature verification`_.  Support for fs-verity file hashes
+in IMA (Integrity Measurement Architecture) policies is also planned.
+
+User API
+========
+
+FS_IOC_ENABLE_VERITY
+--------------------
+
+The FS_IOC_ENABLE_VERITY ioctl enables fs-verity on a file.  It takes
+in a pointer to a :c:type:`struct fsverity_enable_arg`, defined as
+follows::
+
+    struct fsverity_enable_arg {
+            __u32 version;
+            __u32 hash_algorithm;
+            __u32 block_size;
+            __u32 salt_size;
+            __u64 salt_ptr;
+            __u32 sig_size;
+            __u32 __reserved1;
+            __u64 sig_ptr;
+            __u64 __reserved2[11];
+    };
+
+This structure contains the parameters of the Merkle tree to build for
+the file, and optionally contains a signature.  It must be initialized
+as follows:
+
+- ``version`` must be 1.
+- ``hash_algorithm`` must be the identifier for the hash algorithm to
+  use for the Merkle tree, such as FS_VERITY_HASH_ALG_SHA256.  See
+  ``include/uapi/linux/fsverity.h`` for the list of possible values.
+- ``block_size`` must be the Merkle tree block size.  Currently, this
+  must be equal to the system page size, which is usually 4096 bytes.
+  Other sizes may be supported in the future.  This value is not
+  necessarily the same as the filesystem block size.
+- ``salt_size`` is the size of the salt in bytes, or 0 if no salt is
+  provided.  The salt is a value that is prepended to every hashed
+  block; it can be used to personalize the hashing for a particular
+  file or device.  Currently the maximum salt size is 32 bytes.
+- ``salt_ptr`` is the pointer to the salt, or NULL if no salt is
+  provided.
+- ``sig_size`` is the size of the signature in bytes, or 0 if no
+  signature is provided.  Currently the signature is (somewhat
+  arbitrarily) limited to 16128 bytes.  See `Built-in signature
+  verification`_ for more information.
+- ``sig_ptr``  is the pointer to the signature, or NULL if no
+  signature is provided.
+- All reserved fields must be zeroed.
+
+FS_IOC_ENABLE_VERITY causes the filesystem to build a Merkle tree for
+the file and persist it to a filesystem-specific location associated
+with the file, then mark the file as a verity file.  This ioctl may
+take a long time to execute on large files, and it is interruptible by
+fatal signals.
+
+FS_IOC_ENABLE_VERITY checks for write access to the inode.  However,
+it must be executed on an O_RDONLY file descriptor and no processes
+can have the file open for writing.  Attempts to open the file for
+writing while this ioctl is executing will fail with ETXTBSY.  (This
+is necessary to guarantee that no writable file descriptors will exist
+after verity is enabled, and to guarantee that the file's contents are
+stable while the Merkle tree is being built over it.)
+
+On success, FS_IOC_ENABLE_VERITY returns 0, and the file becomes a
+verity file.  On failure (including the case of interruption by a
+fatal signal), no changes are made to the file.
+
+FS_IOC_ENABLE_VERITY can fail with the following errors:
+
+- ``EACCES``: the process does not have write access to the file
+- ``EBADMSG``: the signature is malformed
+- ``EBUSY``: this ioctl is already running on the file
+- ``EEXIST``: the file already has verity enabled
+- ``EFAULT``: the caller provided inaccessible memory
+- ``EINTR``: the operation was interrupted by a fatal signal
+- ``EINVAL``: unsupported version, hash algorithm, or block size; or
+  reserved bits are set; or the file descriptor refers to neither a
+  regular file nor a directory.
+- ``EISDIR``: the file descriptor refers to a directory
+- ``EKEYREJECTED``: the signature doesn't match the file
+- ``EMSGSIZE``: the salt or signature is too long
+- ``ENOKEY``: the fs-verity keyring doesn't contain the certificate
+  needed to verify the signature
+- ``ENOPKG``: fs-verity recognizes the hash algorithm, but it's not
+  available in the kernel's crypto API as currently configured (e.g.
+  for SHA-512, missing CONFIG_CRYPTO_SHA512).
+- ``ENOTTY``: this type of filesystem does not implement fs-verity
+- ``EOPNOTSUPP``: the kernel was not configured with fs-verity
+  support; or the filesystem superblock has not had the 'verity'
+  feature enabled on it; or the filesystem does not support fs-verity
+  on this file.  (See `Filesystem support`_.)
+- ``EPERM``: the file is append-only; or, a signature is required and
+  one was not provided.
+- ``EROFS``: the filesystem is read-only
+- ``ETXTBSY``: someone has the file open for writing.  This can be the
+  caller's file descriptor, another open file descriptor, or the file
+  reference held by a writable memory map.
+
+FS_IOC_MEASURE_VERITY
+---------------------
+
+The FS_IOC_MEASURE_VERITY ioctl retrieves the measurement of a verity
+file.  The file measurement is a digest that cryptographically
+identifies the file contents that are being enforced on reads.
+
+This ioctl takes in a pointer to a variable-length structure::
+
+    struct fsverity_digest {
+            __u16 digest_algorithm;
+            __u16 digest_size; /* input/output */
+            __u8 digest[];
+    };
+
+``digest_size`` is an input/output field.  On input, it must be
+initialized to the number of bytes allocated for the variable-length
+``digest`` field.
+
+On success, 0 is returned and the kernel fills in the structure as
+follows:
+
+- ``digest_algorithm`` will be the hash algorithm used for the file
+  measurement.  It will match ``fsverity_enable_arg::hash_algorithm``.
+- ``digest_size`` will be the size of the digest in bytes, e.g. 32
+  for SHA-256.  (This can be redundant with ``digest_algorithm``.)
+- ``digest`` will be the actual bytes of the digest.
+
+FS_IOC_MEASURE_VERITY is guaranteed to execute in constant time,
+regardless of the size of the file.
+
+FS_IOC_MEASURE_VERITY can fail with the following errors:
+
+- ``EFAULT``: the caller provided inaccessible memory
+- ``ENODATA``: the file is not a verity file
+- ``ENOTTY``: this type of filesystem does not implement fs-verity
+- ``EOPNOTSUPP``: the kernel was not configured with fs-verity
+  support, or the filesystem superblock has not had the 'verity'
+  feature enabled on it.  (See `Filesystem support`_.)
+- ``EOVERFLOW``: the digest is longer than the specified
+  ``digest_size`` bytes.  Try providing a larger buffer.
+
+FS_IOC_GETFLAGS
+---------------
+
+The existing ioctl FS_IOC_GETFLAGS (which isn't specific to fs-verity)
+can also be used to check whether a file has fs-verity enabled or not.
+To do so, check for FS_VERITY_FL (0x00100000) in the returned flags.
+
+The verity flag is not settable via FS_IOC_SETFLAGS.  You must use
+FS_IOC_ENABLE_VERITY instead, since parameters must be provided.
+
+Accessing verity files
+======================
+
+Applications can transparently access a verity file just like a
+non-verity one, with the following exceptions:
+
+- Verity files are readonly.  They cannot be opened for writing or
+  truncate()d, even if the file mode bits allow it.  Attempts to do
+  one of these things will fail with EPERM.  However, changes to
+  metadata such as owner, mode, timestamps, and xattrs are still
+  allowed, since these are not measured by fs-verity.  Verity files
+  can also still be renamed, deleted, and linked to.
+
+- Direct I/O is not supported on verity files.  Attempts to use direct
+  I/O on such files will fall back to buffered I/O.
+
+- DAX (Direct Access) is not supported on verity files, because this
+  would circumvent the data verification.
+
+- Reads of data that doesn't match the verity Merkle tree will fail
+  with EIO (for read()) or SIGBUS (for mmap() reads).
+
+- If the sysctl "fs.verity.require_signatures" is set to 1 and the
+  file's verity measurement is not signed by a key in the fs-verity
+  keyring, then opening the file will fail.  See `Built-in signature
+  verification`_.
+
+Direct access to the Merkle tree is not supported.  Therefore, if a
+verity file is copied, or is backed up and restored, then it will lose
+its "verity"-ness.  fs-verity is primarily meant for files like
+executables that are managed by a package manager.
+
+File measurement computation
+============================
+
+This section describes how fs-verity hashes the file contents using a
+Merkle tree to produce the "file measurement" which cryptographically
+identifies the file contents.  This algorithm is the same for all
+filesystems that support fs-verity.
+
+Userspace only needs to be aware of this algorithm if it needs to
+compute the file measurement itself, e.g. in order to sign the file.
+
+.. _fsverity_merkle_tree:
+
+Merkle tree
+-----------
+
+The file contents is divided into blocks, where the block size is
+configurable but is usually 4096 bytes.  The end of the last block is
+zero-padded if needed.  Each block is then hashed, producing the first
+level of hashes.  Then, the hashes in this first level are grouped
+into 'blocksize'-byte blocks (zero-padding the ends as needed) and
+these blocks are hashed, producing the second level of hashes.  This
+proceeds up the tree until only a single block remains.  The hash of
+this block is the "Merkle tree root hash".
+
+If the file fits in one block and is nonempty, then the "Merkle tree
+root hash" is simply the hash of the single data block.  If the file
+is empty, then the "Merkle tree root hash" is all zeroes.
+
+The "blocks" here are not necessarily the same as "filesystem blocks".
+
+If a salt was specified, then it's zero-padded to the closest multiple
+of the input size of the hash algorithm's compression function, e.g.
+64 bytes for SHA-256 or 128 bytes for SHA-512.  The padded salt is
+prepended to every data or Merkle tree block that is hashed.
+
+The purpose of the block padding is to cause every hash to be taken
+over the same amount of data, which simplifies the implementation and
+keeps open more possibilities for hardware acceleration.  The purpose
+of the salt padding is to make the salting "free" when the salted hash
+state is precomputed, then imported for each hash.
+
+Example: in the recommended configuration of SHA-256 and 4K blocks,
+128 hash values fit in each block.  Thus, each level of the Merkle
+tree is approximately 128 times smaller than the previous, and for
+large files the Merkle tree's size converges to approximately 1/127 of
+the original file size.  However, for small files, the padding is
+significant, making the space overhead proportionally more.
+
+.. _fsverity_descriptor:
+
+fs-verity descriptor
+--------------------
+
+By itself, the Merkle tree root hash is ambiguous.  For example, it
+can't a distinguish a large file from a small second file whose data
+is exactly the top-level hash block of the first file.  Ambiguities
+also arise from the convention of padding to the next block boundary.
+
+To solve this problem, the verity file measurement is actually
+computed as a hash of the following structure, which contains the
+Merkle tree root hash as well as other fields such as the file size::
+
+    struct fsverity_descriptor {
+            __u8 version;           /* must be 1 */
+            __u8 hash_algorithm;    /* Merkle tree hash algorithm */
+            __u8 log_blocksize;     /* log2 of size of data and tree blocks */
+            __u8 salt_size;         /* size of salt in bytes; 0 if none */
+            __le32 sig_size;        /* must be 0 */
+            __le64 data_size;       /* size of file the Merkle tree is built over */
+            __u8 root_hash[64];     /* Merkle tree root hash */
+            __u8 salt[32];          /* salt prepended to each hashed block */
+            __u8 __reserved[144];   /* must be 0's */
+    };
+
+Note that the ``sig_size`` field must be set to 0 for the purpose of
+computing the file measurement, even if a signature was provided (or
+will be provided) to `FS_IOC_ENABLE_VERITY`_.
+
+Built-in signature verification
+===============================
+
+With CONFIG_FS_VERITY_BUILTIN_SIGNATURES=y, fs-verity supports putting
+a portion of an authentication policy (see `Use cases`_) in the
+kernel.  Specifically, it adds support for:
+
+1. At fs-verity module initialization time, a keyring ".fs-verity" is
+   created.  The root user can add trusted X.509 certificates to this
+   keyring using the add_key() system call, then (when done)
+   optionally use keyctl_restrict_keyring() to prevent additional
+   certificates from being added.
+
+2. `FS_IOC_ENABLE_VERITY`_ accepts a pointer to a PKCS#7 formatted
+   detached signature in DER format of the file measurement.  On
+   success, this signature is persisted alongside the Merkle tree.
+   Then, any time the file is opened, the kernel will verify the
+   file's actual measurement against this signature, using the
+   certificates in the ".fs-verity" keyring.
+
+3. A new sysctl "fs.verity.require_signatures" is made available.
+   When set to 1, the kernel requires that all verity files have a
+   correctly signed file measurement as described in (2).
+
+File measurements must be signed in the following format, which is
+similar to the structure used by `FS_IOC_MEASURE_VERITY`_::
+
+    struct fsverity_signed_digest {
+            char magic[8];                  /* must be "FSVerity" */
+            __le16 digest_algorithm;
+            __le16 digest_size;
+            __u8 digest[];
+    };
+
+fs-verity's built-in signature verification support is meant as a
+relatively simple mechanism that can be used to provide some level of
+authenticity protection for verity files, as an alternative to doing
+the signature verification in userspace or using IMA-appraisal.
+However, with this mechanism, userspace programs still need to check
+that the verity bit is set, and there is no protection against verity
+files being swapped around.
+
+Filesystem support
+==================
+
+fs-verity is currently supported by the ext4 and f2fs filesystems.
+The CONFIG_FS_VERITY kconfig option must be enabled to use fs-verity
+on either filesystem.
+
+``include/linux/fsverity.h`` declares the interface between the
+``fs/verity/`` support layer and filesystems.  Briefly, filesystems
+must provide an ``fsverity_operations`` structure that provides
+methods to read and write the verity metadata to a filesystem-specific
+location, including the Merkle tree blocks and
+``fsverity_descriptor``.  Filesystems must also call functions in
+``fs/verity/`` at certain times, such as when a file is opened or when
+pages have been read into the pagecache.  (See `Verifying data`_.)
+
+ext4
+----
+
+ext4 supports fs-verity since Linux TODO and e2fsprogs v1.45.2.
+
+To create verity files on an ext4 filesystem, the filesystem must have
+been formatted with ``-O verity`` or had ``tune2fs -O verity`` run on
+it.  "verity" is an RO_COMPAT filesystem feature, so once set, old
+kernels will only be able to mount the filesystem readonly, and old
+versions of e2fsck will be unable to check the filesystem.  Moreover,
+currently ext4 only supports mounting a filesystem with the "verity"
+feature when its block size is equal to PAGE_SIZE (often 4096 bytes).
+
+ext4 sets the EXT4_VERITY_FL on-disk inode flag on verity files.  It
+can only be set by `FS_IOC_ENABLE_VERITY`_, and it cannot be cleared.
+
+ext4 also supports encryption, which can be used simultaneously with
+fs-verity.  In this case, the plaintext data is verified rather than
+the ciphertext.  This is necessary in order to make the file
+measurement meaningful, since every file is encrypted differently.
+
+ext4 stores the verity metadata (Merkle tree and fsverity_descriptor)
+past the end of the file, starting at the first 64K boundary beyond
+i_size.  This approach works because (a) verity files are readonly,
+and (b) pages fully beyond i_size aren't visible to userspace but can
+be read/written internally by ext4 with only some relatively small
+changes to ext4.  This approach avoids having to depend on the
+EA_INODE feature and on rearchitecturing ext4's xattr support to
+support paging multi-gigabyte xattrs into memory, and to support
+encrypting xattrs.  Note that the verity metadata *must* be encrypted
+when the file is, since it contains hashes of the plaintext data.
+
+Currently, ext4 verity only supports the case where the Merkle tree
+block size, filesystem block size, and page size are all the same.  It
+also only supports extent-based files.
+
+f2fs
+----
+
+f2fs supports fs-verity since Linux TODO and f2fs-tools v1.11.0.
+
+To create verity files on an f2fs filesystem, the filesystem must have
+been formatted with ``-O verity``.
+
+f2fs sets the FADVISE_VERITY_BIT on-disk inode flag on verity files.
+It can only be set by `FS_IOC_ENABLE_VERITY`_, and it cannot be
+cleared.
+
+Like ext4, f2fs stores the verity metadata (Merkle tree and
+fsverity_descriptor) past the end of the file, starting at the first
+64K boundary beyond i_size.  See explanation for ext4 above.
+Moreover, f2fs supports at most 4096 bytes of xattr entries per inode
+which wouldn't be enough for even a single Merkle tree block.
+
+Currently, f2fs verity only supports a Merkle tree block size of 4096.
+Also, f2fs doesn't support enabling verity on files that currently
+have atomic or volatile writes pending.
+
+Implementation details
+======================
+
+Verifying data
+--------------
+
+fs-verity ensures that all reads of a verity file's data are verified,
+regardless of which syscall is used to do the read (e.g. mmap(),
+read(), pread()) and regardless of whether it's the first read or a
+later read (unless the later read can return cached data that was
+already verified).  Below, we describe how filesystems implement this.
+
+Pagecache
+~~~~~~~~~
+
+For filesystems using Linux's pagecache, the ``->readpage()`` and
+``->readpages()`` methods must be modified to verify pages before they
+are marked Uptodate.  Merely hooking ``->read_iter()`` would be
+insufficient, since ``->read_iter()`` is not used for memory maps.
+
+Therefore, fs/verity/ provides a function fsverity_verify_page() which
+verifies a page that has been read into the pagecache of a verity
+inode, but is still locked and not Uptodate, so it's not yet readable
+by userspace.  As needed to do the verification,
+fsverity_verify_page() will call back into the filesystem to read
+Merkle tree pages via fsverity_operations::read_merkle_tree_page().
+
+fsverity_verify_page() returns false if verification failed; in this
+case, the filesystem must not set the page Uptodate.  Following this,
+as per the usual Linux pagecache behavior, attempts by userspace to
+read() from the part of the file containing the page will fail with
+EIO, and accesses to the page within a memory map will raise SIGBUS.
+
+fsverity_verify_page() currently only supports the case where the
+Merkle tree block size is equal to PAGE_SIZE (often 4096 bytes).
+
+In principle, fsverity_verify_page() verifies the entire path in the
+Merkle tree from the data page to the root hash.  However, for
+efficiency the filesystem may cache the hash pages.  Therefore,
+fsverity_verify_page() only ascends the tree reading hash pages until
+an already-verified hash page is seen, as indicated by the PageChecked
+bit being set.  It then verifies the path to that page.
+
+This optimization, which is also used by dm-verity, results in
+excellent sequential read performance.  This is because usually (e.g.
+127 in 128 times for 4K blocks and SHA-256) the hash page from the
+bottom level of the tree will already be cached and checked from
+reading a previous data page.  However, random reads perform worse.
+
+Block device based filesystems
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Block device based filesystems (e.g. ext4 and f2fs) in Linux also use
+the pagecache, so the above subsection applies too.  However, they
+also usually read many pages from a file at once, grouped into a
+structure called a "bio".  To make it easier for these types of
+filesystems to support fs-verity, fs/verity/ also provides a function
+fsverity_verify_bio() which verifies all pages in a bio.
+
+ext4 and f2fs also support encryption.  If a verity file is also
+encrypted, the pages must be decrypted before being verified.  To
+support this, these filesystems allocate a "post-read context" for
+each bio and store it in ``->bi_private``::
+
+    struct bio_post_read_ctx {
+           struct bio *bio;
+           struct work_struct work;
+           unsigned int cur_step;
+           unsigned int enabled_steps;
+    };
+
+``enabled_steps`` is a bitmask that specifies whether decryption,
+verity, or both is enabled.  After the bio completes, for each needed
+postprocessing step the filesystem enqueues the bio_post_read_ctx on a
+workqueue, and then the workqueue work does the decryption or
+verification.  Finally, pages where no decryption or verity error
+occurred are marked Uptodate, and the pages are unlocked.
+
+Files on ext4 and f2fs may contain holes.  Normally, ``->readpages()``
+simply zeroes holes and sets the corresponding pages Uptodate; no bios
+are issued.  To prevent this case from bypassing fs-verity, these
+filesystems use fsverity_verify_page() to verify hole pages.
+
+ext4 and f2fs disable direct I/O on verity files, since otherwise
+direct I/O would bypass fs-verity.  (They also do the same for
+encrypted files.)
+
+Userspace utility
+=================
+
+This document focuses on the kernel, but a userspace utility for
+fs-verity can be found at:
+
+	https://git.kernel.org/pub/scm/linux/kernel/git/ebiggers/fsverity-utils.git
+
+See the README.md file in the fsverity-utils source tree for details,
+including examples of setting up fs-verity protected files.
+
+Tests
+=====
+
+To test fs-verity, use xfstests.  For example, using `kvm-xfstests
+<https://github.com/tytso/xfstests-bld/blob/master/Documentation/kvm-quickstart.md>`_::
+
+    kvm-xfstests -c ext4,f2fs -g verity
+
+FAQ
+===
+
+This section answers frequently asked questions about fs-verity that
+weren't already directly answered in other parts of this document.
+
+:Q: Why isn't fs-verity part of IMA?
+:A: fs-verity and IMA (Integrity Measurement Architecture) have
+    different focuses.  fs-verity is a filesystem-level mechanism for
+    hashing individual files using a Merkle tree.  In contrast, IMA
+    specifies a system-wide policy that specifies which files are
+    hashed and what to do with those hashes, such as log them,
+    authenticate them, or add them to a measurement list.
+
+    IMA is planned to support the fs-verity hashing mechanism as an
+    alternative to doing full file hashes, for people who want the
+    performance and security benefits of the Merkle tree based hash.
+    But it doesn't make sense to force all uses of fs-verity to be
+    through IMA.  As a standalone filesystem feature, fs-verity
+    already meets many users' needs, and it's testable like other
+    filesystem features e.g. with xfstests.
+
+:Q: Isn't fs-verity useless because the attacker can just modify the
+    hashes in the Merkle tree, which is stored on-disk?
+:A: To verify the authenticity of an fs-verity file you must verify
+    the authenticity of the "file measurement", which is basically the
+    root hash of the Merkle tree.  See `Use cases`_.
+
+:Q: Isn't fs-verity useless because the attacker can just replace a
+    verity file with a non-verity one?
+:A: See `Use cases`_.  In the initial use case, it's really trusted
+    userspace code that authenticates the files; fs-verity is just a
+    tool to do this job efficiently and securely.  The trusted
+    userspace code will consider non-verity files to be inauthentic.
+
+:Q: Why does the Merkle tree need to be stored on-disk?  Couldn't you
+    store just the root hash?
+:A: If the Merkle tree wasn't stored on-disk, then you'd have to
+    compute the entire tree when the file is first accessed, even if
+    just one byte is being read.  This is a fundamental consequence of
+    how Merkle tree hashing works.  To verify a leaf node, you need to
+    verify the whole path to the root hash, including the root node
+    (the thing which the root hash is a hash of).  But if the root
+    node isn't stored on-disk, you have to compute it by hashing its
+    children, and so on until you've actually hashed the entire file.
+
+    That defeats most of the point of doing a Merkle tree-based hash,
+    since if you have to hash the whole file ahead of time anyway,
+    then you could simply do sha256(file) instead.  That would be much
+    simpler, and a bit faster too.
+
+    It's true that an in-memory Merkle tree could still provide the
+    advantage of verification on every read rather than just on the
+    first read.  However, it would be inefficient because every time a
+    hash page gets evicted (you can't pin the entire Merkle tree into
+    memory, since it may be very large), in order to restore it you
+    again need to hash everything below it in the tree.  This again
+    defeats most of the point of doing a Merkle tree-based hash, since
+    a single block read could trigger re-hashing gigabytes of data.
+
+:Q: But couldn't you store just the leaf nodes and compute the rest?
+:A: See previous answer; this really just moves up one level, since
+    one could alternatively interpret the data blocks as being the
+    leaf nodes of the Merkle tree.  It's true that the tree can be
+    computed much faster if the leaf level is stored rather than just
+    the data, but that's only because each level is less than 1% the
+    size of the level below (assuming the recommended settings of
+    SHA-256 and 4K blocks).  For the exact same reason, by storing
+    "just the leaf nodes" you'd already be storing over 99% of the
+    tree, so you might as well simply store the whole tree.
+
+:Q: Can the Merkle tree be built ahead of time, e.g. distributed as
+    part of a package that is installed to many computers?
+:A: This isn't currently supported.  It was part of the original
+    design, but was removed to simplify the kernel UAPI and because it
+    wasn't a critical use case.  Files are usually installed once and
+    used many times, and cryptographic hashing is somewhat fast on
+    most modern processors.
+
+:Q: Why doesn't fs-verity support writes?
+:A: Write support would be very difficult and would require a
+    completely different design, so it's well outside the scope of
+    fs-verity.  Write support would require:
+
+    - A way to maintain consistency between the data and hashes,
+      including all levels of hashes, since corruption after a crash
+      (especially of potentially the entire file!) is unacceptable.
+      The main options for solving this are data journalling,
+      copy-on-write, and log-structured volume.  But it's very hard to
+      retrofit existing filesystems with new consistency mechanisms.
+      Data journalling is available on ext4, but is very slow.
+
+    - Rebuilding the the Merkle tree after every write, which would be
+      extremely inefficient.  Alternatively, a different authenticated
+      dictionary structure such as an "authenticated skiplist" could
+      be used.  However, this would be far more complex.
+
+    Compare it to dm-verity vs. dm-integrity.  dm-verity is very
+    simple: the kernel just verifies read-only data against a
+    read-only Merkle tree.  In contrast, dm-integrity supports writes
+    but is slow, is much more complex, and doesn't actually support
+    full-device authentication since it authenticates each sector
+    independently, i.e. there is no "root hash".  It doesn't really
+    make sense for the same device-mapper target to support these two
+    very different cases; the same applies to fs-verity.
+
+:Q: Since verity files are immutable, why isn't the immutable bit set?
+:A: The existing "immutable" bit (FS_IMMUTABLE_FL) already has a
+    specific set of semantics which not only make the file contents
+    read-only, but also prevent the file from being deleted, renamed,
+    linked to, or having its owner or mode changed.  These extra
+    properties are unwanted for fs-verity, so reusing the immutable
+    bit isn't appropriate.
+
+:Q: Why does the API use ioctls instead of setxattr() and getxattr()?
+:A: Abusing the xattr interface for basically arbitrary syscalls is
+    heavily frowned upon by most of the Linux filesystem developers.
+    An xattr should really just be an xattr on-disk, not an API to
+    e.g. magically trigger construction of a Merkle tree.
+
+:Q: Does fs-verity support remote filesystems?
+:A: Only ext4 and f2fs support is implemented currently, but in
+    principle any filesystem that can store per-file verity metadata
+    can support fs-verity, regardless of whether it's local or remote.
+    Some filesystems may have fewer options of where to store the
+    verity metadata; one possibility is to store it past the end of
+    the file and "hide" it from userspace by manipulating i_size.  The
+    data verification functions provided by ``fs/verity/`` also assume
+    that the filesystem uses the Linux pagecache, but both local and
+    remote filesystems normally do so.
+
+:Q: Why is anything filesystem-specific at all?  Shouldn't fs-verity
+    be implemented entirely at the VFS level?
+:A: There are many reasons why this is not possible or would be very
+    difficult, including the following:
+
+    - To prevent bypassing verification, pages must not be marked
+      Uptodate until they've been verified.  Currently, each
+      filesystem is responsible for marking pages Uptodate via
+      ``->readpages()``.  Therefore, currently it's not possible for
+      the VFS to do the verification on its own.  Changing this would
+      require significant changes to the VFS and all filesystems.
+
+    - It would require defining a filesystem-independent way to store
+      the verity metadata.  Extended attributes don't work for this
+      because (a) the Merkle tree may be gigabytes, but many
+      filesystems assume that all xattrs fit into a single 4K
+      filesystem block, and (b) ext4 and f2fs encryption doesn't
+      encrypt xattrs, yet the Merkle tree *must* be encrypted when the
+      file contents are, because it stores hashes of the plaintext
+      file contents.
+
+      So the verity metadata would have to be stored in an actual
+      file.  Using a separate file would be very ugly, since the
+      metadata is fundamentally part of the file to be protected, and
+      it could cause problems where users could delete the real file
+      but not the metadata file or vice versa.  On the other hand,
+      having it be in the same file would break applications unless
+      filesystems' notion of i_size were divorced from the VFS's,
+      which would be complex and require changes to all filesystems.
+
+    - It's desirable that FS_IOC_ENABLE_VERITY uses the filesystem's
+      transaction mechanism so that either the file ends up with
+      verity enabled, or no changes were made.  Allowing intermediate
+      states to occur after a crash may cause problems.
diff --git a/Documentation/filesystems/index.rst b/Documentation/filesystems/index.rst
index 46d1b1b..d2f9d11 100644
--- a/Documentation/filesystems/index.rst
+++ b/Documentation/filesystems/index.rst
@@ -359,3 +359,4 @@
     :maxdepth: 2
 
     fscrypt
+    fsverity
diff --git a/Documentation/filesystems/proc.txt b/Documentation/filesystems/proc.txt
index c371b45..8da5555 100644
--- a/Documentation/filesystems/proc.txt
+++ b/Documentation/filesystems/proc.txt
@@ -889,6 +889,7 @@
 AnonPages:      861800 kB
 Mapped:         280372 kB
 Shmem:             644 kB
+KReclaimable:   168048 kB
 Slab:           284364 kB
 SReclaimable:   159856 kB
 SUnreclaim:     124508 kB
@@ -956,6 +957,9 @@
 ShmemHugePages: Memory used by shared memory (shmem) and tmpfs allocated
               with huge pages
 ShmemPmdMapped: Shared memory mapped into userspace with huge pages
+KReclaimable: Kernel allocations that the kernel will attempt to reclaim
+              under memory pressure. Includes SReclaimable (below), and other
+              direct allocations with a shrinker.
         Slab: in-kernel data structures cache
 SReclaimable: Part of Slab, that might be reclaimed, such as caches
   SUnreclaim: Part of Slab, that cannot be reclaimed on memory pressure
diff --git a/MAINTAINERS b/MAINTAINERS
index 923cd02..14930c2 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -326,6 +326,12 @@
 F:	drivers/pci/*/*acpi*
 F:	tools/power/acpi/
 
+commit 6f40c42105d5c913cf855320ba7cfbc418314e29
+Author: Meng Jiang <mengjian@codeaurora.org>
+Date:   Mon Jan 13 18:20:15 2020 -0400
+	MAINTAINERS: add MCP25xxFD driver to support SPI to CAN
+	Signed-off-by: Meng Jiang <mengjian@codeaurora.org>
+
 ACPI APEI
 M:	"Rafael J. Wysocki" <rjw@rjwysocki.net>
 M:	Len Brown <lenb@kernel.org>
@@ -6025,6 +6031,18 @@
 F:	fs/notify/
 F:	include/linux/fsnotify*.h
 
+FSVERITY: READ-ONLY FILE-BASED AUTHENTICITY PROTECTION
+M:	Eric Biggers <ebiggers@kernel.org>
+M:	Theodore Y. Ts'o <tytso@mit.edu>
+L:	linux-fscrypt@vger.kernel.org
+Q:	https://patchwork.kernel.org/project/linux-fscrypt/list/
+T:	git git://git.kernel.org/pub/scm/fs/fscrypt/fscrypt.git fsverity
+S:	Supported
+F:	fs/verity/
+F:	include/linux/fsverity.h
+F:	include/uapi/linux/fsverity.h
+F:	Documentation/filesystems/fsverity.rst
+
 FUJITSU LAPTOP EXTRAS
 M:	Jonathan Woithe <jwoithe@just42.net>
 L:	platform-driver-x86@vger.kernel.org
diff --git a/Makefile b/Makefile
index 3bb6239..d72b773 100644
--- a/Makefile
+++ b/Makefile
@@ -500,6 +500,8 @@
 CLANG_FLAGS	+= --gcc-toolchain=$(GCC_TOOLCHAIN)
 endif
 CLANG_FLAGS	+= -no-integrated-as
+CLANG_FLAGS	+= $(call cc-option, -Wno-misleading-indentation)
+CLANG_FLAGS	+= $(call cc-option, -Wno-bool-operation)
 CLANG_FLAGS	+= -Werror=unknown-warning-option
 KBUILD_CFLAGS	+= $(CLANG_FLAGS)
 KBUILD_AFLAGS	+= $(CLANG_FLAGS)
@@ -736,7 +738,6 @@
 KBUILD_CFLAGS += $(call cc-disable-warning, duplicate-decl-specifier)
 KBUILD_CFLAGS += -Wno-asm-operand-widths
 KBUILD_CFLAGS += -Wno-initializer-overrides
-KBUILD_CFLAGS += -fno-builtin
 KBUILD_CFLAGS += $(call cc-option, -Wno-undefined-optimized)
 KBUILD_CFLAGS += $(call cc-option, -Wno-tautological-constant-out-of-range-compare)
 KBUILD_CFLAGS += $(call cc-option, -mllvm -disable-struct-const-merge)
@@ -837,10 +838,24 @@
 endif
 
 ifdef CONFIG_LTO_CLANG
-lto-clang-flags	:= -flto -fvisibility=hidden
+ifdef CONFIG_THINLTO
+lto-clang-flags	:= -flto=thin
+KBUILD_LDFLAGS	+= --thinlto-cache-dir=.thinlto-cache
+else
+lto-clang-flags	:= -flto
+endif
+lto-clang-flags += -fvisibility=default $(call cc-option, -fsplit-lto-unit)
+
+# Limit inlining across translation units to reduce binary size
+LD_FLAGS_LTO_CLANG := -mllvm -import-instr-limit=5
+
+KBUILD_LDFLAGS += $(LD_FLAGS_LTO_CLANG)
+KBUILD_LDFLAGS_MODULE += $(LD_FLAGS_LTO_CLANG)
+
+KBUILD_LDS_MODULE += $(srctree)/scripts/module-lto.lds
 
 # allow disabling only clang LTO where needed
-DISABLE_LTO_CLANG := -fno-lto -fvisibility=default
+DISABLE_LTO_CLANG := -fno-lto
 export DISABLE_LTO_CLANG
 endif
 
@@ -853,7 +868,7 @@
 endif
 
 ifdef CONFIG_CFI_CLANG
-cfi-clang-flags	+= -fsanitize=cfi $(call cc-option, -fsplit-lto-unit)
+cfi-clang-flags	+= -fsanitize=cfi -fno-sanitize-cfi-canonical-jump-tables
 DISABLE_CFI_CLANG := -fno-sanitize=cfi
 ifdef CONFIG_MODULES
 cfi-clang-flags	+= -fsanitize-cfi-cross-dso
@@ -878,6 +893,12 @@
 export CFI_CFLAGS DISABLE_CFI
 endif
 
+ifdef CONFIG_SHADOW_CALL_STACK
+CC_FLAGS_SCS	:= -fsanitize=shadow-call-stack
+KBUILD_CFLAGS	+= $(CC_FLAGS_SCS)
+export CC_FLAGS_SCS
+endif
+
 # arch Makefile may override CC so keep this after arch Makefile is included
 NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
 
@@ -954,6 +975,10 @@
 LDFLAGS_vmlinux	+= $(call ld-option, -X,)
 endif
 
+ifeq ($(CONFIG_RELR),y)
+LDFLAGS_vmlinux	+= --pack-dyn-relocs=relr
+endif
+
 # insure the checker run with the right endianness
 CHECKFLAGS += $(if $(CONFIG_CPU_BIG_ENDIAN),-mbig-endian,-mlittle-endian)
 
diff --git a/abi_gki_aarch64.xml b/abi_gki_aarch64.xml
new file mode 100644
index 0000000..1bba8b4
--- /dev/null
+++ b/abi_gki_aarch64.xml
@@ -0,0 +1,58293 @@
+<abi-corpus-group architecture='elf-arm-aarch64'>
+  <abi-corpus path='vmlinux' architecture='elf-arm-aarch64'>
+    <elf-function-symbols>
+      <elf-symbol name='PDE_DATA' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='___ratelimit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__alloc_disk_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__alloc_pages_nodemask' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__alloc_percpu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__alloc_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__alloc_workqueue_key' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__blk_mq_end_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__cfi_slowpath' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__check_object_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__class_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__class_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__const_udelay' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__cpuhp_remove_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__cpuhp_setup_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__cpuhp_state_add_instance' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__cpuhp_state_remove_instance' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__dev_get_by_index' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__dev_kfree_skb_any' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__devm_request_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__devm_reset_control_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__devres_alloc_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__drm_printfn_debug' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__ethtool_get_link_ksettings' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__free_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__get_task_comm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__hvc_resize' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__init_waitqueue_head' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__ioremap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__iounmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__kmalloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__ll_sc___cmpxchg_case_mb_4' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__ll_sc___cmpxchg_case_mb_8' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__ll_sc_atomic64_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__ll_sc_atomic64_add_return_relaxed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__ll_sc_atomic64_andnot' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__ll_sc_atomic64_fetch_or' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__ll_sc_atomic64_or' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__ll_sc_atomic_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__ll_sc_atomic_add_return' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__ll_sc_atomic_sub' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__ll_sc_atomic_sub_return' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__local_bh_enable_ip' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__memcpy_fromio' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__memcpy_toio' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__memset_io' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__module_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__msecs_to_jiffies' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__mutex_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__napi_alloc_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__napi_schedule' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__netdev_alloc_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__netif_set_xps_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__netlink_dump_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__nlmsg_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__pci_register_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__platform_driver_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__pm_runtime_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__pm_runtime_idle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__pm_runtime_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__pm_runtime_set_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__pm_runtime_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__pm_runtime_use_autosuspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__put_cred' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__put_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__rcu_read_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__rcu_read_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__refrigerator' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__register_chrdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__request_module' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__rtc_register_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__skb_flow_dissect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__sock_recv_ts_and_drops' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__sock_tx_timestamp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__splice_from_pipe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__stack_chk_fail' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__sw_hweight64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__sysfs_match_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__tasklet_hi_schedule' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__tasklet_schedule' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__unregister_chrdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__wake_up' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='__warn_printk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='_copy_from_iter_full' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='_copy_to_iter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='_dev_err' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='_dev_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='_dev_notice' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='_dev_warn' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='_raw_read_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='_raw_read_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='_raw_spin_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='_raw_spin_lock_bh' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='_raw_spin_lock_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='_raw_spin_lock_irqsave' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='_raw_spin_trylock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='_raw_spin_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='_raw_spin_unlock_bh' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='_raw_spin_unlock_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='_raw_spin_unlock_irqrestore' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='_raw_write_lock_bh' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='_raw_write_unlock_bh' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='add_timer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='add_uevent_var' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='add_wait_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='alloc_chrdev_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='alloc_etherdev_mqs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='alloc_netdev_mqs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='alloc_pages_exact' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='arch_bpf_jit_check_func' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='autoremove_wake_function' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='bcmp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_cleanup_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_execute_rq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_get_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_get_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_mq_alloc_tag_set' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_mq_complete_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_mq_end_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_mq_free_tag_set' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_mq_init_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_mq_quiesce_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_mq_requeue_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_mq_run_hw_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_mq_start_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_mq_start_stopped_hw_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_mq_stop_hw_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_mq_unquiesce_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_mq_virtio_map_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_put_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_put_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_queue_alignment_offset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_queue_bounce_limit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_queue_flag_clear' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_queue_flag_set' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_queue_io_min' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_queue_io_opt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_queue_logical_block_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_queue_max_discard_sectors' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_queue_max_hw_sectors' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_queue_max_segment_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_queue_max_segments' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_queue_physical_block_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_queue_rq_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_queue_write_cache' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_rq_map_kern' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_rq_map_sg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_status_to_errno' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='blk_update_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='bpf_prog_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='bpf_prog_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='bpf_prog_sub' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='bpf_trace_run10' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='bpf_trace_run2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='bpf_trace_run8' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='bpf_warn_invalid_xdp_action' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='build_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='bus_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='bus_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='call_netdevice_notifiers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='call_rcu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='cancel_delayed_work' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='cancel_delayed_work_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='cancel_work_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='capable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='cdev_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='cdev_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='cdev_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='cdev_device_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='cdev_device_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='cdev_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='cfg80211_connect_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='cfg80211_disconnected' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='cfg80211_inform_bss_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='cfg80211_put_bss' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='cfg80211_scan_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='check_disk_change' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='class_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='class_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='clk_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='clk_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='clk_get_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='clk_prepare' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='clk_unprepare' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='complete' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='complete_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='completion_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='consume_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='cpufreq_register_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='cpufreq_unregister_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='cpumask_next' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='cpumask_next_wrap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='cpus_read_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='cpus_read_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='crypto_dequeue_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='crypto_enqueue_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='crypto_init_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='crypto_register_alg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='crypto_unregister_alg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='datagram_poll' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='debug_smp_processor_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='debugfs_create_dir' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='debugfs_create_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='debugfs_create_x32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='debugfs_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='debugfs_remove_recursive' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='default_llseek' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='default_wake_function' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='del_gendisk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='del_timer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='del_timer_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='delayed_work_timer_fn' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='destroy_workqueue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='dev_add_pack' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='dev_close' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='dev_driver_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='dev_fwnode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='dev_get_by_index' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='dev_get_by_index_rcu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='dev_get_stats' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='dev_mc_sync_multiple' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='dev_mc_unsync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='dev_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='dev_pm_domain_attach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='dev_pm_domain_detach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='dev_printk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='dev_queue_xmit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='dev_remove_pack' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='dev_set_mtu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='dev_set_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='dev_uc_sync_multiple' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='dev_uc_unsync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='device_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='device_add_disk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='device_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='device_create_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='device_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='device_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='device_for_each_child' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='device_initialize' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='device_property_present' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='device_property_read_u32_array' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='device_remove_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='devm_clk_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='devm_gpio_request_one' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='devm_gpiod_get_index' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='devm_ioremap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='devm_ioremap_resource' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='devm_kfree' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='devm_kmalloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='devm_regulator_get_optional' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='devm_request_threaded_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='devm_rtc_allocate_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='devres_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='devres_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='devres_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='disable_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='dma_alloc_from_dev_coherent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='dma_buf_export' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='dma_buf_fd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='dma_buf_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='dma_buf_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='dma_fence_context_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='dma_fence_enable_sw_signaling' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='dma_fence_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='dma_fence_match_context' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='dma_fence_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='dma_fence_signal' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='dma_fence_signal_locked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='dma_fence_wait_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='dma_release_from_dev_coherent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='driver_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='driver_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_add_edid_modes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_add_modes_noedid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_atomic_helper_check' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_atomic_helper_cleanup_planes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_atomic_helper_commit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_atomic_helper_commit_hw_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_atomic_helper_commit_modeset_disables' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_atomic_helper_commit_modeset_enables' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_atomic_helper_commit_planes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_atomic_helper_connector_destroy_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_atomic_helper_connector_duplicate_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_atomic_helper_connector_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_atomic_helper_crtc_destroy_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_atomic_helper_crtc_duplicate_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_atomic_helper_crtc_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_atomic_helper_disable_plane' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_atomic_helper_page_flip' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_atomic_helper_plane_destroy_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_atomic_helper_plane_duplicate_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_atomic_helper_plane_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_atomic_helper_set_config' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_atomic_helper_shutdown' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_atomic_helper_update_plane' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_atomic_helper_wait_for_vblanks' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_class_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_class_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_clflush_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_compat_ioctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_connector_attach_edid_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_connector_attach_encoder' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_connector_cleanup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_connector_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_connector_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_connector_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_connector_update_edid_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_crtc_cleanup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_crtc_init_with_planes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_crtc_send_vblank_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_cvt_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_dbg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_debugfs_create_files' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_dev_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_dev_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_dev_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_dev_set_unique' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_do_get_edid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_encoder_cleanup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_encoder_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_err' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_framebuffer_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_gem_fb_create_handle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_gem_fb_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_gem_handle_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_gem_object_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_gem_object_lookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_gem_object_put_unlocked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_gem_object_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_gem_prime_export' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_gem_prime_fd_to_handle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_gem_prime_handle_to_fd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_gem_prime_import' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_gem_prime_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_global_item_ref' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_global_item_unref' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_helper_hpd_irq_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_helper_mode_fill_fb_struct' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_helper_probe_single_connector_modes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_ht_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_ht_find_item' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_ht_insert_item' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_ht_just_insert_please' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_ht_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_ht_remove_item' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_ioctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_kms_helper_hotplug_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_mm_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_mm_insert_node_in_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_mm_print' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_mm_remove_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_mm_takedown' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_mode_config_cleanup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_mode_config_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_mode_config_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_mode_probed_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_plane_cleanup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_poll' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_prime_pages_to_sg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_put_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_set_preferred_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_universal_plane_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_vma_offset_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_vma_offset_lookup_locked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_vma_offset_manager_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_vma_offset_manager_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='drm_vma_offset_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='eth_commit_mac_addr_change' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='eth_prepare_mac_addr_change' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='eth_type_trans' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='eth_validate_addr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='ether_setup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='ethtool_op_get_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='ethtool_op_get_ts_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='event_triggers_call' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='fasync_helper' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='fd_install' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='finish_wait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='flush_work' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='flush_workqueue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='fput' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='free_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='free_netdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='free_pages_exact' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='free_percpu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='freezing_slow_path' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='fsl8250_handle_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='generic_file_llseek' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='get_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='get_random_bytes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='get_unused_fd_flags' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='gpio_to_desc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='gpiod_cansleep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='gpiod_get_raw_value' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='gpiod_get_raw_value_cansleep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='gpiod_get_value' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='gpiod_get_value_cansleep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='gpiod_is_active_low' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='gpiod_set_debounce' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='gpiod_to_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='hrtimer_active' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='hrtimer_cancel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='hrtimer_forward' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='hrtimer_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='hrtimer_start_range_ns' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='hvc_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='hvc_instantiate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='hvc_kick' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='hvc_poll' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='hvc_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='hwrng_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='hwrng_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='ida_alloc_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='ida_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='ida_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='init_timer_key' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='init_wait_entry' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='input_alloc_absinfo' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='input_allocate_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='input_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='input_free_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='input_mt_init_slots' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='input_register_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='input_set_abs_params' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='input_unregister_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='irq_dispose_mapping' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='irq_set_affinity_hint' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='irq_set_irq_wake' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='jiffies_to_msecs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='kfree' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='kfree_call_rcu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='kfree_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='kill_fasync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='kmalloc_order_trace' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='kmem_cache_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='kmem_cache_alloc_trace' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='kmem_cache_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='kmem_cache_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='kmem_cache_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='kmemdup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='kobject_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='kobject_init_and_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='kobject_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='kobject_uevent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='kobject_uevent_env' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='kstrtoull' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='kthread_create_on_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='kthread_create_worker' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='kthread_destroy_worker' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='kthread_queue_work' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='kthread_should_stop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='kthread_stop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='ktime_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='ktime_get_real_seconds' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='ktime_get_ts64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='ktime_get_with_offset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='kvfree' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='kvmalloc_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='kzfree' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='led_classdev_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='led_trigger_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='led_trigger_register_simple' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='led_trigger_unregister_simple' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='lock_sock_nested' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='mark_page_accessed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='memdup_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='memparse' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='memzero_explicit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='misc_deregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='misc_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='mod_timer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='module_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='msleep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='mutex_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='mutex_lock_interruptible' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='mutex_trylock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='mutex_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='napi_complete_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='napi_consume_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='napi_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='napi_gro_receive' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='napi_hash_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='napi_schedule_prep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='net_ratelimit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='netdev_change_features' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='netdev_err' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='netdev_increment_features' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='netdev_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='netdev_lower_state_changed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='netdev_master_upper_dev_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='netdev_notify_peers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='netdev_rx_handler_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='netdev_rx_handler_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='netdev_upper_dev_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='netdev_upper_dev_unlink' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='netdev_warn' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='netif_carrier_off' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='netif_carrier_on' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='netif_device_attach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='netif_device_detach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='netif_napi_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='netif_napi_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='netif_receive_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='netif_rx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='netif_rx_ni' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='netif_schedule_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='netif_set_real_num_rx_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='netif_set_real_num_tx_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='netif_stacked_transfer_operstate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='netif_tx_stop_all_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='netif_tx_wake_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='netlink_capable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='nf_conntrack_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='nla_memcpy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='nla_parse' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='nla_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='no_llseek' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='nonseekable_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='noop_llseek' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='nsecs_to_jiffies' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='of_address_to_resource' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='of_alias_get_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='of_device_is_big_endian' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='of_device_is_compatible' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='of_find_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='of_get_child_by_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='of_get_next_child' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='of_get_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='of_irq_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='of_led_classdev_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='of_match_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='of_parse_phandle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='of_property_read_u64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='of_property_read_variable_u32_array' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='panic' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='passthru_features_check' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='pci_alloc_irq_vectors_affinity' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='pci_disable_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='pci_enable_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='pci_find_capability' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='pci_find_ext_capability' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='pci_find_next_capability' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='pci_free_irq_vectors' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='pci_iomap_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='pci_irq_get_affinity' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='pci_irq_vector' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='pci_read_config_byte' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='pci_read_config_dword' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='pci_release_selected_regions' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='pci_request_selected_regions' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='pci_set_master' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='pci_unregister_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='perf_trace_buf_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='perf_trace_run_bpf_submit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='pipe_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='pipe_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='platform_device_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='platform_device_add_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='platform_device_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='platform_device_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='platform_device_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='platform_device_register_full' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='platform_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='platform_driver_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='platform_get_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='platform_get_resource' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='pm_generic_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='pm_generic_runtime_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='pm_generic_runtime_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='pm_generic_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='pm_runtime_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='pm_runtime_set_autosuspend_delay' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='pm_wakeup_dev_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='prandom_u32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='preempt_count_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='preempt_count_sub' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='preempt_schedule' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='preempt_schedule_notrace' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='prepare_to_wait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='prepare_to_wait_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='printk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='proc_create_net_single' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='proc_mkdir_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='proto_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='proto_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='put_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='put_disk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='put_unused_fd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='queue_delayed_work_on' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='queue_work_on' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='rcu_barrier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='refcount_dec_and_test_checked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='refcount_inc_checked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='refcount_inc_not_zero_checked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='register_blkdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='register_netdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='register_netdevice' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='register_netdevice_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='register_pernet_subsys' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='register_pm_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='register_shrinker' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='regulator_count_voltages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='regulator_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='regulator_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='regulator_get_current_limit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='regulator_get_voltage' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='regulator_is_supported_voltage' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='regulator_list_voltage' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='regulator_set_voltage' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='release_sock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='remove_conflicting_framebuffers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='remove_proc_entry' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='remove_wait_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='request_threaded_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='reservation_object_add_excl_fence' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='reservation_object_add_shared_fence' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='reservation_object_copy_fences' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='reservation_object_reserve_shared' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='reservation_object_test_signaled_rcu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='reservation_object_wait_timeout_rcu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='reset_control_assert' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='reset_control_deassert' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='revalidate_disk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='round_jiffies' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='rtc_time64_to_tm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='rtc_tm_to_time64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='rtc_update_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='rtnl_is_locked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='rtnl_link_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='rtnl_link_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='rtnl_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='rtnl_register_module' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='rtnl_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='rtnl_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='rtnl_unregister_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sched_setscheduler' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='schedule' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='schedule_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='scnprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='security_sock_graft' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='send_sig' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='seq_lseek' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='seq_printf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='seq_putc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='seq_puts' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='seq_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='serial8250_get_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='serial8250_register_8250_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='serial8250_resume_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='serial8250_suspend_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='serial8250_unregister_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='set_disk_ro' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='set_page_dirty' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sg_alloc_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sg_alloc_table_from_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sg_copy_from_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sg_copy_to_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sg_free_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sg_init_one' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sg_init_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sg_miter_next' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sg_miter_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sg_miter_stop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sg_nents' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sg_nents_for_len' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sg_next' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='shmem_file_setup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='shmem_read_mapping_page_gfp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='si_mem_available' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='si_meminfo' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='simple_attr_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='simple_attr_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='simple_attr_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='simple_attr_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='simple_read_from_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='simple_strtoul' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='single_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='single_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sk_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sk_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='skb_add_rx_frag' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='skb_clone' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='skb_coalesce_rx_frag' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='skb_copy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='skb_dequeue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='skb_free_datagram' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='skb_page_frag_refill' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='skb_partial_csum_set' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='skb_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='skb_queue_purge' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='skb_queue_tail' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='skb_recv_datagram' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='skb_to_sgvec' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='skb_trim' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='skb_tstamp_tx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='snprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sock_alloc_send_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sock_diag_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sock_diag_save_cookie' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sock_diag_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sock_efree' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sock_get_timestamp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sock_i_ino' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sock_init_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sock_no_accept' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sock_no_bind' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sock_no_connect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sock_no_getname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sock_no_getsockopt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sock_no_ioctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sock_no_listen' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sock_no_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sock_no_sendpage' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sock_no_setsockopt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sock_no_shutdown' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sock_no_socketpair' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sock_queue_rcv_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sock_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sock_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sscanf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='strcpy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='string_get_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='strlcpy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='strncpy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='strstr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='swiotlb_max_segment' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sync_file_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sync_file_get_fence' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='synchronize_hardirq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='synchronize_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='synchronize_net' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='synchronize_rcu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sysfs_create_bin_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sysfs_create_group' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sysfs_remove_bin_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='sysfs_remove_group' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='tasklet_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='tasklet_kill' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='trace_define_field' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='trace_event_buffer_commit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='trace_event_buffer_reserve' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='trace_event_ignore_this_pid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='trace_event_raw_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='trace_event_reg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='trace_handle_return' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='trace_print_symbols_seq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='trace_raw_output_prep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='trace_seq_printf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='try_module_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='unlock_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='unmap_mapping_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='unregister_blkdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='unregister_chrdev_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='unregister_netdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='unregister_netdevice_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='unregister_netdevice_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='unregister_pernet_subsys' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='unregister_pm_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='unregister_shrinker' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='up_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='usb_add_gadget_udc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='usb_add_hcd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='usb_create_hcd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='usb_create_shared_hcd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='usb_del_gadget_udc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='usb_disabled' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='usb_ep_set_maxpacket_limit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='usb_gadget_giveback_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='usb_gadget_udc_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='usb_get_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='usb_hcd_check_unlink_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='usb_hcd_giveback_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='usb_hcd_is_primary_hcd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='usb_hcd_link_urb_to_ep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='usb_hcd_poll_rh_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='usb_hcd_resume_root_hub' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='usb_hcd_unlink_urb_from_ep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='usb_put_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='usb_put_hcd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='usb_remove_hcd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='usleep_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='vm_get_page_prot' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='vm_insert_mixed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='vm_insert_pfn' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='vmalloc_to_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='vmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='vunmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='wait_for_completion' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='wait_for_completion_killable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='wait_woken' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='wake_up_process' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='wiphy_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='wiphy_new_nm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='wiphy_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='wiphy_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='woken_wake_function' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='ww_mutex_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='ww_mutex_lock_interruptible' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='ww_mutex_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='xdp_do_flush_map' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='xdp_do_redirect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='xdp_return_frame' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='xdp_return_frame_rx_napi' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='xdp_rxq_info_reg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='xdp_rxq_info_reg_mem_model' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+      <elf-symbol name='xdp_rxq_info_unreg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+    </elf-function-symbols>
+    <abi-instr version='1.0' address-size='64' path='drivers/firmware/efi/libstub/string.c' language='LANG_C89'>
+      <type-decl name='char' size-in-bits='8' id='type-id-1'/>
+      <pointer-type-def type-id='type-id-1' size-in-bits='64' id='type-id-2'/>
+      <qualified-type-def type-id='type-id-1' const='yes' id='type-id-3'/>
+      <pointer-type-def type-id='type-id-3' size-in-bits='64' id='type-id-4'/>
+      <function-decl name='strstr' mangled-name='strstr' filepath='drivers/firmware/efi/libstub/string.c' line='18' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strstr'>
+        <parameter type-id='type-id-4' name='s1' filepath='drivers/firmware/efi/libstub/string.c' line='18' column='1'/>
+        <parameter type-id='type-id-4' name='s2' filepath='drivers/firmware/efi/libstub/string.c' line='18' column='1'/>
+        <return type-id='type-id-2'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/smp_processor_id.c' language='LANG_C89'>
+      <function-decl name='debug_smp_processor_id' mangled-name='debug_smp_processor_id' filepath='lib/smp_processor_id.c' line='54' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='debug_smp_processor_id'>
+        <return type-id='type-id-5'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/trace/trace.c' language='LANG_C89'>
+      <class-decl name='prog_entry' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-6'/>
+      <array-type-def dimensions='1' type-id='type-id-7' size-in-bits='infinite' id='type-id-8'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <class-decl name='trace_event_buffer' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/trace_events.h' line='206' column='1' id='type-id-11'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buffer' type-id='type-id-12' visibility='default' filepath='include/linux/trace_events.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='event' type-id='type-id-13' visibility='default' filepath='include/linux/trace_events.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='trace_file' type-id='type-id-14' visibility='default' filepath='include/linux/trace_events.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='entry' type-id='type-id-15' visibility='default' filepath='include/linux/trace_events.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='include/linux/trace_events.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pc' type-id='type-id-17' visibility='default' filepath='include/linux/trace_events.h' line='212' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ring_buffer_event' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/ring_buffer.h' line='15' column='1' id='type-id-18'>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='type_len' type-id='type-id-7' visibility='default' filepath='include/linux/ring_buffer.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='time_delta' type-id='type-id-7' visibility='default' filepath='include/linux/ring_buffer.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='array' type-id='type-id-8' visibility='default' filepath='include/linux/ring_buffer.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='trace_event_file' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/trace_events.h' line='366' column='1' id='type-id-19'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/trace_events.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='event_call' type-id='type-id-21' visibility='default' filepath='include/linux/trace_events.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='filter' type-id='type-id-22' visibility='default' filepath='include/linux/trace_events.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dir' type-id='type-id-23' visibility='default' filepath='include/linux/trace_events.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tr' type-id='type-id-24' visibility='default' filepath='include/linux/trace_events.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='system' type-id='type-id-25' visibility='default' filepath='include/linux/trace_events.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='triggers' type-id='type-id-20' visibility='default' filepath='include/linux/trace_events.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='include/linux/trace_events.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sm_ref' type-id='type-id-26' visibility='default' filepath='include/linux/trace_events.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='tm_ref' type-id='type-id-26' visibility='default' filepath='include/linux/trace_events.h' line='393' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vfsmount' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/mount.h' line='67' column='1' id='type-id-27'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mnt_root' type-id='type-id-23' visibility='default' filepath='include/linux/mount.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mnt_sb' type-id='type-id-28' visibility='default' filepath='include/linux/mount.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mnt_flags' type-id='type-id-17' visibility='default' filepath='include/linux/mount.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='data' type-id='type-id-15' visibility='default' filepath='include/linux/mount.h' line='71' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='trace_array' size-in-bits='2112' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='202' column='1' id='type-id-29'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='kernel/trace/trace.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='type-id-2' visibility='default' filepath='kernel/trace/trace.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='trace_buffer' type-id='type-id-30' visibility='default' filepath='kernel/trace/trace.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='filtered_pids' type-id='type-id-31' visibility='default' filepath='kernel/trace/trace.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='max_lock' type-id='type-id-32' visibility='default' filepath='kernel/trace/trace.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='buffer_disabled' type-id='type-id-17' visibility='default' filepath='kernel/trace/trace.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='stop_count' type-id='type-id-17' visibility='default' filepath='kernel/trace/trace.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='clock_id' type-id='type-id-17' visibility='default' filepath='kernel/trace/trace.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='nr_topts' type-id='type-id-17' visibility='default' filepath='kernel/trace/trace.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='clear_trace' type-id='type-id-33' visibility='default' filepath='kernel/trace/trace.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='current_trace' type-id='type-id-34' visibility='default' filepath='kernel/trace/trace.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='trace_flags' type-id='type-id-5' visibility='default' filepath='kernel/trace/trace.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='trace_flags_index' type-id='type-id-35' visibility='default' filepath='kernel/trace/trace.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='flags' type-id='type-id-5' visibility='default' filepath='kernel/trace/trace.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='start_lock' type-id='type-id-36' visibility='default' filepath='kernel/trace/trace.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='dir' type-id='type-id-23' visibility='default' filepath='kernel/trace/trace.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='options' type-id='type-id-23' visibility='default' filepath='kernel/trace/trace.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='percpu_dir' type-id='type-id-23' visibility='default' filepath='kernel/trace/trace.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='event_dir' type-id='type-id-23' visibility='default' filepath='kernel/trace/trace.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='topts' type-id='type-id-37' visibility='default' filepath='kernel/trace/trace.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='systems' type-id='type-id-20' visibility='default' filepath='kernel/trace/trace.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='events' type-id='type-id-20' visibility='default' filepath='kernel/trace/trace.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='trace_marker_file' type-id='type-id-14' visibility='default' filepath='kernel/trace/trace.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='tracing_cpumask' type-id='type-id-38' visibility='default' filepath='kernel/trace/trace.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='ref' type-id='type-id-17' visibility='default' filepath='kernel/trace/trace.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='time_stamp_abs_ref' type-id='type-id-17' visibility='default' filepath='kernel/trace/trace.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='hist_vars' type-id='type-id-20' visibility='default' filepath='kernel/trace/trace.h' line='278' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='trace_array_cpu' size-in-bits='1024' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='150' column='1' id='type-id-39'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='disabled' type-id='type-id-26' visibility='default' filepath='kernel/trace/trace.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='buffer_page' type-id='type-id-15' visibility='default' filepath='kernel/trace/trace.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='entries' type-id='type-id-16' visibility='default' filepath='kernel/trace/trace.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='saved_latency' type-id='type-id-16' visibility='default' filepath='kernel/trace/trace.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='critical_start' type-id='type-id-16' visibility='default' filepath='kernel/trace/trace.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='critical_end' type-id='type-id-16' visibility='default' filepath='kernel/trace/trace.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='critical_sequence' type-id='type-id-16' visibility='default' filepath='kernel/trace/trace.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='nice' type-id='type-id-16' visibility='default' filepath='kernel/trace/trace.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='policy' type-id='type-id-16' visibility='default' filepath='kernel/trace/trace.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rt_priority' type-id='type-id-16' visibility='default' filepath='kernel/trace/trace.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='skipped_entries' type-id='type-id-16' visibility='default' filepath='kernel/trace/trace.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='preempt_timestamp' type-id='type-id-40' visibility='default' filepath='kernel/trace/trace.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='pid' type-id='type-id-41' visibility='default' filepath='kernel/trace/trace.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='uid' type-id='type-id-42' visibility='default' filepath='kernel/trace/trace.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='comm' type-id='type-id-43' visibility='default' filepath='kernel/trace/trace.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='ignore_pid' type-id='type-id-33' visibility='default' filepath='kernel/trace/trace.h' line='168' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='trace_pid_list' size-in-bits='128' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='192' column='1' id='type-id-44'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pid_max' type-id='type-id-17' visibility='default' filepath='kernel/trace/trace.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pids' type-id='type-id-45' visibility='default' filepath='kernel/trace/trace.h' line='194' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tracer_flags' size-in-bits='192' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='378' column='1' id='type-id-46'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='val' type-id='type-id-7' visibility='default' filepath='kernel/trace/trace.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='opts' type-id='type-id-47' visibility='default' filepath='kernel/trace/trace.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='trace' type-id='type-id-34' visibility='default' filepath='kernel/trace/trace.h' line='381' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tracer_opt' size-in-bits='128' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='369' column='1' id='type-id-48'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='kernel/trace/trace.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bit' type-id='type-id-7' visibility='default' filepath='kernel/trace/trace.h' line='371' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='trace_options' size-in-bits='128' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='187' column='1' id='type-id-49'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tracer' type-id='type-id-34' visibility='default' filepath='kernel/trace/trace.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='topts' type-id='type-id-50' visibility='default' filepath='kernel/trace/trace.h' line='189' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='trace_option_dentry' size-in-bits='256' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='388' column='1' id='type-id-51'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='opt' type-id='type-id-47' visibility='default' filepath='kernel/trace/trace.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='type-id-52' visibility='default' filepath='kernel/trace/trace.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tr' type-id='type-id-24' visibility='default' filepath='kernel/trace/trace.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='entry' type-id='type-id-23' visibility='default' filepath='kernel/trace/trace.h' line='392' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='trace_subsystem_dir' size-in-bits='384' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='1282' column='1' id='type-id-53'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='kernel/trace/trace.h' line='1283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='subsystem' type-id='type-id-54' visibility='default' filepath='kernel/trace/trace.h' line='1284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tr' type-id='type-id-24' visibility='default' filepath='kernel/trace/trace.h' line='1285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='entry' type-id='type-id-23' visibility='default' filepath='kernel/trace/trace.h' line='1286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ref_count' type-id='type-id-17' visibility='default' filepath='kernel/trace/trace.h' line='1287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='nr_events' type-id='type-id-17' visibility='default' filepath='kernel/trace/trace.h' line='1288' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='event_subsystem' size-in-bits='320' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='1275' column='1' id='type-id-55'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='kernel/trace/trace.h' line='1276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='kernel/trace/trace.h' line='1277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='filter' type-id='type-id-22' visibility='default' filepath='kernel/trace/trace.h' line='1278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ref_count' type-id='type-id-17' visibility='default' filepath='kernel/trace/trace.h' line='1279' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-56' size-in-bits='64' id='type-id-57'/>
+      <pointer-type-def type-id='type-id-55' size-in-bits='64' id='type-id-54'/>
+      <pointer-type-def type-id='type-id-58' size-in-bits='64' id='type-id-59'/>
+      <pointer-type-def type-id='type-id-60' size-in-bits='64' id='type-id-61'/>
+      <pointer-type-def type-id='type-id-62' size-in-bits='64' id='type-id-63'/>
+      <pointer-type-def type-id='type-id-6' size-in-bits='64' id='type-id-64'/>
+      <pointer-type-def type-id='type-id-18' size-in-bits='64' id='type-id-13'/>
+      <pointer-type-def type-id='type-id-29' size-in-bits='64' id='type-id-24'/>
+      <pointer-type-def type-id='type-id-39' size-in-bits='64' id='type-id-65'/>
+      <pointer-type-def type-id='type-id-11' size-in-bits='64' id='type-id-66'/>
+      <pointer-type-def type-id='type-id-19' size-in-bits='64' id='type-id-14'/>
+      <pointer-type-def type-id='type-id-51' size-in-bits='64' id='type-id-50'/>
+      <pointer-type-def type-id='type-id-49' size-in-bits='64' id='type-id-37'/>
+      <pointer-type-def type-id='type-id-44' size-in-bits='64' id='type-id-31'/>
+      <pointer-type-def type-id='type-id-67' size-in-bits='64' id='type-id-68'/>
+      <pointer-type-def type-id='type-id-53' size-in-bits='64' id='type-id-25'/>
+      <pointer-type-def type-id='type-id-46' size-in-bits='64' id='type-id-52'/>
+      <pointer-type-def type-id='type-id-48' size-in-bits='64' id='type-id-47'/>
+      <pointer-type-def type-id='type-id-69' size-in-bits='64' id='type-id-70'/>
+      <pointer-type-def type-id='type-id-71' size-in-bits='64' id='type-id-72'/>
+      <pointer-type-def type-id='type-id-27' size-in-bits='64' id='type-id-73'/>
+      <pointer-type-def type-id='type-id-74' size-in-bits='64' id='type-id-75'/>
+      <pointer-type-def type-id='type-id-76' size-in-bits='64' id='type-id-77'/>
+      <pointer-type-def type-id='type-id-78' size-in-bits='64' id='type-id-79'/>
+      <function-decl name='trace_handle_return' mangled-name='trace_handle_return' filepath='kernel/trace/trace.c' line='2126' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_handle_return'>
+        <parameter type-id='type-id-68' name='s' filepath='kernel/trace/trace.c' line='2126' column='1'/>
+        <return type-id='type-id-80'/>
+      </function-decl>
+      <function-decl name='trace_event_buffer_commit' mangled-name='trace_event_buffer_commit' filepath='kernel/trace/trace.c' line='2382' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_event_buffer_commit'>
+        <parameter type-id='type-id-66' name='fbuffer' filepath='kernel/trace/trace.c' line='2382' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-56'>
+        <parameter type-id='type-id-82'/>
+        <return type-id='type-id-80'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-58'>
+        <parameter type-id='type-id-24'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-60'>
+        <parameter type-id='type-id-24'/>
+        <parameter type-id='type-id-7'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-62'>
+        <parameter type-id='type-id-24'/>
+        <parameter type-id='type-id-7'/>
+        <parameter type-id='type-id-7'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-69'>
+        <parameter type-id='type-id-82'/>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-2'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-85'/>
+        <return type-id='type-id-86'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-71'>
+        <parameter type-id='type-id-82'/>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-85'/>
+        <parameter type-id='type-id-87'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-86'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-74'>
+        <parameter type-id='type-id-88'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-76'>
+        <parameter type-id='type-id-24'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-78'>
+        <parameter type-id='type-id-82'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/rcu/tree.c' language='LANG_C89'>
+      <typedef-decl name='rcu_callback_t' type-id='type-id-89' filepath='include/linux/types.h' line='230' column='1' id='type-id-90'/>
+      <function-decl name='kfree_call_rcu' mangled-name='kfree_call_rcu' filepath='kernel/rcu/tree.c' line='3095' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kfree_call_rcu'>
+        <parameter type-id='type-id-91' name='head' filepath='kernel/rcu/tree.c' line='3095' column='1'/>
+        <parameter type-id='type-id-90' name='func' filepath='kernel/rcu/tree.c' line='3096' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='synchronize_rcu' mangled-name='synchronize_rcu' filepath='kernel/rcu/tree_plugin.h' line='809' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='synchronize_rcu'>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='call_rcu' mangled-name='call_rcu' filepath='kernel/rcu/tree_plugin.h' line='784' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='call_rcu'>
+        <parameter type-id='type-id-91' name='head' filepath='kernel/rcu/tree_plugin.h' line='784' column='1'/>
+        <parameter type-id='type-id-90' name='func' filepath='kernel/rcu/tree_plugin.h' line='784' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='__rcu_read_lock' mangled-name='__rcu_read_lock' filepath='kernel/rcu/tree_plugin.h' line='403' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__rcu_read_lock'>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='__rcu_read_unlock' mangled-name='__rcu_read_unlock' filepath='kernel/rcu/tree_plugin.h' line='417' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__rcu_read_unlock'>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='rcu_barrier' mangled-name='rcu_barrier' filepath='kernel/rcu/tree_plugin.h' line='832' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rcu_barrier'>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/string.c' language='LANG_C89'>
+      <function-decl name='strcpy' mangled-name='strcpy' filepath='lib/string.c' line='88' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strcpy'>
+        <parameter type-id='type-id-2' name='dest' filepath='lib/string.c' line='88' column='1'/>
+        <parameter type-id='type-id-4' name='src' filepath='lib/string.c' line='88' column='1'/>
+        <return type-id='type-id-2'/>
+      </function-decl>
+      <function-decl name='strncpy' mangled-name='strncpy' filepath='lib/string.c' line='113' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strncpy'>
+        <parameter type-id='type-id-2' name='dest' filepath='lib/string.c' line='113' column='1'/>
+        <parameter type-id='type-id-4' name='src' filepath='lib/string.c' line='113' column='1'/>
+        <parameter type-id='type-id-84' name='count' filepath='lib/string.c' line='113' column='1'/>
+        <return type-id='type-id-2'/>
+      </function-decl>
+      <function-decl name='strlcpy' mangled-name='strlcpy' filepath='lib/string.c' line='140' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strlcpy'>
+        <parameter type-id='type-id-2' name='dest' filepath='lib/string.c' line='140' column='1'/>
+        <parameter type-id='type-id-4' name='src' filepath='lib/string.c' line='140' column='1'/>
+        <parameter type-id='type-id-84' name='size' filepath='lib/string.c' line='140' column='1'/>
+        <return type-id='type-id-16'/>
+      </function-decl>
+      <function-decl name='__sysfs_match_string' mangled-name='__sysfs_match_string' filepath='lib/string.c' line='669' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__sysfs_match_string'>
+        <parameter type-id='type-id-92' name='array' filepath='lib/string.c' line='669' column='1'/>
+        <parameter type-id='type-id-84' name='n' filepath='lib/string.c' line='669' column='1'/>
+        <parameter type-id='type-id-4' name='str' filepath='lib/string.c' line='669' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='memzero_explicit' mangled-name='memzero_explicit' filepath='lib/string.c' line='720' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='memzero_explicit'>
+        <parameter type-id='type-id-15' name='s' filepath='lib/string.c' line='720' column='1'/>
+        <parameter type-id='type-id-84' name='count' filepath='lib/string.c' line='720' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='bcmp' mangled-name='bcmp' filepath='lib/string.c' line='881' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bcmp'>
+        <parameter type-id='type-id-15' name='a' filepath='lib/string.c' line='881' column='1'/>
+        <parameter type-id='type-id-15' name='b' filepath='lib/string.c' line='881' column='1'/>
+        <parameter type-id='type-id-84' name='len' filepath='lib/string.c' line='881' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/cpu.c' language='LANG_C89'>
+      <enum-decl name='cpuhp_state' filepath='include/linux/cpuhotplug.h' line='25' column='1' id='type-id-93'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='CPUHP_INVALID' value='-1'/>
+        <enumerator name='CPUHP_OFFLINE' value='0'/>
+        <enumerator name='CPUHP_CREATE_THREADS' value='1'/>
+        <enumerator name='CPUHP_PERF_PREPARE' value='2'/>
+        <enumerator name='CPUHP_PERF_X86_PREPARE' value='3'/>
+        <enumerator name='CPUHP_PERF_X86_AMD_UNCORE_PREP' value='4'/>
+        <enumerator name='CPUHP_PERF_POWER' value='5'/>
+        <enumerator name='CPUHP_PERF_SUPERH' value='6'/>
+        <enumerator name='CPUHP_X86_HPET_DEAD' value='7'/>
+        <enumerator name='CPUHP_X86_APB_DEAD' value='8'/>
+        <enumerator name='CPUHP_X86_MCE_DEAD' value='9'/>
+        <enumerator name='CPUHP_VIRT_NET_DEAD' value='10'/>
+        <enumerator name='CPUHP_SLUB_DEAD' value='11'/>
+        <enumerator name='CPUHP_MM_WRITEBACK_DEAD' value='12'/>
+        <enumerator name='CPUHP_MM_VMSTAT_DEAD' value='13'/>
+        <enumerator name='CPUHP_SOFTIRQ_DEAD' value='14'/>
+        <enumerator name='CPUHP_NET_MVNETA_DEAD' value='15'/>
+        <enumerator name='CPUHP_CPUIDLE_DEAD' value='16'/>
+        <enumerator name='CPUHP_ARM64_FPSIMD_DEAD' value='17'/>
+        <enumerator name='CPUHP_ARM_OMAP_WAKE_DEAD' value='18'/>
+        <enumerator name='CPUHP_IRQ_POLL_DEAD' value='19'/>
+        <enumerator name='CPUHP_BLOCK_SOFTIRQ_DEAD' value='20'/>
+        <enumerator name='CPUHP_ACPI_CPUDRV_DEAD' value='21'/>
+        <enumerator name='CPUHP_S390_PFAULT_DEAD' value='22'/>
+        <enumerator name='CPUHP_BLK_MQ_DEAD' value='23'/>
+        <enumerator name='CPUHP_FS_BUFF_DEAD' value='24'/>
+        <enumerator name='CPUHP_PRINTK_DEAD' value='25'/>
+        <enumerator name='CPUHP_MM_MEMCQ_DEAD' value='26'/>
+        <enumerator name='CPUHP_PERCPU_CNT_DEAD' value='27'/>
+        <enumerator name='CPUHP_RADIX_DEAD' value='28'/>
+        <enumerator name='CPUHP_PAGE_ALLOC_DEAD' value='29'/>
+        <enumerator name='CPUHP_NET_DEV_DEAD' value='30'/>
+        <enumerator name='CPUHP_PCI_XGENE_DEAD' value='31'/>
+        <enumerator name='CPUHP_IOMMU_INTEL_DEAD' value='32'/>
+        <enumerator name='CPUHP_LUSTRE_CFS_DEAD' value='33'/>
+        <enumerator name='CPUHP_AP_ARM_CACHE_B15_RAC_DEAD' value='34'/>
+        <enumerator name='CPUHP_WORKQUEUE_PREP' value='35'/>
+        <enumerator name='CPUHP_POWER_NUMA_PREPARE' value='36'/>
+        <enumerator name='CPUHP_HRTIMERS_PREPARE' value='37'/>
+        <enumerator name='CPUHP_PROFILE_PREPARE' value='38'/>
+        <enumerator name='CPUHP_X2APIC_PREPARE' value='39'/>
+        <enumerator name='CPUHP_SMPCFD_PREPARE' value='40'/>
+        <enumerator name='CPUHP_RELAY_PREPARE' value='41'/>
+        <enumerator name='CPUHP_SLAB_PREPARE' value='42'/>
+        <enumerator name='CPUHP_MD_RAID5_PREPARE' value='43'/>
+        <enumerator name='CPUHP_RCUTREE_PREP' value='44'/>
+        <enumerator name='CPUHP_CPUIDLE_COUPLED_PREPARE' value='45'/>
+        <enumerator name='CPUHP_POWERPC_PMAC_PREPARE' value='46'/>
+        <enumerator name='CPUHP_POWERPC_MMU_CTX_PREPARE' value='47'/>
+        <enumerator name='CPUHP_XEN_PREPARE' value='48'/>
+        <enumerator name='CPUHP_XEN_EVTCHN_PREPARE' value='49'/>
+        <enumerator name='CPUHP_ARM_SHMOBILE_SCU_PREPARE' value='50'/>
+        <enumerator name='CPUHP_SH_SH3X_PREPARE' value='51'/>
+        <enumerator name='CPUHP_NET_FLOW_PREPARE' value='52'/>
+        <enumerator name='CPUHP_TOPOLOGY_PREPARE' value='53'/>
+        <enumerator name='CPUHP_NET_IUCV_PREPARE' value='54'/>
+        <enumerator name='CPUHP_ARM_BL_PREPARE' value='55'/>
+        <enumerator name='CPUHP_TRACE_RB_PREPARE' value='56'/>
+        <enumerator name='CPUHP_MM_ZS_PREPARE' value='57'/>
+        <enumerator name='CPUHP_MM_ZSWP_MEM_PREPARE' value='58'/>
+        <enumerator name='CPUHP_MM_ZSWP_POOL_PREPARE' value='59'/>
+        <enumerator name='CPUHP_KVM_PPC_BOOK3S_PREPARE' value='60'/>
+        <enumerator name='CPUHP_ZCOMP_PREPARE' value='61'/>
+        <enumerator name='CPUHP_TIMERS_PREPARE' value='62'/>
+        <enumerator name='CPUHP_MIPS_SOC_PREPARE' value='63'/>
+        <enumerator name='CPUHP_BP_PREPARE_DYN' value='64'/>
+        <enumerator name='CPUHP_BP_PREPARE_DYN_END' value='84'/>
+        <enumerator name='CPUHP_BRINGUP_CPU' value='85'/>
+        <enumerator name='CPUHP_AP_IDLE_DEAD' value='86'/>
+        <enumerator name='CPUHP_AP_OFFLINE' value='87'/>
+        <enumerator name='CPUHP_AP_SCHED_STARTING' value='88'/>
+        <enumerator name='CPUHP_AP_RCUTREE_DYING' value='89'/>
+        <enumerator name='CPUHP_AP_IRQ_GIC_STARTING' value='90'/>
+        <enumerator name='CPUHP_AP_IRQ_HIP04_STARTING' value='91'/>
+        <enumerator name='CPUHP_AP_IRQ_ARMADA_XP_STARTING' value='92'/>
+        <enumerator name='CPUHP_AP_IRQ_BCM2836_STARTING' value='93'/>
+        <enumerator name='CPUHP_AP_IRQ_MIPS_GIC_STARTING' value='94'/>
+        <enumerator name='CPUHP_AP_ARM_MVEBU_COHERENCY' value='95'/>
+        <enumerator name='CPUHP_AP_MICROCODE_LOADER' value='96'/>
+        <enumerator name='CPUHP_AP_PERF_X86_AMD_UNCORE_STARTING' value='97'/>
+        <enumerator name='CPUHP_AP_PERF_X86_STARTING' value='98'/>
+        <enumerator name='CPUHP_AP_PERF_X86_AMD_IBS_STARTING' value='99'/>
+        <enumerator name='CPUHP_AP_PERF_X86_CQM_STARTING' value='100'/>
+        <enumerator name='CPUHP_AP_PERF_X86_CSTATE_STARTING' value='101'/>
+        <enumerator name='CPUHP_AP_PERF_XTENSA_STARTING' value='102'/>
+        <enumerator name='CPUHP_AP_MIPS_OP_LOONGSON3_STARTING' value='103'/>
+        <enumerator name='CPUHP_AP_ARM_SDEI_STARTING' value='104'/>
+        <enumerator name='CPUHP_AP_ARM_VFP_STARTING' value='105'/>
+        <enumerator name='CPUHP_AP_ARM64_DEBUG_MONITORS_STARTING' value='106'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_HW_BREAKPOINT_STARTING' value='107'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_ACPI_STARTING' value='108'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_STARTING' value='109'/>
+        <enumerator name='CPUHP_AP_ARM_L2X0_STARTING' value='110'/>
+        <enumerator name='CPUHP_AP_EXYNOS4_MCT_TIMER_STARTING' value='111'/>
+        <enumerator name='CPUHP_AP_ARM_ARCH_TIMER_STARTING' value='112'/>
+        <enumerator name='CPUHP_AP_ARM_GLOBAL_TIMER_STARTING' value='113'/>
+        <enumerator name='CPUHP_AP_JCORE_TIMER_STARTING' value='114'/>
+        <enumerator name='CPUHP_AP_ARM_TWD_STARTING' value='115'/>
+        <enumerator name='CPUHP_AP_QCOM_TIMER_STARTING' value='116'/>
+        <enumerator name='CPUHP_AP_ARMADA_TIMER_STARTING' value='117'/>
+        <enumerator name='CPUHP_AP_MARCO_TIMER_STARTING' value='118'/>
+        <enumerator name='CPUHP_AP_MIPS_GIC_TIMER_STARTING' value='119'/>
+        <enumerator name='CPUHP_AP_ARC_TIMER_STARTING' value='120'/>
+        <enumerator name='CPUHP_AP_RISCV_TIMER_STARTING' value='121'/>
+        <enumerator name='CPUHP_AP_KVM_STARTING' value='122'/>
+        <enumerator name='CPUHP_AP_KVM_ARM_VGIC_INIT_STARTING' value='123'/>
+        <enumerator name='CPUHP_AP_KVM_ARM_VGIC_STARTING' value='124'/>
+        <enumerator name='CPUHP_AP_KVM_ARM_TIMER_STARTING' value='125'/>
+        <enumerator name='CPUHP_AP_DUMMY_TIMER_STARTING' value='126'/>
+        <enumerator name='CPUHP_AP_ARM_XEN_STARTING' value='127'/>
+        <enumerator name='CPUHP_AP_ARM_CORESIGHT_STARTING' value='128'/>
+        <enumerator name='CPUHP_AP_ARM64_ISNDEP_STARTING' value='129'/>
+        <enumerator name='CPUHP_AP_SMPCFD_DYING' value='130'/>
+        <enumerator name='CPUHP_AP_X86_TBOOT_DYING' value='131'/>
+        <enumerator name='CPUHP_AP_ARM_CACHE_B15_RAC_DYING' value='132'/>
+        <enumerator name='CPUHP_AP_ONLINE' value='133'/>
+        <enumerator name='CPUHP_TEARDOWN_CPU' value='134'/>
+        <enumerator name='CPUHP_AP_ONLINE_IDLE' value='135'/>
+        <enumerator name='CPUHP_AP_SMPBOOT_THREADS' value='136'/>
+        <enumerator name='CPUHP_AP_X86_VDSO_VMA_ONLINE' value='137'/>
+        <enumerator name='CPUHP_AP_IRQ_AFFINITY_ONLINE' value='138'/>
+        <enumerator name='CPUHP_AP_ARM_MVEBU_SYNC_CLOCKS' value='139'/>
+        <enumerator name='CPUHP_AP_PERF_ONLINE' value='140'/>
+        <enumerator name='CPUHP_AP_PERF_X86_ONLINE' value='141'/>
+        <enumerator name='CPUHP_AP_PERF_X86_UNCORE_ONLINE' value='142'/>
+        <enumerator name='CPUHP_AP_PERF_X86_AMD_UNCORE_ONLINE' value='143'/>
+        <enumerator name='CPUHP_AP_PERF_X86_AMD_POWER_ONLINE' value='144'/>
+        <enumerator name='CPUHP_AP_PERF_X86_RAPL_ONLINE' value='145'/>
+        <enumerator name='CPUHP_AP_PERF_X86_CQM_ONLINE' value='146'/>
+        <enumerator name='CPUHP_AP_PERF_X86_CSTATE_ONLINE' value='147'/>
+        <enumerator name='CPUHP_AP_PERF_S390_CF_ONLINE' value='148'/>
+        <enumerator name='CPUHP_AP_PERF_S390_SF_ONLINE' value='149'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_CCI_ONLINE' value='150'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_CCN_ONLINE' value='151'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_HISI_DDRC_ONLINE' value='152'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_HISI_HHA_ONLINE' value='153'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_HISI_L3_ONLINE' value='154'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_L2X0_ONLINE' value='155'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_QCOM_L2_ONLINE' value='156'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_QCOM_L3_ONLINE' value='157'/>
+        <enumerator name='CPUHP_AP_PERF_POWERPC_NEST_IMC_ONLINE' value='158'/>
+        <enumerator name='CPUHP_AP_PERF_POWERPC_CORE_IMC_ONLINE' value='159'/>
+        <enumerator name='CPUHP_AP_PERF_POWERPC_THREAD_IMC_ONLINE' value='160'/>
+        <enumerator name='CPUHP_AP_WATCHDOG_ONLINE' value='161'/>
+        <enumerator name='CPUHP_AP_WORKQUEUE_ONLINE' value='162'/>
+        <enumerator name='CPUHP_AP_RCUTREE_ONLINE' value='163'/>
+        <enumerator name='CPUHP_AP_BASE_CACHEINFO_ONLINE' value='164'/>
+        <enumerator name='CPUHP_AP_ONLINE_DYN' value='165'/>
+        <enumerator name='CPUHP_AP_ONLINE_DYN_END' value='195'/>
+        <enumerator name='CPUHP_AP_X86_HPET_ONLINE' value='196'/>
+        <enumerator name='CPUHP_AP_X86_KVM_CLK_ONLINE' value='197'/>
+        <enumerator name='CPUHP_AP_ACTIVE' value='198'/>
+        <enumerator name='CPUHP_ONLINE' value='199'/>
+      </enum-decl>
+      <pointer-type-def type-id='type-id-95' size-in-bits='64' id='type-id-96'/>
+      <function-decl name='cpus_read_lock' mangled-name='cpus_read_lock' filepath='kernel/cpu.c' line='286' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpus_read_lock'>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='cpus_read_unlock' mangled-name='cpus_read_unlock' filepath='kernel/cpu.c' line='298' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpus_read_unlock'>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='__cpuhp_state_add_instance' mangled-name='__cpuhp_state_add_instance' filepath='kernel/cpu.c' line='1666' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__cpuhp_state_add_instance'>
+        <parameter type-id='type-id-93' name='state' filepath='kernel/cpu.c' line='1666' column='1'/>
+        <parameter type-id='type-id-97' name='node' filepath='kernel/cpu.c' line='1666' column='1'/>
+        <parameter type-id='type-id-33' name='invoke' filepath='kernel/cpu.c' line='1667' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='__cpuhp_setup_state' mangled-name='__cpuhp_setup_state' filepath='kernel/cpu.c' line='1754' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__cpuhp_setup_state'>
+        <parameter type-id='type-id-93' name='state' filepath='kernel/cpu.c' line='1754' column='1'/>
+        <parameter type-id='type-id-4' name='name' filepath='kernel/cpu.c' line='1755' column='1'/>
+        <parameter type-id='type-id-33' name='invoke' filepath='kernel/cpu.c' line='1755' column='1'/>
+        <parameter type-id='type-id-96' name='startup' filepath='kernel/cpu.c' line='1756' column='1'/>
+        <parameter type-id='type-id-96' name='teardown' filepath='kernel/cpu.c' line='1757' column='1'/>
+        <parameter type-id='type-id-33' name='multi_instance' filepath='kernel/cpu.c' line='1758' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='__cpuhp_state_remove_instance' mangled-name='__cpuhp_state_remove_instance' filepath='kernel/cpu.c' line='1770' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__cpuhp_state_remove_instance'>
+        <parameter type-id='type-id-93' name='state' filepath='kernel/cpu.c' line='1770' column='1'/>
+        <parameter type-id='type-id-97' name='node' filepath='kernel/cpu.c' line='1771' column='1'/>
+        <parameter type-id='type-id-33' name='invoke' filepath='kernel/cpu.c' line='1771' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='__cpuhp_remove_state' mangled-name='__cpuhp_remove_state' filepath='kernel/cpu.c' line='1856' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__cpuhp_remove_state'>
+        <parameter type-id='type-id-93' name='state' filepath='kernel/cpu.c' line='1856' column='1'/>
+        <parameter type-id='type-id-33' name='invoke' filepath='kernel/cpu.c' line='1856' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-95'>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/percpu.c' language='LANG_C89'>
+      <function-decl name='__alloc_percpu' mangled-name='__alloc_percpu' filepath='mm/percpu.c' line='1558' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__alloc_percpu'>
+        <parameter type-id='type-id-84' name='size' filepath='mm/percpu.c' line='1558' column='1'/>
+        <parameter type-id='type-id-84' name='align' filepath='mm/percpu.c' line='1558' column='1'/>
+        <return type-id='type-id-15'/>
+      </function-decl>
+      <function-decl name='free_percpu' mangled-name='free_percpu' filepath='mm/percpu.c' line='1719' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='free_percpu'>
+        <parameter type-id='type-id-15' name='ptr' filepath='mm/percpu.c' line='1719' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/mm/ioremap.c' language='LANG_C89'>
+      <type-decl name='long long unsigned int' size-in-bits='64' id='type-id-98'/>
+      <typedef-decl name='phys_addr_t' type-id='type-id-40' filepath='include/linux/types.h' line='163' column='1' id='type-id-99'/>
+      <typedef-decl name='u64' type-id='type-id-100' filepath='include/asm-generic/int-ll64.h' line='23' column='1' id='type-id-40'/>
+      <typedef-decl name='__u64' type-id='type-id-98' filepath='include/uapi/asm-generic/int-ll64.h' line='31' column='1' id='type-id-100'/>
+      <typedef-decl name='pgprot_t' type-id='type-id-101' filepath='arch/arm64/include/asm/pgtable-types.h' line='53' column='1' id='type-id-102'/>
+      <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-102' visibility='default' filepath='arch/arm64/include/asm/pgtable-types.h' line='53' column='1' id='type-id-101'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pgprot' type-id='type-id-103' visibility='default' filepath='arch/arm64/include/asm/pgtable-types.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='pteval_t' type-id='type-id-40' filepath='arch/arm64/include/asm/pgtable-types.h' line='25' column='1' id='type-id-103'/>
+      <function-decl name='__ioremap' mangled-name='__ioremap' filepath='arch/arm64/mm/ioremap.c' line='76' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__ioremap'>
+        <parameter type-id='type-id-99' name='phys_addr' filepath='arch/arm64/mm/ioremap.c' line='76' column='1'/>
+        <parameter type-id='type-id-84' name='size' filepath='arch/arm64/mm/ioremap.c' line='76' column='1'/>
+        <parameter type-id='type-id-102' name='prot' filepath='arch/arm64/mm/ioremap.c' line='76' column='1'/>
+        <return type-id='type-id-15'/>
+      </function-decl>
+      <function-decl name='__iounmap' mangled-name='__iounmap' filepath='arch/arm64/mm/ioremap.c' line='83' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__iounmap'>
+        <parameter type-id='type-id-104' name='io_addr' filepath='arch/arm64/mm/ioremap.c' line='83' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/signal.c' language='LANG_C89'>
+
+
+
+
+
+
+      <array-type-def dimensions='1' type-id='type-id-105' size-in-bits='256' id='type-id-106'>
+        <subrange length='4' type-id='type-id-9' id='type-id-107'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-108' size-in-bits='80' id='type-id-109'>
+        <subrange length='5' type-id='type-id-9' id='type-id-110'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-100' size-in-bits='1984' id='type-id-111'>
+        <subrange length='31' type-id='type-id-9' id='type-id-112'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-113' size-in-bits='320' id='type-id-114'>
+        <subrange length='5' type-id='type-id-9' id='type-id-110'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-115' size-in-bits='896' id='type-id-116'>
+        <subrange length='14' type-id='type-id-9' id='type-id-117'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-115' size-in-bits='1856' id='type-id-118'>
+        <subrange length='29' type-id='type-id-9' id='type-id-119'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-115' size-in-bits='2240' id='type-id-120'>
+        <subrange length='35' type-id='type-id-9' id='type-id-121'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-115' size-in-bits='3584' id='type-id-122'>
+        <subrange length='56' type-id='type-id-9' id='type-id-123'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-115' size-in-bits='448' id='type-id-124'>
+        <subrange length='7' type-id='type-id-9' id='type-id-125'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-115' size-in-bits='infinite' id='type-id-126'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-26' size-in-bits='64' id='type-id-127'>
+        <subrange length='2' type-id='type-id-9' id='type-id-128'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-129' size-in-bits='4160' id='type-id-130'>
+        <subrange length='5' type-id='type-id-9' id='type-id-110'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-131' size-in-bits='infinite' id='type-id-132'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-133' size-in-bits='5120' id='type-id-134'>
+        <subrange length='16' type-id='type-id-9' id='type-id-135'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-136' size-in-bits='320' id='type-id-137'>
+        <subrange length='5' type-id='type-id-9' id='type-id-110'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-138' size-in-bits='320' id='type-id-139'>
+        <subrange length='5' type-id='type-id-9' id='type-id-110'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-140' size-in-bits='152' id='type-id-141'>
+        <subrange length='19' type-id='type-id-9' id='type-id-142'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1' size-in-bits='1008' id='type-id-143'>
+        <subrange length='126' type-id='type-id-9' id='type-id-144'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1' size-in-bits='176' id='type-id-145'>
+        <subrange length='22' type-id='type-id-9' id='type-id-146'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1' size-in-bits='296' id='type-id-147'>
+        <subrange length='37' type-id='type-id-9' id='type-id-148'/>
+
+      </array-type-def>
+      <class-decl name='audit_aux_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-149'/>
+      <class-decl name='audit_tree_refs' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-150'/>
+      <class-decl name='badblocks' size-in-bits='512' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-151'/>
+      <class-decl name='blk_flush_queue' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-152'/>
+      <class-decl name='blk_mq_alloc_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-153'/>
+      <class-decl name='blk_mq_ctx' size-in-bits='2048' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-154'/>
+      <class-decl name='blk_mq_debugfs_attr' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-155'/>
+      <class-decl name='blk_mq_hw_ctx' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-156'/>
+      <class-decl name='blk_mq_ops' size-in-bits='896' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-157'/>
+      <class-decl name='blk_mq_tag_set' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-158'/>
+      <class-decl name='blk_queue_stats' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-159'/>
+      <class-decl name='blk_stat_callback' size-in-bits='960' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-160'/>
+      <class-decl name='bpf_prog' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-161'/>
+      <class-decl name='bsg_job' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-162'/>
+      <class-decl name='disk_events' size-in-bits='1408' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-163'/>
+      <class-decl name='event_filter' size-in-bits='128' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-164'/>
+      <class-decl name='eventfd_ctx' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-165'/>
+      <class-decl name='hd_geometry' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-166'/>
+      <class-decl name='keyslot_manager' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-167'/>
+      <class-decl name='net' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-168'/>
+      <class-decl name='pr_ops' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-169'/>
+      <class-decl name='ring_buffer' size-in-bits='1920' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-170'/>
+      <class-decl name='ring_buffer_iter' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-171'/>
+      <class-decl name='rq_qos' size-in-bits='256' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-172'/>
+      <class-decl name='serial_icounter_struct' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-173'/>
+      <class-decl name='timer_rand_state' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-174'/>
+      <class-decl name='trace_array' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-175'/>
+      <class-decl name='trace_buffer' size-in-bits='320' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-30'/>
+      <class-decl name='tracer' size-in-bits='1280' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-176'/>
+      <array-type-def dimensions='1' type-id='type-id-3' size-in-bits='infinite' id='type-id-177'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-178' size-in-bits='64' id='type-id-179'>
+        <subrange length='1' type-id='type-id-9' id='type-id-180'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-181' size-in-bits='9152' id='type-id-182'>
+        <subrange length='11' type-id='type-id-9' id='type-id-183'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-184' size-in-bits='infinite' id='type-id-185'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-186' size-in-bits='4096' id='type-id-187'>
+        <subrange length='64' type-id='type-id-9' id='type-id-188'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-20' size-in-bits='640' id='type-id-189'>
+        <subrange length='5' type-id='type-id-9' id='type-id-110'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-20' size-in-bits='768' id='type-id-190'>
+        <subrange length='6' type-id='type-id-9' id='type-id-191'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-192' size-in-bits='1856' id='type-id-193'>
+        <subrange length='29' type-id='type-id-9' id='type-id-119'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-192' size-in-bits='2240' id='type-id-194'>
+        <subrange length='35' type-id='type-id-9' id='type-id-121'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-192' size-in-bits='192' id='type-id-195'>
+        <subrange length='3' type-id='type-id-9' id='type-id-196'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-197' size-in-bits='infinite' id='type-id-198'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-199' size-in-bits='1664' id='type-id-200'>
+        <subrange length='13' type-id='type-id-9' id='type-id-201'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-202' size-in-bits='infinite' id='type-id-203'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-204' size-in-bits='1280' id='type-id-205'>
+        <subrange length='4' type-id='type-id-9' id='type-id-107'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-204' size-in-bits='1600' id='type-id-206'>
+        <subrange length='5' type-id='type-id-9' id='type-id-110'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-207' size-in-bits='infinite' id='type-id-208'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-209' size-in-bits='112' id='type-id-210'>
+        <subrange length='14' type-id='type-id-9' id='type-id-117'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-209' size-in-bits='232' id='type-id-211'>
+        <subrange length='29' type-id='type-id-9' id='type-id-119'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-40' size-in-bits='1984' id='type-id-212'>
+        <subrange length='31' type-id='type-id-9' id='type-id-112'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-40' size-in-bits='192' id='type-id-213'>
+        <subrange length='3' type-id='type-id-9' id='type-id-196'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-214' size-in-bits='512' id='type-id-215'>
+        <subrange length='64' type-id='type-id-9' id='type-id-188'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-216' size-in-bits='32768' id='type-id-217'>
+        <subrange length='4096' type-id='type-id-9' id='type-id-218'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-16' size-in-bits='128' id='type-id-219'>
+        <subrange length='2' type-id='type-id-9' id='type-id-128'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-16' size-in-bits='192' id='type-id-220'>
+        <subrange length='3' type-id='type-id-9' id='type-id-196'/>
+
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='type-id-16' size-in-bits='512' id='type-id-221'>
+        <subrange length='3' type-id='type-id-9' id='type-id-196'/>
+
+        <subrange length='5' type-id='type-id-9' id='type-id-110'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-16' size-in-bits='256' id='type-id-222'>
+        <subrange length='4' type-id='type-id-9' id='type-id-107'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-16' size-in-bits='3584' id='type-id-223'>
+        <subrange length='56' type-id='type-id-9' id='type-id-123'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-15' size-in-bits='128' id='type-id-224'>
+        <subrange length='2' type-id='type-id-9' id='type-id-128'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-225' size-in-bits='384' id='type-id-226'>
+        <subrange length='2' type-id='type-id-9' id='type-id-128'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-227' size-in-bits='36864' id='type-id-228'>
+        <subrange length='3' type-id='type-id-9' id='type-id-196'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-229' size-in-bits='512' id='type-id-230'>
+        <subrange length='1' type-id='type-id-9' id='type-id-180'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-231' size-in-bits='512' id='type-id-232'>
+        <subrange length='4' type-id='type-id-9' id='type-id-107'/>
+
+      </array-type-def>
+      <union-decl name='__anonymous_union__' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='27' column='1' id='type-id-233'>
+        <data-member access='private'>
+          <var-decl name='futex' type-id='type-id-234' visibility='default' filepath='include/linux/restart_block.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='nanosleep' type-id='type-id-235' visibility='default' filepath='include/linux/restart_block.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='poll' type-id='type-id-236' visibility='default' filepath='include/linux/restart_block.h' line='54' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='48' column='1' id='type-id-236'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ufds' type-id='type-id-237' visibility='default' filepath='include/linux/restart_block.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nfds' type-id='type-id-17' visibility='default' filepath='include/linux/restart_block.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='has_timeout' type-id='type-id-17' visibility='default' filepath='include/linux/restart_block.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tv_sec' type-id='type-id-16' visibility='default' filepath='include/linux/restart_block.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tv_nsec' type-id='type-id-16' visibility='default' filepath='include/linux/restart_block.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tty_struct' size-in-bits='5632' is-struct='yes' visibility='default' filepath='include/linux/tty.h' line='283' column='1' id='type-id-238'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='magic' type-id='type-id-17' visibility='default' filepath='include/linux/tty.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='kref' type-id='type-id-239' visibility='default' filepath='include/linux/tty.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='type-id-240' visibility='default' filepath='include/linux/tty.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='driver' type-id='type-id-241' visibility='default' filepath='include/linux/tty.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ops' type-id='type-id-242' visibility='default' filepath='include/linux/tty.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='index' type-id='type-id-17' visibility='default' filepath='include/linux/tty.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ldisc_sem' type-id='type-id-243' visibility='default' filepath='include/linux/tty.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='ldisc' type-id='type-id-244' visibility='default' filepath='include/linux/tty.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='atomic_write_lock' type-id='type-id-245' visibility='default' filepath='include/linux/tty.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='legacy_mutex' type-id='type-id-245' visibility='default' filepath='include/linux/tty.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='throttle_mutex' type-id='type-id-245' visibility='default' filepath='include/linux/tty.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='termios_rwsem' type-id='type-id-246' visibility='default' filepath='include/linux/tty.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='winsize_mutex' type-id='type-id-245' visibility='default' filepath='include/linux/tty.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='ctrl_lock' type-id='type-id-247' visibility='default' filepath='include/linux/tty.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='flow_lock' type-id='type-id-247' visibility='default' filepath='include/linux/tty.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='termios' type-id='type-id-248' visibility='default' filepath='include/linux/tty.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2528'>
+          <var-decl name='termios_locked' type-id='type-id-248' visibility='default' filepath='include/linux/tty.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='termiox' type-id='type-id-249' visibility='default' filepath='include/linux/tty.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='name' type-id='type-id-250' visibility='default' filepath='include/linux/tty.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='pgrp' type-id='type-id-251' visibility='default' filepath='include/linux/tty.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='session' type-id='type-id-251' visibility='default' filepath='include/linux/tty.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='include/linux/tty.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='count' type-id='type-id-17' visibility='default' filepath='include/linux/tty.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3680'>
+          <var-decl name='winsize' type-id='type-id-252' visibility='default' filepath='include/linux/tty.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='stopped' type-id='type-id-16' visibility='default' filepath='include/linux/tty.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='flow_stopped' type-id='type-id-16' visibility='default' filepath='include/linux/tty.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='unused' type-id='type-id-16' visibility='default' filepath='include/linux/tty.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='hw_stopped' type-id='type-id-17' visibility='default' filepath='include/linux/tty.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='ctrl_status' type-id='type-id-16' visibility='default' filepath='include/linux/tty.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='packet' type-id='type-id-16' visibility='default' filepath='include/linux/tty.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='unused_ctrl' type-id='type-id-16' visibility='default' filepath='include/linux/tty.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='receive_room' type-id='type-id-5' visibility='default' filepath='include/linux/tty.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4000'>
+          <var-decl name='flow_change' type-id='type-id-17' visibility='default' filepath='include/linux/tty.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='link' type-id='type-id-253' visibility='default' filepath='include/linux/tty.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='fasync' type-id='type-id-254' visibility='default' filepath='include/linux/tty.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='write_wait' type-id='type-id-225' visibility='default' filepath='include/linux/tty.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='read_wait' type-id='type-id-225' visibility='default' filepath='include/linux/tty.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='hangup_work' type-id='type-id-255' visibility='default' filepath='include/linux/tty.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='disc_data' type-id='type-id-15' visibility='default' filepath='include/linux/tty.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='driver_data' type-id='type-id-15' visibility='default' filepath='include/linux/tty.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='files_lock' type-id='type-id-247' visibility='default' filepath='include/linux/tty.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='tty_files' type-id='type-id-20' visibility='default' filepath='include/linux/tty.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='closing' type-id='type-id-17' visibility='default' filepath='include/linux/tty.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='write_buf' type-id='type-id-256' visibility='default' filepath='include/linux/tty.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='write_cnt' type-id='type-id-17' visibility='default' filepath='include/linux/tty.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='SAK_work' type-id='type-id-255' visibility='default' filepath='include/linux/tty.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='port' type-id='type-id-257' visibility='default' filepath='include/linux/tty.h' line='338' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tty_driver' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/tty_driver.h' line='299' column='1' id='type-id-258'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='magic' type-id='type-id-17' visibility='default' filepath='include/linux/tty_driver.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='kref' type-id='type-id-239' visibility='default' filepath='include/linux/tty_driver.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cdevs' type-id='type-id-259' visibility='default' filepath='include/linux/tty_driver.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='include/linux/tty_driver.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='driver_name' type-id='type-id-4' visibility='default' filepath='include/linux/tty_driver.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/tty_driver.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='name_base' type-id='type-id-17' visibility='default' filepath='include/linux/tty_driver.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='major' type-id='type-id-17' visibility='default' filepath='include/linux/tty_driver.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='minor_start' type-id='type-id-17' visibility='default' filepath='include/linux/tty_driver.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='num' type-id='type-id-5' visibility='default' filepath='include/linux/tty_driver.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='type' type-id='type-id-261' visibility='default' filepath='include/linux/tty_driver.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='subtype' type-id='type-id-261' visibility='default' filepath='include/linux/tty_driver.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='init_termios' type-id='type-id-248' visibility='default' filepath='include/linux/tty_driver.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='include/linux/tty_driver.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='proc_entry' type-id='type-id-262' visibility='default' filepath='include/linux/tty_driver.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='other' type-id='type-id-241' visibility='default' filepath='include/linux/tty_driver.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='ttys' type-id='type-id-263' visibility='default' filepath='include/linux/tty_driver.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='ports' type-id='type-id-264' visibility='default' filepath='include/linux/tty_driver.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='termios' type-id='type-id-265' visibility='default' filepath='include/linux/tty_driver.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='driver_state' type-id='type-id-15' visibility='default' filepath='include/linux/tty_driver.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='ops' type-id='type-id-242' visibility='default' filepath='include/linux/tty_driver.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='tty_drivers' type-id='type-id-20' visibility='default' filepath='include/linux/tty_driver.h' line='330' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cdev' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/cdev.h' line='14' column='1' id='type-id-266'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='type-id-267' visibility='default' filepath='include/linux/cdev.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='include/linux/cdev.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ops' type-id='type-id-268' visibility='default' filepath='include/linux/cdev.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/cdev.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='dev' type-id='type-id-269' visibility='default' filepath='include/linux/cdev.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='count' type-id='type-id-5' visibility='default' filepath='include/linux/cdev.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ktermios' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/uapi/asm-generic/termbits.h' line='32' column='1' id='type-id-248'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='c_iflag' type-id='type-id-270' visibility='default' filepath='include/uapi/asm-generic/termbits.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='c_oflag' type-id='type-id-270' visibility='default' filepath='include/uapi/asm-generic/termbits.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='c_cflag' type-id='type-id-270' visibility='default' filepath='include/uapi/asm-generic/termbits.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='c_lflag' type-id='type-id-270' visibility='default' filepath='include/uapi/asm-generic/termbits.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='c_line' type-id='type-id-140' visibility='default' filepath='include/uapi/asm-generic/termbits.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='c_cc' type-id='type-id-141' visibility='default' filepath='include/uapi/asm-generic/termbits.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='c_ispeed' type-id='type-id-271' visibility='default' filepath='include/uapi/asm-generic/termbits.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='c_ospeed' type-id='type-id-271' visibility='default' filepath='include/uapi/asm-generic/termbits.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='tcflag_t' type-id='type-id-5' filepath='include/uapi/asm-generic/termbits.h' line='9' column='1' id='type-id-270'/>
+      <typedef-decl name='cc_t' type-id='type-id-216' filepath='include/uapi/asm-generic/termbits.h' line='7' column='1' id='type-id-140'/>
+      <typedef-decl name='speed_t' type-id='type-id-5' filepath='include/uapi/asm-generic/termbits.h' line='8' column='1' id='type-id-271'/>
+      <class-decl name='tty_port' size-in-bits='2816' is-struct='yes' visibility='default' filepath='include/linux/tty.h' line='228' column='1' id='type-id-272'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buf' type-id='type-id-273' visibility='default' filepath='include/linux/tty.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='tty' type-id='type-id-253' visibility='default' filepath='include/linux/tty.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='itty' type-id='type-id-253' visibility='default' filepath='include/linux/tty.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='ops' type-id='type-id-274' visibility='default' filepath='include/linux/tty.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='client_ops' type-id='type-id-275' visibility='default' filepath='include/linux/tty.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='include/linux/tty.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='blocked_open' type-id='type-id-17' visibility='default' filepath='include/linux/tty.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='count' type-id='type-id-17' visibility='default' filepath='include/linux/tty.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='open_wait' type-id='type-id-225' visibility='default' filepath='include/linux/tty.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='delta_msr_wait' type-id='type-id-225' visibility='default' filepath='include/linux/tty.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='include/linux/tty.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='iflags' type-id='type-id-16' visibility='default' filepath='include/linux/tty.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='console' type-id='type-id-216' visibility='default' filepath='include/linux/tty.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='low_latency' type-id='type-id-216' visibility='default' filepath='include/linux/tty.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='mutex' type-id='type-id-245' visibility='default' filepath='include/linux/tty.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='buf_mutex' type-id='type-id-245' visibility='default' filepath='include/linux/tty.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='xmit_buf' type-id='type-id-256' visibility='default' filepath='include/linux/tty.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='close_delay' type-id='type-id-5' visibility='default' filepath='include/linux/tty.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2656'>
+          <var-decl name='closing_wait' type-id='type-id-5' visibility='default' filepath='include/linux/tty.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='drain_delay' type-id='type-id-17' visibility='default' filepath='include/linux/tty.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2720'>
+          <var-decl name='kref' type-id='type-id-239' visibility='default' filepath='include/linux/tty.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='client_data' type-id='type-id-15' visibility='default' filepath='include/linux/tty.h' line='252' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tty_bufhead' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/tty.h' line='85' column='1' id='type-id-273'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='type-id-276' visibility='default' filepath='include/linux/tty.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='work' type-id='type-id-255' visibility='default' filepath='include/linux/tty.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='lock' type-id='type-id-245' visibility='default' filepath='include/linux/tty.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='priority' type-id='type-id-26' visibility='default' filepath='include/linux/tty.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sentinel' type-id='type-id-277' visibility='default' filepath='include/linux/tty.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='free' type-id='type-id-278' visibility='default' filepath='include/linux/tty.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='mem_used' type-id='type-id-26' visibility='default' filepath='include/linux/tty.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='mem_limit' type-id='type-id-17' visibility='default' filepath='include/linux/tty.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='tail' type-id='type-id-276' visibility='default' filepath='include/linux/tty.h' line='94' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tty_buffer' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/tty.h' line='58' column='1' id='type-id-277'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='type-id-279' visibility='default' filepath='include/linux/tty.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='used' type-id='type-id-17' visibility='default' filepath='include/linux/tty.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='size' type-id='type-id-17' visibility='default' filepath='include/linux/tty.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='commit' type-id='type-id-17' visibility='default' filepath='include/linux/tty.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='read' type-id='type-id-17' visibility='default' filepath='include/linux/tty.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='type-id-17' visibility='default' filepath='include/linux/tty.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='data' type-id='type-id-280' visibility='default' filepath='include/linux/tty.h' line='69' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/tty.h' line='59' column='1' id='type-id-279'>
+        <data-member access='private'>
+          <var-decl name='next' type-id='type-id-276' visibility='default' filepath='include/linux/tty.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='free' type-id='type-id-281' visibility='default' filepath='include/linux/tty.h' line='61' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='llist_head' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/llist.h' line='66' column='1' id='type-id-278'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='first' type-id='type-id-282' visibility='default' filepath='include/linux/llist.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tty_port_operations' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/tty.h' line='205' column='1' id='type-id-283'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='carrier_raised' type-id='type-id-284' visibility='default' filepath='include/linux/tty.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dtr_rts' type-id='type-id-285' visibility='default' filepath='include/linux/tty.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='shutdown' type-id='type-id-286' visibility='default' filepath='include/linux/tty.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='activate' type-id='type-id-287' visibility='default' filepath='include/linux/tty.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='destruct' type-id='type-id-286' visibility='default' filepath='include/linux/tty.h' line='220' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tty_port_client_operations' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/tty.h' line='223' column='1' id='type-id-288'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='receive_buf' type-id='type-id-289' visibility='default' filepath='include/linux/tty.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='write_wakeup' type-id='type-id-286' visibility='default' filepath='include/linux/tty.h' line='225' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tty_operations' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/tty_driver.h' line='253' column='1' id='type-id-290'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lookup' type-id='type-id-291' visibility='default' filepath='include/linux/tty_driver.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='install' type-id='type-id-292' visibility='default' filepath='include/linux/tty_driver.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='remove' type-id='type-id-293' visibility='default' filepath='include/linux/tty_driver.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='open' type-id='type-id-294' visibility='default' filepath='include/linux/tty_driver.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='close' type-id='type-id-295' visibility='default' filepath='include/linux/tty_driver.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='shutdown' type-id='type-id-296' visibility='default' filepath='include/linux/tty_driver.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cleanup' type-id='type-id-296' visibility='default' filepath='include/linux/tty_driver.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='write' type-id='type-id-297' visibility='default' filepath='include/linux/tty_driver.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='put_char' type-id='type-id-298' visibility='default' filepath='include/linux/tty_driver.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='flush_chars' type-id='type-id-296' visibility='default' filepath='include/linux/tty_driver.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='write_room' type-id='type-id-299' visibility='default' filepath='include/linux/tty_driver.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='chars_in_buffer' type-id='type-id-299' visibility='default' filepath='include/linux/tty_driver.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='ioctl' type-id='type-id-300' visibility='default' filepath='include/linux/tty_driver.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='compat_ioctl' type-id='type-id-301' visibility='default' filepath='include/linux/tty_driver.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='set_termios' type-id='type-id-302' visibility='default' filepath='include/linux/tty_driver.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='throttle' type-id='type-id-296' visibility='default' filepath='include/linux/tty_driver.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='unthrottle' type-id='type-id-296' visibility='default' filepath='include/linux/tty_driver.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='stop' type-id='type-id-296' visibility='default' filepath='include/linux/tty_driver.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='start' type-id='type-id-296' visibility='default' filepath='include/linux/tty_driver.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='hangup' type-id='type-id-296' visibility='default' filepath='include/linux/tty_driver.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='break_ctl' type-id='type-id-303' visibility='default' filepath='include/linux/tty_driver.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='flush_buffer' type-id='type-id-296' visibility='default' filepath='include/linux/tty_driver.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='set_ldisc' type-id='type-id-296' visibility='default' filepath='include/linux/tty_driver.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='wait_until_sent' type-id='type-id-304' visibility='default' filepath='include/linux/tty_driver.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='send_xchar' type-id='type-id-305' visibility='default' filepath='include/linux/tty_driver.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='tiocmget' type-id='type-id-299' visibility='default' filepath='include/linux/tty_driver.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='tiocmset' type-id='type-id-306' visibility='default' filepath='include/linux/tty_driver.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='resize' type-id='type-id-307' visibility='default' filepath='include/linux/tty_driver.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='set_termiox' type-id='type-id-308' visibility='default' filepath='include/linux/tty_driver.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='get_icount' type-id='type-id-309' visibility='default' filepath='include/linux/tty_driver.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='show_fdinfo' type-id='type-id-310' visibility='default' filepath='include/linux/tty_driver.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='proc_show' type-id='type-id-311' visibility='default' filepath='include/linux/tty_driver.h' line='296' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='winsize' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/asm-generic/termios.h' line='15' column='1' id='type-id-252'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ws_row' type-id='type-id-312' visibility='default' filepath='include/uapi/asm-generic/termios.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='ws_col' type-id='type-id-312' visibility='default' filepath='include/uapi/asm-generic/termios.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ws_xpixel' type-id='type-id-312' visibility='default' filepath='include/uapi/asm-generic/termios.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='ws_ypixel' type-id='type-id-312' visibility='default' filepath='include/uapi/asm-generic/termios.h' line='19' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='termiox' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/termios.h' line='10' column='1' id='type-id-313'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x_hflag' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/termios.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='x_cflag' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/termios.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='x_rflag' type-id='type-id-109' visibility='default' filepath='include/uapi/linux/termios.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='x_sflag' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/termios.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ld_semaphore' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/tty_ldisc.h' line='127' column='1' id='type-id-243'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='type-id-115' visibility='default' filepath='include/linux/tty_ldisc.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait_lock' type-id='type-id-36' visibility='default' filepath='include/linux/tty_ldisc.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='wait_readers' type-id='type-id-5' visibility='default' filepath='include/linux/tty_ldisc.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='read_wait' type-id='type-id-20' visibility='default' filepath='include/linux/tty_ldisc.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='write_wait' type-id='type-id-20' visibility='default' filepath='include/linux/tty_ldisc.h' line='132' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tty_ldisc' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/tty_ldisc.h' line='209' column='1' id='type-id-314'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='type-id-315' visibility='default' filepath='include/linux/tty_ldisc.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tty' type-id='type-id-253' visibility='default' filepath='include/linux/tty_ldisc.h' line='211' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tty_ldisc_ops' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/tty_ldisc.h' line='169' column='1' id='type-id-316'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='magic' type-id='type-id-17' visibility='default' filepath='include/linux/tty_ldisc.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='type-id-2' visibility='default' filepath='include/linux/tty_ldisc.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='num' type-id='type-id-17' visibility='default' filepath='include/linux/tty_ldisc.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flags' type-id='type-id-17' visibility='default' filepath='include/linux/tty_ldisc.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='open' type-id='type-id-299' visibility='default' filepath='include/linux/tty_ldisc.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='close' type-id='type-id-296' visibility='default' filepath='include/linux/tty_ldisc.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='flush_buffer' type-id='type-id-296' visibility='default' filepath='include/linux/tty_ldisc.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='read' type-id='type-id-317' visibility='default' filepath='include/linux/tty_ldisc.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='write' type-id='type-id-318' visibility='default' filepath='include/linux/tty_ldisc.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ioctl' type-id='type-id-319' visibility='default' filepath='include/linux/tty_ldisc.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='compat_ioctl' type-id='type-id-320' visibility='default' filepath='include/linux/tty_ldisc.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_termios' type-id='type-id-302' visibility='default' filepath='include/linux/tty_ldisc.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='poll' type-id='type-id-321' visibility='default' filepath='include/linux/tty_ldisc.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='hangup' type-id='type-id-299' visibility='default' filepath='include/linux/tty_ldisc.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='receive_buf' type-id='type-id-322' visibility='default' filepath='include/linux/tty_ldisc.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='write_wakeup' type-id='type-id-296' visibility='default' filepath='include/linux/tty_ldisc.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='dcd_change' type-id='type-id-323' visibility='default' filepath='include/linux/tty_ldisc.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='receive_buf2' type-id='type-id-324' visibility='default' filepath='include/linux/tty_ldisc.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='include/linux/tty_ldisc.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='refcount' type-id='type-id-17' visibility='default' filepath='include/linux/tty_ldisc.h' line='206' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='poll_queue_proc' type-id='type-id-325' filepath='include/linux/poll.h' line='33' column='1' id='type-id-326'/>
+      <enum-decl name='audit_state' filepath='kernel/audit.h' line='36' column='1' id='type-id-327'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='AUDIT_DISABLED' value='0'/>
+        <enumerator name='AUDIT_BUILD_CONTEXT' value='1'/>
+        <enumerator name='AUDIT_RECORD_CONTEXT' value='2'/>
+      </enum-decl>
+      <class-decl name='audit_names' size-in-bits='832' is-struct='yes' visibility='default' filepath='kernel/audit.h' line='79' column='1' id='type-id-129'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='kernel/audit.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='type-id-328' visibility='default' filepath='kernel/audit.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name_len' type-id='type-id-17' visibility='default' filepath='kernel/audit.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='hidden' type-id='type-id-33' visibility='default' filepath='kernel/audit.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ino' type-id='type-id-16' visibility='default' filepath='kernel/audit.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dev' type-id='type-id-269' visibility='default' filepath='kernel/audit.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='mode' type-id='type-id-329' visibility='default' filepath='kernel/audit.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='uid' type-id='type-id-42' visibility='default' filepath='kernel/audit.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='gid' type-id='type-id-330' visibility='default' filepath='kernel/audit.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rdev' type-id='type-id-269' visibility='default' filepath='kernel/audit.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='osid' type-id='type-id-7' visibility='default' filepath='kernel/audit.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='fcap' type-id='type-id-331' visibility='default' filepath='kernel/audit.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='fcap_ver' type-id='type-id-5' visibility='default' filepath='kernel/audit.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='type' type-id='type-id-216' visibility='default' filepath='kernel/audit.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='808'>
+          <var-decl name='should_free' type-id='type-id-33' visibility='default' filepath='kernel/audit.h' line='101' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='filename' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='2474' column='1' id='type-id-332'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/fs.h' line='2475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='uptr' type-id='type-id-4' visibility='default' filepath='include/linux/fs.h' line='2476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='refcnt' type-id='type-id-17' visibility='default' filepath='include/linux/fs.h' line='2477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='aname' type-id='type-id-333' visibility='default' filepath='include/linux/fs.h' line='2478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='iname' type-id='type-id-177' visibility='default' filepath='include/linux/fs.h' line='2479' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='audit_cap_data' size-in-bits='256' is-struct='yes' visibility='default' filepath='kernel/audit.h' line='64' column='1' id='type-id-331'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='permitted' type-id='type-id-334' visibility='default' filepath='kernel/audit.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='inheritable' type-id='type-id-334' visibility='default' filepath='kernel/audit.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='type-id-335' visibility='default' filepath='kernel/audit.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ambient' type-id='type-id-334' visibility='default' filepath='kernel/audit.h' line='71' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='kernel/audit.h' line='67' column='1' id='type-id-335'>
+        <data-member access='private'>
+          <var-decl name='fE' type-id='type-id-5' visibility='default' filepath='kernel/audit.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='effective' type-id='type-id-334' visibility='default' filepath='kernel/audit.h' line='69' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__kernel_sockaddr_storage' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/uapi/linux/socket.h' line='14' column='1' id='type-id-336'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ss_family' type-id='type-id-337' visibility='default' filepath='include/uapi/linux/socket.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='__data' type-id='type-id-143' visibility='default' filepath='include/uapi/linux/socket.h' line='17' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='576' is-anonymous='yes' visibility='default' filepath='kernel/audit.h' line='157' column='1' id='type-id-338'>
+        <data-member access='private'>
+          <var-decl name='socketcall' type-id='type-id-339' visibility='default' filepath='kernel/audit.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ipc' type-id='type-id-340' visibility='default' filepath='kernel/audit.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='mq_getsetattr' type-id='type-id-341' visibility='default' filepath='kernel/audit.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='mq_notify' type-id='type-id-342' visibility='default' filepath='kernel/audit.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='mq_sendrecv' type-id='type-id-343' visibility='default' filepath='kernel/audit.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='mq_open' type-id='type-id-344' visibility='default' filepath='kernel/audit.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='capset' type-id='type-id-345' visibility='default' filepath='kernel/audit.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='mmap' type-id='type-id-346' visibility='default' filepath='kernel/audit.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='execve' type-id='type-id-347' visibility='default' filepath='kernel/audit.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='module' type-id='type-id-348' visibility='default' filepath='kernel/audit.h' line='205' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='448' is-struct='yes' is-anonymous='yes' visibility='default' filepath='kernel/audit.h' line='158' column='1' id='type-id-339'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nargs' type-id='type-id-17' visibility='default' filepath='kernel/audit.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='args' type-id='type-id-349' visibility='default' filepath='kernel/audit.h' line='160' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='kernel/audit.h' line='162' column='1' id='type-id-340'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='uid' type-id='type-id-42' visibility='default' filepath='kernel/audit.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='gid' type-id='type-id-330' visibility='default' filepath='kernel/audit.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mode' type-id='type-id-329' visibility='default' filepath='kernel/audit.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='osid' type-id='type-id-7' visibility='default' filepath='kernel/audit.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='has_perm' type-id='type-id-17' visibility='default' filepath='kernel/audit.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='perm_uid' type-id='type-id-350' visibility='default' filepath='kernel/audit.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='perm_gid' type-id='type-id-351' visibility='default' filepath='kernel/audit.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='perm_mode' type-id='type-id-329' visibility='default' filepath='kernel/audit.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='qbytes' type-id='type-id-16' visibility='default' filepath='kernel/audit.h' line='171' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__3' size-in-bits='576' is-struct='yes' is-anonymous='yes' visibility='default' filepath='kernel/audit.h' line='173' column='1' id='type-id-341'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mqdes' type-id='type-id-352' visibility='default' filepath='kernel/audit.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mqstat' type-id='type-id-353' visibility='default' filepath='kernel/audit.h' line='175' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='mqd_t' type-id='type-id-354' filepath='include/linux/types.h' line='28' column='1' id='type-id-352'/>
+      <typedef-decl name='__kernel_mqd_t' type-id='type-id-17' filepath='include/uapi/linux/posix_types.h' line='34' column='1' id='type-id-354'/>
+      <class-decl name='mq_attr' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/linux/mqueue.h' line='28' column='1' id='type-id-353'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mq_flags' type-id='type-id-105' visibility='default' filepath='include/uapi/linux/mqueue.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mq_maxmsg' type-id='type-id-105' visibility='default' filepath='include/uapi/linux/mqueue.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mq_msgsize' type-id='type-id-105' visibility='default' filepath='include/uapi/linux/mqueue.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mq_curmsgs' type-id='type-id-105' visibility='default' filepath='include/uapi/linux/mqueue.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='__reserved' type-id='type-id-106' visibility='default' filepath='include/uapi/linux/mqueue.h' line='33' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__4' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='kernel/audit.h' line='177' column='1' id='type-id-342'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mqdes' type-id='type-id-352' visibility='default' filepath='kernel/audit.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='sigev_signo' type-id='type-id-17' visibility='default' filepath='kernel/audit.h' line='179' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__5' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='kernel/audit.h' line='181' column='1' id='type-id-343'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mqdes' type-id='type-id-352' visibility='default' filepath='kernel/audit.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='msg_len' type-id='type-id-84' visibility='default' filepath='kernel/audit.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='msg_prio' type-id='type-id-5' visibility='default' filepath='kernel/audit.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='abs_timeout' type-id='type-id-355' visibility='default' filepath='kernel/audit.h' line='185' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__6' size-in-bits='576' is-struct='yes' is-anonymous='yes' visibility='default' filepath='kernel/audit.h' line='187' column='1' id='type-id-344'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='oflag' type-id='type-id-17' visibility='default' filepath='kernel/audit.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='mode' type-id='type-id-329' visibility='default' filepath='kernel/audit.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='attr' type-id='type-id-353' visibility='default' filepath='kernel/audit.h' line='190' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__7' size-in-bits='288' is-struct='yes' is-anonymous='yes' visibility='default' filepath='kernel/audit.h' line='192' column='1' id='type-id-345'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pid' type-id='type-id-41' visibility='default' filepath='kernel/audit.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cap' type-id='type-id-331' visibility='default' filepath='kernel/audit.h' line='194' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__8' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='kernel/audit.h' line='196' column='1' id='type-id-346'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fd' type-id='type-id-17' visibility='default' filepath='kernel/audit.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='type-id-17' visibility='default' filepath='kernel/audit.h' line='198' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__9' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='kernel/audit.h' line='200' column='1' id='type-id-347'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='argc' type-id='type-id-17' visibility='default' filepath='kernel/audit.h' line='201' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__10' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='kernel/audit.h' line='203' column='1' id='type-id-348'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-2' visibility='default' filepath='kernel/audit.h' line='204' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='audit_proctitle' size-in-bits='128' is-struct='yes' visibility='default' filepath='kernel/audit.h' line='104' column='1' id='type-id-356'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='len' type-id='type-id-17' visibility='default' filepath='kernel/audit.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='value' type-id='type-id-2' visibility='default' filepath='kernel/audit.h' line='106' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bio_list' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/bio.h' line='618' column='1' id='type-id-357'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='type-id-358' visibility='default' filepath='include/linux/bio.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tail' type-id='type-id-358' visibility='default' filepath='include/linux/bio.h' line='620' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bio' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/blk_types.h' line='145' column='1' id='type-id-359'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bi_next' type-id='type-id-358' visibility='default' filepath='include/linux/blk_types.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bi_disk' type-id='type-id-360' visibility='default' filepath='include/linux/blk_types.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bi_opf' type-id='type-id-5' visibility='default' filepath='include/linux/blk_types.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='bi_flags' type-id='type-id-312' visibility='default' filepath='include/linux/blk_types.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='bi_ioprio' type-id='type-id-312' visibility='default' filepath='include/linux/blk_types.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bi_write_hint' type-id='type-id-312' visibility='default' filepath='include/linux/blk_types.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='bi_status' type-id='type-id-361' visibility='default' filepath='include/linux/blk_types.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='216'>
+          <var-decl name='bi_partno' type-id='type-id-214' visibility='default' filepath='include/linux/blk_types.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='bi_phys_segments' type-id='type-id-5' visibility='default' filepath='include/linux/blk_types.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='bi_seg_front_size' type-id='type-id-5' visibility='default' filepath='include/linux/blk_types.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='bi_seg_back_size' type-id='type-id-5' visibility='default' filepath='include/linux/blk_types.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='bi_iter' type-id='type-id-362' visibility='default' filepath='include/linux/blk_types.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='__bi_remaining' type-id='type-id-26' visibility='default' filepath='include/linux/blk_types.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='bi_end_io' type-id='type-id-363' visibility='default' filepath='include/linux/blk_types.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bi_private' type-id='type-id-15' visibility='default' filepath='include/linux/blk_types.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='bi_ioc' type-id='type-id-364' visibility='default' filepath='include/linux/blk_types.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='bi_css' type-id='type-id-365' visibility='default' filepath='include/linux/blk_types.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='bi_blkg' type-id='type-id-366' visibility='default' filepath='include/linux/blk_types.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='bi_issue' type-id='type-id-367' visibility='default' filepath='include/linux/blk_types.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='bi_crypt_context' type-id='type-id-368' visibility='default' filepath='include/linux/blk_types.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='' type-id='type-id-369' visibility='default' filepath='include/linux/blk_types.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='bi_vcnt' type-id='type-id-312' visibility='default' filepath='include/linux/blk_types.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1040'>
+          <var-decl name='bi_max_vecs' type-id='type-id-312' visibility='default' filepath='include/linux/blk_types.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='__bi_cnt' type-id='type-id-26' visibility='default' filepath='include/linux/blk_types.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='bi_io_vec' type-id='type-id-370' visibility='default' filepath='include/linux/blk_types.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='bi_pool' type-id='type-id-371' visibility='default' filepath='include/linux/blk_types.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='bi_inline_vecs' type-id='type-id-132' visibility='default' filepath='include/linux/blk_types.h' line='216' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='gendisk' size-in-bits='9344' is-struct='yes' visibility='default' filepath='include/linux/genhd.h' line='174' column='1' id='type-id-372'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='major' type-id='type-id-17' visibility='default' filepath='include/linux/genhd.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='first_minor' type-id='type-id-17' visibility='default' filepath='include/linux/genhd.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='minors' type-id='type-id-17' visibility='default' filepath='include/linux/genhd.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='disk_name' type-id='type-id-373' visibility='default' filepath='include/linux/genhd.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='devnode' type-id='type-id-374' visibility='default' filepath='include/linux/genhd.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='events' type-id='type-id-5' visibility='default' filepath='include/linux/genhd.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='async_events' type-id='type-id-5' visibility='default' filepath='include/linux/genhd.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='part_tbl' type-id='type-id-375' visibility='default' filepath='include/linux/genhd.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='part0' type-id='type-id-376' visibility='default' filepath='include/linux/genhd.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='fops' type-id='type-id-377' visibility='default' filepath='include/linux/genhd.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='queue' type-id='type-id-378' visibility='default' filepath='include/linux/genhd.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='private_data' type-id='type-id-15' visibility='default' filepath='include/linux/genhd.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='flags' type-id='type-id-17' visibility='default' filepath='include/linux/genhd.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='lookup_sem' type-id='type-id-246' visibility='default' filepath='include/linux/genhd.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='slave_dir' type-id='type-id-379' visibility='default' filepath='include/linux/genhd.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='random' type-id='type-id-380' visibility='default' filepath='include/linux/genhd.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='sync_io' type-id='type-id-26' visibility='default' filepath='include/linux/genhd.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='ev' type-id='type-id-381' visibility='default' filepath='include/linux/genhd.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='node_id' type-id='type-id-17' visibility='default' filepath='include/linux/genhd.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='bb' type-id='type-id-382' visibility='default' filepath='include/linux/genhd.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='lockdep_map' type-id='type-id-383' visibility='default' filepath='include/linux/genhd.h' line='213' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='disk_part_tbl' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/genhd.h' line='152' column='1' id='type-id-384'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='callback_head' type-id='type-id-385' visibility='default' filepath='include/linux/genhd.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='len' type-id='type-id-17' visibility='default' filepath='include/linux/genhd.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='last_lookup' type-id='type-id-184' visibility='default' filepath='include/linux/genhd.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='part' type-id='type-id-185' visibility='default' filepath='include/linux/genhd.h' line='156' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hd_struct' size-in-bits='7808' is-struct='yes' visibility='default' filepath='include/linux/genhd.h' line='106' column='1' id='type-id-376'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start_sect' type-id='type-id-386' visibility='default' filepath='include/linux/genhd.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_sects' type-id='type-id-386' visibility='default' filepath='include/linux/genhd.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nr_sects_seq' type-id='type-id-387' visibility='default' filepath='include/linux/genhd.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='alignment_offset' type-id='type-id-386' visibility='default' filepath='include/linux/genhd.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='discard_alignment' type-id='type-id-5' visibility='default' filepath='include/linux/genhd.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='__dev' type-id='type-id-388' visibility='default' filepath='include/linux/genhd.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='holder_dir' type-id='type-id-379' visibility='default' filepath='include/linux/genhd.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='policy' type-id='type-id-17' visibility='default' filepath='include/linux/genhd.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6624'>
+          <var-decl name='partno' type-id='type-id-17' visibility='default' filepath='include/linux/genhd.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='info' type-id='type-id-389' visibility='default' filepath='include/linux/genhd.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='stamp' type-id='type-id-16' visibility='default' filepath='include/linux/genhd.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='in_flight' type-id='type-id-127' visibility='default' filepath='include/linux/genhd.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='dkstats' type-id='type-id-390' visibility='default' filepath='include/linux/genhd.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='ref' type-id='type-id-391' visibility='default' filepath='include/linux/genhd.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='rcu_work' type-id='type-id-392' visibility='default' filepath='include/linux/genhd.h' line='132' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='partition_meta_info' size-in-bits='808' is-struct='yes' visibility='default' filepath='include/linux/genhd.h' line='101' column='1' id='type-id-393'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='uuid' type-id='type-id-147' visibility='default' filepath='include/linux/genhd.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='296'>
+          <var-decl name='volname' type-id='type-id-215' visibility='default' filepath='include/linux/genhd.h' line='103' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='disk_stats' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/linux/genhd.h' line='85' column='1' id='type-id-394'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nsecs' type-id='type-id-213' visibility='default' filepath='include/linux/genhd.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sectors' type-id='type-id-220' visibility='default' filepath='include/linux/genhd.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ios' type-id='type-id-220' visibility='default' filepath='include/linux/genhd.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='merges' type-id='type-id-220' visibility='default' filepath='include/linux/genhd.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='io_ticks' type-id='type-id-16' visibility='default' filepath='include/linux/genhd.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='time_in_queue' type-id='type-id-16' visibility='default' filepath='include/linux/genhd.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='block_device_operations' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/blkdev.h' line='1984' column='1' id='type-id-395'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='open' type-id='type-id-396' visibility='default' filepath='include/linux/blkdev.h' line='1985' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='release' type-id='type-id-397' visibility='default' filepath='include/linux/blkdev.h' line='1986' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rw_page' type-id='type-id-398' visibility='default' filepath='include/linux/blkdev.h' line='1987' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ioctl' type-id='type-id-399' visibility='default' filepath='include/linux/blkdev.h' line='1988' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='compat_ioctl' type-id='type-id-399' visibility='default' filepath='include/linux/blkdev.h' line='1989' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='check_events' type-id='type-id-400' visibility='default' filepath='include/linux/blkdev.h' line='1990' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='media_changed' type-id='type-id-401' visibility='default' filepath='include/linux/blkdev.h' line='1993' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='unlock_native_capacity' type-id='type-id-402' visibility='default' filepath='include/linux/blkdev.h' line='1994' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='revalidate_disk' type-id='type-id-401' visibility='default' filepath='include/linux/blkdev.h' line='1995' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='getgeo' type-id='type-id-403' visibility='default' filepath='include/linux/blkdev.h' line='1996' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='swap_slot_free_notify' type-id='type-id-404' visibility='default' filepath='include/linux/blkdev.h' line='1998' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='include/linux/blkdev.h' line='1999' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='pr_ops' type-id='type-id-405' visibility='default' filepath='include/linux/blkdev.h' line='2000' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bdi_writeback' size-in-bits='5568' is-struct='yes' visibility='default' filepath='include/linux/backing-dev-defs.h' line='109' column='1' id='type-id-406'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bdi' type-id='type-id-407' visibility='default' filepath='include/linux/backing-dev-defs.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='state' type-id='type-id-16' visibility='default' filepath='include/linux/backing-dev-defs.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='last_old_flush' type-id='type-id-16' visibility='default' filepath='include/linux/backing-dev-defs.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='b_dirty' type-id='type-id-20' visibility='default' filepath='include/linux/backing-dev-defs.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='b_io' type-id='type-id-20' visibility='default' filepath='include/linux/backing-dev-defs.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='b_more_io' type-id='type-id-20' visibility='default' filepath='include/linux/backing-dev-defs.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='b_dirty_time' type-id='type-id-20' visibility='default' filepath='include/linux/backing-dev-defs.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='list_lock' type-id='type-id-247' visibility='default' filepath='include/linux/backing-dev-defs.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='stat' type-id='type-id-205' visibility='default' filepath='include/linux/backing-dev-defs.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='congested' type-id='type-id-408' visibility='default' filepath='include/linux/backing-dev-defs.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='bw_time_stamp' type-id='type-id-16' visibility='default' filepath='include/linux/backing-dev-defs.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='dirtied_stamp' type-id='type-id-16' visibility='default' filepath='include/linux/backing-dev-defs.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='written_stamp' type-id='type-id-16' visibility='default' filepath='include/linux/backing-dev-defs.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='write_bandwidth' type-id='type-id-16' visibility='default' filepath='include/linux/backing-dev-defs.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='avg_write_bandwidth' type-id='type-id-16' visibility='default' filepath='include/linux/backing-dev-defs.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='dirty_ratelimit' type-id='type-id-16' visibility='default' filepath='include/linux/backing-dev-defs.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='balanced_dirty_ratelimit' type-id='type-id-16' visibility='default' filepath='include/linux/backing-dev-defs.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='completions' type-id='type-id-409' visibility='default' filepath='include/linux/backing-dev-defs.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='dirty_exceeded' type-id='type-id-17' visibility='default' filepath='include/linux/backing-dev-defs.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2976'>
+          <var-decl name='start_all_reason' type-id='type-id-410' visibility='default' filepath='include/linux/backing-dev-defs.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='work_lock' type-id='type-id-247' visibility='default' filepath='include/linux/backing-dev-defs.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='work_list' type-id='type-id-20' visibility='default' filepath='include/linux/backing-dev-defs.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='dwork' type-id='type-id-411' visibility='default' filepath='include/linux/backing-dev-defs.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='dirty_sleep' type-id='type-id-16' visibility='default' filepath='include/linux/backing-dev-defs.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='bdi_node' type-id='type-id-20' visibility='default' filepath='include/linux/backing-dev-defs.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='refcnt' type-id='type-id-391' visibility='default' filepath='include/linux/backing-dev-defs.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='memcg_completions' type-id='type-id-409' visibility='default' filepath='include/linux/backing-dev-defs.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='memcg_css' type-id='type-id-365' visibility='default' filepath='include/linux/backing-dev-defs.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='blkcg_css' type-id='type-id-365' visibility='default' filepath='include/linux/backing-dev-defs.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='memcg_node' type-id='type-id-20' visibility='default' filepath='include/linux/backing-dev-defs.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='blkcg_node' type-id='type-id-20' visibility='default' filepath='include/linux/backing-dev-defs.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='' type-id='type-id-412' visibility='default' filepath='include/linux/backing-dev-defs.h' line='160' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='backing_dev_info' size-in-bits='7936' is-struct='yes' visibility='default' filepath='include/linux/backing-dev-defs.h' line='167' column='1' id='type-id-413'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bdi_list' type-id='type-id-20' visibility='default' filepath='include/linux/backing-dev-defs.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ra_pages' type-id='type-id-16' visibility='default' filepath='include/linux/backing-dev-defs.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='io_pages' type-id='type-id-16' visibility='default' filepath='include/linux/backing-dev-defs.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='congested_fn' type-id='type-id-414' visibility='default' filepath='include/linux/backing-dev-defs.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='congested_data' type-id='type-id-15' visibility='default' filepath='include/linux/backing-dev-defs.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/backing-dev-defs.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='refcnt' type-id='type-id-239' visibility='default' filepath='include/linux/backing-dev-defs.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='capabilities' type-id='type-id-5' visibility='default' filepath='include/linux/backing-dev-defs.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='min_ratio' type-id='type-id-5' visibility='default' filepath='include/linux/backing-dev-defs.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='max_ratio' type-id='type-id-5' visibility='default' filepath='include/linux/backing-dev-defs.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='max_prop_frac' type-id='type-id-5' visibility='default' filepath='include/linux/backing-dev-defs.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='tot_write_bandwidth' type-id='type-id-115' visibility='default' filepath='include/linux/backing-dev-defs.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='wb' type-id='type-id-406' visibility='default' filepath='include/linux/backing-dev-defs.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='wb_list' type-id='type-id-20' visibility='default' filepath='include/linux/backing-dev-defs.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='cgwb_tree' type-id='type-id-415' visibility='default' filepath='include/linux/backing-dev-defs.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='cgwb_congested_tree' type-id='type-id-416' visibility='default' filepath='include/linux/backing-dev-defs.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='cgwb_release_mutex' type-id='type-id-245' visibility='default' filepath='include/linux/backing-dev-defs.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='wb_switch_rwsem' type-id='type-id-246' visibility='default' filepath='include/linux/backing-dev-defs.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='wb_waitq' type-id='type-id-225' visibility='default' filepath='include/linux/backing-dev-defs.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='dev' type-id='type-id-240' visibility='default' filepath='include/linux/backing-dev-defs.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='owner' type-id='type-id-240' visibility='default' filepath='include/linux/backing-dev-defs.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='laptop_mode_wb_timer' type-id='type-id-417' visibility='default' filepath='include/linux/backing-dev-defs.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='debug_dir' type-id='type-id-23' visibility='default' filepath='include/linux/backing-dev-defs.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='debug_stats' type-id='type-id-23' visibility='default' filepath='include/linux/backing-dev-defs.h' line='206' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='congested_fn' type-id='type-id-418' filepath='include/linux/backing-dev-defs.h' line='36' column='1' id='type-id-419'/>
+      <class-decl name='bdi_writeback_congested' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/backing-dev-defs.h' line='77' column='1' id='type-id-420'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='type-id-16' visibility='default' filepath='include/linux/backing-dev-defs.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='refcnt' type-id='type-id-421' visibility='default' filepath='include/linux/backing-dev-defs.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='__bdi' type-id='type-id-407' visibility='default' filepath='include/linux/backing-dev-defs.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='blkcg_id' type-id='type-id-17' visibility='default' filepath='include/linux/backing-dev-defs.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rb_node' type-id='type-id-422' visibility='default' filepath='include/linux/backing-dev-defs.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fprop_local_percpu' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/flex_proportions.h' line='76' column='1' id='type-id-409'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='events' type-id='type-id-204' visibility='default' filepath='include/linux/flex_proportions.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='period' type-id='type-id-5' visibility='default' filepath='include/linux/flex_proportions.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='lock' type-id='type-id-36' visibility='default' filepath='include/linux/flex_proportions.h' line='81' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='wb_reason' filepath='include/linux/backing-dev-defs.h' line='51' column='1' id='type-id-410'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='WB_REASON_BACKGROUND' value='0'/>
+        <enumerator name='WB_REASON_VMSCAN' value='1'/>
+        <enumerator name='WB_REASON_SYNC' value='2'/>
+        <enumerator name='WB_REASON_PERIODIC' value='3'/>
+        <enumerator name='WB_REASON_LAPTOP_TIMER' value='4'/>
+        <enumerator name='WB_REASON_FREE_MORE_MEM' value='5'/>
+        <enumerator name='WB_REASON_FS_FREE_SPACE' value='6'/>
+        <enumerator name='WB_REASON_FORKER_THREAD' value='7'/>
+        <enumerator name='WB_REASON_MAX' value='8'/>
+      </enum-decl>
+      <class-decl name='mem_cgroup' size-in-bits='18432' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='197' column='1' id='type-id-423'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='css' type-id='type-id-424' visibility='default' filepath='include/linux/memcontrol.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='id' type-id='type-id-425' visibility='default' filepath='include/linux/memcontrol.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='memory' type-id='type-id-426' visibility='default' filepath='include/linux/memcontrol.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='swap' type-id='type-id-426' visibility='default' filepath='include/linux/memcontrol.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='memsw' type-id='type-id-426' visibility='default' filepath='include/linux/memcontrol.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='kmem' type-id='type-id-426' visibility='default' filepath='include/linux/memcontrol.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='tcpmem' type-id='type-id-426' visibility='default' filepath='include/linux/memcontrol.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='high' type-id='type-id-16' visibility='default' filepath='include/linux/memcontrol.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='high_work' type-id='type-id-255' visibility='default' filepath='include/linux/memcontrol.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='soft_limit' type-id='type-id-16' visibility='default' filepath='include/linux/memcontrol.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='vmpressure' type-id='type-id-427' visibility='default' filepath='include/linux/memcontrol.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='use_hierarchy' type-id='type-id-33' visibility='default' filepath='include/linux/memcontrol.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7496'>
+          <var-decl name='oom_group' type-id='type-id-33' visibility='default' filepath='include/linux/memcontrol.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7504'>
+          <var-decl name='oom_lock' type-id='type-id-33' visibility='default' filepath='include/linux/memcontrol.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7520'>
+          <var-decl name='under_oom' type-id='type-id-17' visibility='default' filepath='include/linux/memcontrol.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='swappiness' type-id='type-id-17' visibility='default' filepath='include/linux/memcontrol.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7584'>
+          <var-decl name='oom_kill_disable' type-id='type-id-17' visibility='default' filepath='include/linux/memcontrol.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='events_file' type-id='type-id-428' visibility='default' filepath='include/linux/memcontrol.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='swap_events_file' type-id='type-id-428' visibility='default' filepath='include/linux/memcontrol.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='thresholds_lock' type-id='type-id-245' visibility='default' filepath='include/linux/memcontrol.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='thresholds' type-id='type-id-429' visibility='default' filepath='include/linux/memcontrol.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='memsw_thresholds' type-id='type-id-429' visibility='default' filepath='include/linux/memcontrol.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='oom_notify' type-id='type-id-20' visibility='default' filepath='include/linux/memcontrol.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='move_charge_at_immigrate' type-id='type-id-16' visibility='default' filepath='include/linux/memcontrol.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='move_lock' type-id='type-id-247' visibility='default' filepath='include/linux/memcontrol.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='move_lock_flags' type-id='type-id-16' visibility='default' filepath='include/linux/memcontrol.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='_pad1_' type-id='type-id-430' visibility='default' filepath='include/linux/memcontrol.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='moving_account' type-id='type-id-26' visibility='default' filepath='include/linux/memcontrol.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='move_lock_task' type-id='type-id-431' visibility='default' filepath='include/linux/memcontrol.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='stat_cpu' type-id='type-id-432' visibility='default' filepath='include/linux/memcontrol.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='_pad2_' type-id='type-id-430' visibility='default' filepath='include/linux/memcontrol.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='stat' type-id='type-id-120' visibility='default' filepath='include/linux/memcontrol.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12480'>
+          <var-decl name='events' type-id='type-id-122' visibility='default' filepath='include/linux/memcontrol.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16064'>
+          <var-decl name='memory_events' type-id='type-id-124' visibility='default' filepath='include/linux/memcontrol.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16512'>
+          <var-decl name='socket_pressure' type-id='type-id-16' visibility='default' filepath='include/linux/memcontrol.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16576'>
+          <var-decl name='tcpmem_active' type-id='type-id-33' visibility='default' filepath='include/linux/memcontrol.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16608'>
+          <var-decl name='tcpmem_pressure' type-id='type-id-17' visibility='default' filepath='include/linux/memcontrol.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16640'>
+          <var-decl name='kmemcg_id' type-id='type-id-17' visibility='default' filepath='include/linux/memcontrol.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16672'>
+          <var-decl name='kmem_state' type-id='type-id-433' visibility='default' filepath='include/linux/memcontrol.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16704'>
+          <var-decl name='kmem_caches' type-id='type-id-20' visibility='default' filepath='include/linux/memcontrol.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16832'>
+          <var-decl name='last_scanned_node' type-id='type-id-17' visibility='default' filepath='include/linux/memcontrol.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16896'>
+          <var-decl name='cgwb_list' type-id='type-id-20' visibility='default' filepath='include/linux/memcontrol.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17024'>
+          <var-decl name='cgwb_domain' type-id='type-id-434' visibility='default' filepath='include/linux/memcontrol.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17984'>
+          <var-decl name='event_list' type-id='type-id-20' visibility='default' filepath='include/linux/memcontrol.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18112'>
+          <var-decl name='event_list_lock' type-id='type-id-247' visibility='default' filepath='include/linux/memcontrol.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18176'>
+          <var-decl name='nodeinfo' type-id='type-id-198' visibility='default' filepath='include/linux/memcontrol.h' line='314' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mem_cgroup_id' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='79' column='1' id='type-id-425'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='type-id-17' visibility='default' filepath='include/linux/memcontrol.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ref' type-id='type-id-26' visibility='default' filepath='include/linux/memcontrol.h' line='81' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='page_counter' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/page_counter.h' line='9' column='1' id='type-id-426'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='usage' type-id='type-id-115' visibility='default' filepath='include/linux/page_counter.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='min' type-id='type-id-16' visibility='default' filepath='include/linux/page_counter.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='low' type-id='type-id-16' visibility='default' filepath='include/linux/page_counter.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max' type-id='type-id-16' visibility='default' filepath='include/linux/page_counter.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='parent' type-id='type-id-435' visibility='default' filepath='include/linux/page_counter.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='emin' type-id='type-id-16' visibility='default' filepath='include/linux/page_counter.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='min_usage' type-id='type-id-115' visibility='default' filepath='include/linux/page_counter.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='children_min_usage' type-id='type-id-115' visibility='default' filepath='include/linux/page_counter.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='elow' type-id='type-id-16' visibility='default' filepath='include/linux/page_counter.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='low_usage' type-id='type-id-115' visibility='default' filepath='include/linux/page_counter.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='children_low_usage' type-id='type-id-115' visibility='default' filepath='include/linux/page_counter.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='watermark' type-id='type-id-16' visibility='default' filepath='include/linux/page_counter.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='failcnt' type-id='type-id-16' visibility='default' filepath='include/linux/page_counter.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vmpressure' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/vmpressure.h' line='13' column='1' id='type-id-427'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='scanned' type-id='type-id-16' visibility='default' filepath='include/linux/vmpressure.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reclaimed' type-id='type-id-16' visibility='default' filepath='include/linux/vmpressure.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tree_scanned' type-id='type-id-16' visibility='default' filepath='include/linux/vmpressure.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tree_reclaimed' type-id='type-id-16' visibility='default' filepath='include/linux/vmpressure.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sr_lock' type-id='type-id-436' visibility='default' filepath='include/linux/vmpressure.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='events' type-id='type-id-20' visibility='default' filepath='include/linux/vmpressure.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='events_lock' type-id='type-id-245' visibility='default' filepath='include/linux/vmpressure.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='work' type-id='type-id-255' visibility='default' filepath='include/linux/vmpressure.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mem_cgroup_thresholds' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='165' column='1' id='type-id-429'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='primary' type-id='type-id-437' visibility='default' filepath='include/linux/memcontrol.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='spare' type-id='type-id-437' visibility='default' filepath='include/linux/memcontrol.h' line='173' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mem_cgroup_threshold_ary' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='156' column='1' id='type-id-438'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='current_threshold' type-id='type-id-17' visibility='default' filepath='include/linux/memcontrol.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='size' type-id='type-id-5' visibility='default' filepath='include/linux/memcontrol.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='entries' type-id='type-id-203' visibility='default' filepath='include/linux/memcontrol.h' line='162' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mem_cgroup_threshold' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='150' column='1' id='type-id-202'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='eventfd' type-id='type-id-439' visibility='default' filepath='include/linux/memcontrol.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='threshold' type-id='type-id-16' visibility='default' filepath='include/linux/memcontrol.h' line='152' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='memcg_padding' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='183' column='1' id='type-id-430'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x' type-id='type-id-440' visibility='default' filepath='include/linux/memcontrol.h' line='184' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mem_cgroup_stat_cpu' size-in-bits='6080' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='97' column='1' id='type-id-441'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='type-id-194' visibility='default' filepath='include/linux/memcontrol.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='events' type-id='type-id-223' visibility='default' filepath='include/linux/memcontrol.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='nr_page_events' type-id='type-id-16' visibility='default' filepath='include/linux/memcontrol.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='targets' type-id='type-id-220' visibility='default' filepath='include/linux/memcontrol.h' line='101' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='memcg_kmem_state' filepath='include/linux/memcontrol.h' line='176' column='1' id='type-id-433'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='KMEM_NONE' value='0'/>
+        <enumerator name='KMEM_ALLOCATED' value='1'/>
+        <enumerator name='KMEM_ONLINE' value='2'/>
+      </enum-decl>
+      <class-decl name='wb_domain' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/writeback.h' line='102' column='1' id='type-id-434'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='include/linux/writeback.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='completions' type-id='type-id-442' visibility='default' filepath='include/linux/writeback.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='period_timer' type-id='type-id-417' visibility='default' filepath='include/linux/writeback.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='period_time' type-id='type-id-16' visibility='default' filepath='include/linux/writeback.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='dirty_limit_tstamp' type-id='type-id-16' visibility='default' filepath='include/linux/writeback.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dirty_limit' type-id='type-id-16' visibility='default' filepath='include/linux/writeback.h' line='137' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fprop_global' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/flex_proportions.h' line='28' column='1' id='type-id-442'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='events' type-id='type-id-204' visibility='default' filepath='include/linux/flex_proportions.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='period' type-id='type-id-5' visibility='default' filepath='include/linux/flex_proportions.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='sequence' type-id='type-id-387' visibility='default' filepath='include/linux/flex_proportions.h' line='34' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mem_cgroup_per_node' size-in-bits='6080' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='126' column='1' id='type-id-443'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lruvec' type-id='type-id-444' visibility='default' filepath='include/linux/memcontrol.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='lruvec_stat_cpu' type-id='type-id-445' visibility='default' filepath='include/linux/memcontrol.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='lruvec_stat' type-id='type-id-118' visibility='default' filepath='include/linux/memcontrol.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='lru_zone_size' type-id='type-id-221' visibility='default' filepath='include/linux/memcontrol.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='iter' type-id='type-id-200' visibility='default' filepath='include/linux/memcontrol.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='shrinker_map' type-id='type-id-446' visibility='default' filepath='include/linux/memcontrol.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='tree_node' type-id='type-id-422' visibility='default' filepath='include/linux/memcontrol.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='usage_in_excess' type-id='type-id-16' visibility='default' filepath='include/linux/memcontrol.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='on_tree' type-id='type-id-33' visibility='default' filepath='include/linux/memcontrol.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5960'>
+          <var-decl name='congested' type-id='type-id-33' visibility='default' filepath='include/linux/memcontrol.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='memcg' type-id='type-id-447' visibility='default' filepath='include/linux/memcontrol.h' line='146' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='lruvec' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='240' column='1' id='type-id-444'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lists' type-id='type-id-189' visibility='default' filepath='include/linux/mmzone.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='reclaim_stat' type-id='type-id-448' visibility='default' filepath='include/linux/mmzone.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='inactive_age' type-id='type-id-115' visibility='default' filepath='include/linux/mmzone.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='refaults' type-id='type-id-16' visibility='default' filepath='include/linux/mmzone.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='pgdat' type-id='type-id-449' visibility='default' filepath='include/linux/mmzone.h' line='248' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='zone_reclaim_stat' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='227' column='1' id='type-id-448'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='recent_rotated' type-id='type-id-219' visibility='default' filepath='include/linux/mmzone.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='recent_scanned' type-id='type-id-219' visibility='default' filepath='include/linux/mmzone.h' line='237' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pglist_data' size-in-bits='42496' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='628' column='1' id='type-id-450'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node_zones' type-id='type-id-228' visibility='default' filepath='include/linux/mmzone.h' line='629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='36864'>
+          <var-decl name='node_zonelists' type-id='type-id-230' visibility='default' filepath='include/linux/mmzone.h' line='630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='37376'>
+          <var-decl name='nr_zones' type-id='type-id-17' visibility='default' filepath='include/linux/mmzone.h' line='631' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='37440'>
+          <var-decl name='node_start_pfn' type-id='type-id-16' visibility='default' filepath='include/linux/mmzone.h' line='655' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='37504'>
+          <var-decl name='node_present_pages' type-id='type-id-16' visibility='default' filepath='include/linux/mmzone.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='37568'>
+          <var-decl name='node_spanned_pages' type-id='type-id-16' visibility='default' filepath='include/linux/mmzone.h' line='657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='37632'>
+          <var-decl name='node_id' type-id='type-id-17' visibility='default' filepath='include/linux/mmzone.h' line='659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='37696'>
+          <var-decl name='kswapd_wait' type-id='type-id-225' visibility='default' filepath='include/linux/mmzone.h' line='660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='37888'>
+          <var-decl name='pfmemalloc_wait' type-id='type-id-225' visibility='default' filepath='include/linux/mmzone.h' line='661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='38080'>
+          <var-decl name='kswapd' type-id='type-id-431' visibility='default' filepath='include/linux/mmzone.h' line='662' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='38144'>
+          <var-decl name='kswapd_order' type-id='type-id-17' visibility='default' filepath='include/linux/mmzone.h' line='664' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='38176'>
+          <var-decl name='kswapd_classzone_idx' type-id='type-id-451' visibility='default' filepath='include/linux/mmzone.h' line='665' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='38208'>
+          <var-decl name='kswapd_failures' type-id='type-id-17' visibility='default' filepath='include/linux/mmzone.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='38240'>
+          <var-decl name='kcompactd_max_order' type-id='type-id-17' visibility='default' filepath='include/linux/mmzone.h' line='670' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='38272'>
+          <var-decl name='kcompactd_classzone_idx' type-id='type-id-451' visibility='default' filepath='include/linux/mmzone.h' line='671' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='38336'>
+          <var-decl name='kcompactd_wait' type-id='type-id-225' visibility='default' filepath='include/linux/mmzone.h' line='672' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='38528'>
+          <var-decl name='kcompactd' type-id='type-id-431' visibility='default' filepath='include/linux/mmzone.h' line='673' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='38592'>
+          <var-decl name='totalreserve_pages' type-id='type-id-16' visibility='default' filepath='include/linux/mmzone.h' line='679' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='38912'>
+          <var-decl name='_pad1_' type-id='type-id-452' visibility='default' filepath='include/linux/mmzone.h' line='690' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='38912'>
+          <var-decl name='lru_lock' type-id='type-id-247' visibility='default' filepath='include/linux/mmzone.h' line='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='38976'>
+          <var-decl name='lruvec' type-id='type-id-444' visibility='default' filepath='include/linux/mmzone.h' line='710' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40064'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='include/linux/mmzone.h' line='712' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40448'>
+          <var-decl name='_pad2_' type-id='type-id-452' visibility='default' filepath='include/linux/mmzone.h' line='714' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40448'>
+          <var-decl name='per_cpu_nodestats' type-id='type-id-453' visibility='default' filepath='include/linux/mmzone.h' line='717' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40512'>
+          <var-decl name='vm_stat' type-id='type-id-118' visibility='default' filepath='include/linux/mmzone.h' line='718' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='zone' size-in-bits='12288' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='363' column='1' id='type-id-227'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='watermark' type-id='type-id-220' visibility='default' filepath='include/linux/mmzone.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nr_reserved_highatomic' type-id='type-id-16' visibility='default' filepath='include/linux/mmzone.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lowmem_reserve' type-id='type-id-195' visibility='default' filepath='include/linux/mmzone.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='zone_pgdat' type-id='type-id-449' visibility='default' filepath='include/linux/mmzone.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pageset' type-id='type-id-454' visibility='default' filepath='include/linux/mmzone.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='zone_start_pfn' type-id='type-id-16' visibility='default' filepath='include/linux/mmzone.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='managed_pages' type-id='type-id-16' visibility='default' filepath='include/linux/mmzone.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='spanned_pages' type-id='type-id-16' visibility='default' filepath='include/linux/mmzone.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='present_pages' type-id='type-id-16' visibility='default' filepath='include/linux/mmzone.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/mmzone.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='nr_isolate_pageblock' type-id='type-id-16' visibility='default' filepath='include/linux/mmzone.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='initialized' type-id='type-id-17' visibility='default' filepath='include/linux/mmzone.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='_pad1_' type-id='type-id-452' visibility='default' filepath='include/linux/mmzone.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='free_area' type-id='type-id-182' visibility='default' filepath='include/linux/mmzone.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='include/linux/mmzone.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='include/linux/mmzone.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='_pad2_' type-id='type-id-452' visibility='default' filepath='include/linux/mmzone.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='percpu_drift_mark' type-id='type-id-16' visibility='default' filepath='include/linux/mmzone.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='compact_cached_free_pfn' type-id='type-id-16' visibility='default' filepath='include/linux/mmzone.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='compact_cached_migrate_pfn' type-id='type-id-219' visibility='default' filepath='include/linux/mmzone.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='compact_considered' type-id='type-id-5' visibility='default' filepath='include/linux/mmzone.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11040'>
+          <var-decl name='compact_defer_shift' type-id='type-id-5' visibility='default' filepath='include/linux/mmzone.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='compact_order_failed' type-id='type-id-17' visibility='default' filepath='include/linux/mmzone.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11104'>
+          <var-decl name='compact_blockskip_flush' type-id='type-id-33' visibility='default' filepath='include/linux/mmzone.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11112'>
+          <var-decl name='contiguous' type-id='type-id-33' visibility='default' filepath='include/linux/mmzone.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='_pad3_' type-id='type-id-452' visibility='default' filepath='include/linux/mmzone.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='vm_stat' type-id='type-id-116' visibility='default' filepath='include/linux/mmzone.h' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12160'>
+          <var-decl name='vm_numa_stat' type-id='type-id-126' visibility='default' filepath='include/linux/mmzone.h' line='512' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='per_cpu_pageset' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='287' column='1' id='type-id-455'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pcp' type-id='type-id-456' visibility='default' filepath='include/linux/mmzone.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='stat_threshold' type-id='type-id-209' visibility='default' filepath='include/linux/mmzone.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='520'>
+          <var-decl name='vm_stat_diff' type-id='type-id-210' visibility='default' filepath='include/linux/mmzone.h' line='295' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='per_cpu_pages' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='278' column='1' id='type-id-456'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='type-id-17' visibility='default' filepath='include/linux/mmzone.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='high' type-id='type-id-17' visibility='default' filepath='include/linux/mmzone.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='batch' type-id='type-id-17' visibility='default' filepath='include/linux/mmzone.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lists' type-id='type-id-457' visibility='default' filepath='include/linux/mmzone.h' line='284' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='zone_padding' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='110' column='1' id='type-id-452'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x' type-id='type-id-440' visibility='default' filepath='include/linux/mmzone.h' line='111' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='free_area' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='96' column='1' id='type-id-181'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='free_list' type-id='type-id-190' visibility='default' filepath='include/linux/mmzone.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='nr_free' type-id='type-id-16' visibility='default' filepath='include/linux/mmzone.h' line='98' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='zonelist' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='610' column='1' id='type-id-229'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_zonerefs' type-id='type-id-232' visibility='default' filepath='include/linux/mmzone.h' line='611' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='zoneref' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='591' column='1' id='type-id-231'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='zone' type-id='type-id-458' visibility='default' filepath='include/linux/mmzone.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='zone_idx' type-id='type-id-17' visibility='default' filepath='include/linux/mmzone.h' line='593' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='zone_type' filepath='include/linux/mmzone.h' line='306' column='1' id='type-id-451'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='ZONE_DMA32' value='0'/>
+        <enumerator name='ZONE_NORMAL' value='1'/>
+        <enumerator name='ZONE_MOVABLE' value='2'/>
+        <enumerator name='__MAX_NR_ZONES' value='3'/>
+      </enum-decl>
+      <class-decl name='per_cpu_nodestat' size-in-bits='240' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='299' column='1' id='type-id-459'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stat_threshold' type-id='type-id-209' visibility='default' filepath='include/linux/mmzone.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='vm_node_stat_diff' type-id='type-id-211' visibility='default' filepath='include/linux/mmzone.h' line='301' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='lruvec_stat' size-in-bits='1856' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='110' column='1' id='type-id-460'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='type-id-193' visibility='default' filepath='include/linux/memcontrol.h' line='111' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mem_cgroup_reclaim_iter' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='104' column='1' id='type-id-199'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='position' type-id='type-id-447' visibility='default' filepath='include/linux/memcontrol.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='generation' type-id='type-id-5' visibility='default' filepath='include/linux/memcontrol.h' line='107' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='memcg_shrinker_map' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='118' column='1' id='type-id-461'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/linux/memcontrol.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map' type-id='type-id-280' visibility='default' filepath='include/linux/memcontrol.h' line='120' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='request_queue' size-in-bits='18048' is-struct='yes' visibility='default' filepath='include/linux/blkdev.h' line='434' column='1' id='type-id-462'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='queue_head' type-id='type-id-20' visibility='default' filepath='include/linux/blkdev.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='last_merge' type-id='type-id-463' visibility='default' filepath='include/linux/blkdev.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='elevator' type-id='type-id-464' visibility='default' filepath='include/linux/blkdev.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='nr_rqs' type-id='type-id-465' visibility='default' filepath='include/linux/blkdev.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='nr_rqs_elvpriv' type-id='type-id-17' visibility='default' filepath='include/linux/blkdev.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='stats' type-id='type-id-466' visibility='default' filepath='include/linux/blkdev.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rq_qos' type-id='type-id-467' visibility='default' filepath='include/linux/blkdev.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='root_rl' type-id='type-id-468' visibility='default' filepath='include/linux/blkdev.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='request_fn' type-id='type-id-469' visibility='default' filepath='include/linux/blkdev.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='make_request_fn' type-id='type-id-470' visibility='default' filepath='include/linux/blkdev.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='poll_fn' type-id='type-id-471' visibility='default' filepath='include/linux/blkdev.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='prep_rq_fn' type-id='type-id-472' visibility='default' filepath='include/linux/blkdev.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='unprep_rq_fn' type-id='type-id-473' visibility='default' filepath='include/linux/blkdev.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='softirq_done_fn' type-id='type-id-474' visibility='default' filepath='include/linux/blkdev.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='rq_timed_out_fn' type-id='type-id-475' visibility='default' filepath='include/linux/blkdev.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='dma_drain_needed' type-id='type-id-476' visibility='default' filepath='include/linux/blkdev.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='lld_busy_fn' type-id='type-id-477' visibility='default' filepath='include/linux/blkdev.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='init_rq_fn' type-id='type-id-478' visibility='default' filepath='include/linux/blkdev.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='exit_rq_fn' type-id='type-id-479' visibility='default' filepath='include/linux/blkdev.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='initialize_rq_fn' type-id='type-id-480' visibility='default' filepath='include/linux/blkdev.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='mq_ops' type-id='type-id-481' visibility='default' filepath='include/linux/blkdev.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='mq_map' type-id='type-id-482' visibility='default' filepath='include/linux/blkdev.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='queue_ctx' type-id='type-id-483' visibility='default' filepath='include/linux/blkdev.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='nr_queues' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2272'>
+          <var-decl name='queue_depth' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='queue_hw_ctx' type-id='type-id-484' visibility='default' filepath='include/linux/blkdev.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='nr_hw_queues' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='end_sector' type-id='type-id-386' visibility='default' filepath='include/linux/blkdev.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='boundary_rq' type-id='type-id-463' visibility='default' filepath='include/linux/blkdev.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='delay_work' type-id='type-id-411' visibility='default' filepath='include/linux/blkdev.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='backing_dev_info' type-id='type-id-407' visibility='default' filepath='include/linux/blkdev.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='queuedata' type-id='type-id-15' visibility='default' filepath='include/linux/blkdev.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='queue_flags' type-id='type-id-16' visibility='default' filepath='include/linux/blkdev.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='pm_only' type-id='type-id-26' visibility='default' filepath='include/linux/blkdev.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3488'>
+          <var-decl name='id' type-id='type-id-17' visibility='default' filepath='include/linux/blkdev.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='bounce_gfp' type-id='type-id-485' visibility='default' filepath='include/linux/blkdev.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3552'>
+          <var-decl name='__queue_lock' type-id='type-id-247' visibility='default' filepath='include/linux/blkdev.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='queue_lock' type-id='type-id-486' visibility='default' filepath='include/linux/blkdev.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='kobj' type-id='type-id-267' visibility='default' filepath='include/linux/blkdev.h' line='537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='mq_kobj' type-id='type-id-267' visibility='default' filepath='include/linux/blkdev.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='dev' type-id='type-id-240' visibility='default' filepath='include/linux/blkdev.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='rpm_status' type-id='type-id-17' visibility='default' filepath='include/linux/blkdev.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4768'>
+          <var-decl name='nr_pending' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='nr_requests' type-id='type-id-16' visibility='default' filepath='include/linux/blkdev.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='nr_congestion_on' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4896'>
+          <var-decl name='nr_congestion_off' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='nr_batching' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4960'>
+          <var-decl name='dma_drain_size' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='dma_drain_buffer' type-id='type-id-15' visibility='default' filepath='include/linux/blkdev.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='dma_pad_mask' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5088'>
+          <var-decl name='dma_alignment' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='queue_tags' type-id='type-id-487' visibility='default' filepath='include/linux/blkdev.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='nr_sorted' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='569' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5216'>
+          <var-decl name='in_flight' type-id='type-id-488' visibility='default' filepath='include/linux/blkdev.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5280'>
+          <var-decl name='request_fn_active' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='ksm' type-id='type-id-489' visibility='default' filepath='include/linux/blkdev.h' line='580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='rq_timeout' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5408'>
+          <var-decl name='poll_nsec' type-id='type-id-17' visibility='default' filepath='include/linux/blkdev.h' line='584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='poll_cb' type-id='type-id-490' visibility='default' filepath='include/linux/blkdev.h' line='586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='poll_stat' type-id='type-id-134' visibility='default' filepath='include/linux/blkdev.h' line='587' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='timeout' type-id='type-id-417' visibility='default' filepath='include/linux/blkdev.h' line='589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='timeout_work' type-id='type-id-255' visibility='default' filepath='include/linux/blkdev.h' line='590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11200'>
+          <var-decl name='timeout_list' type-id='type-id-20' visibility='default' filepath='include/linux/blkdev.h' line='591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11328'>
+          <var-decl name='icq_list' type-id='type-id-20' visibility='default' filepath='include/linux/blkdev.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11456'>
+          <var-decl name='blkcg_pols' type-id='type-id-491' visibility='default' filepath='include/linux/blkdev.h' line='595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11520'>
+          <var-decl name='root_blkg' type-id='type-id-366' visibility='default' filepath='include/linux/blkdev.h' line='596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11584'>
+          <var-decl name='blkg_list' type-id='type-id-20' visibility='default' filepath='include/linux/blkdev.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11712'>
+          <var-decl name='limits' type-id='type-id-492' visibility='default' filepath='include/linux/blkdev.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12544'>
+          <var-decl name='sg_timeout' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12576'>
+          <var-decl name='sg_reserved_size' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12608'>
+          <var-decl name='node' type-id='type-id-17' visibility='default' filepath='include/linux/blkdev.h' line='630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12672'>
+          <var-decl name='fq' type-id='type-id-493' visibility='default' filepath='include/linux/blkdev.h' line='638' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12736'>
+          <var-decl name='requeue_list' type-id='type-id-20' visibility='default' filepath='include/linux/blkdev.h' line='640' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12864'>
+          <var-decl name='requeue_lock' type-id='type-id-247' visibility='default' filepath='include/linux/blkdev.h' line='641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12928'>
+          <var-decl name='requeue_work' type-id='type-id-411' visibility='default' filepath='include/linux/blkdev.h' line='642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13632'>
+          <var-decl name='sysfs_lock' type-id='type-id-245' visibility='default' filepath='include/linux/blkdev.h' line='644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13888'>
+          <var-decl name='bypass_depth' type-id='type-id-17' visibility='default' filepath='include/linux/blkdev.h' line='646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13920'>
+          <var-decl name='mq_freeze_depth' type-id='type-id-26' visibility='default' filepath='include/linux/blkdev.h' line='647' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13952'>
+          <var-decl name='bsg_job_fn' type-id='type-id-494' visibility='default' filepath='include/linux/blkdev.h' line='650' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14016'>
+          <var-decl name='bsg_dev' type-id='type-id-495' visibility='default' filepath='include/linux/blkdev.h' line='651' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14272'>
+          <var-decl name='callback_head' type-id='type-id-385' visibility='default' filepath='include/linux/blkdev.h' line='658' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14400'>
+          <var-decl name='mq_freeze_wq' type-id='type-id-225' visibility='default' filepath='include/linux/blkdev.h' line='659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14592'>
+          <var-decl name='q_usage_counter' type-id='type-id-391' visibility='default' filepath='include/linux/blkdev.h' line='660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15040'>
+          <var-decl name='all_q_node' type-id='type-id-20' visibility='default' filepath='include/linux/blkdev.h' line='661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15168'>
+          <var-decl name='tag_set' type-id='type-id-496' visibility='default' filepath='include/linux/blkdev.h' line='663' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15232'>
+          <var-decl name='tag_set_list' type-id='type-id-20' visibility='default' filepath='include/linux/blkdev.h' line='664' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15360'>
+          <var-decl name='bio_split' type-id='type-id-497' visibility='default' filepath='include/linux/blkdev.h' line='665' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17152'>
+          <var-decl name='debugfs_dir' type-id='type-id-23' visibility='default' filepath='include/linux/blkdev.h' line='668' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17216'>
+          <var-decl name='sched_debugfs_dir' type-id='type-id-23' visibility='default' filepath='include/linux/blkdev.h' line='669' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17280'>
+          <var-decl name='mq_sysfs_init_done' type-id='type-id-33' visibility='default' filepath='include/linux/blkdev.h' line='672' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17344'>
+          <var-decl name='cmd_size' type-id='type-id-84' visibility='default' filepath='include/linux/blkdev.h' line='674' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17408'>
+          <var-decl name='rq_alloc_data' type-id='type-id-15' visibility='default' filepath='include/linux/blkdev.h' line='675' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17472'>
+          <var-decl name='release_work' type-id='type-id-255' visibility='default' filepath='include/linux/blkdev.h' line='677' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17728'>
+          <var-decl name='write_hints' type-id='type-id-498' visibility='default' filepath='include/linux/blkdev.h' line='680' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='request' size-in-bits='2432' is-struct='yes' visibility='default' filepath='include/linux/blkdev.h' line='151' column='1' id='type-id-499'>
+
+          <member-type access='public'>
+            <union-decl name='__anonymous_union__' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='188' column='1' id='type-id-500'>
+              <data-member access='private'>
+                <var-decl name='rb_node' type-id='type-id-422' visibility='default' filepath='include/linux/blkdev.h' line='189' column='1'/>
+              </data-member>
+              <data-member access='private'>
+                <var-decl name='special_vec' type-id='type-id-131' visibility='default' filepath='include/linux/blkdev.h' line='190' column='1'/>
+              </data-member>
+              <data-member access='private'>
+                <var-decl name='completion_data' type-id='type-id-15' visibility='default' filepath='include/linux/blkdev.h' line='191' column='1'/>
+              </data-member>
+              <data-member access='private'>
+                <var-decl name='error_count' type-id='type-id-17' visibility='default' filepath='include/linux/blkdev.h' line='192' column='1'/>
+              </data-member>
+            </union-decl>
+          </member-type>
+
+          <member-type access='public'>
+            <union-decl name='__anonymous_union__1' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='201' column='1' id='type-id-501'>
+              <data-member access='private'>
+                <var-decl name='elv' type-id='type-id-502' visibility='default' filepath='include/linux/blkdev.h' line='205' column='1'/>
+              </data-member>
+              <data-member access='private'>
+                <var-decl name='flush' type-id='type-id-503' visibility='default' filepath='include/linux/blkdev.h' line='211' column='1'/>
+              </data-member>
+            </union-decl>
+          </member-type>
+        <member-type access='public'>
+          <union-decl name='__anonymous_union__2' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='255' column='1' id='type-id-504'>
+            <data-member access='private'>
+              <var-decl name='csd' type-id='type-id-505' visibility='default' filepath='include/linux/blkdev.h' line='256' column='1'/>
+            </data-member>
+            <data-member access='private'>
+              <var-decl name='fifo_time' type-id='type-id-40' visibility='default' filepath='include/linux/blkdev.h' line='257' column='1'/>
+            </data-member>
+          </union-decl>
+        </member-type>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='q' type-id='type-id-378' visibility='default' filepath='include/linux/blkdev.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mq_ctx' type-id='type-id-483' visibility='default' filepath='include/linux/blkdev.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cpu' type-id='type-id-17' visibility='default' filepath='include/linux/blkdev.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='cmd_flags' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rq_flags' type-id='type-id-506' visibility='default' filepath='include/linux/blkdev.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='internal_tag' type-id='type-id-17' visibility='default' filepath='include/linux/blkdev.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='__data_len' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='tag' type-id='type-id-17' visibility='default' filepath='include/linux/blkdev.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='__sector' type-id='type-id-386' visibility='default' filepath='include/linux/blkdev.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='bio' type-id='type-id-358' visibility='default' filepath='include/linux/blkdev.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='biotail' type-id='type-id-358' visibility='default' filepath='include/linux/blkdev.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='queuelist' type-id='type-id-20' visibility='default' filepath='include/linux/blkdev.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='' type-id='type-id-507' visibility='default' filepath='include/linux/blkdev.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='rq_disk' type-id='type-id-360' visibility='default' filepath='include/linux/blkdev.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='part' type-id='type-id-184' visibility='default' filepath='include/linux/blkdev.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='start_time_ns' type-id='type-id-40' visibility='default' filepath='include/linux/blkdev.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='io_start_time_ns' type-id='type-id-40' visibility='default' filepath='include/linux/blkdev.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='nr_phys_segments' type-id='type-id-312' visibility='default' filepath='include/linux/blkdev.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1488'>
+          <var-decl name='write_hint' type-id='type-id-312' visibility='default' filepath='include/linux/blkdev.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='ioprio' type-id='type-id-312' visibility='default' filepath='include/linux/blkdev.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='special' type-id='type-id-15' visibility='default' filepath='include/linux/blkdev.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='extra_len' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='state' type-id='type-id-508' visibility='default' filepath='include/linux/blkdev.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='ref' type-id='type-id-421' visibility='default' filepath='include/linux/blkdev.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='timeout' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='__deadline' type-id='type-id-16' visibility='default' filepath='include/linux/blkdev.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='timeout_list' type-id='type-id-20' visibility='default' filepath='include/linux/blkdev.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='end_io' type-id='type-id-509' visibility='default' filepath='include/linux/blkdev.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='end_io_data' type-id='type-id-15' visibility='default' filepath='include/linux/blkdev.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='next_rq' type-id='type-id-463' visibility='default' filepath='include/linux/blkdev.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='rl' type-id='type-id-510' visibility='default' filepath='include/linux/blkdev.h' line='270' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='req_flags_t' type-id='type-id-511' filepath='include/linux/blkdev.h' line='83' column='1' id='type-id-506'/>
+      <class-decl name='bio_vec' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/bvec.h' line='30' column='1' id='type-id-131'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bv_page' type-id='type-id-512' visibility='default' filepath='include/linux/bvec.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bv_len' type-id='type-id-5' visibility='default' filepath='include/linux/bvec.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='bv_offset' type-id='type-id-5' visibility='default' filepath='include/linux/bvec.h' line='33' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__11' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='202' column='1' id='type-id-502'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='icq' type-id='type-id-513' visibility='default' filepath='include/linux/blkdev.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='priv' type-id='type-id-224' visibility='default' filepath='include/linux/blkdev.h' line='204' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__12' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='207' column='1' id='type-id-503'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='seq' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/blkdev.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='saved_end_io' type-id='type-id-509' visibility='default' filepath='include/linux/blkdev.h' line='210' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='rq_end_io_fn' type-id='type-id-514' filepath='include/linux/blkdev.h' line='60' column='1' id='type-id-515'/>
+      <typedef-decl name='blk_status_t' type-id='type-id-214' filepath='include/linux/blk_types.h' line='30' column='1' id='type-id-361'/>
+      <enum-decl name='mq_rq_state' filepath='include/linux/blkdev.h' line='139' column='1' id='type-id-508'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='MQ_RQ_IDLE' value='0'/>
+        <enumerator name='MQ_RQ_IN_FLIGHT' value='1'/>
+        <enumerator name='MQ_RQ_COMPLETE' value='2'/>
+      </enum-decl>
+      <class-decl name='__call_single_data' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/smp.h' line='18' column='1' id='type-id-505'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='llist' type-id='type-id-281' visibility='default' filepath='include/linux/smp.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='func' type-id='type-id-516' visibility='default' filepath='include/linux/smp.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='info' type-id='type-id-15' visibility='default' filepath='include/linux/smp.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='type-id-5' visibility='default' filepath='include/linux/smp.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='smp_call_func_t' type-id='type-id-517' filepath='include/linux/smp.h' line='17' column='1' id='type-id-516'/>
+      <class-decl name='request_list' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/blkdev.h' line='65' column='1' id='type-id-468'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='q' type-id='type-id-378' visibility='default' filepath='include/linux/blkdev.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='blkg' type-id='type-id-366' visibility='default' filepath='include/linux/blkdev.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='count' type-id='type-id-465' visibility='default' filepath='include/linux/blkdev.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='starved' type-id='type-id-465' visibility='default' filepath='include/linux/blkdev.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rq_pool' type-id='type-id-518' visibility='default' filepath='include/linux/blkdev.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='wait' type-id='type-id-226' visibility='default' filepath='include/linux/blkdev.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='flags' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='78' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blkcg_gq' size-in-bits='5952' is-struct='yes' visibility='default' filepath='include/linux/blk-cgroup.h' line='109' column='1' id='type-id-519'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='q' type-id='type-id-378' visibility='default' filepath='include/linux/blk-cgroup.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='q_node' type-id='type-id-20' visibility='default' filepath='include/linux/blk-cgroup.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='blkcg_node' type-id='type-id-520' visibility='default' filepath='include/linux/blk-cgroup.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='blkcg' type-id='type-id-521' visibility='default' filepath='include/linux/blk-cgroup.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='wb_congested' type-id='type-id-408' visibility='default' filepath='include/linux/blk-cgroup.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='parent' type-id='type-id-366' visibility='default' filepath='include/linux/blk-cgroup.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='rl' type-id='type-id-468' visibility='default' filepath='include/linux/blk-cgroup.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='refcnt' type-id='type-id-26' visibility='default' filepath='include/linux/blk-cgroup.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='online' type-id='type-id-33' visibility='default' filepath='include/linux/blk-cgroup.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='stat_bytes' type-id='type-id-522' visibility='default' filepath='include/linux/blk-cgroup.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='stat_ios' type-id='type-id-522' visibility='default' filepath='include/linux/blk-cgroup.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='pd' type-id='type-id-139' visibility='default' filepath='include/linux/blk-cgroup.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='callback_head' type-id='type-id-385' visibility='default' filepath='include/linux/blk-cgroup.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='use_delay' type-id='type-id-26' visibility='default' filepath='include/linux/blk-cgroup.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='delay_nsec' type-id='type-id-113' visibility='default' filepath='include/linux/blk-cgroup.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='delay_start' type-id='type-id-113' visibility='default' filepath='include/linux/blk-cgroup.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='last_delay' type-id='type-id-40' visibility='default' filepath='include/linux/blk-cgroup.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='last_use' type-id='type-id-17' visibility='default' filepath='include/linux/blk-cgroup.h' line='145' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blkcg' size-in-bits='2880' is-struct='yes' visibility='default' filepath='include/linux/blk-cgroup.h' line='46' column='1' id='type-id-523'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='css' type-id='type-id-424' visibility='default' filepath='include/linux/blk-cgroup.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='include/linux/blk-cgroup.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='blkg_tree' type-id='type-id-415' visibility='default' filepath='include/linux/blk-cgroup.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='blkg_hint' type-id='type-id-366' visibility='default' filepath='include/linux/blk-cgroup.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='blkg_list' type-id='type-id-186' visibility='default' filepath='include/linux/blk-cgroup.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='cpd' type-id='type-id-137' visibility='default' filepath='include/linux/blk-cgroup.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='all_blkcgs_node' type-id='type-id-20' visibility='default' filepath='include/linux/blk-cgroup.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='cgwb_list' type-id='type-id-20' visibility='default' filepath='include/linux/blk-cgroup.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='cgwb_refcnt' type-id='type-id-421' visibility='default' filepath='include/linux/blk-cgroup.h' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blkcg_policy_data' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/blk-cgroup.h' line='102' column='1' id='type-id-524'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='blkcg' type-id='type-id-521' visibility='default' filepath='include/linux/blk-cgroup.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='plid' type-id='type-id-17' visibility='default' filepath='include/linux/blk-cgroup.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blkg_rwstat' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/linux/blk-cgroup.h' line='73' column='1' id='type-id-522'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cpu_cnt' type-id='type-id-206' visibility='default' filepath='include/linux/blk-cgroup.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='aux_cnt' type-id='type-id-114' visibility='default' filepath='include/linux/blk-cgroup.h' line='75' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blkg_policy_data' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/blk-cgroup.h' line='89' column='1' id='type-id-525'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='blkg' type-id='type-id-366' visibility='default' filepath='include/linux/blk-cgroup.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='plid' type-id='type-id-17' visibility='default' filepath='include/linux/blk-cgroup.h' line='92' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='mempool_t' type-id='type-id-526' filepath='include/linux/mempool.h' line='26' column='1' id='type-id-527'/>
+      <class-decl name='mempool_s' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/mempool.h' line='16' column='1' id='type-id-526'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='include/linux/mempool.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='min_nr' type-id='type-id-17' visibility='default' filepath='include/linux/mempool.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='curr_nr' type-id='type-id-17' visibility='default' filepath='include/linux/mempool.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='elements' type-id='type-id-528' visibility='default' filepath='include/linux/mempool.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pool_data' type-id='type-id-15' visibility='default' filepath='include/linux/mempool.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='alloc' type-id='type-id-529' visibility='default' filepath='include/linux/mempool.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='free' type-id='type-id-530' visibility='default' filepath='include/linux/mempool.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='wait' type-id='type-id-225' visibility='default' filepath='include/linux/mempool.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='mempool_alloc_t' type-id='type-id-531' filepath='include/linux/mempool.h' line='13' column='1' id='type-id-532'/>
+      <typedef-decl name='mempool_free_t' type-id='type-id-533' filepath='include/linux/mempool.h' line='14' column='1' id='type-id-534'/>
+      <class-decl name='elevator_queue' size-in-bits='5056' is-struct='yes' visibility='default' filepath='include/linux/elevator.h' line='172' column='1' id='type-id-535'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='type-id-536' visibility='default' filepath='include/linux/elevator.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='elevator_data' type-id='type-id-15' visibility='default' filepath='include/linux/elevator.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='kobj' type-id='type-id-267' visibility='default' filepath='include/linux/elevator.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sysfs_lock' type-id='type-id-245' visibility='default' filepath='include/linux/elevator.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='registered' type-id='type-id-5' visibility='default' filepath='include/linux/elevator.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='uses_mq' type-id='type-id-5' visibility='default' filepath='include/linux/elevator.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='hash' type-id='type-id-187' visibility='default' filepath='include/linux/elevator.h' line='180' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='elevator_type' size-in-bits='2496' is-struct='yes' visibility='default' filepath='include/linux/elevator.h' line='135' column='1' id='type-id-537'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='icq_cache' type-id='type-id-538' visibility='default' filepath='include/linux/elevator.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='type-id-539' visibility='default' filepath='include/linux/elevator.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='icq_size' type-id='type-id-84' visibility='default' filepath='include/linux/elevator.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='icq_align' type-id='type-id-84' visibility='default' filepath='include/linux/elevator.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='elevator_attrs' type-id='type-id-540' visibility='default' filepath='include/linux/elevator.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='elevator_name' type-id='type-id-43' visibility='default' filepath='include/linux/elevator.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='elevator_alias' type-id='type-id-4' visibility='default' filepath='include/linux/elevator.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='elevator_owner' type-id='type-id-260' visibility='default' filepath='include/linux/elevator.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='uses_mq' type-id='type-id-33' visibility='default' filepath='include/linux/elevator.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='queue_debugfs_attrs' type-id='type-id-541' visibility='default' filepath='include/linux/elevator.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='hctx_debugfs_attrs' type-id='type-id-541' visibility='default' filepath='include/linux/elevator.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='icq_cache_name' type-id='type-id-145' visibility='default' filepath='include/linux/elevator.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/elevator.h' line='159' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='elevator_ops' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/linux/elevator.h' line='62' column='1' id='type-id-542'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='elevator_merge_fn' type-id='type-id-543' visibility='default' filepath='include/linux/elevator.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='elevator_merged_fn' type-id='type-id-544' visibility='default' filepath='include/linux/elevator.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='elevator_merge_req_fn' type-id='type-id-545' visibility='default' filepath='include/linux/elevator.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='elevator_allow_bio_merge_fn' type-id='type-id-546' visibility='default' filepath='include/linux/elevator.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='elevator_allow_rq_merge_fn' type-id='type-id-547' visibility='default' filepath='include/linux/elevator.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='elevator_bio_merged_fn' type-id='type-id-548' visibility='default' filepath='include/linux/elevator.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='elevator_dispatch_fn' type-id='type-id-549' visibility='default' filepath='include/linux/elevator.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='elevator_add_req_fn' type-id='type-id-550' visibility='default' filepath='include/linux/elevator.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='elevator_activate_req_fn' type-id='type-id-551' visibility='default' filepath='include/linux/elevator.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='elevator_deactivate_req_fn' type-id='type-id-552' visibility='default' filepath='include/linux/elevator.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='elevator_completed_req_fn' type-id='type-id-553' visibility='default' filepath='include/linux/elevator.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='elevator_former_req_fn' type-id='type-id-554' visibility='default' filepath='include/linux/elevator.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='elevator_latter_req_fn' type-id='type-id-554' visibility='default' filepath='include/linux/elevator.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='elevator_init_icq_fn' type-id='type-id-555' visibility='default' filepath='include/linux/elevator.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='elevator_exit_icq_fn' type-id='type-id-556' visibility='default' filepath='include/linux/elevator.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='elevator_set_req_fn' type-id='type-id-557' visibility='default' filepath='include/linux/elevator.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='elevator_put_req_fn' type-id='type-id-558' visibility='default' filepath='include/linux/elevator.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='elevator_may_queue_fn' type-id='type-id-559' visibility='default' filepath='include/linux/elevator.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='elevator_init_fn' type-id='type-id-560' visibility='default' filepath='include/linux/elevator.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='elevator_exit_fn' type-id='type-id-561' visibility='default' filepath='include/linux/elevator.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='elevator_registered_fn' type-id='type-id-562' visibility='default' filepath='include/linux/elevator.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='elevator_merge_fn' type-id='type-id-563' filepath='include/linux/elevator.h' line='26' column='1' id='type-id-564'/>
+      <enum-decl name='elv_merge' filepath='include/linux/elevator.h' line='19' column='1' id='type-id-565'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='ELEVATOR_NO_MERGE' value='0'/>
+        <enumerator name='ELEVATOR_FRONT_MERGE' value='1'/>
+        <enumerator name='ELEVATOR_BACK_MERGE' value='2'/>
+        <enumerator name='ELEVATOR_DISCARD_MERGE' value='3'/>
+      </enum-decl>
+      <typedef-decl name='elevator_merged_fn' type-id='type-id-566' filepath='include/linux/elevator.h' line='31' column='1' id='type-id-567'/>
+      <typedef-decl name='elevator_merge_req_fn' type-id='type-id-568' filepath='include/linux/elevator.h' line='29' column='1' id='type-id-569'/>
+      <typedef-decl name='elevator_allow_bio_merge_fn' type-id='type-id-570' filepath='include/linux/elevator.h' line='33' column='1' id='type-id-571'/>
+      <typedef-decl name='elevator_allow_rq_merge_fn' type-id='type-id-572' filepath='include/linux/elevator.h' line='36' column='1' id='type-id-573'/>
+      <typedef-decl name='elevator_bio_merged_fn' type-id='type-id-574' filepath='include/linux/elevator.h' line='39' column='1' id='type-id-575'/>
+      <typedef-decl name='elevator_dispatch_fn' type-id='type-id-576' filepath='include/linux/elevator.h' line='42' column='1' id='type-id-577'/>
+      <typedef-decl name='elevator_add_req_fn' type-id='type-id-578' filepath='include/linux/elevator.h' line='44' column='1' id='type-id-579'/>
+      <typedef-decl name='elevator_activate_req_fn' type-id='type-id-578' filepath='include/linux/elevator.h' line='54' column='1' id='type-id-580'/>
+      <typedef-decl name='elevator_deactivate_req_fn' type-id='type-id-578' filepath='include/linux/elevator.h' line='55' column='1' id='type-id-581'/>
+      <typedef-decl name='elevator_completed_req_fn' type-id='type-id-578' filepath='include/linux/elevator.h' line='46' column='1' id='type-id-582'/>
+      <typedef-decl name='elevator_request_list_fn' type-id='type-id-583' filepath='include/linux/elevator.h' line='45' column='1' id='type-id-584'/>
+      <typedef-decl name='elevator_init_icq_fn' type-id='type-id-585' filepath='include/linux/elevator.h' line='49' column='1' id='type-id-586'/>
+      <typedef-decl name='elevator_exit_icq_fn' type-id='type-id-585' filepath='include/linux/elevator.h' line='50' column='1' id='type-id-587'/>
+      <typedef-decl name='elevator_set_req_fn' type-id='type-id-588' filepath='include/linux/elevator.h' line='51' column='1' id='type-id-589'/>
+      <typedef-decl name='elevator_put_req_fn' type-id='type-id-590' filepath='include/linux/elevator.h' line='53' column='1' id='type-id-591'/>
+      <typedef-decl name='elevator_may_queue_fn' type-id='type-id-592' filepath='include/linux/elevator.h' line='47' column='1' id='type-id-593'/>
+      <typedef-decl name='elevator_init_fn' type-id='type-id-594' filepath='include/linux/elevator.h' line='57' column='1' id='type-id-595'/>
+      <typedef-decl name='elevator_exit_fn' type-id='type-id-596' filepath='include/linux/elevator.h' line='59' column='1' id='type-id-597'/>
+      <typedef-decl name='elevator_registered_fn' type-id='type-id-598' filepath='include/linux/elevator.h' line='60' column='1' id='type-id-599'/>
+      <class-decl name='elevator_mq_ops' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/elevator.h' line='97' column='1' id='type-id-600'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='init_sched' type-id='type-id-601' visibility='default' filepath='include/linux/elevator.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='exit_sched' type-id='type-id-602' visibility='default' filepath='include/linux/elevator.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init_hctx' type-id='type-id-603' visibility='default' filepath='include/linux/elevator.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='exit_hctx' type-id='type-id-604' visibility='default' filepath='include/linux/elevator.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='depth_updated' type-id='type-id-605' visibility='default' filepath='include/linux/elevator.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='allow_merge' type-id='type-id-606' visibility='default' filepath='include/linux/elevator.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='bio_merge' type-id='type-id-607' visibility='default' filepath='include/linux/elevator.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='request_merge' type-id='type-id-608' visibility='default' filepath='include/linux/elevator.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='request_merged' type-id='type-id-609' visibility='default' filepath='include/linux/elevator.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='requests_merged' type-id='type-id-610' visibility='default' filepath='include/linux/elevator.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='limit_depth' type-id='type-id-611' visibility='default' filepath='include/linux/elevator.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='prepare_request' type-id='type-id-612' visibility='default' filepath='include/linux/elevator.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='finish_request' type-id='type-id-480' visibility='default' filepath='include/linux/elevator.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='insert_requests' type-id='type-id-613' visibility='default' filepath='include/linux/elevator.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dispatch_request' type-id='type-id-614' visibility='default' filepath='include/linux/elevator.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='has_work' type-id='type-id-615' visibility='default' filepath='include/linux/elevator.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='completed_request' type-id='type-id-480' visibility='default' filepath='include/linux/elevator.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='started_request' type-id='type-id-480' visibility='default' filepath='include/linux/elevator.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='requeue_request' type-id='type-id-480' visibility='default' filepath='include/linux/elevator.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='former_request' type-id='type-id-616' visibility='default' filepath='include/linux/elevator.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='next_request' type-id='type-id-616' visibility='default' filepath='include/linux/elevator.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='init_icq' type-id='type-id-617' visibility='default' filepath='include/linux/elevator.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='exit_icq' type-id='type-id-617' visibility='default' filepath='include/linux/elevator.h' line='121' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='elv_fs_entry' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/elevator.h' line='126' column='1' id='type-id-618'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attr' type-id='type-id-619' visibility='default' filepath='include/linux/elevator.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='show' type-id='type-id-620' visibility='default' filepath='include/linux/elevator.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='store' type-id='type-id-621' visibility='default' filepath='include/linux/elevator.h' line='129' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='request_fn_proc' type-id='type-id-598' filepath='include/linux/blkdev.h' line='315' column='1' id='type-id-622'/>
+      <typedef-decl name='make_request_fn' type-id='type-id-623' filepath='include/linux/blkdev.h' line='316' column='1' id='type-id-624'/>
+      <typedef-decl name='blk_qc_t' type-id='type-id-5' filepath='include/linux/blk_types.h' line='424' column='1' id='type-id-625'/>
+      <typedef-decl name='poll_q_fn' type-id='type-id-626' filepath='include/linux/blkdev.h' line='317' column='1' id='type-id-627'/>
+      <typedef-decl name='prep_rq_fn' type-id='type-id-628' filepath='include/linux/blkdev.h' line='318' column='1' id='type-id-629'/>
+      <typedef-decl name='unprep_rq_fn' type-id='type-id-578' filepath='include/linux/blkdev.h' line='319' column='1' id='type-id-630'/>
+      <typedef-decl name='softirq_done_fn' type-id='type-id-590' filepath='include/linux/blkdev.h' line='322' column='1' id='type-id-631'/>
+      <typedef-decl name='rq_timed_out_fn' type-id='type-id-632' filepath='include/linux/blkdev.h' line='334' column='1' id='type-id-633'/>
+      <enum-decl name='blk_eh_timer_return' filepath='include/linux/blkdev.h' line='329' column='1' id='type-id-634'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='BLK_EH_DONE' value='0'/>
+        <enumerator name='BLK_EH_RESET_TIMER' value='1'/>
+      </enum-decl>
+      <typedef-decl name='dma_drain_needed_fn' type-id='type-id-635' filepath='include/linux/blkdev.h' line='323' column='1' id='type-id-636'/>
+      <typedef-decl name='lld_busy_fn' type-id='type-id-637' filepath='include/linux/blkdev.h' line='324' column='1' id='type-id-638'/>
+      <typedef-decl name='init_rq_fn' type-id='type-id-639' filepath='include/linux/blkdev.h' line='326' column='1' id='type-id-640'/>
+      <typedef-decl name='exit_rq_fn' type-id='type-id-578' filepath='include/linux/blkdev.h' line='327' column='1' id='type-id-641'/>
+      <class-decl name='blk_queue_tag' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/blkdev.h' line='341' column='1' id='type-id-642'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tag_index' type-id='type-id-643' visibility='default' filepath='include/linux/blkdev.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tag_map' type-id='type-id-45' visibility='default' filepath='include/linux/blkdev.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max_depth' type-id='type-id-17' visibility='default' filepath='include/linux/blkdev.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='real_max_depth' type-id='type-id-17' visibility='default' filepath='include/linux/blkdev.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='refcnt' type-id='type-id-26' visibility='default' filepath='include/linux/blkdev.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='alloc_policy' type-id='type-id-17' visibility='default' filepath='include/linux/blkdev.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='next_tag' type-id='type-id-17' visibility='default' filepath='include/linux/blkdev.h' line='348' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_rq_stat' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/blk_types.h' line='460' column='1' id='type-id-133'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mean' type-id='type-id-40' visibility='default' filepath='include/linux/blk_types.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='min' type-id='type-id-40' visibility='default' filepath='include/linux/blk_types.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max' type-id='type-id-40' visibility='default' filepath='include/linux/blk_types.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nr_samples' type-id='type-id-7' visibility='default' filepath='include/linux/blk_types.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='batch' type-id='type-id-40' visibility='default' filepath='include/linux/blk_types.h' line='465' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='queue_limits' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/blkdev.h' line='365' column='1' id='type-id-492'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bounce_pfn' type-id='type-id-16' visibility='default' filepath='include/linux/blkdev.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='seg_boundary_mask' type-id='type-id-16' visibility='default' filepath='include/linux/blkdev.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='virt_boundary_mask' type-id='type-id-16' visibility='default' filepath='include/linux/blkdev.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_hw_sectors' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='max_dev_sectors' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='chunk_sectors' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='max_sectors' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='max_segment_size' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='physical_block_size' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='alignment_offset' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='io_min' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='io_opt' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='max_discard_sectors' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='max_hw_discard_sectors' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='max_write_same_sectors' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='max_write_zeroes_sectors' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='discard_granularity' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='discard_alignment' type-id='type-id-5' visibility='default' filepath='include/linux/blkdev.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='logical_block_size' type-id='type-id-312' visibility='default' filepath='include/linux/blkdev.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='688'>
+          <var-decl name='max_segments' type-id='type-id-312' visibility='default' filepath='include/linux/blkdev.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='max_integrity_segments' type-id='type-id-312' visibility='default' filepath='include/linux/blkdev.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='720'>
+          <var-decl name='max_discard_segments' type-id='type-id-312' visibility='default' filepath='include/linux/blkdev.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='misaligned' type-id='type-id-216' visibility='default' filepath='include/linux/blkdev.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='744'>
+          <var-decl name='discard_misaligned' type-id='type-id-216' visibility='default' filepath='include/linux/blkdev.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='752'>
+          <var-decl name='cluster' type-id='type-id-216' visibility='default' filepath='include/linux/blkdev.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='760'>
+          <var-decl name='raid_partial_stripes_expensive' type-id='type-id-216' visibility='default' filepath='include/linux/blkdev.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='zoned' type-id='type-id-644' visibility='default' filepath='include/linux/blkdev.h' line='395' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='blk_zoned_model' filepath='include/linux/blkdev.h' line='359' column='1' id='type-id-644'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='BLK_ZONED_NONE' value='0'/>
+        <enumerator name='BLK_ZONED_HA' value='1'/>
+        <enumerator name='BLK_ZONED_HM' value='2'/>
+      </enum-decl>
+      <typedef-decl name='bsg_job_fn' type-id='type-id-645' filepath='include/linux/blkdev.h' line='325' column='1' id='type-id-646'/>
+      <class-decl name='bsg_class_device' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/bsg.h' line='18' column='1' id='type-id-495'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='class_dev' type-id='type-id-240' visibility='default' filepath='include/linux/bsg.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='minor' type-id='type-id-17' visibility='default' filepath='include/linux/bsg.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='queue' type-id='type-id-378' visibility='default' filepath='include/linux/bsg.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ops' type-id='type-id-647' visibility='default' filepath='include/linux/bsg.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bsg_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/bsg.h' line='10' column='1' id='type-id-648'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='check_proto' type-id='type-id-649' visibility='default' filepath='include/linux/bsg.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fill_hdr' type-id='type-id-650' visibility='default' filepath='include/linux/bsg.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='complete_rq' type-id='type-id-651' visibility='default' filepath='include/linux/bsg.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='free_rq' type-id='type-id-480' visibility='default' filepath='include/linux/bsg.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sg_io_v4' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/uapi/linux/bsg.h' line='22' column='1' id='type-id-652'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='guard' type-id='type-id-653' visibility='default' filepath='include/uapi/linux/bsg.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='protocol' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bsg.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='subprotocol' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bsg.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='request_len' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bsg.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='request' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/bsg.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='request_tag' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/bsg.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='request_attr' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bsg.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='request_priority' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bsg.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='request_extra' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bsg.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='max_response_len' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bsg.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='response' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/bsg.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dout_iovec_count' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bsg.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='dout_xfer_len' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bsg.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='din_iovec_count' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bsg.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='din_xfer_len' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bsg.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='dout_xferp' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/bsg.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='din_xferp' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/bsg.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='timeout' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bsg.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='flags' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bsg.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='usr_ptr' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/bsg.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='spare_in' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bsg.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='driver_status' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bsg.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='transport_status' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bsg.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='device_status' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bsg.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='retry_delay' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bsg.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='info' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bsg.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='duration' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bsg.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='response_len' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bsg.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='din_resid' type-id='type-id-653' visibility='default' filepath='include/uapi/linux/bsg.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='dout_resid' type-id='type-id-653' visibility='default' filepath='include/uapi/linux/bsg.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='generated_tag' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/bsg.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='spare_out' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bsg.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='padding' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bsg.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bio_set' size-in-bits='1792' is-struct='yes' visibility='default' filepath='include/linux/bio.h' line='746' column='1' id='type-id-497'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bio_slab' type-id='type-id-538' visibility='default' filepath='include/linux/bio.h' line='747' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='front_pad' type-id='type-id-5' visibility='default' filepath='include/linux/bio.h' line='748' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bio_pool' type-id='type-id-527' visibility='default' filepath='include/linux/bio.h' line='750' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='bvec_pool' type-id='type-id-527' visibility='default' filepath='include/linux/bio.h' line='751' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='rescue_lock' type-id='type-id-247' visibility='default' filepath='include/linux/bio.h' line='761' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rescue_list' type-id='type-id-357' visibility='default' filepath='include/linux/bio.h' line='762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='rescue_work' type-id='type-id-255' visibility='default' filepath='include/linux/bio.h' line='763' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='rescue_workqueue' type-id='type-id-654' visibility='default' filepath='include/linux/bio.h' line='764' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='lockdep_map' is-struct='yes' visibility='default' filepath='include/linux/lockdep.h' line='438' column='1' id='type-id-383'/>
+      <class-decl name='bvec_iter' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/bvec.h' line='36' column='1' id='type-id-362'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bi_sector' type-id='type-id-386' visibility='default' filepath='include/linux/bvec.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bi_size' type-id='type-id-5' visibility='default' filepath='include/linux/bvec.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='bi_idx' type-id='type-id-5' visibility='default' filepath='include/linux/bvec.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bi_done' type-id='type-id-5' visibility='default' filepath='include/linux/bvec.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='bi_bvec_done' type-id='type-id-5' visibility='default' filepath='include/linux/bvec.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='bio_end_io_t' type-id='type-id-655' filepath='include/linux/blk_types.h' line='20' column='1' id='type-id-656'/>
+      <class-decl name='bio_issue' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/blk_types.h' line='113' column='1' id='type-id-367'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='value' type-id='type-id-40' visibility='default' filepath='include/linux/blk_types.h' line='114' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bio_crypt_ctx' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/bio-crypt-ctx.h' line='17' column='1' id='type-id-657'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='keyslot' type-id='type-id-17' visibility='default' filepath='include/linux/bio-crypt-ctx.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='raw_key' type-id='type-id-658' visibility='default' filepath='include/linux/bio-crypt-ctx.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='crypto_mode' type-id='type-id-659' visibility='default' filepath='include/linux/bio-crypt-ctx.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='data_unit_num' type-id='type-id-40' visibility='default' filepath='include/linux/bio-crypt-ctx.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='data_unit_size_bits' type-id='type-id-5' visibility='default' filepath='include/linux/bio-crypt-ctx.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='processing_ksm' type-id='type-id-489' visibility='default' filepath='include/linux/bio-crypt-ctx.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='crypt_iter' type-id='type-id-362' visibility='default' filepath='include/linux/bio-crypt-ctx.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='sw_data_unit_num' type-id='type-id-40' visibility='default' filepath='include/linux/bio-crypt-ctx.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='blk_crypto_mode_num' filepath='include/linux/bio-crypt-ctx.h' line='8' column='1' id='type-id-659'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='BLK_ENCRYPTION_MODE_INVALID' value='0'/>
+        <enumerator name='BLK_ENCRYPTION_MODE_AES_256_XTS' value='1'/>
+      </enum-decl>
+      <class-decl name='perf_event_context' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='726' column='1' id='type-id-660'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pmu' type-id='type-id-661' visibility='default' filepath='include/linux/perf_event.h' line='727' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lock' type-id='type-id-36' visibility='default' filepath='include/linux/perf_event.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mutex' type-id='type-id-245' visibility='default' filepath='include/linux/perf_event.h' line='738' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='active_ctx_list' type-id='type-id-20' visibility='default' filepath='include/linux/perf_event.h' line='740' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pinned_groups' type-id='type-id-662' visibility='default' filepath='include/linux/perf_event.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='flexible_groups' type-id='type-id-662' visibility='default' filepath='include/linux/perf_event.h' line='742' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='event_list' type-id='type-id-20' visibility='default' filepath='include/linux/perf_event.h' line='743' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='pinned_active' type-id='type-id-20' visibility='default' filepath='include/linux/perf_event.h' line='745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='flexible_active' type-id='type-id-20' visibility='default' filepath='include/linux/perf_event.h' line='746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='nr_events' type-id='type-id-17' visibility='default' filepath='include/linux/perf_event.h' line='748' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='nr_active' type-id='type-id-17' visibility='default' filepath='include/linux/perf_event.h' line='749' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='is_active' type-id='type-id-17' visibility='default' filepath='include/linux/perf_event.h' line='750' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='nr_stat' type-id='type-id-17' visibility='default' filepath='include/linux/perf_event.h' line='751' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='nr_freq' type-id='type-id-17' visibility='default' filepath='include/linux/perf_event.h' line='752' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='rotate_disable' type-id='type-id-17' visibility='default' filepath='include/linux/perf_event.h' line='753' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='refcount' type-id='type-id-26' visibility='default' filepath='include/linux/perf_event.h' line='754' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='task' type-id='type-id-431' visibility='default' filepath='include/linux/perf_event.h' line='755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='time' type-id='type-id-40' visibility='default' filepath='include/linux/perf_event.h' line='760' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='timestamp' type-id='type-id-40' visibility='default' filepath='include/linux/perf_event.h' line='761' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='parent_ctx' type-id='type-id-663' visibility='default' filepath='include/linux/perf_event.h' line='767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='parent_gen' type-id='type-id-40' visibility='default' filepath='include/linux/perf_event.h' line='768' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='generation' type-id='type-id-40' visibility='default' filepath='include/linux/perf_event.h' line='769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='pin_count' type-id='type-id-17' visibility='default' filepath='include/linux/perf_event.h' line='770' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='task_ctx_data' type-id='type-id-15' visibility='default' filepath='include/linux/perf_event.h' line='774' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='callback_head' type-id='type-id-385' visibility='default' filepath='include/linux/perf_event.h' line='775' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pmu' size-in-bits='2112' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='252' column='1' id='type-id-664'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='entry' type-id='type-id-20' visibility='default' filepath='include/linux/perf_event.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='module' type-id='type-id-260' visibility='default' filepath='include/linux/perf_event.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='type-id-240' visibility='default' filepath='include/linux/perf_event.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='attr_groups' type-id='type-id-665' visibility='default' filepath='include/linux/perf_event.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/perf_event.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='type' type-id='type-id-17' visibility='default' filepath='include/linux/perf_event.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='capabilities' type-id='type-id-17' visibility='default' filepath='include/linux/perf_event.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pmu_disable_count' type-id='type-id-666' visibility='default' filepath='include/linux/perf_event.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pmu_cpu_context' type-id='type-id-667' visibility='default' filepath='include/linux/perf_event.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='exclusive_cnt' type-id='type-id-26' visibility='default' filepath='include/linux/perf_event.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='task_ctx_nr' type-id='type-id-17' visibility='default' filepath='include/linux/perf_event.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='hrtimer_interval_ms' type-id='type-id-17' visibility='default' filepath='include/linux/perf_event.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='nr_addr_filters' type-id='type-id-5' visibility='default' filepath='include/linux/perf_event.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='pmu_enable' type-id='type-id-668' visibility='default' filepath='include/linux/perf_event.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='pmu_disable' type-id='type-id-668' visibility='default' filepath='include/linux/perf_event.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='event_init' type-id='type-id-669' visibility='default' filepath='include/linux/perf_event.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='event_mapped' type-id='type-id-670' visibility='default' filepath='include/linux/perf_event.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='event_unmapped' type-id='type-id-670' visibility='default' filepath='include/linux/perf_event.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='add' type-id='type-id-671' visibility='default' filepath='include/linux/perf_event.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='del' type-id='type-id-672' visibility='default' filepath='include/linux/perf_event.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='start' type-id='type-id-672' visibility='default' filepath='include/linux/perf_event.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='stop' type-id='type-id-672' visibility='default' filepath='include/linux/perf_event.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='read' type-id='type-id-673' visibility='default' filepath='include/linux/perf_event.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='start_txn' type-id='type-id-674' visibility='default' filepath='include/linux/perf_event.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='commit_txn' type-id='type-id-675' visibility='default' filepath='include/linux/perf_event.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='cancel_txn' type-id='type-id-668' visibility='default' filepath='include/linux/perf_event.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='event_idx' type-id='type-id-669' visibility='default' filepath='include/linux/perf_event.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='sched_task' type-id='type-id-676' visibility='default' filepath='include/linux/perf_event.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='task_ctx_size' type-id='type-id-84' visibility='default' filepath='include/linux/perf_event.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='setup_aux' type-id='type-id-677' visibility='default' filepath='include/linux/perf_event.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='free_aux' type-id='type-id-517' visibility='default' filepath='include/linux/perf_event.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='addr_filters_validate' type-id='type-id-678' visibility='default' filepath='include/linux/perf_event.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='addr_filters_sync' type-id='type-id-673' visibility='default' filepath='include/linux/perf_event.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='filter_match' type-id='type-id-669' visibility='default' filepath='include/linux/perf_event.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='check_period' type-id='type-id-679' visibility='default' filepath='include/linux/perf_event.h' line='455' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_cpu_context' size-in-bits='3072' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='787' column='1' id='type-id-680'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ctx' type-id='type-id-660' visibility='default' filepath='include/linux/perf_event.h' line='788' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='task_ctx' type-id='type-id-663' visibility='default' filepath='include/linux/perf_event.h' line='789' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='active_oncpu' type-id='type-id-17' visibility='default' filepath='include/linux/perf_event.h' line='790' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='exclusive' type-id='type-id-17' visibility='default' filepath='include/linux/perf_event.h' line='791' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='hrtimer_lock' type-id='type-id-36' visibility='default' filepath='include/linux/perf_event.h' line='793' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='hrtimer' type-id='type-id-681' visibility='default' filepath='include/linux/perf_event.h' line='794' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='hrtimer_interval' type-id='type-id-682' visibility='default' filepath='include/linux/perf_event.h' line='795' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='hrtimer_active' type-id='type-id-5' visibility='default' filepath='include/linux/perf_event.h' line='796' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='sched_cb_entry' type-id='type-id-20' visibility='default' filepath='include/linux/perf_event.h' line='803' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='sched_cb_usage' type-id='type-id-17' visibility='default' filepath='include/linux/perf_event.h' line='804' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3040'>
+          <var-decl name='online' type-id='type-id-17' visibility='default' filepath='include/linux/perf_event.h' line='806' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_event' size-in-bits='7808' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='561' column='1' id='type-id-683'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='event_entry' type-id='type-id-20' visibility='default' filepath='include/linux/perf_event.h' line='568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sibling_list' type-id='type-id-20' visibility='default' filepath='include/linux/perf_event.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='active_list' type-id='type-id-20' visibility='default' filepath='include/linux/perf_event.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='group_node' type-id='type-id-422' visibility='default' filepath='include/linux/perf_event.h' line='579' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='group_index' type-id='type-id-40' visibility='default' filepath='include/linux/perf_event.h' line='580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='migrate_entry' type-id='type-id-20' visibility='default' filepath='include/linux/perf_event.h' line='586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='hlist_entry' type-id='type-id-520' visibility='default' filepath='include/linux/perf_event.h' line='588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='active_entry' type-id='type-id-20' visibility='default' filepath='include/linux/perf_event.h' line='589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='nr_siblings' type-id='type-id-17' visibility='default' filepath='include/linux/perf_event.h' line='590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='event_caps' type-id='type-id-17' visibility='default' filepath='include/linux/perf_event.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='group_caps' type-id='type-id-17' visibility='default' filepath='include/linux/perf_event.h' line='595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='group_leader' type-id='type-id-684' visibility='default' filepath='include/linux/perf_event.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='pmu' type-id='type-id-661' visibility='default' filepath='include/linux/perf_event.h' line='598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='pmu_private' type-id='type-id-15' visibility='default' filepath='include/linux/perf_event.h' line='599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='state' type-id='type-id-685' visibility='default' filepath='include/linux/perf_event.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='attach_state' type-id='type-id-5' visibility='default' filepath='include/linux/perf_event.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='count' type-id='type-id-686' visibility='default' filepath='include/linux/perf_event.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='child_count' type-id='type-id-113' visibility='default' filepath='include/linux/perf_event.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='total_time_enabled' type-id='type-id-40' visibility='default' filepath='include/linux/perf_event.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='total_time_running' type-id='type-id-40' visibility='default' filepath='include/linux/perf_event.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='tstamp' type-id='type-id-40' visibility='default' filepath='include/linux/perf_event.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='shadow_ctx_time' type-id='type-id-40' visibility='default' filepath='include/linux/perf_event.h' line='624' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='attr' type-id='type-id-687' visibility='default' filepath='include/linux/perf_event.h' line='626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='header_size' type-id='type-id-688' visibility='default' filepath='include/linux/perf_event.h' line='627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2704'>
+          <var-decl name='id_header_size' type-id='type-id-688' visibility='default' filepath='include/linux/perf_event.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2720'>
+          <var-decl name='read_size' type-id='type-id-688' visibility='default' filepath='include/linux/perf_event.h' line='629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='hw' type-id='type-id-689' visibility='default' filepath='include/linux/perf_event.h' line='630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='ctx' type-id='type-id-663' visibility='default' filepath='include/linux/perf_event.h' line='632' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='refcount' type-id='type-id-115' visibility='default' filepath='include/linux/perf_event.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='child_total_time_enabled' type-id='type-id-113' visibility='default' filepath='include/linux/perf_event.h' line='639' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='child_total_time_running' type-id='type-id-113' visibility='default' filepath='include/linux/perf_event.h' line='640' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='child_mutex' type-id='type-id-245' visibility='default' filepath='include/linux/perf_event.h' line='645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='child_list' type-id='type-id-20' visibility='default' filepath='include/linux/perf_event.h' line='646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='parent' type-id='type-id-684' visibility='default' filepath='include/linux/perf_event.h' line='647' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='oncpu' type-id='type-id-17' visibility='default' filepath='include/linux/perf_event.h' line='649' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5024'>
+          <var-decl name='cpu' type-id='type-id-17' visibility='default' filepath='include/linux/perf_event.h' line='650' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='owner_entry' type-id='type-id-20' visibility='default' filepath='include/linux/perf_event.h' line='652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='owner' type-id='type-id-431' visibility='default' filepath='include/linux/perf_event.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='mmap_mutex' type-id='type-id-245' visibility='default' filepath='include/linux/perf_event.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='mmap_count' type-id='type-id-26' visibility='default' filepath='include/linux/perf_event.h' line='657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='rb' type-id='type-id-12' visibility='default' filepath='include/linux/perf_event.h' line='659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='rb_entry' type-id='type-id-20' visibility='default' filepath='include/linux/perf_event.h' line='660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='rcu_batches' type-id='type-id-16' visibility='default' filepath='include/linux/perf_event.h' line='661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='rcu_pending' type-id='type-id-17' visibility='default' filepath='include/linux/perf_event.h' line='662' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='waitq' type-id='type-id-225' visibility='default' filepath='include/linux/perf_event.h' line='665' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='fasync' type-id='type-id-254' visibility='default' filepath='include/linux/perf_event.h' line='666' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='pending_wakeup' type-id='type-id-17' visibility='default' filepath='include/linux/perf_event.h' line='669' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6176'>
+          <var-decl name='pending_kill' type-id='type-id-17' visibility='default' filepath='include/linux/perf_event.h' line='670' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='pending_disable' type-id='type-id-17' visibility='default' filepath='include/linux/perf_event.h' line='671' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='pending' type-id='type-id-690' visibility='default' filepath='include/linux/perf_event.h' line='672' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='event_limit' type-id='type-id-26' visibility='default' filepath='include/linux/perf_event.h' line='674' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='addr_filters' type-id='type-id-691' visibility='default' filepath='include/linux/perf_event.h' line='677' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='addr_filter_ranges' type-id='type-id-692' visibility='default' filepath='include/linux/perf_event.h' line='679' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='addr_filters_gen' type-id='type-id-16' visibility='default' filepath='include/linux/perf_event.h' line='680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='destroy' type-id='type-id-673' visibility='default' filepath='include/linux/perf_event.h' line='682' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='callback_head' type-id='type-id-385' visibility='default' filepath='include/linux/perf_event.h' line='683' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7040'>
+          <var-decl name='ns' type-id='type-id-693' visibility='default' filepath='include/linux/perf_event.h' line='685' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7104'>
+          <var-decl name='id' type-id='type-id-40' visibility='default' filepath='include/linux/perf_event.h' line='686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='clock' type-id='type-id-694' visibility='default' filepath='include/linux/perf_event.h' line='688' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='overflow_handler' type-id='type-id-695' visibility='default' filepath='include/linux/perf_event.h' line='689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='overflow_handler_context' type-id='type-id-15' visibility='default' filepath='include/linux/perf_event.h' line='690' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='orig_overflow_handler' type-id='type-id-695' visibility='default' filepath='include/linux/perf_event.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='prog' type-id='type-id-696' visibility='default' filepath='include/linux/perf_event.h' line='693' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='tp_event' type-id='type-id-21' visibility='default' filepath='include/linux/perf_event.h' line='697' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='filter' type-id='type-id-22' visibility='default' filepath='include/linux/perf_event.h' line='698' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='security' type-id='type-id-15' visibility='default' filepath='include/linux/perf_event.h' line='709' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='sb_list' type-id='type-id-20' visibility='default' filepath='include/linux/perf_event.h' line='711' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='perf_event_state' filepath='include/linux/perf_event.h' line='506' column='1' id='type-id-685'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='PERF_EVENT_STATE_DEAD' value='-4'/>
+        <enumerator name='PERF_EVENT_STATE_EXIT' value='-3'/>
+        <enumerator name='PERF_EVENT_STATE_ERROR' value='-2'/>
+        <enumerator name='PERF_EVENT_STATE_OFF' value='-1'/>
+        <enumerator name='PERF_EVENT_STATE_INACTIVE' value='0'/>
+        <enumerator name='PERF_EVENT_STATE_ACTIVE' value='1'/>
+      </enum-decl>
+      <typedef-decl name='local64_t' type-id='type-id-697' filepath='include/asm-generic/local64.h' line='26' column='1' id='type-id-686'/>
+      <class-decl name='__anonymous_struct__13' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-686' visibility='default' filepath='include/asm-generic/local64.h' line='24' column='1' id='type-id-697'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='a' type-id='type-id-698' visibility='default' filepath='include/asm-generic/local64.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='local_t' type-id='type-id-699' filepath='include/asm-generic/local.h' line='25' column='1' id='type-id-698'/>
+      <class-decl name='__anonymous_struct__14' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-698' visibility='default' filepath='include/asm-generic/local.h' line='22' column='1' id='type-id-699'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='a' type-id='type-id-115' visibility='default' filepath='include/asm-generic/local.h' line='24' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_event_attr' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/uapi/linux/perf_event.h' line='310' column='1' id='type-id-687'>
+
+          <member-type access='public'>
+            <union-decl name='__anonymous_union__' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/perf_event.h' line='377' column='1' id='type-id-700'>
+              <data-member access='private'>
+                <var-decl name='wakeup_events' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/perf_event.h' line='378' column='1'/>
+              </data-member>
+              <data-member access='private'>
+                <var-decl name='wakeup_watermark' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/perf_event.h' line='379' column='1'/>
+              </data-member>
+            </union-decl>
+          </member-type>
+
+          <member-type access='public'>
+            <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/perf_event.h' line='383' column='1' id='type-id-701'>
+              <data-member access='private'>
+                <var-decl name='bp_addr' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='384' column='1'/>
+              </data-member>
+              <data-member access='private'>
+                <var-decl name='kprobe_func' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='385' column='1'/>
+              </data-member>
+              <data-member access='private'>
+                <var-decl name='uprobe_path' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='386' column='1'/>
+              </data-member>
+              <data-member access='private'>
+                <var-decl name='config1' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='387' column='1'/>
+              </data-member>
+            </union-decl>
+          </member-type>
+
+          <member-type access='public'>
+            <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/perf_event.h' line='389' column='1' id='type-id-702'>
+              <data-member access='private'>
+                <var-decl name='bp_len' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='390' column='1'/>
+              </data-member>
+              <data-member access='private'>
+                <var-decl name='kprobe_addr' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='391' column='1'/>
+              </data-member>
+              <data-member access='private'>
+                <var-decl name='probe_offset' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='392' column='1'/>
+              </data-member>
+              <data-member access='private'>
+                <var-decl name='config2' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='393' column='1'/>
+              </data-member>
+            </union-decl>
+          </member-type>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/perf_event.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='size' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/perf_event.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='config' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='type-id-703' visibility='default' filepath='include/uapi/linux/perf_event.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sample_type' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='read_format' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='63'>
+          <var-decl name='disabled' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='62'>
+          <var-decl name='inherit' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='61'>
+          <var-decl name='pinned' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='60'>
+          <var-decl name='exclusive' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='59'>
+          <var-decl name='exclude_user' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='58'>
+          <var-decl name='exclude_kernel' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='57'>
+          <var-decl name='exclude_hv' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='exclude_idle' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='55'>
+          <var-decl name='mmap' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='54'>
+          <var-decl name='comm' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='53'>
+          <var-decl name='freq' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='52'>
+          <var-decl name='inherit_stat' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='51'>
+          <var-decl name='enable_on_exec' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='50'>
+          <var-decl name='task' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='49'>
+          <var-decl name='watermark' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='47'>
+          <var-decl name='precise_ip' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='46'>
+          <var-decl name='mmap_data' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='45'>
+          <var-decl name='sample_id_all' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44'>
+          <var-decl name='exclude_host' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43'>
+          <var-decl name='exclude_guest' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='42'>
+          <var-decl name='exclude_callchain_kernel' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41'>
+          <var-decl name='exclude_callchain_user' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='mmap2' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='39'>
+          <var-decl name='comm_exec' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='38'>
+          <var-decl name='use_clockid' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='37'>
+          <var-decl name='context_switch' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='36'>
+          <var-decl name='write_backward' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='35'>
+          <var-decl name='namespaces' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='__reserved_1' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='bp_type' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/perf_event.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='branch_sample_type' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sample_regs_user' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='sample_stack_user' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/perf_event.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='clockid' type-id='type-id-653' visibility='default' filepath='include/uapi/linux/perf_event.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='sample_regs_intr' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='aux_watermark' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/perf_event.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='sample_max_stack' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/perf_event.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='880'>
+          <var-decl name='__reserved_2' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/perf_event.h' line='424' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__11' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/perf_event.h' line='327' column='1' id='type-id-703'>
+        <data-member access='private'>
+          <var-decl name='sample_period' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sample_freq' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='329' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='hw_perf_event' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='121' column='1' id='type-id-689'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='type-id-704' visibility='default' filepath='include/linux/perf_event.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='target' type-id='type-id-431' visibility='default' filepath='include/linux/perf_event.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='addr_filters' type-id='type-id-15' visibility='default' filepath='include/linux/perf_event.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='addr_filters_gen' type-id='type-id-16' visibility='default' filepath='include/linux/perf_event.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='state' type-id='type-id-17' visibility='default' filepath='include/linux/perf_event.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='prev_count' type-id='type-id-686' visibility='default' filepath='include/linux/perf_event.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='sample_period' type-id='type-id-40' visibility='default' filepath='include/linux/perf_event.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='last_period' type-id='type-id-40' visibility='default' filepath='include/linux/perf_event.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='period_left' type-id='type-id-686' visibility='default' filepath='include/linux/perf_event.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='interrupts_seq' type-id='type-id-40' visibility='default' filepath='include/linux/perf_event.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='interrupts' type-id='type-id-40' visibility='default' filepath='include/linux/perf_event.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='freq_time_stamp' type-id='type-id-40' visibility='default' filepath='include/linux/perf_event.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='freq_count_stamp' type-id='type-id-40' visibility='default' filepath='include/linux/perf_event.h' line='226' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__12' size-in-bits='768' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='123' column='1' id='type-id-704'>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__' size-in-bits='512' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='137' column='1' id='type-id-705'>
+            <data-member access='public' layout-offset-in-bits='0'>
+              <var-decl name='hrtimer' type-id='type-id-681' visibility='default' filepath='include/linux/perf_event.h' line='138' column='1'/>
+            </data-member>
+          </class-decl>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__1' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='140' column='1' id='type-id-706'>
+            <data-member access='public' layout-offset-in-bits='0'>
+              <var-decl name='tp_list' type-id='type-id-20' visibility='default' filepath='include/linux/perf_event.h' line='142' column='1'/>
+            </data-member>
+          </class-decl>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__2' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='144' column='1' id='type-id-707'>
+            <data-member access='public' layout-offset-in-bits='0'>
+              <var-decl name='pwr_acc' type-id='type-id-40' visibility='default' filepath='include/linux/perf_event.h' line='145' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='64'>
+              <var-decl name='ptsc' type-id='type-id-40' visibility='default' filepath='include/linux/perf_event.h' line='146' column='1'/>
+            </data-member>
+          </class-decl>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__3' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='149' column='1' id='type-id-708'>
+            <data-member access='public' layout-offset-in-bits='0'>
+              <var-decl name='info' type-id='type-id-709' visibility='default' filepath='include/linux/perf_event.h' line='155' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='192'>
+              <var-decl name='bp_list' type-id='type-id-20' visibility='default' filepath='include/linux/perf_event.h' line='156' column='1'/>
+            </data-member>
+          </class-decl>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__4' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='159' column='1' id='type-id-710'>
+            <data-member access='public' layout-offset-in-bits='0'>
+              <var-decl name='iommu_bank' type-id='type-id-214' visibility='default' filepath='include/linux/perf_event.h' line='160' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='8'>
+              <var-decl name='iommu_cntr' type-id='type-id-214' visibility='default' filepath='include/linux/perf_event.h' line='161' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='16'>
+              <var-decl name='padding' type-id='type-id-688' visibility='default' filepath='include/linux/perf_event.h' line='162' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='64'>
+              <var-decl name='conf' type-id='type-id-40' visibility='default' filepath='include/linux/perf_event.h' line='163' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='128'>
+              <var-decl name='conf1' type-id='type-id-40' visibility='default' filepath='include/linux/perf_event.h' line='164' column='1'/>
+            </data-member>
+          </class-decl>
+        </member-type>
+        <data-member access='private'>
+          <var-decl name='' type-id='type-id-711' visibility='default' filepath='include/linux/perf_event.h' line='124' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__15' size-in-bits='768' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='124' column='1' id='type-id-711'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='config' type-id='type-id-40' visibility='default' filepath='include/linux/perf_event.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='last_tag' type-id='type-id-40' visibility='default' filepath='include/linux/perf_event.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='config_base' type-id='type-id-16' visibility='default' filepath='include/linux/perf_event.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='event_base' type-id='type-id-16' visibility='default' filepath='include/linux/perf_event.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='event_base_rdpmc' type-id='type-id-17' visibility='default' filepath='include/linux/perf_event.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='idx' type-id='type-id-17' visibility='default' filepath='include/linux/perf_event.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='last_cpu' type-id='type-id-17' visibility='default' filepath='include/linux/perf_event.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='flags' type-id='type-id-17' visibility='default' filepath='include/linux/perf_event.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='extra_reg' type-id='type-id-712' visibility='default' filepath='include/linux/perf_event.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='branch_reg' type-id='type-id-712' visibility='default' filepath='include/linux/perf_event.h' line='135' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hw_perf_event_extra' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='111' column='1' id='type-id-712'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='config' type-id='type-id-40' visibility='default' filepath='include/linux/perf_event.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reg' type-id='type-id-5' visibility='default' filepath='include/linux/perf_event.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='alloc' type-id='type-id-17' visibility='default' filepath='include/linux/perf_event.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='idx' type-id='type-id-17' visibility='default' filepath='include/linux/perf_event.h' line='115' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='arch_hw_breakpoint' size-in-bits='192' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='34' column='1' id='type-id-709'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='address' type-id='type-id-40' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='trigger' type-id='type-id-40' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ctrl' type-id='type-id-713' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='arch_hw_breakpoint_ctrl' size-in-bits='32' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='26' column='1' id='type-id-713'>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='__reserved' type-id='type-id-7' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='len' type-id='type-id-7' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='type' type-id='type-id-7' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='privilege' type-id='type-id-7' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enabled' type-id='type-id-7' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_work' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/irq_work.h' line='24' column='1' id='type-id-690'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='include/linux/irq_work.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='llnode' type-id='type-id-281' visibility='default' filepath='include/linux/irq_work.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='func' type-id='type-id-714' visibility='default' filepath='include/linux/irq_work.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_addr_filters_head' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='492' column='1' id='type-id-691'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/perf_event.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='type-id-36' visibility='default' filepath='include/linux/perf_event.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='nr_file_filters' type-id='type-id-5' visibility='default' filepath='include/linux/perf_event.h' line='495' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_addr_filter_range' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='498' column='1' id='type-id-715'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='type-id-16' visibility='default' filepath='include/linux/perf_event.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='type-id-16' visibility='default' filepath='include/linux/perf_event.h' line='500' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='perf_overflow_handler_t' type-id='type-id-716' filepath='include/linux/perf_event.h' line='518' column='1' id='type-id-695'/>
+      <class-decl name='perf_sample_data' size-in-bits='4096' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='911' column='1' id='type-id-717'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='type-id-40' visibility='default' filepath='include/linux/perf_event.h' line='916' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='raw' type-id='type-id-718' visibility='default' filepath='include/linux/perf_event.h' line='917' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='br_stack' type-id='type-id-719' visibility='default' filepath='include/linux/perf_event.h' line='918' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='period' type-id='type-id-40' visibility='default' filepath='include/linux/perf_event.h' line='919' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='weight' type-id='type-id-40' visibility='default' filepath='include/linux/perf_event.h' line='920' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='txn' type-id='type-id-40' visibility='default' filepath='include/linux/perf_event.h' line='921' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='data_src' type-id='type-id-720' visibility='default' filepath='include/linux/perf_event.h' line='922' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='type' type-id='type-id-40' visibility='default' filepath='include/linux/perf_event.h' line='928' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ip' type-id='type-id-40' visibility='default' filepath='include/linux/perf_event.h' line='929' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='tid_entry' type-id='type-id-721' visibility='default' filepath='include/linux/perf_event.h' line='933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='time' type-id='type-id-40' visibility='default' filepath='include/linux/perf_event.h' line='934' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='id' type-id='type-id-40' visibility='default' filepath='include/linux/perf_event.h' line='935' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='stream_id' type-id='type-id-40' visibility='default' filepath='include/linux/perf_event.h' line='936' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='cpu_entry' type-id='type-id-722' visibility='default' filepath='include/linux/perf_event.h' line='940' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='callchain' type-id='type-id-723' visibility='default' filepath='include/linux/perf_event.h' line='941' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='regs_user' type-id='type-id-724' visibility='default' filepath='include/linux/perf_event.h' line='947' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='regs_user_copy' type-id='type-id-725' visibility='default' filepath='include/linux/perf_event.h' line='948' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='regs_intr' type-id='type-id-724' visibility='default' filepath='include/linux/perf_event.h' line='950' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='stack_user_size' type-id='type-id-40' visibility='default' filepath='include/linux/perf_event.h' line='951' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='phys_addr' type-id='type-id-40' visibility='default' filepath='include/linux/perf_event.h' line='953' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_raw_record' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='87' column='1' id='type-id-726'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='frag' type-id='type-id-727' visibility='default' filepath='include/linux/perf_event.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='size' type-id='type-id-7' visibility='default' filepath='include/linux/perf_event.h' line='89' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_raw_frag' size-in-bits='224' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='77' column='1' id='type-id-727'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='type-id-728' visibility='default' filepath='include/linux/perf_event.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='copy' type-id='type-id-729' visibility='default' filepath='include/linux/perf_event.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='type-id-15' visibility='default' filepath='include/linux/perf_event.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='size' type-id='type-id-7' visibility='default' filepath='include/linux/perf_event.h' line='84' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__13' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='78' column='1' id='type-id-728'>
+        <data-member access='private'>
+          <var-decl name='next' type-id='type-id-730' visibility='default' filepath='include/linux/perf_event.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='pad' type-id='type-id-16' visibility='default' filepath='include/linux/perf_event.h' line='80' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='perf_copy_f' type-id='type-id-731' filepath='include/linux/perf_event.h' line='74' column='1' id='type-id-729'/>
+      <class-decl name='perf_branch_stack' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='101' column='1' id='type-id-732'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nr' type-id='type-id-100' visibility='default' filepath='include/linux/perf_event.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='entries' type-id='type-id-208' visibility='default' filepath='include/linux/perf_event.h' line='103' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_branch_entry' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1118' column='1' id='type-id-207'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='from' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='to' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='63'>
+          <var-decl name='mispred' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='62'>
+          <var-decl name='predicted' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='61'>
+          <var-decl name='in_tx' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='60'>
+          <var-decl name='abort' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44'>
+          <var-decl name='cycles' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='type' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='reserved' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1127' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='perf_mem_data_src' size-in-bits='64' visibility='default' filepath='include/uapi/linux/perf_event.h' line='998' column='1' id='type-id-720'>
+        <data-member access='private'>
+          <var-decl name='val' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='999' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='type-id-733' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1000' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__16' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1000' column='1' id='type-id-733'>
+        <data-member access='public' layout-offset-in-bits='59'>
+          <var-decl name='mem_op' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1001' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='45'>
+          <var-decl name='mem_lvl' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1002' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='mem_snoop' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='38'>
+          <var-decl name='mem_lock' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1004' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='mem_dtlb' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1005' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='mem_lvl_num' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1006' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='mem_remote' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1007' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='mem_snoopx' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1008' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mem_rsvd' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1009' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__17' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='930' column='1' id='type-id-721'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pid' type-id='type-id-7' visibility='default' filepath='include/linux/perf_event.h' line='931' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tid' type-id='type-id-7' visibility='default' filepath='include/linux/perf_event.h' line='932' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__18' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='937' column='1' id='type-id-722'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cpu' type-id='type-id-7' visibility='default' filepath='include/linux/perf_event.h' line='938' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='reserved' type-id='type-id-7' visibility='default' filepath='include/linux/perf_event.h' line='939' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_callchain_entry' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='61' column='1' id='type-id-734'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nr' type-id='type-id-100' visibility='default' filepath='include/linux/perf_event.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ip' type-id='type-id-735' visibility='default' filepath='include/linux/perf_event.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_regs' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/perf_regs.h' line='7' column='1' id='type-id-724'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='abi' type-id='type-id-100' visibility='default' filepath='include/linux/perf_regs.h' line='8' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='regs' type-id='type-id-736' visibility='default' filepath='include/linux/perf_regs.h' line='9' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pt_regs' size-in-bits='2560' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='147' column='1' id='type-id-725'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='type-id-737' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='orig_x0' type-id='type-id-40' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='syscallno' type-id='type-id-738' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2272'>
+          <var-decl name='unused2' type-id='type-id-7' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='orig_addr_limit' type-id='type-id-40' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='unused' type-id='type-id-40' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='stackframe' type-id='type-id-739' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='168' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__14' size-in-bits='2176' is-anonymous='yes' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='148' column='1' id='type-id-737'>
+        <data-member access='private'>
+          <var-decl name='user_regs' type-id='type-id-740' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='type-id-741' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='150' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='user_pt_regs' size-in-bits='2176' is-struct='yes' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='71' column='1' id='type-id-740'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='regs' type-id='type-id-111' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='sp' type-id='type-id-100' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='pc' type-id='type-id-100' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='pstate' type-id='type-id-100' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='75' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__19' size-in-bits='2176' is-struct='yes' is-anonymous='yes' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='150' column='1' id='type-id-741'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='regs' type-id='type-id-212' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='sp' type-id='type-id-40' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='pc' type-id='type-id-40' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='pstate' type-id='type-id-40' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='154' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='trace_event_call' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/linux/trace_events.h' line='253' column='1' id='type-id-742'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/trace_events.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='class' type-id='type-id-743' visibility='default' filepath='include/linux/trace_events.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='type-id-744' visibility='default' filepath='include/linux/trace_events.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='event' type-id='type-id-745' visibility='default' filepath='include/linux/trace_events.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='print_fmt' type-id='type-id-2' visibility='default' filepath='include/linux/trace_events.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='filter' type-id='type-id-22' visibility='default' filepath='include/linux/trace_events.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mod' type-id='type-id-15' visibility='default' filepath='include/linux/trace_events.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='data' type-id='type-id-15' visibility='default' filepath='include/linux/trace_events.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='flags' type-id='type-id-17' visibility='default' filepath='include/linux/trace_events.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='perf_refcount' type-id='type-id-17' visibility='default' filepath='include/linux/trace_events.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='perf_events' type-id='type-id-746' visibility='default' filepath='include/linux/trace_events.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='prog_array' type-id='type-id-747' visibility='default' filepath='include/linux/trace_events.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='perf_perm' type-id='type-id-748' visibility='default' filepath='include/linux/trace_events.h' line='282' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='trace_event_class' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/trace_events.h' line='189' column='1' id='type-id-749'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='system' type-id='type-id-4' visibility='default' filepath='include/linux/trace_events.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='probe' type-id='type-id-15' visibility='default' filepath='include/linux/trace_events.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='perf_probe' type-id='type-id-15' visibility='default' filepath='include/linux/trace_events.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reg' type-id='type-id-750' visibility='default' filepath='include/linux/trace_events.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='define_fields' type-id='type-id-751' visibility='default' filepath='include/linux/trace_events.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_fields' type-id='type-id-752' visibility='default' filepath='include/linux/trace_events.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fields' type-id='type-id-20' visibility='default' filepath='include/linux/trace_events.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='raw_init' type-id='type-id-751' visibility='default' filepath='include/linux/trace_events.h' line='200' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='trace_reg' filepath='include/linux/trace_events.h' line='169' column='1' id='type-id-753'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='TRACE_REG_REGISTER' value='0'/>
+        <enumerator name='TRACE_REG_UNREGISTER' value='1'/>
+        <enumerator name='TRACE_REG_PERF_REGISTER' value='2'/>
+        <enumerator name='TRACE_REG_PERF_UNREGISTER' value='3'/>
+        <enumerator name='TRACE_REG_PERF_OPEN' value='4'/>
+        <enumerator name='TRACE_REG_PERF_CLOSE' value='5'/>
+        <enumerator name='TRACE_REG_PERF_ADD' value='6'/>
+        <enumerator name='TRACE_REG_PERF_DEL' value='7'/>
+      </enum-decl>
+      <class-decl name='trace_event' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/trace_events.h' line='124' column='1' id='type-id-745'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='type-id-520' visibility='default' filepath='include/linux/trace_events.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/trace_events.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='type' type-id='type-id-17' visibility='default' filepath='include/linux/trace_events.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='funcs' type-id='type-id-754' visibility='default' filepath='include/linux/trace_events.h' line='128' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='trace_event_functions' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/trace_events.h' line='117' column='1' id='type-id-755'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='trace' type-id='type-id-756' visibility='default' filepath='include/linux/trace_events.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='raw' type-id='type-id-756' visibility='default' filepath='include/linux/trace_events.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hex' type-id='type-id-756' visibility='default' filepath='include/linux/trace_events.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='binary' type-id='type-id-756' visibility='default' filepath='include/linux/trace_events.h' line='121' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='trace_print_func' type-id='type-id-757' filepath='include/linux/trace_events.h' line='114' column='1' id='type-id-756'/>
+      <enum-decl name='print_line_t' filepath='include/linux/trace_events.h' line='135' column='1' id='type-id-80'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='TRACE_TYPE_PARTIAL_LINE' value='0'/>
+        <enumerator name='TRACE_TYPE_HANDLED' value='1'/>
+        <enumerator name='TRACE_TYPE_UNHANDLED' value='2'/>
+        <enumerator name='TRACE_TYPE_NO_CONSUME' value='3'/>
+      </enum-decl>
+      <class-decl name='trace_iterator' size-in-bits='67456' is-struct='yes' visibility='default' filepath='include/linux/trace_events.h' line='74' column='1' id='type-id-758'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tr' type-id='type-id-759' visibility='default' filepath='include/linux/trace_events.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='trace' type-id='type-id-34' visibility='default' filepath='include/linux/trace_events.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='trace_buffer' type-id='type-id-760' visibility='default' filepath='include/linux/trace_events.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='private' type-id='type-id-15' visibility='default' filepath='include/linux/trace_events.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cpu_file' type-id='type-id-17' visibility='default' filepath='include/linux/trace_events.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mutex' type-id='type-id-245' visibility='default' filepath='include/linux/trace_events.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='buffer_iter' type-id='type-id-761' visibility='default' filepath='include/linux/trace_events.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='iter_flags' type-id='type-id-16' visibility='default' filepath='include/linux/trace_events.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='tmp_seq' type-id='type-id-67' visibility='default' filepath='include/linux/trace_events.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33792'>
+          <var-decl name='started' type-id='type-id-38' visibility='default' filepath='include/linux/trace_events.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33856'>
+          <var-decl name='snapshot' type-id='type-id-33' visibility='default' filepath='include/linux/trace_events.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33920'>
+          <var-decl name='seq' type-id='type-id-67' visibility='default' filepath='include/linux/trace_events.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='67008'>
+          <var-decl name='ent' type-id='type-id-762' visibility='default' filepath='include/linux/trace_events.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='67072'>
+          <var-decl name='lost_events' type-id='type-id-16' visibility='default' filepath='include/linux/trace_events.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='67136'>
+          <var-decl name='leftover' type-id='type-id-17' visibility='default' filepath='include/linux/trace_events.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='67168'>
+          <var-decl name='ent_size' type-id='type-id-17' visibility='default' filepath='include/linux/trace_events.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='67200'>
+          <var-decl name='cpu' type-id='type-id-17' visibility='default' filepath='include/linux/trace_events.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='67264'>
+          <var-decl name='ts' type-id='type-id-40' visibility='default' filepath='include/linux/trace_events.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='67328'>
+          <var-decl name='pos' type-id='type-id-763' visibility='default' filepath='include/linux/trace_events.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='67392'>
+          <var-decl name='idx' type-id='type-id-192' visibility='default' filepath='include/linux/trace_events.h' line='102' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='trace_seq' size-in-bits='33088' is-struct='yes' visibility='default' filepath='include/linux/trace_seq.h' line='14' column='1' id='type-id-67'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buffer' type-id='type-id-217' visibility='default' filepath='include/linux/trace_seq.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32768'>
+          <var-decl name='seq' type-id='type-id-764' visibility='default' filepath='include/linux/trace_seq.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33024'>
+          <var-decl name='full' type-id='type-id-17' visibility='default' filepath='include/linux/trace_seq.h' line='17' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='seq_buf' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/seq_buf.h' line='19' column='1' id='type-id-764'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buffer' type-id='type-id-2' visibility='default' filepath='include/linux/seq_buf.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='type-id-84' visibility='default' filepath='include/linux/seq_buf.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='len' type-id='type-id-84' visibility='default' filepath='include/linux/seq_buf.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='readpos' type-id='type-id-763' visibility='default' filepath='include/linux/seq_buf.h' line='23' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='cpumask_var_t' type-id='type-id-179' filepath='include/linux/cpumask.h' line='722' column='1' id='type-id-38'/>
+      <class-decl name='trace_entry' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/trace_events.h' line='60' column='1' id='type-id-765'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='type-id-312' visibility='default' filepath='include/linux/trace_events.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='flags' type-id='type-id-216' visibility='default' filepath='include/linux/trace_events.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='preempt_count' type-id='type-id-216' visibility='default' filepath='include/linux/trace_events.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pid' type-id='type-id-17' visibility='default' filepath='include/linux/trace_events.h' line='64' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_event_groups' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='716' column='1' id='type-id-662'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tree' type-id='type-id-416' visibility='default' filepath='include/linux/perf_event.h' line='717' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='index' type-id='type-id-40' visibility='default' filepath='include/linux/perf_event.h' line='718' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-336' size-in-bits='64' id='type-id-766'/>
+      <pointer-type-def type-id='type-id-149' size-in-bits='64' id='type-id-767'/>
+      <pointer-type-def type-id='type-id-129' size-in-bits='64' id='type-id-333'/>
+      <pointer-type-def type-id='type-id-150' size-in-bits='64' id='type-id-768'/>
+      <pointer-type-def type-id='type-id-413' size-in-bits='64' id='type-id-407'/>
+      <pointer-type-def type-id='type-id-151' size-in-bits='64' id='type-id-382'/>
+      <pointer-type-def type-id='type-id-406' size-in-bits='64' id='type-id-769'/>
+      <pointer-type-def type-id='type-id-420' size-in-bits='64' id='type-id-408'/>
+      <pointer-type-def type-id='type-id-359' size-in-bits='64' id='type-id-358'/>
+      <pointer-type-def type-id='type-id-657' size-in-bits='64' id='type-id-368'/>
+      <pointer-type-def type-id='type-id-656' size-in-bits='64' id='type-id-363'/>
+      <pointer-type-def type-id='type-id-357' size-in-bits='64' id='type-id-770'/>
+      <pointer-type-def type-id='type-id-497' size-in-bits='64' id='type-id-371'/>
+      <pointer-type-def type-id='type-id-131' size-in-bits='64' id='type-id-370'/>
+      <pointer-type-def type-id='type-id-152' size-in-bits='64' id='type-id-493'/>
+      <pointer-type-def type-id='type-id-153' size-in-bits='64' id='type-id-771'/>
+      <pointer-type-def type-id='type-id-154' size-in-bits='64' id='type-id-483'/>
+      <pointer-type-def type-id='type-id-156' size-in-bits='64' id='type-id-772'/>
+      <pointer-type-def type-id='type-id-772' size-in-bits='64' id='type-id-484'/>
+      <pointer-type-def type-id='type-id-158' size-in-bits='64' id='type-id-496'/>
+      <pointer-type-def type-id='type-id-159' size-in-bits='64' id='type-id-466'/>
+      <pointer-type-def type-id='type-id-642' size-in-bits='64' id='type-id-487'/>
+      <pointer-type-def type-id='type-id-160' size-in-bits='64' id='type-id-490'/>
+      <pointer-type-def type-id='type-id-523' size-in-bits='64' id='type-id-521'/>
+      <pointer-type-def type-id='type-id-519' size-in-bits='64' id='type-id-366'/>
+      <pointer-type-def type-id='type-id-524' size-in-bits='64' id='type-id-136'/>
+      <pointer-type-def type-id='type-id-525' size-in-bits='64' id='type-id-138'/>
+      <pointer-type-def type-id='type-id-161' size-in-bits='64' id='type-id-696'/>
+      <pointer-type-def type-id='type-id-162' size-in-bits='64' id='type-id-773'/>
+      <pointer-type-def type-id='type-id-646' size-in-bits='64' id='type-id-494'/>
+      <pointer-type-def type-id='type-id-266' size-in-bits='64' id='type-id-774'/>
+      <pointer-type-def type-id='type-id-774' size-in-bits='64' id='type-id-259'/>
+      <pointer-type-def type-id='type-id-775' size-in-bits='64' id='type-id-374'/>
+      <pointer-type-def type-id='type-id-419' size-in-bits='64' id='type-id-414'/>
+      <qualified-type-def type-id='type-id-155' const='yes' id='type-id-776'/>
+      <pointer-type-def type-id='type-id-776' size-in-bits='64' id='type-id-541'/>
+      <qualified-type-def type-id='type-id-157' const='yes' id='type-id-777'/>
+      <pointer-type-def type-id='type-id-777' size-in-bits='64' id='type-id-481'/>
+      <qualified-type-def type-id='type-id-395' const='yes' id='type-id-778'/>
+      <pointer-type-def type-id='type-id-778' size-in-bits='64' id='type-id-377'/>
+      <qualified-type-def type-id='type-id-648' const='yes' id='type-id-779'/>
+      <pointer-type-def type-id='type-id-779' size-in-bits='64' id='type-id-647'/>
+      <qualified-type-def type-id='type-id-169' const='yes' id='type-id-780'/>
+      <pointer-type-def type-id='type-id-780' size-in-bits='64' id='type-id-405'/>
+      <qualified-type-def type-id='type-id-290' const='yes' id='type-id-781'/>
+      <pointer-type-def type-id='type-id-781' size-in-bits='64' id='type-id-242'/>
+      <qualified-type-def type-id='type-id-288' const='yes' id='type-id-782'/>
+      <pointer-type-def type-id='type-id-782' size-in-bits='64' id='type-id-275'/>
+      <qualified-type-def type-id='type-id-283' const='yes' id='type-id-783'/>
+      <pointer-type-def type-id='type-id-783' size-in-bits='64' id='type-id-274'/>
+      <pointer-type-def type-id='type-id-163' size-in-bits='64' id='type-id-381'/>
+      <pointer-type-def type-id='type-id-384' size-in-bits='64' id='type-id-375'/>
+      <pointer-type-def type-id='type-id-394' size-in-bits='64' id='type-id-390'/>
+      <pointer-type-def type-id='type-id-636' size-in-bits='64' id='type-id-476'/>
+      <pointer-type-def type-id='type-id-580' size-in-bits='64' id='type-id-551'/>
+      <pointer-type-def type-id='type-id-579' size-in-bits='64' id='type-id-550'/>
+      <pointer-type-def type-id='type-id-571' size-in-bits='64' id='type-id-546'/>
+      <pointer-type-def type-id='type-id-573' size-in-bits='64' id='type-id-547'/>
+      <pointer-type-def type-id='type-id-575' size-in-bits='64' id='type-id-548'/>
+      <pointer-type-def type-id='type-id-582' size-in-bits='64' id='type-id-553'/>
+      <pointer-type-def type-id='type-id-581' size-in-bits='64' id='type-id-552'/>
+      <pointer-type-def type-id='type-id-577' size-in-bits='64' id='type-id-549'/>
+      <pointer-type-def type-id='type-id-597' size-in-bits='64' id='type-id-561'/>
+      <pointer-type-def type-id='type-id-587' size-in-bits='64' id='type-id-556'/>
+      <pointer-type-def type-id='type-id-595' size-in-bits='64' id='type-id-560'/>
+      <pointer-type-def type-id='type-id-586' size-in-bits='64' id='type-id-555'/>
+      <pointer-type-def type-id='type-id-593' size-in-bits='64' id='type-id-559'/>
+      <pointer-type-def type-id='type-id-564' size-in-bits='64' id='type-id-543'/>
+      <pointer-type-def type-id='type-id-569' size-in-bits='64' id='type-id-545'/>
+      <pointer-type-def type-id='type-id-567' size-in-bits='64' id='type-id-544'/>
+      <pointer-type-def type-id='type-id-591' size-in-bits='64' id='type-id-558'/>
+      <pointer-type-def type-id='type-id-535' size-in-bits='64' id='type-id-464'/>
+      <pointer-type-def type-id='type-id-599' size-in-bits='64' id='type-id-562'/>
+      <pointer-type-def type-id='type-id-584' size-in-bits='64' id='type-id-554'/>
+      <pointer-type-def type-id='type-id-589' size-in-bits='64' id='type-id-557'/>
+      <pointer-type-def type-id='type-id-537' size-in-bits='64' id='type-id-536'/>
+      <pointer-type-def type-id='type-id-618' size-in-bits='64' id='type-id-540'/>
+      <pointer-type-def type-id='type-id-784' size-in-bits='64' id='type-id-757'/>
+      <pointer-type-def type-id='type-id-164' size-in-bits='64' id='type-id-22'/>
+      <pointer-type-def type-id='type-id-165' size-in-bits='64' id='type-id-439'/>
+      <pointer-type-def type-id='type-id-641' size-in-bits='64' id='type-id-479'/>
+      <pointer-type-def type-id='type-id-332' size-in-bits='64' id='type-id-328'/>
+      <pointer-type-def type-id='type-id-372' size-in-bits='64' id='type-id-360'/>
+      <pointer-type-def type-id='type-id-166' size-in-bits='64' id='type-id-785'/>
+      <pointer-type-def type-id='type-id-376' size-in-bits='64' id='type-id-184'/>
+      <pointer-type-def type-id='type-id-640' size-in-bits='64' id='type-id-478'/>
+      <pointer-type-def type-id='type-id-786' size-in-bits='64' id='type-id-603'/>
+      <pointer-type-def type-id='type-id-787' size-in-bits='64' id='type-id-403'/>
+      <pointer-type-def type-id='type-id-788' size-in-bits='64' id='type-id-396'/>
+      <pointer-type-def type-id='type-id-789' size-in-bits='64' id='type-id-399'/>
+      <pointer-type-def type-id='type-id-790' size-in-bits='64' id='type-id-398'/>
+      <pointer-type-def type-id='type-id-791' size-in-bits='64' id='type-id-401'/>
+      <pointer-type-def type-id='type-id-792' size-in-bits='64' id='type-id-678'/>
+      <pointer-type-def type-id='type-id-793' size-in-bits='64' id='type-id-669'/>
+      <pointer-type-def type-id='type-id-794' size-in-bits='64' id='type-id-671'/>
+      <pointer-type-def type-id='type-id-795' size-in-bits='64' id='type-id-679'/>
+      <pointer-type-def type-id='type-id-796' size-in-bits='64' id='type-id-675'/>
+      <pointer-type-def type-id='type-id-797' size-in-bits='64' id='type-id-651'/>
+      <pointer-type-def type-id='type-id-798' size-in-bits='64' id='type-id-650'/>
+      <pointer-type-def type-id='type-id-594' size-in-bits='64' id='type-id-601'/>
+      <pointer-type-def type-id='type-id-799' size-in-bits='64' id='type-id-608'/>
+      <pointer-type-def type-id='type-id-800' size-in-bits='64' id='type-id-649'/>
+      <pointer-type-def type-id='type-id-801' size-in-bits='64' id='type-id-751'/>
+      <pointer-type-def type-id='type-id-802' size-in-bits='64' id='type-id-750'/>
+      <pointer-type-def type-id='type-id-803' size-in-bits='64' id='type-id-748'/>
+      <pointer-type-def type-id='type-id-804' size-in-bits='64' id='type-id-292'/>
+      <pointer-type-def type-id='type-id-805' size-in-bits='64' id='type-id-284'/>
+      <pointer-type-def type-id='type-id-806' size-in-bits='64' id='type-id-289'/>
+      <pointer-type-def type-id='type-id-807' size-in-bits='64' id='type-id-287'/>
+      <pointer-type-def type-id='type-id-808' size-in-bits='64' id='type-id-299'/>
+      <pointer-type-def type-id='type-id-809' size-in-bits='64' id='type-id-324'/>
+      <pointer-type-def type-id='type-id-810' size-in-bits='64' id='type-id-297'/>
+      <pointer-type-def type-id='type-id-811' size-in-bits='64' id='type-id-294'/>
+      <pointer-type-def type-id='type-id-812' size-in-bits='64' id='type-id-319'/>
+      <pointer-type-def type-id='type-id-813' size-in-bits='64' id='type-id-303'/>
+      <pointer-type-def type-id='type-id-814' size-in-bits='64' id='type-id-309'/>
+      <pointer-type-def type-id='type-id-815' size-in-bits='64' id='type-id-308'/>
+      <pointer-type-def type-id='type-id-816' size-in-bits='64' id='type-id-298'/>
+      <pointer-type-def type-id='type-id-817' size-in-bits='64' id='type-id-306'/>
+      <pointer-type-def type-id='type-id-818' size-in-bits='64' id='type-id-300'/>
+      <pointer-type-def type-id='type-id-819' size-in-bits='64' id='type-id-307'/>
+      <pointer-type-def type-id='type-id-690' size-in-bits='64' id='type-id-820'/>
+      <pointer-type-def type-id='type-id-167' size-in-bits='64' id='type-id-489'/>
+      <pointer-type-def type-id='type-id-248' size-in-bits='64' id='type-id-821'/>
+      <pointer-type-def type-id='type-id-821' size-in-bits='64' id='type-id-265'/>
+      <pointer-type-def type-id='type-id-822' size-in-bits='64' id='type-id-752'/>
+      <pointer-type-def type-id='type-id-638' size-in-bits='64' id='type-id-477'/>
+      <pointer-type-def type-id='type-id-823' size-in-bits='64' id='type-id-320'/>
+      <pointer-type-def type-id='type-id-824' size-in-bits='64' id='type-id-301'/>
+      <pointer-type-def type-id='type-id-460' size-in-bits='64' id='type-id-445'/>
+      <pointer-type-def type-id='type-id-624' size-in-bits='64' id='type-id-470'/>
+      <pointer-type-def type-id='type-id-423' size-in-bits='64' id='type-id-447'/>
+      <pointer-type-def type-id='type-id-443' size-in-bits='64' id='type-id-197'/>
+      <pointer-type-def type-id='type-id-441' size-in-bits='64' id='type-id-432'/>
+      <pointer-type-def type-id='type-id-438' size-in-bits='64' id='type-id-437'/>
+      <pointer-type-def type-id='type-id-461' size-in-bits='64' id='type-id-446'/>
+      <pointer-type-def type-id='type-id-532' size-in-bits='64' id='type-id-529'/>
+      <pointer-type-def type-id='type-id-534' size-in-bits='64' id='type-id-530'/>
+      <pointer-type-def type-id='type-id-527' size-in-bits='64' id='type-id-518'/>
+      <pointer-type-def type-id='type-id-168' size-in-bits='64' id='type-id-825'/>
+      <pointer-type-def type-id='type-id-426' size-in-bits='64' id='type-id-435'/>
+      <pointer-type-def type-id='type-id-393' size-in-bits='64' id='type-id-389'/>
+      <pointer-type-def type-id='type-id-459' size-in-bits='64' id='type-id-453'/>
+      <pointer-type-def type-id='type-id-455' size-in-bits='64' id='type-id-454'/>
+      <pointer-type-def type-id='type-id-715' size-in-bits='64' id='type-id-692'/>
+      <pointer-type-def type-id='type-id-732' size-in-bits='64' id='type-id-719'/>
+      <pointer-type-def type-id='type-id-734' size-in-bits='64' id='type-id-723'/>
+      <pointer-type-def type-id='type-id-680' size-in-bits='64' id='type-id-667'/>
+      <pointer-type-def type-id='type-id-683' size-in-bits='64' id='type-id-684'/>
+      <pointer-type-def type-id='type-id-660' size-in-bits='64' id='type-id-663'/>
+      <pointer-type-def type-id='type-id-727' size-in-bits='64' id='type-id-730'/>
+      <pointer-type-def type-id='type-id-726' size-in-bits='64' id='type-id-718'/>
+      <pointer-type-def type-id='type-id-717' size-in-bits='64' id='type-id-826'/>
+      <pointer-type-def type-id='type-id-450' size-in-bits='64' id='type-id-449'/>
+      <pointer-type-def type-id='type-id-664' size-in-bits='64' id='type-id-661'/>
+      <pointer-type-def type-id='type-id-627' size-in-bits='64' id='type-id-471'/>
+      <pointer-type-def type-id='type-id-629' size-in-bits='64' id='type-id-472'/>
+      <pointer-type-def type-id='type-id-725' size-in-bits='64' id='type-id-736'/>
+      <pointer-type-def type-id='type-id-499' size-in-bits='64' id='type-id-463'/>
+      <pointer-type-def type-id='type-id-827' size-in-bits='64' id='type-id-614'/>
+      <pointer-type-def type-id='type-id-583' size-in-bits='64' id='type-id-616'/>
+      <pointer-type-def type-id='type-id-463' size-in-bits='64' id='type-id-643'/>
+      <pointer-type-def type-id='type-id-622' size-in-bits='64' id='type-id-469'/>
+      <pointer-type-def type-id='type-id-468' size-in-bits='64' id='type-id-510'/>
+      <pointer-type-def type-id='type-id-462' size-in-bits='64' id='type-id-378'/>
+      <pointer-type-def type-id='type-id-170' size-in-bits='64' id='type-id-12'/>
+      <pointer-type-def type-id='type-id-171' size-in-bits='64' id='type-id-828'/>
+      <pointer-type-def type-id='type-id-828' size-in-bits='64' id='type-id-761'/>
+      <pointer-type-def type-id='type-id-515' size-in-bits='64' id='type-id-509'/>
+      <pointer-type-def type-id='type-id-172' size-in-bits='64' id='type-id-467'/>
+      <pointer-type-def type-id='type-id-633' size-in-bits='64' id='type-id-475'/>
+      <pointer-type-def type-id='type-id-173' size-in-bits='64' id='type-id-829'/>
+      <pointer-type-def type-id='type-id-652' size-in-bits='64' id='type-id-830'/>
+      <pointer-type-def type-id='type-id-631' size-in-bits='64' id='type-id-474'/>
+      <pointer-type-def type-id='type-id-313' size-in-bits='64' id='type-id-249'/>
+      <pointer-type-def type-id='type-id-174' size-in-bits='64' id='type-id-380'/>
+      <pointer-type-def type-id='type-id-175' size-in-bits='64' id='type-id-759'/>
+      <pointer-type-def type-id='type-id-30' size-in-bits='64' id='type-id-760'/>
+      <pointer-type-def type-id='type-id-765' size-in-bits='64' id='type-id-762'/>
+      <pointer-type-def type-id='type-id-745' size-in-bits='64' id='type-id-831'/>
+      <pointer-type-def type-id='type-id-742' size-in-bits='64' id='type-id-21'/>
+      <pointer-type-def type-id='type-id-749' size-in-bits='64' id='type-id-743'/>
+      <pointer-type-def type-id='type-id-755' size-in-bits='64' id='type-id-754'/>
+      <pointer-type-def type-id='type-id-758' size-in-bits='64' id='type-id-82'/>
+      <pointer-type-def type-id='type-id-176' size-in-bits='64' id='type-id-34'/>
+      <pointer-type-def type-id='type-id-277' size-in-bits='64' id='type-id-276'/>
+      <pointer-type-def type-id='type-id-258' size-in-bits='64' id='type-id-241'/>
+      <pointer-type-def type-id='type-id-314' size-in-bits='64' id='type-id-244'/>
+      <pointer-type-def type-id='type-id-316' size-in-bits='64' id='type-id-315'/>
+      <pointer-type-def type-id='type-id-272' size-in-bits='64' id='type-id-257'/>
+      <pointer-type-def type-id='type-id-257' size-in-bits='64' id='type-id-264'/>
+      <pointer-type-def type-id='type-id-238' size-in-bits='64' id='type-id-253'/>
+      <pointer-type-def type-id='type-id-832' size-in-bits='64' id='type-id-291'/>
+      <pointer-type-def type-id='type-id-253' size-in-bits='64' id='type-id-263'/>
+      <pointer-type-def type-id='type-id-833' size-in-bits='64' id='type-id-321'/>
+      <pointer-type-def type-id='type-id-834' size-in-bits='64' id='type-id-615'/>
+      <pointer-type-def type-id='type-id-835' size-in-bits='64' id='type-id-607'/>
+      <pointer-type-def type-id='type-id-836' size-in-bits='64' id='type-id-606'/>
+      <pointer-type-def type-id='type-id-837' size-in-bits='64' id='type-id-620'/>
+      <pointer-type-def type-id='type-id-838' size-in-bits='64' id='type-id-621'/>
+      <pointer-type-def type-id='type-id-839' size-in-bits='64' id='type-id-318'/>
+      <pointer-type-def type-id='type-id-840' size-in-bits='64' id='type-id-317'/>
+      <pointer-type-def type-id='type-id-841' size-in-bits='64' id='type-id-694'/>
+      <pointer-type-def type-id='type-id-630' size-in-bits='64' id='type-id-473'/>
+      <pointer-type-def type-id='type-id-842' size-in-bits='64' id='type-id-400'/>
+      <pointer-type-def type-id='type-id-843' size-in-bits='64' id='type-id-731'/>
+      <pointer-type-def type-id='type-id-844' size-in-bits='64' id='type-id-605'/>
+      <pointer-type-def type-id='type-id-845' size-in-bits='64' id='type-id-613'/>
+      <pointer-type-def type-id='type-id-846' size-in-bits='64' id='type-id-604'/>
+      <pointer-type-def type-id='type-id-847' size-in-bits='64' id='type-id-404'/>
+      <pointer-type-def type-id='type-id-596' size-in-bits='64' id='type-id-602'/>
+      <pointer-type-def type-id='type-id-848' size-in-bits='64' id='type-id-325'/>
+      <pointer-type-def type-id='type-id-849' size-in-bits='64' id='type-id-402'/>
+      <pointer-type-def type-id='type-id-850' size-in-bits='64' id='type-id-397'/>
+      <pointer-type-def type-id='type-id-585' size-in-bits='64' id='type-id-617'/>
+      <pointer-type-def type-id='type-id-851' size-in-bits='64' id='type-id-714'/>
+      <pointer-type-def type-id='type-id-852' size-in-bits='64' id='type-id-673'/>
+      <pointer-type-def type-id='type-id-853' size-in-bits='64' id='type-id-672'/>
+      <pointer-type-def type-id='type-id-854' size-in-bits='64' id='type-id-670'/>
+      <pointer-type-def type-id='type-id-855' size-in-bits='64' id='type-id-716'/>
+      <pointer-type-def type-id='type-id-856' size-in-bits='64' id='type-id-676'/>
+      <pointer-type-def type-id='type-id-857' size-in-bits='64' id='type-id-668'/>
+      <pointer-type-def type-id='type-id-858' size-in-bits='64' id='type-id-674'/>
+      <pointer-type-def type-id='type-id-590' size-in-bits='64' id='type-id-480'/>
+      <pointer-type-def type-id='type-id-859' size-in-bits='64' id='type-id-612'/>
+      <pointer-type-def type-id='type-id-566' size-in-bits='64' id='type-id-609'/>
+      <pointer-type-def type-id='type-id-568' size-in-bits='64' id='type-id-610'/>
+      <pointer-type-def type-id='type-id-860' size-in-bits='64' id='type-id-293'/>
+      <pointer-type-def type-id='type-id-861' size-in-bits='64' id='type-id-286'/>
+      <pointer-type-def type-id='type-id-862' size-in-bits='64' id='type-id-285'/>
+      <pointer-type-def type-id='type-id-863' size-in-bits='64' id='type-id-296'/>
+      <pointer-type-def type-id='type-id-864' size-in-bits='64' id='type-id-305'/>
+      <pointer-type-def type-id='type-id-865' size-in-bits='64' id='type-id-322'/>
+      <pointer-type-def type-id='type-id-866' size-in-bits='64' id='type-id-295'/>
+      <pointer-type-def type-id='type-id-867' size-in-bits='64' id='type-id-304'/>
+      <pointer-type-def type-id='type-id-868' size-in-bits='64' id='type-id-302'/>
+      <pointer-type-def type-id='type-id-869' size-in-bits='64' id='type-id-310'/>
+      <pointer-type-def type-id='type-id-870' size-in-bits='64' id='type-id-323'/>
+      <pointer-type-def type-id='type-id-871' size-in-bits='64' id='type-id-611'/>
+      <pointer-type-def type-id='type-id-872' size-in-bits='64' id='type-id-677'/>
+      <pointer-type-def type-id='type-id-252' size-in-bits='64' id='type-id-873'/>
+      <pointer-type-def type-id='type-id-227' size-in-bits='64' id='type-id-458'/>
+      <function-decl name='send_sig' mangled-name='send_sig' filepath='kernel/signal.c' line='1548' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='send_sig'>
+        <parameter type-id='type-id-17' name='sig' filepath='kernel/signal.c' line='1548' column='1'/>
+        <parameter type-id='type-id-431' name='p' filepath='kernel/signal.c' line='1548' column='1'/>
+        <parameter type-id='type-id-17' name='priv' filepath='kernel/signal.c' line='1548' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-775'>
+        <parameter type-id='type-id-360'/>
+        <parameter type-id='type-id-874'/>
+        <return type-id='type-id-2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-632'>
+        <parameter type-id='type-id-463'/>
+        <return type-id='type-id-634'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-563'>
+        <parameter type-id='type-id-378'/>
+        <parameter type-id='type-id-643'/>
+        <parameter type-id='type-id-358'/>
+        <return type-id='type-id-565'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-784'>
+        <parameter type-id='type-id-82'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-831'/>
+        <return type-id='type-id-80'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-786'>
+        <parameter type-id='type-id-772'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-787'>
+        <parameter type-id='type-id-875'/>
+        <parameter type-id='type-id-785'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-788'>
+        <parameter type-id='type-id-875'/>
+        <parameter type-id='type-id-876'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-789'>
+        <parameter type-id='type-id-875'/>
+        <parameter type-id='type-id-876'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-790'>
+        <parameter type-id='type-id-875'/>
+        <parameter type-id='type-id-386'/>
+        <parameter type-id='type-id-512'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-645'>
+        <parameter type-id='type-id-773'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-791'>
+        <parameter type-id='type-id-360'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-792'>
+        <parameter type-id='type-id-877'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-793'>
+        <parameter type-id='type-id-684'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-794'>
+        <parameter type-id='type-id-684'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-795'>
+        <parameter type-id='type-id-684'/>
+        <parameter type-id='type-id-40'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-796'>
+        <parameter type-id='type-id-661'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-635'>
+        <parameter type-id='type-id-463'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-797'>
+        <parameter type-id='type-id-463'/>
+        <parameter type-id='type-id-830'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-798'>
+        <parameter type-id='type-id-463'/>
+        <parameter type-id='type-id-830'/>
+        <parameter type-id='type-id-876'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-637'>
+        <parameter type-id='type-id-378'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-594'>
+        <parameter type-id='type-id-378'/>
+        <parameter type-id='type-id-536'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-576'>
+        <parameter type-id='type-id-378'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-628'>
+        <parameter type-id='type-id-378'/>
+        <parameter type-id='type-id-463'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-799'>
+        <parameter type-id='type-id-378'/>
+        <parameter type-id='type-id-643'/>
+        <parameter type-id='type-id-358'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-570'>
+        <parameter type-id='type-id-378'/>
+        <parameter type-id='type-id-463'/>
+        <parameter type-id='type-id-358'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-588'>
+        <parameter type-id='type-id-378'/>
+        <parameter type-id='type-id-463'/>
+        <parameter type-id='type-id-358'/>
+        <parameter type-id='type-id-485'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-572'>
+        <parameter type-id='type-id-378'/>
+        <parameter type-id='type-id-463'/>
+        <parameter type-id='type-id-463'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-639'>
+        <parameter type-id='type-id-378'/>
+        <parameter type-id='type-id-463'/>
+        <parameter type-id='type-id-485'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-592'>
+        <parameter type-id='type-id-378'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-800'>
+        <parameter type-id='type-id-830'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-801'>
+        <parameter type-id='type-id-21'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-802'>
+        <parameter type-id='type-id-21'/>
+        <parameter type-id='type-id-753'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-803'>
+        <parameter type-id='type-id-21'/>
+        <parameter type-id='type-id-684'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-804'>
+        <parameter type-id='type-id-241'/>
+        <parameter type-id='type-id-253'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-805'>
+        <parameter type-id='type-id-257'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-806'>
+        <parameter type-id='type-id-257'/>
+        <parameter type-id='type-id-878'/>
+        <parameter type-id='type-id-878'/>
+        <parameter type-id='type-id-84'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-807'>
+        <parameter type-id='type-id-257'/>
+        <parameter type-id='type-id-253'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-808'>
+        <parameter type-id='type-id-253'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-809'>
+        <parameter type-id='type-id-253'/>
+        <parameter type-id='type-id-878'/>
+        <parameter type-id='type-id-2'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-810'>
+        <parameter type-id='type-id-253'/>
+        <parameter type-id='type-id-878'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-811'>
+        <parameter type-id='type-id-253'/>
+        <parameter type-id='type-id-83'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-812'>
+        <parameter type-id='type-id-253'/>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-813'>
+        <parameter type-id='type-id-253'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-814'>
+        <parameter type-id='type-id-253'/>
+        <parameter type-id='type-id-829'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-815'>
+        <parameter type-id='type-id-253'/>
+        <parameter type-id='type-id-249'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-816'>
+        <parameter type-id='type-id-253'/>
+        <parameter type-id='type-id-216'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-817'>
+        <parameter type-id='type-id-253'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-818'>
+        <parameter type-id='type-id-253'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-819'>
+        <parameter type-id='type-id-253'/>
+        <parameter type-id='type-id-873'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-418'>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-822'>
+        <parameter type-id='type-id-21'/>
+        <return type-id='type-id-877'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-823'>
+        <parameter type-id='type-id-253'/>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-192'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-824'>
+        <parameter type-id='type-id-253'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-192'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-827'>
+        <parameter type-id='type-id-772'/>
+        <return type-id='type-id-463'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-583'>
+        <parameter type-id='type-id-378'/>
+        <parameter type-id='type-id-463'/>
+        <return type-id='type-id-463'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-832'>
+        <parameter type-id='type-id-241'/>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-253'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-833'>
+        <parameter type-id='type-id-253'/>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-879'/>
+        <return type-id='type-id-880'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-623'>
+        <parameter type-id='type-id-378'/>
+        <parameter type-id='type-id-358'/>
+        <return type-id='type-id-625'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-834'>
+        <parameter type-id='type-id-772'/>
+        <return type-id='type-id-33'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-835'>
+        <parameter type-id='type-id-772'/>
+        <parameter type-id='type-id-358'/>
+        <return type-id='type-id-33'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-836'>
+        <parameter type-id='type-id-378'/>
+        <parameter type-id='type-id-463'/>
+        <parameter type-id='type-id-358'/>
+        <return type-id='type-id-33'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-626'>
+        <parameter type-id='type-id-378'/>
+        <parameter type-id='type-id-625'/>
+        <return type-id='type-id-33'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-837'>
+        <parameter type-id='type-id-464'/>
+        <parameter type-id='type-id-2'/>
+        <return type-id='type-id-86'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-838'>
+        <parameter type-id='type-id-464'/>
+        <parameter type-id='type-id-4'/>
+        <parameter type-id='type-id-84'/>
+        <return type-id='type-id-86'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-839'>
+        <parameter type-id='type-id-253'/>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-878'/>
+        <parameter type-id='type-id-84'/>
+        <return type-id='type-id-86'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-840'>
+        <parameter type-id='type-id-253'/>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-256'/>
+        <parameter type-id='type-id-84'/>
+        <return type-id='type-id-86'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-841'>
+        <return type-id='type-id-40'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-842'>
+        <parameter type-id='type-id-360'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-5'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-843'>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-16'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-16'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-655'>
+        <parameter type-id='type-id-358'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-844'>
+        <parameter type-id='type-id-772'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-845'>
+        <parameter type-id='type-id-772'/>
+        <parameter type-id='type-id-877'/>
+        <parameter type-id='type-id-33'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-846'>
+        <parameter type-id='type-id-772'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-847'>
+        <parameter type-id='type-id-875'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-596'>
+        <parameter type-id='type-id-464'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-848'>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-881'/>
+        <parameter type-id='type-id-879'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-849'>
+        <parameter type-id='type-id-360'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-850'>
+        <parameter type-id='type-id-360'/>
+        <parameter type-id='type-id-876'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-585'>
+        <parameter type-id='type-id-513'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-851'>
+        <parameter type-id='type-id-820'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-852'>
+        <parameter type-id='type-id-684'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-853'>
+        <parameter type-id='type-id-684'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-854'>
+        <parameter type-id='type-id-684'/>
+        <parameter type-id='type-id-882'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-855'>
+        <parameter type-id='type-id-684'/>
+        <parameter type-id='type-id-826'/>
+        <parameter type-id='type-id-736'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-856'>
+        <parameter type-id='type-id-663'/>
+        <parameter type-id='type-id-33'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-857'>
+        <parameter type-id='type-id-661'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-858'>
+        <parameter type-id='type-id-661'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-590'>
+        <parameter type-id='type-id-463'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-859'>
+        <parameter type-id='type-id-463'/>
+        <parameter type-id='type-id-358'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-514'>
+        <parameter type-id='type-id-463'/>
+        <parameter type-id='type-id-361'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-598'>
+        <parameter type-id='type-id-378'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-578'>
+        <parameter type-id='type-id-378'/>
+        <parameter type-id='type-id-463'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-574'>
+        <parameter type-id='type-id-378'/>
+        <parameter type-id='type-id-463'/>
+        <parameter type-id='type-id-358'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-566'>
+        <parameter type-id='type-id-378'/>
+        <parameter type-id='type-id-463'/>
+        <parameter type-id='type-id-565'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-568'>
+        <parameter type-id='type-id-378'/>
+        <parameter type-id='type-id-463'/>
+        <parameter type-id='type-id-463'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-860'>
+        <parameter type-id='type-id-241'/>
+        <parameter type-id='type-id-253'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-861'>
+        <parameter type-id='type-id-257'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-862'>
+        <parameter type-id='type-id-257'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-863'>
+        <parameter type-id='type-id-253'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-864'>
+        <parameter type-id='type-id-253'/>
+        <parameter type-id='type-id-1'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-865'>
+        <parameter type-id='type-id-253'/>
+        <parameter type-id='type-id-878'/>
+        <parameter type-id='type-id-2'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-866'>
+        <parameter type-id='type-id-253'/>
+        <parameter type-id='type-id-83'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-867'>
+        <parameter type-id='type-id-253'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-868'>
+        <parameter type-id='type-id-253'/>
+        <parameter type-id='type-id-821'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-869'>
+        <parameter type-id='type-id-253'/>
+        <parameter type-id='type-id-88'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-870'>
+        <parameter type-id='type-id-253'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-871'>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-771'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-533'>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-872'>
+        <parameter type-id='type-id-684'/>
+        <parameter type-id='type-id-528'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-33'/>
+        <return type-id='type-id-15'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-531'>
+        <parameter type-id='type-id-485'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-15'/>
+      </function-type>
+      <union-decl name='__anonymous_union__15' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/trace_events.h' line='256' column='1' id='type-id-744'>
+        <data-member access='private'>
+          <var-decl name='name' type-id='type-id-2' visibility='default' filepath='include/linux/trace_events.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='tp' type-id='type-id-883' visibility='default' filepath='include/linux/trace_events.h' line='259' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__9' size-in-bits='1472' is-anonymous='yes' visibility='default' filepath='include/linux/elevator.h' line='141' column='1' id='type-id-539'>
+        <data-member access='private'>
+          <var-decl name='sq' type-id='type-id-542' visibility='default' filepath='include/linux/elevator.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='mq' type-id='type-id-600' visibility='default' filepath='include/linux/elevator.h' line='143' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__7' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='178' column='1' id='type-id-507'>
+        <data-member access='private'>
+          <var-decl name='hash' type-id='type-id-520' visibility='default' filepath='include/linux/blkdev.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ipi_list' type-id='type-id-20' visibility='default' filepath='include/linux/blkdev.h' line='180' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__5' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/backing-dev-defs.h' line='160' column='1' id='type-id-412'>
+        <data-member access='private'>
+          <var-decl name='release_work' type-id='type-id-255' visibility='default' filepath='include/linux/backing-dev-defs.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/linux/backing-dev-defs.h' line='162' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__10' is-anonymous='yes' visibility='default' filepath='include/linux/blk_types.h' line='191' column='1' id='type-id-369'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/locking/spinlock.c' language='LANG_C89'>
+      <pointer-type-def type-id='type-id-36' size-in-bits='64' id='type-id-884'/>
+      <pointer-type-def type-id='type-id-885' size-in-bits='64' id='type-id-886'/>
+      <function-decl name='_raw_spin_trylock' mangled-name='_raw_spin_trylock' filepath='kernel/locking/spinlock.c' line='126' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_spin_trylock'>
+        <parameter type-id='type-id-884' name='lock' filepath='kernel/locking/spinlock.c' line='126' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='_raw_spin_lock' mangled-name='_raw_spin_lock' filepath='kernel/locking/spinlock.c' line='142' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_spin_lock'>
+        <parameter type-id='type-id-884' name='lock' filepath='kernel/locking/spinlock.c' line='142' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='_raw_spin_lock_irqsave' mangled-name='_raw_spin_lock_irqsave' filepath='kernel/locking/spinlock.c' line='150' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_spin_lock_irqsave'>
+        <parameter type-id='type-id-884' name='lock' filepath='kernel/locking/spinlock.c' line='150' column='1'/>
+        <return type-id='type-id-16'/>
+      </function-decl>
+      <function-decl name='_raw_spin_lock_irq' mangled-name='_raw_spin_lock_irq' filepath='kernel/locking/spinlock.c' line='158' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_spin_lock_irq'>
+        <parameter type-id='type-id-884' name='lock' filepath='kernel/locking/spinlock.c' line='158' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='_raw_spin_lock_bh' mangled-name='_raw_spin_lock_bh' filepath='kernel/locking/spinlock.c' line='166' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_spin_lock_bh'>
+        <parameter type-id='type-id-884' name='lock' filepath='kernel/locking/spinlock.c' line='166' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='_raw_spin_unlock' mangled-name='_raw_spin_unlock' filepath='kernel/locking/spinlock.c' line='174' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_spin_unlock'>
+        <parameter type-id='type-id-884' name='lock' filepath='kernel/locking/spinlock.c' line='174' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='_raw_spin_unlock_irqrestore' mangled-name='_raw_spin_unlock_irqrestore' filepath='kernel/locking/spinlock.c' line='182' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_spin_unlock_irqrestore'>
+        <parameter type-id='type-id-884' name='lock' filepath='kernel/locking/spinlock.c' line='182' column='1'/>
+        <parameter type-id='type-id-16' name='flags' filepath='kernel/locking/spinlock.c' line='182' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='_raw_spin_unlock_irq' mangled-name='_raw_spin_unlock_irq' filepath='kernel/locking/spinlock.c' line='190' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_spin_unlock_irq'>
+        <parameter type-id='type-id-884' name='lock' filepath='kernel/locking/spinlock.c' line='190' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='_raw_spin_unlock_bh' mangled-name='_raw_spin_unlock_bh' filepath='kernel/locking/spinlock.c' line='198' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_spin_unlock_bh'>
+        <parameter type-id='type-id-884' name='lock' filepath='kernel/locking/spinlock.c' line='198' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='_raw_read_lock' mangled-name='_raw_read_lock' filepath='kernel/locking/spinlock.c' line='214' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_read_lock'>
+        <parameter type-id='type-id-886' name='lock' filepath='kernel/locking/spinlock.c' line='214' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='_raw_read_unlock' mangled-name='_raw_read_unlock' filepath='kernel/locking/spinlock.c' line='246' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_read_unlock'>
+        <parameter type-id='type-id-886' name='lock' filepath='kernel/locking/spinlock.c' line='246' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='_raw_write_lock_bh' mangled-name='_raw_write_lock_bh' filepath='kernel/locking/spinlock.c' line='310' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_write_lock_bh'>
+        <parameter type-id='type-id-886' name='lock' filepath='kernel/locking/spinlock.c' line='310' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='_raw_write_unlock_bh' mangled-name='_raw_write_unlock_bh' filepath='kernel/locking/spinlock.c' line='342' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_write_unlock_bh'>
+        <parameter type-id='type-id-886' name='lock' filepath='kernel/locking/spinlock.c' line='342' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/panic.c' language='LANG_C89'>
+      <function-decl name='panic' mangled-name='panic' filepath='kernel/panic.c' line='136' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='panic'>
+        <parameter type-id='type-id-4' name='fmt' filepath='kernel/panic.c' line='136' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='__warn_printk' mangled-name='__warn_printk' filepath='kernel/panic.c' line='591' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__warn_printk'>
+        <parameter type-id='type-id-4' name='fmt' filepath='kernel/panic.c' line='591' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='__stack_chk_fail' mangled-name='__stack_chk_fail' filepath='kernel/panic.c' line='637' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__stack_chk_fail'>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/kernel/io.c' language='LANG_C89'>
+      <type-decl name='int' size-in-bits='32' id='type-id-17'/>
+      <type-decl name='unsigned long int' size-in-bits='64' id='type-id-16'/>
+      <type-decl name='void' id='type-id-81'/>
+      <typedef-decl name='size_t' type-id='type-id-887' filepath='include/linux/types.h' line='55' column='1' id='type-id-84'/>
+      <typedef-decl name='__kernel_size_t' type-id='type-id-888' filepath='include/uapi/asm-generic/posix_types.h' line='72' column='1' id='type-id-887'/>
+      <typedef-decl name='__kernel_ulong_t' type-id='type-id-16' filepath='include/uapi/asm-generic/posix_types.h' line='16' column='1' id='type-id-888'/>
+      <qualified-type-def type-id='type-id-889' const='yes' id='type-id-890'/>
+      <pointer-type-def type-id='type-id-890' size-in-bits='64' id='type-id-891'/>
+      <pointer-type-def type-id='type-id-81' size-in-bits='64' id='type-id-15'/>
+      <qualified-type-def type-id='type-id-81' volatile='yes' id='type-id-889'/>
+      <pointer-type-def type-id='type-id-889' size-in-bits='64' id='type-id-104'/>
+      <function-decl name='__memcpy_fromio' mangled-name='__memcpy_fromio' filepath='arch/arm64/kernel/io.c' line='26' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__memcpy_fromio'>
+        <parameter type-id='type-id-15' name='to' filepath='arch/arm64/kernel/io.c' line='26' column='1'/>
+        <parameter type-id='type-id-891' name='from' filepath='arch/arm64/kernel/io.c' line='26' column='1'/>
+        <parameter type-id='type-id-84' name='count' filepath='arch/arm64/kernel/io.c' line='26' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='__memcpy_toio' mangled-name='__memcpy_toio' filepath='arch/arm64/kernel/io.c' line='54' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__memcpy_toio'>
+        <parameter type-id='type-id-104' name='to' filepath='arch/arm64/kernel/io.c' line='54' column='1'/>
+        <parameter type-id='type-id-15' name='from' filepath='arch/arm64/kernel/io.c' line='54' column='1'/>
+        <parameter type-id='type-id-84' name='count' filepath='arch/arm64/kernel/io.c' line='54' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='__memset_io' mangled-name='__memset_io' filepath='arch/arm64/kernel/io.c' line='82' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__memset_io'>
+        <parameter type-id='type-id-104' name='dst' filepath='arch/arm64/kernel/io.c' line='82' column='1'/>
+        <parameter type-id='type-id-17' name='c' filepath='arch/arm64/kernel/io.c' line='82' column='1'/>
+        <parameter type-id='type-id-84' name='count' filepath='arch/arm64/kernel/io.c' line='82' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/mmap.c' language='LANG_C89'>
+      <function-decl name='vm_get_page_prot' mangled-name='vm_get_page_prot' filepath='mm/mmap.c' line='105' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vm_get_page_prot'>
+        <parameter type-id='type-id-16' name='vm_flags' filepath='mm/mmap.c' line='105' column='1'/>
+        <return type-id='type-id-102'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/time/time.c' language='LANG_C89'>
+      <function-decl name='jiffies_to_msecs' mangled-name='jiffies_to_msecs' filepath='kernel/time/time.c' line='311' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='jiffies_to_msecs'>
+        <parameter type-id='type-id-892' name='j' filepath='kernel/time/time.c' line='311' column='1'/>
+        <return type-id='type-id-5'/>
+      </function-decl>
+      <function-decl name='__msecs_to_jiffies' mangled-name='__msecs_to_jiffies' filepath='kernel/time/time.c' line='589' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__msecs_to_jiffies'>
+        <parameter type-id='type-id-893' name='m' filepath='kernel/time/time.c' line='589' column='1'/>
+        <return type-id='type-id-16'/>
+      </function-decl>
+      <function-decl name='nsecs_to_jiffies' mangled-name='nsecs_to_jiffies' filepath='kernel/time/time.c' line='829' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nsecs_to_jiffies'>
+        <parameter type-id='type-id-40' name='n' filepath='kernel/time/time.c' line='829' column='1'/>
+        <return type-id='type-id-16'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/sysfs/group.c' language='LANG_C89'>
+      <function-decl name='sysfs_create_group' mangled-name='sysfs_create_group' filepath='fs/sysfs/group.c' line='170' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_create_group'>
+        <parameter type-id='type-id-379' name='kobj' filepath='fs/sysfs/group.c' line='170' column='1'/>
+        <parameter type-id='type-id-894' name='grp' filepath='fs/sysfs/group.c' line='171' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='sysfs_remove_group' mangled-name='sysfs_remove_group' filepath='fs/sysfs/group.c' line='244' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_remove_group'>
+        <parameter type-id='type-id-379' name='kobj' filepath='fs/sysfs/group.c' line='244' column='1'/>
+        <parameter type-id='type-id-894' name='grp' filepath='fs/sysfs/group.c' line='245' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/events/core.c' language='LANG_C89'>
+
+      <array-type-def dimensions='1' type-id='type-id-895' size-in-bits='7584' id='type-id-896'>
+        <subrange length='948' type-id='type-id-9' id='type-id-897'/>
+
+      </array-type-def>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/trace_events.h' line='256' column='1' id='type-id-898'>
+        <data-member access='private'>
+          <var-decl name='name' type-id='type-id-2' visibility='default' filepath='include/linux/trace_events.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='tp' type-id='type-id-883' visibility='default' filepath='include/linux/trace_events.h' line='259' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='perf_event_mmap_page' size-in-bits='8704' is-struct='yes' visibility='default' filepath='include/uapi/linux/perf_event.h' line='473' column='1' id='type-id-899'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='version' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/perf_event.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='compat_version' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/perf_event.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lock' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/perf_event.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='index' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/perf_event.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='offset' type-id='type-id-900' visibility='default' filepath='include/uapi/linux/perf_event.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='time_enabled' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='time_running' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='' type-id='type-id-901' visibility='default' filepath='include/uapi/linux/perf_event.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pmc_width' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/perf_event.h' line='539' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='400'>
+          <var-decl name='time_shift' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/perf_event.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='time_mult' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/perf_event.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='time_offset' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='time_zero' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='size' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/perf_event.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='__reserved' type-id='type-id-896' visibility='default' filepath='include/uapi/linux/perf_event.h' line='591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='data_head' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='data_tail' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='data_offset' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='data_size' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='aux_head' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='625' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='aux_tail' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='aux_offset' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='aux_size' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='628' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/perf_event.h' line='517' column='1' id='type-id-901'>
+        <data-member access='private'>
+          <var-decl name='capabilities' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='type-id-902' visibility='default' filepath='include/uapi/linux/perf_event.h' line='519' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/perf_event.h' line='519' column='1' id='type-id-902'>
+        <data-member access='public' layout-offset-in-bits='63'>
+          <var-decl name='cap_bit0' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='62'>
+          <var-decl name='cap_bit0_is_deprecated' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='61'>
+          <var-decl name='cap_user_rdpmc' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='60'>
+          <var-decl name='cap_user_time' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='59'>
+          <var-decl name='cap_user_time_zero' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cap_____res' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/perf_event.h' line='526' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-903' size-in-bits='64' id='type-id-904'/>
+      <pointer-type-def type-id='type-id-905' size-in-bits='64' id='type-id-906'/>
+      <pointer-type-def type-id='type-id-907' size-in-bits='64' id='type-id-908'/>
+      <pointer-type-def type-id='type-id-909' size-in-bits='64' id='type-id-910'/>
+      <pointer-type-def type-id='type-id-899' size-in-bits='64' id='type-id-911'/>
+      <pointer-type-def type-id='type-id-912' size-in-bits='64' id='type-id-913'/>
+      <pointer-type-def type-id='type-id-914' size-in-bits='64' id='type-id-915'/>
+      <function-decl name='perf_trace_run_bpf_submit' mangled-name='perf_trace_run_bpf_submit' filepath='kernel/events/core.c' line='8370' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='perf_trace_run_bpf_submit'>
+        <parameter type-id='type-id-15' name='raw_data' filepath='kernel/events/core.c' line='8370' column='1'/>
+        <parameter type-id='type-id-17' name='size' filepath='kernel/events/core.c' line='8370' column='1'/>
+        <parameter type-id='type-id-17' name='rctx' filepath='kernel/events/core.c' line='8370' column='1'/>
+        <parameter type-id='type-id-21' name='call' filepath='kernel/events/core.c' line='8371' column='1'/>
+        <parameter type-id='type-id-40' name='count' filepath='kernel/events/core.c' line='8371' column='1'/>
+        <parameter type-id='type-id-736' name='regs' filepath='kernel/events/core.c' line='8372' column='1'/>
+        <parameter type-id='type-id-746' name='head' filepath='kernel/events/core.c' line='8372' column='1'/>
+        <parameter type-id='type-id-431' name='task' filepath='kernel/events/core.c' line='8373' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-903'>
+        <parameter type-id='type-id-916'/>
+        <parameter type-id='type-id-906'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-907'>
+        <parameter type-id='type-id-906'/>
+        <return type-id='type-id-906'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-909'>
+        <parameter type-id='type-id-431'/>
+        <return type-id='type-id-906'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-912'>
+        <parameter type-id='type-id-906'/>
+        <return type-id='type-id-917'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-914'>
+        <parameter type-id='type-id-906'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/scatterlist.c' language='LANG_C89'>
+      <class-decl name='sg_mapping_iter' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/scatterlist.h' line='413' column='1' id='type-id-918'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='page' type-id='type-id-512' visibility='default' filepath='include/linux/scatterlist.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='addr' type-id='type-id-15' visibility='default' filepath='include/linux/scatterlist.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='length' type-id='type-id-84' visibility='default' filepath='include/linux/scatterlist.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='consumed' type-id='type-id-84' visibility='default' filepath='include/linux/scatterlist.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='piter' type-id='type-id-919' visibility='default' filepath='include/linux/scatterlist.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='__offset' type-id='type-id-5' visibility='default' filepath='include/linux/scatterlist.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='__remaining' type-id='type-id-5' visibility='default' filepath='include/linux/scatterlist.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='__flags' type-id='type-id-5' visibility='default' filepath='include/linux/scatterlist.h' line='424' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sg_page_iter' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/scatterlist.h' line='349' column='1' id='type-id-919'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sg' type-id='type-id-920' visibility='default' filepath='include/linux/scatterlist.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sg_pgoffset' type-id='type-id-5' visibility='default' filepath='include/linux/scatterlist.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='__nents' type-id='type-id-5' visibility='default' filepath='include/linux/scatterlist.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='__pg_advance' type-id='type-id-17' visibility='default' filepath='include/linux/scatterlist.h' line='355' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-918' size-in-bits='64' id='type-id-921'/>
+      <function-decl name='sg_next' mangled-name='sg_next' filepath='lib/scatterlist.c' line='25' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_next'>
+        <parameter type-id='type-id-920' name='sg' filepath='lib/scatterlist.c' line='25' column='1'/>
+        <return type-id='type-id-920'/>
+      </function-decl>
+      <function-decl name='sg_nents' mangled-name='sg_nents' filepath='lib/scatterlist.c' line='47' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_nents'>
+        <parameter type-id='type-id-920' name='sg' filepath='lib/scatterlist.c' line='47' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='sg_nents_for_len' mangled-name='sg_nents_for_len' filepath='lib/scatterlist.c' line='70' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_nents_for_len'>
+        <parameter type-id='type-id-920' name='sg' filepath='lib/scatterlist.c' line='70' column='1'/>
+        <parameter type-id='type-id-40' name='len' filepath='lib/scatterlist.c' line='70' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='sg_init_table' mangled-name='sg_init_table' filepath='lib/scatterlist.c' line='126' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_init_table'>
+        <parameter type-id='type-id-920' name='sgl' filepath='lib/scatterlist.c' line='126' column='1'/>
+        <parameter type-id='type-id-5' name='nents' filepath='lib/scatterlist.c' line='126' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='sg_init_one' mangled-name='sg_init_one' filepath='lib/scatterlist.c' line='140' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_init_one'>
+        <parameter type-id='type-id-920' name='sg' filepath='lib/scatterlist.c' line='140' column='1'/>
+        <parameter type-id='type-id-15' name='buf' filepath='lib/scatterlist.c' line='140' column='1'/>
+        <parameter type-id='type-id-5' name='buflen' filepath='lib/scatterlist.c' line='140' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='sg_free_table' mangled-name='sg_free_table' filepath='lib/scatterlist.c' line='238' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_free_table'>
+        <parameter type-id='type-id-922' name='table' filepath='lib/scatterlist.c' line='238' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='sg_alloc_table' mangled-name='sg_alloc_table' filepath='lib/scatterlist.c' line='347' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_alloc_table'>
+        <parameter type-id='type-id-922' name='table' filepath='lib/scatterlist.c' line='347' column='1'/>
+        <parameter type-id='type-id-5' name='nents' filepath='lib/scatterlist.c' line='347' column='1'/>
+        <parameter type-id='type-id-485' name='gfp_mask' filepath='lib/scatterlist.c' line='347' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='sg_alloc_table_from_pages' mangled-name='sg_alloc_table_from_pages' filepath='lib/scatterlist.c' line='456' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_alloc_table_from_pages'>
+        <parameter type-id='type-id-922' name='sgt' filepath='lib/scatterlist.c' line='456' column='1'/>
+        <parameter type-id='type-id-923' name='pages' filepath='lib/scatterlist.c' line='456' column='1'/>
+        <parameter type-id='type-id-5' name='n_pages' filepath='lib/scatterlist.c' line='457' column='1'/>
+        <parameter type-id='type-id-5' name='offset' filepath='lib/scatterlist.c' line='457' column='1'/>
+        <parameter type-id='type-id-16' name='size' filepath='lib/scatterlist.c' line='458' column='1'/>
+        <parameter type-id='type-id-485' name='gfp_mask' filepath='lib/scatterlist.c' line='458' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='sg_miter_start' mangled-name='sg_miter_start' filepath='lib/scatterlist.c' line='640' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_miter_start'>
+        <parameter type-id='type-id-921' name='miter' filepath='lib/scatterlist.c' line='640' column='1'/>
+        <parameter type-id='type-id-920' name='sgl' filepath='lib/scatterlist.c' line='640' column='1'/>
+        <parameter type-id='type-id-5' name='nents' filepath='lib/scatterlist.c' line='641' column='1'/>
+        <parameter type-id='type-id-5' name='flags' filepath='lib/scatterlist.c' line='641' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='sg_miter_stop' mangled-name='sg_miter_stop' filepath='lib/scatterlist.c' line='766' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_miter_stop'>
+        <parameter type-id='type-id-921' name='miter' filepath='lib/scatterlist.c' line='766' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='sg_miter_next' mangled-name='sg_miter_next' filepath='lib/scatterlist.c' line='729' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_miter_next'>
+        <parameter type-id='type-id-921' name='miter' filepath='lib/scatterlist.c' line='729' column='1'/>
+        <return type-id='type-id-33'/>
+      </function-decl>
+      <function-decl name='sg_copy_from_buffer' mangled-name='sg_copy_from_buffer' filepath='lib/scatterlist.c' line='852' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_copy_from_buffer'>
+        <parameter type-id='type-id-920' name='sgl' filepath='lib/scatterlist.c' line='852' column='1'/>
+        <parameter type-id='type-id-5' name='nents' filepath='lib/scatterlist.c' line='852' column='1'/>
+        <parameter type-id='type-id-15' name='buf' filepath='lib/scatterlist.c' line='853' column='1'/>
+        <parameter type-id='type-id-84' name='buflen' filepath='lib/scatterlist.c' line='853' column='1'/>
+        <return type-id='type-id-84'/>
+      </function-decl>
+      <function-decl name='sg_copy_to_buffer' mangled-name='sg_copy_to_buffer' filepath='lib/scatterlist.c' line='869' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_copy_to_buffer'>
+        <parameter type-id='type-id-920' name='sgl' filepath='lib/scatterlist.c' line='869' column='1'/>
+        <parameter type-id='type-id-5' name='nents' filepath='lib/scatterlist.c' line='869' column='1'/>
+        <parameter type-id='type-id-15' name='buf' filepath='lib/scatterlist.c' line='870' column='1'/>
+        <parameter type-id='type-id-84' name='buflen' filepath='lib/scatterlist.c' line='870' column='1'/>
+        <return type-id='type-id-84'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/vmalloc.c' language='LANG_C89'>
+      <class-decl name='device' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-924'/>
+      <pointer-type-def type-id='type-id-924' size-in-bits='64' id='type-id-925'/>
+      <function-decl name='vmalloc_to_page' mangled-name='vmalloc_to_page' filepath='mm/vmalloc.c' line='266' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vmalloc_to_page'>
+        <parameter type-id='type-id-15' name='vmalloc_addr' filepath='mm/vmalloc.c' line='266' column='1'/>
+        <return type-id='type-id-512'/>
+      </function-decl>
+      <function-decl name='vunmap' mangled-name='vunmap' filepath='mm/vmalloc.c' line='1618' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vunmap'>
+        <parameter type-id='type-id-15' name='addr' filepath='mm/vmalloc.c' line='1618' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='vmap' mangled-name='vmap' filepath='mm/vmalloc.c' line='1637' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vmap'>
+        <parameter type-id='type-id-923' name='pages' filepath='mm/vmalloc.c' line='1637' column='1'/>
+        <parameter type-id='type-id-5' name='count' filepath='mm/vmalloc.c' line='1637' column='1'/>
+        <parameter type-id='type-id-16' name='flags' filepath='mm/vmalloc.c' line='1638' column='1'/>
+        <parameter type-id='type-id-102' name='prot' filepath='mm/vmalloc.c' line='1638' column='1'/>
+        <return type-id='type-id-15'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/net/bpf_jit_comp.c' language='LANG_C89'>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+      <type-decl name='__ARRAY_SIZE_TYPE__' size-in-bits='64' id='type-id-9'/>
+      <array-type-def dimensions='1' type-id='type-id-926' size-in-bits='128' id='type-id-927'>
+        <subrange length='8' type-id='type-id-9' id='type-id-928'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-929' size-in-bits='64' id='type-id-930'>
+        <subrange length='2' type-id='type-id-9' id='type-id-128'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-929' size-in-bits='128' id='type-id-931'>
+        <subrange length='4' type-id='type-id-9' id='type-id-107'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-511' size-in-bits='64' id='type-id-932'>
+        <subrange length='2' type-id='type-id-9' id='type-id-128'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-511' size-in-bits='96' id='type-id-933'>
+        <subrange length='3' type-id='type-id-9' id='type-id-196'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-511' size-in-bits='224' id='type-id-934'>
+        <subrange length='7' type-id='type-id-9' id='type-id-125'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-511' size-in-bits='256' id='type-id-935'>
+        <subrange length='8' type-id='type-id-9' id='type-id-928'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-511' size-in-bits='infinite' id='type-id-936'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-100' size-in-bits='128' id='type-id-937'>
+        <subrange length='2' type-id='type-id-9' id='type-id-128'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-100' size-in-bits='infinite' id='type-id-735'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-895' size-in-bits='128' id='type-id-938'>
+        <subrange length='16' type-id='type-id-9' id='type-id-135'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-895' size-in-bits='16' id='type-id-939'>
+        <subrange length='2' type-id='type-id-9' id='type-id-128'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-895' size-in-bits='256' id='type-id-940'>
+        <subrange length='32' type-id='type-id-9' id='type-id-941'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-895' size-in-bits='24' id='type-id-942'>
+        <subrange length='3' type-id='type-id-9' id='type-id-196'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-895' size-in-bits='416' id='type-id-943'>
+        <subrange length='52' type-id='type-id-9' id='type-id-944'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-895' size-in-bits='48' id='type-id-945'>
+        <subrange length='6' type-id='type-id-9' id='type-id-191'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-895' size-in-bits='infinite' id='type-id-946'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-947' size-in-bits='4096' id='type-id-948'>
+        <subrange length='32' type-id='type-id-9' id='type-id-941'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-115' size-in-bits='256' id='type-id-949'>
+        <subrange length='4' type-id='type-id-9' id='type-id-107'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-115' size-in-bits='32768' id='type-id-950'>
+        <subrange length='512' type-id='type-id-9' id='type-id-951'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-26' size-in-bits='288' id='type-id-952'>
+        <subrange length='9' type-id='type-id-9' id='type-id-953'/>
+
+      </array-type-def>
+      <type-decl name='bool' size-in-bits='8' id='type-id-954'/>
+      <array-type-def dimensions='1' type-id='type-id-955' size-in-bits='infinite' id='type-id-956'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-747' size-in-bits='1344' id='type-id-957'>
+        <subrange length='21' type-id='type-id-9' id='type-id-958'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-959' size-in-bits='infinite' id='type-id-960'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-365' size-in-bits='448' id='type-id-961'>
+        <subrange length='7' type-id='type-id-9' id='type-id-125'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-2' size-in-bits='2048' id='type-id-962'>
+        <subrange length='32' type-id='type-id-9' id='type-id-941'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-2' size-in-bits='192' id='type-id-963'>
+        <subrange length='3' type-id='type-id-9' id='type-id-196'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1' size-in-bits='1024' id='type-id-964'>
+        <subrange length='128' type-id='type-id-9' id='type-id-965'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1' size-in-bits='96' id='type-id-966'>
+        <subrange length='12' type-id='type-id-9' id='type-id-967'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1' size-in-bits='112' id='type-id-968'>
+        <subrange length='14' type-id='type-id-9' id='type-id-117'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1' size-in-bits='128' id='type-id-43'>
+        <subrange length='16' type-id='type-id-9' id='type-id-135'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1' size-in-bits='16384' id='type-id-969'>
+        <subrange length='2048' type-id='type-id-9' id='type-id-970'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1' size-in-bits='256' id='type-id-373'>
+        <subrange length='32' type-id='type-id-9' id='type-id-941'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1' size-in-bits='32768' id='type-id-971'>
+        <subrange length='4096' type-id='type-id-9' id='type-id-218'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1' size-in-bits='384' id='type-id-972'>
+        <subrange length='48' type-id='type-id-9' id='type-id-973'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1' size-in-bits='448' id='type-id-974'>
+        <subrange length='56' type-id='type-id-9' id='type-id-123'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1' size-in-bits='512' id='type-id-250'>
+        <subrange length='64' type-id='type-id-9' id='type-id-188'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1' size-in-bits='64' id='type-id-975'>
+        <subrange length='8' type-id='type-id-9' id='type-id-928'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1' size-in-bits='infinite' id='type-id-440'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <class-decl name='acpi_device_id' size-in-bits='256' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-976'/>
+      <class-decl name='anon_vma' size-in-bits='640' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-977'/>
+      <class-decl name='assoc_array_ptr' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-978'/>
+      <class-decl name='audit_context' size-in-bits='7360' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-979'/>
+      <class-decl name='autogroup' size-in-bits='576' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-980'/>
+      <class-decl name='backing_dev_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-981'/>
+      <class-decl name='bdi_writeback' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-982'/>
+      <class-decl name='bio_list' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-983'/>
+      <class-decl name='bio_vec' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-984'/>
+      <class-decl name='blk_plug' size-in-bits='384' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-985'/>
+      <class-decl name='bpf_cgroup_storage_map' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-986'/>
+      <class-decl name='bpf_verifier_env' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-987'/>
+      <class-decl name='btf' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-988'/>
+      <class-decl name='btf_type' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-989'/>
+      <class-decl name='bucket_table' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-990'/>
+      <class-decl name='can_dev_rcv_lists' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-991'/>
+      <class-decl name='cdev' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-992'/>
+      <class-decl name='cfs_rq' size-in-bits='3072' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-993'/>
+      <class-decl name='cgroup_taskset' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-994'/>
+      <class-decl name='cma' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-995'/>
+      <class-decl name='cpu_rmap' size-in-bits='128' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-996'/>
+      <class-decl name='dev_pin_info' size-in-bits='320' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-997'/>
+      <class-decl name='dev_pm_qos' size-in-bits='1024' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-998'/>
+      <class-decl name='device_node' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-999'/>
+      <class-decl name='device_private' size-in-bits='1344' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1000'/>
+      <class-decl name='dma_coherent_mem' size-in-bits='384' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1001'/>
+      <class-decl name='driver_private' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1002'/>
+      <class-decl name='dst_entry' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1003'/>
+      <class-decl name='export_operations' size-in-bits='576' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1004'/>
+      <class-decl name='fib6_info' size-in-bits='1792' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1005'/>
+      <class-decl name='fib6_table' size-in-bits='960' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1006'/>
+      <class-decl name='fib_notifier_ops' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1007'/>
+      <class-decl name='fib_rules_ops' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1008'/>
+      <class-decl name='fib_table' size-in-bits='384' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1009'/>
+      <class-decl name='files_struct' size-in-bits='5632' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1010'/>
+      <class-decl name='fs_struct' size-in-bits='448' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1011'/>
+      <class-decl name='fscrypt_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1012'/>
+      <class-decl name='fscrypt_operations' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1013'/>
+      <class-decl name='fsnotify_mark_connector' size-in-bits='192' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1014'/>
+      <class-decl name='fsverity_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1015'/>
+      <class-decl name='fsverity_operations' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1016'/>
+      <class-decl name='futex_pi_state' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1017'/>
+      <class-decl name='gendisk' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1018'/>
+      <class-decl name='hd_struct' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1019'/>
+      <class-decl name='in_device' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1020'/>
+      <class-decl name='inet6_dev' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1021'/>
+      <class-decl name='inet_hashinfo' size-in-bits='4608' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1022'/>
+      <class-decl name='inet_peer_base' size-in-bits='192' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1023'/>
+      <class-decl name='iommu_fwspec' size-in-bits='256' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1024'/>
+      <class-decl name='iommu_group' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1025'/>
+      <class-decl name='iommu_ops' size-in-bits='1664' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1026'/>
+      <class-decl name='ip_ra_chain' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1027'/>
+      <class-decl name='ipc_namespace' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1028'/>
+      <class-decl name='ipv4_devconf' size-in-bits='1152' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1029'/>
+      <class-decl name='ipv6_devconf' size-in-bits='1792' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1030'/>
+      <class-decl name='irq_domain' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1031'/>
+      <class-decl name='iw_handler_def' size-in-bits='320' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1032'/>
+      <class-decl name='iw_public_data' size-in-bits='128' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1033'/>
+      <class-decl name='kernfs_iattrs' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1034'/>
+      <class-decl name='kernfs_open_node' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1035'/>
+      <class-decl name='key_type' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1036'/>
+      <class-decl name='key_user' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1037'/>
+      <class-decl name='kioctx_table' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1038'/>
+      <class-decl name='kmem_cache' size-in-bits='2752' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1039'/>
+      <class-decl name='kstatfs' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1040'/>
+      <class-decl name='linux_binfmt' size-in-bits='448' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1041'/>
+      <class-decl name='mem_cgroup' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1042'/>
+      <class-decl name='mnt_namespace' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1043'/>
+      <class-decl name='module_notes_attrs' size-in-bits='128' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1044'/>
+      <class-decl name='module_param_attrs' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1045'/>
+      <class-decl name='module_sect_attrs' size-in-bits='384' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1046'/>
+      <class-decl name='mtd_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1047'/>
+      <class-decl name='nameidata' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1048'/>
+      <class-decl name='ndisc_ops' size-in-bits='384' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1049'/>
+      <class-decl name='neigh_parms' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1050'/>
+      <class-decl name='neighbour' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1051'/>
+      <class-decl name='net_generic' size-in-bits='192' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1052'/>
+      <class-decl name='net_rate_estimator' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1053'/>
+      <class-decl name='nf_ct_event_notifier' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1054'/>
+      <class-decl name='nf_exp_event_notifier' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1055'/>
+      <class-decl name='nf_hook_entries' size-in-bits='64' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1056'/>
+      <class-decl name='nf_logger' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1057'/>
+      <class-decl name='nf_queue_handler' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1058'/>
+      <class-decl name='nfs4_lock_state' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1059'/>
+      <class-decl name='nlm_lockowner' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1060'/>
+      <class-decl name='of_device_id' size-in-bits='1600' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1061'/>
+      <class-decl name='pcpu_dstats' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1062'/>
+      <class-decl name='pcpu_lstats' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1063'/>
+      <class-decl name='pcpu_vstats' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1064'/>
+      <class-decl name='perf_event' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1065'/>
+      <class-decl name='perf_event_context' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1066'/>
+      <class-decl name='phy_device' size-in-bits='9408' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1067'/>
+      <class-decl name='poll_table_struct' size-in-bits='128' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1068'/>
+      <class-decl name='pollfd' size-in-bits='64' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1069'/>
+      <class-decl name='posix_acl' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1070'/>
+      <class-decl name='proc_dir_entry' size-in-bits='1408' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1071'/>
+      <class-decl name='proc_ns_operations' size-in-bits='512' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1072'/>
+      <class-decl name='prot_inuse' size-in-bits='2048' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1073'/>
+      <class-decl name='qdisc_walker' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1074'/>
+      <class-decl name='rcu_node' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1075'/>
+      <class-decl name='reclaim_state' size-in-bits='64' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1076'/>
+      <class-decl name='request_queue' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1077'/>
+      <class-decl name='robust_list_head' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1078'/>
+      <class-decl name='rt6_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1079'/>
+      <class-decl name='rt6_statistics' size-in-bits='224' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1080'/>
+      <class-decl name='rt_mutex_waiter' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1081'/>
+      <class-decl name='rt_rq' size-in-bits='13824' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1082'/>
+      <class-decl name='s_pstats' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1083'/>
+      <class-decl name='s_stats' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1084'/>
+      <class-decl name='sched_class' size-in-bits='1536' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1085'/>
+      <class-decl name='sec_path' size-in-bits='704' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1086'/>
+      <class-decl name='seccomp_filter' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1087'/>
+      <class-decl name='seg6_pernet_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1088'/>
+      <class-decl name='sfp_bus' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1089'/>
+      <class-decl name='sock' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1090'/>
+      <class-decl name='subsys_private' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1091'/>
+      <class-decl name='swap_info_struct' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1092'/>
+      <class-decl name='task_group' size-in-bits='4608' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1093'/>
+      <class-decl name='tcf_walker' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1094'/>
+      <class-decl name='tcp_congestion_ops' size-in-bits='1216' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1095'/>
+      <class-decl name='tcp_fastopen_context' size-in-bits='320' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1096'/>
+      <class-decl name='tipc_bearer' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1097'/>
+      <class-decl name='trace_eval_map' size-in-bits='192' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1098'/>
+      <class-decl name='trace_event_call' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1099'/>
+      <class-decl name='tty_audit_buf' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1100'/>
+      <class-decl name='tty_struct' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1101'/>
+      <class-decl name='udp_tunnel_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1102'/>
+      <class-decl name='uevent_sock' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1103'/>
+      <class-decl name='uprobe' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1104'/>
+      <class-decl name='uts_namespace' size-in-bits='3520' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1105'/>
+      <class-decl name='vfsmount' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1106'/>
+      <class-decl name='wake_irq' size-in-bits='192' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1107'/>
+      <class-decl name='wireless_dev' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1108'/>
+      <class-decl name='workqueue_struct' size-in-bits='2560' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1109'/>
+      <class-decl name='wpan_dev' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1110'/>
+      <class-decl name='writeback_control' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1111'/>
+      <class-decl name='xattr_handler' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1112'/>
+      <class-decl name='xdp_umem' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1113'/>
+      <class-decl name='xol_area' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1114'/>
+      <class-decl name='xt_table' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-1115'/>
+      <array-type-def dimensions='1' type-id='type-id-894' size-in-bits='256' id='type-id-1116'>
+        <subrange length='4' type-id='type-id-9' id='type-id-107'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1117' size-in-bits='832' id='type-id-1118'>
+        <subrange length='13' type-id='type-id-9' id='type-id-201'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1119' size-in-bits='192' id='type-id-1120'>
+        <subrange length='3' type-id='type-id-9' id='type-id-196'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1121' size-in-bits='256' id='type-id-1122'>
+        <subrange length='2' type-id='type-id-9' id='type-id-128'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-186' size-in-bits='1024' id='type-id-1123'>
+        <subrange length='16' type-id='type-id-9' id='type-id-135'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-186' size-in-bits='192' id='type-id-1124'>
+        <subrange length='3' type-id='type-id-9' id='type-id-196'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-186' size-in-bits='256' id='type-id-1125'>
+        <subrange length='4' type-id='type-id-9' id='type-id-107'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-520' size-in-bits='512' id='type-id-1126'>
+        <subrange length='4' type-id='type-id-9' id='type-id-107'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1127' size-in-bits='4096' id='type-id-1128'>
+        <subrange length='8' type-id='type-id-9' id='type-id-928'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1129' size-in-bits='192' id='type-id-1130'>
+        <subrange length='3' type-id='type-id-9' id='type-id-196'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-17' size-in-bits='896' id='type-id-1131'>
+        <subrange length='28' type-id='type-id-9' id='type-id-1132'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-17' size-in-bits='64' id='type-id-465'>
+        <subrange length='2' type-id='type-id-9' id='type-id-128'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-17' size-in-bits='96' id='type-id-1133'>
+        <subrange length='3' type-id='type-id-9' id='type-id-196'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-17' size-in-bits='128' id='type-id-1134'>
+        <subrange length='4' type-id='type-id-9' id='type-id-107'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-17' size-in-bits='288' id='type-id-1135'>
+        <subrange length='9' type-id='type-id-9' id='type-id-953'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-17' size-in-bits='infinite' id='type-id-1136'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1137' size-in-bits='16384' id='type-id-1138'>
+        <subrange length='64' type-id='type-id-9' id='type-id-188'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-330' size-in-bits='64' id='type-id-1139'>
+        <subrange length='2' type-id='type-id-9' id='type-id-128'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-330' size-in-bits='infinite' id='type-id-1140'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-20' size-in-bits='1664' id='type-id-1141'>
+        <subrange length='13' type-id='type-id-9' id='type-id-201'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-20' size-in-bits='2688' id='type-id-1142'>
+        <subrange length='21' type-id='type-id-9' id='type-id-958'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-20' size-in-bits='384' id='type-id-457'>
+        <subrange length='3' type-id='type-id-9' id='type-id-196'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-20' size-in-bits='896' id='type-id-1143'>
+        <subrange length='7' type-id='type-id-9' id='type-id-125'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1144' size-in-bits='infinite' id='type-id-1145'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1146' id='type-id-1147'>
+        <subrange length='3' type-id='type-id-9' id='type-id-196'/>
+
+      </array-type-def>
+      <type-decl name='long int' size-in-bits='64' id='type-id-192'/>
+      <array-type-def dimensions='1' type-id='type-id-192' size-in-bits='384' id='type-id-349'>
+        <subrange length='6' type-id='type-id-9' id='type-id-191'/>
+
+      </array-type-def>
+      <type-decl name='long long int' size-in-bits='64' id='type-id-1148'/>
+      <array-type-def dimensions='1' type-id='type-id-1149' size-in-bits='1728' id='type-id-1150'>
+        <subrange length='3' type-id='type-id-9' id='type-id-196'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1151' size-in-bits='512' id='type-id-1152'>
+        <subrange length='16' type-id='type-id-9' id='type-id-135'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1153' size-in-bits='192' id='type-id-1154'>
+        <subrange length='3' type-id='type-id-9' id='type-id-196'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1153' size-in-bits='320' id='type-id-1155'>
+        <subrange length='5' type-id='type-id-9' id='type-id-110'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1156' size-in-bits='3072' id='type-id-1157'>
+        <subrange length='3' type-id='type-id-9' id='type-id-196'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1158' size-in-bits='1024' id='type-id-1159'>
+        <subrange length='16' type-id='type-id-9' id='type-id-135'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1160' size-in-bits='128' id='type-id-1161'>
+        <subrange length='2' type-id='type-id-9' id='type-id-128'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-251' size-in-bits='256' id='type-id-1162'>
+        <subrange length='4' type-id='type-id-9' id='type-id-107'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1163' size-in-bits='1344' id='type-id-1164'>
+        <subrange length='3' type-id='type-id-9' id='type-id-196'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-422' size-in-bits='384' id='type-id-1165'>
+        <subrange length='2' type-id='type-id-9' id='type-id-128'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1166' size-in-bits='2048' id='type-id-1167'>
+        <subrange length='16' type-id='type-id-9' id='type-id-135'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1168' size-in-bits='infinite' id='type-id-1169'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <type-decl name='short int' size-in-bits='16' id='type-id-261'/>
+      <type-decl name='signed char' size-in-bits='8' id='type-id-1170'/>
+      <array-type-def dimensions='1' type-id='type-id-1171' size-in-bits='infinite' id='type-id-1172'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <typedef-decl name='__uint128_t' type-id='type-id-1173' id='type-id-947'/>
+      <array-type-def dimensions='1' type-id='type-id-688' size-in-bits='infinite' id='type-id-1174'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-7' size-in-bits='672' id='type-id-1175'>
+        <subrange length='21' type-id='type-id-9' id='type-id-958'/>
+
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='type-id-7' size-in-bits='256' id='type-id-1176'>
+        <subrange length='2' type-id='type-id-9' id='type-id-128'/>
+
+        <subrange length='6' type-id='type-id-9' id='type-id-191'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-7' size-in-bits='160' id='type-id-1177'>
+        <subrange length='5' type-id='type-id-9' id='type-id-110'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-7' size-in-bits='192' id='type-id-1178'>
+        <subrange length='6' type-id='type-id-9' id='type-id-191'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-40' size-in-bits='128' id='type-id-739'>
+        <subrange length='2' type-id='type-id-9' id='type-id-128'/>
+
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='type-id-40' size-in-bits='448' id='type-id-1179'>
+        <subrange length='2' type-id='type-id-9' id='type-id-128'/>
+
+        <subrange length='5' type-id='type-id-9' id='type-id-110'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-40' size-in-bits='2368' id='type-id-1180'>
+        <subrange length='37' type-id='type-id-9' id='type-id-148'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-40' size-in-bits='320' id='type-id-498'>
+        <subrange length='5' type-id='type-id-9' id='type-id-110'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-40' size-in-bits='512' id='type-id-1181'>
+        <subrange length='8' type-id='type-id-9' id='type-id-928'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-214' size-in-bits='128' id='type-id-1182'>
+        <subrange length='16' type-id='type-id-9' id='type-id-135'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-214' size-in-bits='160' id='type-id-1183'>
+        <subrange length='20' type-id='type-id-9' id='type-id-1184'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-214' size-in-bits='24' id='type-id-1185'>
+        <subrange length='3' type-id='type-id-9' id='type-id-196'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-214' size-in-bits='64' id='type-id-1186'>
+        <subrange length='8' type-id='type-id-9' id='type-id-928'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1187' size-in-bits='480' id='type-id-1188'>
+        <subrange length='5' type-id='type-id-9' id='type-id-110'/>
+
+      </array-type-def>
+      <type-decl name='unnamed-enum-underlying-type' is-anonymous='yes' size-in-bits='32' alignment-in-bits='32' id='type-id-94'/>
+      <type-decl name='unsigned __int128' size-in-bits='128' id='type-id-1173'/>
+      <type-decl name='unsigned char' size-in-bits='8' id='type-id-216'/>
+      <array-type-def dimensions='1' type-id='type-id-216' size-in-bits='256' id='type-id-35'>
+        <subrange length='32' type-id='type-id-9' id='type-id-941'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-216' size-in-bits='48' id='type-id-1189'>
+        <subrange length='6' type-id='type-id-9' id='type-id-191'/>
+
+      </array-type-def>
+      <type-decl name='unsigned int' size-in-bits='32' id='type-id-5'/>
+      <array-type-def dimensions='1' type-id='type-id-5' size-in-bits='320' id='type-id-1190'>
+        <subrange length='10' type-id='type-id-9' id='type-id-1191'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-5' size-in-bits='448' id='type-id-1192'>
+        <subrange length='14' type-id='type-id-9' id='type-id-117'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-5' size-in-bits='64' id='type-id-488'>
+        <subrange length='2' type-id='type-id-9' id='type-id-128'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-5' size-in-bits='96' id='type-id-1193'>
+        <subrange length='3' type-id='type-id-9' id='type-id-196'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-5' size-in-bits='192' id='type-id-1194'>
+        <subrange length='6' type-id='type-id-9' id='type-id-191'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-16' size-in-bits='7552' id='type-id-1195'>
+        <subrange length='118' type-id='type-id-9' id='type-id-1196'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-16' size-in-bits='768' id='type-id-1197'>
+        <subrange length='12' type-id='type-id-9' id='type-id-967'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-16' size-in-bits='1024' id='type-id-1198'>
+        <subrange length='16' type-id='type-id-9' id='type-id-135'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-16' size-in-bits='64' id='type-id-491'>
+        <subrange length='1' type-id='type-id-9' id='type-id-180'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-16' size-in-bits='1792' id='type-id-1199'>
+        <subrange length='28' type-id='type-id-9' id='type-id-1132'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-16' size-in-bits='1856' id='type-id-1200'>
+        <subrange length='29' type-id='type-id-9' id='type-id-119'/>
+
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='type-id-16' size-in-bits='256' id='type-id-1201'>
+        <subrange length='3' type-id='type-id-9' id='type-id-196'/>
+
+        <subrange length='1' type-id='type-id-9' id='type-id-180'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-16' size-in-bits='2944' id='type-id-1202'>
+        <subrange length='46' type-id='type-id-9' id='type-id-1203'/>
+
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='type-id-16' size-in-bits='512' id='type-id-1204'>
+        <subrange length='5' type-id='type-id-9' id='type-id-110'/>
+
+        <subrange length='3' type-id='type-id-9' id='type-id-196'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-16' size-in-bits='384' id='type-id-1205'>
+        <subrange length='6' type-id='type-id-9' id='type-id-191'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-16' size-in-bits='576' id='type-id-1206'>
+        <subrange length='9' type-id='type-id-9' id='type-id-953'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-16' size-in-bits='infinite' id='type-id-280'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <type-decl name='unsigned short int' size-in-bits='16' id='type-id-312'/>
+      <array-type-def dimensions='1' type-id='type-id-1207' size-in-bits='128' id='type-id-1208'>
+        <subrange length='1' type-id='type-id-9' id='type-id-180'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1209' size-in-bits='256' id='type-id-1210'>
+        <subrange length='4' type-id='type-id-9' id='type-id-107'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-15' size-in-bits='256' id='type-id-1211'>
+        <subrange length='4' type-id='type-id-9' id='type-id-107'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-15' size-in-bits='4096' id='type-id-1212'>
+        <subrange length='64' type-id='type-id-9' id='type-id-188'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-15' size-in-bits='infinite' id='type-id-1213'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1214' size-in-bits='384' id='type-id-1215'>
+        <subrange length='3' type-id='type-id-9' id='type-id-196'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1216' size-in-bits='infinite' id='type-id-1217'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <typedef-decl name='bool' type-id='type-id-954' filepath='include/linux/types.h' line='30' column='1' id='type-id-33'/>
+      <class-decl name='bpf_prog' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/filter.h' line='480' column='1' id='type-id-1218'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pages' type-id='type-id-688' visibility='default' filepath='include/linux/filter.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='jited' type-id='type-id-688' visibility='default' filepath='include/linux/filter.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='jit_requested' type-id='type-id-688' visibility='default' filepath='include/linux/filter.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='undo_set_mem' type-id='type-id-688' visibility='default' filepath='include/linux/filter.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='gpl_compatible' type-id='type-id-688' visibility='default' filepath='include/linux/filter.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='cb_access' type-id='type-id-688' visibility='default' filepath='include/linux/filter.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='dst_needed' type-id='type-id-688' visibility='default' filepath='include/linux/filter.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='blinded' type-id='type-id-688' visibility='default' filepath='include/linux/filter.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='is_func' type-id='type-id-688' visibility='default' filepath='include/linux/filter.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='kprobe_override' type-id='type-id-688' visibility='default' filepath='include/linux/filter.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='has_callchain_buf' type-id='type-id-688' visibility='default' filepath='include/linux/filter.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='type-id-1219' visibility='default' filepath='include/linux/filter.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='expected_attach_type' type-id='type-id-1220' visibility='default' filepath='include/linux/filter.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='len' type-id='type-id-7' visibility='default' filepath='include/linux/filter.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='jited_len' type-id='type-id-7' visibility='default' filepath='include/linux/filter.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tag' type-id='type-id-1186' visibility='default' filepath='include/linux/filter.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='aux' type-id='type-id-1221' visibility='default' filepath='include/linux/filter.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='orig_prog' type-id='type-id-1222' visibility='default' filepath='include/linux/filter.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='bpf_func' type-id='type-id-1223' visibility='default' filepath='include/linux/filter.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='' type-id='type-id-1224' visibility='default' filepath='include/linux/filter.h' line='502' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='u16' type-id='type-id-108' filepath='include/asm-generic/int-ll64.h' line='19' column='1' id='type-id-688'/>
+      <typedef-decl name='__u16' type-id='type-id-312' filepath='include/uapi/asm-generic/int-ll64.h' line='24' column='1' id='type-id-108'/>
+      <enum-decl name='bpf_prog_type' filepath='include/uapi/linux/bpf.h' line='132' column='1' id='type-id-1219'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='BPF_PROG_TYPE_UNSPEC' value='0'/>
+        <enumerator name='BPF_PROG_TYPE_SOCKET_FILTER' value='1'/>
+        <enumerator name='BPF_PROG_TYPE_KPROBE' value='2'/>
+        <enumerator name='BPF_PROG_TYPE_SCHED_CLS' value='3'/>
+        <enumerator name='BPF_PROG_TYPE_SCHED_ACT' value='4'/>
+        <enumerator name='BPF_PROG_TYPE_TRACEPOINT' value='5'/>
+        <enumerator name='BPF_PROG_TYPE_XDP' value='6'/>
+        <enumerator name='BPF_PROG_TYPE_PERF_EVENT' value='7'/>
+        <enumerator name='BPF_PROG_TYPE_CGROUP_SKB' value='8'/>
+        <enumerator name='BPF_PROG_TYPE_CGROUP_SOCK' value='9'/>
+        <enumerator name='BPF_PROG_TYPE_LWT_IN' value='10'/>
+        <enumerator name='BPF_PROG_TYPE_LWT_OUT' value='11'/>
+        <enumerator name='BPF_PROG_TYPE_LWT_XMIT' value='12'/>
+        <enumerator name='BPF_PROG_TYPE_SOCK_OPS' value='13'/>
+        <enumerator name='BPF_PROG_TYPE_SK_SKB' value='14'/>
+        <enumerator name='BPF_PROG_TYPE_CGROUP_DEVICE' value='15'/>
+        <enumerator name='BPF_PROG_TYPE_SK_MSG' value='16'/>
+        <enumerator name='BPF_PROG_TYPE_RAW_TRACEPOINT' value='17'/>
+        <enumerator name='BPF_PROG_TYPE_CGROUP_SOCK_ADDR' value='18'/>
+        <enumerator name='BPF_PROG_TYPE_LWT_SEG6LOCAL' value='19'/>
+        <enumerator name='BPF_PROG_TYPE_LIRC_MODE2' value='20'/>
+        <enumerator name='BPF_PROG_TYPE_SK_REUSEPORT' value='21'/>
+      </enum-decl>
+      <enum-decl name='bpf_attach_type' filepath='include/uapi/linux/bpf.h' line='157' column='1' id='type-id-1220'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='BPF_CGROUP_INET_INGRESS' value='0'/>
+        <enumerator name='BPF_CGROUP_INET_EGRESS' value='1'/>
+        <enumerator name='BPF_CGROUP_INET_SOCK_CREATE' value='2'/>
+        <enumerator name='BPF_CGROUP_SOCK_OPS' value='3'/>
+        <enumerator name='BPF_SK_SKB_STREAM_PARSER' value='4'/>
+        <enumerator name='BPF_SK_SKB_STREAM_VERDICT' value='5'/>
+        <enumerator name='BPF_CGROUP_DEVICE' value='6'/>
+        <enumerator name='BPF_SK_MSG_VERDICT' value='7'/>
+        <enumerator name='BPF_CGROUP_INET4_BIND' value='8'/>
+        <enumerator name='BPF_CGROUP_INET6_BIND' value='9'/>
+        <enumerator name='BPF_CGROUP_INET4_CONNECT' value='10'/>
+        <enumerator name='BPF_CGROUP_INET6_CONNECT' value='11'/>
+        <enumerator name='BPF_CGROUP_INET4_POST_BIND' value='12'/>
+        <enumerator name='BPF_CGROUP_INET6_POST_BIND' value='13'/>
+        <enumerator name='BPF_CGROUP_UDP4_SENDMSG' value='14'/>
+        <enumerator name='BPF_CGROUP_UDP6_SENDMSG' value='15'/>
+        <enumerator name='BPF_LIRC_MODE2' value='16'/>
+        <enumerator name='BPF_CGROUP_UDP4_RECVMSG' value='19'/>
+        <enumerator name='BPF_CGROUP_UDP6_RECVMSG' value='20'/>
+        <enumerator name='__MAX_BPF_ATTACH_TYPE' value='21'/>
+      </enum-decl>
+      <typedef-decl name='u32' type-id='type-id-511' filepath='include/asm-generic/int-ll64.h' line='21' column='1' id='type-id-7'/>
+      <typedef-decl name='__u32' type-id='type-id-5' filepath='include/uapi/asm-generic/int-ll64.h' line='27' column='1' id='type-id-511'/>
+      <typedef-decl name='u8' type-id='type-id-895' filepath='include/asm-generic/int-ll64.h' line='17' column='1' id='type-id-214'/>
+      <typedef-decl name='__u8' type-id='type-id-216' filepath='include/uapi/asm-generic/int-ll64.h' line='21' column='1' id='type-id-895'/>
+      <class-decl name='bpf_prog_aux' size-in-bits='1792' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='275' column='1' id='type-id-1225'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcnt' type-id='type-id-26' visibility='default' filepath='include/linux/bpf.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='used_map_cnt' type-id='type-id-7' visibility='default' filepath='include/linux/bpf.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_ctx_offset' type-id='type-id-7' visibility='default' filepath='include/linux/bpf.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='stack_depth' type-id='type-id-7' visibility='default' filepath='include/linux/bpf.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='id' type-id='type-id-7' visibility='default' filepath='include/linux/bpf.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='func_cnt' type-id='type-id-7' visibility='default' filepath='include/linux/bpf.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='offload_requested' type-id='type-id-33' visibility='default' filepath='include/linux/bpf.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='func' type-id='type-id-1226' visibility='default' filepath='include/linux/bpf.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='jit_data' type-id='type-id-15' visibility='default' filepath='include/linux/bpf.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ksym_tnode' type-id='type-id-1227' visibility='default' filepath='include/linux/bpf.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='ksym_lnode' type-id='type-id-20' visibility='default' filepath='include/linux/bpf.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='ops' type-id='type-id-1228' visibility='default' filepath='include/linux/bpf.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='used_maps' type-id='type-id-1229' visibility='default' filepath='include/linux/bpf.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='prog' type-id='type-id-1230' visibility='default' filepath='include/linux/bpf.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='user' type-id='type-id-1231' visibility='default' filepath='include/linux/bpf.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='load_time' type-id='type-id-40' visibility='default' filepath='include/linux/bpf.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='cgroup_storage' type-id='type-id-1232' visibility='default' filepath='include/linux/bpf.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='name' type-id='type-id-43' visibility='default' filepath='include/linux/bpf.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='security' type-id='type-id-15' visibility='default' filepath='include/linux/bpf.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='offload' type-id='type-id-1233' visibility='default' filepath='include/linux/bpf.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='' type-id='type-id-1234' visibility='default' filepath='include/linux/bpf.h' line='298' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='atomic_t' type-id='type-id-1235' filepath='include/linux/types.h' line='178' column='1' id='type-id-26'/>
+      <class-decl name='__anonymous_struct__' size-in-bits='32' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-26' visibility='default' filepath='include/linux/types.h' line='176' column='1' id='type-id-1235'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='counter' type-id='type-id-17' visibility='default' filepath='include/linux/types.h' line='177' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='latch_tree_node' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/rbtree_latch.h' line='40' column='1' id='type-id-1227'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='type-id-1165' visibility='default' filepath='include/linux/rbtree_latch.h' line='41' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='rcu_special' size-in-bits='32' visibility='default' filepath='include/linux/sched.h' line='561' column='1' id='type-id-1236'>
+        <data-member access='private'>
+          <var-decl name='b' type-id='type-id-1237' visibility='default' filepath='include/linux/sched.h' line='569' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='s' type-id='type-id-7' visibility='default' filepath='include/linux/sched.h' line='570' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='rb_node' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/rbtree.h' line='36' column='1' id='type-id-422'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__rb_parent_color' type-id='type-id-16' visibility='default' filepath='include/linux/rbtree.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rb_right' type-id='type-id-1238' visibility='default' filepath='include/linux/rbtree.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rb_left' type-id='type-id-1238' visibility='default' filepath='include/linux/rbtree.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='list_head' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/types.h' line='186' column='1' id='type-id-20'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='type-id-877' visibility='default' filepath='include/linux/types.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prev' type-id='type-id-877' visibility='default' filepath='include/linux/types.h' line='187' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_prog_ops' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='232' column='1' id='type-id-1239'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='test_run' type-id='type-id-1240' visibility='default' filepath='include/linux/bpf.h' line='233' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='bpf_attr' size-in-bits='576' visibility='default' filepath='include/uapi/linux/bpf.h' line='287' column='1' id='type-id-1241'>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='307' column='1' id='type-id-1242'>
+            <data-member access='public' layout-offset-in-bits='0'>
+              <var-decl name='map_fd' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='308' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='64'>
+              <var-decl name='key' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/bpf.h' line='309' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='128'>
+              <var-decl name='' type-id='type-id-1243' visibility='default' filepath='include/uapi/linux/bpf.h' line='310' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='192'>
+              <var-decl name='flags' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/bpf.h' line='314' column='1'/>
+            </data-member>
+          </class-decl>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__1' size-in-bits='576' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='317' column='1' id='type-id-1244'>
+            <data-member access='public' layout-offset-in-bits='0'>
+              <var-decl name='prog_type' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='318' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='32'>
+              <var-decl name='insn_cnt' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='319' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='64'>
+              <var-decl name='insns' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/bpf.h' line='320' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='128'>
+              <var-decl name='license' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/bpf.h' line='321' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='192'>
+              <var-decl name='log_level' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='322' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='224'>
+              <var-decl name='log_size' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='323' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='256'>
+              <var-decl name='log_buf' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/bpf.h' line='324' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='320'>
+              <var-decl name='kern_version' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='325' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='352'>
+              <var-decl name='prog_flags' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='326' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='384'>
+              <var-decl name='prog_name' type-id='type-id-43' visibility='default' filepath='include/uapi/linux/bpf.h' line='327' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='512'>
+              <var-decl name='prog_ifindex' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='328' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='544'>
+              <var-decl name='expected_attach_type' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='333' column='1'/>
+            </data-member>
+          </class-decl>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__2' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='336' column='1' id='type-id-1245'>
+            <data-member access='public' layout-offset-in-bits='0'>
+              <var-decl name='pathname' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/bpf.h' line='337' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='64'>
+              <var-decl name='bpf_fd' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='338' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='96'>
+              <var-decl name='file_flags' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='339' column='1'/>
+            </data-member>
+          </class-decl>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__3' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='342' column='1' id='type-id-1246'>
+            <data-member access='public' layout-offset-in-bits='0'>
+              <var-decl name='target_fd' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='343' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='32'>
+              <var-decl name='attach_bpf_fd' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='344' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='64'>
+              <var-decl name='attach_type' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='345' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='96'>
+              <var-decl name='attach_flags' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='346' column='1'/>
+            </data-member>
+          </class-decl>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__4' size-in-bits='96' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='360' column='1' id='type-id-1247'>
+            <data-member access='public' layout-offset-in-bits='0'>
+              <var-decl name='' type-id='type-id-1248' visibility='default' filepath='include/uapi/linux/bpf.h' line='361' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='32'>
+              <var-decl name='next_id' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='367' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='64'>
+              <var-decl name='open_flags' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='368' column='1'/>
+            </data-member>
+          </class-decl>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__5' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='391' column='1' id='type-id-1249'>
+            <data-member access='public' layout-offset-in-bits='0'>
+              <var-decl name='btf' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/bpf.h' line='392' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='64'>
+              <var-decl name='btf_log_buf' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/bpf.h' line='393' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='128'>
+              <var-decl name='btf_size' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='394' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='160'>
+              <var-decl name='btf_log_size' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='395' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='192'>
+              <var-decl name='btf_log_level' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='396' column='1'/>
+            </data-member>
+          </class-decl>
+        </member-type>
+        <data-member access='private'>
+          <var-decl name='' type-id='type-id-1250' visibility='default' filepath='include/uapi/linux/bpf.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='test' type-id='type-id-1251' visibility='default' filepath='include/uapi/linux/bpf.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='info' type-id='type-id-1252' visibility='default' filepath='include/uapi/linux/bpf.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='query' type-id='type-id-1253' visibility='default' filepath='include/uapi/linux/bpf.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='raw_tracepoint' type-id='type-id-1254' visibility='default' filepath='include/uapi/linux/bpf.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='task_fd_query' type-id='type-id-1255' visibility='default' filepath='include/uapi/linux/bpf.h' line='413' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='480' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='288' column='1' id='type-id-1250'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='map_type' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='key_size' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='value_size' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_entries' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map_flags' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='inner_map_fd' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='numa_node' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='map_name' type-id='type-id-43' visibility='default' filepath='include/uapi/linux/bpf.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='map_ifindex' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='btf_fd' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='btf_key_type_id' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='btf_value_type_id' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='304' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='310' column='1' id='type-id-1243'>
+        <data-member access='private'>
+          <var-decl name='value' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/bpf.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='next_key' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/bpf.h' line='312' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='349' column='1' id='type-id-1251'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prog_fd' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='retval' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data_size_in' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='data_size_out' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data_in' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/bpf.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='data_out' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/bpf.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='repeat' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='duration' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='357' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='361' column='1' id='type-id-1248'>
+        <data-member access='private'>
+          <var-decl name='start_id' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='prog_id' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='map_id' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='btf_id' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='365' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__3' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='371' column='1' id='type-id-1252'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bpf_fd' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='info_len' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='info' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/bpf.h' line='374' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__4' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='377' column='1' id='type-id-1253'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='target_fd' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='attach_type' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='query_flags' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='attach_flags' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='prog_ids' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/bpf.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='prog_cnt' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='383' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__5' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='386' column='1' id='type-id-1254'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/bpf.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prog_fd' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='388' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__6' size-in-bits='384' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='399' column='1' id='type-id-1255'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pid' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='fd' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='buf_len' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='buf' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/bpf.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='prog_id' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='fd_type' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='probe_offset' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/bpf.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='probe_addr' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/bpf.h' line='412' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_map' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='57' column='1' id='type-id-1256'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='type-id-1257' visibility='default' filepath='include/linux/bpf.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='inner_map_meta' type-id='type-id-1232' visibility='default' filepath='include/linux/bpf.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='security' type-id='type-id-15' visibility='default' filepath='include/linux/bpf.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='map_type' type-id='type-id-1258' visibility='default' filepath='include/linux/bpf.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='key_size' type-id='type-id-7' visibility='default' filepath='include/linux/bpf.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='value_size' type-id='type-id-7' visibility='default' filepath='include/linux/bpf.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='max_entries' type-id='type-id-7' visibility='default' filepath='include/linux/bpf.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='map_flags' type-id='type-id-7' visibility='default' filepath='include/linux/bpf.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='pages' type-id='type-id-7' visibility='default' filepath='include/linux/bpf.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='id' type-id='type-id-7' visibility='default' filepath='include/linux/bpf.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='numa_node' type-id='type-id-17' visibility='default' filepath='include/linux/bpf.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='btf_key_type_id' type-id='type-id-7' visibility='default' filepath='include/linux/bpf.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='btf_value_type_id' type-id='type-id-7' visibility='default' filepath='include/linux/bpf.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='btf' type-id='type-id-1259' visibility='default' filepath='include/linux/bpf.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='unpriv_array' type-id='type-id-33' visibility='default' filepath='include/linux/bpf.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='user' type-id='type-id-1231' visibility='default' filepath='include/linux/bpf.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='refcnt' type-id='type-id-26' visibility='default' filepath='include/linux/bpf.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='usercnt' type-id='type-id-26' visibility='default' filepath='include/linux/bpf.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='work' type-id='type-id-255' visibility='default' filepath='include/linux/bpf.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='name' type-id='type-id-43' visibility='default' filepath='include/linux/bpf.h' line='87' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_map_ops' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='29' column='1' id='type-id-1260'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='map_alloc_check' type-id='type-id-1261' visibility='default' filepath='include/linux/bpf.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='map_alloc' type-id='type-id-1262' visibility='default' filepath='include/linux/bpf.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map_release' type-id='type-id-1263' visibility='default' filepath='include/linux/bpf.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='map_free' type-id='type-id-1264' visibility='default' filepath='include/linux/bpf.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='map_get_next_key' type-id='type-id-1265' visibility='default' filepath='include/linux/bpf.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='map_release_uref' type-id='type-id-1264' visibility='default' filepath='include/linux/bpf.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='map_lookup_elem_sys_only' type-id='type-id-1266' visibility='default' filepath='include/linux/bpf.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='map_lookup_elem' type-id='type-id-1266' visibility='default' filepath='include/linux/bpf.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='map_update_elem' type-id='type-id-1267' visibility='default' filepath='include/linux/bpf.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='map_delete_elem' type-id='type-id-1268' visibility='default' filepath='include/linux/bpf.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='map_fd_get_ptr' type-id='type-id-1269' visibility='default' filepath='include/linux/bpf.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='map_fd_put_ptr' type-id='type-id-517' visibility='default' filepath='include/linux/bpf.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='map_gen_lookup' type-id='type-id-1270' visibility='default' filepath='include/linux/bpf.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='map_fd_sys_lookup_elem' type-id='type-id-1271' visibility='default' filepath='include/linux/bpf.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='map_seq_show_elem' type-id='type-id-1272' visibility='default' filepath='include/linux/bpf.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='map_check_btf' type-id='type-id-1273' visibility='default' filepath='include/linux/bpf.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='file' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='897' column='1' id='type-id-1274'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='f_u' type-id='type-id-1275' visibility='default' filepath='include/linux/fs.h' line='901' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='f_path' type-id='type-id-1276' visibility='default' filepath='include/linux/fs.h' line='902' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='f_inode' type-id='type-id-1129' visibility='default' filepath='include/linux/fs.h' line='903' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='f_op' type-id='type-id-268' visibility='default' filepath='include/linux/fs.h' line='904' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='f_lock' type-id='type-id-247' visibility='default' filepath='include/linux/fs.h' line='910' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='f_write_hint' type-id='type-id-1277' visibility='default' filepath='include/linux/fs.h' line='911' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='f_count' type-id='type-id-115' visibility='default' filepath='include/linux/fs.h' line='912' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='f_flags' type-id='type-id-5' visibility='default' filepath='include/linux/fs.h' line='913' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='f_mode' type-id='type-id-876' visibility='default' filepath='include/linux/fs.h' line='914' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='f_pos_lock' type-id='type-id-245' visibility='default' filepath='include/linux/fs.h' line='915' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='f_pos' type-id='type-id-763' visibility='default' filepath='include/linux/fs.h' line='916' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='f_owner' type-id='type-id-1278' visibility='default' filepath='include/linux/fs.h' line='917' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='f_cred' type-id='type-id-1279' visibility='default' filepath='include/linux/fs.h' line='918' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='f_ra' type-id='type-id-1280' visibility='default' filepath='include/linux/fs.h' line='919' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='f_version' type-id='type-id-40' visibility='default' filepath='include/linux/fs.h' line='921' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='f_security' type-id='type-id-15' visibility='default' filepath='include/linux/fs.h' line='923' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='private_data' type-id='type-id-15' visibility='default' filepath='include/linux/fs.h' line='926' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='f_ep_links' type-id='type-id-20' visibility='default' filepath='include/linux/fs.h' line='930' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='f_tfile_llink' type-id='type-id-20' visibility='default' filepath='include/linux/fs.h' line='931' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='f_mapping' type-id='type-id-1281' visibility='default' filepath='include/linux/fs.h' line='933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='f_wb_err' type-id='type-id-1282' visibility='default' filepath='include/linux/fs.h' line='934' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='llist_node' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/llist.h' line='70' column='1' id='type-id-281'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='type-id-282' visibility='default' filepath='include/linux/llist.h' line='71' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='callback_head' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/types.h' line='224' column='1' id='type-id-385'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='type-id-91' visibility='default' filepath='include/linux/types.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='func' type-id='type-id-89' visibility='default' filepath='include/linux/types.h' line='226' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='key_payload' size-in-bits='256' visibility='default' filepath='include/linux/key.h' line='94' column='1' id='type-id-1283'>
+        <data-member access='private'>
+          <var-decl name='rcu_data0' type-id='type-id-15' visibility='default' filepath='include/linux/key.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='data' type-id='type-id-1211' visibility='default' filepath='include/linux/key.h' line='96' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='path' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/path.h' line='8' column='1' id='type-id-1276'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mnt' type-id='type-id-1284' visibility='default' filepath='include/linux/path.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dentry' type-id='type-id-23' visibility='default' filepath='include/linux/path.h' line='10' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dentry' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/linux/dcache.h' line='88' column='1' id='type-id-1285'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='d_flags' type-id='type-id-5' visibility='default' filepath='include/linux/dcache.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='d_seq' type-id='type-id-387' visibility='default' filepath='include/linux/dcache.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='d_hash' type-id='type-id-1286' visibility='default' filepath='include/linux/dcache.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='d_parent' type-id='type-id-23' visibility='default' filepath='include/linux/dcache.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='d_name' type-id='type-id-1287' visibility='default' filepath='include/linux/dcache.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='d_inode' type-id='type-id-1129' visibility='default' filepath='include/linux/dcache.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='d_iname' type-id='type-id-35' visibility='default' filepath='include/linux/dcache.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='d_lockref' type-id='type-id-1288' visibility='default' filepath='include/linux/dcache.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='d_op' type-id='type-id-1289' visibility='default' filepath='include/linux/dcache.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='d_sb' type-id='type-id-28' visibility='default' filepath='include/linux/dcache.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='d_time' type-id='type-id-16' visibility='default' filepath='include/linux/dcache.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='d_fsdata' type-id='type-id-15' visibility='default' filepath='include/linux/dcache.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='' type-id='type-id-1290' visibility='default' filepath='include/linux/dcache.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='d_child' type-id='type-id-20' visibility='default' filepath='include/linux/dcache.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='d_subdirs' type-id='type-id-20' visibility='default' filepath='include/linux/dcache.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='d_u' type-id='type-id-1291' visibility='default' filepath='include/linux/dcache.h' line='119' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='seqcount_t' type-id='type-id-1292' filepath='include/linux/seqlock.h' line='53' column='1' id='type-id-387'/>
+      <class-decl name='seqcount' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/seqlock.h' line='48' column='1' id='type-id-1292'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sequence' type-id='type-id-5' visibility='default' filepath='include/linux/seqlock.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hlist_bl_node' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/list_bl.h' line='38' column='1' id='type-id-1286'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='type-id-1293' visibility='default' filepath='include/linux/list_bl.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pprev' type-id='type-id-1294' visibility='default' filepath='include/linux/list_bl.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='qstr' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/dcache.h' line='47' column='1' id='type-id-1287'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='type-id-1295' visibility='default' filepath='include/linux/dcache.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='type-id-878' visibility='default' filepath='include/linux/dcache.h' line='54' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/dcache.h' line='48' column='1' id='type-id-1295'>
+        <data-member access='private'>
+          <var-decl name='' type-id='type-id-1296' visibility='default' filepath='include/linux/dcache.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='hash_len' type-id='type-id-40' visibility='default' filepath='include/linux/dcache.h' line='52' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__7' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/dcache.h' line='49' column='1' id='type-id-1296'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hash' type-id='type-id-7' visibility='default' filepath='include/linux/dcache.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='len' type-id='type-id-7' visibility='default' filepath='include/linux/dcache.h' line='50' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inode' size-in-bits='4800' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='595' column='1' id='type-id-1297'>
+
+          <member-type access='public'>
+            <union-decl name='__anonymous_union__' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='663' column='1' id='type-id-1298'>
+              <data-member access='private'>
+                <var-decl name='i_dentry' type-id='type-id-186' visibility='default' filepath='include/linux/fs.h' line='664' column='1'/>
+              </data-member>
+              <data-member access='private'>
+                <var-decl name='i_rcu' type-id='type-id-385' visibility='default' filepath='include/linux/fs.h' line='665' column='1'/>
+              </data-member>
+            </union-decl>
+          </member-type>
+
+          <member-type access='public'>
+            <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='678' column='1' id='type-id-1299'>
+              <data-member access='private'>
+                <var-decl name='i_pipe' type-id='type-id-87' visibility='default' filepath='include/linux/fs.h' line='679' column='1'/>
+              </data-member>
+              <data-member access='private'>
+                <var-decl name='i_bdev' type-id='type-id-875' visibility='default' filepath='include/linux/fs.h' line='680' column='1'/>
+              </data-member>
+              <data-member access='private'>
+                <var-decl name='i_cdev' type-id='type-id-1300' visibility='default' filepath='include/linux/fs.h' line='681' column='1'/>
+              </data-member>
+              <data-member access='private'>
+                <var-decl name='i_link' type-id='type-id-2' visibility='default' filepath='include/linux/fs.h' line='682' column='1'/>
+              </data-member>
+              <data-member access='private'>
+                <var-decl name='i_dir_seq' type-id='type-id-5' visibility='default' filepath='include/linux/fs.h' line='683' column='1'/>
+              </data-member>
+            </union-decl>
+          </member-type>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='i_mode' type-id='type-id-329' visibility='default' filepath='include/linux/fs.h' line='596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='i_opflags' type-id='type-id-312' visibility='default' filepath='include/linux/fs.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='i_uid' type-id='type-id-42' visibility='default' filepath='include/linux/fs.h' line='598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='i_gid' type-id='type-id-330' visibility='default' filepath='include/linux/fs.h' line='599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='i_flags' type-id='type-id-5' visibility='default' filepath='include/linux/fs.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='i_acl' type-id='type-id-1301' visibility='default' filepath='include/linux/fs.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='i_default_acl' type-id='type-id-1301' visibility='default' filepath='include/linux/fs.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='i_op' type-id='type-id-1302' visibility='default' filepath='include/linux/fs.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='i_sb' type-id='type-id-28' visibility='default' filepath='include/linux/fs.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='i_mapping' type-id='type-id-1281' visibility='default' filepath='include/linux/fs.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='i_security' type-id='type-id-15' visibility='default' filepath='include/linux/fs.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='i_ino' type-id='type-id-16' visibility='default' filepath='include/linux/fs.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='' type-id='type-id-1303' visibility='default' filepath='include/linux/fs.h' line='624' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='i_rdev' type-id='type-id-269' visibility='default' filepath='include/linux/fs.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='i_size' type-id='type-id-763' visibility='default' filepath='include/linux/fs.h' line='629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='i_atime' type-id='type-id-355' visibility='default' filepath='include/linux/fs.h' line='630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='i_mtime' type-id='type-id-355' visibility='default' filepath='include/linux/fs.h' line='631' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='i_ctime' type-id='type-id-355' visibility='default' filepath='include/linux/fs.h' line='632' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='i_lock' type-id='type-id-247' visibility='default' filepath='include/linux/fs.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='i_bytes' type-id='type-id-312' visibility='default' filepath='include/linux/fs.h' line='634' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1136'>
+          <var-decl name='i_blkbits' type-id='type-id-214' visibility='default' filepath='include/linux/fs.h' line='635' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1144'>
+          <var-decl name='i_write_hint' type-id='type-id-214' visibility='default' filepath='include/linux/fs.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='i_blocks' type-id='type-id-1304' visibility='default' filepath='include/linux/fs.h' line='637' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='i_state' type-id='type-id-16' visibility='default' filepath='include/linux/fs.h' line='644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='i_rwsem' type-id='type-id-246' visibility='default' filepath='include/linux/fs.h' line='645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='dirtied_when' type-id='type-id-16' visibility='default' filepath='include/linux/fs.h' line='647' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='dirtied_time_when' type-id='type-id-16' visibility='default' filepath='include/linux/fs.h' line='648' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='i_hash' type-id='type-id-520' visibility='default' filepath='include/linux/fs.h' line='650' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='i_io_list' type-id='type-id-20' visibility='default' filepath='include/linux/fs.h' line='651' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='i_wb' type-id='type-id-1305' visibility='default' filepath='include/linux/fs.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='i_wb_frn_winner' type-id='type-id-17' visibility='default' filepath='include/linux/fs.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='i_wb_frn_avg_time' type-id='type-id-688' visibility='default' filepath='include/linux/fs.h' line='657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2096'>
+          <var-decl name='i_wb_frn_history' type-id='type-id-688' visibility='default' filepath='include/linux/fs.h' line='658' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='i_lru' type-id='type-id-20' visibility='default' filepath='include/linux/fs.h' line='660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='i_sb_list' type-id='type-id-20' visibility='default' filepath='include/linux/fs.h' line='661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='i_wb_list' type-id='type-id-20' visibility='default' filepath='include/linux/fs.h' line='662' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='i_version' type-id='type-id-113' visibility='default' filepath='include/linux/fs.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='i_count' type-id='type-id-26' visibility='default' filepath='include/linux/fs.h' line='668' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2720'>
+          <var-decl name='i_dio_count' type-id='type-id-26' visibility='default' filepath='include/linux/fs.h' line='669' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='i_writecount' type-id='type-id-26' visibility='default' filepath='include/linux/fs.h' line='670' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='i_fop' type-id='type-id-268' visibility='default' filepath='include/linux/fs.h' line='674' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='i_flctx' type-id='type-id-1306' visibility='default' filepath='include/linux/fs.h' line='675' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='i_data' type-id='type-id-1307' visibility='default' filepath='include/linux/fs.h' line='676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='i_devices' type-id='type-id-20' visibility='default' filepath='include/linux/fs.h' line='677' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='i_generation' type-id='type-id-511' visibility='default' filepath='include/linux/fs.h' line='686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4512'>
+          <var-decl name='i_fsnotify_mask' type-id='type-id-511' visibility='default' filepath='include/linux/fs.h' line='689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='i_fsnotify_marks' type-id='type-id-1308' visibility='default' filepath='include/linux/fs.h' line='690' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='i_crypt_info' type-id='type-id-1309' visibility='default' filepath='include/linux/fs.h' line='694' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='i_verity_info' type-id='type-id-1310' visibility='default' filepath='include/linux/fs.h' line='698' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='i_private' type-id='type-id-15' visibility='default' filepath='include/linux/fs.h' line='701' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='umode_t' type-id='type-id-312' filepath='include/linux/types.h' line='19' column='1' id='type-id-329'/>
+      <typedef-decl name='kuid_t' type-id='type-id-1311' filepath='include/linux/uidgid.h' line='23' column='1' id='type-id-42'/>
+      <class-decl name='__anonymous_struct__8' size-in-bits='32' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-42' visibility='default' filepath='include/linux/uidgid.h' line='21' column='1' id='type-id-1311'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='val' type-id='type-id-350' visibility='default' filepath='include/linux/uidgid.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='uid_t' type-id='type-id-1312' filepath='include/linux/types.h' line='32' column='1' id='type-id-350'/>
+      <typedef-decl name='__kernel_uid32_t' type-id='type-id-5' filepath='include/uapi/asm-generic/posix_types.h' line='49' column='1' id='type-id-1312'/>
+      <typedef-decl name='kgid_t' type-id='type-id-1313' filepath='include/linux/uidgid.h' line='28' column='1' id='type-id-330'/>
+      <class-decl name='__anonymous_struct__9' size-in-bits='32' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-330' visibility='default' filepath='include/linux/uidgid.h' line='26' column='1' id='type-id-1313'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='val' type-id='type-id-351' visibility='default' filepath='include/linux/uidgid.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='gid_t' type-id='type-id-1314' filepath='include/linux/types.h' line='33' column='1' id='type-id-351'/>
+      <typedef-decl name='__kernel_gid32_t' type-id='type-id-5' filepath='include/uapi/asm-generic/posix_types.h' line='50' column='1' id='type-id-1314'/>
+      <class-decl name='inode_operations' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1802' column='1' id='type-id-1315'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lookup' type-id='type-id-1316' visibility='default' filepath='include/linux/fs.h' line='1803' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get_link' type-id='type-id-1317' visibility='default' filepath='include/linux/fs.h' line='1804' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='permission' type-id='type-id-1318' visibility='default' filepath='include/linux/fs.h' line='1805' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='permission2' type-id='type-id-1319' visibility='default' filepath='include/linux/fs.h' line='1806' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_acl' type-id='type-id-1320' visibility='default' filepath='include/linux/fs.h' line='1807' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='readlink' type-id='type-id-1321' visibility='default' filepath='include/linux/fs.h' line='1809' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='create' type-id='type-id-1322' visibility='default' filepath='include/linux/fs.h' line='1811' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='link' type-id='type-id-1323' visibility='default' filepath='include/linux/fs.h' line='1812' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='unlink' type-id='type-id-1324' visibility='default' filepath='include/linux/fs.h' line='1813' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='symlink' type-id='type-id-1325' visibility='default' filepath='include/linux/fs.h' line='1814' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mkdir' type-id='type-id-1326' visibility='default' filepath='include/linux/fs.h' line='1815' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='rmdir' type-id='type-id-1324' visibility='default' filepath='include/linux/fs.h' line='1816' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mknod' type-id='type-id-1327' visibility='default' filepath='include/linux/fs.h' line='1817' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='rename' type-id='type-id-1328' visibility='default' filepath='include/linux/fs.h' line='1818' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='setattr' type-id='type-id-1329' visibility='default' filepath='include/linux/fs.h' line='1820' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='setattr2' type-id='type-id-1330' visibility='default' filepath='include/linux/fs.h' line='1821' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='getattr' type-id='type-id-1331' visibility='default' filepath='include/linux/fs.h' line='1822' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='listxattr' type-id='type-id-1332' visibility='default' filepath='include/linux/fs.h' line='1823' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='fiemap' type-id='type-id-1333' visibility='default' filepath='include/linux/fs.h' line='1824' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='update_time' type-id='type-id-1334' visibility='default' filepath='include/linux/fs.h' line='1826' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='atomic_open' type-id='type-id-1335' visibility='default' filepath='include/linux/fs.h' line='1827' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='tmpfile' type-id='type-id-1326' visibility='default' filepath='include/linux/fs.h' line='1830' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='set_acl' type-id='type-id-1336' visibility='default' filepath='include/linux/fs.h' line='1831' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='delayed_call' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/delayed_call.h' line='10' column='1' id='type-id-1337'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fn' type-id='type-id-517' visibility='default' filepath='include/linux/delayed_call.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='arg' type-id='type-id-15' visibility='default' filepath='include/linux/delayed_call.h' line='12' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='dev_t' type-id='type-id-1338' filepath='include/linux/types.h' line='16' column='1' id='type-id-269'/>
+      <typedef-decl name='__kernel_dev_t' type-id='type-id-7' filepath='include/linux/types.h' line='13' column='1' id='type-id-1338'/>
+      <class-decl name='iattr' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='216' column='1' id='type-id-1339'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ia_valid' type-id='type-id-5' visibility='default' filepath='include/linux/fs.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ia_mode' type-id='type-id-329' visibility='default' filepath='include/linux/fs.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ia_uid' type-id='type-id-42' visibility='default' filepath='include/linux/fs.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='ia_gid' type-id='type-id-330' visibility='default' filepath='include/linux/fs.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ia_size' type-id='type-id-763' visibility='default' filepath='include/linux/fs.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ia_atime' type-id='type-id-355' visibility='default' filepath='include/linux/fs.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ia_mtime' type-id='type-id-355' visibility='default' filepath='include/linux/fs.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ia_ctime' type-id='type-id-355' visibility='default' filepath='include/linux/fs.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ia_file' type-id='type-id-83' visibility='default' filepath='include/linux/fs.h' line='231' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='loff_t' type-id='type-id-1340' filepath='include/linux/types.h' line='46' column='1' id='type-id-763'/>
+      <typedef-decl name='__kernel_loff_t' type-id='type-id-1148' filepath='include/uapi/asm-generic/posix_types.h' line='88' column='1' id='type-id-1340'/>
+      <class-decl name='timespec64' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/time64.h' line='20' column='1' id='type-id-355'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tv_sec' type-id='type-id-1341' visibility='default' filepath='include/linux/time64.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tv_nsec' type-id='type-id-192' visibility='default' filepath='include/linux/time64.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='time64_t' type-id='type-id-900' filepath='include/linux/time64.h' line='7' column='1' id='type-id-1341'/>
+      <typedef-decl name='__s64' type-id='type-id-1148' filepath='include/uapi/asm-generic/int-ll64.h' line='30' column='1' id='type-id-900'/>
+      <class-decl name='kstat' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/stat.h' line='24' column='1' id='type-id-1342'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='result_mask' type-id='type-id-7' visibility='default' filepath='include/linux/stat.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='mode' type-id='type-id-329' visibility='default' filepath='include/linux/stat.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nlink' type-id='type-id-5' visibility='default' filepath='include/linux/stat.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='blksize' type-id='type-id-1343' visibility='default' filepath='include/linux/stat.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='attributes' type-id='type-id-40' visibility='default' filepath='include/linux/stat.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='attributes_mask' type-id='type-id-40' visibility='default' filepath='include/linux/stat.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ino' type-id='type-id-40' visibility='default' filepath='include/linux/stat.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dev' type-id='type-id-269' visibility='default' filepath='include/linux/stat.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='rdev' type-id='type-id-269' visibility='default' filepath='include/linux/stat.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='uid' type-id='type-id-42' visibility='default' filepath='include/linux/stat.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='gid' type-id='type-id-330' visibility='default' filepath='include/linux/stat.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='size' type-id='type-id-763' visibility='default' filepath='include/linux/stat.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='atime' type-id='type-id-355' visibility='default' filepath='include/linux/stat.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mtime' type-id='type-id-355' visibility='default' filepath='include/linux/stat.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='ctime' type-id='type-id-355' visibility='default' filepath='include/linux/stat.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='btime' type-id='type-id-355' visibility='default' filepath='include/linux/stat.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='blocks' type-id='type-id-40' visibility='default' filepath='include/linux/stat.h' line='48' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='uint32_t' type-id='type-id-7' filepath='include/linux/types.h' line='109' column='1' id='type-id-1343'/>
+      <typedef-decl name='ssize_t' type-id='type-id-1344' filepath='include/linux/types.h' line='60' column='1' id='type-id-86'/>
+      <typedef-decl name='__kernel_ssize_t' type-id='type-id-105' filepath='include/uapi/asm-generic/posix_types.h' line='73' column='1' id='type-id-1344'/>
+      <typedef-decl name='__kernel_long_t' type-id='type-id-192' filepath='include/uapi/asm-generic/posix_types.h' line='15' column='1' id='type-id-105'/>
+      <class-decl name='fiemap_extent_info' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1688' column='1' id='type-id-1345'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fi_flags' type-id='type-id-5' visibility='default' filepath='include/linux/fs.h' line='1689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='fi_extents_mapped' type-id='type-id-5' visibility='default' filepath='include/linux/fs.h' line='1690' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fi_extents_max' type-id='type-id-5' visibility='default' filepath='include/linux/fs.h' line='1691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fi_extents_start' type-id='type-id-1346' visibility='default' filepath='include/linux/fs.h' line='1692' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fiemap_extent' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/uapi/linux/fiemap.h' line='17' column='1' id='type-id-1347'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fe_logical' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/fiemap.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fe_physical' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/fiemap.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fe_length' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/fiemap.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fe_reserved64' type-id='type-id-937' visibility='default' filepath='include/uapi/linux/fiemap.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fe_flags' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fiemap.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='fe_reserved' type-id='type-id-933' visibility='default' filepath='include/uapi/linux/fiemap.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='super_block' size-in-bits='12288' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1375' column='1' id='type-id-1348'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='s_list' type-id='type-id-20' visibility='default' filepath='include/linux/fs.h' line='1376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='s_dev' type-id='type-id-269' visibility='default' filepath='include/linux/fs.h' line='1377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='s_blocksize_bits' type-id='type-id-216' visibility='default' filepath='include/linux/fs.h' line='1378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='s_blocksize' type-id='type-id-16' visibility='default' filepath='include/linux/fs.h' line='1379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='s_maxbytes' type-id='type-id-763' visibility='default' filepath='include/linux/fs.h' line='1380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='s_type' type-id='type-id-1349' visibility='default' filepath='include/linux/fs.h' line='1381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='s_op' type-id='type-id-1350' visibility='default' filepath='include/linux/fs.h' line='1382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dq_op' type-id='type-id-1351' visibility='default' filepath='include/linux/fs.h' line='1383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='s_qcop' type-id='type-id-1352' visibility='default' filepath='include/linux/fs.h' line='1384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='s_export_op' type-id='type-id-1353' visibility='default' filepath='include/linux/fs.h' line='1385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='s_flags' type-id='type-id-16' visibility='default' filepath='include/linux/fs.h' line='1386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='s_iflags' type-id='type-id-16' visibility='default' filepath='include/linux/fs.h' line='1387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='s_magic' type-id='type-id-16' visibility='default' filepath='include/linux/fs.h' line='1388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='s_root' type-id='type-id-23' visibility='default' filepath='include/linux/fs.h' line='1389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='s_umount' type-id='type-id-246' visibility='default' filepath='include/linux/fs.h' line='1390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='s_count' type-id='type-id-17' visibility='default' filepath='include/linux/fs.h' line='1391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='s_active' type-id='type-id-26' visibility='default' filepath='include/linux/fs.h' line='1392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='s_security' type-id='type-id-15' visibility='default' filepath='include/linux/fs.h' line='1394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='s_xattr' type-id='type-id-1354' visibility='default' filepath='include/linux/fs.h' line='1396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='s_cop' type-id='type-id-1355' visibility='default' filepath='include/linux/fs.h' line='1398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='s_master_keys' type-id='type-id-1356' visibility='default' filepath='include/linux/fs.h' line='1399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='s_vop' type-id='type-id-1357' visibility='default' filepath='include/linux/fs.h' line='1402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='s_roots' type-id='type-id-1358' visibility='default' filepath='include/linux/fs.h' line='1404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='s_mounts' type-id='type-id-20' visibility='default' filepath='include/linux/fs.h' line='1405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='s_bdev' type-id='type-id-875' visibility='default' filepath='include/linux/fs.h' line='1406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='s_bdi' type-id='type-id-1359' visibility='default' filepath='include/linux/fs.h' line='1407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='s_mtd' type-id='type-id-1360' visibility='default' filepath='include/linux/fs.h' line='1408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='s_instances' type-id='type-id-520' visibility='default' filepath='include/linux/fs.h' line='1409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='s_quota_types' type-id='type-id-5' visibility='default' filepath='include/linux/fs.h' line='1410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='s_dquot' type-id='type-id-1361' visibility='default' filepath='include/linux/fs.h' line='1411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='s_writers' type-id='type-id-1362' visibility='default' filepath='include/linux/fs.h' line='1413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='s_id' type-id='type-id-373' visibility='default' filepath='include/linux/fs.h' line='1415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='s_uuid' type-id='type-id-1363' visibility='default' filepath='include/linux/fs.h' line='1416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='s_fs_info' type-id='type-id-15' visibility='default' filepath='include/linux/fs.h' line='1418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='s_max_links' type-id='type-id-5' visibility='default' filepath='include/linux/fs.h' line='1419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8480'>
+          <var-decl name='s_mode' type-id='type-id-876' visibility='default' filepath='include/linux/fs.h' line='1420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='s_time_gran' type-id='type-id-7' visibility='default' filepath='include/linux/fs.h' line='1424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='s_vfs_rename_mutex' type-id='type-id-245' visibility='default' filepath='include/linux/fs.h' line='1430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='s_subtype' type-id='type-id-2' visibility='default' filepath='include/linux/fs.h' line='1436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='s_d_op' type-id='type-id-1289' visibility='default' filepath='include/linux/fs.h' line='1438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='cleancache_poolid' type-id='type-id-17' visibility='default' filepath='include/linux/fs.h' line='1443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='s_shrink' type-id='type-id-1364' visibility='default' filepath='include/linux/fs.h' line='1445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='s_remove_count' type-id='type-id-115' visibility='default' filepath='include/linux/fs.h' line='1448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9600'>
+          <var-decl name='s_fsnotify_inode_refs' type-id='type-id-115' visibility='default' filepath='include/linux/fs.h' line='1451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='s_readonly_remount' type-id='type-id-17' visibility='default' filepath='include/linux/fs.h' line='1454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='s_dio_done_wq' type-id='type-id-654' visibility='default' filepath='include/linux/fs.h' line='1457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='s_pins' type-id='type-id-186' visibility='default' filepath='include/linux/fs.h' line='1458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='s_user_ns' type-id='type-id-917' visibility='default' filepath='include/linux/fs.h' line='1465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='s_dentry_lru' type-id='type-id-1365' visibility='default' filepath='include/linux/fs.h' line='1471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='s_inode_lru' type-id='type-id-1365' visibility='default' filepath='include/linux/fs.h' line='1472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/linux/fs.h' line='1473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11136'>
+          <var-decl name='destroy_work' type-id='type-id-255' visibility='default' filepath='include/linux/fs.h' line='1474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11392'>
+          <var-decl name='s_sync_lock' type-id='type-id-245' visibility='default' filepath='include/linux/fs.h' line='1476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11648'>
+          <var-decl name='s_stack_depth' type-id='type-id-17' visibility='default' filepath='include/linux/fs.h' line='1481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='s_inode_list_lock' type-id='type-id-247' visibility='default' filepath='include/linux/fs.h' line='1484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11840'>
+          <var-decl name='s_inodes' type-id='type-id-20' visibility='default' filepath='include/linux/fs.h' line='1485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11968'>
+          <var-decl name='s_inode_wblist_lock' type-id='type-id-247' visibility='default' filepath='include/linux/fs.h' line='1487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='s_inodes_wb' type-id='type-id-20' visibility='default' filepath='include/linux/fs.h' line='1488' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='file_system_type' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='2156' column='1' id='type-id-1366'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/fs.h' line='2157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fs_flags' type-id='type-id-17' visibility='default' filepath='include/linux/fs.h' line='2158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mount' type-id='type-id-1367' visibility='default' filepath='include/linux/fs.h' line='2164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mount2' type-id='type-id-1368' visibility='default' filepath='include/linux/fs.h' line='2166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='alloc_mnt_data' type-id='type-id-1369' visibility='default' filepath='include/linux/fs.h' line='2168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='kill_sb' type-id='type-id-1370' visibility='default' filepath='include/linux/fs.h' line='2169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='include/linux/fs.h' line='2170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='next' type-id='type-id-1349' visibility='default' filepath='include/linux/fs.h' line='2171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='fs_supers' type-id='type-id-186' visibility='default' filepath='include/linux/fs.h' line='2172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='s_lock_key' type-id='type-id-1146' visibility='default' filepath='include/linux/fs.h' line='2174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='s_umount_key' type-id='type-id-1146' visibility='default' filepath='include/linux/fs.h' line='2175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='s_vfs_rename_key' type-id='type-id-1146' visibility='default' filepath='include/linux/fs.h' line='2176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='s_writers_key' type-id='type-id-1147' visibility='default' filepath='include/linux/fs.h' line='2177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='i_lock_key' type-id='type-id-1146' visibility='default' filepath='include/linux/fs.h' line='2179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='i_mutex_key' type-id='type-id-1146' visibility='default' filepath='include/linux/fs.h' line='2180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='i_mutex_dir_key' type-id='type-id-1146' visibility='default' filepath='include/linux/fs.h' line='2181' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='module' size-in-bits='6656' is-struct='yes' visibility='default' filepath='include/linux/module.h' line='331' column='1' id='type-id-1371'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='type-id-1372' visibility='default' filepath='include/linux/module.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/module.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='type-id-974' visibility='default' filepath='include/linux/module.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mkobj' type-id='type-id-1373' visibility='default' filepath='include/linux/module.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='modinfo_attrs' type-id='type-id-1374' visibility='default' filepath='include/linux/module.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='version' type-id='type-id-4' visibility='default' filepath='include/linux/module.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='srcversion' type-id='type-id-4' visibility='default' filepath='include/linux/module.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='holders_dir' type-id='type-id-379' visibility='default' filepath='include/linux/module.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='syms' type-id='type-id-1375' visibility='default' filepath='include/linux/module.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='crcs' type-id='type-id-1376' visibility='default' filepath='include/linux/module.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='num_syms' type-id='type-id-5' visibility='default' filepath='include/linux/module.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='cfi_check' type-id='type-id-1377' visibility='default' filepath='include/linux/module.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='param_lock' type-id='type-id-245' visibility='default' filepath='include/linux/module.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='kp' type-id='type-id-1378' visibility='default' filepath='include/linux/module.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='num_kp' type-id='type-id-5' visibility='default' filepath='include/linux/module.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2272'>
+          <var-decl name='num_gpl_syms' type-id='type-id-5' visibility='default' filepath='include/linux/module.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='gpl_syms' type-id='type-id-1375' visibility='default' filepath='include/linux/module.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='gpl_crcs' type-id='type-id-1376' visibility='default' filepath='include/linux/module.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='sig_ok' type-id='type-id-33' visibility='default' filepath='include/linux/module.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2440'>
+          <var-decl name='async_probe_requested' type-id='type-id-33' visibility='default' filepath='include/linux/module.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='gpl_future_syms' type-id='type-id-1375' visibility='default' filepath='include/linux/module.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='gpl_future_crcs' type-id='type-id-1376' visibility='default' filepath='include/linux/module.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='num_gpl_future_syms' type-id='type-id-5' visibility='default' filepath='include/linux/module.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2656'>
+          <var-decl name='num_exentries' type-id='type-id-5' visibility='default' filepath='include/linux/module.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='extable' type-id='type-id-1379' visibility='default' filepath='include/linux/module.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='init' type-id='type-id-1380' visibility='default' filepath='include/linux/module.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='core_layout' type-id='type-id-1381' visibility='default' filepath='include/linux/module.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='init_layout' type-id='type-id-1381' visibility='default' filepath='include/linux/module.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='arch' type-id='type-id-1382' visibility='default' filepath='include/linux/module.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='taints' type-id='type-id-16' visibility='default' filepath='include/linux/module.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='num_bugs' type-id='type-id-5' visibility='default' filepath='include/linux/module.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='bug_list' type-id='type-id-20' visibility='default' filepath='include/linux/module.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='bug_table' type-id='type-id-1383' visibility='default' filepath='include/linux/module.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='kallsyms' type-id='type-id-1384' visibility='default' filepath='include/linux/module.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='core_kallsyms' type-id='type-id-1385' visibility='default' filepath='include/linux/module.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='sect_attrs' type-id='type-id-1386' visibility='default' filepath='include/linux/module.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='notes_attrs' type-id='type-id-1387' visibility='default' filepath='include/linux/module.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='args' type-id='type-id-2' visibility='default' filepath='include/linux/module.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='percpu' type-id='type-id-15' visibility='default' filepath='include/linux/module.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='percpu_size' type-id='type-id-5' visibility='default' filepath='include/linux/module.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5536'>
+          <var-decl name='num_tracepoints' type-id='type-id-5' visibility='default' filepath='include/linux/module.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='tracepoints_ptrs' type-id='type-id-1388' visibility='default' filepath='include/linux/module.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='num_trace_bprintk_fmt' type-id='type-id-5' visibility='default' filepath='include/linux/module.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='trace_bprintk_fmt_start' type-id='type-id-1389' visibility='default' filepath='include/linux/module.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='trace_events' type-id='type-id-1390' visibility='default' filepath='include/linux/module.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='num_trace_events' type-id='type-id-5' visibility='default' filepath='include/linux/module.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='trace_evals' type-id='type-id-1391' visibility='default' filepath='include/linux/module.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='num_trace_evals' type-id='type-id-5' visibility='default' filepath='include/linux/module.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='source_list' type-id='type-id-20' visibility='default' filepath='include/linux/module.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='target_list' type-id='type-id-20' visibility='default' filepath='include/linux/module.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='exit' type-id='type-id-1392' visibility='default' filepath='include/linux/module.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='refcnt' type-id='type-id-26' visibility='default' filepath='include/linux/module.h' line='479' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='module_state' filepath='include/linux/module.h' line='280' column='1' id='type-id-1372'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='MODULE_STATE_LIVE' value='0'/>
+        <enumerator name='MODULE_STATE_COMING' value='1'/>
+        <enumerator name='MODULE_STATE_GOING' value='2'/>
+        <enumerator name='MODULE_STATE_UNFORMED' value='3'/>
+      </enum-decl>
+      <class-decl name='module_kobject' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/module.h' line='45' column='1' id='type-id-1373'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='type-id-267' visibility='default' filepath='include/linux/module.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='mod' type-id='type-id-260' visibility='default' filepath='include/linux/module.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='drivers_dir' type-id='type-id-379' visibility='default' filepath='include/linux/module.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mp' type-id='type-id-1393' visibility='default' filepath='include/linux/module.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='kobj_completion' type-id='type-id-1394' visibility='default' filepath='include/linux/module.h' line='50' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kobject' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/kobject.h' line='65' column='1' id='type-id-267'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/kobject.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='entry' type-id='type-id-20' visibility='default' filepath='include/linux/kobject.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='parent' type-id='type-id-379' visibility='default' filepath='include/linux/kobject.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='kset' type-id='type-id-1395' visibility='default' filepath='include/linux/kobject.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ktype' type-id='type-id-1396' visibility='default' filepath='include/linux/kobject.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sd' type-id='type-id-1397' visibility='default' filepath='include/linux/kobject.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='kref' type-id='type-id-239' visibility='default' filepath='include/linux/kobject.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='state_initialized' type-id='type-id-5' visibility='default' filepath='include/linux/kobject.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='state_in_sysfs' type-id='type-id-5' visibility='default' filepath='include/linux/kobject.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='state_add_uevent_sent' type-id='type-id-5' visibility='default' filepath='include/linux/kobject.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='state_remove_uevent_sent' type-id='type-id-5' visibility='default' filepath='include/linux/kobject.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='uevent_suppress' type-id='type-id-5' visibility='default' filepath='include/linux/kobject.h' line='80' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kset' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/kobject.h' line='192' column='1' id='type-id-1398'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/kobject.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list_lock' type-id='type-id-247' visibility='default' filepath='include/linux/kobject.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='kobj' type-id='type-id-267' visibility='default' filepath='include/linux/kobject.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='uevent_ops' type-id='type-id-1399' visibility='default' filepath='include/linux/kobject.h' line='196' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='spinlock_t' type-id='type-id-436' filepath='include/linux/spinlock_types.h' line='73' column='1' id='type-id-247'/>
+      <class-decl name='spinlock' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/spinlock_types.h' line='61' column='1' id='type-id-436'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='type-id-1400' visibility='default' filepath='include/linux/spinlock_types.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__4' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/spinlock_types.h' line='62' column='1' id='type-id-1400'>
+        <data-member access='private'>
+          <var-decl name='rlock' type-id='type-id-1401' visibility='default' filepath='include/linux/spinlock_types.h' line='63' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='raw_spinlock' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/spinlock_types.h' line='20' column='1' id='type-id-1401'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='raw_lock' type-id='type-id-32' visibility='default' filepath='include/linux/spinlock_types.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='arch_spinlock_t' type-id='type-id-1402' filepath='include/asm-generic/qspinlock_types.h' line='61' column='1' id='type-id-32'/>
+      <class-decl name='qspinlock' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='31' column='1' id='type-id-1402'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='type-id-1403' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__5' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='32' column='1' id='type-id-1403'>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='45' column='1' id='type-id-1404'>
+            <data-member access='public' layout-offset-in-bits='0'>
+              <var-decl name='locked_pending' type-id='type-id-688' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='46' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='16'>
+              <var-decl name='tail' type-id='type-id-688' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='47' column='1'/>
+            </data-member>
+          </class-decl>
+        </member-type>
+        <data-member access='private'>
+          <var-decl name='val' type-id='type-id-26' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='type-id-1405' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='41' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__10' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='41' column='1' id='type-id-1405'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='locked' type-id='type-id-214' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='pending' type-id='type-id-214' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kset_uevent_ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/kobject.h' line='156' column='1' id='type-id-1406'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filter' type-id='type-id-1407' visibility='default' filepath='include/linux/kobject.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='type-id-1408' visibility='default' filepath='include/linux/kobject.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='uevent' type-id='type-id-1409' visibility='default' filepath='include/linux/kobject.h' line='159' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kobj_uevent_env' size-in-bits='18688' is-struct='yes' visibility='default' filepath='include/linux/kobject.h' line='148' column='1' id='type-id-1410'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='argv' type-id='type-id-963' visibility='default' filepath='include/linux/kobject.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='envp' type-id='type-id-962' visibility='default' filepath='include/linux/kobject.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='envp_idx' type-id='type-id-17' visibility='default' filepath='include/linux/kobject.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2272'>
+          <var-decl name='buf' type-id='type-id-969' visibility='default' filepath='include/linux/kobject.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18656'>
+          <var-decl name='buflen' type-id='type-id-17' visibility='default' filepath='include/linux/kobject.h' line='153' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kobj_type' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/kobject.h' line='139' column='1' id='type-id-1411'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='release' type-id='type-id-1412' visibility='default' filepath='include/linux/kobject.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sysfs_ops' type-id='type-id-1413' visibility='default' filepath='include/linux/kobject.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='default_attrs' type-id='type-id-1414' visibility='default' filepath='include/linux/kobject.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='child_ns_type' type-id='type-id-1415' visibility='default' filepath='include/linux/kobject.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='namespace' type-id='type-id-1416' visibility='default' filepath='include/linux/kobject.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_ownership' type-id='type-id-1417' visibility='default' filepath='include/linux/kobject.h' line='145' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sysfs_ops' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/sysfs.h' line='214' column='1' id='type-id-1418'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='show' type-id='type-id-1419' visibility='default' filepath='include/linux/sysfs.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='store' type-id='type-id-1420' visibility='default' filepath='include/linux/sysfs.h' line='216' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='attribute' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/sysfs.h' line='30' column='1' id='type-id-619'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/sysfs.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mode' type-id='type-id-329' visibility='default' filepath='include/linux/sysfs.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kobj_ns_type_operations' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/kobject_ns.h' line='39' column='1' id='type-id-1421'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='type-id-1422' visibility='default' filepath='include/linux/kobject_ns.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='current_may_mount' type-id='type-id-1423' visibility='default' filepath='include/linux/kobject_ns.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='grab_current_ns' type-id='type-id-1369' visibility='default' filepath='include/linux/kobject_ns.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='netlink_ns' type-id='type-id-1424' visibility='default' filepath='include/linux/kobject_ns.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='initial_ns' type-id='type-id-1369' visibility='default' filepath='include/linux/kobject_ns.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='drop_ns' type-id='type-id-517' visibility='default' filepath='include/linux/kobject_ns.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='kobj_ns_type' filepath='include/linux/kobject_ns.h' line='26' column='1' id='type-id-1422'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='KOBJ_NS_TYPE_NONE' value='0'/>
+        <enumerator name='KOBJ_NS_TYPE_NET' value='1'/>
+        <enumerator name='KOBJ_NS_TYPES' value='2'/>
+      </enum-decl>
+      <class-decl name='kernfs_node' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/kernfs.h' line='130' column='1' id='type-id-1425'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='type-id-26' visibility='default' filepath='include/linux/kernfs.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='active' type-id='type-id-26' visibility='default' filepath='include/linux/kernfs.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='parent' type-id='type-id-1397' visibility='default' filepath='include/linux/kernfs.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/kernfs.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rb' type-id='type-id-422' visibility='default' filepath='include/linux/kernfs.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ns' type-id='type-id-15' visibility='default' filepath='include/linux/kernfs.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='hash' type-id='type-id-5' visibility='default' filepath='include/linux/kernfs.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='' type-id='type-id-1426' visibility='default' filepath='include/linux/kernfs.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='priv' type-id='type-id-15' visibility='default' filepath='include/linux/kernfs.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='id' type-id='type-id-1427' visibility='default' filepath='include/linux/kernfs.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='flags' type-id='type-id-312' visibility='default' filepath='include/linux/kernfs.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='912'>
+          <var-decl name='mode' type-id='type-id-329' visibility='default' filepath='include/linux/kernfs.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='iattr' type-id='type-id-1428' visibility='default' filepath='include/linux/kernfs.h' line='160' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__6' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/kernfs.h' line='149' column='1' id='type-id-1426'>
+        <data-member access='private'>
+          <var-decl name='dir' type-id='type-id-1429' visibility='default' filepath='include/linux/kernfs.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='symlink' type-id='type-id-1430' visibility='default' filepath='include/linux/kernfs.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='attr' type-id='type-id-1431' visibility='default' filepath='include/linux/kernfs.h' line='152' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='kernfs_elem_dir' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/kernfs.h' line='83' column='1' id='type-id-1429'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='subdirs' type-id='type-id-16' visibility='default' filepath='include/linux/kernfs.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='children' type-id='type-id-416' visibility='default' filepath='include/linux/kernfs.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='root' type-id='type-id-1432' visibility='default' filepath='include/linux/kernfs.h' line='92' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rb_root' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/rbtree.h' line='43' column='1' id='type-id-416'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb_node' type-id='type-id-1238' visibility='default' filepath='include/linux/rbtree.h' line='44' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernfs_root' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/kernfs.h' line='183' column='1' id='type-id-1433'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kn' type-id='type-id-1397' visibility='default' filepath='include/linux/kernfs.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='type-id-5' visibility='default' filepath='include/linux/kernfs.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ino_idr' type-id='type-id-1434' visibility='default' filepath='include/linux/kernfs.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='last_ino' type-id='type-id-7' visibility='default' filepath='include/linux/kernfs.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='next_generation' type-id='type-id-7' visibility='default' filepath='include/linux/kernfs.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='syscall_ops' type-id='type-id-1435' visibility='default' filepath='include/linux/kernfs.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='supers' type-id='type-id-20' visibility='default' filepath='include/linux/kernfs.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='deactivate_waitq' type-id='type-id-225' visibility='default' filepath='include/linux/kernfs.h' line='197' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='idr' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/idr.h' line='19' column='1' id='type-id-1434'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='idr_rt' type-id='type-id-415' visibility='default' filepath='include/linux/idr.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='idr_base' type-id='type-id-5' visibility='default' filepath='include/linux/idr.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='idr_next' type-id='type-id-5' visibility='default' filepath='include/linux/idr.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='radix_tree_root' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/radix-tree.h' line='112' column='1' id='type-id-415'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='xa_lock' type-id='type-id-247' visibility='default' filepath='include/linux/radix-tree.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='gfp_mask' type-id='type-id-485' visibility='default' filepath='include/linux/radix-tree.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rnode' type-id='type-id-1436' visibility='default' filepath='include/linux/radix-tree.h' line='115' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='gfp_t' type-id='type-id-5' filepath='include/linux/types.h' line='158' column='1' id='type-id-485'/>
+      <class-decl name='radix_tree_node' size-in-bits='4608' is-struct='yes' visibility='default' filepath='include/linux/radix-tree.h' line='92' column='1' id='type-id-1437'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='shift' type-id='type-id-216' visibility='default' filepath='include/linux/radix-tree.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='offset' type-id='type-id-216' visibility='default' filepath='include/linux/radix-tree.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='count' type-id='type-id-216' visibility='default' filepath='include/linux/radix-tree.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='exceptional' type-id='type-id-216' visibility='default' filepath='include/linux/radix-tree.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='parent' type-id='type-id-1436' visibility='default' filepath='include/linux/radix-tree.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='root' type-id='type-id-1438' visibility='default' filepath='include/linux/radix-tree.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='type-id-1439' visibility='default' filepath='include/linux/radix-tree.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='slots' type-id='type-id-1212' visibility='default' filepath='include/linux/radix-tree.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='tags' type-id='type-id-1201' visibility='default' filepath='include/linux/radix-tree.h' line='104' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__7' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/radix-tree.h' line='99' column='1' id='type-id-1439'>
+        <data-member access='private'>
+          <var-decl name='private_list' type-id='type-id-20' visibility='default' filepath='include/linux/radix-tree.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='callback_head' type-id='type-id-385' visibility='default' filepath='include/linux/radix-tree.h' line='101' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='kernfs_syscall_ops' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/kernfs.h' line='170' column='1' id='type-id-1440'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='remount_fs' type-id='type-id-1441' visibility='default' filepath='include/linux/kernfs.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='show_options' type-id='type-id-1442' visibility='default' filepath='include/linux/kernfs.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mkdir' type-id='type-id-1443' visibility='default' filepath='include/linux/kernfs.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rmdir' type-id='type-id-1444' visibility='default' filepath='include/linux/kernfs.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rename' type-id='type-id-1445' visibility='default' filepath='include/linux/kernfs.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='show_path' type-id='type-id-1446' visibility='default' filepath='include/linux/kernfs.h' line='179' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='seq_file' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/seq_file.h' line='16' column='1' id='type-id-1447'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buf' type-id='type-id-2' visibility='default' filepath='include/linux/seq_file.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='type-id-84' visibility='default' filepath='include/linux/seq_file.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='from' type-id='type-id-84' visibility='default' filepath='include/linux/seq_file.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='count' type-id='type-id-84' visibility='default' filepath='include/linux/seq_file.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pad_until' type-id='type-id-84' visibility='default' filepath='include/linux/seq_file.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='index' type-id='type-id-763' visibility='default' filepath='include/linux/seq_file.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='read_pos' type-id='type-id-763' visibility='default' filepath='include/linux/seq_file.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='version' type-id='type-id-40' visibility='default' filepath='include/linux/seq_file.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='lock' type-id='type-id-245' visibility='default' filepath='include/linux/seq_file.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='op' type-id='type-id-1448' visibility='default' filepath='include/linux/seq_file.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='poll_event' type-id='type-id-17' visibility='default' filepath='include/linux/seq_file.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='file' type-id='type-id-1449' visibility='default' filepath='include/linux/seq_file.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='private' type-id='type-id-15' visibility='default' filepath='include/linux/seq_file.h' line='29' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mutex' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/mutex.h' line='53' column='1' id='type-id-245'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='type-id-115' visibility='default' filepath='include/linux/mutex.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait_lock' type-id='type-id-247' visibility='default' filepath='include/linux/mutex.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='osq' type-id='type-id-1450' visibility='default' filepath='include/linux/mutex.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='wait_list' type-id='type-id-20' visibility='default' filepath='include/linux/mutex.h' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='atomic_long_t' type-id='type-id-113' filepath='include/asm-generic/atomic-long.h' line='24' column='1' id='type-id-115'/>
+      <typedef-decl name='atomic64_t' type-id='type-id-1451' filepath='include/linux/types.h' line='183' column='1' id='type-id-113'/>
+      <class-decl name='__anonymous_struct__11' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-113' visibility='default' filepath='include/linux/types.h' line='181' column='1' id='type-id-1451'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='counter' type-id='type-id-192' visibility='default' filepath='include/linux/types.h' line='182' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='optimistic_spin_queue' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/osq_lock.h' line='15' column='1' id='type-id-1450'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tail' type-id='type-id-26' visibility='default' filepath='include/linux/osq_lock.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='seq_operations' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/seq_file.h' line='32' column='1' id='type-id-1452'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='type-id-1453' visibility='default' filepath='include/linux/seq_file.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='stop' type-id='type-id-1454' visibility='default' filepath='include/linux/seq_file.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='next' type-id='type-id-1455' visibility='default' filepath='include/linux/seq_file.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='show' type-id='type-id-311' visibility='default' filepath='include/linux/seq_file.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='wait_queue_head_t' type-id='type-id-1456' filepath='include/linux/wait.h' line='38' column='1' id='type-id-225'/>
+      <class-decl name='wait_queue_head' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/wait.h' line='34' column='1' id='type-id-1456'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='include/linux/wait.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='head' type-id='type-id-20' visibility='default' filepath='include/linux/wait.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernfs_elem_symlink' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/kernfs.h' line='95' column='1' id='type-id-1430'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='target_kn' type-id='type-id-1397' visibility='default' filepath='include/linux/kernfs.h' line='96' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernfs_elem_attr' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/kernfs.h' line='99' column='1' id='type-id-1431'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='type-id-1457' visibility='default' filepath='include/linux/kernfs.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='open' type-id='type-id-1458' visibility='default' filepath='include/linux/kernfs.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='type-id-763' visibility='default' filepath='include/linux/kernfs.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='notify_next' type-id='type-id-1397' visibility='default' filepath='include/linux/kernfs.h' line='103' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernfs_ops' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/kernfs.h' line='220' column='1' id='type-id-1459'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='open' type-id='type-id-1460' visibility='default' filepath='include/linux/kernfs.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='release' type-id='type-id-1461' visibility='default' filepath='include/linux/kernfs.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='seq_show' type-id='type-id-311' visibility='default' filepath='include/linux/kernfs.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='seq_start' type-id='type-id-1453' visibility='default' filepath='include/linux/kernfs.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='seq_next' type-id='type-id-1455' visibility='default' filepath='include/linux/kernfs.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='seq_stop' type-id='type-id-1454' visibility='default' filepath='include/linux/kernfs.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='read' type-id='type-id-1462' visibility='default' filepath='include/linux/kernfs.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='atomic_write_len' type-id='type-id-84' visibility='default' filepath='include/linux/kernfs.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='prealloc' type-id='type-id-33' visibility='default' filepath='include/linux/kernfs.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='write' type-id='type-id-1462' visibility='default' filepath='include/linux/kernfs.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='poll' type-id='type-id-1463' visibility='default' filepath='include/linux/kernfs.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='mmap' type-id='type-id-1464' visibility='default' filepath='include/linux/kernfs.h' line='269' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernfs_open_file' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/kernfs.h' line='200' column='1' id='type-id-1465'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kn' type-id='type-id-1397' visibility='default' filepath='include/linux/kernfs.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='file' type-id='type-id-83' visibility='default' filepath='include/linux/kernfs.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='seq_file' type-id='type-id-88' visibility='default' filepath='include/linux/kernfs.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='priv' type-id='type-id-15' visibility='default' filepath='include/linux/kernfs.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mutex' type-id='type-id-245' visibility='default' filepath='include/linux/kernfs.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='prealloc_mutex' type-id='type-id-245' visibility='default' filepath='include/linux/kernfs.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='event' type-id='type-id-17' visibility='default' filepath='include/linux/kernfs.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/kernfs.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='prealloc_buf' type-id='type-id-2' visibility='default' filepath='include/linux/kernfs.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='atomic_write_len' type-id='type-id-84' visibility='default' filepath='include/linux/kernfs.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='mmapped' type-id='type-id-33' visibility='default' filepath='include/linux/kernfs.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='released' type-id='type-id-33' visibility='default' filepath='include/linux/kernfs.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='vm_ops' type-id='type-id-1466' visibility='default' filepath='include/linux/kernfs.h' line='217' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vm_operations_struct' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/mm.h' line='404' column='1' id='type-id-1467'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='open' type-id='type-id-1468' visibility='default' filepath='include/linux/mm.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='close' type-id='type-id-1468' visibility='default' filepath='include/linux/mm.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='split' type-id='type-id-1469' visibility='default' filepath='include/linux/mm.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mremap' type-id='type-id-1470' visibility='default' filepath='include/linux/mm.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fault' type-id='type-id-1471' visibility='default' filepath='include/linux/mm.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='huge_fault' type-id='type-id-1472' visibility='default' filepath='include/linux/mm.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='map_pages' type-id='type-id-1473' visibility='default' filepath='include/linux/mm.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pagesize' type-id='type-id-1474' visibility='default' filepath='include/linux/mm.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='page_mkwrite' type-id='type-id-1471' visibility='default' filepath='include/linux/mm.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pfn_mkwrite' type-id='type-id-1471' visibility='default' filepath='include/linux/mm.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='access' type-id='type-id-1475' visibility='default' filepath='include/linux/mm.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='name' type-id='type-id-1476' visibility='default' filepath='include/linux/mm.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='find_special_page' type-id='type-id-1477' visibility='default' filepath='include/linux/mm.h' line='462' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vm_area_struct' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/mm_types.h' line='269' column='1' id='type-id-1478'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vm_start' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vm_end' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vm_next' type-id='type-id-1209' visibility='default' filepath='include/linux/mm_types.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vm_prev' type-id='type-id-1209' visibility='default' filepath='include/linux/mm_types.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='vm_rb' type-id='type-id-422' visibility='default' filepath='include/linux/mm_types.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rb_subtree_gap' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='vm_mm' type-id='type-id-882' visibility='default' filepath='include/linux/mm_types.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='vm_page_prot' type-id='type-id-102' visibility='default' filepath='include/linux/mm_types.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='vm_flags' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='' type-id='type-id-1479' visibility='default' filepath='include/linux/mm_types.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='anon_vma_chain' type-id='type-id-20' visibility='default' filepath='include/linux/mm_types.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='anon_vma' type-id='type-id-1480' visibility='default' filepath='include/linux/mm_types.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='vm_ops' type-id='type-id-1466' visibility='default' filepath='include/linux/mm_types.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='vm_pgoff' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='vm_file' type-id='type-id-83' visibility='default' filepath='include/linux/mm_types.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='vm_private_data' type-id='type-id-15' visibility='default' filepath='include/linux/mm_types.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='swap_readahead_info' type-id='type-id-115' visibility='default' filepath='include/linux/mm_types.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='vm_userfaultfd_ctx' type-id='type-id-1481' visibility='default' filepath='include/linux/mm_types.h' line='337' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mm_struct' size-in-bits='6848' is-struct='yes' visibility='default' filepath='include/linux/mm_types.h' line='352' column='1' id='type-id-1482'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='type-id-1483' visibility='default' filepath='include/linux/mm_types.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='cpu_bitmap' type-id='type-id-280' visibility='default' filepath='include/linux/mm_types.h' line='512' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__12' size-in-bits='6848' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='353' column='1' id='type-id-1483'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mmap' type-id='type-id-1209' visibility='default' filepath='include/linux/mm_types.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mm_rb' type-id='type-id-416' visibility='default' filepath='include/linux/mm_types.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vmacache_seqnum' type-id='type-id-40' visibility='default' filepath='include/linux/mm_types.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_unmapped_area' type-id='type-id-1484' visibility='default' filepath='include/linux/mm_types.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mmap_base' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mmap_legacy_base' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='task_size' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='highest_vm_end' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pgd' type-id='type-id-1485' visibility='default' filepath='include/linux/mm_types.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mm_users' type-id='type-id-26' visibility='default' filepath='include/linux/mm_types.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='mm_count' type-id='type-id-26' visibility='default' filepath='include/linux/mm_types.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='pgtables_bytes' type-id='type-id-115' visibility='default' filepath='include/linux/mm_types.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='map_count' type-id='type-id-17' visibility='default' filepath='include/linux/mm_types.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='page_table_lock' type-id='type-id-247' visibility='default' filepath='include/linux/mm_types.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mmap_sem' type-id='type-id-246' visibility='default' filepath='include/linux/mm_types.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='mmlist' type-id='type-id-20' visibility='default' filepath='include/linux/mm_types.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='hiwater_rss' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='hiwater_vm' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='total_vm' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='locked_vm' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='pinned_vm' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='data_vm' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='exec_vm' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='stack_vm' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='def_flags' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='arg_lock' type-id='type-id-247' visibility='default' filepath='include/linux/mm_types.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='start_code' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='end_code' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='start_data' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='end_data' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='start_brk' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='brk' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='start_stack' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='arg_start' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='arg_end' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='env_start' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='env_end' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='saved_auxv' type-id='type-id-1202' visibility='default' filepath='include/linux/mm_types.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='rss_stat' type-id='type-id-1486' visibility='default' filepath='include/linux/mm_types.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='binfmt' type-id='type-id-1487' visibility='default' filepath='include/linux/mm_types.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='context' type-id='type-id-1488' visibility='default' filepath='include/linux/mm_types.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='core_state' type-id='type-id-1489' visibility='default' filepath='include/linux/mm_types.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='membarrier_state' type-id='type-id-26' visibility='default' filepath='include/linux/mm_types.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6176'>
+          <var-decl name='ioctx_lock' type-id='type-id-247' visibility='default' filepath='include/linux/mm_types.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='ioctx_table' type-id='type-id-1490' visibility='default' filepath='include/linux/mm_types.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='owner' type-id='type-id-431' visibility='default' filepath='include/linux/mm_types.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='user_ns' type-id='type-id-917' visibility='default' filepath='include/linux/mm_types.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='exe_file' type-id='type-id-83' visibility='default' filepath='include/linux/mm_types.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='tlb_flush_pending' type-id='type-id-26' visibility='default' filepath='include/linux/mm_types.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='uprobes_state' type-id='type-id-1491' visibility='default' filepath='include/linux/mm_types.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='async_put_work' type-id='type-id-255' visibility='default' filepath='include/linux/mm_types.h' line='500' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='pgd_t' type-id='type-id-1492' filepath='arch/arm64/include/asm/pgtable-types.h' line='49' column='1' id='type-id-1493'/>
+      <class-decl name='__anonymous_struct__13' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-1493' visibility='default' filepath='arch/arm64/include/asm/pgtable-types.h' line='49' column='1' id='type-id-1492'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pgd' type-id='type-id-1494' visibility='default' filepath='arch/arm64/include/asm/pgtable-types.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='pgdval_t' type-id='type-id-40' filepath='arch/arm64/include/asm/pgtable-types.h' line='28' column='1' id='type-id-1494'/>
+      <class-decl name='rw_semaphore' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/rwsem.h' line='30' column='1' id='type-id-246'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='type-id-115' visibility='default' filepath='include/linux/rwsem.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait_list' type-id='type-id-20' visibility='default' filepath='include/linux/rwsem.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='wait_lock' type-id='type-id-36' visibility='default' filepath='include/linux/rwsem.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='osq' type-id='type-id-1450' visibility='default' filepath='include/linux/rwsem.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='owner' type-id='type-id-431' visibility='default' filepath='include/linux/rwsem.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='raw_spinlock_t' type-id='type-id-1401' filepath='include/linux/spinlock_types.h' line='29' column='1' id='type-id-36'/>
+      <class-decl name='task_struct' size-in-bits='27648' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='584' column='1' id='type-id-1495'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='thread_info' type-id='type-id-1496' visibility='default' filepath='include/linux/sched.h' line='590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='state' type-id='type-id-1497' visibility='default' filepath='include/linux/sched.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='stack' type-id='type-id-15' visibility='default' filepath='include/linux/sched.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='usage' type-id='type-id-26' visibility='default' filepath='include/linux/sched.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='flags' type-id='type-id-5' visibility='default' filepath='include/linux/sched.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ptrace' type-id='type-id-5' visibility='default' filepath='include/linux/sched.h' line='605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='wake_entry' type-id='type-id-281' visibility='default' filepath='include/linux/sched.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='on_cpu' type-id='type-id-17' visibility='default' filepath='include/linux/sched.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='cpu' type-id='type-id-5' visibility='default' filepath='include/linux/sched.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='wakee_flips' type-id='type-id-5' visibility='default' filepath='include/linux/sched.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='wakee_flip_decay_ts' type-id='type-id-16' visibility='default' filepath='include/linux/sched.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='last_wakee' type-id='type-id-431' visibility='default' filepath='include/linux/sched.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='recent_used_cpu' type-id='type-id-17' visibility='default' filepath='include/linux/sched.h' line='625' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='wake_cpu' type-id='type-id-17' visibility='default' filepath='include/linux/sched.h' line='626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='on_rq' type-id='type-id-17' visibility='default' filepath='include/linux/sched.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='prio' type-id='type-id-17' visibility='default' filepath='include/linux/sched.h' line='630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='static_prio' type-id='type-id-17' visibility='default' filepath='include/linux/sched.h' line='631' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='normal_prio' type-id='type-id-17' visibility='default' filepath='include/linux/sched.h' line='632' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rt_priority' type-id='type-id-5' visibility='default' filepath='include/linux/sched.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='sched_class' type-id='type-id-1498' visibility='default' filepath='include/linux/sched.h' line='635' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='se' type-id='type-id-1499' visibility='default' filepath='include/linux/sched.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='rt' type-id='type-id-1500' visibility='default' filepath='include/linux/sched.h' line='637' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='sched_task_group' type-id='type-id-1501' visibility='default' filepath='include/linux/sched.h' line='639' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='dl' type-id='type-id-1502' visibility='default' filepath='include/linux/sched.h' line='641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='policy' type-id='type-id-5' visibility='default' filepath='include/linux/sched.h' line='652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7520'>
+          <var-decl name='nr_cpus_allowed' type-id='type-id-17' visibility='default' filepath='include/linux/sched.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='cpus_allowed' type-id='type-id-1503' visibility='default' filepath='include/linux/sched.h' line='654' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='rcu_read_lock_nesting' type-id='type-id-17' visibility='default' filepath='include/linux/sched.h' line='657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7648'>
+          <var-decl name='rcu_read_unlock_special' type-id='type-id-1236' visibility='default' filepath='include/linux/sched.h' line='658' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='rcu_node_entry' type-id='type-id-20' visibility='default' filepath='include/linux/sched.h' line='659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='rcu_blocked_node' type-id='type-id-1504' visibility='default' filepath='include/linux/sched.h' line='660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='rcu_tasks_nvcsw' type-id='type-id-16' visibility='default' filepath='include/linux/sched.h' line='664' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='rcu_tasks_holdout' type-id='type-id-214' visibility='default' filepath='include/linux/sched.h' line='665' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7944'>
+          <var-decl name='rcu_tasks_idx' type-id='type-id-214' visibility='default' filepath='include/linux/sched.h' line='666' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7968'>
+          <var-decl name='rcu_tasks_idle_cpu' type-id='type-id-17' visibility='default' filepath='include/linux/sched.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='rcu_tasks_holdout_list' type-id='type-id-20' visibility='default' filepath='include/linux/sched.h' line='668' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='sched_info' type-id='type-id-1505' visibility='default' filepath='include/linux/sched.h' line='671' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='tasks' type-id='type-id-20' visibility='default' filepath='include/linux/sched.h' line='673' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='pushable_tasks' type-id='type-id-1506' visibility='default' filepath='include/linux/sched.h' line='675' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='pushable_dl_tasks' type-id='type-id-422' visibility='default' filepath='include/linux/sched.h' line='676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='mm' type-id='type-id-882' visibility='default' filepath='include/linux/sched.h' line='679' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='active_mm' type-id='type-id-882' visibility='default' filepath='include/linux/sched.h' line='680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='vmacache' type-id='type-id-1507' visibility='default' filepath='include/linux/sched.h' line='683' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='rss_stat' type-id='type-id-1508' visibility='default' filepath='include/linux/sched.h' line='686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9632'>
+          <var-decl name='exit_state' type-id='type-id-17' visibility='default' filepath='include/linux/sched.h' line='688' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='exit_code' type-id='type-id-17' visibility='default' filepath='include/linux/sched.h' line='689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9696'>
+          <var-decl name='exit_signal' type-id='type-id-17' visibility='default' filepath='include/linux/sched.h' line='690' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='pdeath_signal' type-id='type-id-17' visibility='default' filepath='include/linux/sched.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='jobctl' type-id='type-id-16' visibility='default' filepath='include/linux/sched.h' line='694' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='personality' type-id='type-id-5' visibility='default' filepath='include/linux/sched.h' line='697' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='sched_reset_on_fork' type-id='type-id-5' visibility='default' filepath='include/linux/sched.h' line='700' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='sched_contributes_to_load' type-id='type-id-5' visibility='default' filepath='include/linux/sched.h' line='701' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='sched_migrated' type-id='type-id-5' visibility='default' filepath='include/linux/sched.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='sched_remote_wakeup' type-id='type-id-5' visibility='default' filepath='include/linux/sched.h' line='703' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='sched_psi_wake_requeue' type-id='type-id-5' visibility='default' filepath='include/linux/sched.h' line='705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='in_execve' type-id='type-id-5' visibility='default' filepath='include/linux/sched.h' line='714' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='in_iowait' type-id='type-id-5' visibility='default' filepath='include/linux/sched.h' line='715' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='in_user_fault' type-id='type-id-5' visibility='default' filepath='include/linux/sched.h' line='720' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='memcg_kmem_skip_account' type-id='type-id-5' visibility='default' filepath='include/linux/sched.h' line='722' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='no_cgroup_migration' type-id='type-id-5' visibility='default' filepath='include/linux/sched.h' line='730' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='use_memdelay' type-id='type-id-5' visibility='default' filepath='include/linux/sched.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='atomic_flags' type-id='type-id-16' visibility='default' filepath='include/linux/sched.h' line='737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='restart_block' type-id='type-id-1509' visibility='default' filepath='include/linux/sched.h' line='739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10432'>
+          <var-decl name='pid' type-id='type-id-41' visibility='default' filepath='include/linux/sched.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10464'>
+          <var-decl name='tgid' type-id='type-id-41' visibility='default' filepath='include/linux/sched.h' line='742' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='stack_canary' type-id='type-id-16' visibility='default' filepath='include/linux/sched.h' line='746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='real_parent' type-id='type-id-431' visibility='default' filepath='include/linux/sched.h' line='755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='parent' type-id='type-id-431' visibility='default' filepath='include/linux/sched.h' line='758' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='children' type-id='type-id-20' visibility='default' filepath='include/linux/sched.h' line='763' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='sibling' type-id='type-id-20' visibility='default' filepath='include/linux/sched.h' line='764' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='group_leader' type-id='type-id-431' visibility='default' filepath='include/linux/sched.h' line='765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='ptraced' type-id='type-id-20' visibility='default' filepath='include/linux/sched.h' line='773' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11136'>
+          <var-decl name='ptrace_entry' type-id='type-id-20' visibility='default' filepath='include/linux/sched.h' line='774' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='thread_pid' type-id='type-id-251' visibility='default' filepath='include/linux/sched.h' line='777' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11328'>
+          <var-decl name='pid_links' type-id='type-id-1126' visibility='default' filepath='include/linux/sched.h' line='778' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11840'>
+          <var-decl name='thread_group' type-id='type-id-20' visibility='default' filepath='include/linux/sched.h' line='779' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11968'>
+          <var-decl name='thread_node' type-id='type-id-20' visibility='default' filepath='include/linux/sched.h' line='780' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='vfork_done' type-id='type-id-1394' visibility='default' filepath='include/linux/sched.h' line='782' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12160'>
+          <var-decl name='set_child_tid' type-id='type-id-666' visibility='default' filepath='include/linux/sched.h' line='785' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12224'>
+          <var-decl name='clear_child_tid' type-id='type-id-666' visibility='default' filepath='include/linux/sched.h' line='788' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12288'>
+          <var-decl name='utime' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='790' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12352'>
+          <var-decl name='stime' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='791' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12416'>
+          <var-decl name='gtime' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='796' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12480'>
+          <var-decl name='time_in_state' type-id='type-id-1510' visibility='default' filepath='include/linux/sched.h' line='798' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12544'>
+          <var-decl name='max_state' type-id='type-id-5' visibility='default' filepath='include/linux/sched.h' line='799' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12608'>
+          <var-decl name='prev_cputime' type-id='type-id-1511' visibility='default' filepath='include/linux/sched.h' line='801' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12800'>
+          <var-decl name='nvcsw' type-id='type-id-16' visibility='default' filepath='include/linux/sched.h' line='810' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12864'>
+          <var-decl name='nivcsw' type-id='type-id-16' visibility='default' filepath='include/linux/sched.h' line='811' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12928'>
+          <var-decl name='start_time' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='814' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12992'>
+          <var-decl name='real_start_time' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='817' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13056'>
+          <var-decl name='min_flt' type-id='type-id-16' visibility='default' filepath='include/linux/sched.h' line='820' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13120'>
+          <var-decl name='maj_flt' type-id='type-id-16' visibility='default' filepath='include/linux/sched.h' line='821' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13184'>
+          <var-decl name='cputime_expires' type-id='type-id-1512' visibility='default' filepath='include/linux/sched.h' line='824' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13376'>
+          <var-decl name='cpu_timers' type-id='type-id-457' visibility='default' filepath='include/linux/sched.h' line='825' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13760'>
+          <var-decl name='ptracer_cred' type-id='type-id-1279' visibility='default' filepath='include/linux/sched.h' line='831' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13824'>
+          <var-decl name='real_cred' type-id='type-id-1279' visibility='default' filepath='include/linux/sched.h' line='834' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13888'>
+          <var-decl name='cred' type-id='type-id-1279' visibility='default' filepath='include/linux/sched.h' line='837' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13952'>
+          <var-decl name='comm' type-id='type-id-43' visibility='default' filepath='include/linux/sched.h' line='846' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14080'>
+          <var-decl name='nameidata' type-id='type-id-1513' visibility='default' filepath='include/linux/sched.h' line='848' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14144'>
+          <var-decl name='fs' type-id='type-id-1514' visibility='default' filepath='include/linux/sched.h' line='859' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14208'>
+          <var-decl name='files' type-id='type-id-1515' visibility='default' filepath='include/linux/sched.h' line='862' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14272'>
+          <var-decl name='nsproxy' type-id='type-id-916' visibility='default' filepath='include/linux/sched.h' line='865' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14336'>
+          <var-decl name='signal' type-id='type-id-1516' visibility='default' filepath='include/linux/sched.h' line='868' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14400'>
+          <var-decl name='sighand' type-id='type-id-1517' visibility='default' filepath='include/linux/sched.h' line='869' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14464'>
+          <var-decl name='blocked' type-id='type-id-1518' visibility='default' filepath='include/linux/sched.h' line='870' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14528'>
+          <var-decl name='real_blocked' type-id='type-id-1518' visibility='default' filepath='include/linux/sched.h' line='871' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14592'>
+          <var-decl name='saved_sigmask' type-id='type-id-1518' visibility='default' filepath='include/linux/sched.h' line='873' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14656'>
+          <var-decl name='pending' type-id='type-id-1519' visibility='default' filepath='include/linux/sched.h' line='874' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14848'>
+          <var-decl name='sas_ss_sp' type-id='type-id-16' visibility='default' filepath='include/linux/sched.h' line='875' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14912'>
+          <var-decl name='sas_ss_size' type-id='type-id-84' visibility='default' filepath='include/linux/sched.h' line='876' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14976'>
+          <var-decl name='sas_ss_flags' type-id='type-id-5' visibility='default' filepath='include/linux/sched.h' line='877' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15040'>
+          <var-decl name='task_works' type-id='type-id-91' visibility='default' filepath='include/linux/sched.h' line='879' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15104'>
+          <var-decl name='audit_context' type-id='type-id-1520' visibility='default' filepath='include/linux/sched.h' line='881' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15168'>
+          <var-decl name='loginuid' type-id='type-id-42' visibility='default' filepath='include/linux/sched.h' line='883' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15200'>
+          <var-decl name='sessionid' type-id='type-id-5' visibility='default' filepath='include/linux/sched.h' line='884' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15232'>
+          <var-decl name='seccomp' type-id='type-id-1521' visibility='default' filepath='include/linux/sched.h' line='886' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15360'>
+          <var-decl name='parent_exec_id' type-id='type-id-7' visibility='default' filepath='include/linux/sched.h' line='889' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15392'>
+          <var-decl name='self_exec_id' type-id='type-id-7' visibility='default' filepath='include/linux/sched.h' line='890' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15424'>
+          <var-decl name='alloc_lock' type-id='type-id-247' visibility='default' filepath='include/linux/sched.h' line='893' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15456'>
+          <var-decl name='pi_lock' type-id='type-id-36' visibility='default' filepath='include/linux/sched.h' line='896' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15488'>
+          <var-decl name='wake_q' type-id='type-id-1522' visibility='default' filepath='include/linux/sched.h' line='898' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15552'>
+          <var-decl name='pi_waiters' type-id='type-id-1523' visibility='default' filepath='include/linux/sched.h' line='902' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15680'>
+          <var-decl name='pi_top_task' type-id='type-id-431' visibility='default' filepath='include/linux/sched.h' line='904' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15744'>
+          <var-decl name='pi_blocked_on' type-id='type-id-1524' visibility='default' filepath='include/linux/sched.h' line='906' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15808'>
+          <var-decl name='journal_info' type-id='type-id-15' visibility='default' filepath='include/linux/sched.h' line='943' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15872'>
+          <var-decl name='bio_list' type-id='type-id-1525' visibility='default' filepath='include/linux/sched.h' line='946' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15936'>
+          <var-decl name='plug' type-id='type-id-1526' visibility='default' filepath='include/linux/sched.h' line='950' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16000'>
+          <var-decl name='reclaim_state' type-id='type-id-1527' visibility='default' filepath='include/linux/sched.h' line='954' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16064'>
+          <var-decl name='backing_dev_info' type-id='type-id-1359' visibility='default' filepath='include/linux/sched.h' line='956' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16128'>
+          <var-decl name='io_context' type-id='type-id-364' visibility='default' filepath='include/linux/sched.h' line='958' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16192'>
+          <var-decl name='ptrace_message' type-id='type-id-16' visibility='default' filepath='include/linux/sched.h' line='961' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16256'>
+          <var-decl name='last_siginfo' type-id='type-id-1528' visibility='default' filepath='include/linux/sched.h' line='962' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16320'>
+          <var-decl name='ioac' type-id='type-id-1529' visibility='default' filepath='include/linux/sched.h' line='964' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16832'>
+          <var-decl name='psi_flags' type-id='type-id-5' visibility='default' filepath='include/linux/sched.h' line='967' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16896'>
+          <var-decl name='acct_rss_mem1' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='971' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16960'>
+          <var-decl name='acct_vm_mem1' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='973' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17024'>
+          <var-decl name='acct_timexpd' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='975' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17088'>
+          <var-decl name='mems_allowed' type-id='type-id-1530' visibility='default' filepath='include/linux/sched.h' line='979' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17152'>
+          <var-decl name='mems_allowed_seq' type-id='type-id-387' visibility='default' filepath='include/linux/sched.h' line='981' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17184'>
+          <var-decl name='cpuset_mem_spread_rotor' type-id='type-id-17' visibility='default' filepath='include/linux/sched.h' line='982' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17216'>
+          <var-decl name='cpuset_slab_spread_rotor' type-id='type-id-17' visibility='default' filepath='include/linux/sched.h' line='983' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17280'>
+          <var-decl name='cgroups' type-id='type-id-1531' visibility='default' filepath='include/linux/sched.h' line='987' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17344'>
+          <var-decl name='cg_list' type-id='type-id-20' visibility='default' filepath='include/linux/sched.h' line='989' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17472'>
+          <var-decl name='robust_list' type-id='type-id-1532' visibility='default' filepath='include/linux/sched.h' line='996' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17536'>
+          <var-decl name='compat_robust_list' type-id='type-id-1533' visibility='default' filepath='include/linux/sched.h' line='998' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17600'>
+          <var-decl name='pi_state_list' type-id='type-id-20' visibility='default' filepath='include/linux/sched.h' line='1000' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17728'>
+          <var-decl name='pi_state_cache' type-id='type-id-1534' visibility='default' filepath='include/linux/sched.h' line='1001' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17792'>
+          <var-decl name='perf_event_ctxp' type-id='type-id-1161' visibility='default' filepath='include/linux/sched.h' line='1004' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17920'>
+          <var-decl name='perf_event_mutex' type-id='type-id-245' visibility='default' filepath='include/linux/sched.h' line='1005' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18176'>
+          <var-decl name='perf_event_list' type-id='type-id-20' visibility='default' filepath='include/linux/sched.h' line='1006' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18304'>
+          <var-decl name='preempt_disable_ip' type-id='type-id-16' visibility='default' filepath='include/linux/sched.h' line='1009' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18368'>
+          <var-decl name='tlb_ubc' type-id='type-id-1535' visibility='default' filepath='include/linux/sched.h' line='1078' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18368'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/linux/sched.h' line='1080' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18496'>
+          <var-decl name='splice_pipe' type-id='type-id-87' visibility='default' filepath='include/linux/sched.h' line='1083' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18560'>
+          <var-decl name='task_frag' type-id='type-id-1536' visibility='default' filepath='include/linux/sched.h' line='1085' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18688'>
+          <var-decl name='nr_dirtied' type-id='type-id-17' visibility='default' filepath='include/linux/sched.h' line='1099' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18720'>
+          <var-decl name='nr_dirtied_pause' type-id='type-id-17' visibility='default' filepath='include/linux/sched.h' line='1100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18752'>
+          <var-decl name='dirty_paused_when' type-id='type-id-16' visibility='default' filepath='include/linux/sched.h' line='1102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18816'>
+          <var-decl name='timer_slack_ns' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='1112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18880'>
+          <var-decl name='default_timer_slack_ns' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='1113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18944'>
+          <var-decl name='trace' type-id='type-id-16' visibility='default' filepath='include/linux/sched.h' line='1142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19008'>
+          <var-decl name='trace_recursion' type-id='type-id-16' visibility='default' filepath='include/linux/sched.h' line='1145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19072'>
+          <var-decl name='memcg_in_oom' type-id='type-id-1537' visibility='default' filepath='include/linux/sched.h' line='1163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19136'>
+          <var-decl name='memcg_oom_gfp_mask' type-id='type-id-485' visibility='default' filepath='include/linux/sched.h' line='1164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19168'>
+          <var-decl name='memcg_oom_order' type-id='type-id-17' visibility='default' filepath='include/linux/sched.h' line='1165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19200'>
+          <var-decl name='memcg_nr_pages_over_high' type-id='type-id-5' visibility='default' filepath='include/linux/sched.h' line='1168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19264'>
+          <var-decl name='active_memcg' type-id='type-id-1537' visibility='default' filepath='include/linux/sched.h' line='1171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19328'>
+          <var-decl name='throttle_queue' type-id='type-id-1538' visibility='default' filepath='include/linux/sched.h' line='1175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19392'>
+          <var-decl name='utask' type-id='type-id-1539' visibility='default' filepath='include/linux/sched.h' line='1179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19456'>
+          <var-decl name='pagefault_disabled' type-id='type-id-17' visibility='default' filepath='include/linux/sched.h' line='1188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19520'>
+          <var-decl name='oom_reaper_list' type-id='type-id-431' visibility='default' filepath='include/linux/sched.h' line='1190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19584'>
+          <var-decl name='stack_vm_area' type-id='type-id-1540' visibility='default' filepath='include/linux/sched.h' line='1193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19648'>
+          <var-decl name='stack_refcount' type-id='type-id-26' visibility='default' filepath='include/linux/sched.h' line='1197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19712'>
+          <var-decl name='security' type-id='type-id-15' visibility='default' filepath='include/linux/sched.h' line='1204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19840'>
+          <var-decl name='thread' type-id='type-id-1541' visibility='default' filepath='include/linux/sched.h' line='1214' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='thread_info' size-in-bits='320' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='39' column='1' id='type-id-1496'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='addr_limit' type-id='type-id-1542' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ttbr0' type-id='type-id-40' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='preempt_count' type-id='type-id-17' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='shadow_call_stack' type-id='type-id-15' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='47' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='mm_segment_t' type-id='type-id-16' filepath='arch/arm64/include/asm/thread_info.h' line='34' column='1' id='type-id-1542'/>
+      <class-decl name='sched_entity' size-in-bits='3584' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='437' column='1' id='type-id-1499'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='load' type-id='type-id-1543' visibility='default' filepath='include/linux/sched.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='runnable_weight' type-id='type-id-16' visibility='default' filepath='include/linux/sched.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='run_node' type-id='type-id-422' visibility='default' filepath='include/linux/sched.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='group_node' type-id='type-id-20' visibility='default' filepath='include/linux/sched.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='on_rq' type-id='type-id-5' visibility='default' filepath='include/linux/sched.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='exec_start' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sum_exec_runtime' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='vruntime' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='prev_sum_exec_runtime' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='nr_migrations' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='statistics' type-id='type-id-1544' visibility='default' filepath='include/linux/sched.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='depth' type-id='type-id-17' visibility='default' filepath='include/linux/sched.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='parent' type-id='type-id-1545' visibility='default' filepath='include/linux/sched.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='cfs_rq' type-id='type-id-1546' visibility='default' filepath='include/linux/sched.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='my_q' type-id='type-id-1546' visibility='default' filepath='include/linux/sched.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='avg' type-id='type-id-1547' visibility='default' filepath='include/linux/sched.h' line='470' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='load_weight' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='313' column='1' id='type-id-1543'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='weight' type-id='type-id-16' visibility='default' filepath='include/linux/sched.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='inv_weight' type-id='type-id-7' visibility='default' filepath='include/linux/sched.h' line='315' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_statistics' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='401' column='1' id='type-id-1544'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wait_start' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait_max' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='wait_count' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='wait_sum' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='iowait_count' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='iowait_sum' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sleep_start' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='sleep_max' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='sum_sleep_runtime' type-id='type-id-1548' visibility='default' filepath='include/linux/sched.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='block_start' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='block_max' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='exec_max' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='slice_max' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='nr_migrations_cold' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='nr_failed_migrations_affine' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='nr_failed_migrations_running' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='nr_failed_migrations_hot' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='nr_forced_migrations' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='nr_wakeups' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='nr_wakeups_sync' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='nr_wakeups_migrate' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='nr_wakeups_local' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='nr_wakeups_remote' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='nr_wakeups_affine' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='nr_wakeups_affine_attempts' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='nr_wakeups_passive' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='nr_wakeups_idle' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='433' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='s64' type-id='type-id-900' filepath='include/asm-generic/int-ll64.h' line='22' column='1' id='type-id-1548'/>
+      <class-decl name='sched_avg' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='389' column='1' id='type-id-1547'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='last_update_time' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='load_sum' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='runnable_load_sum' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='util_sum' type-id='type-id-7' visibility='default' filepath='include/linux/sched.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='period_contrib' type-id='type-id-7' visibility='default' filepath='include/linux/sched.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='load_avg' type-id='type-id-16' visibility='default' filepath='include/linux/sched.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='runnable_load_avg' type-id='type-id-16' visibility='default' filepath='include/linux/sched.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='util_avg' type-id='type-id-16' visibility='default' filepath='include/linux/sched.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='util_est' type-id='type-id-1549' visibility='default' filepath='include/linux/sched.h' line='398' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='util_est' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='340' column='1' id='type-id-1549'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enqueued' type-id='type-id-5' visibility='default' filepath='include/linux/sched.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ewma' type-id='type-id-5' visibility='default' filepath='include/linux/sched.h' line='342' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_rt_entity' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='474' column='1' id='type-id-1500'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='run_list' type-id='type-id-20' visibility='default' filepath='include/linux/sched.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='timeout' type-id='type-id-16' visibility='default' filepath='include/linux/sched.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='watchdog_stamp' type-id='type-id-16' visibility='default' filepath='include/linux/sched.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='time_slice' type-id='type-id-5' visibility='default' filepath='include/linux/sched.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='on_rq' type-id='type-id-312' visibility='default' filepath='include/linux/sched.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='304'>
+          <var-decl name='on_list' type-id='type-id-312' visibility='default' filepath='include/linux/sched.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='back' type-id='type-id-1550' visibility='default' filepath='include/linux/sched.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='parent' type-id='type-id-1550' visibility='default' filepath='include/linux/sched.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rt_rq' type-id='type-id-1551' visibility='default' filepath='include/linux/sched.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='my_q' type-id='type-id-1551' visibility='default' filepath='include/linux/sched.h' line='488' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_dl_entity' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='492' column='1' id='type-id-1502'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb_node' type-id='type-id-422' visibility='default' filepath='include/linux/sched.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dl_runtime' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dl_deadline' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dl_period' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dl_bw' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dl_density' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='runtime' type-id='type-id-1548' visibility='default' filepath='include/linux/sched.h' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='deadline' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='flags' type-id='type-id-5' visibility='default' filepath='include/linux/sched.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='dl_throttled' type-id='type-id-5' visibility='default' filepath='include/linux/sched.h' line='539' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='dl_boosted' type-id='type-id-5' visibility='default' filepath='include/linux/sched.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='dl_yielded' type-id='type-id-5' visibility='default' filepath='include/linux/sched.h' line='541' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='dl_non_contending' type-id='type-id-5' visibility='default' filepath='include/linux/sched.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='dl_overrun' type-id='type-id-5' visibility='default' filepath='include/linux/sched.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dl_timer' type-id='type-id-681' visibility='default' filepath='include/linux/sched.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='inactive_timer' type-id='type-id-681' visibility='default' filepath='include/linux/sched.h' line='558' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hrtimer' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/hrtimer.h' line='110' column='1' id='type-id-681'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='type-id-1552' visibility='default' filepath='include/linux/hrtimer.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='_softexpires' type-id='type-id-682' visibility='default' filepath='include/linux/hrtimer.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='function' type-id='type-id-1553' visibility='default' filepath='include/linux/hrtimer.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='base' type-id='type-id-1554' visibility='default' filepath='include/linux/hrtimer.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='state' type-id='type-id-214' visibility='default' filepath='include/linux/hrtimer.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='456'>
+          <var-decl name='is_rel' type-id='type-id-214' visibility='default' filepath='include/linux/hrtimer.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='is_soft' type-id='type-id-214' visibility='default' filepath='include/linux/hrtimer.h' line='117' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='timerqueue_node' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/timerqueue.h' line='9' column='1' id='type-id-1552'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='type-id-422' visibility='default' filepath='include/linux/timerqueue.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='expires' type-id='type-id-682' visibility='default' filepath='include/linux/timerqueue.h' line='11' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='ktime_t' type-id='type-id-1548' filepath='include/linux/ktime.h' line='28' column='1' id='type-id-682'/>
+      <enum-decl name='hrtimer_restart' filepath='include/linux/hrtimer.h' line='59' column='1' id='type-id-1555'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='HRTIMER_NORESTART' value='0'/>
+        <enumerator name='HRTIMER_RESTART' value='1'/>
+      </enum-decl>
+      <class-decl name='hrtimer_clock_base' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/hrtimer.h' line='150' column='1' id='type-id-1127'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cpu_base' type-id='type-id-1556' visibility='default' filepath='include/linux/hrtimer.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='index' type-id='type-id-5' visibility='default' filepath='include/linux/hrtimer.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='clockid' type-id='type-id-1557' visibility='default' filepath='include/linux/hrtimer.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='seq' type-id='type-id-387' visibility='default' filepath='include/linux/hrtimer.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='running' type-id='type-id-1558' visibility='default' filepath='include/linux/hrtimer.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='active' type-id='type-id-1559' visibility='default' filepath='include/linux/hrtimer.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_time' type-id='type-id-1560' visibility='default' filepath='include/linux/hrtimer.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='offset' type-id='type-id-682' visibility='default' filepath='include/linux/hrtimer.h' line='158' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hrtimer_cpu_base' size-in-bits='4608' is-struct='yes' visibility='default' filepath='include/linux/hrtimer.h' line='201' column='1' id='type-id-1561'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='type-id-36' visibility='default' filepath='include/linux/hrtimer.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cpu' type-id='type-id-5' visibility='default' filepath='include/linux/hrtimer.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='active_bases' type-id='type-id-5' visibility='default' filepath='include/linux/hrtimer.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='clock_was_set_seq' type-id='type-id-5' visibility='default' filepath='include/linux/hrtimer.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='hres_active' type-id='type-id-5' visibility='default' filepath='include/linux/hrtimer.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='in_hrtirq' type-id='type-id-5' visibility='default' filepath='include/linux/hrtimer.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='hang_detected' type-id='type-id-5' visibility='default' filepath='include/linux/hrtimer.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='softirq_activated' type-id='type-id-5' visibility='default' filepath='include/linux/hrtimer.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='nr_events' type-id='type-id-5' visibility='default' filepath='include/linux/hrtimer.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nr_retries' type-id='type-id-312' visibility='default' filepath='include/linux/hrtimer.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='nr_hangs' type-id='type-id-312' visibility='default' filepath='include/linux/hrtimer.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='max_hang_time' type-id='type-id-5' visibility='default' filepath='include/linux/hrtimer.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='expires_next' type-id='type-id-682' visibility='default' filepath='include/linux/hrtimer.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='next_timer' type-id='type-id-1558' visibility='default' filepath='include/linux/hrtimer.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='softirq_expires_next' type-id='type-id-682' visibility='default' filepath='include/linux/hrtimer.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='softirq_next_timer' type-id='type-id-1558' visibility='default' filepath='include/linux/hrtimer.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='clock_base' type-id='type-id-1128' visibility='default' filepath='include/linux/hrtimer.h' line='220' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='clockid_t' type-id='type-id-1562' filepath='include/linux/types.h' line='27' column='1' id='type-id-1557'/>
+      <typedef-decl name='__kernel_clockid_t' type-id='type-id-17' filepath='include/uapi/asm-generic/posix_types.h' line='93' column='1' id='type-id-1562'/>
+      <class-decl name='timerqueue_head' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/timerqueue.h' line='14' column='1' id='type-id-1559'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='type-id-416' visibility='default' filepath='include/linux/timerqueue.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='next' type-id='type-id-1563' visibility='default' filepath='include/linux/timerqueue.h' line='16' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='cpumask_t' type-id='type-id-178' filepath='include/linux/cpumask.h' line='16' column='1' id='type-id-1503'/>
+      <class-decl name='cpumask' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/cpumask.h' line='16' column='1' id='type-id-178'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bits' type-id='type-id-491' visibility='default' filepath='include/linux/cpumask.h' line='16' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__14' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/sched.h' line='562' column='1' id='type-id-1237'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='blocked' type-id='type-id-214' visibility='default' filepath='include/linux/sched.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='need_qs' type-id='type-id-214' visibility='default' filepath='include/linux/sched.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='exp_need_qs' type-id='type-id-214' visibility='default' filepath='include/linux/sched.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='pad' type-id='type-id-214' visibility='default' filepath='include/linux/sched.h' line='568' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_info' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='282' column='1' id='type-id-1505'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pcount' type-id='type-id-16' visibility='default' filepath='include/linux/sched.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='run_delay' type-id='type-id-98' visibility='default' filepath='include/linux/sched.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='last_arrival' type-id='type-id-98' visibility='default' filepath='include/linux/sched.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='last_queued' type-id='type-id-98' visibility='default' filepath='include/linux/sched.h' line='298' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='plist_node' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/plist.h' line='85' column='1' id='type-id-1506'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prio' type-id='type-id-17' visibility='default' filepath='include/linux/plist.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prio_list' type-id='type-id-20' visibility='default' filepath='include/linux/plist.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='node_list' type-id='type-id-20' visibility='default' filepath='include/linux/plist.h' line='88' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vmacache' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/mm_types_task.h' line='34' column='1' id='type-id-1507'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='seqnum' type-id='type-id-40' visibility='default' filepath='include/linux/mm_types_task.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vmas' type-id='type-id-1210' visibility='default' filepath='include/linux/mm_types_task.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='task_rss_stat' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/linux/mm_types_task.h' line='50' column='1' id='type-id-1508'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='events' type-id='type-id-17' visibility='default' filepath='include/linux/mm_types_task.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='type-id-1134' visibility='default' filepath='include/linux/mm_types_task.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='restart_block' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/restart_block.h' line='25' column='1' id='type-id-1509'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fn' type-id='type-id-1564' visibility='default' filepath='include/linux/restart_block.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='type-id-1565' visibility='default' filepath='include/linux/restart_block.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__8' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='27' column='1' id='type-id-1565'>
+        <data-member access='private'>
+          <var-decl name='futex' type-id='type-id-234' visibility='default' filepath='include/linux/restart_block.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='nanosleep' type-id='type-id-235' visibility='default' filepath='include/linux/restart_block.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='poll' type-id='type-id-1566' visibility='default' filepath='include/linux/restart_block.h' line='54' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__15' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='29' column='1' id='type-id-234'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='uaddr' type-id='type-id-1567' visibility='default' filepath='include/linux/restart_block.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='val' type-id='type-id-7' visibility='default' filepath='include/linux/restart_block.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='type-id-7' visibility='default' filepath='include/linux/restart_block.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bitset' type-id='type-id-7' visibility='default' filepath='include/linux/restart_block.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='time' type-id='type-id-40' visibility='default' filepath='include/linux/restart_block.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='uaddr2' type-id='type-id-1567' visibility='default' filepath='include/linux/restart_block.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__16' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='38' column='1' id='type-id-235'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='clockid' type-id='type-id-1557' visibility='default' filepath='include/linux/restart_block.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='type-id-1568' visibility='default' filepath='include/linux/restart_block.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='type-id-1569' visibility='default' filepath='include/linux/restart_block.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='expires' type-id='type-id-40' visibility='default' filepath='include/linux/restart_block.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='timespec_type' filepath='include/linux/restart_block.h' line='16' column='1' id='type-id-1568'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='TT_NONE' value='0'/>
+        <enumerator name='TT_NATIVE' value='1'/>
+        <enumerator name='TT_COMPAT' value='2'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__9' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='41' column='1' id='type-id-1569'>
+        <data-member access='private'>
+          <var-decl name='rmtp' type-id='type-id-1570' visibility='default' filepath='include/linux/restart_block.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='compat_rmtp' type-id='type-id-1571' visibility='default' filepath='include/linux/restart_block.h' line='43' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='timespec' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/time.h' line='10' column='1' id='type-id-1572'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tv_sec' type-id='type-id-1573' visibility='default' filepath='include/uapi/linux/time.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tv_nsec' type-id='type-id-192' visibility='default' filepath='include/uapi/linux/time.h' line='12' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__kernel_time_t' type-id='type-id-105' filepath='include/uapi/asm-generic/posix_types.h' line='89' column='1' id='type-id-1573'/>
+      <class-decl name='compat_timespec' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/compat_time.h' line='10' column='1' id='type-id-1574'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tv_sec' type-id='type-id-1575' visibility='default' filepath='include/linux/compat_time.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tv_nsec' type-id='type-id-738' visibility='default' filepath='include/linux/compat_time.h' line='12' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='compat_time_t' type-id='type-id-738' filepath='include/linux/compat_time.h' line='8' column='1' id='type-id-1575'/>
+      <typedef-decl name='s32' type-id='type-id-653' filepath='include/asm-generic/int-ll64.h' line='20' column='1' id='type-id-738'/>
+      <typedef-decl name='__s32' type-id='type-id-17' filepath='include/uapi/asm-generic/int-ll64.h' line='26' column='1' id='type-id-653'/>
+      <class-decl name='__anonymous_struct__17' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='48' column='1' id='type-id-1566'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ufds' type-id='type-id-237' visibility='default' filepath='include/linux/restart_block.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nfds' type-id='type-id-17' visibility='default' filepath='include/linux/restart_block.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='has_timeout' type-id='type-id-17' visibility='default' filepath='include/linux/restart_block.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tv_sec' type-id='type-id-16' visibility='default' filepath='include/linux/restart_block.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tv_nsec' type-id='type-id-16' visibility='default' filepath='include/linux/restart_block.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='pid_t' type-id='type-id-1576' filepath='include/linux/types.h' line='22' column='1' id='type-id-41'/>
+      <typedef-decl name='__kernel_pid_t' type-id='type-id-17' filepath='include/uapi/asm-generic/posix_types.h' line='28' column='1' id='type-id-1576'/>
+      <class-decl name='pid' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/pid.h' line='58' column='1' id='type-id-1577'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='type-id-26' visibility='default' filepath='include/linux/pid.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='level' type-id='type-id-5' visibility='default' filepath='include/linux/pid.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tasks' type-id='type-id-1125' visibility='default' filepath='include/linux/pid.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='wait_pidfd' type-id='type-id-225' visibility='default' filepath='include/linux/pid.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/linux/pid.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='numbers' type-id='type-id-1208' visibility='default' filepath='include/linux/pid.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hlist_head' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/types.h' line='190' column='1' id='type-id-186'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='first' type-id='type-id-97' visibility='default' filepath='include/linux/types.h' line='191' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hlist_node' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/types.h' line='194' column='1' id='type-id-520'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='type-id-97' visibility='default' filepath='include/linux/types.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pprev' type-id='type-id-1578' visibility='default' filepath='include/linux/types.h' line='195' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='upid' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/pid.h' line='53' column='1' id='type-id-1207'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nr' type-id='type-id-17' visibility='default' filepath='include/linux/pid.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ns' type-id='type-id-693' visibility='default' filepath='include/linux/pid.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pid_namespace' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/linux/pid_namespace.h' line='24' column='1' id='type-id-1579'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kref' type-id='type-id-239' visibility='default' filepath='include/linux/pid_namespace.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='idr' type-id='type-id-1434' visibility='default' filepath='include/linux/pid_namespace.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/linux/pid_namespace.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pid_allocated' type-id='type-id-5' visibility='default' filepath='include/linux/pid_namespace.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='child_reaper' type-id='type-id-431' visibility='default' filepath='include/linux/pid_namespace.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pid_cachep' type-id='type-id-538' visibility='default' filepath='include/linux/pid_namespace.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='level' type-id='type-id-5' visibility='default' filepath='include/linux/pid_namespace.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='parent' type-id='type-id-693' visibility='default' filepath='include/linux/pid_namespace.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='proc_mnt' type-id='type-id-1284' visibility='default' filepath='include/linux/pid_namespace.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='proc_self' type-id='type-id-23' visibility='default' filepath='include/linux/pid_namespace.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='proc_thread_self' type-id='type-id-23' visibility='default' filepath='include/linux/pid_namespace.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='user_ns' type-id='type-id-917' visibility='default' filepath='include/linux/pid_namespace.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='ucounts' type-id='type-id-1580' visibility='default' filepath='include/linux/pid_namespace.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='proc_work' type-id='type-id-255' visibility='default' filepath='include/linux/pid_namespace.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='pid_gid' type-id='type-id-330' visibility='default' filepath='include/linux/pid_namespace.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='hide_pid' type-id='type-id-17' visibility='default' filepath='include/linux/pid_namespace.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='reboot' type-id='type-id-17' visibility='default' filepath='include/linux/pid_namespace.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='ns' type-id='type-id-905' visibility='default' filepath='include/linux/pid_namespace.h' line='47' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kref' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/kref.h' line='21' column='1' id='type-id-239'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='type-id-421' visibility='default' filepath='include/linux/kref.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='refcount_t' type-id='type-id-1581' filepath='include/linux/refcount.h' line='21' column='1' id='type-id-421'/>
+      <class-decl name='refcount_struct' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/refcount.h' line='19' column='1' id='type-id-1581'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refs' type-id='type-id-26' visibility='default' filepath='include/linux/refcount.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='user_namespace' size-in-bits='3712' is-struct='yes' visibility='default' filepath='include/linux/user_namespace.h' line='55' column='1' id='type-id-1582'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='uid_map' type-id='type-id-1583' visibility='default' filepath='include/linux/user_namespace.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='gid_map' type-id='type-id-1583' visibility='default' filepath='include/linux/user_namespace.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='projid_map' type-id='type-id-1583' visibility='default' filepath='include/linux/user_namespace.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='count' type-id='type-id-26' visibility='default' filepath='include/linux/user_namespace.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='parent' type-id='type-id-917' visibility='default' filepath='include/linux/user_namespace.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='level' type-id='type-id-17' visibility='default' filepath='include/linux/user_namespace.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='owner' type-id='type-id-42' visibility='default' filepath='include/linux/user_namespace.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='group' type-id='type-id-330' visibility='default' filepath='include/linux/user_namespace.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='ns' type-id='type-id-905' visibility='default' filepath='include/linux/user_namespace.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='include/linux/user_namespace.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='work' type-id='type-id-255' visibility='default' filepath='include/linux/user_namespace.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='set' type-id='type-id-1584' visibility='default' filepath='include/linux/user_namespace.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='sysctls' type-id='type-id-1585' visibility='default' filepath='include/linux/user_namespace.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='ucounts' type-id='type-id-1580' visibility='default' filepath='include/linux/user_namespace.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='ucount_max' type-id='type-id-1135' visibility='default' filepath='include/linux/user_namespace.h' line='78' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uid_gid_map' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/user_namespace.h' line='23' column='1' id='type-id-1583'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nr_extents' type-id='type-id-7' visibility='default' filepath='include/linux/user_namespace.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='type-id-1586' visibility='default' filepath='include/linux/user_namespace.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__10' size-in-bits='512' is-anonymous='yes' visibility='default' filepath='include/linux/user_namespace.h' line='25' column='1' id='type-id-1586'>
+        <data-member access='private'>
+          <var-decl name='extent' type-id='type-id-1188' visibility='default' filepath='include/linux/user_namespace.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='type-id-1587' visibility='default' filepath='include/linux/user_namespace.h' line='27' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='uid_gid_extent' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/user_namespace.h' line='17' column='1' id='type-id-1187'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='first' type-id='type-id-7' visibility='default' filepath='include/linux/user_namespace.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lower_first' type-id='type-id-7' visibility='default' filepath='include/linux/user_namespace.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='type-id-7' visibility='default' filepath='include/linux/user_namespace.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__18' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/user_namespace.h' line='27' column='1' id='type-id-1587'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='forward' type-id='type-id-1588' visibility='default' filepath='include/linux/user_namespace.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reverse' type-id='type-id-1588' visibility='default' filepath='include/linux/user_namespace.h' line='29' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ns_common' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/ns_common.h' line='7' column='1' id='type-id-905'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stashed' type-id='type-id-115' visibility='default' filepath='include/linux/ns_common.h' line='8' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='type-id-1589' visibility='default' filepath='include/linux/ns_common.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='inum' type-id='type-id-5' visibility='default' filepath='include/linux/ns_common.h' line='10' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='work_struct' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/workqueue.h' line='102' column='1' id='type-id-255'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='data' type-id='type-id-115' visibility='default' filepath='include/linux/workqueue.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='entry' type-id='type-id-20' visibility='default' filepath='include/linux/workqueue.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='func' type-id='type-id-1590' visibility='default' filepath='include/linux/workqueue.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='work_func_t' type-id='type-id-1591' filepath='include/linux/workqueue.h' line='21' column='1' id='type-id-1590'/>
+      <class-decl name='ctl_table_set' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/sysctl.h' line='159' column='1' id='type-id-1584'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_seen' type-id='type-id-1592' visibility='default' filepath='include/linux/sysctl.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dir' type-id='type-id-1593' visibility='default' filepath='include/linux/sysctl.h' line='161' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ctl_dir' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/sysctl.h' line='153' column='1' id='type-id-1593'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='header' type-id='type-id-1594' visibility='default' filepath='include/linux/sysctl.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='root' type-id='type-id-416' visibility='default' filepath='include/linux/sysctl.h' line='156' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ctl_table_header' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/sysctl.h' line='133' column='1' id='type-id-1594'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='type-id-1595' visibility='default' filepath='include/linux/sysctl.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unregistering' type-id='type-id-1394' visibility='default' filepath='include/linux/sysctl.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ctl_table_arg' type-id='type-id-1596' visibility='default' filepath='include/linux/sysctl.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='root' type-id='type-id-1597' visibility='default' filepath='include/linux/sysctl.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set' type-id='type-id-1598' visibility='default' filepath='include/linux/sysctl.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='parent' type-id='type-id-1599' visibility='default' filepath='include/linux/sysctl.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='node' type-id='type-id-1600' visibility='default' filepath='include/linux/sysctl.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='inodes' type-id='type-id-186' visibility='default' filepath='include/linux/sysctl.h' line='150' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__11' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/sysctl.h' line='135' column='1' id='type-id-1595'>
+        <data-member access='private'>
+          <var-decl name='' type-id='type-id-1601' visibility='default' filepath='include/linux/sysctl.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/linux/sysctl.h' line='142' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__19' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/sysctl.h' line='136' column='1' id='type-id-1601'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ctl_table' type-id='type-id-1596' visibility='default' filepath='include/linux/sysctl.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='used' type-id='type-id-17' visibility='default' filepath='include/linux/sysctl.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='count' type-id='type-id-17' visibility='default' filepath='include/linux/sysctl.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nreg' type-id='type-id-17' visibility='default' filepath='include/linux/sysctl.h' line='140' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ctl_table' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/sysctl.h' line='113' column='1' id='type-id-1602'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='procname' type-id='type-id-4' visibility='default' filepath='include/linux/sysctl.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='type-id-15' visibility='default' filepath='include/linux/sysctl.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='maxlen' type-id='type-id-17' visibility='default' filepath='include/linux/sysctl.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='mode' type-id='type-id-329' visibility='default' filepath='include/linux/sysctl.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='child' type-id='type-id-1596' visibility='default' filepath='include/linux/sysctl.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='proc_handler' type-id='type-id-1603' visibility='default' filepath='include/linux/sysctl.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='poll' type-id='type-id-1604' visibility='default' filepath='include/linux/sysctl.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='extra1' type-id='type-id-15' visibility='default' filepath='include/linux/sysctl.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='extra2' type-id='type-id-15' visibility='default' filepath='include/linux/sysctl.h' line='123' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='proc_handler' type-id='type-id-1605' filepath='include/linux/sysctl.h' line='40' column='1' id='type-id-1606'/>
+      <class-decl name='ctl_table_poll' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/sysctl.h' line='95' column='1' id='type-id-1607'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='event' type-id='type-id-26' visibility='default' filepath='include/linux/sysctl.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait' type-id='type-id-225' visibility='default' filepath='include/linux/sysctl.h' line='97' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='completion' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/completion.h' line='26' column='1' id='type-id-1608'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='done' type-id='type-id-5' visibility='default' filepath='include/linux/completion.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait' type-id='type-id-225' visibility='default' filepath='include/linux/completion.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ctl_table_root' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/sysctl.h' line='164' column='1' id='type-id-1609'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='default_set' type-id='type-id-1584' visibility='default' filepath='include/linux/sysctl.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='lookup' type-id='type-id-1610' visibility='default' filepath='include/linux/sysctl.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='set_ownership' type-id='type-id-1611' visibility='default' filepath='include/linux/sysctl.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='permissions' type-id='type-id-1612' visibility='default' filepath='include/linux/sysctl.h' line='170' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ctl_node' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/sysctl.h' line='126' column='1' id='type-id-1613'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='type-id-422' visibility='default' filepath='include/linux/sysctl.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='header' type-id='type-id-1585' visibility='default' filepath='include/linux/sysctl.h' line='128' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ucounts' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/user_namespace.h' line='81' column='1' id='type-id-1614'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='type-id-520' visibility='default' filepath='include/linux/user_namespace.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ns' type-id='type-id-917' visibility='default' filepath='include/linux/user_namespace.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='uid' type-id='type-id-42' visibility='default' filepath='include/linux/user_namespace.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='count' type-id='type-id-17' visibility='default' filepath='include/linux/user_namespace.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ucount' type-id='type-id-952' visibility='default' filepath='include/linux/user_namespace.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='prev_cputime' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='235' column='1' id='type-id-1511'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='utime' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='stime' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='type-id-36' visibility='default' filepath='include/linux/sched.h' line='239' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='task_cputime' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='253' column='1' id='type-id-1512'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='utime' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='stime' type-id='type-id-40' visibility='default' filepath='include/linux/sched.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sum_exec_runtime' type-id='type-id-98' visibility='default' filepath='include/linux/sched.h' line='256' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cred' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/linux/cred.h' line='116' column='1' id='type-id-1615'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='usage' type-id='type-id-26' visibility='default' filepath='include/linux/cred.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='uid' type-id='type-id-42' visibility='default' filepath='include/linux/cred.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='gid' type-id='type-id-330' visibility='default' filepath='include/linux/cred.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='suid' type-id='type-id-42' visibility='default' filepath='include/linux/cred.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sgid' type-id='type-id-330' visibility='default' filepath='include/linux/cred.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='euid' type-id='type-id-42' visibility='default' filepath='include/linux/cred.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='egid' type-id='type-id-330' visibility='default' filepath='include/linux/cred.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='fsuid' type-id='type-id-42' visibility='default' filepath='include/linux/cred.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fsgid' type-id='type-id-330' visibility='default' filepath='include/linux/cred.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='securebits' type-id='type-id-5' visibility='default' filepath='include/linux/cred.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cap_inheritable' type-id='type-id-334' visibility='default' filepath='include/linux/cred.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cap_permitted' type-id='type-id-334' visibility='default' filepath='include/linux/cred.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='cap_effective' type-id='type-id-334' visibility='default' filepath='include/linux/cred.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cap_bset' type-id='type-id-334' visibility='default' filepath='include/linux/cred.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='cap_ambient' type-id='type-id-334' visibility='default' filepath='include/linux/cred.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='jit_keyring' type-id='type-id-216' visibility='default' filepath='include/linux/cred.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='session_keyring' type-id='type-id-1356' visibility='default' filepath='include/linux/cred.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='process_keyring' type-id='type-id-1356' visibility='default' filepath='include/linux/cred.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='thread_keyring' type-id='type-id-1356' visibility='default' filepath='include/linux/cred.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='request_key_auth' type-id='type-id-1356' visibility='default' filepath='include/linux/cred.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='security' type-id='type-id-15' visibility='default' filepath='include/linux/cred.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='user' type-id='type-id-1231' visibility='default' filepath='include/linux/cred.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='user_ns' type-id='type-id-917' visibility='default' filepath='include/linux/cred.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='group_info' type-id='type-id-1616' visibility='default' filepath='include/linux/cred.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='' type-id='type-id-1617' visibility='default' filepath='include/linux/cred.h' line='154' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='kernel_cap_t' type-id='type-id-1618' filepath='include/linux/capability.h' line='26' column='1' id='type-id-334'/>
+      <class-decl name='kernel_cap_struct' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/capability.h' line='24' column='1' id='type-id-1618'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cap' type-id='type-id-932' visibility='default' filepath='include/linux/capability.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='key' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/linux/key.h' line='155' column='1' id='type-id-1619'>
+
+          <member-type access='public'>
+            <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='165' column='1' id='type-id-1620'>
+              <data-member access='private'>
+                <var-decl name='expiry' type-id='type-id-1341' visibility='default' filepath='include/linux/key.h' line='166' column='1'/>
+              </data-member>
+              <data-member access='private'>
+                <var-decl name='revoked_at' type-id='type-id-1341' visibility='default' filepath='include/linux/key.h' line='167' column='1'/>
+              </data-member>
+            </union-decl>
+          </member-type>
+
+          <member-type access='public'>
+            <union-decl name='__anonymous_union__1' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='202' column='1' id='type-id-1621'>
+              <data-member access='private'>
+                <var-decl name='index_key' type-id='type-id-1622' visibility='default' filepath='include/linux/key.h' line='203' column='1'/>
+              </data-member>
+              <data-member access='private'>
+                <var-decl name='' type-id='type-id-1623' visibility='default' filepath='include/linux/key.h' line='204' column='1'/>
+              </data-member>
+            </union-decl>
+          </member-type>
+        <member-type access='public'>
+          <union-decl name='__anonymous_union__2' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='214' column='1' id='type-id-1624'>
+            <data-member access='private'>
+              <var-decl name='payload' type-id='type-id-1283' visibility='default' filepath='include/linux/key.h' line='215' column='1'/>
+            </data-member>
+            <data-member access='private'>
+              <var-decl name='' type-id='type-id-1625' visibility='default' filepath='include/linux/key.h' line='216' column='1'/>
+            </data-member>
+          </union-decl>
+        </member-type>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='usage' type-id='type-id-421' visibility='default' filepath='include/linux/key.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='serial' type-id='type-id-1626' visibility='default' filepath='include/linux/key.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='type-id-1627' visibility='default' filepath='include/linux/key.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sem' type-id='type-id-246' visibility='default' filepath='include/linux/key.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='user' type-id='type-id-1628' visibility='default' filepath='include/linux/key.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='security' type-id='type-id-15' visibility='default' filepath='include/linux/key.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='last_used_at' type-id='type-id-1341' visibility='default' filepath='include/linux/key.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='uid' type-id='type-id-42' visibility='default' filepath='include/linux/key.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='gid' type-id='type-id-330' visibility='default' filepath='include/linux/key.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='perm' type-id='type-id-1629' visibility='default' filepath='include/linux/key.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='quotalen' type-id='type-id-312' visibility='default' filepath='include/linux/key.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='944'>
+          <var-decl name='datalen' type-id='type-id-312' visibility='default' filepath='include/linux/key.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='state' type-id='type-id-261' visibility='default' filepath='include/linux/key.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='include/linux/key.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='restrict_link' type-id='type-id-1630' visibility='default' filepath='include/linux/key.h' line='234' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='key_serial_t' type-id='type-id-1631' filepath='include/linux/key.h' line='33' column='1' id='type-id-1626'/>
+      <typedef-decl name='int32_t' type-id='type-id-738' filepath='include/linux/types.h' line='103' column='1' id='type-id-1631'/>
+      <typedef-decl name='key_perm_t' type-id='type-id-1343' filepath='include/linux/key.h' line='36' column='1' id='type-id-1629'/>
+      <class-decl name='keyring_index_key' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/key.h' line='88' column='1' id='type-id-1622'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='type-id-1632' visibility='default' filepath='include/linux/key.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='description' type-id='type-id-4' visibility='default' filepath='include/linux/key.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='desc_len' type-id='type-id-84' visibility='default' filepath='include/linux/key.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__20' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='204' column='1' id='type-id-1623'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='type-id-1632' visibility='default' filepath='include/linux/key.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='description' type-id='type-id-2' visibility='default' filepath='include/linux/key.h' line='206' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__21' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='216' column='1' id='type-id-1625'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name_link' type-id='type-id-20' visibility='default' filepath='include/linux/key.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='keys' type-id='type-id-1633' visibility='default' filepath='include/linux/key.h' line='219' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='assoc_array' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/assoc_array.h' line='26' column='1' id='type-id-1633'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='root' type-id='type-id-1634' visibility='default' filepath='include/linux/assoc_array.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_leaves_on_tree' type-id='type-id-16' visibility='default' filepath='include/linux/assoc_array.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='key_restriction' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/key.h' line='136' column='1' id='type-id-1635'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='check' type-id='type-id-1636' visibility='default' filepath='include/linux/key.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='key' type-id='type-id-1356' visibility='default' filepath='include/linux/key.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='keytype' type-id='type-id-1632' visibility='default' filepath='include/linux/key.h' line='139' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='key_restrict_link_func_t' type-id='type-id-1637' filepath='include/linux/key.h' line='131' column='1' id='type-id-1636'/>
+      <class-decl name='user_struct' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/sched/user.h' line='15' column='1' id='type-id-1638'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__count' type-id='type-id-421' visibility='default' filepath='include/linux/sched/user.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='processes' type-id='type-id-26' visibility='default' filepath='include/linux/sched/user.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sigpending' type-id='type-id-26' visibility='default' filepath='include/linux/sched/user.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='epoll_watches' type-id='type-id-115' visibility='default' filepath='include/linux/sched/user.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='locked_shm' type-id='type-id-16' visibility='default' filepath='include/linux/sched/user.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='unix_inflight' type-id='type-id-16' visibility='default' filepath='include/linux/sched/user.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pipe_bufs' type-id='type-id-115' visibility='default' filepath='include/linux/sched/user.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='uid_keyring' type-id='type-id-1356' visibility='default' filepath='include/linux/sched/user.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='session_keyring' type-id='type-id-1356' visibility='default' filepath='include/linux/sched/user.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='uidhash_node' type-id='type-id-520' visibility='default' filepath='include/linux/sched/user.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='uid' type-id='type-id-42' visibility='default' filepath='include/linux/sched/user.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='locked_vm' type-id='type-id-115' visibility='default' filepath='include/linux/sched/user.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='ratelimit' type-id='type-id-1639' visibility='default' filepath='include/linux/sched/user.h' line='48' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ratelimit_state' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/ratelimit.h' line='15' column='1' id='type-id-1639'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='type-id-36' visibility='default' filepath='include/linux/ratelimit.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='interval' type-id='type-id-17' visibility='default' filepath='include/linux/ratelimit.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='burst' type-id='type-id-17' visibility='default' filepath='include/linux/ratelimit.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='printed' type-id='type-id-17' visibility='default' filepath='include/linux/ratelimit.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='missed' type-id='type-id-17' visibility='default' filepath='include/linux/ratelimit.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='begin' type-id='type-id-16' visibility='default' filepath='include/linux/ratelimit.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='include/linux/ratelimit.h' line='23' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='group_info' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/cred.h' line='30' column='1' id='type-id-1640'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='usage' type-id='type-id-26' visibility='default' filepath='include/linux/cred.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ngroups' type-id='type-id-17' visibility='default' filepath='include/linux/cred.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='gid' type-id='type-id-1140' visibility='default' filepath='include/linux/cred.h' line='33' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nsproxy' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/nsproxy.h' line='31' column='1' id='type-id-1641'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='type-id-26' visibility='default' filepath='include/linux/nsproxy.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='uts_ns' type-id='type-id-1642' visibility='default' filepath='include/linux/nsproxy.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ipc_ns' type-id='type-id-1643' visibility='default' filepath='include/linux/nsproxy.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mnt_ns' type-id='type-id-1644' visibility='default' filepath='include/linux/nsproxy.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pid_ns_for_children' type-id='type-id-693' visibility='default' filepath='include/linux/nsproxy.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='net_ns' type-id='type-id-1645' visibility='default' filepath='include/linux/nsproxy.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cgroup_ns' type-id='type-id-1646' visibility='default' filepath='include/linux/nsproxy.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='net' size-in-bits='42496' is-struct='yes' visibility='default' filepath='include/net/net_namespace.h' line='51' column='1' id='type-id-1647'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='passive' type-id='type-id-421' visibility='default' filepath='include/net/net_namespace.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='type-id-421' visibility='default' filepath='include/net/net_namespace.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rules_mod_lock' type-id='type-id-247' visibility='default' filepath='include/net/net_namespace.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='hash_mix' type-id='type-id-7' visibility='default' filepath='include/net/net_namespace.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cookie_gen' type-id='type-id-113' visibility='default' filepath='include/net/net_namespace.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/net/net_namespace.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='exit_list' type-id='type-id-20' visibility='default' filepath='include/net/net_namespace.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='cleanup_list' type-id='type-id-281' visibility='default' filepath='include/net/net_namespace.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='user_ns' type-id='type-id-917' visibility='default' filepath='include/net/net_namespace.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ucounts' type-id='type-id-1580' visibility='default' filepath='include/net/net_namespace.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='nsid_lock' type-id='type-id-247' visibility='default' filepath='include/net/net_namespace.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='netns_ids' type-id='type-id-1434' visibility='default' filepath='include/net/net_namespace.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='ns' type-id='type-id-905' visibility='default' filepath='include/net/net_namespace.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='proc_net' type-id='type-id-262' visibility='default' filepath='include/net/net_namespace.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='proc_net_stat' type-id='type-id-262' visibility='default' filepath='include/net/net_namespace.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='sysctls' type-id='type-id-1584' visibility='default' filepath='include/net/net_namespace.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='rtnl' type-id='type-id-1648' visibility='default' filepath='include/net/net_namespace.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='genl_sock' type-id='type-id-1648' visibility='default' filepath='include/net/net_namespace.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='uevent_sock' type-id='type-id-1649' visibility='default' filepath='include/net/net_namespace.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='dev_base_head' type-id='type-id-20' visibility='default' filepath='include/net/net_namespace.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='dev_name_head' type-id='type-id-746' visibility='default' filepath='include/net/net_namespace.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='dev_index_head' type-id='type-id-746' visibility='default' filepath='include/net/net_namespace.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='dev_base_seq' type-id='type-id-5' visibility='default' filepath='include/net/net_namespace.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2464'>
+          <var-decl name='ifindex' type-id='type-id-17' visibility='default' filepath='include/net/net_namespace.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='dev_unreg_count' type-id='type-id-5' visibility='default' filepath='include/net/net_namespace.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='rules_ops' type-id='type-id-20' visibility='default' filepath='include/net/net_namespace.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='fib_notifier_ops' type-id='type-id-20' visibility='default' filepath='include/net/net_namespace.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='loopback_dev' type-id='type-id-1650' visibility='default' filepath='include/net/net_namespace.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='core' type-id='type-id-1651' visibility='default' filepath='include/net/net_namespace.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='mib' type-id='type-id-1652' visibility='default' filepath='include/net/net_namespace.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='packet' type-id='type-id-1653' visibility='default' filepath='include/net/net_namespace.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='unx' type-id='type-id-1654' visibility='default' filepath='include/net/net_namespace.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='ipv4' type-id='type-id-1655' visibility='default' filepath='include/net/net_namespace.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14336'>
+          <var-decl name='ipv6' type-id='type-id-1656' visibility='default' filepath='include/net/net_namespace.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23040'>
+          <var-decl name='nf' type-id='type-id-1657' visibility='default' filepath='include/net/net_namespace.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24960'>
+          <var-decl name='xt' type-id='type-id-1658' visibility='default' filepath='include/net/net_namespace.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26688'>
+          <var-decl name='ct' type-id='type-id-1659' visibility='default' filepath='include/net/net_namespace.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31232'>
+          <var-decl name='nf_frag' type-id='type-id-1660' visibility='default' filepath='include/net/net_namespace.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33792'>
+          <var-decl name='nf_frag_frags_hdr' type-id='type-id-1585' visibility='default' filepath='include/net/net_namespace.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33856'>
+          <var-decl name='nfnl' type-id='type-id-1648' visibility='default' filepath='include/net/net_namespace.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33920'>
+          <var-decl name='nfnl_stash' type-id='type-id-1648' visibility='default' filepath='include/net/net_namespace.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33984'>
+          <var-decl name='wext_nlevents' type-id='type-id-1661' visibility='default' filepath='include/net/net_namespace.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34176'>
+          <var-decl name='gen' type-id='type-id-1662' visibility='default' filepath='include/net/net_namespace.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34304'>
+          <var-decl name='xfrm' type-id='type-id-1663' visibility='default' filepath='include/net/net_namespace.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40960'>
+          <var-decl name='can' type-id='type-id-1664' visibility='default' filepath='include/net/net_namespace.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='42304'>
+          <var-decl name='diag_nlsk' type-id='type-id-1648' visibility='default' filepath='include/net/net_namespace.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='42368'>
+          <var-decl name='fnhe_genid' type-id='type-id-26' visibility='default' filepath='include/net/net_namespace.h' line='163' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='net_device' size-in-bits='17408' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='1747' column='1' id='type-id-1665'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-43' visibility='default' filepath='include/linux/netdevice.h' line='1748' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name_hlist' type-id='type-id-520' visibility='default' filepath='include/linux/netdevice.h' line='1749' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ifalias' type-id='type-id-1666' visibility='default' filepath='include/linux/netdevice.h' line='1750' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mem_end' type-id='type-id-16' visibility='default' filepath='include/linux/netdevice.h' line='1755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mem_start' type-id='type-id-16' visibility='default' filepath='include/linux/netdevice.h' line='1756' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='base_addr' type-id='type-id-16' visibility='default' filepath='include/linux/netdevice.h' line='1757' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='irq' type-id='type-id-17' visibility='default' filepath='include/linux/netdevice.h' line='1758' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='state' type-id='type-id-16' visibility='default' filepath='include/linux/netdevice.h' line='1766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='dev_list' type-id='type-id-20' visibility='default' filepath='include/linux/netdevice.h' line='1768' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='napi_list' type-id='type-id-20' visibility='default' filepath='include/linux/netdevice.h' line='1769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='unreg_list' type-id='type-id-20' visibility='default' filepath='include/linux/netdevice.h' line='1770' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='close_list' type-id='type-id-20' visibility='default' filepath='include/linux/netdevice.h' line='1771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ptype_all' type-id='type-id-20' visibility='default' filepath='include/linux/netdevice.h' line='1772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='ptype_specific' type-id='type-id-20' visibility='default' filepath='include/linux/netdevice.h' line='1773' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='adj_list' type-id='type-id-1667' visibility='default' filepath='include/linux/netdevice.h' line='1778' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='features' type-id='type-id-1668' visibility='default' filepath='include/linux/netdevice.h' line='1780' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='hw_features' type-id='type-id-1668' visibility='default' filepath='include/linux/netdevice.h' line='1781' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='wanted_features' type-id='type-id-1668' visibility='default' filepath='include/linux/netdevice.h' line='1782' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='vlan_features' type-id='type-id-1668' visibility='default' filepath='include/linux/netdevice.h' line='1783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='hw_enc_features' type-id='type-id-1668' visibility='default' filepath='include/linux/netdevice.h' line='1784' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='mpls_features' type-id='type-id-1668' visibility='default' filepath='include/linux/netdevice.h' line='1785' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='gso_partial_features' type-id='type-id-1668' visibility='default' filepath='include/linux/netdevice.h' line='1786' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='ifindex' type-id='type-id-17' visibility='default' filepath='include/linux/netdevice.h' line='1788' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='group' type-id='type-id-17' visibility='default' filepath='include/linux/netdevice.h' line='1789' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='stats' type-id='type-id-1669' visibility='default' filepath='include/linux/netdevice.h' line='1791' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='rx_dropped' type-id='type-id-115' visibility='default' filepath='include/linux/netdevice.h' line='1793' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='tx_dropped' type-id='type-id-115' visibility='default' filepath='include/linux/netdevice.h' line='1794' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='rx_nohandler' type-id='type-id-115' visibility='default' filepath='include/linux/netdevice.h' line='1795' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='carrier_up_count' type-id='type-id-26' visibility='default' filepath='include/linux/netdevice.h' line='1798' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3872'>
+          <var-decl name='carrier_down_count' type-id='type-id-26' visibility='default' filepath='include/linux/netdevice.h' line='1799' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='wireless_handlers' type-id='type-id-1670' visibility='default' filepath='include/linux/netdevice.h' line='1802' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='wireless_data' type-id='type-id-1671' visibility='default' filepath='include/linux/netdevice.h' line='1803' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='netdev_ops' type-id='type-id-1672' visibility='default' filepath='include/linux/netdevice.h' line='1805' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='ethtool_ops' type-id='type-id-1673' visibility='default' filepath='include/linux/netdevice.h' line='1806' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='ndisc_ops' type-id='type-id-1674' visibility='default' filepath='include/linux/netdevice.h' line='1814' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='header_ops' type-id='type-id-1675' visibility='default' filepath='include/linux/netdevice.h' line='1825' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='flags' type-id='type-id-5' visibility='default' filepath='include/linux/netdevice.h' line='1827' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4320'>
+          <var-decl name='priv_flags' type-id='type-id-5' visibility='default' filepath='include/linux/netdevice.h' line='1828' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='gflags' type-id='type-id-312' visibility='default' filepath='include/linux/netdevice.h' line='1830' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4368'>
+          <var-decl name='padded' type-id='type-id-312' visibility='default' filepath='include/linux/netdevice.h' line='1831' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4384'>
+          <var-decl name='operstate' type-id='type-id-216' visibility='default' filepath='include/linux/netdevice.h' line='1833' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4392'>
+          <var-decl name='link_mode' type-id='type-id-216' visibility='default' filepath='include/linux/netdevice.h' line='1834' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4400'>
+          <var-decl name='if_port' type-id='type-id-216' visibility='default' filepath='include/linux/netdevice.h' line='1836' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4408'>
+          <var-decl name='dma' type-id='type-id-216' visibility='default' filepath='include/linux/netdevice.h' line='1837' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='mtu' type-id='type-id-5' visibility='default' filepath='include/linux/netdevice.h' line='1844' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4448'>
+          <var-decl name='min_mtu' type-id='type-id-5' visibility='default' filepath='include/linux/netdevice.h' line='1845' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='max_mtu' type-id='type-id-5' visibility='default' filepath='include/linux/netdevice.h' line='1846' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4512'>
+          <var-decl name='type' type-id='type-id-312' visibility='default' filepath='include/linux/netdevice.h' line='1847' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4528'>
+          <var-decl name='hard_header_len' type-id='type-id-312' visibility='default' filepath='include/linux/netdevice.h' line='1848' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='min_header_len' type-id='type-id-216' visibility='default' filepath='include/linux/netdevice.h' line='1849' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4560'>
+          <var-decl name='needed_headroom' type-id='type-id-312' visibility='default' filepath='include/linux/netdevice.h' line='1851' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4576'>
+          <var-decl name='needed_tailroom' type-id='type-id-312' visibility='default' filepath='include/linux/netdevice.h' line='1852' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4592'>
+          <var-decl name='perm_addr' type-id='type-id-35' visibility='default' filepath='include/linux/netdevice.h' line='1855' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4848'>
+          <var-decl name='addr_assign_type' type-id='type-id-216' visibility='default' filepath='include/linux/netdevice.h' line='1856' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4856'>
+          <var-decl name='addr_len' type-id='type-id-216' visibility='default' filepath='include/linux/netdevice.h' line='1857' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='upper_level' type-id='type-id-216' visibility='default' filepath='include/linux/netdevice.h' line='1858' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4872'>
+          <var-decl name='lower_level' type-id='type-id-216' visibility='default' filepath='include/linux/netdevice.h' line='1859' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4880'>
+          <var-decl name='neigh_priv_len' type-id='type-id-312' visibility='default' filepath='include/linux/netdevice.h' line='1860' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4896'>
+          <var-decl name='dev_id' type-id='type-id-312' visibility='default' filepath='include/linux/netdevice.h' line='1861' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4912'>
+          <var-decl name='dev_port' type-id='type-id-312' visibility='default' filepath='include/linux/netdevice.h' line='1862' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='addr_list_lock' type-id='type-id-247' visibility='default' filepath='include/linux/netdevice.h' line='1863' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4960'>
+          <var-decl name='name_assign_type' type-id='type-id-216' visibility='default' filepath='include/linux/netdevice.h' line='1864' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4968'>
+          <var-decl name='uc_promisc' type-id='type-id-33' visibility='default' filepath='include/linux/netdevice.h' line='1865' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='uc' type-id='type-id-1676' visibility='default' filepath='include/linux/netdevice.h' line='1866' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='mc' type-id='type-id-1676' visibility='default' filepath='include/linux/netdevice.h' line='1867' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='dev_addrs' type-id='type-id-1676' visibility='default' filepath='include/linux/netdevice.h' line='1868' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='queues_kset' type-id='type-id-1395' visibility='default' filepath='include/linux/netdevice.h' line='1871' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='promiscuity' type-id='type-id-5' visibility='default' filepath='include/linux/netdevice.h' line='1873' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5664'>
+          <var-decl name='allmulti' type-id='type-id-5' visibility='default' filepath='include/linux/netdevice.h' line='1874' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='tipc_ptr' type-id='type-id-1677' visibility='default' filepath='include/linux/netdevice.h' line='1886' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='ip_ptr' type-id='type-id-1678' visibility='default' filepath='include/linux/netdevice.h' line='1891' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='ip6_ptr' type-id='type-id-1679' visibility='default' filepath='include/linux/netdevice.h' line='1895' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='ieee80211_ptr' type-id='type-id-1680' visibility='default' filepath='include/linux/netdevice.h' line='1899' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='ieee802154_ptr' type-id='type-id-1681' visibility='default' filepath='include/linux/netdevice.h' line='1900' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='dev_addr' type-id='type-id-256' visibility='default' filepath='include/linux/netdevice.h' line='1909' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='_rx' type-id='type-id-1682' visibility='default' filepath='include/linux/netdevice.h' line='1911' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='num_rx_queues' type-id='type-id-5' visibility='default' filepath='include/linux/netdevice.h' line='1912' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6176'>
+          <var-decl name='real_num_rx_queues' type-id='type-id-5' visibility='default' filepath='include/linux/netdevice.h' line='1913' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='xdp_prog' type-id='type-id-1230' visibility='default' filepath='include/linux/netdevice.h' line='1915' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='gro_flush_timeout' type-id='type-id-16' visibility='default' filepath='include/linux/netdevice.h' line='1916' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='rx_handler' type-id='type-id-1683' visibility='default' filepath='include/linux/netdevice.h' line='1917' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='rx_handler_data' type-id='type-id-15' visibility='default' filepath='include/linux/netdevice.h' line='1918' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='miniq_ingress' type-id='type-id-1684' visibility='default' filepath='include/linux/netdevice.h' line='1921' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='ingress_queue' type-id='type-id-1685' visibility='default' filepath='include/linux/netdevice.h' line='1923' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='nf_hooks_ingress' type-id='type-id-1153' visibility='default' filepath='include/linux/netdevice.h' line='1925' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='broadcast' type-id='type-id-35' visibility='default' filepath='include/linux/netdevice.h' line='1928' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='rx_cpu_rmap' type-id='type-id-1686' visibility='default' filepath='include/linux/netdevice.h' line='1930' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='index_hlist' type-id='type-id-520' visibility='default' filepath='include/linux/netdevice.h' line='1932' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='_tx' type-id='type-id-1685' visibility='default' filepath='include/linux/netdevice.h' line='1937' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='num_tx_queues' type-id='type-id-5' visibility='default' filepath='include/linux/netdevice.h' line='1938' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7264'>
+          <var-decl name='real_num_tx_queues' type-id='type-id-5' visibility='default' filepath='include/linux/netdevice.h' line='1939' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='qdisc' type-id='type-id-1687' visibility='default' filepath='include/linux/netdevice.h' line='1940' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='qdisc_hash' type-id='type-id-1123' visibility='default' filepath='include/linux/netdevice.h' line='1942' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='tx_queue_len' type-id='type-id-5' visibility='default' filepath='include/linux/netdevice.h' line='1944' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8416'>
+          <var-decl name='tx_global_lock' type-id='type-id-247' visibility='default' filepath='include/linux/netdevice.h' line='1945' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='watchdog_timeo' type-id='type-id-17' visibility='default' filepath='include/linux/netdevice.h' line='1946' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='xps_cpus_map' type-id='type-id-1688' visibility='default' filepath='include/linux/netdevice.h' line='1949' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='xps_rxqs_map' type-id='type-id-1688' visibility='default' filepath='include/linux/netdevice.h' line='1950' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='miniq_egress' type-id='type-id-1684' visibility='default' filepath='include/linux/netdevice.h' line='1953' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='watchdog_timer' type-id='type-id-417' visibility='default' filepath='include/linux/netdevice.h' line='1957' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='pcpu_refcnt' type-id='type-id-666' visibility='default' filepath='include/linux/netdevice.h' line='1959' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='todo_list' type-id='type-id-20' visibility='default' filepath='include/linux/netdevice.h' line='1960' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='link_watch_list' type-id='type-id-20' visibility='default' filepath='include/linux/netdevice.h' line='1962' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='reg_state' type-id='type-id-1689' visibility='default' filepath='include/linux/netdevice.h' line='1970' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9352'>
+          <var-decl name='dismantle' type-id='type-id-33' visibility='default' filepath='include/linux/netdevice.h' line='1972' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='rtnl_link_state' type-id='type-id-1690' visibility='default' filepath='include/linux/netdevice.h' line='1977' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9376'>
+          <var-decl name='needs_free_netdev' type-id='type-id-33' visibility='default' filepath='include/linux/netdevice.h' line='1979' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='priv_destructor' type-id='type-id-1691' visibility='default' filepath='include/linux/netdevice.h' line='1980' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='nd_net' type-id='type-id-1692' visibility='default' filepath='include/linux/netdevice.h' line='1986' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='' type-id='type-id-1693' visibility='default' filepath='include/linux/netdevice.h' line='1989' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='dev' type-id='type-id-388' visibility='default' filepath='include/linux/netdevice.h' line='2004' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15744'>
+          <var-decl name='sysfs_groups' type-id='type-id-1116' visibility='default' filepath='include/linux/netdevice.h' line='2005' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16000'>
+          <var-decl name='sysfs_rx_queue_group' type-id='type-id-894' visibility='default' filepath='include/linux/netdevice.h' line='2006' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16064'>
+          <var-decl name='rtnl_link_ops' type-id='type-id-1694' visibility='default' filepath='include/linux/netdevice.h' line='2008' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16128'>
+          <var-decl name='gso_max_size' type-id='type-id-5' visibility='default' filepath='include/linux/netdevice.h' line='2012' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16160'>
+          <var-decl name='gso_max_segs' type-id='type-id-688' visibility='default' filepath='include/linux/netdevice.h' line='2014' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16176'>
+          <var-decl name='num_tc' type-id='type-id-1695' visibility='default' filepath='include/linux/netdevice.h' line='2019' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16192'>
+          <var-decl name='tc_to_txq' type-id='type-id-1152' visibility='default' filepath='include/linux/netdevice.h' line='2020' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16704'>
+          <var-decl name='prio_tc_map' type-id='type-id-1182' visibility='default' filepath='include/linux/netdevice.h' line='2021' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16832'>
+          <var-decl name='phydev' type-id='type-id-1696' visibility='default' filepath='include/linux/netdevice.h' line='2029' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16896'>
+          <var-decl name='sfp_bus' type-id='type-id-1697' visibility='default' filepath='include/linux/netdevice.h' line='2030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16960'>
+          <var-decl name='qdisc_tx_busylock' type-id='type-id-1698' visibility='default' filepath='include/linux/netdevice.h' line='2031' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17024'>
+          <var-decl name='qdisc_running_key' type-id='type-id-1698' visibility='default' filepath='include/linux/netdevice.h' line='2032' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17088'>
+          <var-decl name='proto_down' type-id='type-id-33' visibility='default' filepath='include/linux/netdevice.h' line='2033' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='wol_enabled' type-id='type-id-5' visibility='default' filepath='include/linux/netdevice.h' line='2034' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_ifalias' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='916' column='1' id='type-id-1699'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcuhead' type-id='type-id-385' visibility='default' filepath='include/linux/netdevice.h' line='917' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ifalias' type-id='type-id-440' visibility='default' filepath='include/linux/netdevice.h' line='918' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__22' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/netdevice.h' line='1775' column='1' id='type-id-1667'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='upper' type-id='type-id-20' visibility='default' filepath='include/linux/netdevice.h' line='1776' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lower' type-id='type-id-20' visibility='default' filepath='include/linux/netdevice.h' line='1777' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='netdev_features_t' type-id='type-id-40' filepath='include/linux/netdev_features.h' line='17' column='1' id='type-id-1668'/>
+      <class-decl name='net_device_stats' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='165' column='1' id='type-id-1669'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rx_packets' type-id='type-id-16' visibility='default' filepath='include/linux/netdevice.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tx_packets' type-id='type-id-16' visibility='default' filepath='include/linux/netdevice.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rx_bytes' type-id='type-id-16' visibility='default' filepath='include/linux/netdevice.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_bytes' type-id='type-id-16' visibility='default' filepath='include/linux/netdevice.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rx_errors' type-id='type-id-16' visibility='default' filepath='include/linux/netdevice.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tx_errors' type-id='type-id-16' visibility='default' filepath='include/linux/netdevice.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rx_dropped' type-id='type-id-16' visibility='default' filepath='include/linux/netdevice.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='tx_dropped' type-id='type-id-16' visibility='default' filepath='include/linux/netdevice.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='multicast' type-id='type-id-16' visibility='default' filepath='include/linux/netdevice.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='collisions' type-id='type-id-16' visibility='default' filepath='include/linux/netdevice.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='rx_length_errors' type-id='type-id-16' visibility='default' filepath='include/linux/netdevice.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='rx_over_errors' type-id='type-id-16' visibility='default' filepath='include/linux/netdevice.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='rx_crc_errors' type-id='type-id-16' visibility='default' filepath='include/linux/netdevice.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='rx_frame_errors' type-id='type-id-16' visibility='default' filepath='include/linux/netdevice.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='rx_fifo_errors' type-id='type-id-16' visibility='default' filepath='include/linux/netdevice.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='rx_missed_errors' type-id='type-id-16' visibility='default' filepath='include/linux/netdevice.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='tx_aborted_errors' type-id='type-id-16' visibility='default' filepath='include/linux/netdevice.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='tx_carrier_errors' type-id='type-id-16' visibility='default' filepath='include/linux/netdevice.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='tx_fifo_errors' type-id='type-id-16' visibility='default' filepath='include/linux/netdevice.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='tx_heartbeat_errors' type-id='type-id-16' visibility='default' filepath='include/linux/netdevice.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='tx_window_errors' type-id='type-id-16' visibility='default' filepath='include/linux/netdevice.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rx_compressed' type-id='type-id-16' visibility='default' filepath='include/linux/netdevice.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='tx_compressed' type-id='type-id-16' visibility='default' filepath='include/linux/netdevice.h' line='188' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='net_device_ops' size-in-bits='4096' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='1225' column='1' id='type-id-1700'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ndo_init' type-id='type-id-1701' visibility='default' filepath='include/linux/netdevice.h' line='1226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ndo_uninit' type-id='type-id-1691' visibility='default' filepath='include/linux/netdevice.h' line='1227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ndo_open' type-id='type-id-1701' visibility='default' filepath='include/linux/netdevice.h' line='1228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ndo_stop' type-id='type-id-1701' visibility='default' filepath='include/linux/netdevice.h' line='1229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ndo_start_xmit' type-id='type-id-1702' visibility='default' filepath='include/linux/netdevice.h' line='1230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ndo_features_check' type-id='type-id-1703' visibility='default' filepath='include/linux/netdevice.h' line='1232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ndo_select_queue' type-id='type-id-1704' visibility='default' filepath='include/linux/netdevice.h' line='1235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ndo_change_rx_flags' type-id='type-id-1705' visibility='default' filepath='include/linux/netdevice.h' line='1239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ndo_set_rx_mode' type-id='type-id-1691' visibility='default' filepath='include/linux/netdevice.h' line='1241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ndo_set_mac_address' type-id='type-id-1706' visibility='default' filepath='include/linux/netdevice.h' line='1242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ndo_validate_addr' type-id='type-id-1701' visibility='default' filepath='include/linux/netdevice.h' line='1244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='ndo_do_ioctl' type-id='type-id-1707' visibility='default' filepath='include/linux/netdevice.h' line='1245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='ndo_set_config' type-id='type-id-1708' visibility='default' filepath='include/linux/netdevice.h' line='1247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='ndo_change_mtu' type-id='type-id-1709' visibility='default' filepath='include/linux/netdevice.h' line='1249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='ndo_neigh_setup' type-id='type-id-1710' visibility='default' filepath='include/linux/netdevice.h' line='1251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='ndo_tx_timeout' type-id='type-id-1691' visibility='default' filepath='include/linux/netdevice.h' line='1253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='ndo_get_stats64' type-id='type-id-1711' visibility='default' filepath='include/linux/netdevice.h' line='1255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='ndo_has_offload_stats' type-id='type-id-1712' visibility='default' filepath='include/linux/netdevice.h' line='1257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ndo_get_offload_stats' type-id='type-id-1713' visibility='default' filepath='include/linux/netdevice.h' line='1258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='ndo_get_stats' type-id='type-id-1714' visibility='default' filepath='include/linux/netdevice.h' line='1261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='ndo_vlan_rx_add_vid' type-id='type-id-1715' visibility='default' filepath='include/linux/netdevice.h' line='1263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='ndo_vlan_rx_kill_vid' type-id='type-id-1715' visibility='default' filepath='include/linux/netdevice.h' line='1265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='ndo_set_vf_mac' type-id='type-id-1716' visibility='default' filepath='include/linux/netdevice.h' line='1273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='ndo_set_vf_vlan' type-id='type-id-1717' visibility='default' filepath='include/linux/netdevice.h' line='1275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='ndo_set_vf_rate' type-id='type-id-1718' visibility='default' filepath='include/linux/netdevice.h' line='1278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='ndo_set_vf_spoofchk' type-id='type-id-1719' visibility='default' filepath='include/linux/netdevice.h' line='1281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='ndo_set_vf_trust' type-id='type-id-1719' visibility='default' filepath='include/linux/netdevice.h' line='1283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='ndo_get_vf_config' type-id='type-id-1720' visibility='default' filepath='include/linux/netdevice.h' line='1285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='ndo_set_vf_link_state' type-id='type-id-1721' visibility='default' filepath='include/linux/netdevice.h' line='1288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='ndo_get_vf_stats' type-id='type-id-1722' visibility='default' filepath='include/linux/netdevice.h' line='1290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='ndo_set_vf_port' type-id='type-id-1723' visibility='default' filepath='include/linux/netdevice.h' line='1294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='ndo_get_vf_port' type-id='type-id-1724' visibility='default' filepath='include/linux/netdevice.h' line='1297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='ndo_set_vf_guid' type-id='type-id-1725' visibility='default' filepath='include/linux/netdevice.h' line='1299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='ndo_set_vf_rss_query_en' type-id='type-id-1719' visibility='default' filepath='include/linux/netdevice.h' line='1302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='ndo_setup_tc' type-id='type-id-1726' visibility='default' filepath='include/linux/netdevice.h' line='1305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='ndo_rx_flow_steer' type-id='type-id-1727' visibility='default' filepath='include/linux/netdevice.h' line='1333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='ndo_add_slave' type-id='type-id-1728' visibility='default' filepath='include/linux/netdevice.h' line='1338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='ndo_del_slave' type-id='type-id-1729' visibility='default' filepath='include/linux/netdevice.h' line='1341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='ndo_fix_features' type-id='type-id-1730' visibility='default' filepath='include/linux/netdevice.h' line='1343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='ndo_set_features' type-id='type-id-1731' visibility='default' filepath='include/linux/netdevice.h' line='1345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='ndo_neigh_construct' type-id='type-id-1732' visibility='default' filepath='include/linux/netdevice.h' line='1347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='ndo_neigh_destroy' type-id='type-id-1733' visibility='default' filepath='include/linux/netdevice.h' line='1349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='ndo_fdb_add' type-id='type-id-1734' visibility='default' filepath='include/linux/netdevice.h' line='1352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='ndo_fdb_del' type-id='type-id-1735' visibility='default' filepath='include/linux/netdevice.h' line='1358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='ndo_fdb_dump' type-id='type-id-1736' visibility='default' filepath='include/linux/netdevice.h' line='1363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='ndo_bridge_setlink' type-id='type-id-1737' visibility='default' filepath='include/linux/netdevice.h' line='1369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='ndo_bridge_getlink' type-id='type-id-1738' visibility='default' filepath='include/linux/netdevice.h' line='1372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='ndo_bridge_dellink' type-id='type-id-1737' visibility='default' filepath='include/linux/netdevice.h' line='1377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='ndo_change_carrier' type-id='type-id-1739' visibility='default' filepath='include/linux/netdevice.h' line='1380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='ndo_get_phys_port_id' type-id='type-id-1740' visibility='default' filepath='include/linux/netdevice.h' line='1382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='ndo_get_phys_port_name' type-id='type-id-1741' visibility='default' filepath='include/linux/netdevice.h' line='1384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='ndo_udp_tunnel_add' type-id='type-id-1742' visibility='default' filepath='include/linux/netdevice.h' line='1386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='ndo_udp_tunnel_del' type-id='type-id-1742' visibility='default' filepath='include/linux/netdevice.h' line='1388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='ndo_dfwd_add_station' type-id='type-id-1743' visibility='default' filepath='include/linux/netdevice.h' line='1390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='ndo_dfwd_del_station' type-id='type-id-1744' visibility='default' filepath='include/linux/netdevice.h' line='1392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='ndo_get_lock_subclass' type-id='type-id-1701' visibility='default' filepath='include/linux/netdevice.h' line='1395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='ndo_set_tx_maxrate' type-id='type-id-1745' visibility='default' filepath='include/linux/netdevice.h' line='1396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='ndo_get_iflink' type-id='type-id-1746' visibility='default' filepath='include/linux/netdevice.h' line='1399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='ndo_change_proto_down' type-id='type-id-1739' visibility='default' filepath='include/linux/netdevice.h' line='1400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='ndo_fill_metadata_dst' type-id='type-id-1747' visibility='default' filepath='include/linux/netdevice.h' line='1402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='ndo_set_rx_headroom' type-id='type-id-1705' visibility='default' filepath='include/linux/netdevice.h' line='1404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='ndo_bpf' type-id='type-id-1748' visibility='default' filepath='include/linux/netdevice.h' line='1406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='ndo_xdp_xmit' type-id='type-id-1749' visibility='default' filepath='include/linux/netdevice.h' line='1408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='ndo_xsk_async_xmit' type-id='type-id-1750' visibility='default' filepath='include/linux/netdevice.h' line='1411' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='netdev_tx_t' type-id='type-id-1751' filepath='include/linux/netdevice.h' line='116' column='1' id='type-id-1752'/>
+      <enum-decl name='netdev_tx' filepath='include/linux/netdevice.h' line='111' column='1' id='type-id-1751'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='__NETDEV_TX_MIN' value='-2147483648'/>
+        <enumerator name='NETDEV_TX_OK' value='0'/>
+        <enumerator name='NETDEV_TX_BUSY' value='16'/>
+      </enum-decl>
+      <class-decl name='sk_buff' size-in-bits='1792' is-struct='yes' visibility='default' filepath='include/linux/skbuff.h' line='665' column='1' id='type-id-1753'>
+
+          <member-type access='public'>
+            <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='685' column='1' id='type-id-1754'>
+              <data-member access='private'>
+                <var-decl name='sk' type-id='type-id-1648' visibility='default' filepath='include/linux/skbuff.h' line='686' column='1'/>
+              </data-member>
+              <data-member access='private'>
+                <var-decl name='ip_defrag_offset' type-id='type-id-17' visibility='default' filepath='include/linux/skbuff.h' line='687' column='1'/>
+              </data-member>
+            </union-decl>
+          </member-type>
+
+          <member-type access='public'>
+            <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='690' column='1' id='type-id-1755'>
+              <data-member access='private'>
+                <var-decl name='tstamp' type-id='type-id-682' visibility='default' filepath='include/linux/skbuff.h' line='691' column='1'/>
+              </data-member>
+              <data-member access='private'>
+                <var-decl name='skb_mstamp' type-id='type-id-40' visibility='default' filepath='include/linux/skbuff.h' line='692' column='1'/>
+              </data-member>
+            </union-decl>
+          </member-type>
+
+          <member-type access='public'>
+            <union-decl name='__anonymous_union__2' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='702' column='1' id='type-id-1756'>
+              <data-member access='private'>
+                <var-decl name='' type-id='type-id-1757' visibility='default' filepath='include/linux/skbuff.h' line='703' column='1'/>
+              </data-member>
+              <data-member access='private'>
+                <var-decl name='tcp_tsorted_anchor' type-id='type-id-20' visibility='default' filepath='include/linux/skbuff.h' line='707' column='1'/>
+              </data-member>
+            </union-decl>
+          </member-type>
+
+          <member-type access='public'>
+            <union-decl name='__anonymous_union__3' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='807' column='1' id='type-id-1758'>
+              <data-member access='private'>
+                <var-decl name='csum' type-id='type-id-1759' visibility='default' filepath='include/linux/skbuff.h' line='808' column='1'/>
+              </data-member>
+              <data-member access='private'>
+                <var-decl name='' type-id='type-id-1760' visibility='default' filepath='include/linux/skbuff.h' line='809' column='1'/>
+              </data-member>
+            </union-decl>
+          </member-type>
+
+          <member-type access='public'>
+            <union-decl name='__anonymous_union__4' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='820' column='1' id='type-id-1761'>
+              <data-member access='private'>
+                <var-decl name='napi_id' type-id='type-id-5' visibility='default' filepath='include/linux/skbuff.h' line='821' column='1'/>
+              </data-member>
+              <data-member access='private'>
+                <var-decl name='sender_cpu' type-id='type-id-5' visibility='default' filepath='include/linux/skbuff.h' line='822' column='1'/>
+              </data-member>
+            </union-decl>
+          </member-type>
+
+          <member-type access='public'>
+            <union-decl name='__anonymous_union__5' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='829' column='1' id='type-id-1762'>
+              <data-member access='private'>
+                <var-decl name='mark' type-id='type-id-511' visibility='default' filepath='include/linux/skbuff.h' line='830' column='1'/>
+              </data-member>
+              <data-member access='private'>
+                <var-decl name='reserved_tailroom' type-id='type-id-511' visibility='default' filepath='include/linux/skbuff.h' line='831' column='1'/>
+              </data-member>
+            </union-decl>
+          </member-type>
+        <member-type access='public'>
+          <union-decl name='__anonymous_union__6' size-in-bits='16' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='834' column='1' id='type-id-1763'>
+            <data-member access='private'>
+              <var-decl name='inner_protocol' type-id='type-id-926' visibility='default' filepath='include/linux/skbuff.h' line='835' column='1'/>
+            </data-member>
+            <data-member access='private'>
+              <var-decl name='inner_ipproto' type-id='type-id-895' visibility='default' filepath='include/linux/skbuff.h' line='836' column='1'/>
+            </data-member>
+          </union-decl>
+        </member-type>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='type-id-1764' visibility='default' filepath='include/linux/skbuff.h' line='666' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cb' type-id='type-id-972' visibility='default' filepath='include/linux/skbuff.h' line='700' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='sp' type-id='type-id-1765' visibility='default' filepath='include/linux/skbuff.h' line='711' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='_nfct' type-id='type-id-16' visibility='default' filepath='include/linux/skbuff.h' line='714' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='len' type-id='type-id-5' visibility='default' filepath='include/linux/skbuff.h' line='719' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='data_len' type-id='type-id-5' visibility='default' filepath='include/linux/skbuff.h' line='720' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='mac_len' type-id='type-id-108' visibility='default' filepath='include/linux/skbuff.h' line='721' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1040'>
+          <var-decl name='hdr_len' type-id='type-id-108' visibility='default' filepath='include/linux/skbuff.h' line='722' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='queue_mapping' type-id='type-id-108' visibility='default' filepath='include/linux/skbuff.h' line='727' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1072'>
+          <var-decl name='__cloned_offset' type-id='type-id-946' visibility='default' filepath='include/linux/skbuff.h' line='737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='cloned' type-id='type-id-895' visibility='default' filepath='include/linux/skbuff.h' line='738' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='nohdr' type-id='type-id-895' visibility='default' filepath='include/linux/skbuff.h' line='739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='fclone' type-id='type-id-895' visibility='default' filepath='include/linux/skbuff.h' line='740' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='peeked' type-id='type-id-895' visibility='default' filepath='include/linux/skbuff.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='head_frag' type-id='type-id-895' visibility='default' filepath='include/linux/skbuff.h' line='742' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='xmit_more' type-id='type-id-895' visibility='default' filepath='include/linux/skbuff.h' line='743' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1072'>
+          <var-decl name='pfmemalloc' type-id='type-id-895' visibility='default' filepath='include/linux/skbuff.h' line='744' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='headers_start' type-id='type-id-936' visibility='default' filepath='include/linux/skbuff.h' line='750' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='__pkt_type_offset' type-id='type-id-946' visibility='default' filepath='include/linux/skbuff.h' line='761' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='pkt_type' type-id='type-id-895' visibility='default' filepath='include/linux/skbuff.h' line='762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='ignore_df' type-id='type-id-895' visibility='default' filepath='include/linux/skbuff.h' line='763' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='nf_trace' type-id='type-id-895' visibility='default' filepath='include/linux/skbuff.h' line='764' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='ip_summed' type-id='type-id-895' visibility='default' filepath='include/linux/skbuff.h' line='765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='ooo_okay' type-id='type-id-895' visibility='default' filepath='include/linux/skbuff.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='l4_hash' type-id='type-id-895' visibility='default' filepath='include/linux/skbuff.h' line='768' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='sw_hash' type-id='type-id-895' visibility='default' filepath='include/linux/skbuff.h' line='769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='wifi_acked_valid' type-id='type-id-895' visibility='default' filepath='include/linux/skbuff.h' line='770' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='wifi_acked' type-id='type-id-895' visibility='default' filepath='include/linux/skbuff.h' line='771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='no_fcs' type-id='type-id-895' visibility='default' filepath='include/linux/skbuff.h' line='772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='encapsulation' type-id='type-id-895' visibility='default' filepath='include/linux/skbuff.h' line='774' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='encap_hdr_csum' type-id='type-id-895' visibility='default' filepath='include/linux/skbuff.h' line='775' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1096'>
+          <var-decl name='csum_valid' type-id='type-id-895' visibility='default' filepath='include/linux/skbuff.h' line='776' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='csum_complete_sw' type-id='type-id-895' visibility='default' filepath='include/linux/skbuff.h' line='778' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='csum_level' type-id='type-id-895' visibility='default' filepath='include/linux/skbuff.h' line='779' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='csum_not_inet' type-id='type-id-895' visibility='default' filepath='include/linux/skbuff.h' line='780' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='dst_pending_confirm' type-id='type-id-895' visibility='default' filepath='include/linux/skbuff.h' line='781' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='ndisc_nodetype' type-id='type-id-895' visibility='default' filepath='include/linux/skbuff.h' line='783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1104'>
+          <var-decl name='ipvs_property' type-id='type-id-895' visibility='default' filepath='include/linux/skbuff.h' line='785' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='inner_protocol_type' type-id='type-id-895' visibility='default' filepath='include/linux/skbuff.h' line='787' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='remcsum_offload' type-id='type-id-895' visibility='default' filepath='include/linux/skbuff.h' line='788' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='tc_skip_classify' type-id='type-id-895' visibility='default' filepath='include/linux/skbuff.h' line='794' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='tc_at_ingress' type-id='type-id-895' visibility='default' filepath='include/linux/skbuff.h' line='795' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='tc_redirected' type-id='type-id-895' visibility='default' filepath='include/linux/skbuff.h' line='796' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='tc_from_ingress' type-id='type-id-895' visibility='default' filepath='include/linux/skbuff.h' line='797' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='tc_index' type-id='type-id-108' visibility='default' filepath='include/linux/skbuff.h' line='804' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='priority' type-id='type-id-511' visibility='default' filepath='include/linux/skbuff.h' line='814' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='skb_iif' type-id='type-id-17' visibility='default' filepath='include/linux/skbuff.h' line='815' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='hash' type-id='type-id-511' visibility='default' filepath='include/linux/skbuff.h' line='816' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='vlan_proto' type-id='type-id-926' visibility='default' filepath='include/linux/skbuff.h' line='817' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1296'>
+          <var-decl name='vlan_tci' type-id='type-id-108' visibility='default' filepath='include/linux/skbuff.h' line='818' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='secmark' type-id='type-id-511' visibility='default' filepath='include/linux/skbuff.h' line='826' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1424'>
+          <var-decl name='inner_transport_header' type-id='type-id-108' visibility='default' filepath='include/linux/skbuff.h' line='839' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='inner_network_header' type-id='type-id-108' visibility='default' filepath='include/linux/skbuff.h' line='840' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1456'>
+          <var-decl name='inner_mac_header' type-id='type-id-108' visibility='default' filepath='include/linux/skbuff.h' line='841' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='protocol' type-id='type-id-926' visibility='default' filepath='include/linux/skbuff.h' line='843' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1488'>
+          <var-decl name='transport_header' type-id='type-id-108' visibility='default' filepath='include/linux/skbuff.h' line='844' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='network_header' type-id='type-id-108' visibility='default' filepath='include/linux/skbuff.h' line='845' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1520'>
+          <var-decl name='mac_header' type-id='type-id-108' visibility='default' filepath='include/linux/skbuff.h' line='846' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='headers_end' type-id='type-id-936' visibility='default' filepath='include/linux/skbuff.h' line='849' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='tail' type-id='type-id-1766' visibility='default' filepath='include/linux/skbuff.h' line='853' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='end' type-id='type-id-1766' visibility='default' filepath='include/linux/skbuff.h' line='854' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='head' type-id='type-id-256' visibility='default' filepath='include/linux/skbuff.h' line='855' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='data' type-id='type-id-256' visibility='default' filepath='include/linux/skbuff.h' line='856' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='truesize' type-id='type-id-5' visibility='default' filepath='include/linux/skbuff.h' line='857' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1760'>
+          <var-decl name='users' type-id='type-id-421' visibility='default' filepath='include/linux/skbuff.h' line='858' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__23' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='667' column='1' id='type-id-1767'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='type-id-1768' visibility='default' filepath='include/linux/skbuff.h' line='669' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prev' type-id='type-id-1768' visibility='default' filepath='include/linux/skbuff.h' line='670' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='type-id-1769' visibility='default' filepath='include/linux/skbuff.h' line='672' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__15' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='672' column='1' id='type-id-1769'>
+        <data-member access='private'>
+          <var-decl name='dev' type-id='type-id-1650' visibility='default' filepath='include/linux/skbuff.h' line='673' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='dev_scratch' type-id='type-id-16' visibility='default' filepath='include/linux/skbuff.h' line='678' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__24' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='703' column='1' id='type-id-1757'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_skb_refdst' type-id='type-id-16' visibility='default' filepath='include/linux/skbuff.h' line='704' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='destructor' type-id='type-id-1770' visibility='default' filepath='include/linux/skbuff.h' line='705' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__wsum' type-id='type-id-511' filepath='include/uapi/linux/types.h' line='37' column='1' id='type-id-1759'/>
+      <class-decl name='__anonymous_struct__25' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='809' column='1' id='type-id-1760'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='csum_start' type-id='type-id-108' visibility='default' filepath='include/linux/skbuff.h' line='810' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='csum_offset' type-id='type-id-108' visibility='default' filepath='include/linux/skbuff.h' line='811' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__be16' type-id='type-id-108' filepath='include/uapi/linux/types.h' line='30' column='1' id='type-id-926'/>
+      <typedef-decl name='sk_buff_data_t' type-id='type-id-5' filepath='include/linux/skbuff.h' line='585' column='1' id='type-id-1766'/>
+      <typedef-decl name='select_queue_fallback_t' type-id='type-id-1771' filepath='include/linux/netdevice.h' line='800' column='1' id='type-id-1772'/>
+      <class-decl name='ifreq' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/if.h' line='231' column='1' id='type-id-1773'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ifr_ifrn' type-id='type-id-1774' visibility='default' filepath='include/uapi/linux/if.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ifr_ifru' type-id='type-id-1775' visibility='default' filepath='include/uapi/linux/if.h' line='252' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__16' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/if.h' line='233' column='1' id='type-id-1774'>
+        <data-member access='private'>
+          <var-decl name='ifrn_name' type-id='type-id-43' visibility='default' filepath='include/uapi/linux/if.h' line='235' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__17' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/if.h' line='238' column='1' id='type-id-1775'>
+        <data-member access='private'>
+          <var-decl name='ifru_addr' type-id='type-id-1776' visibility='default' filepath='include/uapi/linux/if.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ifru_dstaddr' type-id='type-id-1776' visibility='default' filepath='include/uapi/linux/if.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ifru_broadaddr' type-id='type-id-1776' visibility='default' filepath='include/uapi/linux/if.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ifru_netmask' type-id='type-id-1776' visibility='default' filepath='include/uapi/linux/if.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ifru_hwaddr' type-id='type-id-1776' visibility='default' filepath='include/uapi/linux/if.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ifru_flags' type-id='type-id-261' visibility='default' filepath='include/uapi/linux/if.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ifru_ivalue' type-id='type-id-17' visibility='default' filepath='include/uapi/linux/if.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ifru_mtu' type-id='type-id-17' visibility='default' filepath='include/uapi/linux/if.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ifru_map' type-id='type-id-1777' visibility='default' filepath='include/uapi/linux/if.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ifru_slave' type-id='type-id-43' visibility='default' filepath='include/uapi/linux/if.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ifru_newname' type-id='type-id-43' visibility='default' filepath='include/uapi/linux/if.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ifru_data' type-id='type-id-15' visibility='default' filepath='include/uapi/linux/if.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ifru_settings' type-id='type-id-1778' visibility='default' filepath='include/uapi/linux/if.h' line='251' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='sockaddr' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/socket.h' line='30' column='1' id='type-id-1776'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sa_family' type-id='type-id-1779' visibility='default' filepath='include/linux/socket.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='sa_data' type-id='type-id-968' visibility='default' filepath='include/linux/socket.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='sa_family_t' type-id='type-id-337' filepath='include/linux/socket.h' line='24' column='1' id='type-id-1779'/>
+      <typedef-decl name='__kernel_sa_family_t' type-id='type-id-312' filepath='include/uapi/linux/socket.h' line='12' column='1' id='type-id-337'/>
+      <class-decl name='ifmap' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/if.h' line='194' column='1' id='type-id-1777'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mem_start' type-id='type-id-16' visibility='default' filepath='include/uapi/linux/if.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mem_end' type-id='type-id-16' visibility='default' filepath='include/uapi/linux/if.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='base_addr' type-id='type-id-312' visibility='default' filepath='include/uapi/linux/if.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='irq' type-id='type-id-216' visibility='default' filepath='include/uapi/linux/if.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='dma' type-id='type-id-216' visibility='default' filepath='include/uapi/linux/if.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='port' type-id='type-id-216' visibility='default' filepath='include/uapi/linux/if.h' line='200' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='if_settings' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/if.h' line='205' column='1' id='type-id-1778'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='type-id-5' visibility='default' filepath='include/uapi/linux/if.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='size' type-id='type-id-5' visibility='default' filepath='include/uapi/linux/if.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ifs_ifsu' type-id='type-id-1780' visibility='default' filepath='include/uapi/linux/if.h' line='219' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__18' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/if.h' line='208' column='1' id='type-id-1780'>
+        <data-member access='private'>
+          <var-decl name='raw_hdlc' type-id='type-id-1781' visibility='default' filepath='include/uapi/linux/if.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='cisco' type-id='type-id-1782' visibility='default' filepath='include/uapi/linux/if.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='fr' type-id='type-id-1783' visibility='default' filepath='include/uapi/linux/if.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='fr_pvc' type-id='type-id-1784' visibility='default' filepath='include/uapi/linux/if.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='fr_pvc_info' type-id='type-id-1785' visibility='default' filepath='include/uapi/linux/if.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sync' type-id='type-id-1786' visibility='default' filepath='include/uapi/linux/if.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='te1' type-id='type-id-1787' visibility='default' filepath='include/uapi/linux/if.h' line='218' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='raw_hdlc_proto' type-id='type-id-1788' filepath='include/uapi/linux/hdlc/ioctl.h' line='56' column='1' id='type-id-1789'/>
+      <class-decl name='__anonymous_struct__26' size-in-bits='32' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-1789' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='53' column='1' id='type-id-1788'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='encoding' type-id='type-id-312' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='parity' type-id='type-id-312' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='cisco_proto' type-id='type-id-1790' filepath='include/uapi/linux/hdlc/ioctl.h' line='80' column='1' id='type-id-1791'/>
+      <class-decl name='__anonymous_struct__27' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-1791' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='77' column='1' id='type-id-1790'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='interval' type-id='type-id-5' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='timeout' type-id='type-id-5' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='fr_proto' type-id='type-id-1792' filepath='include/uapi/linux/hdlc/ioctl.h' line='66' column='1' id='type-id-1793'/>
+      <class-decl name='__anonymous_struct__28' size-in-bits='192' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-1793' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='58' column='1' id='type-id-1792'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='t391' type-id='type-id-5' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='t392' type-id='type-id-5' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n391' type-id='type-id-5' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='n392' type-id='type-id-5' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='n393' type-id='type-id-5' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='lmi' type-id='type-id-312' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='dce' type-id='type-id-312' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='65' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='fr_proto_pvc' type-id='type-id-1794' filepath='include/uapi/linux/hdlc/ioctl.h' line='70' column='1' id='type-id-1795'/>
+      <class-decl name='__anonymous_struct__29' size-in-bits='32' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-1795' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='68' column='1' id='type-id-1794'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dlci' type-id='type-id-5' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='69' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='fr_proto_pvc_info' type-id='type-id-1796' filepath='include/uapi/linux/hdlc/ioctl.h' line='75' column='1' id='type-id-1797'/>
+      <class-decl name='__anonymous_struct__30' size-in-bits='160' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-1797' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='72' column='1' id='type-id-1796'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dlci' type-id='type-id-5' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='master' type-id='type-id-43' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='sync_serial_settings' type-id='type-id-1798' filepath='include/uapi/linux/hdlc/ioctl.h' line='44' column='1' id='type-id-1799'/>
+      <class-decl name='__anonymous_struct__31' size-in-bits='96' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-1799' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='40' column='1' id='type-id-1798'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='clock_rate' type-id='type-id-5' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='clock_type' type-id='type-id-5' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='loopback' type-id='type-id-312' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='te1_settings' type-id='type-id-1800' filepath='include/uapi/linux/hdlc/ioctl.h' line='51' column='1' id='type-id-1801'/>
+      <class-decl name='__anonymous_struct__32' size-in-bits='128' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-1801' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='46' column='1' id='type-id-1800'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='clock_rate' type-id='type-id-5' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='clock_type' type-id='type-id-5' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='loopback' type-id='type-id-312' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='slot_map' type-id='type-id-5' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='50' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rtnl_link_stats64' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/uapi/linux/if_link.h' line='44' column='1' id='type-id-1802'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rx_packets' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/if_link.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tx_packets' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/if_link.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rx_bytes' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/if_link.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_bytes' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/if_link.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rx_errors' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/if_link.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tx_errors' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/if_link.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rx_dropped' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/if_link.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='tx_dropped' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/if_link.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='multicast' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/if_link.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='collisions' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/if_link.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='rx_length_errors' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/if_link.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='rx_over_errors' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/if_link.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='rx_crc_errors' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/if_link.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='rx_frame_errors' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/if_link.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='rx_fifo_errors' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/if_link.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='rx_missed_errors' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/if_link.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='tx_aborted_errors' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/if_link.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='tx_carrier_errors' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/if_link.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='tx_fifo_errors' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/if_link.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='tx_heartbeat_errors' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/if_link.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='tx_window_errors' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/if_link.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rx_compressed' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/if_link.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='tx_compressed' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/if_link.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='rx_nohandler' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/if_link.h' line='75' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ifla_vf_info' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/if_link.h' line='20' column='1' id='type-id-1803'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vf' type-id='type-id-511' visibility='default' filepath='include/linux/if_link.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='mac' type-id='type-id-940' visibility='default' filepath='include/linux/if_link.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='vlan' type-id='type-id-511' visibility='default' filepath='include/linux/if_link.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='qos' type-id='type-id-511' visibility='default' filepath='include/linux/if_link.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='spoofchk' type-id='type-id-511' visibility='default' filepath='include/linux/if_link.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='linkstate' type-id='type-id-511' visibility='default' filepath='include/linux/if_link.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='min_tx_rate' type-id='type-id-511' visibility='default' filepath='include/linux/if_link.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='max_tx_rate' type-id='type-id-511' visibility='default' filepath='include/linux/if_link.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='rss_query_en' type-id='type-id-511' visibility='default' filepath='include/linux/if_link.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='trusted' type-id='type-id-511' visibility='default' filepath='include/linux/if_link.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='vlan_proto' type-id='type-id-926' visibility='default' filepath='include/linux/if_link.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ifla_vf_stats' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/if_link.h' line='9' column='1' id='type-id-1804'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rx_packets' type-id='type-id-100' visibility='default' filepath='include/linux/if_link.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tx_packets' type-id='type-id-100' visibility='default' filepath='include/linux/if_link.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rx_bytes' type-id='type-id-100' visibility='default' filepath='include/linux/if_link.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_bytes' type-id='type-id-100' visibility='default' filepath='include/linux/if_link.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='broadcast' type-id='type-id-100' visibility='default' filepath='include/linux/if_link.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='multicast' type-id='type-id-100' visibility='default' filepath='include/linux/if_link.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rx_dropped' type-id='type-id-100' visibility='default' filepath='include/linux/if_link.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='tx_dropped' type-id='type-id-100' visibility='default' filepath='include/linux/if_link.h' line='17' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nlattr' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/netlink.h' line='210' column='1' id='type-id-1805'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nla_len' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/netlink.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='nla_type' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/netlink.h' line='212' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='tc_setup_type' filepath='include/linux/netdevice.h' line='804' column='1' id='type-id-1806'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='TC_SETUP_QDISC_MQPRIO' value='0'/>
+        <enumerator name='TC_SETUP_CLSU32' value='1'/>
+        <enumerator name='TC_SETUP_CLSFLOWER' value='2'/>
+        <enumerator name='TC_SETUP_CLSMATCHALL' value='3'/>
+        <enumerator name='TC_SETUP_CLSBPF' value='4'/>
+        <enumerator name='TC_SETUP_BLOCK' value='5'/>
+        <enumerator name='TC_SETUP_QDISC_CBS' value='6'/>
+        <enumerator name='TC_SETUP_QDISC_RED' value='7'/>
+        <enumerator name='TC_SETUP_QDISC_PRIO' value='8'/>
+        <enumerator name='TC_SETUP_QDISC_MQ' value='9'/>
+        <enumerator name='TC_SETUP_QDISC_ETF' value='10'/>
+      </enum-decl>
+      <class-decl name='netlink_ext_ack' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/netlink.h' line='74' column='1' id='type-id-1807'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_msg' type-id='type-id-4' visibility='default' filepath='include/linux/netlink.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bad_attr' type-id='type-id-1808' visibility='default' filepath='include/linux/netlink.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cookie' type-id='type-id-1183' visibility='default' filepath='include/linux/netlink.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='cookie_len' type-id='type-id-214' visibility='default' filepath='include/linux/netlink.h' line='78' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ndmsg' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/neighbour.h' line='8' column='1' id='type-id-1809'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ndm_family' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/neighbour.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='ndm_pad1' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/neighbour.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='ndm_pad2' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/neighbour.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ndm_ifindex' type-id='type-id-653' visibility='default' filepath='include/uapi/linux/neighbour.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ndm_state' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/neighbour.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='ndm_flags' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/neighbour.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='ndm_type' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/neighbour.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netlink_callback' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/linux/netlink.h' line='170' column='1' id='type-id-1810'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='skb' type-id='type-id-1768' visibility='default' filepath='include/linux/netlink.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nlh' type-id='type-id-1811' visibility='default' filepath='include/linux/netlink.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dump' type-id='type-id-1812' visibility='default' filepath='include/linux/netlink.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='done' type-id='type-id-1813' visibility='default' filepath='include/linux/netlink.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='data' type-id='type-id-15' visibility='default' filepath='include/linux/netlink.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='module' type-id='type-id-260' visibility='default' filepath='include/linux/netlink.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='family' type-id='type-id-688' visibility='default' filepath='include/linux/netlink.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='400'>
+          <var-decl name='min_dump_alloc' type-id='type-id-688' visibility='default' filepath='include/linux/netlink.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='prev_seq' type-id='type-id-5' visibility='default' filepath='include/linux/netlink.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='seq' type-id='type-id-5' visibility='default' filepath='include/linux/netlink.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='args' type-id='type-id-349' visibility='default' filepath='include/linux/netlink.h' line='182' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nlmsghdr' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/netlink.h' line='44' column='1' id='type-id-1814'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nlmsg_len' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/netlink.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nlmsg_type' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/netlink.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='nlmsg_flags' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/netlink.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nlmsg_seq' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/netlink.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='nlmsg_pid' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/netlink.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netdev_phys_item_id' size-in-bits='264' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='788' column='1' id='type-id-1815'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='type-id-35' visibility='default' filepath='include/linux/netdevice.h' line='789' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='id_len' type-id='type-id-216' visibility='default' filepath='include/linux/netdevice.h' line='790' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netdev_bpf' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='847' column='1' id='type-id-1816'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='command' type-id='type-id-1817' visibility='default' filepath='include/linux/netdevice.h' line='848' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='type-id-1818' visibility='default' filepath='include/linux/netdevice.h' line='849' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='bpf_netdev_command' filepath='include/linux/netdevice.h' line='821' column='1' id='type-id-1817'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='XDP_SETUP_PROG' value='0'/>
+        <enumerator name='XDP_SETUP_PROG_HW' value='1'/>
+        <enumerator name='XDP_QUERY_PROG' value='2'/>
+        <enumerator name='XDP_QUERY_PROG_HW' value='3'/>
+        <enumerator name='BPF_OFFLOAD_VERIFIER_PREP' value='4'/>
+        <enumerator name='BPF_OFFLOAD_TRANSLATE' value='5'/>
+        <enumerator name='BPF_OFFLOAD_DESTROY' value='6'/>
+        <enumerator name='BPF_OFFLOAD_MAP_ALLOC' value='7'/>
+        <enumerator name='BPF_OFFLOAD_MAP_FREE' value='8'/>
+        <enumerator name='XDP_QUERY_XSK_UMEM' value='9'/>
+        <enumerator name='XDP_SETUP_XSK_UMEM' value='10'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__19' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/netdevice.h' line='849' column='1' id='type-id-1818'>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/netdevice.h' line='857' column='1' id='type-id-1819'>
+            <data-member access='public' layout-offset-in-bits='0'>
+              <var-decl name='prog_id' type-id='type-id-7' visibility='default' filepath='include/linux/netdevice.h' line='858' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='32'>
+              <var-decl name='prog_flags' type-id='type-id-7' visibility='default' filepath='include/linux/netdevice.h' line='860' column='1'/>
+            </data-member>
+          </class-decl>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__1' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/netdevice.h' line='872' column='1' id='type-id-1820'>
+            <data-member access='public' layout-offset-in-bits='0'>
+              <var-decl name='offmap' type-id='type-id-1821' visibility='default' filepath='include/linux/netdevice.h' line='873' column='1'/>
+            </data-member>
+          </class-decl>
+        </member-type>
+        <data-member access='private'>
+          <var-decl name='' type-id='type-id-1822' visibility='default' filepath='include/linux/netdevice.h' line='851' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='verifier' type-id='type-id-1823' visibility='default' filepath='include/linux/netdevice.h' line='866' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='offload' type-id='type-id-1824' visibility='default' filepath='include/linux/netdevice.h' line='870' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='xsk' type-id='type-id-1825' visibility='default' filepath='include/linux/netdevice.h' line='879' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__33' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/netdevice.h' line='851' column='1' id='type-id-1822'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='type-id-7' visibility='default' filepath='include/linux/netdevice.h' line='852' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prog' type-id='type-id-1230' visibility='default' filepath='include/linux/netdevice.h' line='853' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='extack' type-id='type-id-1826' visibility='default' filepath='include/linux/netdevice.h' line='854' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__34' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/netdevice.h' line='863' column='1' id='type-id-1823'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prog' type-id='type-id-1230' visibility='default' filepath='include/linux/netdevice.h' line='864' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='type-id-1827' visibility='default' filepath='include/linux/netdevice.h' line='865' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_prog_offload_ops' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='259' column='1' id='type-id-1828'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='insn_hook' type-id='type-id-1829' visibility='default' filepath='include/linux/bpf.h' line='260' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__35' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/netdevice.h' line='868' column='1' id='type-id-1824'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prog' type-id='type-id-1230' visibility='default' filepath='include/linux/netdevice.h' line='869' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_offloaded_map' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='103' column='1' id='type-id-1830'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='map' type-id='type-id-1256' visibility='default' filepath='include/linux/bpf.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='netdev' type-id='type-id-1650' visibility='default' filepath='include/linux/bpf.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='dev_ops' type-id='type-id-1831' visibility='default' filepath='include/linux/bpf.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='dev_priv' type-id='type-id-15' visibility='default' filepath='include/linux/bpf.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='offloads' type-id='type-id-20' visibility='default' filepath='include/linux/bpf.h' line='108' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_map_dev_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='93' column='1' id='type-id-1832'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='map_get_next_key' type-id='type-id-1833' visibility='default' filepath='include/linux/bpf.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='map_lookup_elem' type-id='type-id-1833' visibility='default' filepath='include/linux/bpf.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map_update_elem' type-id='type-id-1834' visibility='default' filepath='include/linux/bpf.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='map_delete_elem' type-id='type-id-1835' visibility='default' filepath='include/linux/bpf.h' line='100' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__36' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/netdevice.h' line='876' column='1' id='type-id-1825'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='umem' type-id='type-id-1836' visibility='default' filepath='include/linux/netdevice.h' line='877' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='queue_id' type-id='type-id-688' visibility='default' filepath='include/linux/netdevice.h' line='878' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xdp_frame' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/xdp.h' line='75' column='1' id='type-id-1837'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='data' type-id='type-id-15' visibility='default' filepath='include/net/xdp.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='len' type-id='type-id-688' visibility='default' filepath='include/net/xdp.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='headroom' type-id='type-id-688' visibility='default' filepath='include/net/xdp.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='metasize' type-id='type-id-688' visibility='default' filepath='include/net/xdp.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mem' type-id='type-id-1838' visibility='default' filepath='include/net/xdp.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev_rx' type-id='type-id-1650' visibility='default' filepath='include/net/xdp.h' line='84' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xdp_mem_info' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/xdp.h' line='48' column='1' id='type-id-1838'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='type-id-7' visibility='default' filepath='include/net/xdp.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='id' type-id='type-id-7' visibility='default' filepath='include/net/xdp.h' line='50' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_ops' size-in-bits='3712' is-struct='yes' visibility='default' filepath='include/linux/ethtool.h' line='331' column='1' id='type-id-1839'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_settings' type-id='type-id-1840' visibility='default' filepath='include/linux/ethtool.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='set_settings' type-id='type-id-1840' visibility='default' filepath='include/linux/ethtool.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_drvinfo' type-id='type-id-1841' visibility='default' filepath='include/linux/ethtool.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_regs_len' type-id='type-id-1701' visibility='default' filepath='include/linux/ethtool.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_regs' type-id='type-id-1842' visibility='default' filepath='include/linux/ethtool.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_wol' type-id='type-id-1843' visibility='default' filepath='include/linux/ethtool.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_wol' type-id='type-id-1844' visibility='default' filepath='include/linux/ethtool.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_msglevel' type-id='type-id-1845' visibility='default' filepath='include/linux/ethtool.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_msglevel' type-id='type-id-1846' visibility='default' filepath='include/linux/ethtool.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='nway_reset' type-id='type-id-1701' visibility='default' filepath='include/linux/ethtool.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='get_link' type-id='type-id-1845' visibility='default' filepath='include/linux/ethtool.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='get_eeprom_len' type-id='type-id-1701' visibility='default' filepath='include/linux/ethtool.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='get_eeprom' type-id='type-id-1847' visibility='default' filepath='include/linux/ethtool.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='set_eeprom' type-id='type-id-1847' visibility='default' filepath='include/linux/ethtool.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='get_coalesce' type-id='type-id-1848' visibility='default' filepath='include/linux/ethtool.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='set_coalesce' type-id='type-id-1848' visibility='default' filepath='include/linux/ethtool.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='get_ringparam' type-id='type-id-1849' visibility='default' filepath='include/linux/ethtool.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='set_ringparam' type-id='type-id-1850' visibility='default' filepath='include/linux/ethtool.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='get_pauseparam' type-id='type-id-1851' visibility='default' filepath='include/linux/ethtool.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='set_pauseparam' type-id='type-id-1852' visibility='default' filepath='include/linux/ethtool.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='self_test' type-id='type-id-1853' visibility='default' filepath='include/linux/ethtool.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='get_strings' type-id='type-id-1854' visibility='default' filepath='include/linux/ethtool.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='set_phys_id' type-id='type-id-1855' visibility='default' filepath='include/linux/ethtool.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='get_ethtool_stats' type-id='type-id-1856' visibility='default' filepath='include/linux/ethtool.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='begin' type-id='type-id-1701' visibility='default' filepath='include/linux/ethtool.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='complete' type-id='type-id-1691' visibility='default' filepath='include/linux/ethtool.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='get_priv_flags' type-id='type-id-1845' visibility='default' filepath='include/linux/ethtool.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='set_priv_flags' type-id='type-id-1750' visibility='default' filepath='include/linux/ethtool.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='get_sset_count' type-id='type-id-1709' visibility='default' filepath='include/linux/ethtool.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='get_rxnfc' type-id='type-id-1857' visibility='default' filepath='include/linux/ethtool.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='set_rxnfc' type-id='type-id-1858' visibility='default' filepath='include/linux/ethtool.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='flash_device' type-id='type-id-1859' visibility='default' filepath='include/linux/ethtool.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='reset' type-id='type-id-1860' visibility='default' filepath='include/linux/ethtool.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='get_rxfh_key_size' type-id='type-id-1845' visibility='default' filepath='include/linux/ethtool.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='get_rxfh_indir_size' type-id='type-id-1845' visibility='default' filepath='include/linux/ethtool.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='get_rxfh' type-id='type-id-1861' visibility='default' filepath='include/linux/ethtool.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='set_rxfh' type-id='type-id-1862' visibility='default' filepath='include/linux/ethtool.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='get_rxfh_context' type-id='type-id-1863' visibility='default' filepath='include/linux/ethtool.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='set_rxfh_context' type-id='type-id-1864' visibility='default' filepath='include/linux/ethtool.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='get_channels' type-id='type-id-1865' visibility='default' filepath='include/linux/ethtool.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='set_channels' type-id='type-id-1866' visibility='default' filepath='include/linux/ethtool.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='get_dump_flag' type-id='type-id-1867' visibility='default' filepath='include/linux/ethtool.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='get_dump_data' type-id='type-id-1868' visibility='default' filepath='include/linux/ethtool.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='set_dump' type-id='type-id-1867' visibility='default' filepath='include/linux/ethtool.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='get_ts_info' type-id='type-id-1869' visibility='default' filepath='include/linux/ethtool.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='get_module_info' type-id='type-id-1870' visibility='default' filepath='include/linux/ethtool.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='get_module_eeprom' type-id='type-id-1847' visibility='default' filepath='include/linux/ethtool.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='get_eee' type-id='type-id-1871' visibility='default' filepath='include/linux/ethtool.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='set_eee' type-id='type-id-1871' visibility='default' filepath='include/linux/ethtool.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='get_tunable' type-id='type-id-1872' visibility='default' filepath='include/linux/ethtool.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='set_tunable' type-id='type-id-1872' visibility='default' filepath='include/linux/ethtool.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='get_per_queue_coalesce' type-id='type-id-1873' visibility='default' filepath='include/linux/ethtool.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='set_per_queue_coalesce' type-id='type-id-1873' visibility='default' filepath='include/linux/ethtool.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='get_link_ksettings' type-id='type-id-1874' visibility='default' filepath='include/linux/ethtool.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='set_link_ksettings' type-id='type-id-1875' visibility='default' filepath='include/linux/ethtool.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='get_fecparam' type-id='type-id-1876' visibility='default' filepath='include/linux/ethtool.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='set_fecparam' type-id='type-id-1876' visibility='default' filepath='include/linux/ethtool.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='get_ethtool_phy_stats' type-id='type-id-1856' visibility='default' filepath='include/linux/ethtool.h' line='413' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_cmd' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='100' column='1' id='type-id-1877'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='supported' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='advertising' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='speed' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/ethtool.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='duplex' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/ethtool.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='port' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/ethtool.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='phy_address' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/ethtool.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='transceiver' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/ethtool.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='autoneg' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/ethtool.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='mdio_support' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/ethtool.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='maxtxpkt' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='maxrxpkt' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='speed_hi' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/ethtool.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='240'>
+          <var-decl name='eth_tp_mdix' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/ethtool.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='248'>
+          <var-decl name='eth_tp_mdix_ctrl' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/ethtool.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lp_advertising' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='reserved' type-id='type-id-932' visibility='default' filepath='include/uapi/linux/ethtool.h' line='117' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_drvinfo' size-in-bits='1568' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='181' column='1' id='type-id-1878'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='driver' type-id='type-id-373' visibility='default' filepath='include/uapi/linux/ethtool.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='version' type-id='type-id-373' visibility='default' filepath='include/uapi/linux/ethtool.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='fw_version' type-id='type-id-373' visibility='default' filepath='include/uapi/linux/ethtool.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='bus_info' type-id='type-id-373' visibility='default' filepath='include/uapi/linux/ethtool.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='erom_version' type-id='type-id-373' visibility='default' filepath='include/uapi/linux/ethtool.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='reserved2' type-id='type-id-966' visibility='default' filepath='include/uapi/linux/ethtool.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='n_priv_flags' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='n_stats' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='testinfo_len' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='eedump_len' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='regdump_len' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='193' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_regs' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='284' column='1' id='type-id-1879'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='version' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='len' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='data' type-id='type-id-946' visibility='default' filepath='include/uapi/linux/ethtool.h' line='288' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_wolinfo' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='207' column='1' id='type-id-1880'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='supported' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wolopts' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='sopass' type-id='type-id-945' visibility='default' filepath='include/uapi/linux/ethtool.h' line='211' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_eeprom' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='309' column='1' id='type-id-1881'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='magic' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='offset' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='len' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='type-id-946' visibility='default' filepath='include/uapi/linux/ethtool.h' line='314' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_coalesce' size-in-bits='736' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='436' column='1' id='type-id-1882'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='rx_coalesce_usecs' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_max_coalesced_frames' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='rx_coalesce_usecs_irq' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rx_max_coalesced_frames_irq' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tx_coalesce_usecs' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_max_coalesced_frames' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='tx_coalesce_usecs_irq' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tx_max_coalesced_frames_irq' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='stats_block_coalesce_usecs' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='use_adaptive_rx_coalesce' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='use_adaptive_tx_coalesce' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pkt_rate_low' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='rx_coalesce_usecs_low' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rx_max_coalesced_frames_low' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='tx_coalesce_usecs_low' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='tx_max_coalesced_frames_low' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='pkt_rate_high' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rx_coalesce_usecs_high' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='rx_max_coalesced_frames_high' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='tx_coalesce_usecs_high' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='tx_max_coalesced_frames_high' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='rate_sample_interval' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='459' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_ringparam' size-in-bits='288' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='487' column='1' id='type-id-1883'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='rx_max_pending' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_mini_max_pending' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='rx_jumbo_max_pending' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tx_max_pending' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='rx_pending' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rx_mini_pending' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='rx_jumbo_pending' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tx_pending' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='496' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_pauseparam' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='549' column='1' id='type-id-1884'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='autoneg' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_pause' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='tx_pause' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='553' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_test' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='657' column='1' id='type-id-1885'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='658' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reserved' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='len' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='type-id-735' visibility='default' filepath='include/uapi/linux/ethtool.h' line='662' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ethtool_phys_id_state' filepath='include/linux/ethtool.h' line='54' column='1' id='type-id-1886'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='ETHTOOL_ID_INACTIVE' value='0'/>
+        <enumerator name='ETHTOOL_ID_ACTIVE' value='1'/>
+        <enumerator name='ETHTOOL_ID_ON' value='2'/>
+        <enumerator name='ETHTOOL_ID_OFF' value='3'/>
+      </enum-decl>
+      <class-decl name='ethtool_stats' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='676' column='1' id='type-id-1887'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='677' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='n_stats' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='678' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='type-id-735' visibility='default' filepath='include/uapi/linux/ethtool.h' line='679' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_rxnfc' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='975' column='1' id='type-id-1888'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='976' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flow_type' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='977' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/ethtool.h' line='978' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fs' type-id='type-id-1889' visibility='default' filepath='include/uapi/linux/ethtool.h' line='979' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='' type-id='type-id-1890' visibility='default' filepath='include/uapi/linux/ethtool.h' line='980' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='rule_locs' type-id='type-id-936' visibility='default' filepath='include/uapi/linux/ethtool.h' line='984' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_rx_flow_spec' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='879' column='1' id='type-id-1889'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flow_type' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='880' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='h_u' type-id='type-id-1891' visibility='default' filepath='include/uapi/linux/ethtool.h' line='881' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='h_ext' type-id='type-id-1892' visibility='default' filepath='include/uapi/linux/ethtool.h' line='882' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='m_u' type-id='type-id-1891' visibility='default' filepath='include/uapi/linux/ethtool.h' line='883' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='m_ext' type-id='type-id-1892' visibility='default' filepath='include/uapi/linux/ethtool.h' line='884' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='ring_cookie' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/ethtool.h' line='885' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='location' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='886' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='ethtool_flow_union' size-in-bits='416' visibility='default' filepath='include/uapi/linux/ethtool.h' line='826' column='1' id='type-id-1891'>
+        <data-member access='private'>
+          <var-decl name='tcp_ip4_spec' type-id='type-id-1893' visibility='default' filepath='include/uapi/linux/ethtool.h' line='827' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='udp_ip4_spec' type-id='type-id-1893' visibility='default' filepath='include/uapi/linux/ethtool.h' line='828' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sctp_ip4_spec' type-id='type-id-1893' visibility='default' filepath='include/uapi/linux/ethtool.h' line='829' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ah_ip4_spec' type-id='type-id-1894' visibility='default' filepath='include/uapi/linux/ethtool.h' line='830' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='esp_ip4_spec' type-id='type-id-1894' visibility='default' filepath='include/uapi/linux/ethtool.h' line='831' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='usr_ip4_spec' type-id='type-id-1895' visibility='default' filepath='include/uapi/linux/ethtool.h' line='832' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='tcp_ip6_spec' type-id='type-id-1896' visibility='default' filepath='include/uapi/linux/ethtool.h' line='833' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='udp_ip6_spec' type-id='type-id-1896' visibility='default' filepath='include/uapi/linux/ethtool.h' line='834' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sctp_ip6_spec' type-id='type-id-1896' visibility='default' filepath='include/uapi/linux/ethtool.h' line='835' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ah_ip6_spec' type-id='type-id-1897' visibility='default' filepath='include/uapi/linux/ethtool.h' line='836' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='esp_ip6_spec' type-id='type-id-1897' visibility='default' filepath='include/uapi/linux/ethtool.h' line='837' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='usr_ip6_spec' type-id='type-id-1898' visibility='default' filepath='include/uapi/linux/ethtool.h' line='838' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ether_spec' type-id='type-id-1899' visibility='default' filepath='include/uapi/linux/ethtool.h' line='839' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='hdata' type-id='type-id-943' visibility='default' filepath='include/uapi/linux/ethtool.h' line='840' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='ethtool_tcpip4_spec' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='732' column='1' id='type-id-1893'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ip4src' type-id='type-id-929' visibility='default' filepath='include/uapi/linux/ethtool.h' line='733' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ip4dst' type-id='type-id-929' visibility='default' filepath='include/uapi/linux/ethtool.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='psrc' type-id='type-id-926' visibility='default' filepath='include/uapi/linux/ethtool.h' line='735' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='pdst' type-id='type-id-926' visibility='default' filepath='include/uapi/linux/ethtool.h' line='736' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='tos' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/ethtool.h' line='737' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__be32' type-id='type-id-511' filepath='include/uapi/linux/types.h' line='32' column='1' id='type-id-929'/>
+      <class-decl name='ethtool_ah_espip4_spec' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='749' column='1' id='type-id-1894'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ip4src' type-id='type-id-929' visibility='default' filepath='include/uapi/linux/ethtool.h' line='750' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ip4dst' type-id='type-id-929' visibility='default' filepath='include/uapi/linux/ethtool.h' line='751' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='spi' type-id='type-id-929' visibility='default' filepath='include/uapi/linux/ethtool.h' line='752' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='tos' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/ethtool.h' line='753' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_usrip4_spec' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='767' column='1' id='type-id-1895'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ip4src' type-id='type-id-929' visibility='default' filepath='include/uapi/linux/ethtool.h' line='768' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ip4dst' type-id='type-id-929' visibility='default' filepath='include/uapi/linux/ethtool.h' line='769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='l4_4_bytes' type-id='type-id-929' visibility='default' filepath='include/uapi/linux/ethtool.h' line='770' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='tos' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/ethtool.h' line='771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='ip_ver' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/ethtool.h' line='772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='proto' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/ethtool.h' line='773' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_tcpip6_spec' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='786' column='1' id='type-id-1896'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ip6src' type-id='type-id-931' visibility='default' filepath='include/uapi/linux/ethtool.h' line='787' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ip6dst' type-id='type-id-931' visibility='default' filepath='include/uapi/linux/ethtool.h' line='788' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='psrc' type-id='type-id-926' visibility='default' filepath='include/uapi/linux/ethtool.h' line='789' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='pdst' type-id='type-id-926' visibility='default' filepath='include/uapi/linux/ethtool.h' line='790' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='tclass' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/ethtool.h' line='791' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_ah_espip6_spec' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='803' column='1' id='type-id-1897'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ip6src' type-id='type-id-931' visibility='default' filepath='include/uapi/linux/ethtool.h' line='804' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ip6dst' type-id='type-id-931' visibility='default' filepath='include/uapi/linux/ethtool.h' line='805' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='spi' type-id='type-id-929' visibility='default' filepath='include/uapi/linux/ethtool.h' line='806' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='tclass' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/ethtool.h' line='807' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_usrip6_spec' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='818' column='1' id='type-id-1898'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ip6src' type-id='type-id-931' visibility='default' filepath='include/uapi/linux/ethtool.h' line='819' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ip6dst' type-id='type-id-931' visibility='default' filepath='include/uapi/linux/ethtool.h' line='820' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='l4_4_bytes' type-id='type-id-929' visibility='default' filepath='include/uapi/linux/ethtool.h' line='821' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='tclass' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/ethtool.h' line='822' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='296'>
+          <var-decl name='l4_proto' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/ethtool.h' line='823' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethhdr' size-in-bits='112' is-struct='yes' visibility='default' filepath='include/uapi/linux/if_ether.h' line='161' column='1' id='type-id-1899'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='h_dest' type-id='type-id-1189' visibility='default' filepath='include/uapi/linux/if_ether.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='h_source' type-id='type-id-1189' visibility='default' filepath='include/uapi/linux/if_ether.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='h_proto' type-id='type-id-926' visibility='default' filepath='include/uapi/linux/if_ether.h' line='164' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_flow_ext' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='854' column='1' id='type-id-1892'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='padding' type-id='type-id-939' visibility='default' filepath='include/uapi/linux/ethtool.h' line='855' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='h_dest' type-id='type-id-1189' visibility='default' filepath='include/uapi/linux/ethtool.h' line='856' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vlan_etype' type-id='type-id-926' visibility='default' filepath='include/uapi/linux/ethtool.h' line='857' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='vlan_tci' type-id='type-id-926' visibility='default' filepath='include/uapi/linux/ethtool.h' line='858' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='data' type-id='type-id-930' visibility='default' filepath='include/uapi/linux/ethtool.h' line='859' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__20' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='980' column='1' id='type-id-1890'>
+        <data-member access='private'>
+          <var-decl name='rule_cnt' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='981' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rss_context' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='982' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='ethtool_flash' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1104' column='1' id='type-id-1900'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='region' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='type-id-964' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1107' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_channels' size-in-bits='288' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='515' column='1' id='type-id-1901'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max_rx' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_tx' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_other' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max_combined' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='rx_count' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_count' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='other_count' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='combined_count' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='524' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_dump' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1124' column='1' id='type-id-1902'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='version' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flag' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='len' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='type-id-946' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1129' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_ts_info' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1204' column='1' id='type-id-1903'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='so_timestamping' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='phc_index' type-id='type-id-653' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='tx_types' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tx_reserved' type-id='type-id-933' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='rx_filters' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rx_reserved' type-id='type-id-933' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1211' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_modinfo' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='356' column='1' id='type-id-1904'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='eeprom_len' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='reserved' type-id='type-id-935' visibility='default' filepath='include/uapi/linux/ethtool.h' line='360' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_eee' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='334' column='1' id='type-id-1905'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='supported' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='advertised' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='lp_advertised' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='eee_active' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='eee_enabled' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_lpi_enabled' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='tx_lpi_timer' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='reserved' type-id='type-id-932' visibility='default' filepath='include/uapi/linux/ethtool.h' line='343' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_tunable' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='248' column='1' id='type-id-1906'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='id' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='type_id' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='len' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='type-id-1213' visibility='default' filepath='include/uapi/linux/ethtool.h' line='253' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_link_ksettings' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/ethtool.h' line='112' column='1' id='type-id-1907'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='type-id-1908' visibility='default' filepath='include/linux/ethtool.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='link_modes' type-id='type-id-1909' visibility='default' filepath='include/linux/ethtool.h' line='118' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_link_settings' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1827' column='1' id='type-id-1908'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1828' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='speed' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1829' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='duplex' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1830' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='port' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1831' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='phy_address' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1832' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='autoneg' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1833' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='mdio_support' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1834' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='eth_tp_mdix' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1835' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='eth_tp_mdix_ctrl' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1836' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='link_mode_masks_nwords' type-id='type-id-1910' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1837' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='transceiver' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1838' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='reserved1' type-id='type-id-942' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1839' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='reserved' type-id='type-id-934' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1840' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='link_mode_masks' type-id='type-id-936' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1841' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__s8' type-id='type-id-1170' filepath='include/uapi/asm-generic/int-ll64.h' line='20' column='1' id='type-id-1910'/>
+      <class-decl name='__anonymous_struct__37' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ethtool.h' line='114' column='1' id='type-id-1909'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='supported' type-id='type-id-491' visibility='default' filepath='include/linux/ethtool.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='advertising' type-id='type-id-491' visibility='default' filepath='include/linux/ethtool.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lp_advertising' type-id='type-id-491' visibility='default' filepath='include/linux/ethtool.h' line='117' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_fecparam' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1276' column='1' id='type-id-1911'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='active_fec' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fec' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='reserved' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1281' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='header_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='267' column='1' id='type-id-1912'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='create' type-id='type-id-1913' visibility='default' filepath='include/linux/netdevice.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='parse' type-id='type-id-1914' visibility='default' filepath='include/linux/netdevice.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cache' type-id='type-id-1915' visibility='default' filepath='include/linux/netdevice.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cache_update' type-id='type-id-1916' visibility='default' filepath='include/linux/netdevice.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='validate' type-id='type-id-1917' visibility='default' filepath='include/linux/netdevice.h' line='276' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hh_cache' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='241' column='1' id='type-id-1918'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hh_len' type-id='type-id-5' visibility='default' filepath='include/linux/netdevice.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='hh_lock' type-id='type-id-1919' visibility='default' filepath='include/linux/netdevice.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hh_data' type-id='type-id-1197' visibility='default' filepath='include/linux/netdevice.h' line='251' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='seqlock_t' type-id='type-id-1920' filepath='include/linux/seqlock.h' line='407' column='1' id='type-id-1919'/>
+      <class-decl name='__anonymous_struct__38' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-1919' visibility='default' filepath='include/linux/seqlock.h' line='404' column='1' id='type-id-1920'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='seqcount' type-id='type-id-1292' visibility='default' filepath='include/linux/seqlock.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='include/linux/seqlock.h' line='406' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netdev_hw_addr_list' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='221' column='1' id='type-id-1676'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/netdevice.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='count' type-id='type-id-17' visibility='default' filepath='include/linux/netdevice.h' line='223' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netdev_rx_queue' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='707' column='1' id='type-id-1921'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rps_map' type-id='type-id-1922' visibility='default' filepath='include/linux/netdevice.h' line='709' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rps_flow_table' type-id='type-id-1923' visibility='default' filepath='include/linux/netdevice.h' line='710' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='kobj' type-id='type-id-267' visibility='default' filepath='include/linux/netdevice.h' line='712' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='dev' type-id='type-id-1650' visibility='default' filepath='include/linux/netdevice.h' line='713' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='xdp_rxq' type-id='type-id-1924' visibility='default' filepath='include/linux/netdevice.h' line='714' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rps_map' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='633' column='1' id='type-id-1925'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='len' type-id='type-id-5' visibility='default' filepath='include/linux/netdevice.h' line='634' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/linux/netdevice.h' line='635' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cpus' type-id='type-id-1174' visibility='default' filepath='include/linux/netdevice.h' line='636' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rps_dev_flow_table' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='655' column='1' id='type-id-1926'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mask' type-id='type-id-5' visibility='default' filepath='include/linux/netdevice.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/linux/netdevice.h' line='657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flows' type-id='type-id-1169' visibility='default' filepath='include/linux/netdevice.h' line='658' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rps_dev_flow' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='645' column='1' id='type-id-1168'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cpu' type-id='type-id-688' visibility='default' filepath='include/linux/netdevice.h' line='646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='filter' type-id='type-id-688' visibility='default' filepath='include/linux/netdevice.h' line='647' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='last_qtail' type-id='type-id-5' visibility='default' filepath='include/linux/netdevice.h' line='648' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xdp_rxq_info' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/xdp.h' line='59' column='1' id='type-id-1924'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='type-id-1650' visibility='default' filepath='include/net/xdp.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='queue_index' type-id='type-id-7' visibility='default' filepath='include/net/xdp.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='reg_state' type-id='type-id-7' visibility='default' filepath='include/net/xdp.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mem' type-id='type-id-1838' visibility='default' filepath='include/net/xdp.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='rx_handler_func_t' type-id='type-id-1927' filepath='include/linux/netdevice.h' line='422' column='1' id='type-id-1928'/>
+      <typedef-decl name='rx_handler_result_t' type-id='type-id-1929' filepath='include/linux/netdevice.h' line='421' column='1' id='type-id-1930'/>
+      <enum-decl name='rx_handler_result' filepath='include/linux/netdevice.h' line='415' column='1' id='type-id-1929'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='RX_HANDLER_CONSUMED' value='0'/>
+        <enumerator name='RX_HANDLER_ANOTHER' value='1'/>
+        <enumerator name='RX_HANDLER_EXACT' value='2'/>
+        <enumerator name='RX_HANDLER_PASS' value='3'/>
+      </enum-decl>
+      <class-decl name='mini_Qdisc' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='1097' column='1' id='type-id-1931'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filter_list' type-id='type-id-1932' visibility='default' filepath='include/net/sch_generic.h' line='1098' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cpu_bstats' type-id='type-id-1933' visibility='default' filepath='include/net/sch_generic.h' line='1099' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cpu_qstats' type-id='type-id-1934' visibility='default' filepath='include/net/sch_generic.h' line='1100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/net/sch_generic.h' line='1101' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcf_proto' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='293' column='1' id='type-id-1935'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='type-id-1932' visibility='default' filepath='include/net/sch_generic.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='root' type-id='type-id-15' visibility='default' filepath='include/net/sch_generic.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='classify' type-id='type-id-1936' visibility='default' filepath='include/net/sch_generic.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='protocol' type-id='type-id-926' visibility='default' filepath='include/net/sch_generic.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='prio' type-id='type-id-7' visibility='default' filepath='include/net/sch_generic.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='data' type-id='type-id-15' visibility='default' filepath='include/net/sch_generic.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ops' type-id='type-id-1937' visibility='default' filepath='include/net/sch_generic.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='chain' type-id='type-id-1938' visibility='default' filepath='include/net/sch_generic.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/net/sch_generic.h' line='309' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcf_result' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='234' column='1' id='type-id-1939'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='type-id-1940' visibility='default' filepath='include/net/sch_generic.h' line='235' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__21' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/sch_generic.h' line='235' column='1' id='type-id-1940'>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/sch_generic.h' line='243' column='1' id='type-id-1941'>
+            <data-member access='public' layout-offset-in-bits='0'>
+              <var-decl name='ingress' type-id='type-id-33' visibility='default' filepath='include/net/sch_generic.h' line='244' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='64'>
+              <var-decl name='qstats' type-id='type-id-1934' visibility='default' filepath='include/net/sch_generic.h' line='245' column='1'/>
+            </data-member>
+          </class-decl>
+        </member-type>
+        <data-member access='private'>
+          <var-decl name='' type-id='type-id-1942' visibility='default' filepath='include/net/sch_generic.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='goto_tp' type-id='type-id-1943' visibility='default' filepath='include/net/sch_generic.h' line='240' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__39' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/sch_generic.h' line='236' column='1' id='type-id-1942'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='class' type-id='type-id-16' visibility='default' filepath='include/net/sch_generic.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='classid' type-id='type-id-7' visibility='default' filepath='include/net/sch_generic.h' line='238' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='gnet_stats_queue' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/linux/gen_stats.h' line='61' column='1' id='type-id-1944'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='qlen' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/gen_stats.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='backlog' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/gen_stats.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='drops' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/gen_stats.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='requeues' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/gen_stats.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='overlimits' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/gen_stats.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcf_proto_ops' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='252' column='1' id='type-id-1945'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='type-id-20' visibility='default' filepath='include/net/sch_generic.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='kind' type-id='type-id-43' visibility='default' filepath='include/net/sch_generic.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='classify' type-id='type-id-1936' visibility='default' filepath='include/net/sch_generic.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='init' type-id='type-id-1946' visibility='default' filepath='include/net/sch_generic.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='destroy' type-id='type-id-1947' visibility='default' filepath='include/net/sch_generic.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get' type-id='type-id-1948' visibility='default' filepath='include/net/sch_generic.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='change' type-id='type-id-1949' visibility='default' filepath='include/net/sch_generic.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='delete' type-id='type-id-1950' visibility='default' filepath='include/net/sch_generic.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='walk' type-id='type-id-1951' visibility='default' filepath='include/net/sch_generic.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='reoffload' type-id='type-id-1952' visibility='default' filepath='include/net/sch_generic.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='bind_class' type-id='type-id-1953' visibility='default' filepath='include/net/sch_generic.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='tmplt_create' type-id='type-id-1954' visibility='default' filepath='include/net/sch_generic.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='tmplt_destroy' type-id='type-id-517' visibility='default' filepath='include/net/sch_generic.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='dump' type-id='type-id-1955' visibility='default' filepath='include/net/sch_generic.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='tmplt_dump' type-id='type-id-1956' visibility='default' filepath='include/net/sch_generic.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='include/net/sch_generic.h' line='290' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='tc_setup_cb_t' type-id='type-id-1957' filepath='include/net/sch_generic.h' line='23' column='1' id='type-id-1958'/>
+      <class-decl name='tcf_chain' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='322' column='1' id='type-id-1959'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filter_chain' type-id='type-id-1932' visibility='default' filepath='include/net/sch_generic.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/net/sch_generic.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='block' type-id='type-id-1960' visibility='default' filepath='include/net/sch_generic.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='index' type-id='type-id-7' visibility='default' filepath='include/net/sch_generic.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='refcnt' type-id='type-id-5' visibility='default' filepath='include/net/sch_generic.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='action_refcnt' type-id='type-id-5' visibility='default' filepath='include/net/sch_generic.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='explicitly_created' type-id='type-id-33' visibility='default' filepath='include/net/sch_generic.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='tmplt_ops' type-id='type-id-1937' visibility='default' filepath='include/net/sch_generic.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='tmplt_priv' type-id='type-id-15' visibility='default' filepath='include/net/sch_generic.h' line='331' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcf_block' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='334' column='1' id='type-id-1961'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chain_list' type-id='type-id-20' visibility='default' filepath='include/net/sch_generic.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='index' type-id='type-id-7' visibility='default' filepath='include/net/sch_generic.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='refcnt' type-id='type-id-5' visibility='default' filepath='include/net/sch_generic.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='net' type-id='type-id-1645' visibility='default' filepath='include/net/sch_generic.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='q' type-id='type-id-1687' visibility='default' filepath='include/net/sch_generic.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cb_list' type-id='type-id-20' visibility='default' filepath='include/net/sch_generic.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='owner_list' type-id='type-id-20' visibility='default' filepath='include/net/sch_generic.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='keep_dst' type-id='type-id-33' visibility='default' filepath='include/net/sch_generic.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='offloadcnt' type-id='type-id-5' visibility='default' filepath='include/net/sch_generic.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='nooffloaddevcnt' type-id='type-id-5' visibility='default' filepath='include/net/sch_generic.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='chain0' type-id='type-id-1962' visibility='default' filepath='include/net/sch_generic.h' line='348' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='Qdisc' size-in-bits='2560' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='57' column='1' id='type-id-1963'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enqueue' type-id='type-id-1964' visibility='default' filepath='include/net/sch_generic.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dequeue' type-id='type-id-1965' visibility='default' filepath='include/net/sch_generic.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='type-id-5' visibility='default' filepath='include/net/sch_generic.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='limit' type-id='type-id-7' visibility='default' filepath='include/net/sch_generic.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ops' type-id='type-id-1966' visibility='default' filepath='include/net/sch_generic.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='stab' type-id='type-id-1967' visibility='default' filepath='include/net/sch_generic.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hash' type-id='type-id-520' visibility='default' filepath='include/net/sch_generic.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='handle' type-id='type-id-7' visibility='default' filepath='include/net/sch_generic.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='parent' type-id='type-id-7' visibility='default' filepath='include/net/sch_generic.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dev_queue' type-id='type-id-1685' visibility='default' filepath='include/net/sch_generic.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rate_est' type-id='type-id-1968' visibility='default' filepath='include/net/sch_generic.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='cpu_bstats' type-id='type-id-1933' visibility='default' filepath='include/net/sch_generic.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='cpu_qstats' type-id='type-id-1934' visibility='default' filepath='include/net/sch_generic.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='padded' type-id='type-id-17' visibility='default' filepath='include/net/sch_generic.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='refcnt' type-id='type-id-421' visibility='default' filepath='include/net/sch_generic.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='gso_skb' type-id='type-id-1661' visibility='default' filepath='include/net/sch_generic.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='q' type-id='type-id-1969' visibility='default' filepath='include/net/sch_generic.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='bstats' type-id='type-id-1970' visibility='default' filepath='include/net/sch_generic.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='running' type-id='type-id-387' visibility='default' filepath='include/net/sch_generic.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='qstats' type-id='type-id-1944' visibility='default' filepath='include/net/sch_generic.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='state' type-id='type-id-16' visibility='default' filepath='include/net/sch_generic.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='next_sched' type-id='type-id-1687' visibility='default' filepath='include/net/sch_generic.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='skb_bad_txq' type-id='type-id-1661' visibility='default' filepath='include/net/sch_generic.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='busylock' type-id='type-id-247' visibility='default' filepath='include/net/sch_generic.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='seqlock' type-id='type-id-247' visibility='default' filepath='include/net/sch_generic.h' line='110' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='Qdisc_ops' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='197' column='1' id='type-id-1971'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='type-id-1972' visibility='default' filepath='include/net/sch_generic.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cl_ops' type-id='type-id-1973' visibility='default' filepath='include/net/sch_generic.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='id' type-id='type-id-43' visibility='default' filepath='include/net/sch_generic.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='priv_size' type-id='type-id-17' visibility='default' filepath='include/net/sch_generic.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='static_flags' type-id='type-id-5' visibility='default' filepath='include/net/sch_generic.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='enqueue' type-id='type-id-1964' visibility='default' filepath='include/net/sch_generic.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dequeue' type-id='type-id-1965' visibility='default' filepath='include/net/sch_generic.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='peek' type-id='type-id-1965' visibility='default' filepath='include/net/sch_generic.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='init' type-id='type-id-1974' visibility='default' filepath='include/net/sch_generic.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='reset' type-id='type-id-1975' visibility='default' filepath='include/net/sch_generic.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='destroy' type-id='type-id-1975' visibility='default' filepath='include/net/sch_generic.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='change' type-id='type-id-1974' visibility='default' filepath='include/net/sch_generic.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='attach' type-id='type-id-1975' visibility='default' filepath='include/net/sch_generic.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='change_tx_queue_len' type-id='type-id-1976' visibility='default' filepath='include/net/sch_generic.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dump' type-id='type-id-1977' visibility='default' filepath='include/net/sch_generic.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='dump_stats' type-id='type-id-1978' visibility='default' filepath='include/net/sch_generic.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='ingress_block_set' type-id='type-id-1979' visibility='default' filepath='include/net/sch_generic.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='egress_block_set' type-id='type-id-1979' visibility='default' filepath='include/net/sch_generic.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ingress_block_get' type-id='type-id-1980' visibility='default' filepath='include/net/sch_generic.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='egress_block_get' type-id='type-id-1980' visibility='default' filepath='include/net/sch_generic.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='include/net/sch_generic.h' line='230' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='Qdisc_class_ops' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='165' column='1' id='type-id-1981'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='select_queue' type-id='type-id-1982' visibility='default' filepath='include/net/sch_generic.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='graft' type-id='type-id-1983' visibility='default' filepath='include/net/sch_generic.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='leaf' type-id='type-id-1984' visibility='default' filepath='include/net/sch_generic.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='qlen_notify' type-id='type-id-1985' visibility='default' filepath='include/net/sch_generic.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='find' type-id='type-id-1986' visibility='default' filepath='include/net/sch_generic.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='change' type-id='type-id-1987' visibility='default' filepath='include/net/sch_generic.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='delete' type-id='type-id-1988' visibility='default' filepath='include/net/sch_generic.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='walk' type-id='type-id-1989' visibility='default' filepath='include/net/sch_generic.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='tcf_block' type-id='type-id-1990' visibility='default' filepath='include/net/sch_generic.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='bind_tcf' type-id='type-id-1991' visibility='default' filepath='include/net/sch_generic.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='unbind_tcf' type-id='type-id-1985' visibility='default' filepath='include/net/sch_generic.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dump' type-id='type-id-1992' visibility='default' filepath='include/net/sch_generic.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='dump_stats' type-id='type-id-1993' visibility='default' filepath='include/net/sch_generic.h' line='193' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netdev_queue' size-in-bits='2560' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='564' column='1' id='type-id-1994'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='type-id-1650' visibility='default' filepath='include/linux/netdevice.h' line='568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='qdisc' type-id='type-id-1687' visibility='default' filepath='include/linux/netdevice.h' line='569' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='qdisc_sleeping' type-id='type-id-1687' visibility='default' filepath='include/linux/netdevice.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='kobj' type-id='type-id-267' visibility='default' filepath='include/linux/netdevice.h' line='572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='tx_maxrate' type-id='type-id-16' visibility='default' filepath='include/linux/netdevice.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='trans_timeout' type-id='type-id-16' visibility='default' filepath='include/linux/netdevice.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='sb_dev' type-id='type-id-1650' visibility='default' filepath='include/linux/netdevice.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='_xmit_lock' type-id='type-id-247' visibility='default' filepath='include/linux/netdevice.h' line='589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='xmit_lock_owner' type-id='type-id-17' visibility='default' filepath='include/linux/netdevice.h' line='590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='trans_start' type-id='type-id-16' visibility='default' filepath='include/linux/netdevice.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='state' type-id='type-id-16' visibility='default' filepath='include/linux/netdevice.h' line='596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='dql' type-id='type-id-1995' visibility='default' filepath='include/linux/netdevice.h' line='599' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dql' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/dynamic_queue_limits.h' line='41' column='1' id='type-id-1995'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num_queued' type-id='type-id-5' visibility='default' filepath='include/linux/dynamic_queue_limits.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='adj_limit' type-id='type-id-5' visibility='default' filepath='include/linux/dynamic_queue_limits.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='last_obj_cnt' type-id='type-id-5' visibility='default' filepath='include/linux/dynamic_queue_limits.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='limit' type-id='type-id-5' visibility='default' filepath='include/linux/dynamic_queue_limits.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='num_completed' type-id='type-id-5' visibility='default' filepath='include/linux/dynamic_queue_limits.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='prev_ovlimit' type-id='type-id-5' visibility='default' filepath='include/linux/dynamic_queue_limits.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='prev_num_queued' type-id='type-id-5' visibility='default' filepath='include/linux/dynamic_queue_limits.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='prev_last_obj_cnt' type-id='type-id-5' visibility='default' filepath='include/linux/dynamic_queue_limits.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='lowest_slack' type-id='type-id-5' visibility='default' filepath='include/linux/dynamic_queue_limits.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='slack_start_time' type-id='type-id-16' visibility='default' filepath='include/linux/dynamic_queue_limits.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='max_limit' type-id='type-id-5' visibility='default' filepath='include/linux/dynamic_queue_limits.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='min_limit' type-id='type-id-5' visibility='default' filepath='include/linux/dynamic_queue_limits.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='slack_hold_time' type-id='type-id-5' visibility='default' filepath='include/linux/dynamic_queue_limits.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcmsg' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/linux/rtnetlink.h' line='552' column='1' id='type-id-1996'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tcm_family' type-id='type-id-216' visibility='default' filepath='include/uapi/linux/rtnetlink.h' line='553' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='tcm__pad1' type-id='type-id-216' visibility='default' filepath='include/uapi/linux/rtnetlink.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='tcm__pad2' type-id='type-id-312' visibility='default' filepath='include/uapi/linux/rtnetlink.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tcm_ifindex' type-id='type-id-17' visibility='default' filepath='include/uapi/linux/rtnetlink.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tcm_handle' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/rtnetlink.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='tcm_parent' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/rtnetlink.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tcm_info' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/rtnetlink.h' line='563' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='gnet_dump' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/net/gen_stats.h' line='17' column='1' id='type-id-1997'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='type-id-486' visibility='default' filepath='include/net/gen_stats.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='skb' type-id='type-id-1768' visibility='default' filepath='include/net/gen_stats.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tail' type-id='type-id-1998' visibility='default' filepath='include/net/gen_stats.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='compat_tc_stats' type-id='type-id-17' visibility='default' filepath='include/net/gen_stats.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='compat_xstats' type-id='type-id-17' visibility='default' filepath='include/net/gen_stats.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='padattr' type-id='type-id-17' visibility='default' filepath='include/net/gen_stats.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='xstats' type-id='type-id-15' visibility='default' filepath='include/net/gen_stats.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='xstats_len' type-id='type-id-17' visibility='default' filepath='include/net/gen_stats.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='tc_stats' type-id='type-id-1999' visibility='default' filepath='include/net/gen_stats.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tc_stats' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='33' column='1' id='type-id-1999'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bytes' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='packets' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='drops' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='overlimits' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='bps' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pps' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='qlen' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='backlog' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='qdisc_size_table' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='38' column='1' id='type-id-2000'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/net/sch_generic.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/net/sch_generic.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='szopts' type-id='type-id-2001' visibility='default' filepath='include/net/sch_generic.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='refcnt' type-id='type-id-17' visibility='default' filepath='include/net/sch_generic.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='data' type-id='type-id-1174' visibility='default' filepath='include/net/sch_generic.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tc_sizespec' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='101' column='1' id='type-id-2001'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cell_log' type-id='type-id-216' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='size_log' type-id='type-id-216' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='cell_align' type-id='type-id-261' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='overhead' type-id='type-id-17' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='linklayer' type-id='type-id-5' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='mpu' type-id='type-id-5' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mtu' type-id='type-id-5' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tsize' type-id='type-id-5' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='109' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='gnet_stats_basic_cpu' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/net/gen_stats.h' line='10' column='1' id='type-id-2002'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bstats' type-id='type-id-1970' visibility='default' filepath='include/net/gen_stats.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='syncp' type-id='type-id-2003' visibility='default' filepath='include/net/gen_stats.h' line='12' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='gnet_stats_basic_packed' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/gen_stats.h' line='28' column='1' id='type-id-1970'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bytes' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/gen_stats.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='packets' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/gen_stats.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='u64_stats_sync' is-struct='yes' visibility='default' filepath='include/linux/u64_stats_sync.h' line='65' column='1' id='type-id-2003'/>
+      <class-decl name='sk_buff_head' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/skbuff.h' line='283' column='1' id='type-id-1661'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='type-id-1768' visibility='default' filepath='include/linux/skbuff.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prev' type-id='type-id-1768' visibility='default' filepath='include/linux/skbuff.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='qlen' type-id='type-id-511' visibility='default' filepath='include/linux/skbuff.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='include/linux/skbuff.h' line='289' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='qdisc_skb_head' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='47' column='1' id='type-id-1969'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='type-id-1768' visibility='default' filepath='include/net/sch_generic.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tail' type-id='type-id-1768' visibility='default' filepath='include/net/sch_generic.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='type-id-2004' visibility='default' filepath='include/net/sch_generic.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='include/net/sch_generic.h' line='54' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__22' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/net/sch_generic.h' line='50' column='1' id='type-id-2004'>
+        <data-member access='private'>
+          <var-decl name='qlen' type-id='type-id-7' visibility='default' filepath='include/net/sch_generic.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='atomic_qlen' type-id='type-id-26' visibility='default' filepath='include/net/sch_generic.h' line='52' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__40' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/sch_generic.h' line='345' column='1' id='type-id-1962'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chain' type-id='type-id-1938' visibility='default' filepath='include/net/sch_generic.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='filter_chain_list' type-id='type-id-20' visibility='default' filepath='include/net/sch_generic.h' line='347' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xps_dev_maps' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='745' column='1' id='type-id-2005'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/linux/netdevice.h' line='746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='attr_map' type-id='type-id-1217' visibility='default' filepath='include/linux/netdevice.h' line='747' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xps_map' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='732' column='1' id='type-id-2006'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='len' type-id='type-id-5' visibility='default' filepath='include/linux/netdevice.h' line='733' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='alloc_len' type-id='type-id-5' visibility='default' filepath='include/linux/netdevice.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/linux/netdevice.h' line='735' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='queues' type-id='type-id-1174' visibility='default' filepath='include/linux/netdevice.h' line='736' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='timer_list' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/timer.h' line='11' column='1' id='type-id-417'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='entry' type-id='type-id-520' visibility='default' filepath='include/linux/timer.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='expires' type-id='type-id-16' visibility='default' filepath='include/linux/timer.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='function' type-id='type-id-2007' visibility='default' filepath='include/linux/timer.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='type-id-7' visibility='default' filepath='include/linux/timer.h' line='19' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='__anonymous_enum__' is-anonymous='yes' filepath='include/linux/netdevice.h' line='1964' column='1' id='type-id-1689'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='NETREG_UNINITIALIZED' value='0'/>
+        <enumerator name='NETREG_REGISTERED' value='1'/>
+        <enumerator name='NETREG_UNREGISTERING' value='2'/>
+        <enumerator name='NETREG_UNREGISTERED' value='3'/>
+        <enumerator name='NETREG_RELEASED' value='4'/>
+        <enumerator name='NETREG_DUMMY' value='5'/>
+      </enum-decl>
+      <enum-decl name='__anonymous_enum__1' is-anonymous='yes' filepath='include/linux/netdevice.h' line='1974' column='1' id='type-id-1690'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='RTNL_LINK_INITIALIZED' value='0'/>
+        <enumerator name='RTNL_LINK_INITIALIZING' value='1'/>
+      </enum-decl>
+      <typedef-decl name='possible_net_t' type-id='type-id-2008' filepath='include/net/net_namespace.h' line='288' column='1' id='type-id-1692'/>
+      <class-decl name='__anonymous_struct__41' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-1692' visibility='default' filepath='include/net/net_namespace.h' line='284' column='1' id='type-id-2008'/>
+      <class-decl name='pcpu_sw_netstats' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='2368' column='1' id='type-id-2009'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rx_packets' type-id='type-id-40' visibility='default' filepath='include/linux/netdevice.h' line='2369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_bytes' type-id='type-id-40' visibility='default' filepath='include/linux/netdevice.h' line='2370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tx_packets' type-id='type-id-40' visibility='default' filepath='include/linux/netdevice.h' line='2371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_bytes' type-id='type-id-40' visibility='default' filepath='include/linux/netdevice.h' line='2372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='syncp' type-id='type-id-2003' visibility='default' filepath='include/linux/netdevice.h' line='2373' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='device' size-in-bits='6208' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='991' column='1' id='type-id-388'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='parent' type-id='type-id-240' visibility='default' filepath='include/linux/device.h' line='992' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='p' type-id='type-id-2010' visibility='default' filepath='include/linux/device.h' line='994' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='kobj' type-id='type-id-267' visibility='default' filepath='include/linux/device.h' line='996' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='init_name' type-id='type-id-4' visibility='default' filepath='include/linux/device.h' line='997' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='type' type-id='type-id-2011' visibility='default' filepath='include/linux/device.h' line='998' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mutex' type-id='type-id-245' visibility='default' filepath='include/linux/device.h' line='1000' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='bus' type-id='type-id-2012' visibility='default' filepath='include/linux/device.h' line='1004' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='driver' type-id='type-id-2013' visibility='default' filepath='include/linux/device.h' line='1005' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='platform_data' type-id='type-id-15' visibility='default' filepath='include/linux/device.h' line='1007' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='driver_data' type-id='type-id-15' visibility='default' filepath='include/linux/device.h' line='1009' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='links' type-id='type-id-2014' visibility='default' filepath='include/linux/device.h' line='1011' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='power' type-id='type-id-2015' visibility='default' filepath='include/linux/device.h' line='1012' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='pm_domain' type-id='type-id-2016' visibility='default' filepath='include/linux/device.h' line='1013' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='msi_domain' type-id='type-id-2017' visibility='default' filepath='include/linux/device.h' line='1016' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='pins' type-id='type-id-2018' visibility='default' filepath='include/linux/device.h' line='1019' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='msi_list' type-id='type-id-20' visibility='default' filepath='include/linux/device.h' line='1022' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='dma_ops' type-id='type-id-2019' visibility='default' filepath='include/linux/device.h' line='1028' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='dma_mask' type-id='type-id-1510' visibility='default' filepath='include/linux/device.h' line='1029' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='coherent_dma_mask' type-id='type-id-40' visibility='default' filepath='include/linux/device.h' line='1030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='bus_dma_mask' type-id='type-id-40' visibility='default' filepath='include/linux/device.h' line='1035' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='dma_pfn_offset' type-id='type-id-16' visibility='default' filepath='include/linux/device.h' line='1036' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='dma_parms' type-id='type-id-2020' visibility='default' filepath='include/linux/device.h' line='1038' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='dma_pools' type-id='type-id-20' visibility='default' filepath='include/linux/device.h' line='1040' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='dma_mem' type-id='type-id-2021' visibility='default' filepath='include/linux/device.h' line='1042' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='cma_area' type-id='type-id-2022' visibility='default' filepath='include/linux/device.h' line='1045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='archdata' type-id='type-id-2023' visibility='default' filepath='include/linux/device.h' line='1049' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='of_node' type-id='type-id-2024' visibility='default' filepath='include/linux/device.h' line='1051' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='fwnode' type-id='type-id-2025' visibility='default' filepath='include/linux/device.h' line='1052' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='devt' type-id='type-id-269' visibility='default' filepath='include/linux/device.h' line='1054' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5344'>
+          <var-decl name='id' type-id='type-id-7' visibility='default' filepath='include/linux/device.h' line='1055' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='devres_lock' type-id='type-id-247' visibility='default' filepath='include/linux/device.h' line='1057' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='devres_head' type-id='type-id-20' visibility='default' filepath='include/linux/device.h' line='1058' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='knode_class' type-id='type-id-2026' visibility='default' filepath='include/linux/device.h' line='1060' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='class' type-id='type-id-2027' visibility='default' filepath='include/linux/device.h' line='1061' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='groups' type-id='type-id-665' visibility='default' filepath='include/linux/device.h' line='1062' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='release' type-id='type-id-2028' visibility='default' filepath='include/linux/device.h' line='1064' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='iommu_group' type-id='type-id-2029' visibility='default' filepath='include/linux/device.h' line='1065' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='iommu_fwspec' type-id='type-id-2030' visibility='default' filepath='include/linux/device.h' line='1066' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='offline_disabled' type-id='type-id-33' visibility='default' filepath='include/linux/device.h' line='1068' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='offline' type-id='type-id-33' visibility='default' filepath='include/linux/device.h' line='1069' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='of_node_reused' type-id='type-id-33' visibility='default' filepath='include/linux/device.h' line='1070' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='state_synced' type-id='type-id-33' visibility='default' filepath='include/linux/device.h' line='1071' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='device_type' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='568' column='1' id='type-id-2031'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/device.h' line='569' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='groups' type-id='type-id-665' visibility='default' filepath='include/linux/device.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='uevent' type-id='type-id-2032' visibility='default' filepath='include/linux/device.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='devnode' type-id='type-id-2033' visibility='default' filepath='include/linux/device.h' line='572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='release' type-id='type-id-2028' visibility='default' filepath='include/linux/device.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pm' type-id='type-id-2034' visibility='default' filepath='include/linux/device.h' line='576' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='attribute_group' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/sysfs.h' line='84' column='1' id='type-id-2035'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/sysfs.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='is_visible' type-id='type-id-2036' visibility='default' filepath='include/linux/sysfs.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='is_bin_visible' type-id='type-id-2037' visibility='default' filepath='include/linux/sysfs.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='attrs' type-id='type-id-1414' visibility='default' filepath='include/linux/sysfs.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='bin_attrs' type-id='type-id-2038' visibility='default' filepath='include/linux/sysfs.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bin_attribute' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/sysfs.h' line='161' column='1' id='type-id-2039'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attr' type-id='type-id-619' visibility='default' filepath='include/linux/sysfs.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='type-id-84' visibility='default' filepath='include/linux/sysfs.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='private' type-id='type-id-15' visibility='default' filepath='include/linux/sysfs.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='read' type-id='type-id-2040' visibility='default' filepath='include/linux/sysfs.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='write' type-id='type-id-2040' visibility='default' filepath='include/linux/sysfs.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mmap' type-id='type-id-2041' visibility='default' filepath='include/linux/sysfs.h' line='169' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_pm_ops' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/pm.h' line='290' column='1' id='type-id-2042'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prepare' type-id='type-id-2043' visibility='default' filepath='include/linux/pm.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='complete' type-id='type-id-2028' visibility='default' filepath='include/linux/pm.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='suspend' type-id='type-id-2043' visibility='default' filepath='include/linux/pm.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='resume' type-id='type-id-2043' visibility='default' filepath='include/linux/pm.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='freeze' type-id='type-id-2043' visibility='default' filepath='include/linux/pm.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='thaw' type-id='type-id-2043' visibility='default' filepath='include/linux/pm.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='poweroff' type-id='type-id-2043' visibility='default' filepath='include/linux/pm.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='restore' type-id='type-id-2043' visibility='default' filepath='include/linux/pm.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='suspend_late' type-id='type-id-2043' visibility='default' filepath='include/linux/pm.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='resume_early' type-id='type-id-2043' visibility='default' filepath='include/linux/pm.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='freeze_late' type-id='type-id-2043' visibility='default' filepath='include/linux/pm.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='thaw_early' type-id='type-id-2043' visibility='default' filepath='include/linux/pm.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='poweroff_late' type-id='type-id-2043' visibility='default' filepath='include/linux/pm.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='restore_early' type-id='type-id-2043' visibility='default' filepath='include/linux/pm.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='suspend_noirq' type-id='type-id-2043' visibility='default' filepath='include/linux/pm.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='resume_noirq' type-id='type-id-2043' visibility='default' filepath='include/linux/pm.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='freeze_noirq' type-id='type-id-2043' visibility='default' filepath='include/linux/pm.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='thaw_noirq' type-id='type-id-2043' visibility='default' filepath='include/linux/pm.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='poweroff_noirq' type-id='type-id-2043' visibility='default' filepath='include/linux/pm.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='restore_noirq' type-id='type-id-2043' visibility='default' filepath='include/linux/pm.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='runtime_suspend' type-id='type-id-2043' visibility='default' filepath='include/linux/pm.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='runtime_resume' type-id='type-id-2043' visibility='default' filepath='include/linux/pm.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='runtime_idle' type-id='type-id-2043' visibility='default' filepath='include/linux/pm.h' line='313' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bus_type' size-in-bits='1408' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='121' column='1' id='type-id-2044'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/device.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev_name' type-id='type-id-4' visibility='default' filepath='include/linux/device.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev_root' type-id='type-id-240' visibility='default' filepath='include/linux/device.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bus_groups' type-id='type-id-665' visibility='default' filepath='include/linux/device.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev_groups' type-id='type-id-665' visibility='default' filepath='include/linux/device.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='drv_groups' type-id='type-id-665' visibility='default' filepath='include/linux/device.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='match' type-id='type-id-2045' visibility='default' filepath='include/linux/device.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='uevent' type-id='type-id-2032' visibility='default' filepath='include/linux/device.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='probe' type-id='type-id-2043' visibility='default' filepath='include/linux/device.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='sync_state' type-id='type-id-2028' visibility='default' filepath='include/linux/device.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='remove' type-id='type-id-2043' visibility='default' filepath='include/linux/device.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='shutdown' type-id='type-id-2028' visibility='default' filepath='include/linux/device.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='online' type-id='type-id-2043' visibility='default' filepath='include/linux/device.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='offline' type-id='type-id-2043' visibility='default' filepath='include/linux/device.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='suspend' type-id='type-id-2046' visibility='default' filepath='include/linux/device.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='resume' type-id='type-id-2043' visibility='default' filepath='include/linux/device.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='num_vf' type-id='type-id-2043' visibility='default' filepath='include/linux/device.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='dma_configure' type-id='type-id-2043' visibility='default' filepath='include/linux/device.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='pm' type-id='type-id-2034' visibility='default' filepath='include/linux/device.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='iommu_ops' type-id='type-id-2047' visibility='default' filepath='include/linux/device.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='p' type-id='type-id-2048' visibility='default' filepath='include/linux/device.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='lock_key' type-id='type-id-1146' visibility='default' filepath='include/linux/device.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='need_parent_lock' type-id='type-id-33' visibility='default' filepath='include/linux/device.h' line='153' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='device_driver' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='292' column='1' id='type-id-2049'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/device.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bus' type-id='type-id-2012' visibility='default' filepath='include/linux/device.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='include/linux/device.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mod_name' type-id='type-id-4' visibility='default' filepath='include/linux/device.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='suppress_bind_attrs' type-id='type-id-33' visibility='default' filepath='include/linux/device.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='probe_type' type-id='type-id-2050' visibility='default' filepath='include/linux/device.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='of_match_table' type-id='type-id-2051' visibility='default' filepath='include/linux/device.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='acpi_match_table' type-id='type-id-2052' visibility='default' filepath='include/linux/device.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='probe' type-id='type-id-2043' visibility='default' filepath='include/linux/device.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='sync_state' type-id='type-id-2028' visibility='default' filepath='include/linux/device.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='remove' type-id='type-id-2043' visibility='default' filepath='include/linux/device.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='shutdown' type-id='type-id-2028' visibility='default' filepath='include/linux/device.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='suspend' type-id='type-id-2046' visibility='default' filepath='include/linux/device.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='resume' type-id='type-id-2043' visibility='default' filepath='include/linux/device.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='groups' type-id='type-id-665' visibility='default' filepath='include/linux/device.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='pm' type-id='type-id-2034' visibility='default' filepath='include/linux/device.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='coredump' type-id='type-id-2028' visibility='default' filepath='include/linux/device.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='p' type-id='type-id-2053' visibility='default' filepath='include/linux/device.h' line='316' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='probe_type' filepath='include/linux/device.h' line='243' column='1' id='type-id-2050'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='PROBE_DEFAULT_STRATEGY' value='0'/>
+        <enumerator name='PROBE_PREFER_ASYNCHRONOUS' value='1'/>
+        <enumerator name='PROBE_FORCE_SYNCHRONOUS' value='2'/>
+      </enum-decl>
+      <typedef-decl name='pm_message_t' type-id='type-id-2054' filepath='include/linux/pm.h' line='64' column='1' id='type-id-2055'/>
+      <class-decl name='pm_message' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/pm.h' line='62' column='1' id='type-id-2054'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='event' type-id='type-id-17' visibility='default' filepath='include/linux/pm.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='lock_class_key' is-struct='yes' visibility='default' filepath='include/linux/lockdep.h' line='433' column='1' id='type-id-1146'/>
+      <class-decl name='dev_links_info' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='901' column='1' id='type-id-2014'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='suppliers' type-id='type-id-20' visibility='default' filepath='include/linux/device.h' line='902' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='consumers' type-id='type-id-20' visibility='default' filepath='include/linux/device.h' line='903' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='needs_suppliers' type-id='type-id-20' visibility='default' filepath='include/linux/device.h' line='904' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='defer_sync' type-id='type-id-20' visibility='default' filepath='include/linux/device.h' line='905' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='need_for_probe' type-id='type-id-33' visibility='default' filepath='include/linux/device.h' line='906' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='status' type-id='type-id-2056' visibility='default' filepath='include/linux/device.h' line='907' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='dl_dev_state' filepath='include/linux/device.h' line='884' column='1' id='type-id-2056'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='DL_DEV_NO_DRIVER' value='0'/>
+        <enumerator name='DL_DEV_PROBING' value='1'/>
+        <enumerator name='DL_DEV_DRIVER_BOUND' value='2'/>
+        <enumerator name='DL_DEV_UNBINDING' value='3'/>
+      </enum-decl>
+      <class-decl name='dev_pm_info' size-in-bits='2240' is-struct='yes' visibility='default' filepath='include/linux/pm.h' line='585' column='1' id='type-id-2015'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='power_state' type-id='type-id-2055' visibility='default' filepath='include/linux/pm.h' line='586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='can_wakeup' type-id='type-id-5' visibility='default' filepath='include/linux/pm.h' line='587' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='async_suspend' type-id='type-id-5' visibility='default' filepath='include/linux/pm.h' line='588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='in_dpm_list' type-id='type-id-33' visibility='default' filepath='include/linux/pm.h' line='589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='is_prepared' type-id='type-id-33' visibility='default' filepath='include/linux/pm.h' line='590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='is_suspended' type-id='type-id-33' visibility='default' filepath='include/linux/pm.h' line='591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='is_noirq_suspended' type-id='type-id-33' visibility='default' filepath='include/linux/pm.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='is_late_suspended' type-id='type-id-33' visibility='default' filepath='include/linux/pm.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='no_pm' type-id='type-id-33' visibility='default' filepath='include/linux/pm.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='early_init' type-id='type-id-33' visibility='default' filepath='include/linux/pm.h' line='595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='direct_complete' type-id='type-id-33' visibility='default' filepath='include/linux/pm.h' line='596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='driver_flags' type-id='type-id-7' visibility='default' filepath='include/linux/pm.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='include/linux/pm.h' line='598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='entry' type-id='type-id-20' visibility='default' filepath='include/linux/pm.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='completion' type-id='type-id-1608' visibility='default' filepath='include/linux/pm.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wakeup' type-id='type-id-2057' visibility='default' filepath='include/linux/pm.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='wakeup_path' type-id='type-id-33' visibility='default' filepath='include/linux/pm.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='syscore' type-id='type-id-33' visibility='default' filepath='include/linux/pm.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='no_pm_callbacks' type-id='type-id-33' visibility='default' filepath='include/linux/pm.h' line='605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='must_resume' type-id='type-id-5' visibility='default' filepath='include/linux/pm.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='may_skip_resume' type-id='type-id-5' visibility='default' filepath='include/linux/pm.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='suspend_timer' type-id='type-id-417' visibility='default' filepath='include/linux/pm.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='timer_expires' type-id='type-id-16' visibility='default' filepath='include/linux/pm.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='work' type-id='type-id-255' visibility='default' filepath='include/linux/pm.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='wait_queue' type-id='type-id-225' visibility='default' filepath='include/linux/pm.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='wakeirq' type-id='type-id-2058' visibility='default' filepath='include/linux/pm.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='usage_count' type-id='type-id-26' visibility='default' filepath='include/linux/pm.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='child_count' type-id='type-id-26' visibility='default' filepath='include/linux/pm.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='disable_depth' type-id='type-id-5' visibility='default' filepath='include/linux/pm.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='idle_notification' type-id='type-id-5' visibility='default' filepath='include/linux/pm.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='request_pending' type-id='type-id-5' visibility='default' filepath='include/linux/pm.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='deferred_resume' type-id='type-id-5' visibility='default' filepath='include/linux/pm.h' line='622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='runtime_auto' type-id='type-id-5' visibility='default' filepath='include/linux/pm.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='ignore_children' type-id='type-id-33' visibility='default' filepath='include/linux/pm.h' line='624' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='no_callbacks' type-id='type-id-5' visibility='default' filepath='include/linux/pm.h' line='625' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='irq_safe' type-id='type-id-5' visibility='default' filepath='include/linux/pm.h' line='626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='use_autosuspend' type-id='type-id-5' visibility='default' filepath='include/linux/pm.h' line='627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='timer_autosuspends' type-id='type-id-5' visibility='default' filepath='include/linux/pm.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='memalloc_noio' type-id='type-id-5' visibility='default' filepath='include/linux/pm.h' line='629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='links_count' type-id='type-id-5' visibility='default' filepath='include/linux/pm.h' line='630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='request' type-id='type-id-2059' visibility='default' filepath='include/linux/pm.h' line='631' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='runtime_status' type-id='type-id-2060' visibility='default' filepath='include/linux/pm.h' line='632' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='runtime_error' type-id='type-id-17' visibility='default' filepath='include/linux/pm.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1760'>
+          <var-decl name='autosuspend_delay' type-id='type-id-17' visibility='default' filepath='include/linux/pm.h' line='634' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='last_busy' type-id='type-id-16' visibility='default' filepath='include/linux/pm.h' line='635' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='active_jiffies' type-id='type-id-16' visibility='default' filepath='include/linux/pm.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='suspended_jiffies' type-id='type-id-16' visibility='default' filepath='include/linux/pm.h' line='637' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='accounting_timestamp' type-id='type-id-16' visibility='default' filepath='include/linux/pm.h' line='638' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='subsys_data' type-id='type-id-2061' visibility='default' filepath='include/linux/pm.h' line='640' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='set_latency_tolerance' type-id='type-id-2062' visibility='default' filepath='include/linux/pm.h' line='641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='qos' type-id='type-id-2063' visibility='default' filepath='include/linux/pm.h' line='642' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wakeup_source' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/linux/pm_wakeup.h' line='56' column='1' id='type-id-2064'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/pm_wakeup.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id' type-id='type-id-17' visibility='default' filepath='include/linux/pm_wakeup.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='entry' type-id='type-id-20' visibility='default' filepath='include/linux/pm_wakeup.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='include/linux/pm_wakeup.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='wakeirq' type-id='type-id-2058' visibility='default' filepath='include/linux/pm_wakeup.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='timer' type-id='type-id-417' visibility='default' filepath='include/linux/pm_wakeup.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='timer_expires' type-id='type-id-16' visibility='default' filepath='include/linux/pm_wakeup.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='total_time' type-id='type-id-682' visibility='default' filepath='include/linux/pm_wakeup.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='max_time' type-id='type-id-682' visibility='default' filepath='include/linux/pm_wakeup.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='last_time' type-id='type-id-682' visibility='default' filepath='include/linux/pm_wakeup.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='start_prevent_time' type-id='type-id-682' visibility='default' filepath='include/linux/pm_wakeup.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='prevent_sleep_time' type-id='type-id-682' visibility='default' filepath='include/linux/pm_wakeup.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='event_count' type-id='type-id-16' visibility='default' filepath='include/linux/pm_wakeup.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='active_count' type-id='type-id-16' visibility='default' filepath='include/linux/pm_wakeup.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='relax_count' type-id='type-id-16' visibility='default' filepath='include/linux/pm_wakeup.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='expire_count' type-id='type-id-16' visibility='default' filepath='include/linux/pm_wakeup.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='wakeup_count' type-id='type-id-16' visibility='default' filepath='include/linux/pm_wakeup.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='dev' type-id='type-id-240' visibility='default' filepath='include/linux/pm_wakeup.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='active' type-id='type-id-33' visibility='default' filepath='include/linux/pm_wakeup.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='autosleep_enabled' type-id='type-id-33' visibility='default' filepath='include/linux/pm_wakeup.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='rpm_request' filepath='include/linux/pm.h' line='530' column='1' id='type-id-2059'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='RPM_REQ_NONE' value='0'/>
+        <enumerator name='RPM_REQ_IDLE' value='1'/>
+        <enumerator name='RPM_REQ_SUSPEND' value='2'/>
+        <enumerator name='RPM_REQ_AUTOSUSPEND' value='3'/>
+        <enumerator name='RPM_REQ_RESUME' value='4'/>
+      </enum-decl>
+      <enum-decl name='rpm_status' filepath='include/linux/pm.h' line='508' column='1' id='type-id-2060'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='RPM_ACTIVE' value='0'/>
+        <enumerator name='RPM_RESUMING' value='1'/>
+        <enumerator name='RPM_SUSPENDED' value='2'/>
+        <enumerator name='RPM_SUSPENDING' value='3'/>
+      </enum-decl>
+      <class-decl name='pm_subsys_data' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/pm.h' line='542' column='1' id='type-id-2065'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='include/linux/pm.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='refcount' type-id='type-id-5' visibility='default' filepath='include/linux/pm.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='clock_list' type-id='type-id-20' visibility='default' filepath='include/linux/pm.h' line='546' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_pm_domain' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/linux/pm.h' line='662' column='1' id='type-id-2066'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='type-id-2042' visibility='default' filepath='include/linux/pm.h' line='663' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='detach' type-id='type-id-2067' visibility='default' filepath='include/linux/pm.h' line='664' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='activate' type-id='type-id-2043' visibility='default' filepath='include/linux/pm.h' line='665' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='sync' type-id='type-id-2028' visibility='default' filepath='include/linux/pm.h' line='666' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='dismiss' type-id='type-id-2028' visibility='default' filepath='include/linux/pm.h' line='667' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_map_ops' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/dma-mapping.h' line='79' column='1' id='type-id-2068'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alloc' type-id='type-id-2069' visibility='default' filepath='include/linux/dma-mapping.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='free' type-id='type-id-2070' visibility='default' filepath='include/linux/dma-mapping.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mmap' type-id='type-id-2071' visibility='default' filepath='include/linux/dma-mapping.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_sgtable' type-id='type-id-2072' visibility='default' filepath='include/linux/dma-mapping.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='map_page' type-id='type-id-2073' visibility='default' filepath='include/linux/dma-mapping.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='unmap_page' type-id='type-id-2074' visibility='default' filepath='include/linux/dma-mapping.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='map_sg' type-id='type-id-2075' visibility='default' filepath='include/linux/dma-mapping.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='unmap_sg' type-id='type-id-2076' visibility='default' filepath='include/linux/dma-mapping.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='map_resource' type-id='type-id-2077' visibility='default' filepath='include/linux/dma-mapping.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='unmap_resource' type-id='type-id-2074' visibility='default' filepath='include/linux/dma-mapping.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sync_single_for_cpu' type-id='type-id-2078' visibility='default' filepath='include/linux/dma-mapping.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='sync_single_for_device' type-id='type-id-2078' visibility='default' filepath='include/linux/dma-mapping.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='sync_sg_for_cpu' type-id='type-id-2079' visibility='default' filepath='include/linux/dma-mapping.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='sync_sg_for_device' type-id='type-id-2079' visibility='default' filepath='include/linux/dma-mapping.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='cache_sync' type-id='type-id-2080' visibility='default' filepath='include/linux/dma-mapping.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='mapping_error' type-id='type-id-2081' visibility='default' filepath='include/linux/dma-mapping.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='dma_supported' type-id='type-id-2082' visibility='default' filepath='include/linux/dma-mapping.h' line='132' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='dma_addr_t' type-id='type-id-40' filepath='include/linux/types.h' line='153' column='1' id='type-id-2083'/>
+      <class-decl name='sg_table' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/scatterlist.h' line='42' column='1' id='type-id-2084'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sgl' type-id='type-id-920' visibility='default' filepath='include/linux/scatterlist.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nents' type-id='type-id-5' visibility='default' filepath='include/linux/scatterlist.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='orig_nents' type-id='type-id-5' visibility='default' filepath='include/linux/scatterlist.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scatterlist' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/scatterlist.h' line='11' column='1' id='type-id-2085'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='page_link' type-id='type-id-16' visibility='default' filepath='include/linux/scatterlist.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='offset' type-id='type-id-5' visibility='default' filepath='include/linux/scatterlist.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='length' type-id='type-id-5' visibility='default' filepath='include/linux/scatterlist.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dma_address' type-id='type-id-2083' visibility='default' filepath='include/linux/scatterlist.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dma_length' type-id='type-id-5' visibility='default' filepath='include/linux/scatterlist.h' line='17' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='page' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/mm_types.h' line='70' column='1' id='type-id-2086'>
+        <member-type access='public'>
+          <union-decl name='__anonymous_union__' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='163' column='1' id='type-id-2087'>
+            <data-member access='private'>
+              <var-decl name='_mapcount' type-id='type-id-26' visibility='default' filepath='include/linux/mm_types.h' line='168' column='1'/>
+            </data-member>
+            <data-member access='private'>
+              <var-decl name='page_type' type-id='type-id-5' visibility='default' filepath='include/linux/mm_types.h' line='176' column='1'/>
+            </data-member>
+            <data-member access='private'>
+              <var-decl name='active' type-id='type-id-5' visibility='default' filepath='include/linux/mm_types.h' line='178' column='1'/>
+            </data-member>
+            <data-member access='private'>
+              <var-decl name='units' type-id='type-id-17' visibility='default' filepath='include/linux/mm_types.h' line='179' column='1'/>
+            </data-member>
+          </union-decl>
+        </member-type>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='type-id-2088' visibility='default' filepath='include/linux/mm_types.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='_refcount' type-id='type-id-26' visibility='default' filepath='include/linux/mm_types.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mem_cgroup' type-id='type-id-1537' visibility='default' filepath='include/linux/mm_types.h' line='186' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__42' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='80' column='1' id='type-id-2089'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lru' type-id='type-id-20' visibility='default' filepath='include/linux/mm_types.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mapping' type-id='type-id-1281' visibility='default' filepath='include/linux/mm_types.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='index' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='private' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='96' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='address_space' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='417' column='1' id='type-id-1307'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='host' type-id='type-id-1129' visibility='default' filepath='include/linux/fs.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='i_pages' type-id='type-id-415' visibility='default' filepath='include/linux/fs.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='i_mmap_writable' type-id='type-id-26' visibility='default' filepath='include/linux/fs.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='i_mmap' type-id='type-id-1523' visibility='default' filepath='include/linux/fs.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='i_mmap_rwsem' type-id='type-id-246' visibility='default' filepath='include/linux/fs.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='nrpages' type-id='type-id-16' visibility='default' filepath='include/linux/fs.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='nrexceptional' type-id='type-id-16' visibility='default' filepath='include/linux/fs.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='writeback_index' type-id='type-id-16' visibility='default' filepath='include/linux/fs.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='a_ops' type-id='type-id-2090' visibility='default' filepath='include/linux/fs.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='include/linux/fs.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='private_lock' type-id='type-id-247' visibility='default' filepath='include/linux/fs.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='gfp_mask' type-id='type-id-485' visibility='default' filepath='include/linux/fs.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='private_list' type-id='type-id-20' visibility='default' filepath='include/linux/fs.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='private_data' type-id='type-id-15' visibility='default' filepath='include/linux/fs.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='wb_err' type-id='type-id-1282' visibility='default' filepath='include/linux/fs.h' line='434' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rb_root_cached' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/rbtree.h' line='57' column='1' id='type-id-1523'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb_root' type-id='type-id-416' visibility='default' filepath='include/linux/rbtree.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rb_leftmost' type-id='type-id-1238' visibility='default' filepath='include/linux/rbtree.h' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='address_space_operations' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='353' column='1' id='type-id-2091'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='writepage' type-id='type-id-2092' visibility='default' filepath='include/linux/fs.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='readpage' type-id='type-id-2093' visibility='default' filepath='include/linux/fs.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='writepages' type-id='type-id-2094' visibility='default' filepath='include/linux/fs.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='set_page_dirty' type-id='type-id-2095' visibility='default' filepath='include/linux/fs.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='readpages' type-id='type-id-2096' visibility='default' filepath='include/linux/fs.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='write_begin' type-id='type-id-2097' visibility='default' filepath='include/linux/fs.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='write_end' type-id='type-id-2098' visibility='default' filepath='include/linux/fs.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='bmap' type-id='type-id-2099' visibility='default' filepath='include/linux/fs.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='invalidatepage' type-id='type-id-2100' visibility='default' filepath='include/linux/fs.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='releasepage' type-id='type-id-2101' visibility='default' filepath='include/linux/fs.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='freepage' type-id='type-id-2102' visibility='default' filepath='include/linux/fs.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='direct_IO' type-id='type-id-2103' visibility='default' filepath='include/linux/fs.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='migratepage' type-id='type-id-2104' visibility='default' filepath='include/linux/fs.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='isolate_page' type-id='type-id-2105' visibility='default' filepath='include/linux/fs.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='putback_page' type-id='type-id-2102' visibility='default' filepath='include/linux/fs.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='launder_page' type-id='type-id-2095' visibility='default' filepath='include/linux/fs.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='is_partially_uptodate' type-id='type-id-2106' visibility='default' filepath='include/linux/fs.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='is_dirty_writeback' type-id='type-id-2107' visibility='default' filepath='include/linux/fs.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='error_remove_page' type-id='type-id-2108' visibility='default' filepath='include/linux/fs.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='swap_activate' type-id='type-id-2109' visibility='default' filepath='include/linux/fs.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='swap_deactivate' type-id='type-id-2110' visibility='default' filepath='include/linux/fs.h' line='400' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='sector_t' type-id='type-id-16' filepath='include/linux/types.h' line='134' column='1' id='type-id-386'/>
+      <class-decl name='kiocb' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='310' column='1' id='type-id-2111'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ki_filp' type-id='type-id-83' visibility='default' filepath='include/linux/fs.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ki_pos' type-id='type-id-763' visibility='default' filepath='include/linux/fs.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ki_complete' type-id='type-id-2112' visibility='default' filepath='include/linux/fs.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='private' type-id='type-id-15' visibility='default' filepath='include/linux/fs.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ki_flags' type-id='type-id-17' visibility='default' filepath='include/linux/fs.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='ki_hint' type-id='type-id-688' visibility='default' filepath='include/linux/fs.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='304'>
+          <var-decl name='ki_ioprio' type-id='type-id-688' visibility='default' filepath='include/linux/fs.h' line='321' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iov_iter' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/uio.h' line='31' column='1' id='type-id-2113'>
+        <member-type access='public'>
+          <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/uio.h' line='41' column='1' id='type-id-2114'>
+            <data-member access='private'>
+              <var-decl name='nr_segs' type-id='type-id-16' visibility='default' filepath='include/linux/uio.h' line='42' column='1'/>
+            </data-member>
+            <data-member access='private'>
+              <var-decl name='' type-id='type-id-2115' visibility='default' filepath='include/linux/uio.h' line='43' column='1'/>
+            </data-member>
+          </union-decl>
+        </member-type>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='type-id-17' visibility='default' filepath='include/linux/uio.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='iov_offset' type-id='type-id-84' visibility='default' filepath='include/linux/uio.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='count' type-id='type-id-84' visibility='default' filepath='include/linux/uio.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='type-id-2116' visibility='default' filepath='include/linux/uio.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__25' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/uio.h' line='35' column='1' id='type-id-2116'>
+        <data-member access='private'>
+          <var-decl name='iov' type-id='type-id-2117' visibility='default' filepath='include/linux/uio.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='kvec' type-id='type-id-2118' visibility='default' filepath='include/linux/uio.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='bvec' type-id='type-id-2119' visibility='default' filepath='include/linux/uio.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='pipe' type-id='type-id-87' visibility='default' filepath='include/linux/uio.h' line='39' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='iovec' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/uio.h' line='17' column='1' id='type-id-2120'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='iov_base' type-id='type-id-15' visibility='default' filepath='include/uapi/linux/uio.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='iov_len' type-id='type-id-887' visibility='default' filepath='include/uapi/linux/uio.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kvec' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/uio.h' line='19' column='1' id='type-id-2121'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='iov_base' type-id='type-id-15' visibility='default' filepath='include/linux/uio.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='iov_len' type-id='type-id-84' visibility='default' filepath='include/linux/uio.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pipe_inode_info' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/pipe_fs_i.h' line='48' column='1' id='type-id-2122'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mutex' type-id='type-id-245' visibility='default' filepath='include/linux/pipe_fs_i.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='wait' type-id='type-id-225' visibility='default' filepath='include/linux/pipe_fs_i.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='nrbufs' type-id='type-id-5' visibility='default' filepath='include/linux/pipe_fs_i.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='curbuf' type-id='type-id-5' visibility='default' filepath='include/linux/pipe_fs_i.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='buffers' type-id='type-id-5' visibility='default' filepath='include/linux/pipe_fs_i.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='readers' type-id='type-id-5' visibility='default' filepath='include/linux/pipe_fs_i.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='writers' type-id='type-id-5' visibility='default' filepath='include/linux/pipe_fs_i.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='files' type-id='type-id-5' visibility='default' filepath='include/linux/pipe_fs_i.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='waiting_writers' type-id='type-id-5' visibility='default' filepath='include/linux/pipe_fs_i.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='r_counter' type-id='type-id-5' visibility='default' filepath='include/linux/pipe_fs_i.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='w_counter' type-id='type-id-5' visibility='default' filepath='include/linux/pipe_fs_i.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='tmp_page' type-id='type-id-512' visibility='default' filepath='include/linux/pipe_fs_i.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='fasync_readers' type-id='type-id-254' visibility='default' filepath='include/linux/pipe_fs_i.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='fasync_writers' type-id='type-id-254' visibility='default' filepath='include/linux/pipe_fs_i.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='bufs' type-id='type-id-2123' visibility='default' filepath='include/linux/pipe_fs_i.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='user' type-id='type-id-1231' visibility='default' filepath='include/linux/pipe_fs_i.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fasync_struct' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1283' column='1' id='type-id-2124'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fa_lock' type-id='type-id-885' visibility='default' filepath='include/linux/fs.h' line='1284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='magic' type-id='type-id-17' visibility='default' filepath='include/linux/fs.h' line='1285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='fa_fd' type-id='type-id-17' visibility='default' filepath='include/linux/fs.h' line='1286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fa_next' type-id='type-id-254' visibility='default' filepath='include/linux/fs.h' line='1287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fa_file' type-id='type-id-83' visibility='default' filepath='include/linux/fs.h' line='1288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fa_rcu' type-id='type-id-385' visibility='default' filepath='include/linux/fs.h' line='1289' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='rwlock_t' type-id='type-id-2125' filepath='include/linux/rwlock_types.h' line='20' column='1' id='type-id-885'/>
+      <class-decl name='__anonymous_struct__43' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-885' visibility='default' filepath='include/linux/rwlock_types.h' line='11' column='1' id='type-id-2125'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='raw_lock' type-id='type-id-2126' visibility='default' filepath='include/linux/rwlock_types.h' line='12' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='arch_rwlock_t' type-id='type-id-2127' filepath='include/asm-generic/qrwlock_types.h' line='27' column='1' id='type-id-2126'/>
+      <class-decl name='qrwlock' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='13' column='1' id='type-id-2127'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='type-id-2128' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='wait_lock' type-id='type-id-32' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__26' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='14' column='1' id='type-id-2128'>
+        <data-member access='private'>
+          <var-decl name='cnts' type-id='type-id-26' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='type-id-2129' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='16' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__44' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='16' column='1' id='type-id-2129'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wlocked' type-id='type-id-214' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='__lstate' type-id='type-id-1185' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='19' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pipe_buffer' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/pipe_fs_i.h' line='21' column='1' id='type-id-2130'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='page' type-id='type-id-512' visibility='default' filepath='include/linux/pipe_fs_i.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='offset' type-id='type-id-5' visibility='default' filepath='include/linux/pipe_fs_i.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='len' type-id='type-id-5' visibility='default' filepath='include/linux/pipe_fs_i.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ops' type-id='type-id-2131' visibility='default' filepath='include/linux/pipe_fs_i.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='type-id-5' visibility='default' filepath='include/linux/pipe_fs_i.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='private' type-id='type-id-16' visibility='default' filepath='include/linux/pipe_fs_i.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pipe_buf_operations' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/pipe_fs_i.h' line='75' column='1' id='type-id-2132'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='can_merge' type-id='type-id-17' visibility='default' filepath='include/linux/pipe_fs_i.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='confirm' type-id='type-id-2133' visibility='default' filepath='include/linux/pipe_fs_i.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='release' type-id='type-id-2134' visibility='default' filepath='include/linux/pipe_fs_i.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='steal' type-id='type-id-2133' visibility='default' filepath='include/linux/pipe_fs_i.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get' type-id='type-id-2135' visibility='default' filepath='include/linux/pipe_fs_i.h' line='111' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__45' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/uio.h' line='43' column='1' id='type-id-2115'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='idx' type-id='type-id-17' visibility='default' filepath='include/linux/uio.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='start_idx' type-id='type-id-17' visibility='default' filepath='include/linux/uio.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='migrate_mode' filepath='include/linux/migrate_mode.h' line='15' column='1' id='type-id-2136'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='MIGRATE_ASYNC' value='0'/>
+        <enumerator name='MIGRATE_SYNC_LIGHT' value='1'/>
+        <enumerator name='MIGRATE_SYNC' value='2'/>
+        <enumerator name='MIGRATE_SYNC_NO_COPY' value='3'/>
+      </enum-decl>
+      <typedef-decl name='isolate_mode_t' type-id='type-id-5' filepath='include/linux/mmzone.h' line='265' column='1' id='type-id-2137'/>
+      <typedef-decl name='errseq_t' type-id='type-id-7' filepath='include/linux/errseq.h' line='8' column='1' id='type-id-1282'/>
+      <class-decl name='__anonymous_struct__46' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='101' column='1' id='type-id-2138'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='type-id-512' visibility='default' filepath='include/linux/mm_types.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pages' type-id='type-id-17' visibility='default' filepath='include/linux/mm_types.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pobjects' type-id='type-id-17' visibility='default' filepath='include/linux/mm_types.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__47' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='118' column='1' id='type-id-2139'>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='inuse' type-id='type-id-5' visibility='default' filepath='include/linux/mm_types.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='objects' type-id='type-id-5' visibility='default' filepath='include/linux/mm_types.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='frozen' type-id='type-id-5' visibility='default' filepath='include/linux/mm_types.h' line='121' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='pgtable_t' type-id='type-id-512' filepath='arch/arm64/include/asm/page.h' line='38' column='1' id='type-id-2140'/>
+      <union-decl name='__anonymous_union__28' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='142' column='1' id='type-id-2141'>
+        <data-member access='private'>
+          <var-decl name='pt_mm' type-id='type-id-882' visibility='default' filepath='include/linux/mm_types.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='pt_frag_refcount' type-id='type-id-26' visibility='default' filepath='include/linux/mm_types.h' line='144' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='dev_pagemap' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/linux/memremap.h' line='114' column='1' id='type-id-2142'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='page_fault' type-id='type-id-2143' visibility='default' filepath='include/linux/memremap.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='page_free' type-id='type-id-2144' visibility='default' filepath='include/linux/memremap.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='altmap' type-id='type-id-2145' visibility='default' filepath='include/linux/memremap.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='altmap_valid' type-id='type-id-33' visibility='default' filepath='include/linux/memremap.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='res' type-id='type-id-2146' visibility='default' filepath='include/linux/memremap.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='ref' type-id='type-id-2147' visibility='default' filepath='include/linux/memremap.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='kill' type-id='type-id-2148' visibility='default' filepath='include/linux/memremap.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='dev' type-id='type-id-240' visibility='default' filepath='include/linux/memremap.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='data' type-id='type-id-15' visibility='default' filepath='include/linux/memremap.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='type' type-id='type-id-2149' visibility='default' filepath='include/linux/memremap.h' line='124' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='dev_page_fault_t' type-id='type-id-2150' filepath='include/linux/memremap.h' line='95' column='1' id='type-id-2143'/>
+      <typedef-decl name='pmd_t' type-id='type-id-2151' filepath='arch/arm64/include/asm/pgtable-types.h' line='38' column='1' id='type-id-2152'/>
+      <class-decl name='__anonymous_struct__48' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-2152' visibility='default' filepath='arch/arm64/include/asm/pgtable-types.h' line='38' column='1' id='type-id-2151'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pmd' type-id='type-id-2153' visibility='default' filepath='arch/arm64/include/asm/pgtable-types.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='pmdval_t' type-id='type-id-40' filepath='arch/arm64/include/asm/pgtable-types.h' line='26' column='1' id='type-id-2153'/>
+      <typedef-decl name='dev_page_free_t' type-id='type-id-2154' filepath='include/linux/memremap.h' line='100' column='1' id='type-id-2144'/>
+      <class-decl name='vmem_altmap' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/memremap.h' line='20' column='1' id='type-id-2145'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base_pfn' type-id='type-id-892' visibility='default' filepath='include/linux/memremap.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reserve' type-id='type-id-892' visibility='default' filepath='include/linux/memremap.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='free' type-id='type-id-16' visibility='default' filepath='include/linux/memremap.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='align' type-id='type-id-16' visibility='default' filepath='include/linux/memremap.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='alloc' type-id='type-id-16' visibility='default' filepath='include/linux/memremap.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='resource' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/ioport.h' line='19' column='1' id='type-id-2146'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='type-id-2155' visibility='default' filepath='include/linux/ioport.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='end' type-id='type-id-2155' visibility='default' filepath='include/linux/ioport.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/ioport.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='include/linux/ioport.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='desc' type-id='type-id-16' visibility='default' filepath='include/linux/ioport.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='parent' type-id='type-id-2156' visibility='default' filepath='include/linux/ioport.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sibling' type-id='type-id-2156' visibility='default' filepath='include/linux/ioport.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='child' type-id='type-id-2156' visibility='default' filepath='include/linux/ioport.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='resource_size_t' type-id='type-id-99' filepath='include/linux/types.h' line='168' column='1' id='type-id-2155'/>
+      <class-decl name='percpu_ref' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/percpu-refcount.h' line='88' column='1' id='type-id-391'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='type-id-115' visibility='default' filepath='include/linux/percpu-refcount.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='percpu_count_ptr' type-id='type-id-16' visibility='default' filepath='include/linux/percpu-refcount.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='release' type-id='type-id-2157' visibility='default' filepath='include/linux/percpu-refcount.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='confirm_switch' type-id='type-id-2157' visibility='default' filepath='include/linux/percpu-refcount.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='force_atomic' type-id='type-id-33' visibility='default' filepath='include/linux/percpu-refcount.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/linux/percpu-refcount.h' line='98' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='percpu_ref_func_t' type-id='type-id-2158' filepath='include/linux/percpu-refcount.h' line='60' column='1' id='type-id-2159'/>
+      <enum-decl name='memory_type' filepath='include/linux/memremap.h' line='57' column='1' id='type-id-2149'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='MEMORY_DEVICE_PRIVATE' value='1'/>
+        <enumerator name='MEMORY_DEVICE_PUBLIC' value='2'/>
+        <enumerator name='MEMORY_DEVICE_FS_DAX' value='3'/>
+      </enum-decl>
+      <enum-decl name='dma_data_direction' filepath='include/linux/dma-direction.h' line='5' column='1' id='type-id-2160'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='DMA_BIDIRECTIONAL' value='0'/>
+        <enumerator name='DMA_TO_DEVICE' value='1'/>
+        <enumerator name='DMA_FROM_DEVICE' value='2'/>
+        <enumerator name='DMA_NONE' value='3'/>
+      </enum-decl>
+      <class-decl name='device_dma_parameters' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='761' column='1' id='type-id-2161'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max_segment_size' type-id='type-id-5' visibility='default' filepath='include/linux/device.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='segment_boundary_mask' type-id='type-id-16' visibility='default' filepath='include/linux/device.h' line='767' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_archdata' size-in-bits='128' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/device.h' line='19' column='1' id='type-id-2023'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='iommu' type-id='type-id-15' visibility='default' filepath='arch/arm64/include/asm/device.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dma_coherent' type-id='type-id-33' visibility='default' filepath='arch/arm64/include/asm/device.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fwnode_handle' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/fwnode.h' line='20' column='1' id='type-id-2162'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='secondary' type-id='type-id-2025' visibility='default' filepath='include/linux/fwnode.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='type-id-2163' visibility='default' filepath='include/linux/fwnode.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='type-id-240' visibility='default' filepath='include/linux/fwnode.h' line='23' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fwnode_operations' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/fwnode.h' line='111' column='1' id='type-id-2164'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get' type-id='type-id-2165' visibility='default' filepath='include/linux/fwnode.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='put' type-id='type-id-2166' visibility='default' filepath='include/linux/fwnode.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='device_is_available' type-id='type-id-2167' visibility='default' filepath='include/linux/fwnode.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='device_get_match_data' type-id='type-id-2168' visibility='default' filepath='include/linux/fwnode.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='property_present' type-id='type-id-2169' visibility='default' filepath='include/linux/fwnode.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='property_read_int_array' type-id='type-id-2170' visibility='default' filepath='include/linux/fwnode.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='property_read_string_array' type-id='type-id-2171' visibility='default' filepath='include/linux/fwnode.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_parent' type-id='type-id-2172' visibility='default' filepath='include/linux/fwnode.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_next_child_node' type-id='type-id-2173' visibility='default' filepath='include/linux/fwnode.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_named_child_node' type-id='type-id-2174' visibility='default' filepath='include/linux/fwnode.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='get_reference_args' type-id='type-id-2175' visibility='default' filepath='include/linux/fwnode.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='graph_get_next_endpoint' type-id='type-id-2173' visibility='default' filepath='include/linux/fwnode.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='graph_get_remote_endpoint' type-id='type-id-2172' visibility='default' filepath='include/linux/fwnode.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='graph_get_port_parent' type-id='type-id-2165' visibility='default' filepath='include/linux/fwnode.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='graph_parse_endpoint' type-id='type-id-2176' visibility='default' filepath='include/linux/fwnode.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='add_links' type-id='type-id-2177' visibility='default' filepath='include/linux/fwnode.h' line='147' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fwnode_reference_args' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/fwnode.h' line='46' column='1' id='type-id-2178'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fwnode' type-id='type-id-2025' visibility='default' filepath='include/linux/fwnode.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nargs' type-id='type-id-5' visibility='default' filepath='include/linux/fwnode.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='args' type-id='type-id-1181' visibility='default' filepath='include/linux/fwnode.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fwnode_endpoint' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/fwnode.h' line='32' column='1' id='type-id-2179'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port' type-id='type-id-5' visibility='default' filepath='include/linux/fwnode.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='id' type-id='type-id-5' visibility='default' filepath='include/linux/fwnode.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='local_fwnode' type-id='type-id-2180' visibility='default' filepath='include/linux/fwnode.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='klist_node' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/klist.h' line='39' column='1' id='type-id-2026'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='n_klist' type-id='type-id-15' visibility='default' filepath='include/linux/klist.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n_node' type-id='type-id-20' visibility='default' filepath='include/linux/klist.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='n_ref' type-id='type-id-239' visibility='default' filepath='include/linux/klist.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='class' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='418' column='1' id='type-id-2181'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/device.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='include/linux/device.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='class_groups' type-id='type-id-665' visibility='default' filepath='include/linux/device.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev_groups' type-id='type-id-665' visibility='default' filepath='include/linux/device.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev_kobj' type-id='type-id-379' visibility='default' filepath='include/linux/device.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dev_uevent' type-id='type-id-2032' visibility='default' filepath='include/linux/device.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='devnode' type-id='type-id-2182' visibility='default' filepath='include/linux/device.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='class_release' type-id='type-id-2183' visibility='default' filepath='include/linux/device.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dev_release' type-id='type-id-2028' visibility='default' filepath='include/linux/device.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='shutdown_pre' type-id='type-id-2043' visibility='default' filepath='include/linux/device.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ns_type' type-id='type-id-2184' visibility='default' filepath='include/linux/device.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='namespace' type-id='type-id-2185' visibility='default' filepath='include/linux/device.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='get_ownership' type-id='type-id-2186' visibility='default' filepath='include/linux/device.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='pm' type-id='type-id-2034' visibility='default' filepath='include/linux/device.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='p' type-id='type-id-2048' visibility='default' filepath='include/linux/device.h' line='441' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rtnl_link_ops' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/net/rtnetlink.h' line='59' column='1' id='type-id-2187'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/net/rtnetlink.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='kind' type-id='type-id-4' visibility='default' filepath='include/net/rtnetlink.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='priv_size' type-id='type-id-84' visibility='default' filepath='include/net/rtnetlink.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='setup' type-id='type-id-1691' visibility='default' filepath='include/net/rtnetlink.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='maxtype' type-id='type-id-5' visibility='default' filepath='include/net/rtnetlink.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='policy' type-id='type-id-2188' visibility='default' filepath='include/net/rtnetlink.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='validate' type-id='type-id-2189' visibility='default' filepath='include/net/rtnetlink.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='newlink' type-id='type-id-2190' visibility='default' filepath='include/net/rtnetlink.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='changelink' type-id='type-id-2191' visibility='default' filepath='include/net/rtnetlink.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='dellink' type-id='type-id-2192' visibility='default' filepath='include/net/rtnetlink.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='get_size' type-id='type-id-2193' visibility='default' filepath='include/net/rtnetlink.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='fill_info' type-id='type-id-2194' visibility='default' filepath='include/net/rtnetlink.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='get_xstats_size' type-id='type-id-2193' visibility='default' filepath='include/net/rtnetlink.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='fill_xstats' type-id='type-id-2194' visibility='default' filepath='include/net/rtnetlink.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='get_num_tx_queues' type-id='type-id-2195' visibility='default' filepath='include/net/rtnetlink.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='get_num_rx_queues' type-id='type-id-2195' visibility='default' filepath='include/net/rtnetlink.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='slave_maxtype' type-id='type-id-5' visibility='default' filepath='include/net/rtnetlink.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='slave_policy' type-id='type-id-2188' visibility='default' filepath='include/net/rtnetlink.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='slave_changelink' type-id='type-id-2196' visibility='default' filepath='include/net/rtnetlink.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='get_slave_size' type-id='type-id-2197' visibility='default' filepath='include/net/rtnetlink.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='fill_slave_info' type-id='type-id-2198' visibility='default' filepath='include/net/rtnetlink.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='get_link_net' type-id='type-id-2199' visibility='default' filepath='include/net/rtnetlink.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='get_linkxstats_size' type-id='type-id-2200' visibility='default' filepath='include/net/rtnetlink.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='fill_linkxstats' type-id='type-id-2201' visibility='default' filepath='include/net/rtnetlink.h' line='110' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nla_policy' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/netlink.h' line='222' column='1' id='type-id-2202'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='type-id-688' visibility='default' filepath='include/net/netlink.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='len' type-id='type-id-688' visibility='default' filepath='include/net/netlink.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='validation_data' type-id='type-id-15' visibility='default' filepath='include/net/netlink.h' line='225' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='s16' type-id='type-id-2203' filepath='include/asm-generic/int-ll64.h' line='18' column='1' id='type-id-1695'/>
+      <typedef-decl name='__s16' type-id='type-id-261' filepath='include/uapi/asm-generic/int-ll64.h' line='23' column='1' id='type-id-2203'/>
+      <class-decl name='netdev_tc_txq' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='761' column='1' id='type-id-1151'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='type-id-688' visibility='default' filepath='include/linux/netdevice.h' line='762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='offset' type-id='type-id-688' visibility='default' filepath='include/linux/netdevice.h' line='763' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_core' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/netns/core.h' line='8' column='1' id='type-id-1651'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sysctl_hdr' type-id='type-id-1585' visibility='default' filepath='include/net/netns/core.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sysctl_somaxconn' type-id='type-id-17' visibility='default' filepath='include/net/netns/core.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sock_inuse' type-id='type-id-666' visibility='default' filepath='include/net/netns/core.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='prot_inuse' type-id='type-id-2204' visibility='default' filepath='include/net/netns/core.h' line='16' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_mib' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/net/netns/mib.h' line='7' column='1' id='type-id-1652'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tcp_statistics' type-id='type-id-2205' visibility='default' filepath='include/net/netns/mib.h' line='8' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ip_statistics' type-id='type-id-2206' visibility='default' filepath='include/net/netns/mib.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='net_statistics' type-id='type-id-2207' visibility='default' filepath='include/net/netns/mib.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='udp_statistics' type-id='type-id-2208' visibility='default' filepath='include/net/netns/mib.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='udplite_statistics' type-id='type-id-2208' visibility='default' filepath='include/net/netns/mib.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='icmp_statistics' type-id='type-id-2209' visibility='default' filepath='include/net/netns/mib.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='icmpmsg_statistics' type-id='type-id-2210' visibility='default' filepath='include/net/netns/mib.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='proc_net_devsnmp6' type-id='type-id-262' visibility='default' filepath='include/net/netns/mib.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='udp_stats_in6' type-id='type-id-2208' visibility='default' filepath='include/net/netns/mib.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='udplite_stats_in6' type-id='type-id-2208' visibility='default' filepath='include/net/netns/mib.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ipv6_statistics' type-id='type-id-2206' visibility='default' filepath='include/net/netns/mib.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='icmpv6_statistics' type-id='type-id-2211' visibility='default' filepath='include/net/netns/mib.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='icmpv6msg_statistics' type-id='type-id-2212' visibility='default' filepath='include/net/netns/mib.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='xfrm_statistics' type-id='type-id-2213' visibility='default' filepath='include/net/netns/mib.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcp_mib' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/net/snmp.h' line='97' column='1' id='type-id-2214'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='type-id-1198' visibility='default' filepath='include/net/snmp.h' line='98' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ipstats_mib' size-in-bits='2368' is-struct='yes' visibility='default' filepath='include/net/snmp.h' line='56' column='1' id='type-id-2215'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='type-id-1180' visibility='default' filepath='include/net/snmp.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='syncp' type-id='type-id-2003' visibility='default' filepath='include/net/snmp.h' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='linux_mib' size-in-bits='7552' is-struct='yes' visibility='default' filepath='include/net/snmp.h' line='109' column='1' id='type-id-2216'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='type-id-1195' visibility='default' filepath='include/net/snmp.h' line='110' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='udp_mib' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/snmp.h' line='103' column='1' id='type-id-2217'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='type-id-1206' visibility='default' filepath='include/net/snmp.h' line='104' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='icmp_mib' size-in-bits='1792' is-struct='yes' visibility='default' filepath='include/net/snmp.h' line='64' column='1' id='type-id-2218'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='type-id-1199' visibility='default' filepath='include/net/snmp.h' line='65' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='icmpmsg_mib' size-in-bits='32768' is-struct='yes' visibility='default' filepath='include/net/snmp.h' line='69' column='1' id='type-id-2219'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='type-id-950' visibility='default' filepath='include/net/snmp.h' line='70' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='icmpv6_mib' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/snmp.h' line='76' column='1' id='type-id-2220'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='type-id-1205' visibility='default' filepath='include/net/snmp.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='icmpv6msg_mib' size-in-bits='32768' is-struct='yes' visibility='default' filepath='include/net/snmp.h' line='86' column='1' id='type-id-2221'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='type-id-950' visibility='default' filepath='include/net/snmp.h' line='87' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='linux_xfrm_mib' size-in-bits='1856' is-struct='yes' visibility='default' filepath='include/net/snmp.h' line='115' column='1' id='type-id-2222'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='type-id-1200' visibility='default' filepath='include/net/snmp.h' line='116' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_packet' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/netns/packet.h' line='11' column='1' id='type-id-1653'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sklist_lock' type-id='type-id-245' visibility='default' filepath='include/net/netns/packet.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sklist' type-id='type-id-186' visibility='default' filepath='include/net/netns/packet.h' line='13' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_unix' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/netns/unix.h' line='9' column='1' id='type-id-1654'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sysctl_max_dgram_qlen' type-id='type-id-17' visibility='default' filepath='include/net/netns/unix.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ctl' type-id='type-id-1585' visibility='default' filepath='include/net/netns/unix.h' line='11' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_ipv4' size-in-bits='9728' is-struct='yes' visibility='default' filepath='include/net/netns/ipv4.h' line='43' column='1' id='type-id-1655'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='forw_hdr' type-id='type-id-1585' visibility='default' filepath='include/net/netns/ipv4.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='frags_hdr' type-id='type-id-1585' visibility='default' filepath='include/net/netns/ipv4.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ipv4_hdr' type-id='type-id-1585' visibility='default' filepath='include/net/netns/ipv4.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='route_hdr' type-id='type-id-1585' visibility='default' filepath='include/net/netns/ipv4.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='xfrm4_hdr' type-id='type-id-1585' visibility='default' filepath='include/net/netns/ipv4.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='devconf_all' type-id='type-id-2223' visibility='default' filepath='include/net/netns/ipv4.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='devconf_dflt' type-id='type-id-2223' visibility='default' filepath='include/net/netns/ipv4.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ra_chain' type-id='type-id-2224' visibility='default' filepath='include/net/netns/ipv4.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ra_mutex' type-id='type-id-245' visibility='default' filepath='include/net/netns/ipv4.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='rules_ops' type-id='type-id-2225' visibility='default' filepath='include/net/netns/ipv4.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='fib_has_custom_rules' type-id='type-id-33' visibility='default' filepath='include/net/netns/ipv4.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='fib_rules_require_fldissect' type-id='type-id-5' visibility='default' filepath='include/net/netns/ipv4.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='fib_main' type-id='type-id-2226' visibility='default' filepath='include/net/netns/ipv4.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='fib_default' type-id='type-id-2226' visibility='default' filepath='include/net/netns/ipv4.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='fib_has_custom_local_routes' type-id='type-id-33' visibility='default' filepath='include/net/netns/ipv4.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='fib_table_hash' type-id='type-id-746' visibility='default' filepath='include/net/netns/ipv4.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='fib_offload_disabled' type-id='type-id-33' visibility='default' filepath='include/net/netns/ipv4.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='fibnl' type-id='type-id-1648' visibility='default' filepath='include/net/netns/ipv4.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='icmp_sk' type-id='type-id-2227' visibility='default' filepath='include/net/netns/ipv4.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='mc_autojoin_sk' type-id='type-id-1648' visibility='default' filepath='include/net/netns/ipv4.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='peers' type-id='type-id-2228' visibility='default' filepath='include/net/netns/ipv4.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='tcp_sk' type-id='type-id-2227' visibility='default' filepath='include/net/netns/ipv4.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='frags' type-id='type-id-2229' visibility='default' filepath='include/net/netns/ipv4.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='iptable_filter' type-id='type-id-2230' visibility='default' filepath='include/net/netns/ipv4.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='iptable_mangle' type-id='type-id-2230' visibility='default' filepath='include/net/netns/ipv4.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='iptable_raw' type-id='type-id-2230' visibility='default' filepath='include/net/netns/ipv4.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='arptable_filter' type-id='type-id-2230' visibility='default' filepath='include/net/netns/ipv4.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='iptable_security' type-id='type-id-2230' visibility='default' filepath='include/net/netns/ipv4.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='nat_table' type-id='type-id-2230' visibility='default' filepath='include/net/netns/ipv4.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='sysctl_icmp_echo_ignore_all' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4512'>
+          <var-decl name='sysctl_icmp_echo_ignore_broadcasts' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='sysctl_icmp_ignore_bogus_error_responses' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4576'>
+          <var-decl name='sysctl_icmp_ratelimit' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='sysctl_icmp_ratemask' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4640'>
+          <var-decl name='sysctl_icmp_errors_use_inbound_ifaddr' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='ip_local_ports' type-id='type-id-2231' visibility='default' filepath='include/net/netns/ipv4.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4832'>
+          <var-decl name='sysctl_tcp_ecn' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='sysctl_tcp_ecn_fallback' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4896'>
+          <var-decl name='sysctl_ip_default_ttl' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='sysctl_ip_no_pmtu_disc' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4960'>
+          <var-decl name='sysctl_ip_fwd_use_pmtu' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='sysctl_ip_fwd_update_priority' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5024'>
+          <var-decl name='sysctl_ip_nonlocal_bind' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='sysctl_ip_dynaddr' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5088'>
+          <var-decl name='sysctl_ip_early_demux' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='sysctl_tcp_early_demux' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5152'>
+          <var-decl name='sysctl_udp_early_demux' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='sysctl_fwmark_reflect' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5216'>
+          <var-decl name='sysctl_tcp_fwmark_accept' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='sysctl_tcp_mtu_probing' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5280'>
+          <var-decl name='sysctl_tcp_base_mss' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='sysctl_tcp_min_snd_mss' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5344'>
+          <var-decl name='sysctl_tcp_probe_threshold' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='sysctl_tcp_probe_interval' type-id='type-id-7' visibility='default' filepath='include/net/netns/ipv4.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5408'>
+          <var-decl name='sysctl_tcp_keepalive_time' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='sysctl_tcp_keepalive_probes' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5472'>
+          <var-decl name='sysctl_tcp_keepalive_intvl' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='sysctl_tcp_syn_retries' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5536'>
+          <var-decl name='sysctl_tcp_synack_retries' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='sysctl_tcp_syncookies' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5600'>
+          <var-decl name='sysctl_tcp_reordering' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='sysctl_tcp_retries1' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5664'>
+          <var-decl name='sysctl_tcp_retries2' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='sysctl_tcp_orphan_retries' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5728'>
+          <var-decl name='sysctl_tcp_fin_timeout' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='sysctl_tcp_notsent_lowat' type-id='type-id-5' visibility='default' filepath='include/net/netns/ipv4.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5792'>
+          <var-decl name='sysctl_tcp_tw_reuse' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='sysctl_tcp_sack' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5856'>
+          <var-decl name='sysctl_tcp_window_scaling' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='sysctl_tcp_timestamps' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5920'>
+          <var-decl name='sysctl_tcp_early_retrans' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='sysctl_tcp_recovery' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5984'>
+          <var-decl name='sysctl_tcp_thin_linear_timeouts' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='sysctl_tcp_slow_start_after_idle' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6048'>
+          <var-decl name='sysctl_tcp_retrans_collapse' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='sysctl_tcp_stdurg' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6112'>
+          <var-decl name='sysctl_tcp_rfc1337' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='sysctl_tcp_abort_on_overflow' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6176'>
+          <var-decl name='sysctl_tcp_fack' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='sysctl_tcp_max_reordering' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6240'>
+          <var-decl name='sysctl_tcp_dsack' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='sysctl_tcp_app_win' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6304'>
+          <var-decl name='sysctl_tcp_adv_win_scale' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='sysctl_tcp_frto' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6368'>
+          <var-decl name='sysctl_tcp_nometrics_save' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='sysctl_tcp_moderate_rcvbuf' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6432'>
+          <var-decl name='sysctl_tcp_tso_win_divisor' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='sysctl_tcp_workaround_signed_windows' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6496'>
+          <var-decl name='sysctl_tcp_limit_output_bytes' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='sysctl_tcp_challenge_ack_limit' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6560'>
+          <var-decl name='sysctl_tcp_min_tso_segs' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='sysctl_tcp_min_rtt_wlen' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6624'>
+          <var-decl name='sysctl_tcp_autocorking' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='sysctl_tcp_invalid_ratelimit' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6688'>
+          <var-decl name='sysctl_tcp_pacing_ss_ratio' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='sysctl_tcp_pacing_ca_ratio' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6752'>
+          <var-decl name='sysctl_tcp_wmem' type-id='type-id-1133' visibility='default' filepath='include/net/netns/ipv4.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='sysctl_tcp_rmem' type-id='type-id-1133' visibility='default' filepath='include/net/netns/ipv4.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6944'>
+          <var-decl name='sysctl_tcp_comp_sack_nr' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='sysctl_tcp_comp_sack_delay_ns' type-id='type-id-16' visibility='default' filepath='include/net/netns/ipv4.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='tcp_death_row' type-id='type-id-2232' visibility='default' filepath='include/net/netns/ipv4.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='sysctl_max_syn_backlog' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8224'>
+          <var-decl name='sysctl_tcp_fastopen' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='tcp_congestion_control' type-id='type-id-2233' visibility='default' filepath='include/net/netns/ipv4.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='tcp_fastopen_ctx' type-id='type-id-2234' visibility='default' filepath='include/net/netns/ipv4.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='tcp_fastopen_ctx_lock' type-id='type-id-247' visibility='default' filepath='include/net/netns/ipv4.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8416'>
+          <var-decl name='sysctl_tcp_fastopen_blackhole_timeout' type-id='type-id-5' visibility='default' filepath='include/net/netns/ipv4.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='tfo_active_disable_times' type-id='type-id-26' visibility='default' filepath='include/net/netns/ipv4.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='tfo_active_disable_stamp' type-id='type-id-16' visibility='default' filepath='include/net/netns/ipv4.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='sysctl_udp_wmem_min' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8608'>
+          <var-decl name='sysctl_udp_rmem_min' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='sysctl_igmp_max_memberships' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8672'>
+          <var-decl name='sysctl_igmp_max_msf' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='sysctl_igmp_llm_reports' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8736'>
+          <var-decl name='sysctl_igmp_qrv' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='ping_group_range' type-id='type-id-2235' visibility='default' filepath='include/net/netns/ipv4.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='dev_addr_genid' type-id='type-id-26' visibility='default' filepath='include/net/netns/ipv4.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='sysctl_local_reserved_ports' type-id='type-id-45' visibility='default' filepath='include/net/netns/ipv4.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='sysctl_ip_prot_sock' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='notifier_ops' type-id='type-id-2236' visibility='default' filepath='include/net/netns/ipv4.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='fib_seq' type-id='type-id-5' visibility='default' filepath='include/net/netns/ipv4.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='ipmr_notifier_ops' type-id='type-id-2236' visibility='default' filepath='include/net/netns/ipv4.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='ipmr_seq' type-id='type-id-5' visibility='default' filepath='include/net/netns/ipv4.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9312'>
+          <var-decl name='rt_genid' type-id='type-id-26' visibility='default' filepath='include/net/netns/ipv4.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='ip_id_key' type-id='type-id-2237' visibility='default' filepath='include/net/netns/ipv4.h' line='219' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_frags' size-in-bits='2560' is-struct='yes' visibility='default' filepath='include/net/inet_frag.h' line='7' column='1' id='type-id-2229'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='high_thresh' type-id='type-id-192' visibility='default' filepath='include/net/inet_frag.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='low_thresh' type-id='type-id-192' visibility='default' filepath='include/net/inet_frag.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='timeout' type-id='type-id-17' visibility='default' filepath='include/net/inet_frag.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='max_dist' type-id='type-id-17' visibility='default' filepath='include/net/inet_frag.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='f' type-id='type-id-2238' visibility='default' filepath='include/net/inet_frag.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='rhashtable' type-id='type-id-2239' visibility='default' filepath='include/net/inet_frag.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='mem' type-id='type-id-115' visibility='default' filepath='include/net/inet_frag.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_frags' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/net/inet_frag.h' line='93' column='1' id='type-id-2240'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='qsize' type-id='type-id-5' visibility='default' filepath='include/net/inet_frag.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='constructor' type-id='type-id-2241' visibility='default' filepath='include/net/inet_frag.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='destructor' type-id='type-id-2242' visibility='default' filepath='include/net/inet_frag.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='frag_expire' type-id='type-id-2007' visibility='default' filepath='include/net/inet_frag.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='frags_cachep' type-id='type-id-538' visibility='default' filepath='include/net/inet_frag.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='frags_cache_name' type-id='type-id-4' visibility='default' filepath='include/net/inet_frag.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rhash_params' type-id='type-id-2243' visibility='default' filepath='include/net/inet_frag.h' line='102' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_frag_queue' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/net/inet_frag.h' line='71' column='1' id='type-id-2244'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='type-id-2245' visibility='default' filepath='include/net/inet_frag.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='key' type-id='type-id-2246' visibility='default' filepath='include/net/inet_frag.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='timer' type-id='type-id-417' visibility='default' filepath='include/net/inet_frag.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='include/net/inet_frag.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='refcnt' type-id='type-id-421' visibility='default' filepath='include/net/inet_frag.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='fragments' type-id='type-id-1768' visibility='default' filepath='include/net/inet_frag.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='rb_fragments' type-id='type-id-416' visibility='default' filepath='include/net/inet_frag.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='fragments_tail' type-id='type-id-1768' visibility='default' filepath='include/net/inet_frag.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='last_run_head' type-id='type-id-1768' visibility='default' filepath='include/net/inet_frag.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='stamp' type-id='type-id-682' visibility='default' filepath='include/net/inet_frag.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='len' type-id='type-id-17' visibility='default' filepath='include/net/inet_frag.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='meat' type-id='type-id-17' visibility='default' filepath='include/net/inet_frag.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='flags' type-id='type-id-895' visibility='default' filepath='include/net/inet_frag.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1232'>
+          <var-decl name='max_size' type-id='type-id-688' visibility='default' filepath='include/net/inet_frag.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='net' type-id='type-id-2247' visibility='default' filepath='include/net/inet_frag.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/net/inet_frag.h' line='90' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rhash_head' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/rhashtable-types.h' line='17' column='1' id='type-id-2245'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='type-id-2248' visibility='default' filepath='include/linux/rhashtable-types.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__29' size-in-bits='352' is-anonymous='yes' visibility='default' filepath='include/net/inet_frag.h' line='73' column='1' id='type-id-2246'>
+        <data-member access='private'>
+          <var-decl name='v4' type-id='type-id-2249' visibility='default' filepath='include/net/inet_frag.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='v6' type-id='type-id-2250' visibility='default' filepath='include/net/inet_frag.h' line='75' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='frag_v4_compare_key' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/net/inet_frag.h' line='34' column='1' id='type-id-2249'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='saddr' type-id='type-id-929' visibility='default' filepath='include/net/inet_frag.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='daddr' type-id='type-id-929' visibility='default' filepath='include/net/inet_frag.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='user' type-id='type-id-7' visibility='default' filepath='include/net/inet_frag.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='vif' type-id='type-id-7' visibility='default' filepath='include/net/inet_frag.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='id' type-id='type-id-926' visibility='default' filepath='include/net/inet_frag.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='protocol' type-id='type-id-688' visibility='default' filepath='include/net/inet_frag.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='frag_v6_compare_key' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/net/inet_frag.h' line='43' column='1' id='type-id-2250'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='saddr' type-id='type-id-2251' visibility='default' filepath='include/net/inet_frag.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='daddr' type-id='type-id-2251' visibility='default' filepath='include/net/inet_frag.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='user' type-id='type-id-7' visibility='default' filepath='include/net/inet_frag.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='id' type-id='type-id-929' visibility='default' filepath='include/net/inet_frag.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='iif' type-id='type-id-7' visibility='default' filepath='include/net/inet_frag.h' line='48' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='in6_addr' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/in6.h' line='33' column='1' id='type-id-2251'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='in6_u' type-id='type-id-2252' visibility='default' filepath='include/uapi/linux/in6.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__30' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/in6.h' line='34' column='1' id='type-id-2252'>
+        <data-member access='private'>
+          <var-decl name='u6_addr8' type-id='type-id-938' visibility='default' filepath='include/uapi/linux/in6.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='u6_addr16' type-id='type-id-927' visibility='default' filepath='include/uapi/linux/in6.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='u6_addr32' type-id='type-id-931' visibility='default' filepath='include/uapi/linux/in6.h' line='38' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='rhashtable_params' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/rhashtable-types.h' line='57' column='1' id='type-id-2243'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nelem_hint' type-id='type-id-688' visibility='default' filepath='include/linux/rhashtable-types.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='key_len' type-id='type-id-688' visibility='default' filepath='include/linux/rhashtable-types.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='key_offset' type-id='type-id-688' visibility='default' filepath='include/linux/rhashtable-types.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='head_offset' type-id='type-id-688' visibility='default' filepath='include/linux/rhashtable-types.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_size' type-id='type-id-5' visibility='default' filepath='include/linux/rhashtable-types.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='min_size' type-id='type-id-688' visibility='default' filepath='include/linux/rhashtable-types.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='automatic_shrinking' type-id='type-id-33' visibility='default' filepath='include/linux/rhashtable-types.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='locks_mul' type-id='type-id-214' visibility='default' filepath='include/linux/rhashtable-types.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hashfn' type-id='type-id-2253' visibility='default' filepath='include/linux/rhashtable-types.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='obj_hashfn' type-id='type-id-2254' visibility='default' filepath='include/linux/rhashtable-types.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='obj_cmpfn' type-id='type-id-2255' visibility='default' filepath='include/linux/rhashtable-types.h' line='68' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='rht_hashfn_t' type-id='type-id-2256' filepath='include/linux/rhashtable-types.h' line='38' column='1' id='type-id-2253'/>
+      <typedef-decl name='rht_obj_hashfn_t' type-id='type-id-2256' filepath='include/linux/rhashtable-types.h' line='39' column='1' id='type-id-2254'/>
+      <typedef-decl name='rht_obj_cmpfn_t' type-id='type-id-2257' filepath='include/linux/rhashtable-types.h' line='40' column='1' id='type-id-2255'/>
+      <class-decl name='rhashtable_compare_arg' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/rhashtable-types.h' line='33' column='1' id='type-id-2258'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ht' type-id='type-id-2259' visibility='default' filepath='include/linux/rhashtable-types.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='key' type-id='type-id-15' visibility='default' filepath='include/linux/rhashtable-types.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rhashtable' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/rhashtable-types.h' line='83' column='1' id='type-id-2239'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tbl' type-id='type-id-2260' visibility='default' filepath='include/linux/rhashtable-types.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='key_len' type-id='type-id-5' visibility='default' filepath='include/linux/rhashtable-types.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_elems' type-id='type-id-5' visibility='default' filepath='include/linux/rhashtable-types.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='p' type-id='type-id-2243' visibility='default' filepath='include/linux/rhashtable-types.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rhlist' type-id='type-id-33' visibility='default' filepath='include/linux/rhashtable-types.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='run_work' type-id='type-id-255' visibility='default' filepath='include/linux/rhashtable-types.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mutex' type-id='type-id-245' visibility='default' filepath='include/linux/rhashtable-types.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='include/linux/rhashtable-types.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='nelems' type-id='type-id-26' visibility='default' filepath='include/linux/rhashtable-types.h' line='92' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='local_ports' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/net/netns/ipv4.h' line='21' column='1' id='type-id-2231'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='type-id-1919' visibility='default' filepath='include/net/netns/ipv4.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='range' type-id='type-id-465' visibility='default' filepath='include/net/netns/ipv4.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='warned' type-id='type-id-33' visibility='default' filepath='include/net/netns/ipv4.h' line='24' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_timewait_death_row' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/net/netns/ipv4.h' line='34' column='1' id='type-id-2232'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tw_count' type-id='type-id-26' visibility='default' filepath='include/net/netns/ipv4.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='hashinfo' type-id='type-id-2261' visibility='default' filepath='include/net/netns/ipv4.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='sysctl_max_tw_buckets' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv4.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ping_group_range' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/netns/ipv4.h' line='27' column='1' id='type-id-2235'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='type-id-1919' visibility='default' filepath='include/net/netns/ipv4.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='range' type-id='type-id-1139' visibility='default' filepath='include/net/netns/ipv4.h' line='29' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='siphash_key_t' type-id='type-id-2262' filepath='include/linux/siphash.h' line='22' column='1' id='type-id-2237'/>
+      <class-decl name='__anonymous_struct__49' size-in-bits='128' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-2237' visibility='default' filepath='include/linux/siphash.h' line='20' column='1' id='type-id-2262'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='key' type-id='type-id-739' visibility='default' filepath='include/linux/siphash.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_ipv6' size-in-bits='8704' is-struct='yes' visibility='default' filepath='include/net/netns/ipv6.h' line='50' column='1' id='type-id-1656'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sysctl' type-id='type-id-2263' visibility='default' filepath='include/net/netns/ipv6.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='devconf_all' type-id='type-id-2264' visibility='default' filepath='include/net/netns/ipv6.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='devconf_dflt' type-id='type-id-2264' visibility='default' filepath='include/net/netns/ipv6.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='peers' type-id='type-id-2228' visibility='default' filepath='include/net/netns/ipv6.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='frags' type-id='type-id-2229' visibility='default' filepath='include/net/netns/ipv6.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='ip6table_filter' type-id='type-id-2230' visibility='default' filepath='include/net/netns/ipv6.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='ip6table_mangle' type-id='type-id-2230' visibility='default' filepath='include/net/netns/ipv6.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='ip6table_raw' type-id='type-id-2230' visibility='default' filepath='include/net/netns/ipv6.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='ip6table_security' type-id='type-id-2230' visibility='default' filepath='include/net/netns/ipv6.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='ip6table_nat' type-id='type-id-2230' visibility='default' filepath='include/net/netns/ipv6.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='fib6_null_entry' type-id='type-id-2265' visibility='default' filepath='include/net/netns/ipv6.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='ip6_null_entry' type-id='type-id-2266' visibility='default' filepath='include/net/netns/ipv6.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='rt6_stats' type-id='type-id-2267' visibility='default' filepath='include/net/netns/ipv6.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='ip6_fib_timer' type-id='type-id-417' visibility='default' filepath='include/net/netns/ipv6.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='fib_table_hash' type-id='type-id-746' visibility='default' filepath='include/net/netns/ipv6.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='fib6_main_tbl' type-id='type-id-2268' visibility='default' filepath='include/net/netns/ipv6.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='fib6_walkers' type-id='type-id-20' visibility='default' filepath='include/net/netns/ipv6.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='ip6_dst_ops' type-id='type-id-2269' visibility='default' filepath='include/net/netns/ipv6.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='fib6_walker_lock' type-id='type-id-885' visibility='default' filepath='include/net/netns/ipv6.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='fib6_gc_lock' type-id='type-id-247' visibility='default' filepath='include/net/netns/ipv6.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7264'>
+          <var-decl name='ip6_rt_gc_expire' type-id='type-id-5' visibility='default' filepath='include/net/netns/ipv6.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='ip6_rt_last_gc' type-id='type-id-16' visibility='default' filepath='include/net/netns/ipv6.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='fib6_rules_require_fldissect' type-id='type-id-5' visibility='default' filepath='include/net/netns/ipv6.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7392'>
+          <var-decl name='fib6_has_custom_rules' type-id='type-id-33' visibility='default' filepath='include/net/netns/ipv6.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='ip6_prohibit_entry' type-id='type-id-2266' visibility='default' filepath='include/net/netns/ipv6.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='ip6_blk_hole_entry' type-id='type-id-2266' visibility='default' filepath='include/net/netns/ipv6.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='fib6_local_tbl' type-id='type-id-2268' visibility='default' filepath='include/net/netns/ipv6.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='fib6_rules_ops' type-id='type-id-2225' visibility='default' filepath='include/net/netns/ipv6.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='icmp_sk' type-id='type-id-2227' visibility='default' filepath='include/net/netns/ipv6.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='ndisc_sk' type-id='type-id-1648' visibility='default' filepath='include/net/netns/ipv6.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='tcp_sk' type-id='type-id-1648' visibility='default' filepath='include/net/netns/ipv6.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='igmp_sk' type-id='type-id-1648' visibility='default' filepath='include/net/netns/ipv6.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='mc_autojoin_sk' type-id='type-id-1648' visibility='default' filepath='include/net/netns/ipv6.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='dev_addr_genid' type-id='type-id-26' visibility='default' filepath='include/net/netns/ipv6.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8032'>
+          <var-decl name='fib6_sernum' type-id='type-id-26' visibility='default' filepath='include/net/netns/ipv6.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='seg6_data' type-id='type-id-2270' visibility='default' filepath='include/net/netns/ipv6.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='notifier_ops' type-id='type-id-2236' visibility='default' filepath='include/net/netns/ipv6.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='ip6mr_notifier_ops' type-id='type-id-2236' visibility='default' filepath='include/net/netns/ipv6.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='ipmr_seq' type-id='type-id-5' visibility='default' filepath='include/net/netns/ipv6.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='ip6addrlbl_table' type-id='type-id-2271' visibility='default' filepath='include/net/netns/ipv6.h' line='108' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_sysctl_ipv6' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/net/netns/ipv6.h' line='14' column='1' id='type-id-2263'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hdr' type-id='type-id-1585' visibility='default' filepath='include/net/netns/ipv6.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='route_hdr' type-id='type-id-1585' visibility='default' filepath='include/net/netns/ipv6.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='icmp_hdr' type-id='type-id-1585' visibility='default' filepath='include/net/netns/ipv6.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='frags_hdr' type-id='type-id-1585' visibility='default' filepath='include/net/netns/ipv6.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='xfrm6_hdr' type-id='type-id-1585' visibility='default' filepath='include/net/netns/ipv6.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='bindv6only' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv6.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='flush_delay' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv6.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ip6_rt_max_size' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv6.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='ip6_rt_gc_min_interval' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv6.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ip6_rt_gc_timeout' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv6.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='ip6_rt_gc_interval' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv6.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ip6_rt_gc_elasticity' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv6.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='ip6_rt_mtu_expires' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv6.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ip6_rt_min_advmss' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv6.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='multipath_hash_policy' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv6.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='flowlabel_consistency' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv6.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='auto_flowlabels' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv6.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='icmpv6_time' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv6.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='icmpv6_echo_ignore_all' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv6.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='anycast_src_echo_reply' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv6.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='ip_nonlocal_bind' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv6.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='fwmark_reflect' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv6.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='idgen_retries' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv6.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='idgen_delay' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv6.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='flowlabel_state_ranges' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv6.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='flowlabel_reflect' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv6.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='max_dst_opts_cnt' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv6.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='max_hbh_opts_cnt' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv6.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='max_dst_opts_len' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv6.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='max_hbh_opts_len' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv6.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='seg6_flowlabel' type-id='type-id-17' visibility='default' filepath='include/net/netns/ipv6.h' line='47' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dst_ops' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/net/dst_ops.h' line='15' column='1' id='type-id-2269'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='type-id-312' visibility='default' filepath='include/net/dst_ops.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='gc_thresh' type-id='type-id-5' visibility='default' filepath='include/net/dst_ops.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='gc' type-id='type-id-2272' visibility='default' filepath='include/net/dst_ops.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='check' type-id='type-id-2273' visibility='default' filepath='include/net/dst_ops.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='default_advmss' type-id='type-id-2274' visibility='default' filepath='include/net/dst_ops.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mtu' type-id='type-id-2274' visibility='default' filepath='include/net/dst_ops.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cow_metrics' type-id='type-id-2275' visibility='default' filepath='include/net/dst_ops.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='destroy' type-id='type-id-2276' visibility='default' filepath='include/net/dst_ops.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ifdown' type-id='type-id-2277' visibility='default' filepath='include/net/dst_ops.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='negative_advice' type-id='type-id-2278' visibility='default' filepath='include/net/dst_ops.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='link_failure' type-id='type-id-1770' visibility='default' filepath='include/net/dst_ops.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='update_pmtu' type-id='type-id-2279' visibility='default' filepath='include/net/dst_ops.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='redirect' type-id='type-id-2280' visibility='default' filepath='include/net/dst_ops.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='local_out' type-id='type-id-2281' visibility='default' filepath='include/net/dst_ops.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='neigh_lookup' type-id='type-id-2282' visibility='default' filepath='include/net/dst_ops.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='confirm_neigh' type-id='type-id-2283' visibility='default' filepath='include/net/dst_ops.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='kmem_cachep' type-id='type-id-538' visibility='default' filepath='include/net/dst_ops.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='pcpuc_entries' type-id='type-id-204' visibility='default' filepath='include/net/dst_ops.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='percpu_counter' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/percpu_counter.h' line='20' column='1' id='type-id-204'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='type-id-36' visibility='default' filepath='include/linux/percpu_counter.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='type-id-1548' visibility='default' filepath='include/linux/percpu_counter.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/percpu_counter.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='counters' type-id='type-id-2284' visibility='default' filepath='include/linux/percpu_counter.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__50' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/netns/ipv6.h' line='104' column='1' id='type-id-2271'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='type-id-186' visibility='default' filepath='include/net/netns/ipv6.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='include/net/netns/ipv6.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='seq' type-id='type-id-7' visibility='default' filepath='include/net/netns/ipv6.h' line='107' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_nf' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/net/netns/netfilter.h' line='11' column='1' id='type-id-1657'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='proc_netfilter' type-id='type-id-262' visibility='default' filepath='include/net/netns/netfilter.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='queue_handler' type-id='type-id-2285' visibility='default' filepath='include/net/netns/netfilter.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nf_loggers' type-id='type-id-1118' visibility='default' filepath='include/net/netns/netfilter.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='nf_log_dir_header' type-id='type-id-1585' visibility='default' filepath='include/net/netns/netfilter.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='hooks_ipv4' type-id='type-id-1155' visibility='default' filepath='include/net/netns/netfilter.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='hooks_ipv6' type-id='type-id-1155' visibility='default' filepath='include/net/netns/netfilter.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='hooks_arp' type-id='type-id-1154' visibility='default' filepath='include/net/netns/netfilter.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='defrag_ipv4' type-id='type-id-33' visibility='default' filepath='include/net/netns/netfilter.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1864'>
+          <var-decl name='defrag_ipv6' type-id='type-id-33' visibility='default' filepath='include/net/netns/netfilter.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_xt' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/net/netns/x_tables.h' line='10' column='1' id='type-id-1658'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tables' type-id='type-id-1141' visibility='default' filepath='include/net/netns/x_tables.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='notrack_deprecated_warning' type-id='type-id-33' visibility='default' filepath='include/net/netns/x_tables.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1672'>
+          <var-decl name='clusterip_deprecated_warning' type-id='type-id-33' visibility='default' filepath='include/net/netns/x_tables.h' line='13' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_ct' size-in-bits='4544' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='93' column='1' id='type-id-1659'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='type-id-26' visibility='default' filepath='include/net/netns/conntrack.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='expect_count' type-id='type-id-5' visibility='default' filepath='include/net/netns/conntrack.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ecache_dwork' type-id='type-id-411' visibility='default' filepath='include/net/netns/conntrack.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='ecache_dwork_pending' type-id='type-id-33' visibility='default' filepath='include/net/netns/conntrack.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='sysctl_header' type-id='type-id-1585' visibility='default' filepath='include/net/netns/conntrack.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='acct_sysctl_header' type-id='type-id-1585' visibility='default' filepath='include/net/netns/conntrack.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='tstamp_sysctl_header' type-id='type-id-1585' visibility='default' filepath='include/net/netns/conntrack.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='event_sysctl_header' type-id='type-id-1585' visibility='default' filepath='include/net/netns/conntrack.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='helper_sysctl_header' type-id='type-id-1585' visibility='default' filepath='include/net/netns/conntrack.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='sysctl_log_invalid' type-id='type-id-5' visibility='default' filepath='include/net/netns/conntrack.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='sysctl_events' type-id='type-id-17' visibility='default' filepath='include/net/netns/conntrack.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='sysctl_acct' type-id='type-id-17' visibility='default' filepath='include/net/netns/conntrack.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='sysctl_auto_assign_helper' type-id='type-id-17' visibility='default' filepath='include/net/netns/conntrack.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='auto_assign_helper_warned' type-id='type-id-33' visibility='default' filepath='include/net/netns/conntrack.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='sysctl_tstamp' type-id='type-id-17' visibility='default' filepath='include/net/netns/conntrack.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='sysctl_checksum' type-id='type-id-17' visibility='default' filepath='include/net/netns/conntrack.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='pcpu_lists' type-id='type-id-2286' visibility='default' filepath='include/net/netns/conntrack.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='stat' type-id='type-id-2287' visibility='default' filepath='include/net/netns/conntrack.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='nf_conntrack_event_cb' type-id='type-id-2288' visibility='default' filepath='include/net/netns/conntrack.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='nf_expect_event_cb' type-id='type-id-2289' visibility='default' filepath='include/net/netns/conntrack.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='nf_ct_proto' type-id='type-id-2290' visibility='default' filepath='include/net/netns/conntrack.h' line='119' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='delayed_work' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/workqueue.h' line='115' column='1' id='type-id-411'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='work' type-id='type-id-255' visibility='default' filepath='include/linux/workqueue.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='timer' type-id='type-id-417' visibility='default' filepath='include/linux/workqueue.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='wq' type-id='type-id-654' visibility='default' filepath='include/linux/workqueue.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='cpu' type-id='type-id-17' visibility='default' filepath='include/linux/workqueue.h' line='121' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ct_pcpu' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='87' column='1' id='type-id-2291'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='include/net/netns/conntrack.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unconfirmed' type-id='type-id-2292' visibility='default' filepath='include/net/netns/conntrack.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dying' type-id='type-id-2292' visibility='default' filepath='include/net/netns/conntrack.h' line='90' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hlist_nulls_head' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/list_nulls.h' line='21' column='1' id='type-id-2292'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='first' type-id='type-id-2293' visibility='default' filepath='include/linux/list_nulls.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hlist_nulls_node' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/list_nulls.h' line='25' column='1' id='type-id-2294'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='type-id-2293' visibility='default' filepath='include/linux/list_nulls.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pprev' type-id='type-id-2295' visibility='default' filepath='include/linux/list_nulls.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ip_conntrack_stat' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='7' column='1' id='type-id-2296'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='found' type-id='type-id-5' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='8' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='invalid' type-id='type-id-5' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ignore' type-id='type-id-5' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='insert' type-id='type-id-5' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='insert_failed' type-id='type-id-5' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='drop' type-id='type-id-5' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='early_drop' type-id='type-id-5' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='error' type-id='type-id-5' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='expect_new' type-id='type-id-5' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='expect_create' type-id='type-id-5' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='expect_delete' type-id='type-id-5' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='search_restart' type-id='type-id-5' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='19' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_ip_net' size-in-bits='2880' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='73' column='1' id='type-id-2290'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='generic' type-id='type-id-2297' visibility='default' filepath='include/net/netns/conntrack.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tcp' type-id='type-id-2298' visibility='default' filepath='include/net/netns/conntrack.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='udp' type-id='type-id-2299' visibility='default' filepath='include/net/netns/conntrack.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='icmp' type-id='type-id-2300' visibility='default' filepath='include/net/netns/conntrack.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='icmpv6' type-id='type-id-2300' visibility='default' filepath='include/net/netns/conntrack.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='dccp' type-id='type-id-2301' visibility='default' filepath='include/net/netns/conntrack.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='sctp' type-id='type-id-2302' visibility='default' filepath='include/net/netns/conntrack.h' line='83' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_generic_net' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='29' column='1' id='type-id-2297'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pn' type-id='type-id-2303' visibility='default' filepath='include/net/netns/conntrack.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='timeout' type-id='type-id-5' visibility='default' filepath='include/net/netns/conntrack.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_proto_net' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='21' column='1' id='type-id-2303'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ctl_table_header' type-id='type-id-1585' visibility='default' filepath='include/net/netns/conntrack.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ctl_table' type-id='type-id-1596' visibility='default' filepath='include/net/netns/conntrack.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='users' type-id='type-id-5' visibility='default' filepath='include/net/netns/conntrack.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_tcp_net' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='34' column='1' id='type-id-2298'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pn' type-id='type-id-2303' visibility='default' filepath='include/net/netns/conntrack.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='timeouts' type-id='type-id-1192' visibility='default' filepath='include/net/netns/conntrack.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='tcp_loose' type-id='type-id-5' visibility='default' filepath='include/net/netns/conntrack.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='tcp_be_liberal' type-id='type-id-5' visibility='default' filepath='include/net/netns/conntrack.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='tcp_max_retrans' type-id='type-id-5' visibility='default' filepath='include/net/netns/conntrack.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_udp_net' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='48' column='1' id='type-id-2299'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pn' type-id='type-id-2303' visibility='default' filepath='include/net/netns/conntrack.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='timeouts' type-id='type-id-488' visibility='default' filepath='include/net/netns/conntrack.h' line='50' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_icmp_net' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='53' column='1' id='type-id-2300'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pn' type-id='type-id-2303' visibility='default' filepath='include/net/netns/conntrack.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='timeout' type-id='type-id-5' visibility='default' filepath='include/net/netns/conntrack.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_dccp_net' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='59' column='1' id='type-id-2301'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pn' type-id='type-id-2303' visibility='default' filepath='include/net/netns/conntrack.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dccp_loose' type-id='type-id-17' visibility='default' filepath='include/net/netns/conntrack.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='dccp_timeout' type-id='type-id-1190' visibility='default' filepath='include/net/netns/conntrack.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_sctp_net' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='67' column='1' id='type-id-2302'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pn' type-id='type-id-2303' visibility='default' filepath='include/net/netns/conntrack.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='timeouts' type-id='type-id-1190' visibility='default' filepath='include/net/netns/conntrack.h' line='69' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_nf_frag' size-in-bits='2560' is-struct='yes' visibility='default' filepath='include/net/netns/ipv6.h' line='112' column='1' id='type-id-1660'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='frags' type-id='type-id-2229' visibility='default' filepath='include/net/netns/ipv6.h' line='113' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_xfrm' size-in-bits='6656' is-struct='yes' visibility='default' filepath='include/net/netns/xfrm.h' line='31' column='1' id='type-id-1663'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state_all' type-id='type-id-20' visibility='default' filepath='include/net/netns/xfrm.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='state_bydst' type-id='type-id-746' visibility='default' filepath='include/net/netns/xfrm.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='state_bysrc' type-id='type-id-746' visibility='default' filepath='include/net/netns/xfrm.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='state_byspi' type-id='type-id-746' visibility='default' filepath='include/net/netns/xfrm.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='state_hmask' type-id='type-id-5' visibility='default' filepath='include/net/netns/xfrm.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='state_num' type-id='type-id-5' visibility='default' filepath='include/net/netns/xfrm.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='state_hash_work' type-id='type-id-255' visibility='default' filepath='include/net/netns/xfrm.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='policy_all' type-id='type-id-20' visibility='default' filepath='include/net/netns/xfrm.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='policy_byidx' type-id='type-id-746' visibility='default' filepath='include/net/netns/xfrm.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='policy_idx_hmask' type-id='type-id-5' visibility='default' filepath='include/net/netns/xfrm.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='policy_inexact' type-id='type-id-1124' visibility='default' filepath='include/net/netns/xfrm.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='policy_bydst' type-id='type-id-1215' visibility='default' filepath='include/net/netns/xfrm.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='policy_count' type-id='type-id-1194' visibility='default' filepath='include/net/netns/xfrm.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='policy_hash_work' type-id='type-id-255' visibility='default' filepath='include/net/netns/xfrm.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='policy_hthresh' type-id='type-id-2304' visibility='default' filepath='include/net/netns/xfrm.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='nlsk' type-id='type-id-1648' visibility='default' filepath='include/net/netns/xfrm.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='nlsk_stash' type-id='type-id-1648' visibility='default' filepath='include/net/netns/xfrm.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='sysctl_aevent_etime' type-id='type-id-7' visibility='default' filepath='include/net/netns/xfrm.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2464'>
+          <var-decl name='sysctl_aevent_rseqth' type-id='type-id-7' visibility='default' filepath='include/net/netns/xfrm.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='sysctl_larval_drop' type-id='type-id-17' visibility='default' filepath='include/net/netns/xfrm.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2528'>
+          <var-decl name='sysctl_acq_expires' type-id='type-id-7' visibility='default' filepath='include/net/netns/xfrm.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='sysctl_hdr' type-id='type-id-1585' visibility='default' filepath='include/net/netns/xfrm.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='xfrm4_dst_ops' type-id='type-id-2269' visibility='default' filepath='include/net/netns/xfrm.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='xfrm6_dst_ops' type-id='type-id-2269' visibility='default' filepath='include/net/netns/xfrm.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='xfrm_state_lock' type-id='type-id-247' visibility='default' filepath='include/net/netns/xfrm.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6176'>
+          <var-decl name='xfrm_policy_lock' type-id='type-id-247' visibility='default' filepath='include/net/netns/xfrm.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='xfrm_cfg_mutex' type-id='type-id-245' visibility='default' filepath='include/net/netns/xfrm.h' line='75' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_policy_hash' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/netns/xfrm.h' line='13' column='1' id='type-id-1214'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='table' type-id='type-id-746' visibility='default' filepath='include/net/netns/xfrm.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hmask' type-id='type-id-5' visibility='default' filepath='include/net/netns/xfrm.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dbits4' type-id='type-id-214' visibility='default' filepath='include/net/netns/xfrm.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='sbits4' type-id='type-id-214' visibility='default' filepath='include/net/netns/xfrm.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='dbits6' type-id='type-id-214' visibility='default' filepath='include/net/netns/xfrm.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='sbits6' type-id='type-id-214' visibility='default' filepath='include/net/netns/xfrm.h' line='19' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_policy_hthresh' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/netns/xfrm.h' line='22' column='1' id='type-id-2304'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='work' type-id='type-id-255' visibility='default' filepath='include/net/netns/xfrm.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock' type-id='type-id-1919' visibility='default' filepath='include/net/netns/xfrm.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='lbits4' type-id='type-id-214' visibility='default' filepath='include/net/netns/xfrm.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='328'>
+          <var-decl name='rbits4' type-id='type-id-214' visibility='default' filepath='include/net/netns/xfrm.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='lbits6' type-id='type-id-214' visibility='default' filepath='include/net/netns/xfrm.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='344'>
+          <var-decl name='rbits6' type-id='type-id-214' visibility='default' filepath='include/net/netns/xfrm.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_can' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/net/netns/can.h' line='15' column='1' id='type-id-1664'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='proc_dir' type-id='type-id-262' visibility='default' filepath='include/net/netns/can.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pde_version' type-id='type-id-262' visibility='default' filepath='include/net/netns/can.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pde_stats' type-id='type-id-262' visibility='default' filepath='include/net/netns/can.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pde_reset_stats' type-id='type-id-262' visibility='default' filepath='include/net/netns/can.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pde_rcvlist_all' type-id='type-id-262' visibility='default' filepath='include/net/netns/can.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pde_rcvlist_fil' type-id='type-id-262' visibility='default' filepath='include/net/netns/can.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pde_rcvlist_inv' type-id='type-id-262' visibility='default' filepath='include/net/netns/can.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pde_rcvlist_sff' type-id='type-id-262' visibility='default' filepath='include/net/netns/can.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pde_rcvlist_eff' type-id='type-id-262' visibility='default' filepath='include/net/netns/can.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pde_rcvlist_err' type-id='type-id-262' visibility='default' filepath='include/net/netns/can.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bcmproc_dir' type-id='type-id-262' visibility='default' filepath='include/net/netns/can.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='can_rx_alldev_list' type-id='type-id-2305' visibility='default' filepath='include/net/netns/can.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='can_rcvlists_lock' type-id='type-id-247' visibility='default' filepath='include/net/netns/can.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='can_stattimer' type-id='type-id-417' visibility='default' filepath='include/net/netns/can.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='can_stats' type-id='type-id-2306' visibility='default' filepath='include/net/netns/can.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='can_pstats' type-id='type-id-2307' visibility='default' filepath='include/net/netns/can.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='cgw_list' type-id='type-id-186' visibility='default' filepath='include/net/netns/can.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_namespace' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/cgroup.h' line='856' column='1' id='type-id-2308'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='type-id-421' visibility='default' filepath='include/linux/cgroup.h' line='857' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ns' type-id='type-id-905' visibility='default' filepath='include/linux/cgroup.h' line='858' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='user_ns' type-id='type-id-917' visibility='default' filepath='include/linux/cgroup.h' line='859' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ucounts' type-id='type-id-1580' visibility='default' filepath='include/linux/cgroup.h' line='860' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='root_cset' type-id='type-id-1531' visibility='default' filepath='include/linux/cgroup.h' line='861' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='css_set' size-in-bits='3264' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='178' column='1' id='type-id-2309'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='subsys' type-id='type-id-961' visibility='default' filepath='include/linux/cgroup-defs.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='refcount' type-id='type-id-421' visibility='default' filepath='include/linux/cgroup-defs.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dom_cset' type-id='type-id-1531' visibility='default' filepath='include/linux/cgroup-defs.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='dfl_cgrp' type-id='type-id-2310' visibility='default' filepath='include/linux/cgroup-defs.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='nr_tasks' type-id='type-id-17' visibility='default' filepath='include/linux/cgroup-defs.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='tasks' type-id='type-id-20' visibility='default' filepath='include/linux/cgroup-defs.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='mg_tasks' type-id='type-id-20' visibility='default' filepath='include/linux/cgroup-defs.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='dying_tasks' type-id='type-id-20' visibility='default' filepath='include/linux/cgroup-defs.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='task_iters' type-id='type-id-20' visibility='default' filepath='include/linux/cgroup-defs.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='e_cset_node' type-id='type-id-1143' visibility='default' filepath='include/linux/cgroup-defs.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='threaded_csets' type-id='type-id-20' visibility='default' filepath='include/linux/cgroup-defs.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='threaded_csets_node' type-id='type-id-20' visibility='default' filepath='include/linux/cgroup-defs.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='hlist' type-id='type-id-520' visibility='default' filepath='include/linux/cgroup-defs.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='cgrp_links' type-id='type-id-20' visibility='default' filepath='include/linux/cgroup-defs.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='mg_preload_node' type-id='type-id-20' visibility='default' filepath='include/linux/cgroup-defs.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='mg_node' type-id='type-id-20' visibility='default' filepath='include/linux/cgroup-defs.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='mg_src_cgrp' type-id='type-id-2310' visibility='default' filepath='include/linux/cgroup-defs.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='mg_dst_cgrp' type-id='type-id-2310' visibility='default' filepath='include/linux/cgroup-defs.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='mg_dst_cset' type-id='type-id-1531' visibility='default' filepath='include/linux/cgroup-defs.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='dead' type-id='type-id-33' visibility='default' filepath='include/linux/cgroup-defs.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='callback_head' type-id='type-id-385' visibility='default' filepath='include/linux/cgroup-defs.h' line='264' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_subsys_state' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='121' column='1' id='type-id-424'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cgroup' type-id='type-id-2310' visibility='default' filepath='include/linux/cgroup-defs.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ss' type-id='type-id-2311' visibility='default' filepath='include/linux/cgroup-defs.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='refcnt' type-id='type-id-391' visibility='default' filepath='include/linux/cgroup-defs.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='sibling' type-id='type-id-20' visibility='default' filepath='include/linux/cgroup-defs.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='children' type-id='type-id-20' visibility='default' filepath='include/linux/cgroup-defs.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='rstat_css_node' type-id='type-id-20' visibility='default' filepath='include/linux/cgroup-defs.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='id' type-id='type-id-17' visibility='default' filepath='include/linux/cgroup-defs.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='flags' type-id='type-id-5' visibility='default' filepath='include/linux/cgroup-defs.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='serial_nr' type-id='type-id-40' visibility='default' filepath='include/linux/cgroup-defs.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='online_cnt' type-id='type-id-26' visibility='default' filepath='include/linux/cgroup-defs.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='destroy_work' type-id='type-id-255' visibility='default' filepath='include/linux/cgroup-defs.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='destroy_rwork' type-id='type-id-392' visibility='default' filepath='include/linux/cgroup-defs.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='parent' type-id='type-id-365' visibility='default' filepath='include/linux/cgroup-defs.h' line='168' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup' size-in-bits='16384' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='320' column='1' id='type-id-2312'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='self' type-id='type-id-424' visibility='default' filepath='include/linux/cgroup-defs.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='include/linux/cgroup-defs.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='id' type-id='type-id-17' visibility='default' filepath='include/linux/cgroup-defs.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2016'>
+          <var-decl name='level' type-id='type-id-17' visibility='default' filepath='include/linux/cgroup-defs.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='max_depth' type-id='type-id-17' visibility='default' filepath='include/linux/cgroup-defs.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='nr_descendants' type-id='type-id-17' visibility='default' filepath='include/linux/cgroup-defs.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='nr_dying_descendants' type-id='type-id-17' visibility='default' filepath='include/linux/cgroup-defs.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='max_descendants' type-id='type-id-17' visibility='default' filepath='include/linux/cgroup-defs.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='nr_populated_csets' type-id='type-id-17' visibility='default' filepath='include/linux/cgroup-defs.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2208'>
+          <var-decl name='nr_populated_domain_children' type-id='type-id-17' visibility='default' filepath='include/linux/cgroup-defs.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='nr_populated_threaded_children' type-id='type-id-17' visibility='default' filepath='include/linux/cgroup-defs.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2272'>
+          <var-decl name='nr_threaded_children' type-id='type-id-17' visibility='default' filepath='include/linux/cgroup-defs.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='kn' type-id='type-id-1397' visibility='default' filepath='include/linux/cgroup-defs.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='procs_file' type-id='type-id-428' visibility='default' filepath='include/linux/cgroup-defs.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='events_file' type-id='type-id-428' visibility='default' filepath='include/linux/cgroup-defs.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='subtree_control' type-id='type-id-688' visibility='default' filepath='include/linux/cgroup-defs.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3280'>
+          <var-decl name='subtree_ss_mask' type-id='type-id-688' visibility='default' filepath='include/linux/cgroup-defs.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3296'>
+          <var-decl name='old_subtree_control' type-id='type-id-688' visibility='default' filepath='include/linux/cgroup-defs.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3312'>
+          <var-decl name='old_subtree_ss_mask' type-id='type-id-688' visibility='default' filepath='include/linux/cgroup-defs.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='subsys' type-id='type-id-961' visibility='default' filepath='include/linux/cgroup-defs.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='root' type-id='type-id-2313' visibility='default' filepath='include/linux/cgroup-defs.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='cset_links' type-id='type-id-20' visibility='default' filepath='include/linux/cgroup-defs.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='e_csets' type-id='type-id-1143' visibility='default' filepath='include/linux/cgroup-defs.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='dom_cgrp' type-id='type-id-2310' visibility='default' filepath='include/linux/cgroup-defs.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='old_dom_cgrp' type-id='type-id-2310' visibility='default' filepath='include/linux/cgroup-defs.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='rstat_cpu' type-id='type-id-2314' visibility='default' filepath='include/linux/cgroup-defs.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='rstat_css_list' type-id='type-id-20' visibility='default' filepath='include/linux/cgroup-defs.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='pending_bstat' type-id='type-id-2315' visibility='default' filepath='include/linux/cgroup-defs.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='bstat' type-id='type-id-2315' visibility='default' filepath='include/linux/cgroup-defs.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='prev_cputime' type-id='type-id-1511' visibility='default' filepath='include/linux/cgroup-defs.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='pidlists' type-id='type-id-20' visibility='default' filepath='include/linux/cgroup-defs.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='pidlist_mutex' type-id='type-id-245' visibility='default' filepath='include/linux/cgroup-defs.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='offline_waitq' type-id='type-id-225' visibility='default' filepath='include/linux/cgroup-defs.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='release_agent_work' type-id='type-id-255' visibility='default' filepath='include/linux/cgroup-defs.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='psi' type-id='type-id-2316' visibility='default' filepath='include/linux/cgroup-defs.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11520'>
+          <var-decl name='bpf' type-id='type-id-2317' visibility='default' filepath='include/linux/cgroup-defs.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16320'>
+          <var-decl name='congestion_count' type-id='type-id-26' visibility='default' filepath='include/linux/cgroup-defs.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16352'>
+          <var-decl name='ancestor_ids' type-id='type-id-1136' visibility='default' filepath='include/linux/cgroup-defs.h' line='457' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_file' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='107' column='1' id='type-id-428'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kn' type-id='type-id-1397' visibility='default' filepath='include/linux/cgroup-defs.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='notified_at' type-id='type-id-16' visibility='default' filepath='include/linux/cgroup-defs.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='notify_timer' type-id='type-id-417' visibility='default' filepath='include/linux/cgroup-defs.h' line='111' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_root' size-in-bits='50240' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='465' column='1' id='type-id-2318'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kf_root' type-id='type-id-1432' visibility='default' filepath='include/linux/cgroup-defs.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='subsys_mask' type-id='type-id-5' visibility='default' filepath='include/linux/cgroup-defs.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='hierarchy_id' type-id='type-id-17' visibility='default' filepath='include/linux/cgroup-defs.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cgrp' type-id='type-id-2312' visibility='default' filepath='include/linux/cgroup-defs.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16512'>
+          <var-decl name='cgrp_ancestor_id_storage' type-id='type-id-17' visibility='default' filepath='include/linux/cgroup-defs.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16544'>
+          <var-decl name='nr_cgrps' type-id='type-id-26' visibility='default' filepath='include/linux/cgroup-defs.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16576'>
+          <var-decl name='root_list' type-id='type-id-20' visibility='default' filepath='include/linux/cgroup-defs.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16704'>
+          <var-decl name='flags' type-id='type-id-5' visibility='default' filepath='include/linux/cgroup-defs.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16768'>
+          <var-decl name='cgroup_idr' type-id='type-id-1434' visibility='default' filepath='include/linux/cgroup-defs.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16960'>
+          <var-decl name='release_agent_path' type-id='type-id-971' visibility='default' filepath='include/linux/cgroup-defs.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='49728'>
+          <var-decl name='name' type-id='type-id-250' visibility='default' filepath='include/linux/cgroup-defs.h' line='496' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_rstat_cpu' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='291' column='1' id='type-id-2319'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bsync' type-id='type-id-2003' visibility='default' filepath='include/linux/cgroup-defs.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bstat' type-id='type-id-2315' visibility='default' filepath='include/linux/cgroup-defs.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='last_bstat' type-id='type-id-2315' visibility='default' filepath='include/linux/cgroup-defs.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='updated_children' type-id='type-id-2310' visibility='default' filepath='include/linux/cgroup-defs.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='updated_next' type-id='type-id-2310' visibility='default' filepath='include/linux/cgroup-defs.h' line='317' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_base_stat' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='267' column='1' id='type-id-2315'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cputime' type-id='type-id-1512' visibility='default' filepath='include/linux/cgroup-defs.h' line='268' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='psi_group' size-in-bits='4928' is-struct='yes' visibility='default' filepath='include/linux/psi_types.h' line='128' column='1' id='type-id-2316'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='avgs_lock' type-id='type-id-245' visibility='default' filepath='include/linux/psi_types.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pcpu' type-id='type-id-2320' visibility='default' filepath='include/linux/psi_types.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='avg_total' type-id='type-id-498' visibility='default' filepath='include/linux/psi_types.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='avg_last_update' type-id='type-id-40' visibility='default' filepath='include/linux/psi_types.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='avg_next_update' type-id='type-id-40' visibility='default' filepath='include/linux/psi_types.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='avgs_work' type-id='type-id-411' visibility='default' filepath='include/linux/psi_types.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='total' type-id='type-id-1179' visibility='default' filepath='include/linux/psi_types.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='avg' type-id='type-id-1204' visibility='default' filepath='include/linux/psi_types.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='poll_scheduled' type-id='type-id-26' visibility='default' filepath='include/linux/psi_types.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='poll_kworker' type-id='type-id-2321' visibility='default' filepath='include/linux/psi_types.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='poll_work' type-id='type-id-2322' visibility='default' filepath='include/linux/psi_types.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='trigger_lock' type-id='type-id-245' visibility='default' filepath='include/linux/psi_types.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='triggers' type-id='type-id-20' visibility='default' filepath='include/linux/psi_types.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='nr_triggers' type-id='type-id-1177' visibility='default' filepath='include/linux/psi_types.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4384'>
+          <var-decl name='poll_states' type-id='type-id-7' visibility='default' filepath='include/linux/psi_types.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='poll_min_period' type-id='type-id-40' visibility='default' filepath='include/linux/psi_types.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='polling_total' type-id='type-id-498' visibility='default' filepath='include/linux/psi_types.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='polling_next_update' type-id='type-id-40' visibility='default' filepath='include/linux/psi_types.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='polling_until' type-id='type-id-40' visibility='default' filepath='include/linux/psi_types.h' line='164' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='psi_group_cpu' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/psi_types.h' line='56' column='1' id='type-id-2323'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='seq' type-id='type-id-387' visibility='default' filepath='include/linux/psi_types.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tasks' type-id='type-id-1193' visibility='default' filepath='include/linux/psi_types.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='state_mask' type-id='type-id-7' visibility='default' filepath='include/linux/psi_types.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='times' type-id='type-id-1178' visibility='default' filepath='include/linux/psi_types.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='state_start' type-id='type-id-40' visibility='default' filepath='include/linux/psi_types.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='times_prev' type-id='type-id-1176' visibility='default' filepath='include/linux/psi_types.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kthread_worker' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/kthread.h' line='85' column='1' id='type-id-2324'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='type-id-5' visibility='default' filepath='include/linux/kthread.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='include/linux/kthread.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='work_list' type-id='type-id-20' visibility='default' filepath='include/linux/kthread.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='delayed_work_list' type-id='type-id-20' visibility='default' filepath='include/linux/kthread.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='task' type-id='type-id-431' visibility='default' filepath='include/linux/kthread.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='current_work' type-id='type-id-2325' visibility='default' filepath='include/linux/kthread.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kthread_work' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/kthread.h' line='94' column='1' id='type-id-2326'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='type-id-20' visibility='default' filepath='include/linux/kthread.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='func' type-id='type-id-2327' visibility='default' filepath='include/linux/kthread.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='worker' type-id='type-id-2321' visibility='default' filepath='include/linux/kthread.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='canceling' type-id='type-id-17' visibility='default' filepath='include/linux/kthread.h' line='99' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='kthread_work_func_t' type-id='type-id-2328' filepath='include/linux/kthread.h' line='78' column='1' id='type-id-2327'/>
+      <class-decl name='kthread_delayed_work' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/kthread.h' line='102' column='1' id='type-id-2322'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='work' type-id='type-id-2326' visibility='default' filepath='include/linux/kthread.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='timer' type-id='type-id-417' visibility='default' filepath='include/linux/kthread.h' line='104' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_bpf' size-in-bits='4800' is-struct='yes' visibility='default' filepath='include/linux/bpf-cgroup.h' line='51' column='1' id='type-id-2317'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='effective' type-id='type-id-957' visibility='default' filepath='include/linux/bpf-cgroup.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='progs' type-id='type-id-1142' visibility='default' filepath='include/linux/bpf-cgroup.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='flags' type-id='type-id-1175' visibility='default' filepath='include/linux/bpf-cgroup.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='inactive' type-id='type-id-747' visibility='default' filepath='include/linux/bpf-cgroup.h' line='64' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_prog_array' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='364' column='1' id='type-id-2329'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/linux/bpf.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='items' type-id='type-id-960' visibility='default' filepath='include/linux/bpf.h' line='366' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_prog_array_item' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='359' column='1' id='type-id-959'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prog' type-id='type-id-1230' visibility='default' filepath='include/linux/bpf.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cgroup_storage' type-id='type-id-2330' visibility='default' filepath='include/linux/bpf.h' line='361' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_cgroup_storage' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/bpf-cgroup.h' line='34' column='1' id='type-id-2331'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buf' type-id='type-id-2332' visibility='default' filepath='include/linux/bpf-cgroup.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='map' type-id='type-id-2333' visibility='default' filepath='include/linux/bpf-cgroup.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='key' type-id='type-id-2334' visibility='default' filepath='include/linux/bpf-cgroup.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/bpf-cgroup.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='node' type-id='type-id-422' visibility='default' filepath='include/linux/bpf-cgroup.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/linux/bpf-cgroup.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_storage_buffer' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/bpf-cgroup.h' line='29' column='1' id='type-id-2335'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/linux/bpf-cgroup.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='type-id-440' visibility='default' filepath='include/linux/bpf-cgroup.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_cgroup_storage_key' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='78' column='1' id='type-id-2334'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cgroup_inode_id' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/bpf.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='attach_type' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/bpf.h' line='80' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_subsys' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='595' column='1' id='type-id-2336'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='css_alloc' type-id='type-id-2337' visibility='default' filepath='include/linux/cgroup-defs.h' line='596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='css_online' type-id='type-id-2338' visibility='default' filepath='include/linux/cgroup-defs.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='css_offline' type-id='type-id-2339' visibility='default' filepath='include/linux/cgroup-defs.h' line='598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='css_released' type-id='type-id-2339' visibility='default' filepath='include/linux/cgroup-defs.h' line='599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='css_free' type-id='type-id-2339' visibility='default' filepath='include/linux/cgroup-defs.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='css_reset' type-id='type-id-2339' visibility='default' filepath='include/linux/cgroup-defs.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='css_rstat_flush' type-id='type-id-2340' visibility='default' filepath='include/linux/cgroup-defs.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='css_extra_stat_show' type-id='type-id-2341' visibility='default' filepath='include/linux/cgroup-defs.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='can_attach' type-id='type-id-2342' visibility='default' filepath='include/linux/cgroup-defs.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='cancel_attach' type-id='type-id-2343' visibility='default' filepath='include/linux/cgroup-defs.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='attach' type-id='type-id-2343' visibility='default' filepath='include/linux/cgroup-defs.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='post_attach' type-id='type-id-1392' visibility='default' filepath='include/linux/cgroup-defs.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='can_fork' type-id='type-id-2344' visibility='default' filepath='include/linux/cgroup-defs.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='cancel_fork' type-id='type-id-2345' visibility='default' filepath='include/linux/cgroup-defs.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='fork' type-id='type-id-2345' visibility='default' filepath='include/linux/cgroup-defs.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='exit' type-id='type-id-2345' visibility='default' filepath='include/linux/cgroup-defs.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='release' type-id='type-id-2345' visibility='default' filepath='include/linux/cgroup-defs.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='bind' type-id='type-id-2339' visibility='default' filepath='include/linux/cgroup-defs.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='early_init' type-id='type-id-33' visibility='default' filepath='include/linux/cgroup-defs.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='implicit_on_dfl' type-id='type-id-33' visibility='default' filepath='include/linux/cgroup-defs.h' line='630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='threaded' type-id='type-id-33' visibility='default' filepath='include/linux/cgroup-defs.h' line='642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='broken_hierarchy' type-id='type-id-33' visibility='default' filepath='include/linux/cgroup-defs.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='warned_broken_hierarchy' type-id='type-id-33' visibility='default' filepath='include/linux/cgroup-defs.h' line='657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='id' type-id='type-id-17' visibility='default' filepath='include/linux/cgroup-defs.h' line='660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/cgroup-defs.h' line='661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='legacy_name' type-id='type-id-4' visibility='default' filepath='include/linux/cgroup-defs.h' line='664' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='root' type-id='type-id-2313' visibility='default' filepath='include/linux/cgroup-defs.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='css_idr' type-id='type-id-1434' visibility='default' filepath='include/linux/cgroup-defs.h' line='670' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='cfts' type-id='type-id-20' visibility='default' filepath='include/linux/cgroup-defs.h' line='676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='dfl_cftypes' type-id='type-id-2346' visibility='default' filepath='include/linux/cgroup-defs.h' line='682' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='legacy_cftypes' type-id='type-id-2346' visibility='default' filepath='include/linux/cgroup-defs.h' line='683' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='depends_on' type-id='type-id-5' visibility='default' filepath='include/linux/cgroup-defs.h' line='692' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cftype' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='506' column='1' id='type-id-2347'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-250' visibility='default' filepath='include/linux/cgroup-defs.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='private' type-id='type-id-16' visibility='default' filepath='include/linux/cgroup-defs.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='max_write_len' type-id='type-id-84' visibility='default' filepath='include/linux/cgroup-defs.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='flags' type-id='type-id-5' visibility='default' filepath='include/linux/cgroup-defs.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='file_offset' type-id='type-id-5' visibility='default' filepath='include/linux/cgroup-defs.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='ss' type-id='type-id-2311' visibility='default' filepath='include/linux/cgroup-defs.h' line='536' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='node' type-id='type-id-20' visibility='default' filepath='include/linux/cgroup-defs.h' line='537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='kf_ops' type-id='type-id-2348' visibility='default' filepath='include/linux/cgroup-defs.h' line='538' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='open' type-id='type-id-1460' visibility='default' filepath='include/linux/cgroup-defs.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='release' type-id='type-id-1461' visibility='default' filepath='include/linux/cgroup-defs.h' line='541' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='read_u64' type-id='type-id-2349' visibility='default' filepath='include/linux/cgroup-defs.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='read_s64' type-id='type-id-2350' visibility='default' filepath='include/linux/cgroup-defs.h' line='551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='seq_show' type-id='type-id-311' visibility='default' filepath='include/linux/cgroup-defs.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='seq_start' type-id='type-id-1453' visibility='default' filepath='include/linux/cgroup-defs.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='seq_next' type-id='type-id-1455' visibility='default' filepath='include/linux/cgroup-defs.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='seq_stop' type-id='type-id-1454' visibility='default' filepath='include/linux/cgroup-defs.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='write_u64' type-id='type-id-2351' visibility='default' filepath='include/linux/cgroup-defs.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='write_s64' type-id='type-id-2352' visibility='default' filepath='include/linux/cgroup-defs.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='write' type-id='type-id-1462' visibility='default' filepath='include/linux/cgroup-defs.h' line='580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='poll' type-id='type-id-1463' visibility='default' filepath='include/linux/cgroup-defs.h' line='583' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__poll_t' type-id='type-id-5' filepath='include/uapi/linux/types.h' line='52' column='1' id='type-id-880'/>
+      <class-decl name='rcu_work' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/workqueue.h' line='124' column='1' id='type-id-392'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='work' type-id='type-id-255' visibility='default' filepath='include/linux/workqueue.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/linux/workqueue.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='wq' type-id='type-id-654' visibility='default' filepath='include/linux/workqueue.h' line='129' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='signal_struct' size-in-bits='8064' is-struct='yes' visibility='default' filepath='include/linux/sched/signal.h' line='84' column='1' id='type-id-2353'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sigcnt' type-id='type-id-26' visibility='default' filepath='include/linux/sched/signal.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='live' type-id='type-id-26' visibility='default' filepath='include/linux/sched/signal.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_threads' type-id='type-id-17' visibility='default' filepath='include/linux/sched/signal.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='thread_head' type-id='type-id-20' visibility='default' filepath='include/linux/sched/signal.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='wait_chldexit' type-id='type-id-225' visibility='default' filepath='include/linux/sched/signal.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='curr_target' type-id='type-id-431' visibility='default' filepath='include/linux/sched/signal.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='shared_pending' type-id='type-id-1519' visibility='default' filepath='include/linux/sched/signal.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='multiprocess' type-id='type-id-186' visibility='default' filepath='include/linux/sched/signal.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='group_exit_code' type-id='type-id-17' visibility='default' filepath='include/linux/sched/signal.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='notify_count' type-id='type-id-17' visibility='default' filepath='include/linux/sched/signal.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='group_exit_task' type-id='type-id-431' visibility='default' filepath='include/linux/sched/signal.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='group_stop_count' type-id='type-id-17' visibility='default' filepath='include/linux/sched/signal.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='flags' type-id='type-id-5' visibility='default' filepath='include/linux/sched/signal.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='is_child_subreaper' type-id='type-id-5' visibility='default' filepath='include/linux/sched/signal.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='has_child_subreaper' type-id='type-id-5' visibility='default' filepath='include/linux/sched/signal.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='posix_timer_id' type-id='type-id-17' visibility='default' filepath='include/linux/sched/signal.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='posix_timers' type-id='type-id-20' visibility='default' filepath='include/linux/sched/signal.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='real_timer' type-id='type-id-681' visibility='default' filepath='include/linux/sched/signal.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='it_real_incr' type-id='type-id-682' visibility='default' filepath='include/linux/sched/signal.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='it' type-id='type-id-1122' visibility='default' filepath='include/linux/sched/signal.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='cputimer' type-id='type-id-2354' visibility='default' filepath='include/linux/sched/signal.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='cputime_expires' type-id='type-id-1512' visibility='default' filepath='include/linux/sched/signal.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='cpu_timers' type-id='type-id-457' visibility='default' filepath='include/linux/sched/signal.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='pids' type-id='type-id-1162' visibility='default' filepath='include/linux/sched/signal.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='tty_old_pgrp' type-id='type-id-251' visibility='default' filepath='include/linux/sched/signal.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='leader' type-id='type-id-17' visibility='default' filepath='include/linux/sched/signal.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='tty' type-id='type-id-2355' visibility='default' filepath='include/linux/sched/signal.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='autogroup' type-id='type-id-2356' visibility='default' filepath='include/linux/sched/signal.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='stats_lock' type-id='type-id-1919' visibility='default' filepath='include/linux/sched/signal.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='utime' type-id='type-id-40' visibility='default' filepath='include/linux/sched/signal.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='stime' type-id='type-id-40' visibility='default' filepath='include/linux/sched/signal.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='cutime' type-id='type-id-40' visibility='default' filepath='include/linux/sched/signal.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='cstime' type-id='type-id-40' visibility='default' filepath='include/linux/sched/signal.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='gtime' type-id='type-id-40' visibility='default' filepath='include/linux/sched/signal.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='cgtime' type-id='type-id-40' visibility='default' filepath='include/linux/sched/signal.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='prev_cputime' type-id='type-id-1511' visibility='default' filepath='include/linux/sched/signal.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='nvcsw' type-id='type-id-16' visibility='default' filepath='include/linux/sched/signal.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='nivcsw' type-id='type-id-16' visibility='default' filepath='include/linux/sched/signal.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='cnvcsw' type-id='type-id-16' visibility='default' filepath='include/linux/sched/signal.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='cnivcsw' type-id='type-id-16' visibility='default' filepath='include/linux/sched/signal.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='min_flt' type-id='type-id-16' visibility='default' filepath='include/linux/sched/signal.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='maj_flt' type-id='type-id-16' visibility='default' filepath='include/linux/sched/signal.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='cmin_flt' type-id='type-id-16' visibility='default' filepath='include/linux/sched/signal.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='cmaj_flt' type-id='type-id-16' visibility='default' filepath='include/linux/sched/signal.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='inblock' type-id='type-id-16' visibility='default' filepath='include/linux/sched/signal.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='oublock' type-id='type-id-16' visibility='default' filepath='include/linux/sched/signal.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='cinblock' type-id='type-id-16' visibility='default' filepath='include/linux/sched/signal.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='coublock' type-id='type-id-16' visibility='default' filepath='include/linux/sched/signal.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='maxrss' type-id='type-id-16' visibility='default' filepath='include/linux/sched/signal.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='cmaxrss' type-id='type-id-16' visibility='default' filepath='include/linux/sched/signal.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='ioac' type-id='type-id-1529' visibility='default' filepath='include/linux/sched/signal.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='sum_sched_runtime' type-id='type-id-98' visibility='default' filepath='include/linux/sched/signal.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='rlim' type-id='type-id-1167' visibility='default' filepath='include/linux/sched/signal.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='stats' type-id='type-id-2357' visibility='default' filepath='include/linux/sched/signal.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='audit_tty' type-id='type-id-5' visibility='default' filepath='include/linux/sched/signal.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='tty_audit_buf' type-id='type-id-2358' visibility='default' filepath='include/linux/sched/signal.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='oom_flag_origin' type-id='type-id-33' visibility='default' filepath='include/linux/sched/signal.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7696'>
+          <var-decl name='oom_score_adj' type-id='type-id-261' visibility='default' filepath='include/linux/sched/signal.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7712'>
+          <var-decl name='oom_score_adj_min' type-id='type-id-261' visibility='default' filepath='include/linux/sched/signal.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='oom_mm' type-id='type-id-882' visibility='default' filepath='include/linux/sched/signal.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='cred_guard_mutex' type-id='type-id-245' visibility='default' filepath='include/linux/sched/signal.h' line='232' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sigpending' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/signal_types.h' line='26' column='1' id='type-id-1519'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/signal_types.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='signal' type-id='type-id-1518' visibility='default' filepath='include/linux/signal_types.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='sigset_t' type-id='type-id-2359' filepath='include/uapi/asm-generic/signal.h' line='92' column='1' id='type-id-1518'/>
+      <class-decl name='__anonymous_struct__51' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-1518' visibility='default' filepath='include/uapi/asm-generic/signal.h' line='90' column='1' id='type-id-2359'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sig' type-id='type-id-491' visibility='default' filepath='include/uapi/asm-generic/signal.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpu_itimer' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/sched/signal.h' line='34' column='1' id='type-id-1121'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='expires' type-id='type-id-40' visibility='default' filepath='include/linux/sched/signal.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='incr' type-id='type-id-40' visibility='default' filepath='include/linux/sched/signal.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='thread_group_cputimer' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/sched/signal.h' line='66' column='1' id='type-id-2354'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cputime_atomic' type-id='type-id-2360' visibility='default' filepath='include/linux/sched/signal.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='running' type-id='type-id-33' visibility='default' filepath='include/linux/sched/signal.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='checking_timer' type-id='type-id-33' visibility='default' filepath='include/linux/sched/signal.h' line='69' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='task_cputime_atomic' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/sched/signal.h' line='43' column='1' id='type-id-2360'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='utime' type-id='type-id-113' visibility='default' filepath='include/linux/sched/signal.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='stime' type-id='type-id-113' visibility='default' filepath='include/linux/sched/signal.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sum_exec_runtime' type-id='type-id-113' visibility='default' filepath='include/linux/sched/signal.h' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='task_io_accounting' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/task_io_accounting.h' line='12' column='1' id='type-id-1529'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rchar' type-id='type-id-40' visibility='default' filepath='include/linux/task_io_accounting.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wchar' type-id='type-id-40' visibility='default' filepath='include/linux/task_io_accounting.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='syscr' type-id='type-id-40' visibility='default' filepath='include/linux/task_io_accounting.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='syscw' type-id='type-id-40' visibility='default' filepath='include/linux/task_io_accounting.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='syscfs' type-id='type-id-40' visibility='default' filepath='include/linux/task_io_accounting.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='read_bytes' type-id='type-id-40' visibility='default' filepath='include/linux/task_io_accounting.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='write_bytes' type-id='type-id-40' visibility='default' filepath='include/linux/task_io_accounting.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='cancelled_write_bytes' type-id='type-id-40' visibility='default' filepath='include/linux/task_io_accounting.h' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rlimit' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/resource.h' line='43' column='1' id='type-id-1166'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rlim_cur' type-id='type-id-888' visibility='default' filepath='include/uapi/linux/resource.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rlim_max' type-id='type-id-888' visibility='default' filepath='include/uapi/linux/resource.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='taskstats' size-in-bits='2752' is-struct='yes' visibility='default' filepath='include/uapi/linux/taskstats.h' line='41' column='1' id='type-id-2361'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='version' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/taskstats.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ac_exitcode' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/taskstats.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ac_flag' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/taskstats.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='ac_nice' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/taskstats.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cpu_count' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/taskstats.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cpu_delay_total' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/taskstats.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='blkio_count' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/taskstats.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='blkio_delay_total' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/taskstats.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='swapin_count' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/taskstats.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='swapin_delay_total' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/taskstats.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cpu_run_real_total' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/taskstats.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='cpu_run_virtual_total' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/taskstats.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ac_comm' type-id='type-id-373' visibility='default' filepath='include/uapi/linux/taskstats.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='ac_sched' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/taskstats.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='904'>
+          <var-decl name='ac_pad' type-id='type-id-942' visibility='default' filepath='include/uapi/linux/taskstats.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='ac_uid' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/taskstats.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='ac_gid' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/taskstats.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='ac_pid' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/taskstats.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='ac_ppid' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/taskstats.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='ac_btime' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/taskstats.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ac_etime' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/taskstats.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='ac_utime' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/taskstats.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='ac_stime' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/taskstats.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='ac_minflt' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/taskstats.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='ac_majflt' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/taskstats.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='coremem' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/taskstats.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='virtmem' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/taskstats.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='hiwater_rss' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/taskstats.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='hiwater_vm' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/taskstats.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='read_char' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/taskstats.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='write_char' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/taskstats.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='read_syscalls' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/taskstats.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='write_syscalls' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/taskstats.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='read_bytes' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/taskstats.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='write_bytes' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/taskstats.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='cancelled_write_bytes' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/taskstats.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='nvcsw' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/taskstats.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='nivcsw' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/taskstats.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='ac_utimescaled' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/taskstats.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='ac_stimescaled' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/taskstats.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='cpu_scaled_run_real_total' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/taskstats.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='freepages_count' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/taskstats.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='freepages_delay_total' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/taskstats.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='thrashing_count' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/taskstats.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='thrashing_delay_total' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/taskstats.h' line='170' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sighand_struct' size-in-bits='16704' is-struct='yes' visibility='default' filepath='include/linux/sched/signal.h' line='16' column='1' id='type-id-2362'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='type-id-26' visibility='default' filepath='include/linux/sched/signal.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='action' type-id='type-id-1138' visibility='default' filepath='include/linux/sched/signal.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16448'>
+          <var-decl name='siglock' type-id='type-id-247' visibility='default' filepath='include/linux/sched/signal.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16512'>
+          <var-decl name='signalfd_wqh' type-id='type-id-225' visibility='default' filepath='include/linux/sched/signal.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='k_sigaction' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/signal_types.h' line='45' column='1' id='type-id-1137'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sa' type-id='type-id-2363' visibility='default' filepath='include/linux/signal_types.h' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sigaction' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/signal_types.h' line='31' column='1' id='type-id-2363'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sa_handler' type-id='type-id-2364' visibility='default' filepath='include/linux/signal_types.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sa_flags' type-id='type-id-16' visibility='default' filepath='include/linux/signal_types.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sa_restorer' type-id='type-id-2365' visibility='default' filepath='include/linux/signal_types.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sa_mask' type-id='type-id-1518' visibility='default' filepath='include/linux/signal_types.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__sighandler_t' type-id='type-id-2366' filepath='include/uapi/asm-generic/signal-defs.h' line='19' column='1' id='type-id-2364'/>
+      <typedef-decl name='__signalfn_t' type-id='type-id-2367' filepath='include/uapi/asm-generic/signal-defs.h' line='18' column='1' id='type-id-2368'/>
+      <typedef-decl name='__sigrestore_t' type-id='type-id-2369' filepath='include/uapi/asm-generic/signal-defs.h' line='22' column='1' id='type-id-2365'/>
+      <typedef-decl name='__restorefn_t' type-id='type-id-2370' filepath='include/uapi/asm-generic/signal-defs.h' line='21' column='1' id='type-id-2371'/>
+      <class-decl name='seccomp' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/seccomp.h' line='28' column='1' id='type-id-1521'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mode' type-id='type-id-17' visibility='default' filepath='include/linux/seccomp.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='filter' type-id='type-id-2372' visibility='default' filepath='include/linux/seccomp.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wake_q_node' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='580' column='1' id='type-id-1522'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='type-id-2373' visibility='default' filepath='include/linux/sched.h' line='581' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='io_context' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/iocontext.h' line='98' column='1' id='type-id-2374'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='type-id-115' visibility='default' filepath='include/linux/iocontext.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='active_ref' type-id='type-id-26' visibility='default' filepath='include/linux/iocontext.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='nr_tasks' type-id='type-id-26' visibility='default' filepath='include/linux/iocontext.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='include/linux/iocontext.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ioprio' type-id='type-id-312' visibility='default' filepath='include/linux/iocontext.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nr_batch_requests' type-id='type-id-17' visibility='default' filepath='include/linux/iocontext.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='last_waited' type-id='type-id-16' visibility='default' filepath='include/linux/iocontext.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='icq_tree' type-id='type-id-415' visibility='default' filepath='include/linux/iocontext.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='icq_hint' type-id='type-id-513' visibility='default' filepath='include/linux/iocontext.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='icq_list' type-id='type-id-186' visibility='default' filepath='include/linux/iocontext.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='release_work' type-id='type-id-255' visibility='default' filepath='include/linux/iocontext.h' line='118' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='io_cq' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/iocontext.h' line='72' column='1' id='type-id-2375'>
+        <member-type access='public'>
+          <union-decl name='__anonymous_union__' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/iocontext.h' line='86' column='1' id='type-id-2376'>
+            <data-member access='private'>
+              <var-decl name='ioc_node' type-id='type-id-520' visibility='default' filepath='include/linux/iocontext.h' line='87' column='1'/>
+            </data-member>
+            <data-member access='private'>
+              <var-decl name='__rcu_head' type-id='type-id-385' visibility='default' filepath='include/linux/iocontext.h' line='88' column='1'/>
+            </data-member>
+          </union-decl>
+        </member-type>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='q' type-id='type-id-1538' visibility='default' filepath='include/linux/iocontext.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ioc' type-id='type-id-364' visibility='default' filepath='include/linux/iocontext.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='type-id-2377' visibility='default' filepath='include/linux/iocontext.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='type-id-5' visibility='default' filepath='include/linux/iocontext.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='siginfo_t' type-id='type-id-2378' filepath='include/uapi/asm-generic/siginfo.h' line='133' column='1' id='type-id-2379'/>
+      <class-decl name='siginfo' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='43' column='1' id='type-id-2378'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='si_signo' type-id='type-id-17' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='si_errno' type-id='type-id-17' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='si_code' type-id='type-id-17' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='_sifields' type-id='type-id-2380' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='132' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__32' size-in-bits='896' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='53' column='1' id='type-id-2380'>
+        <data-member access='private'>
+          <var-decl name='_pad' type-id='type-id-1131' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='_kill' type-id='type-id-2381' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='_timer' type-id='type-id-2382' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='_rt' type-id='type-id-2383' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='_sigchld' type-id='type-id-2384' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='_sigfault' type-id='type-id-2385' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='_sigpoll' type-id='type-id-2386' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='_sigsys' type-id='type-id-2387' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='131' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__52' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='57' column='1' id='type-id-2381'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_pid' type-id='type-id-1576' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='_uid' type-id='type-id-1312' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__53' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='63' column='1' id='type-id-2382'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_tid' type-id='type-id-2388' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='_overrun' type-id='type-id-17' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_sigval' type-id='type-id-2389' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='_sys_private' type-id='type-id-17' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__kernel_timer_t' type-id='type-id-17' filepath='include/uapi/asm-generic/posix_types.h' line='92' column='1' id='type-id-2388'/>
+      <typedef-decl name='sigval_t' type-id='type-id-2390' filepath='include/uapi/asm-generic/siginfo.h' line='11' column='1' id='type-id-2389'/>
+      <union-decl name='sigval' size-in-bits='64' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='8' column='1' id='type-id-2390'>
+        <data-member access='private'>
+          <var-decl name='sival_int' type-id='type-id-17' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sival_ptr' type-id='type-id-15' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='10' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__54' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='71' column='1' id='type-id-2383'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_pid' type-id='type-id-1576' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='_uid' type-id='type-id-1312' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_sigval' type-id='type-id-2389' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__55' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='78' column='1' id='type-id-2384'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_pid' type-id='type-id-1576' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='_uid' type-id='type-id-1312' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_status' type-id='type-id-17' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='_utime' type-id='type-id-2391' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='_stime' type-id='type-id-2391' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='83' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__kernel_clock_t' type-id='type-id-105' filepath='include/uapi/asm-generic/posix_types.h' line='91' column='1' id='type-id-2391'/>
+      <class-decl name='__anonymous_struct__56' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='87' column='1' id='type-id-2385'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_addr' type-id='type-id-15' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='type-id-2392' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='100' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__33' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='100' column='1' id='type-id-2392'>
+        <data-member access='private'>
+          <var-decl name='_addr_lsb' type-id='type-id-261' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='_addr_bnd' type-id='type-id-2393' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='_addr_pkey' type-id='type-id-2394' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='116' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__57' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='107' column='1' id='type-id-2393'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_dummy_bnd' type-id='type-id-975' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_lower' type-id='type-id-15' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='_upper' type-id='type-id-15' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='110' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__58' size-in-bits='96' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='113' column='1' id='type-id-2394'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_dummy_pkey' type-id='type-id-975' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_pkey' type-id='type-id-511' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='115' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__59' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='121' column='1' id='type-id-2386'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_band' type-id='type-id-192' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_fd' type-id='type-id-17' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='123' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__60' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='127' column='1' id='type-id-2387'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_call_addr' type-id='type-id-15' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_syscall' type-id='type-id-17' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='_arch' type-id='type-id-5' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='130' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='nodemask_t' type-id='type-id-2395' filepath='include/linux/nodemask.h' line='98' column='1' id='type-id-1530'/>
+      <class-decl name='__anonymous_struct__61' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-1530' visibility='default' filepath='include/linux/nodemask.h' line='98' column='1' id='type-id-2395'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bits' type-id='type-id-491' visibility='default' filepath='include/linux/nodemask.h' line='98' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='compat_robust_list_head' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/compat.h' line='413' column='1' id='type-id-2396'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='type-id-2397' visibility='default' filepath='include/linux/compat.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='futex_offset' type-id='type-id-2398' visibility='default' filepath='include/linux/compat.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list_op_pending' type-id='type-id-2399' visibility='default' filepath='include/linux/compat.h' line='416' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='compat_robust_list' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/compat.h' line='409' column='1' id='type-id-2397'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='type-id-2399' visibility='default' filepath='include/linux/compat.h' line='410' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='compat_uptr_t' type-id='type-id-7' filepath='arch/arm64/include/asm/compat.h' line='66' column='1' id='type-id-2399'/>
+      <typedef-decl name='compat_long_t' type-id='type-id-738' filepath='arch/arm64/include/asm/compat.h' line='60' column='1' id='type-id-2398'/>
+      <class-decl name='tlbflush_unmap_batch' is-struct='yes' visibility='default' filepath='include/linux/mm_types_task.h' line='72' column='1' id='type-id-1535'/>
+      <class-decl name='page_frag' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/mm_types_task.h' line='60' column='1' id='type-id-1536'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='page' type-id='type-id-512' visibility='default' filepath='include/linux/mm_types_task.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='offset' type-id='type-id-511' visibility='default' filepath='include/linux/mm_types_task.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='size' type-id='type-id-511' visibility='default' filepath='include/linux/mm_types_task.h' line='64' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uprobe_task' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/uprobes.h' line='74' column='1' id='type-id-2400'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='type-id-2401' visibility='default' filepath='include/linux/uprobes.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='type-id-2402' visibility='default' filepath='include/linux/uprobes.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='active_uprobe' type-id='type-id-2403' visibility='default' filepath='include/linux/uprobes.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='xol_vaddr' type-id='type-id-16' visibility='default' filepath='include/linux/uprobes.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='return_instances' type-id='type-id-2404' visibility='default' filepath='include/linux/uprobes.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='depth' type-id='type-id-5' visibility='default' filepath='include/linux/uprobes.h' line='93' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='uprobe_task_state' filepath='include/linux/uprobes.h' line='64' column='1' id='type-id-2401'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='UTASK_RUNNING' value='0'/>
+        <enumerator name='UTASK_SSTEP' value='1'/>
+        <enumerator name='UTASK_SSTEP_ACK' value='2'/>
+        <enumerator name='UTASK_SSTEP_TRAPPED' value='3'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__34' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/uprobes.h' line='77' column='1' id='type-id-2402'>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/uprobes.h' line='83' column='1' id='type-id-2405'>
+            <data-member access='public' layout-offset-in-bits='0'>
+              <var-decl name='dup_xol_work' type-id='type-id-385' visibility='default' filepath='include/linux/uprobes.h' line='84' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='128'>
+              <var-decl name='dup_xol_addr' type-id='type-id-16' visibility='default' filepath='include/linux/uprobes.h' line='85' column='1'/>
+            </data-member>
+          </class-decl>
+        </member-type>
+        <data-member access='private'>
+          <var-decl name='' type-id='type-id-2406' visibility='default' filepath='include/linux/uprobes.h' line='78' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__62' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/uprobes.h' line='78' column='1' id='type-id-2406'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='autask' type-id='type-id-2407' visibility='default' filepath='include/linux/uprobes.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vaddr' type-id='type-id-16' visibility='default' filepath='include/linux/uprobes.h' line='80' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='arch_uprobe_task' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/uprobes.h' line='24' column='1' id='type-id-2407'/>
+      <class-decl name='return_instance' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/uprobes.h' line='96' column='1' id='type-id-2408'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='uprobe' type-id='type-id-2403' visibility='default' filepath='include/linux/uprobes.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='func' type-id='type-id-16' visibility='default' filepath='include/linux/uprobes.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='stack' type-id='type-id-16' visibility='default' filepath='include/linux/uprobes.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='orig_ret_vaddr' type-id='type-id-16' visibility='default' filepath='include/linux/uprobes.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='chained' type-id='type-id-33' visibility='default' filepath='include/linux/uprobes.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='next' type-id='type-id-2404' visibility='default' filepath='include/linux/uprobes.h' line='103' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vm_struct' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/vmalloc.h' line='34' column='1' id='type-id-2409'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='type-id-1540' visibility='default' filepath='include/linux/vmalloc.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='addr' type-id='type-id-15' visibility='default' filepath='include/linux/vmalloc.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='type-id-16' visibility='default' filepath='include/linux/vmalloc.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='include/linux/vmalloc.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pages' type-id='type-id-923' visibility='default' filepath='include/linux/vmalloc.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='nr_pages' type-id='type-id-5' visibility='default' filepath='include/linux/vmalloc.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='phys_addr' type-id='type-id-99' visibility='default' filepath='include/linux/vmalloc.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='caller' type-id='type-id-15' visibility='default' filepath='include/linux/vmalloc.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='thread_struct' size-in-bits='7808' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='116' column='1' id='type-id-1541'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cpu_context' type-id='type-id-2410' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='uw' type-id='type-id-2411' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='fpsimd_cpu' type-id='type-id-5' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='sve_state' type-id='type-id-15' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='sve_vl' type-id='type-id-5' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5408'>
+          <var-decl name='sve_vl_onexec' type-id='type-id-5' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='fault_address' type-id='type-id-16' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='fault_code' type-id='type-id-16' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='debug' type-id='type-id-2412' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='136' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpu_context' size-in-bits='832' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='100' column='1' id='type-id-2410'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x19' type-id='type-id-16' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='x20' type-id='type-id-16' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='x21' type-id='type-id-16' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='x22' type-id='type-id-16' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='x23' type-id='type-id-16' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='x24' type-id='type-id-16' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='x25' type-id='type-id-16' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='x26' type-id='type-id-16' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='x27' type-id='type-id-16' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='x28' type-id='type-id-16' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fp' type-id='type-id-16' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='sp' type-id='type-id-16' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='pc' type-id='type-id-16' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='113' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__63' size-in-bits='4352' is-struct='yes' is-anonymous='yes' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='124' column='1' id='type-id-2411'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tp_value' type-id='type-id-16' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tp2_value' type-id='type-id-16' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fpsimd_state' type-id='type-id-2413' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='127' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='user_fpsimd_state' size-in-bits='4224' is-struct='yes' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='78' column='1' id='type-id-2413'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vregs' type-id='type-id-948' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='fpsr' type-id='type-id-511' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4128'>
+          <var-decl name='fpcr' type-id='type-id-511' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='__reserved' type-id='type-id-932' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='82' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='debug_info' size-in-bits='2176' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='87' column='1' id='type-id-2412'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='suspended_step' type-id='type-id-17' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bps_disabled' type-id='type-id-17' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wps_disabled' type-id='type-id-17' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hbp_break' type-id='type-id-1159' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='hbp_watch' type-id='type-id-1159' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='96' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mm_rss_stat' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/mm_types_task.h' line='56' column='1' id='type-id-1486'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='type-id-949' visibility='default' filepath='include/linux/mm_types_task.h' line='57' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='mm_context_t' type-id='type-id-2414' filepath='arch/arm64/include/asm/mmu.h' line='32' column='1' id='type-id-1488'/>
+      <class-decl name='__anonymous_struct__64' size-in-bits='192' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-1488' visibility='default' filepath='arch/arm64/include/asm/mmu.h' line='28' column='1' id='type-id-2414'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='type-id-113' visibility='default' filepath='arch/arm64/include/asm/mmu.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vdso' type-id='type-id-15' visibility='default' filepath='arch/arm64/include/asm/mmu.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='arch/arm64/include/asm/mmu.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='core_state' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/mm_types.h' line='345' column='1' id='type-id-2415'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nr_threads' type-id='type-id-26' visibility='default' filepath='include/linux/mm_types.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dumper' type-id='type-id-2416' visibility='default' filepath='include/linux/mm_types.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='startup' type-id='type-id-1608' visibility='default' filepath='include/linux/mm_types.h' line='348' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='core_thread' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/mm_types.h' line='340' column='1' id='type-id-2416'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='task' type-id='type-id-431' visibility='default' filepath='include/linux/mm_types.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='next' type-id='type-id-2417' visibility='default' filepath='include/linux/mm_types.h' line='342' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uprobes_state' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/uprobes.h' line='114' column='1' id='type-id-1491'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='xol_area' type-id='type-id-2418' visibility='default' filepath='include/linux/uprobes.h' line='115' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__65' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='304' column='1' id='type-id-2419'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb' type-id='type-id-422' visibility='default' filepath='include/linux/mm_types.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rb_subtree_last' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='306' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vm_userfaultfd_ctx' is-struct='yes' visibility='default' filepath='include/linux/mm_types.h' line='260' column='1' id='type-id-1481'/>
+      <typedef-decl name='vm_fault_t' type-id='type-id-17' filepath='include/linux/mm_types.h' line='25' column='1' id='type-id-2420'/>
+      <class-decl name='vm_fault' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/mm.h' line='354' column='1' id='type-id-2421'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vma' type-id='type-id-1209' visibility='default' filepath='include/linux/mm.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='type-id-5' visibility='default' filepath='include/linux/mm.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='gfp_mask' type-id='type-id-485' visibility='default' filepath='include/linux/mm.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pgoff' type-id='type-id-16' visibility='default' filepath='include/linux/mm.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='address' type-id='type-id-16' visibility='default' filepath='include/linux/mm.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pmd' type-id='type-id-2422' visibility='default' filepath='include/linux/mm.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pud' type-id='type-id-2423' visibility='default' filepath='include/linux/mm.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='orig_pte' type-id='type-id-2424' visibility='default' filepath='include/linux/mm.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='cow_page' type-id='type-id-512' visibility='default' filepath='include/linux/mm.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='memcg' type-id='type-id-1537' visibility='default' filepath='include/linux/mm.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='page' type-id='type-id-512' visibility='default' filepath='include/linux/mm.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='pte' type-id='type-id-2425' visibility='default' filepath='include/linux/mm.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='ptl' type-id='type-id-486' visibility='default' filepath='include/linux/mm.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='prealloc_pte' type-id='type-id-2140' visibility='default' filepath='include/linux/mm.h' line='383' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='pud_t' type-id='type-id-2426' filepath='include/asm-generic/pgtable-nop4d-hack.h' line='15' column='1' id='type-id-2427'/>
+      <class-decl name='__anonymous_struct__66' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-2427' visibility='default' filepath='include/asm-generic/pgtable-nop4d-hack.h' line='15' column='1' id='type-id-2426'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pgd' type-id='type-id-1493' visibility='default' filepath='include/asm-generic/pgtable-nop4d-hack.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='pte_t' type-id='type-id-2428' filepath='arch/arm64/include/asm/pgtable-types.h' line='33' column='1' id='type-id-2424'/>
+      <class-decl name='__anonymous_struct__67' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-2424' visibility='default' filepath='arch/arm64/include/asm/pgtable-types.h' line='33' column='1' id='type-id-2428'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pte' type-id='type-id-103' visibility='default' filepath='arch/arm64/include/asm/pgtable-types.h' line='33' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='page_entry_size' filepath='include/linux/mm.h' line='393' column='1' id='type-id-2429'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='PE_SIZE_PTE' value='0'/>
+        <enumerator name='PE_SIZE_PMD' value='1'/>
+        <enumerator name='PE_SIZE_PUD' value='2'/>
+      </enum-decl>
+      <union-decl name='kernfs_node_id' size-in-bits='64' visibility='default' filepath='include/linux/kernfs.h' line='107' column='1' id='type-id-1427'>
+        <data-member access='private'>
+          <var-decl name='' type-id='type-id-2430' visibility='default' filepath='include/linux/kernfs.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='id' type-id='type-id-40' visibility='default' filepath='include/linux/kernfs.h' line='118' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__68' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/kernfs.h' line='108' column='1' id='type-id-2430'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ino' type-id='type-id-7' visibility='default' filepath='include/linux/kernfs.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='generation' type-id='type-id-7' visibility='default' filepath='include/linux/kernfs.h' line='116' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='module_attribute' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/module.h' line='53' column='1' id='type-id-2431'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attr' type-id='type-id-619' visibility='default' filepath='include/linux/module.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='show' type-id='type-id-2432' visibility='default' filepath='include/linux/module.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='store' type-id='type-id-2433' visibility='default' filepath='include/linux/module.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='setup' type-id='type-id-2434' visibility='default' filepath='include/linux/module.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='test' type-id='type-id-2435' visibility='default' filepath='include/linux/module.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='free' type-id='type-id-2436' visibility='default' filepath='include/linux/module.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernel_symbol' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/export.h' line='71' column='1' id='type-id-2437'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='value' type-id='type-id-16' visibility='default' filepath='include/linux/export.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/export.h' line='73' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='cfi_check_fn' type-id='type-id-2438' filepath='include/linux/cfi.h' line='9' column='1' id='type-id-1377'/>
+      <typedef-decl name='uint64_t' type-id='type-id-40' filepath='include/linux/types.h' line='112' column='1' id='type-id-2439'/>
+      <class-decl name='kernel_param' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/moduleparam.h' line='71' column='1' id='type-id-2440'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/moduleparam.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mod' type-id='type-id-260' visibility='default' filepath='include/linux/moduleparam.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ops' type-id='type-id-2441' visibility='default' filepath='include/linux/moduleparam.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='perm' type-id='type-id-2442' visibility='default' filepath='include/linux/moduleparam.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='level' type-id='type-id-209' visibility='default' filepath='include/linux/moduleparam.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='216'>
+          <var-decl name='flags' type-id='type-id-214' visibility='default' filepath='include/linux/moduleparam.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='' type-id='type-id-2443' visibility='default' filepath='include/linux/moduleparam.h' line='78' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernel_param_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/moduleparam.h' line='49' column='1' id='type-id-2444'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='type-id-5' visibility='default' filepath='include/linux/moduleparam.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='set' type-id='type-id-2445' visibility='default' filepath='include/linux/moduleparam.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get' type-id='type-id-2446' visibility='default' filepath='include/linux/moduleparam.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='free' type-id='type-id-517' visibility='default' filepath='include/linux/moduleparam.h' line='57' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='s8' type-id='type-id-1910' filepath='include/asm-generic/int-ll64.h' line='16' column='1' id='type-id-209'/>
+      <union-decl name='__anonymous_union__36' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/moduleparam.h' line='78' column='1' id='type-id-2443'>
+        <data-member access='private'>
+          <var-decl name='arg' type-id='type-id-15' visibility='default' filepath='include/linux/moduleparam.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='str' type-id='type-id-2447' visibility='default' filepath='include/linux/moduleparam.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='arr' type-id='type-id-2448' visibility='default' filepath='include/linux/moduleparam.h' line='81' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='kparam_string' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/moduleparam.h' line='88' column='1' id='type-id-2449'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='maxlen' type-id='type-id-5' visibility='default' filepath='include/linux/moduleparam.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='string' type-id='type-id-2' visibility='default' filepath='include/linux/moduleparam.h' line='90' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kparam_array' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/moduleparam.h' line='94' column='1' id='type-id-2450'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max' type-id='type-id-5' visibility='default' filepath='include/linux/moduleparam.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='elemsize' type-id='type-id-5' visibility='default' filepath='include/linux/moduleparam.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num' type-id='type-id-482' visibility='default' filepath='include/linux/moduleparam.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ops' type-id='type-id-2441' visibility='default' filepath='include/linux/moduleparam.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='elem' type-id='type-id-15' visibility='default' filepath='include/linux/moduleparam.h' line='100' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='exception_table_entry' size-in-bits='64' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/extable.h' line='18' column='1' id='type-id-2451'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='insn' type-id='type-id-17' visibility='default' filepath='arch/arm64/include/asm/extable.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='fixup' type-id='type-id-17' visibility='default' filepath='arch/arm64/include/asm/extable.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='module_layout' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/module.h' line='292' column='1' id='type-id-1381'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='type-id-15' visibility='default' filepath='include/linux/module.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='type-id-5' visibility='default' filepath='include/linux/module.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='text_size' type-id='type-id-5' visibility='default' filepath='include/linux/module.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ro_size' type-id='type-id-5' visibility='default' filepath='include/linux/module.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ro_after_init_size' type-id='type-id-5' visibility='default' filepath='include/linux/module.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mtn' type-id='type-id-2452' visibility='default' filepath='include/linux/module.h' line='305' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mod_tree_node' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/module.h' line='287' column='1' id='type-id-2452'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mod' type-id='type-id-260' visibility='default' filepath='include/linux/module.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='node' type-id='type-id-1227' visibility='default' filepath='include/linux/module.h' line='289' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mod_arch_specific' size-in-bits='320' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/module.h' line='30' column='1' id='type-id-1382'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='core' type-id='type-id-2453' visibility='default' filepath='arch/arm64/include/asm/module.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init' type-id='type-id-2453' visibility='default' filepath='arch/arm64/include/asm/module.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ftrace_trampoline' type-id='type-id-2454' visibility='default' filepath='arch/arm64/include/asm/module.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mod_plt_sec' size-in-bits='128' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/module.h' line='24' column='1' id='type-id-2453'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='plt' type-id='type-id-2455' visibility='default' filepath='arch/arm64/include/asm/module.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='plt_num_entries' type-id='type-id-17' visibility='default' filepath='arch/arm64/include/asm/module.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='plt_max_entries' type-id='type-id-17' visibility='default' filepath='arch/arm64/include/asm/module.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='elf64_shdr' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/linux/elf.h' line='316' column='1' id='type-id-2456'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sh_name' type-id='type-id-2457' visibility='default' filepath='include/uapi/linux/elf.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='sh_type' type-id='type-id-2457' visibility='default' filepath='include/uapi/linux/elf.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sh_flags' type-id='type-id-2458' visibility='default' filepath='include/uapi/linux/elf.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sh_addr' type-id='type-id-2459' visibility='default' filepath='include/uapi/linux/elf.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sh_offset' type-id='type-id-2460' visibility='default' filepath='include/uapi/linux/elf.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sh_size' type-id='type-id-2458' visibility='default' filepath='include/uapi/linux/elf.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sh_link' type-id='type-id-2457' visibility='default' filepath='include/uapi/linux/elf.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='sh_info' type-id='type-id-2457' visibility='default' filepath='include/uapi/linux/elf.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sh_addralign' type-id='type-id-2458' visibility='default' filepath='include/uapi/linux/elf.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='sh_entsize' type-id='type-id-2458' visibility='default' filepath='include/uapi/linux/elf.h' line='326' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='Elf64_Word' type-id='type-id-511' filepath='include/uapi/linux/elf.h' line='21' column='1' id='type-id-2457'/>
+      <typedef-decl name='Elf64_Xword' type-id='type-id-100' filepath='include/uapi/linux/elf.h' line='22' column='1' id='type-id-2458'/>
+      <typedef-decl name='Elf64_Addr' type-id='type-id-100' filepath='include/uapi/linux/elf.h' line='16' column='1' id='type-id-2459'/>
+      <typedef-decl name='Elf64_Off' type-id='type-id-100' filepath='include/uapi/linux/elf.h' line='19' column='1' id='type-id-2460'/>
+      <class-decl name='plt_entry' size-in-bits='128' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/module.h' line='50' column='1' id='type-id-2461'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mov0' type-id='type-id-2462' visibility='default' filepath='arch/arm64/include/asm/module.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='mov1' type-id='type-id-2462' visibility='default' filepath='arch/arm64/include/asm/module.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mov2' type-id='type-id-2462' visibility='default' filepath='arch/arm64/include/asm/module.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='br' type-id='type-id-2462' visibility='default' filepath='arch/arm64/include/asm/module.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__le32' type-id='type-id-511' filepath='include/uapi/linux/types.h' line='31' column='1' id='type-id-2462'/>
+      <class-decl name='bug_entry' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/asm-generic/bug.h' line='23' column='1' id='type-id-2463'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bug_addr_disp' type-id='type-id-17' visibility='default' filepath='include/asm-generic/bug.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='file_disp' type-id='type-id-17' visibility='default' filepath='include/asm-generic/bug.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='line' type-id='type-id-312' visibility='default' filepath='include/asm-generic/bug.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='flags' type-id='type-id-312' visibility='default' filepath='include/asm-generic/bug.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mod_kallsyms' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/module.h' line='316' column='1' id='type-id-1385'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='symtab' type-id='type-id-2464' visibility='default' filepath='include/linux/module.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num_symtab' type-id='type-id-5' visibility='default' filepath='include/linux/module.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='strtab' type-id='type-id-2' visibility='default' filepath='include/linux/module.h' line='319' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='Elf64_Sym' type-id='type-id-2465' filepath='include/uapi/linux/elf.h' line='199' column='1' id='type-id-2466'/>
+      <class-decl name='elf64_sym' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/elf.h' line='192' column='1' id='type-id-2465'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='st_name' type-id='type-id-2457' visibility='default' filepath='include/uapi/linux/elf.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='st_info' type-id='type-id-216' visibility='default' filepath='include/uapi/linux/elf.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='st_other' type-id='type-id-216' visibility='default' filepath='include/uapi/linux/elf.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='st_shndx' type-id='type-id-2467' visibility='default' filepath='include/uapi/linux/elf.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='st_value' type-id='type-id-2459' visibility='default' filepath='include/uapi/linux/elf.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='st_size' type-id='type-id-2458' visibility='default' filepath='include/uapi/linux/elf.h' line='198' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='Elf64_Half' type-id='type-id-108' filepath='include/uapi/linux/elf.h' line='17' column='1' id='type-id-2467'/>
+      <typedef-decl name='tracepoint_ptr_t' type-id='type-id-2468' filepath='include/linux/tracepoint-defs.h' line='41' column='1' id='type-id-2469'/>
+      <class-decl name='tracepoint' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/tracepoint-defs.h' line='30' column='1' id='type-id-2470'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/tracepoint-defs.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='key' type-id='type-id-2471' visibility='default' filepath='include/linux/tracepoint-defs.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='regfunc' type-id='type-id-1380' visibility='default' filepath='include/linux/tracepoint-defs.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unregfunc' type-id='type-id-1392' visibility='default' filepath='include/linux/tracepoint-defs.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='funcs' type-id='type-id-2472' visibility='default' filepath='include/linux/tracepoint-defs.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='static_key' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/jump_label.h' line='110' column='1' id='type-id-2471'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enabled' type-id='type-id-26' visibility='default' filepath='include/linux/jump_label.h' line='111' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tracepoint_func' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/tracepoint-defs.h' line='24' column='1' id='type-id-2473'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='func' type-id='type-id-15' visibility='default' filepath='include/linux/tracepoint-defs.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='type-id-15' visibility='default' filepath='include/linux/tracepoint-defs.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='prio' type-id='type-id-17' visibility='default' filepath='include/linux/tracepoint-defs.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='super_operations' size-in-bits='1856' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1880' column='1' id='type-id-2474'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alloc_inode' type-id='type-id-2475' visibility='default' filepath='include/linux/fs.h' line='1881' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='destroy_inode' type-id='type-id-2476' visibility='default' filepath='include/linux/fs.h' line='1882' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dirty_inode' type-id='type-id-2477' visibility='default' filepath='include/linux/fs.h' line='1884' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='write_inode' type-id='type-id-2478' visibility='default' filepath='include/linux/fs.h' line='1885' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='drop_inode' type-id='type-id-2479' visibility='default' filepath='include/linux/fs.h' line='1886' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='evict_inode' type-id='type-id-2476' visibility='default' filepath='include/linux/fs.h' line='1887' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='put_super' type-id='type-id-1370' visibility='default' filepath='include/linux/fs.h' line='1888' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='sync_fs' type-id='type-id-2480' visibility='default' filepath='include/linux/fs.h' line='1889' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='freeze_super' type-id='type-id-2481' visibility='default' filepath='include/linux/fs.h' line='1890' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='freeze_fs' type-id='type-id-2481' visibility='default' filepath='include/linux/fs.h' line='1891' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='thaw_super' type-id='type-id-2481' visibility='default' filepath='include/linux/fs.h' line='1892' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='unfreeze_fs' type-id='type-id-2481' visibility='default' filepath='include/linux/fs.h' line='1893' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='statfs' type-id='type-id-2482' visibility='default' filepath='include/linux/fs.h' line='1894' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='remount_fs' type-id='type-id-2483' visibility='default' filepath='include/linux/fs.h' line='1895' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='remount_fs2' type-id='type-id-2484' visibility='default' filepath='include/linux/fs.h' line='1896' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='clone_mnt_data' type-id='type-id-2485' visibility='default' filepath='include/linux/fs.h' line='1897' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='copy_mnt_data' type-id='type-id-2486' visibility='default' filepath='include/linux/fs.h' line='1898' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='umount_begin' type-id='type-id-1370' visibility='default' filepath='include/linux/fs.h' line='1899' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='show_options' type-id='type-id-2487' visibility='default' filepath='include/linux/fs.h' line='1901' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='show_options2' type-id='type-id-2488' visibility='default' filepath='include/linux/fs.h' line='1902' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='show_devname' type-id='type-id-2487' visibility='default' filepath='include/linux/fs.h' line='1903' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='show_path' type-id='type-id-2487' visibility='default' filepath='include/linux/fs.h' line='1904' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='show_stats' type-id='type-id-2487' visibility='default' filepath='include/linux/fs.h' line='1905' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='quota_read' type-id='type-id-2489' visibility='default' filepath='include/linux/fs.h' line='1907' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='quota_write' type-id='type-id-2490' visibility='default' filepath='include/linux/fs.h' line='1908' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='get_dquots' type-id='type-id-2491' visibility='default' filepath='include/linux/fs.h' line='1909' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='bdev_try_to_free_page' type-id='type-id-2492' visibility='default' filepath='include/linux/fs.h' line='1911' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='nr_cached_objects' type-id='type-id-2493' visibility='default' filepath='include/linux/fs.h' line='1912' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='free_cached_objects' type-id='type-id-2493' visibility='default' filepath='include/linux/fs.h' line='1914' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dquot' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='294' column='1' id='type-id-2494'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dq_hash' type-id='type-id-520' visibility='default' filepath='include/linux/quota.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dq_inuse' type-id='type-id-20' visibility='default' filepath='include/linux/quota.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dq_free' type-id='type-id-20' visibility='default' filepath='include/linux/quota.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dq_dirty' type-id='type-id-20' visibility='default' filepath='include/linux/quota.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dq_lock' type-id='type-id-245' visibility='default' filepath='include/linux/quota.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='dq_dqb_lock' type-id='type-id-247' visibility='default' filepath='include/linux/quota.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='dq_count' type-id='type-id-26' visibility='default' filepath='include/linux/quota.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='dq_sb' type-id='type-id-28' visibility='default' filepath='include/linux/quota.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dq_id' type-id='type-id-2495' visibility='default' filepath='include/linux/quota.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='dq_off' type-id='type-id-763' visibility='default' filepath='include/linux/quota.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='dq_flags' type-id='type-id-16' visibility='default' filepath='include/linux/quota.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='dq_dqb' type-id='type-id-2496' visibility='default' filepath='include/linux/quota.h' line='306' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kqid' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='68' column='1' id='type-id-2495'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='type-id-2497' visibility='default' filepath='include/linux/quota.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='type-id-2498' visibility='default' filepath='include/linux/quota.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__37' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/quota.h' line='69' column='1' id='type-id-2497'>
+        <data-member access='private'>
+          <var-decl name='uid' type-id='type-id-42' visibility='default' filepath='include/linux/quota.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='gid' type-id='type-id-330' visibility='default' filepath='include/linux/quota.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='projid' type-id='type-id-2499' visibility='default' filepath='include/linux/quota.h' line='72' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='kprojid_t' type-id='type-id-2500' filepath='include/linux/projid.h' line='24' column='1' id='type-id-2499'/>
+      <class-decl name='__anonymous_struct__69' size-in-bits='32' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-2499' visibility='default' filepath='include/linux/projid.h' line='22' column='1' id='type-id-2500'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='val' type-id='type-id-2501' visibility='default' filepath='include/linux/projid.h' line='23' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='projid_t' type-id='type-id-1312' filepath='include/linux/projid.h' line='20' column='1' id='type-id-2501'/>
+      <enum-decl name='quota_type' filepath='include/linux/quota.h' line='54' column='1' id='type-id-2498'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='USRQUOTA' value='0'/>
+        <enumerator name='GRPQUOTA' value='1'/>
+        <enumerator name='PRJQUOTA' value='2'/>
+      </enum-decl>
+      <class-decl name='mem_dqblk' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='205' column='1' id='type-id-2496'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dqb_bhardlimit' type-id='type-id-2502' visibility='default' filepath='include/linux/quota.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dqb_bsoftlimit' type-id='type-id-2502' visibility='default' filepath='include/linux/quota.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dqb_curspace' type-id='type-id-2502' visibility='default' filepath='include/linux/quota.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dqb_rsvspace' type-id='type-id-2502' visibility='default' filepath='include/linux/quota.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dqb_ihardlimit' type-id='type-id-2502' visibility='default' filepath='include/linux/quota.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dqb_isoftlimit' type-id='type-id-2502' visibility='default' filepath='include/linux/quota.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dqb_curinodes' type-id='type-id-2502' visibility='default' filepath='include/linux/quota.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dqb_btime' type-id='type-id-1341' visibility='default' filepath='include/linux/quota.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dqb_itime' type-id='type-id-1341' visibility='default' filepath='include/linux/quota.h' line='214' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='qsize_t' type-id='type-id-1148' filepath='include/linux/quota.h' line='66' column='1' id='type-id-2502'/>
+      <class-decl name='shrink_control' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/shrinker.h' line='12' column='1' id='type-id-2503'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='gfp_mask' type-id='type-id-485' visibility='default' filepath='include/linux/shrinker.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nid' type-id='type-id-17' visibility='default' filepath='include/linux/shrinker.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_to_scan' type-id='type-id-16' visibility='default' filepath='include/linux/shrinker.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nr_scanned' type-id='type-id-16' visibility='default' filepath='include/linux/shrinker.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='memcg' type-id='type-id-1537' visibility='default' filepath='include/linux/shrinker.h' line='33' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dquot_operations' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='322' column='1' id='type-id-2504'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='write_dquot' type-id='type-id-2505' visibility='default' filepath='include/linux/quota.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='alloc_dquot' type-id='type-id-2506' visibility='default' filepath='include/linux/quota.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='destroy_dquot' type-id='type-id-2507' visibility='default' filepath='include/linux/quota.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='acquire_dquot' type-id='type-id-2505' visibility='default' filepath='include/linux/quota.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='release_dquot' type-id='type-id-2505' visibility='default' filepath='include/linux/quota.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mark_dirty' type-id='type-id-2505' visibility='default' filepath='include/linux/quota.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='write_info' type-id='type-id-2480' visibility='default' filepath='include/linux/quota.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_reserved_space' type-id='type-id-2508' visibility='default' filepath='include/linux/quota.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_projid' type-id='type-id-2509' visibility='default' filepath='include/linux/quota.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_inode_usage' type-id='type-id-2510' visibility='default' filepath='include/linux/quota.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='get_next_id' type-id='type-id-2511' visibility='default' filepath='include/linux/quota.h' line='337' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='quotactl_ops' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='428' column='1' id='type-id-2512'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='quota_on' type-id='type-id-2513' visibility='default' filepath='include/linux/quota.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='quota_off' type-id='type-id-2480' visibility='default' filepath='include/linux/quota.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='quota_enable' type-id='type-id-2514' visibility='default' filepath='include/linux/quota.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='quota_disable' type-id='type-id-2514' visibility='default' filepath='include/linux/quota.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='quota_sync' type-id='type-id-2480' visibility='default' filepath='include/linux/quota.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_info' type-id='type-id-2515' visibility='default' filepath='include/linux/quota.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_dqblk' type-id='type-id-2516' visibility='default' filepath='include/linux/quota.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_nextdqblk' type-id='type-id-2517' visibility='default' filepath='include/linux/quota.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_dqblk' type-id='type-id-2516' visibility='default' filepath='include/linux/quota.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_state' type-id='type-id-2518' visibility='default' filepath='include/linux/quota.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='rm_xquota' type-id='type-id-2514' visibility='default' filepath='include/linux/quota.h' line='440' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='qc_info' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='415' column='1' id='type-id-2519'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='i_fieldmask' type-id='type-id-17' visibility='default' filepath='include/linux/quota.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='i_flags' type-id='type-id-5' visibility='default' filepath='include/linux/quota.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='i_spc_timelimit' type-id='type-id-5' visibility='default' filepath='include/linux/quota.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='i_ino_timelimit' type-id='type-id-5' visibility='default' filepath='include/linux/quota.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='i_rt_spc_timelimit' type-id='type-id-5' visibility='default' filepath='include/linux/quota.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='i_spc_warnlimit' type-id='type-id-5' visibility='default' filepath='include/linux/quota.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='i_ino_warnlimit' type-id='type-id-5' visibility='default' filepath='include/linux/quota.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='i_rt_spc_warnlimit' type-id='type-id-5' visibility='default' filepath='include/linux/quota.h' line='424' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='qc_dqblk' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='343' column='1' id='type-id-2520'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='d_fieldmask' type-id='type-id-17' visibility='default' filepath='include/linux/quota.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='d_spc_hardlimit' type-id='type-id-40' visibility='default' filepath='include/linux/quota.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='d_spc_softlimit' type-id='type-id-40' visibility='default' filepath='include/linux/quota.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='d_ino_hardlimit' type-id='type-id-40' visibility='default' filepath='include/linux/quota.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='d_ino_softlimit' type-id='type-id-40' visibility='default' filepath='include/linux/quota.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='d_space' type-id='type-id-40' visibility='default' filepath='include/linux/quota.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='d_ino_count' type-id='type-id-40' visibility='default' filepath='include/linux/quota.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='d_ino_timer' type-id='type-id-1548' visibility='default' filepath='include/linux/quota.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='d_spc_timer' type-id='type-id-1548' visibility='default' filepath='include/linux/quota.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='d_ino_warns' type-id='type-id-17' visibility='default' filepath='include/linux/quota.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='d_spc_warns' type-id='type-id-17' visibility='default' filepath='include/linux/quota.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='d_rt_spc_hardlimit' type-id='type-id-40' visibility='default' filepath='include/linux/quota.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='d_rt_spc_softlimit' type-id='type-id-40' visibility='default' filepath='include/linux/quota.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='d_rt_space' type-id='type-id-40' visibility='default' filepath='include/linux/quota.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='d_rt_spc_timer' type-id='type-id-1548' visibility='default' filepath='include/linux/quota.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='d_rt_spc_warns' type-id='type-id-17' visibility='default' filepath='include/linux/quota.h' line='360' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='qc_state' size-in-bits='1408' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='409' column='1' id='type-id-2521'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='s_incoredqs' type-id='type-id-5' visibility='default' filepath='include/linux/quota.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='s_state' type-id='type-id-1164' visibility='default' filepath='include/linux/quota.h' line='411' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='qc_type_state' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='395' column='1' id='type-id-1163'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='type-id-5' visibility='default' filepath='include/linux/quota.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='spc_timelimit' type-id='type-id-5' visibility='default' filepath='include/linux/quota.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ino_timelimit' type-id='type-id-5' visibility='default' filepath='include/linux/quota.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='rt_spc_timelimit' type-id='type-id-5' visibility='default' filepath='include/linux/quota.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='spc_warnlimit' type-id='type-id-5' visibility='default' filepath='include/linux/quota.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ino_warnlimit' type-id='type-id-5' visibility='default' filepath='include/linux/quota.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rt_spc_warnlimit' type-id='type-id-5' visibility='default' filepath='include/linux/quota.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ino' type-id='type-id-98' visibility='default' filepath='include/linux/quota.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='blocks' type-id='type-id-1304' visibility='default' filepath='include/linux/quota.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='nextents' type-id='type-id-1304' visibility='default' filepath='include/linux/quota.h' line='406' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='blkcnt_t' type-id='type-id-16' filepath='include/linux/types.h' line='135' column='1' id='type-id-1304'/>
+      <class-decl name='hlist_bl_head' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/list_bl.h' line='34' column='1' id='type-id-1358'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='first' type-id='type-id-1293' visibility='default' filepath='include/linux/list_bl.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='block_device' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='443' column='1' id='type-id-2522'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bd_dev' type-id='type-id-269' visibility='default' filepath='include/linux/fs.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bd_openers' type-id='type-id-17' visibility='default' filepath='include/linux/fs.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bd_inode' type-id='type-id-1129' visibility='default' filepath='include/linux/fs.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bd_super' type-id='type-id-28' visibility='default' filepath='include/linux/fs.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bd_mutex' type-id='type-id-245' visibility='default' filepath='include/linux/fs.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='bd_claiming' type-id='type-id-15' visibility='default' filepath='include/linux/fs.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='bd_holder' type-id='type-id-15' visibility='default' filepath='include/linux/fs.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='bd_holders' type-id='type-id-17' visibility='default' filepath='include/linux/fs.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='bd_write_holder' type-id='type-id-33' visibility='default' filepath='include/linux/fs.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bd_holder_disks' type-id='type-id-20' visibility='default' filepath='include/linux/fs.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='bd_contains' type-id='type-id-875' visibility='default' filepath='include/linux/fs.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='bd_block_size' type-id='type-id-5' visibility='default' filepath='include/linux/fs.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='bd_partno' type-id='type-id-214' visibility='default' filepath='include/linux/fs.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='bd_part' type-id='type-id-2523' visibility='default' filepath='include/linux/fs.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='bd_part_count' type-id='type-id-5' visibility='default' filepath='include/linux/fs.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='bd_invalidated' type-id='type-id-17' visibility='default' filepath='include/linux/fs.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='bd_disk' type-id='type-id-2524' visibility='default' filepath='include/linux/fs.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='bd_queue' type-id='type-id-1538' visibility='default' filepath='include/linux/fs.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='bd_bdi' type-id='type-id-1359' visibility='default' filepath='include/linux/fs.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='bd_list' type-id='type-id-20' visibility='default' filepath='include/linux/fs.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='bd_private' type-id='type-id-16' visibility='default' filepath='include/linux/fs.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='bd_fsfreeze_count' type-id='type-id-17' visibility='default' filepath='include/linux/fs.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='bd_fsfreeze_mutex' type-id='type-id-245' visibility='default' filepath='include/linux/fs.h' line='478' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='quota_info' size-in-bits='2496' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='518' column='1' id='type-id-1361'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='type-id-5' visibility='default' filepath='include/linux/quota.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dqio_sem' type-id='type-id-246' visibility='default' filepath='include/linux/quota.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='files' type-id='type-id-1130' visibility='default' filepath='include/linux/quota.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='info' type-id='type-id-1150' visibility='default' filepath='include/linux/quota.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='ops' type-id='type-id-1120' visibility='default' filepath='include/linux/quota.h' line='523' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mem_dqinfo' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='222' column='1' id='type-id-1149'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dqi_format' type-id='type-id-2525' visibility='default' filepath='include/linux/quota.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dqi_fmt_id' type-id='type-id-17' visibility='default' filepath='include/linux/quota.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dqi_dirty_list' type-id='type-id-20' visibility='default' filepath='include/linux/quota.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dqi_flags' type-id='type-id-16' visibility='default' filepath='include/linux/quota.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dqi_bgrace' type-id='type-id-5' visibility='default' filepath='include/linux/quota.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='dqi_igrace' type-id='type-id-5' visibility='default' filepath='include/linux/quota.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dqi_max_spc_limit' type-id='type-id-2502' visibility='default' filepath='include/linux/quota.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dqi_max_ino_limit' type-id='type-id-2502' visibility='default' filepath='include/linux/quota.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dqi_priv' type-id='type-id-15' visibility='default' filepath='include/linux/quota.h' line='232' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='quota_format_type' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='443' column='1' id='type-id-2526'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='qf_fmt_id' type-id='type-id-17' visibility='default' filepath='include/linux/quota.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='qf_ops' type-id='type-id-1119' visibility='default' filepath='include/linux/quota.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='qf_owner' type-id='type-id-260' visibility='default' filepath='include/linux/quota.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='qf_next' type-id='type-id-2525' visibility='default' filepath='include/linux/quota.h' line='447' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='quota_format_ops' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='310' column='1' id='type-id-2527'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='check_quota_file' type-id='type-id-2480' visibility='default' filepath='include/linux/quota.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='read_file_info' type-id='type-id-2480' visibility='default' filepath='include/linux/quota.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='write_file_info' type-id='type-id-2480' visibility='default' filepath='include/linux/quota.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='free_file_info' type-id='type-id-2480' visibility='default' filepath='include/linux/quota.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='read_dqblk' type-id='type-id-2505' visibility='default' filepath='include/linux/quota.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='commit_dqblk' type-id='type-id-2505' visibility='default' filepath='include/linux/quota.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='release_dqblk' type-id='type-id-2505' visibility='default' filepath='include/linux/quota.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_next_id' type-id='type-id-2511' visibility='default' filepath='include/linux/quota.h' line='318' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sb_writers' size-in-bits='3328' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1369' column='1' id='type-id-1362'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='frozen' type-id='type-id-17' visibility='default' filepath='include/linux/fs.h' line='1370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait_unfrozen' type-id='type-id-225' visibility='default' filepath='include/linux/fs.h' line='1371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rw_sem' type-id='type-id-1157' visibility='default' filepath='include/linux/fs.h' line='1372' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='percpu_rw_semaphore' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/percpu-rwsem.h' line='12' column='1' id='type-id-1156'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rss' type-id='type-id-2528' visibility='default' filepath='include/linux/percpu-rwsem.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='read_count' type-id='type-id-482' visibility='default' filepath='include/linux/percpu-rwsem.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rw_sem' type-id='type-id-246' visibility='default' filepath='include/linux/percpu-rwsem.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='writer' type-id='type-id-2529' visibility='default' filepath='include/linux/percpu-rwsem.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='readers_block' type-id='type-id-17' visibility='default' filepath='include/linux/percpu-rwsem.h' line='17' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rcu_sync' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/rcu_sync.h' line='32' column='1' id='type-id-2528'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='gp_state' type-id='type-id-17' visibility='default' filepath='include/linux/rcu_sync.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='gp_count' type-id='type-id-17' visibility='default' filepath='include/linux/rcu_sync.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='gp_wait' type-id='type-id-225' visibility='default' filepath='include/linux/rcu_sync.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cb_state' type-id='type-id-17' visibility='default' filepath='include/linux/rcu_sync.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cb_head' type-id='type-id-385' visibility='default' filepath='include/linux/rcu_sync.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='gp_type' type-id='type-id-2530' visibility='default' filepath='include/linux/rcu_sync.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='rcu_sync_type' filepath='include/linux/rcu_sync.h' line='29' column='1' id='type-id-2530'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='RCU_SYNC' value='0'/>
+        <enumerator name='RCU_SCHED_SYNC' value='1'/>
+        <enumerator name='RCU_BH_SYNC' value='2'/>
+      </enum-decl>
+      <class-decl name='rcuwait' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/rcuwait.h' line='20' column='1' id='type-id-2529'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='task' type-id='type-id-431' visibility='default' filepath='include/linux/rcuwait.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='uuid_t' type-id='type-id-2531' filepath='include/linux/uuid.h' line='26' column='1' id='type-id-1363'/>
+      <class-decl name='__anonymous_struct__70' size-in-bits='128' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-1363' visibility='default' filepath='include/linux/uuid.h' line='24' column='1' id='type-id-2531'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='b' type-id='type-id-938' visibility='default' filepath='include/linux/uuid.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='fmode_t' type-id='type-id-5' filepath='include/linux/types.h' line='160' column='1' id='type-id-876'/>
+      <class-decl name='dentry_operations' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/dcache.h' line='134' column='1' id='type-id-2532'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='d_revalidate' type-id='type-id-2533' visibility='default' filepath='include/linux/dcache.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='d_weak_revalidate' type-id='type-id-2533' visibility='default' filepath='include/linux/dcache.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='d_hash' type-id='type-id-2534' visibility='default' filepath='include/linux/dcache.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='d_compare' type-id='type-id-2535' visibility='default' filepath='include/linux/dcache.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='d_delete' type-id='type-id-2536' visibility='default' filepath='include/linux/dcache.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='d_init' type-id='type-id-2537' visibility='default' filepath='include/linux/dcache.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='d_release' type-id='type-id-2538' visibility='default' filepath='include/linux/dcache.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='d_prune' type-id='type-id-2538' visibility='default' filepath='include/linux/dcache.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='d_iput' type-id='type-id-2539' visibility='default' filepath='include/linux/dcache.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='d_dname' type-id='type-id-2540' visibility='default' filepath='include/linux/dcache.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='d_automount' type-id='type-id-2541' visibility='default' filepath='include/linux/dcache.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='d_manage' type-id='type-id-2542' visibility='default' filepath='include/linux/dcache.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='d_real' type-id='type-id-2543' visibility='default' filepath='include/linux/dcache.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='d_canonical_path' type-id='type-id-2544' visibility='default' filepath='include/linux/dcache.h' line='149' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='shrinker' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/shrinker.h' line='60' column='1' id='type-id-1364'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count_objects' type-id='type-id-2545' visibility='default' filepath='include/linux/shrinker.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='scan_objects' type-id='type-id-2545' visibility='default' filepath='include/linux/shrinker.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='batch' type-id='type-id-192' visibility='default' filepath='include/linux/shrinker.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='seeks' type-id='type-id-17' visibility='default' filepath='include/linux/shrinker.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='flags' type-id='type-id-5' visibility='default' filepath='include/linux/shrinker.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/shrinker.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='id' type-id='type-id-17' visibility='default' filepath='include/linux/shrinker.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='nr_deferred' type-id='type-id-2546' visibility='default' filepath='include/linux/shrinker.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='list_lru' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/list_lru.h' line='52' column='1' id='type-id-1365'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='type-id-2547' visibility='default' filepath='include/linux/list_lru.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/list_lru.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='shrinker_id' type-id='type-id-17' visibility='default' filepath='include/linux/list_lru.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='memcg_aware' type-id='type-id-33' visibility='default' filepath='include/linux/list_lru.h' line='57' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='list_lru_node' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/list_lru.h' line='40' column='1' id='type-id-2548'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='include/linux/list_lru.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lru' type-id='type-id-2549' visibility='default' filepath='include/linux/list_lru.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='memcg_lrus' type-id='type-id-2550' visibility='default' filepath='include/linux/list_lru.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='nr_items' type-id='type-id-192' visibility='default' filepath='include/linux/list_lru.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='list_lru_one' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/list_lru.h' line='28' column='1' id='type-id-2549'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/list_lru.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nr_items' type-id='type-id-192' visibility='default' filepath='include/linux/list_lru.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='list_lru_memcg' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/list_lru.h' line='34' column='1' id='type-id-2551'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/linux/list_lru.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lru' type-id='type-id-1145' visibility='default' filepath='include/linux/list_lru.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='file_operations' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1760' column='1' id='type-id-2552'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='include/linux/fs.h' line='1761' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='llseek' type-id='type-id-2553' visibility='default' filepath='include/linux/fs.h' line='1762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='read' type-id='type-id-2554' visibility='default' filepath='include/linux/fs.h' line='1763' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='write' type-id='type-id-2555' visibility='default' filepath='include/linux/fs.h' line='1764' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='read_iter' type-id='type-id-2103' visibility='default' filepath='include/linux/fs.h' line='1765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='write_iter' type-id='type-id-2103' visibility='default' filepath='include/linux/fs.h' line='1766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='iterate' type-id='type-id-2556' visibility='default' filepath='include/linux/fs.h' line='1767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='iterate_shared' type-id='type-id-2556' visibility='default' filepath='include/linux/fs.h' line='1768' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='poll' type-id='type-id-2557' visibility='default' filepath='include/linux/fs.h' line='1769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='unlocked_ioctl' type-id='type-id-2558' visibility='default' filepath='include/linux/fs.h' line='1770' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='compat_ioctl' type-id='type-id-2558' visibility='default' filepath='include/linux/fs.h' line='1771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='mmap' type-id='type-id-2559' visibility='default' filepath='include/linux/fs.h' line='1772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mmap_supported_flags' type-id='type-id-16' visibility='default' filepath='include/linux/fs.h' line='1773' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='open' type-id='type-id-2560' visibility='default' filepath='include/linux/fs.h' line='1774' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='flush' type-id='type-id-2561' visibility='default' filepath='include/linux/fs.h' line='1775' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='release' type-id='type-id-2560' visibility='default' filepath='include/linux/fs.h' line='1776' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='fsync' type-id='type-id-2562' visibility='default' filepath='include/linux/fs.h' line='1777' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='fasync' type-id='type-id-2563' visibility='default' filepath='include/linux/fs.h' line='1778' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='lock' type-id='type-id-2564' visibility='default' filepath='include/linux/fs.h' line='1779' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='sendpage' type-id='type-id-2565' visibility='default' filepath='include/linux/fs.h' line='1780' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='get_unmapped_area' type-id='type-id-1484' visibility='default' filepath='include/linux/fs.h' line='1781' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='check_flags' type-id='type-id-2566' visibility='default' filepath='include/linux/fs.h' line='1782' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='flock' type-id='type-id-2564' visibility='default' filepath='include/linux/fs.h' line='1783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='splice_write' type-id='type-id-2567' visibility='default' filepath='include/linux/fs.h' line='1784' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='splice_read' type-id='type-id-2568' visibility='default' filepath='include/linux/fs.h' line='1785' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='setlease' type-id='type-id-2569' visibility='default' filepath='include/linux/fs.h' line='1786' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='fallocate' type-id='type-id-2570' visibility='default' filepath='include/linux/fs.h' line='1787' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='show_fdinfo' type-id='type-id-2571' visibility='default' filepath='include/linux/fs.h' line='1789' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='copy_file_range' type-id='type-id-2572' visibility='default' filepath='include/linux/fs.h' line='1793' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='clone_file_range' type-id='type-id-2573' visibility='default' filepath='include/linux/fs.h' line='1795' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='dedupe_file_range' type-id='type-id-2573' visibility='default' filepath='include/linux/fs.h' line='1797' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='fadvise' type-id='type-id-2562' visibility='default' filepath='include/linux/fs.h' line='1799' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dir_context' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1725' column='1' id='type-id-2574'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='actor' type-id='type-id-2575' visibility='default' filepath='include/linux/fs.h' line='1726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pos' type-id='type-id-763' visibility='default' filepath='include/linux/fs.h' line='1727' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='filldir_t' type-id='type-id-2576' filepath='include/linux/fs.h' line='1722' column='1' id='type-id-2575'/>
+      <typedef-decl name='fl_owner_t' type-id='type-id-15' filepath='include/linux/fs.h' line='986' column='1' id='type-id-2577'/>
+      <class-decl name='file_lock' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1042' column='1' id='type-id-2578'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fl_next' type-id='type-id-2579' visibility='default' filepath='include/linux/fs.h' line='1043' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fl_list' type-id='type-id-20' visibility='default' filepath='include/linux/fs.h' line='1044' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fl_link' type-id='type-id-520' visibility='default' filepath='include/linux/fs.h' line='1045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fl_block' type-id='type-id-20' visibility='default' filepath='include/linux/fs.h' line='1046' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fl_owner' type-id='type-id-2577' visibility='default' filepath='include/linux/fs.h' line='1047' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='fl_flags' type-id='type-id-5' visibility='default' filepath='include/linux/fs.h' line='1048' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='fl_type' type-id='type-id-216' visibility='default' filepath='include/linux/fs.h' line='1049' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='fl_pid' type-id='type-id-5' visibility='default' filepath='include/linux/fs.h' line='1050' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='fl_link_cpu' type-id='type-id-17' visibility='default' filepath='include/linux/fs.h' line='1051' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fl_wait' type-id='type-id-225' visibility='default' filepath='include/linux/fs.h' line='1052' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='fl_file' type-id='type-id-83' visibility='default' filepath='include/linux/fs.h' line='1053' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='fl_start' type-id='type-id-763' visibility='default' filepath='include/linux/fs.h' line='1054' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='fl_end' type-id='type-id-763' visibility='default' filepath='include/linux/fs.h' line='1055' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='fl_fasync' type-id='type-id-254' visibility='default' filepath='include/linux/fs.h' line='1057' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='fl_break_time' type-id='type-id-16' visibility='default' filepath='include/linux/fs.h' line='1059' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='fl_downgrade_time' type-id='type-id-16' visibility='default' filepath='include/linux/fs.h' line='1060' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='fl_ops' type-id='type-id-2580' visibility='default' filepath='include/linux/fs.h' line='1062' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='fl_lmops' type-id='type-id-2581' visibility='default' filepath='include/linux/fs.h' line='1063' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='fl_u' type-id='type-id-2582' visibility='default' filepath='include/linux/fs.h' line='1071' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='file_lock_operations' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='990' column='1' id='type-id-2583'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fl_copy_lock' type-id='type-id-2584' visibility='default' filepath='include/linux/fs.h' line='991' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fl_release_private' type-id='type-id-2585' visibility='default' filepath='include/linux/fs.h' line='992' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='lock_manager_operations' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='995' column='1' id='type-id-2586'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lm_compare_owner' type-id='type-id-2587' visibility='default' filepath='include/linux/fs.h' line='996' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lm_owner_key' type-id='type-id-2588' visibility='default' filepath='include/linux/fs.h' line='997' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lm_get_owner' type-id='type-id-2589' visibility='default' filepath='include/linux/fs.h' line='998' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='lm_put_owner' type-id='type-id-2590' visibility='default' filepath='include/linux/fs.h' line='999' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lm_notify' type-id='type-id-2585' visibility='default' filepath='include/linux/fs.h' line='1000' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='lm_grant' type-id='type-id-2591' visibility='default' filepath='include/linux/fs.h' line='1001' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='lm_break' type-id='type-id-2592' visibility='default' filepath='include/linux/fs.h' line='1002' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='lm_change' type-id='type-id-2593' visibility='default' filepath='include/linux/fs.h' line='1003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='lm_setup' type-id='type-id-2594' visibility='default' filepath='include/linux/fs.h' line='1004' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nfs_lock_info' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/nfs_fs_i.h' line='10' column='1' id='type-id-2595'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='type-id-7' visibility='default' filepath='include/linux/nfs_fs_i.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='type-id-2596' visibility='default' filepath='include/linux/nfs_fs_i.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/nfs_fs_i.h' line='13' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nfs4_lock_info' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/nfs_fs_i.h' line='17' column='1' id='type-id-2597'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='type-id-2598' visibility='default' filepath='include/linux/nfs_fs_i.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__71' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='1067' column='1' id='type-id-2599'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='link' type-id='type-id-20' visibility='default' filepath='include/linux/fs.h' line='1068' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='state' type-id='type-id-17' visibility='default' filepath='include/linux/fs.h' line='1069' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='file_lock_context' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1074' column='1' id='type-id-2600'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flc_lock' type-id='type-id-247' visibility='default' filepath='include/linux/fs.h' line='1075' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flc_flock' type-id='type-id-20' visibility='default' filepath='include/linux/fs.h' line='1076' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flc_posix' type-id='type-id-20' visibility='default' filepath='include/linux/fs.h' line='1077' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='flc_lease' type-id='type-id-20' visibility='default' filepath='include/linux/fs.h' line='1078' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='lockref' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/lockref.h' line='25' column='1' id='type-id-1288'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='type-id-2601' visibility='default' filepath='include/linux/lockref.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__40' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/lockref.h' line='26' column='1' id='type-id-2601'>
+        <data-member access='private'>
+          <var-decl name='lock_count' type-id='type-id-100' visibility='default' filepath='include/linux/lockref.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='type-id-2602' visibility='default' filepath='include/linux/lockref.h' line='30' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__72' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/lockref.h' line='30' column='1' id='type-id-2602'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='include/linux/lockref.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='type-id-17' visibility='default' filepath='include/linux/lockref.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='rw_hint' filepath='include/linux/fs.h' line='292' column='1' id='type-id-1277'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='WRITE_LIFE_NOT_SET' value='0'/>
+        <enumerator name='WRITE_LIFE_NONE' value='1'/>
+        <enumerator name='WRITE_LIFE_SHORT' value='2'/>
+        <enumerator name='WRITE_LIFE_MEDIUM' value='3'/>
+        <enumerator name='WRITE_LIFE_LONG' value='4'/>
+        <enumerator name='WRITE_LIFE_EXTREME' value='5'/>
+      </enum-decl>
+      <class-decl name='fown_struct' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='866' column='1' id='type-id-1278'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='type-id-885' visibility='default' filepath='include/linux/fs.h' line='867' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pid' type-id='type-id-251' visibility='default' filepath='include/linux/fs.h' line='868' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pid_type' type-id='type-id-2603' visibility='default' filepath='include/linux/fs.h' line='869' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='uid' type-id='type-id-42' visibility='default' filepath='include/linux/fs.h' line='870' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='euid' type-id='type-id-42' visibility='default' filepath='include/linux/fs.h' line='870' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='signum' type-id='type-id-17' visibility='default' filepath='include/linux/fs.h' line='871' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='pid_type' filepath='include/linux/pid.h' line='8' column='1' id='type-id-2603'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='PIDTYPE_PID' value='0'/>
+        <enumerator name='PIDTYPE_TGID' value='1'/>
+        <enumerator name='PIDTYPE_PGID' value='2'/>
+        <enumerator name='PIDTYPE_SID' value='3'/>
+        <enumerator name='PIDTYPE_MAX' value='4'/>
+      </enum-decl>
+      <class-decl name='file_ra_state' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='877' column='1' id='type-id-1280'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='type-id-16' visibility='default' filepath='include/linux/fs.h' line='878' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='type-id-5' visibility='default' filepath='include/linux/fs.h' line='879' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='async_size' type-id='type-id-5' visibility='default' filepath='include/linux/fs.h' line='880' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ra_pages' type-id='type-id-5' visibility='default' filepath='include/linux/fs.h' line='883' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='mmap_miss' type-id='type-id-5' visibility='default' filepath='include/linux/fs.h' line='884' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='prev_pos' type-id='type-id-763' visibility='default' filepath='include/linux/fs.h' line='885' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_insn' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='64' column='1' id='type-id-955'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='code' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/bpf.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='dst_reg' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/bpf.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='src_reg' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/bpf.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='off' type-id='type-id-2203' visibility='default' filepath='include/uapi/linux/bpf.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='imm' type-id='type-id-653' visibility='default' filepath='include/uapi/linux/bpf.h' line='69' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='bpf_map_type' filepath='include/uapi/linux/bpf.h' line='108' column='1' id='type-id-1258'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='BPF_MAP_TYPE_UNSPEC' value='0'/>
+        <enumerator name='BPF_MAP_TYPE_HASH' value='1'/>
+        <enumerator name='BPF_MAP_TYPE_ARRAY' value='2'/>
+        <enumerator name='BPF_MAP_TYPE_PROG_ARRAY' value='3'/>
+        <enumerator name='BPF_MAP_TYPE_PERF_EVENT_ARRAY' value='4'/>
+        <enumerator name='BPF_MAP_TYPE_PERCPU_HASH' value='5'/>
+        <enumerator name='BPF_MAP_TYPE_PERCPU_ARRAY' value='6'/>
+        <enumerator name='BPF_MAP_TYPE_STACK_TRACE' value='7'/>
+        <enumerator name='BPF_MAP_TYPE_CGROUP_ARRAY' value='8'/>
+        <enumerator name='BPF_MAP_TYPE_LRU_HASH' value='9'/>
+        <enumerator name='BPF_MAP_TYPE_LRU_PERCPU_HASH' value='10'/>
+        <enumerator name='BPF_MAP_TYPE_LPM_TRIE' value='11'/>
+        <enumerator name='BPF_MAP_TYPE_ARRAY_OF_MAPS' value='12'/>
+        <enumerator name='BPF_MAP_TYPE_HASH_OF_MAPS' value='13'/>
+        <enumerator name='BPF_MAP_TYPE_DEVMAP' value='14'/>
+        <enumerator name='BPF_MAP_TYPE_SOCKMAP' value='15'/>
+        <enumerator name='BPF_MAP_TYPE_CPUMAP' value='16'/>
+        <enumerator name='BPF_MAP_TYPE_XSKMAP' value='17'/>
+        <enumerator name='BPF_MAP_TYPE_SOCKHASH' value='18'/>
+        <enumerator name='BPF_MAP_TYPE_CGROUP_STORAGE' value='19'/>
+        <enumerator name='BPF_MAP_TYPE_REUSEPORT_SOCKARRAY' value='20'/>
+      </enum-decl>
+      <class-decl name='bpf_prog_offload' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='264' column='1' id='type-id-2604'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prog' type-id='type-id-1230' visibility='default' filepath='include/linux/bpf.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='netdev' type-id='type-id-1650' visibility='default' filepath='include/linux/bpf.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev_priv' type-id='type-id-15' visibility='default' filepath='include/linux/bpf.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='offloads' type-id='type-id-20' visibility='default' filepath='include/linux/bpf.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dev_state' type-id='type-id-33' visibility='default' filepath='include/linux/bpf.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dev_ops' type-id='type-id-1827' visibility='default' filepath='include/linux/bpf.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='jited_image' type-id='type-id-15' visibility='default' filepath='include/linux/bpf.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='jited_len' type-id='type-id-7' visibility='default' filepath='include/linux/bpf.h' line='272' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sock_fprog_kern' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/filter.h' line='464' column='1' id='type-id-2605'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='len' type-id='type-id-688' visibility='default' filepath='include/linux/filter.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='filter' type-id='type-id-2606' visibility='default' filepath='include/linux/filter.h' line='466' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sock_filter' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/filter.h' line='24' column='1' id='type-id-1171'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='code' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/filter.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='jt' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/filter.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='jf' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/filter.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='k' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/filter.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-2466' size-in-bits='64' id='type-id-2464'/>
+      <pointer-type-def type-id='type-id-1963' size-in-bits='64' id='type-id-1687'/>
+      <pointer-type-def type-id='type-id-2607' size-in-bits='64' id='type-id-1984'/>
+      <pointer-type-def type-id='type-id-1687' size-in-bits='64' id='type-id-2608'/>
+      <pointer-type-def type-id='type-id-1971' size-in-bits='64' id='type-id-1972'/>
+      <pointer-type-def type-id='type-id-2371' size-in-bits='64' id='type-id-2369'/>
+      <pointer-type-def type-id='type-id-2368' size-in-bits='64' id='type-id-2366'/>
+      <pointer-type-def type-id='type-id-1307' size-in-bits='64' id='type-id-1281'/>
+      <pointer-type-def type-id='type-id-977' size-in-bits='64' id='type-id-1480'/>
+      <pointer-type-def type-id='type-id-978' size-in-bits='64' id='type-id-1634'/>
+      <pointer-type-def type-id='type-id-115' size-in-bits='64' id='type-id-2546'/>
+      <pointer-type-def type-id='type-id-619' size-in-bits='64' id='type-id-2609'/>
+      <pointer-type-def type-id='type-id-2609' size-in-bits='64' id='type-id-1414'/>
+      <pointer-type-def type-id='type-id-979' size-in-bits='64' id='type-id-1520'/>
+      <pointer-type-def type-id='type-id-980' size-in-bits='64' id='type-id-2356'/>
+      <pointer-type-def type-id='type-id-981' size-in-bits='64' id='type-id-1359'/>
+      <pointer-type-def type-id='type-id-982' size-in-bits='64' id='type-id-1305'/>
+      <pointer-type-def type-id='type-id-2039' size-in-bits='64' id='type-id-2610'/>
+      <pointer-type-def type-id='type-id-2610' size-in-bits='64' id='type-id-2038'/>
+      <pointer-type-def type-id='type-id-983' size-in-bits='64' id='type-id-1525'/>
+      <pointer-type-def type-id='type-id-985' size-in-bits='64' id='type-id-1526'/>
+      <pointer-type-def type-id='type-id-2522' size-in-bits='64' id='type-id-875'/>
+      <pointer-type-def type-id='type-id-33' size-in-bits='64' id='type-id-2611'/>
+      <pointer-type-def type-id='type-id-1241' size-in-bits='64' id='type-id-2612'/>
+      <pointer-type-def type-id='type-id-2331' size-in-bits='64' id='type-id-2330'/>
+      <pointer-type-def type-id='type-id-986' size-in-bits='64' id='type-id-2333'/>
+      <pointer-type-def type-id='type-id-955' size-in-bits='64' id='type-id-2613'/>
+      <pointer-type-def type-id='type-id-1256' size-in-bits='64' id='type-id-1232'/>
+      <pointer-type-def type-id='type-id-2614' size-in-bits='64' id='type-id-1262'/>
+      <pointer-type-def type-id='type-id-1232' size-in-bits='64' id='type-id-1229'/>
+      <pointer-type-def type-id='type-id-1830' size-in-bits='64' id='type-id-1821'/>
+      <pointer-type-def type-id='type-id-1218' size-in-bits='64' id='type-id-1230'/>
+      <pointer-type-def type-id='type-id-1230' size-in-bits='64' id='type-id-1226'/>
+      <pointer-type-def type-id='type-id-2329' size-in-bits='64' id='type-id-747'/>
+      <pointer-type-def type-id='type-id-1225' size-in-bits='64' id='type-id-1221'/>
+      <pointer-type-def type-id='type-id-2604' size-in-bits='64' id='type-id-1233'/>
+      <pointer-type-def type-id='type-id-2335' size-in-bits='64' id='type-id-2332'/>
+      <pointer-type-def type-id='type-id-987' size-in-bits='64' id='type-id-2615'/>
+      <pointer-type-def type-id='type-id-988' size-in-bits='64' id='type-id-1259'/>
+      <pointer-type-def type-id='type-id-990' size-in-bits='64' id='type-id-2260'/>
+      <pointer-type-def type-id='type-id-2463' size-in-bits='64' id='type-id-1383'/>
+      <pointer-type-def type-id='type-id-2044' size-in-bits='64' id='type-id-2012'/>
+      <pointer-type-def type-id='type-id-385' size-in-bits='64' id='type-id-91'/>
+      <pointer-type-def type-id='type-id-991' size-in-bits='64' id='type-id-2305'/>
+      <pointer-type-def type-id='type-id-992' size-in-bits='64' id='type-id-1300'/>
+      <pointer-type-def type-id='type-id-993' size-in-bits='64' id='type-id-1546'/>
+      <pointer-type-def type-id='type-id-2347' size-in-bits='64' id='type-id-2346'/>
+      <pointer-type-def type-id='type-id-2312' size-in-bits='64' id='type-id-2310'/>
+      <pointer-type-def type-id='type-id-2308' size-in-bits='64' id='type-id-1646'/>
+      <pointer-type-def type-id='type-id-2318' size-in-bits='64' id='type-id-2313'/>
+      <pointer-type-def type-id='type-id-2319' size-in-bits='64' id='type-id-2314'/>
+      <pointer-type-def type-id='type-id-2336' size-in-bits='64' id='type-id-2311'/>
+      <pointer-type-def type-id='type-id-424' size-in-bits='64' id='type-id-365'/>
+      <pointer-type-def type-id='type-id-2616' size-in-bits='64' id='type-id-2337'/>
+      <pointer-type-def type-id='type-id-994' size-in-bits='64' id='type-id-2617'/>
+      <pointer-type-def type-id='type-id-2618' size-in-bits='64' id='type-id-2540'/>
+      <pointer-type-def type-id='type-id-2619' size-in-bits='64' id='type-id-2182'/>
+      <pointer-type-def type-id='type-id-2620' size-in-bits='64' id='type-id-2033'/>
+      <pointer-type-def type-id='type-id-1791' size-in-bits='64' id='type-id-1782'/>
+      <pointer-type-def type-id='type-id-2181' size-in-bits='64' id='type-id-2027'/>
+      <pointer-type-def type-id='type-id-995' size-in-bits='64' id='type-id-2022'/>
+      <pointer-type-def type-id='type-id-2396' size-in-bits='64' id='type-id-1533'/>
+      <pointer-type-def type-id='type-id-1574' size-in-bits='64' id='type-id-1571'/>
+      <pointer-type-def type-id='type-id-1608' size-in-bits='64' id='type-id-1394'/>
+      <qualified-type-def type-id='type-id-1981' const='yes' id='type-id-2621'/>
+      <pointer-type-def type-id='type-id-2621' size-in-bits='64' id='type-id-1973'/>
+      <qualified-type-def type-id='type-id-1971' const='yes' id='type-id-2622'/>
+      <pointer-type-def type-id='type-id-2622' size-in-bits='64' id='type-id-1966'/>
+      <qualified-type-def type-id='type-id-976' const='yes' id='type-id-2623'/>
+      <pointer-type-def type-id='type-id-2623' size-in-bits='64' id='type-id-2052'/>
+      <qualified-type-def type-id='type-id-2091' const='yes' id='type-id-2624'/>
+      <pointer-type-def type-id='type-id-2624' size-in-bits='64' id='type-id-2090'/>
+      <qualified-type-def type-id='type-id-2035' const='yes' id='type-id-2625'/>
+      <pointer-type-def type-id='type-id-2625' size-in-bits='64' id='type-id-894'/>
+      <pointer-type-def type-id='type-id-894' size-in-bits='64' id='type-id-665'/>
+      <qualified-type-def type-id='type-id-984' const='yes' id='type-id-2626'/>
+      <pointer-type-def type-id='type-id-2626' size-in-bits='64' id='type-id-2119'/>
+      <qualified-type-def type-id='type-id-1241' const='yes' id='type-id-2627'/>
+      <pointer-type-def type-id='type-id-2627' size-in-bits='64' id='type-id-2628'/>
+      <qualified-type-def type-id='type-id-955' const='yes' id='type-id-2629'/>
+      <pointer-type-def type-id='type-id-2629' size-in-bits='64' id='type-id-2630'/>
+      <qualified-type-def type-id='type-id-1256' const='yes' id='type-id-2631'/>
+      <pointer-type-def type-id='type-id-2631' size-in-bits='64' id='type-id-2632'/>
+      <qualified-type-def type-id='type-id-1832' const='yes' id='type-id-2633'/>
+      <pointer-type-def type-id='type-id-2633' size-in-bits='64' id='type-id-1831'/>
+      <qualified-type-def type-id='type-id-1260' const='yes' id='type-id-2634'/>
+      <pointer-type-def type-id='type-id-2634' size-in-bits='64' id='type-id-1257'/>
+      <qualified-type-def type-id='type-id-1218' const='yes' id='type-id-2635'/>
+      <pointer-type-def type-id='type-id-2635' size-in-bits='64' id='type-id-2636'/>
+      <qualified-type-def type-id='type-id-1828' const='yes' id='type-id-2637'/>
+      <pointer-type-def type-id='type-id-2637' size-in-bits='64' id='type-id-1827'/>
+      <qualified-type-def type-id='type-id-1239' const='yes' id='type-id-2638'/>
+      <pointer-type-def type-id='type-id-2638' size-in-bits='64' id='type-id-1228'/>
+      <qualified-type-def type-id='type-id-989' const='yes' id='type-id-2639'/>
+      <pointer-type-def type-id='type-id-2639' size-in-bits='64' id='type-id-2640'/>
+      <pointer-type-def type-id='type-id-2641' size-in-bits='64' id='type-id-1317'/>
+      <pointer-type-def type-id='type-id-2642' size-in-bits='64' id='type-id-2643'/>
+      <qualified-type-def type-id='type-id-2643' const='yes' id='type-id-1408'/>
+      <pointer-type-def type-id='type-id-2644' size-in-bits='64' id='type-id-1476'/>
+      <pointer-type-def type-id='type-id-4' size-in-bits='64' id='type-id-1389'/>
+      <qualified-type-def type-id='type-id-1615' const='yes' id='type-id-2645'/>
+      <pointer-type-def type-id='type-id-2645' size-in-bits='64' id='type-id-1279'/>
+      <qualified-type-def type-id='type-id-1285' const='yes' id='type-id-2646'/>
+      <pointer-type-def type-id='type-id-2646' size-in-bits='64' id='type-id-2647'/>
+      <qualified-type-def type-id='type-id-2532' const='yes' id='type-id-2648'/>
+      <pointer-type-def type-id='type-id-2648' size-in-bits='64' id='type-id-1289'/>
+      <qualified-type-def type-id='type-id-2042' const='yes' id='type-id-2649'/>
+      <pointer-type-def type-id='type-id-2649' size-in-bits='64' id='type-id-2034'/>
+      <qualified-type-def type-id='type-id-388' const='yes' id='type-id-2650'/>
+      <pointer-type-def type-id='type-id-2650' size-in-bits='64' id='type-id-2651'/>
+      <qualified-type-def type-id='type-id-2031' const='yes' id='type-id-2652'/>
+      <pointer-type-def type-id='type-id-2652' size-in-bits='64' id='type-id-2011'/>
+      <qualified-type-def type-id='type-id-2068' const='yes' id='type-id-2653'/>
+      <pointer-type-def type-id='type-id-2653' size-in-bits='64' id='type-id-2019'/>
+      <qualified-type-def type-id='type-id-2504' const='yes' id='type-id-2654'/>
+      <pointer-type-def type-id='type-id-2654' size-in-bits='64' id='type-id-1351'/>
+      <qualified-type-def type-id='type-id-1003' const='yes' id='type-id-2655'/>
+      <pointer-type-def type-id='type-id-2655' size-in-bits='64' id='type-id-2656'/>
+      <qualified-type-def type-id='type-id-1907' const='yes' id='type-id-2657'/>
+      <pointer-type-def type-id='type-id-2657' size-in-bits='64' id='type-id-2658'/>
+      <qualified-type-def type-id='type-id-1839' const='yes' id='type-id-2659'/>
+      <pointer-type-def type-id='type-id-2659' size-in-bits='64' id='type-id-1673'/>
+      <qualified-type-def type-id='type-id-1906' const='yes' id='type-id-2660'/>
+      <pointer-type-def type-id='type-id-2660' size-in-bits='64' id='type-id-2661'/>
+      <qualified-type-def type-id='type-id-1004' const='yes' id='type-id-2662'/>
+      <pointer-type-def type-id='type-id-2662' size-in-bits='64' id='type-id-1353'/>
+      <qualified-type-def type-id='type-id-1274' const='yes' id='type-id-2663'/>
+      <pointer-type-def type-id='type-id-2663' size-in-bits='64' id='type-id-1449'/>
+      <qualified-type-def type-id='type-id-2583' const='yes' id='type-id-2664'/>
+      <pointer-type-def type-id='type-id-2664' size-in-bits='64' id='type-id-2580'/>
+      <qualified-type-def type-id='type-id-2552' const='yes' id='type-id-2665'/>
+      <pointer-type-def type-id='type-id-2665' size-in-bits='64' id='type-id-268'/>
+      <qualified-type-def type-id='type-id-1013' const='yes' id='type-id-2666'/>
+      <pointer-type-def type-id='type-id-2666' size-in-bits='64' id='type-id-1355'/>
+      <qualified-type-def type-id='type-id-1016' const='yes' id='type-id-2667'/>
+      <pointer-type-def type-id='type-id-2667' size-in-bits='64' id='type-id-1357'/>
+      <qualified-type-def type-id='type-id-2162' const='yes' id='type-id-2668'/>
+      <pointer-type-def type-id='type-id-2668' size-in-bits='64' id='type-id-2180'/>
+      <qualified-type-def type-id='type-id-2164' const='yes' id='type-id-2669'/>
+      <pointer-type-def type-id='type-id-2669' size-in-bits='64' id='type-id-2163'/>
+      <qualified-type-def type-id='type-id-1912' const='yes' id='type-id-2670'/>
+      <pointer-type-def type-id='type-id-2670' size-in-bits='64' id='type-id-1675'/>
+      <qualified-type-def type-id='type-id-1297' const='yes' id='type-id-2671'/>
+      <pointer-type-def type-id='type-id-2671' size-in-bits='64' id='type-id-2672'/>
+      <qualified-type-def type-id='type-id-1315' const='yes' id='type-id-2673'/>
+      <pointer-type-def type-id='type-id-2673' size-in-bits='64' id='type-id-1302'/>
+      <qualified-type-def type-id='type-id-1026' const='yes' id='type-id-2674'/>
+      <pointer-type-def type-id='type-id-2674' size-in-bits='64' id='type-id-2047'/>
+      <qualified-type-def type-id='type-id-2120' const='yes' id='type-id-2675'/>
+      <pointer-type-def type-id='type-id-2675' size-in-bits='64' id='type-id-2117'/>
+      <qualified-type-def type-id='type-id-1032' const='yes' id='type-id-2676'/>
+      <pointer-type-def type-id='type-id-2676' size-in-bits='64' id='type-id-1670'/>
+      <qualified-type-def type-id='type-id-2440' const='yes' id='type-id-2677'/>
+      <pointer-type-def type-id='type-id-2677' size-in-bits='64' id='type-id-2678'/>
+      <qualified-type-def type-id='type-id-2444' const='yes' id='type-id-2679'/>
+      <pointer-type-def type-id='type-id-2679' size-in-bits='64' id='type-id-2441'/>
+      <qualified-type-def type-id='type-id-2437' const='yes' id='type-id-2680'/>
+      <pointer-type-def type-id='type-id-2680' size-in-bits='64' id='type-id-1375'/>
+      <qualified-type-def type-id='type-id-1459' const='yes' id='type-id-2681'/>
+      <pointer-type-def type-id='type-id-2681' size-in-bits='64' id='type-id-1457'/>
+      <qualified-type-def type-id='type-id-1283' const='yes' id='type-id-2682'/>
+      <pointer-type-def type-id='type-id-2682' size-in-bits='64' id='type-id-2683'/>
+      <qualified-type-def type-id='type-id-1036' const='yes' id='type-id-2684'/>
+      <pointer-type-def type-id='type-id-2684' size-in-bits='64' id='type-id-2685'/>
+      <qualified-type-def type-id='type-id-1421' const='yes' id='type-id-2686'/>
+      <pointer-type-def type-id='type-id-2686' size-in-bits='64' id='type-id-2184'/>
+      <pointer-type-def type-id='type-id-2687' size-in-bits='64' id='type-id-1415'/>
+      <qualified-type-def type-id='type-id-2450' const='yes' id='type-id-2688'/>
+      <pointer-type-def type-id='type-id-2688' size-in-bits='64' id='type-id-2448'/>
+      <qualified-type-def type-id='type-id-2449' const='yes' id='type-id-2689'/>
+      <pointer-type-def type-id='type-id-2689' size-in-bits='64' id='type-id-2447'/>
+      <qualified-type-def type-id='type-id-1406' const='yes' id='type-id-2690'/>
+      <pointer-type-def type-id='type-id-2690' size-in-bits='64' id='type-id-1399'/>
+      <qualified-type-def type-id='type-id-2121' const='yes' id='type-id-2691'/>
+      <pointer-type-def type-id='type-id-2691' size-in-bits='64' id='type-id-2118'/>
+      <qualified-type-def type-id='type-id-2586' const='yes' id='type-id-2692'/>
+      <pointer-type-def type-id='type-id-2692' size-in-bits='64' id='type-id-2581'/>
+      <qualified-type-def type-id='type-id-1049' const='yes' id='type-id-2693'/>
+      <pointer-type-def type-id='type-id-2693' size-in-bits='64' id='type-id-1674'/>
+      <qualified-type-def type-id='type-id-1051' const='yes' id='type-id-2694'/>
+      <pointer-type-def type-id='type-id-2694' size-in-bits='64' id='type-id-2695'/>
+      <qualified-type-def type-id='type-id-1665' const='yes' id='type-id-2696'/>
+      <pointer-type-def type-id='type-id-2696' size-in-bits='64' id='type-id-2697'/>
+      <qualified-type-def type-id='type-id-1700' const='yes' id='type-id-2698'/>
+      <pointer-type-def type-id='type-id-2698' size-in-bits='64' id='type-id-1672'/>
+      <qualified-type-def type-id='type-id-1057' const='yes' id='type-id-2699'/>
+      <pointer-type-def type-id='type-id-2699' size-in-bits='64' id='type-id-1117'/>
+      <qualified-type-def type-id='type-id-1058' const='yes' id='type-id-2700'/>
+      <pointer-type-def type-id='type-id-2700' size-in-bits='64' id='type-id-2285'/>
+      <qualified-type-def type-id='type-id-2202' const='yes' id='type-id-2701'/>
+      <pointer-type-def type-id='type-id-2701' size-in-bits='64' id='type-id-2188'/>
+      <qualified-type-def type-id='type-id-1805' const='yes' id='type-id-2702'/>
+      <pointer-type-def type-id='type-id-2702' size-in-bits='64' id='type-id-1808'/>
+      <qualified-type-def type-id='type-id-1814' const='yes' id='type-id-2703'/>
+      <pointer-type-def type-id='type-id-2703' size-in-bits='64' id='type-id-1811'/>
+      <qualified-type-def type-id='type-id-1061' const='yes' id='type-id-2704'/>
+      <pointer-type-def type-id='type-id-2704' size-in-bits='64' id='type-id-2051'/>
+      <qualified-type-def type-id='type-id-2086' const='yes' id='type-id-2705'/>
+      <pointer-type-def type-id='type-id-2705' size-in-bits='64' id='type-id-2706'/>
+      <qualified-type-def type-id='type-id-1276' const='yes' id='type-id-2707'/>
+      <pointer-type-def type-id='type-id-2707' size-in-bits='64' id='type-id-2708'/>
+      <qualified-type-def type-id='type-id-2132' const='yes' id='type-id-2709'/>
+      <pointer-type-def type-id='type-id-2709' size-in-bits='64' id='type-id-2131'/>
+      <qualified-type-def type-id='type-id-1072' const='yes' id='type-id-2710'/>
+      <pointer-type-def type-id='type-id-2710' size-in-bits='64' id='type-id-1589'/>
+      <qualified-type-def type-id='type-id-1287' const='yes' id='type-id-2711'/>
+      <pointer-type-def type-id='type-id-2711' size-in-bits='64' id='type-id-2712'/>
+      <qualified-type-def type-id='type-id-2527' const='yes' id='type-id-2713'/>
+      <pointer-type-def type-id='type-id-2713' size-in-bits='64' id='type-id-1119'/>
+      <qualified-type-def type-id='type-id-2512' const='yes' id='type-id-2714'/>
+      <pointer-type-def type-id='type-id-2714' size-in-bits='64' id='type-id-1352'/>
+      <qualified-type-def type-id='type-id-2187' const='yes' id='type-id-2715'/>
+      <pointer-type-def type-id='type-id-2715' size-in-bits='64' id='type-id-1694'/>
+      <qualified-type-def type-id='type-id-738' const='yes' id='type-id-2716'/>
+      <pointer-type-def type-id='type-id-2716' size-in-bits='64' id='type-id-1376'/>
+      <qualified-type-def type-id='type-id-1085' const='yes' id='type-id-2717'/>
+      <pointer-type-def type-id='type-id-2717' size-in-bits='64' id='type-id-1498'/>
+      <qualified-type-def type-id='type-id-1452' const='yes' id='type-id-2718'/>
+      <pointer-type-def type-id='type-id-2718' size-in-bits='64' id='type-id-1448'/>
+      <qualified-type-def type-id='type-id-1753' const='yes' id='type-id-2719'/>
+      <pointer-type-def type-id='type-id-2719' size-in-bits='64' id='type-id-2720'/>
+      <qualified-type-def type-id='type-id-2474' const='yes' id='type-id-2721'/>
+      <pointer-type-def type-id='type-id-2721' size-in-bits='64' id='type-id-1350'/>
+      <qualified-type-def type-id='type-id-1418' const='yes' id='type-id-2722'/>
+      <pointer-type-def type-id='type-id-2722' size-in-bits='64' id='type-id-1413'/>
+      <qualified-type-def type-id='type-id-1935' const='yes' id='type-id-2723'/>
+      <pointer-type-def type-id='type-id-2723' size-in-bits='64' id='type-id-1943'/>
+      <qualified-type-def type-id='type-id-1945' const='yes' id='type-id-2724'/>
+      <pointer-type-def type-id='type-id-2724' size-in-bits='64' id='type-id-1937'/>
+      <qualified-type-def type-id='type-id-1095' const='yes' id='type-id-2725'/>
+      <pointer-type-def type-id='type-id-2725' size-in-bits='64' id='type-id-2233'/>
+      <qualified-type-def type-id='type-id-688' const='yes' id='type-id-2442'/>
+      <qualified-type-def type-id='type-id-7' const='yes' id='type-id-2726'/>
+      <pointer-type-def type-id='type-id-2726' size-in-bits='64' id='type-id-2727'/>
+      <qualified-type-def type-id='type-id-214' const='yes' id='type-id-2728'/>
+      <pointer-type-def type-id='type-id-2728' size-in-bits='64' id='type-id-658'/>
+      <qualified-type-def type-id='type-id-216' const='yes' id='type-id-2729'/>
+      <pointer-type-def type-id='type-id-2729' size-in-bits='64' id='type-id-878'/>
+      <qualified-type-def type-id='type-id-5' const='yes' id='type-id-893'/>
+      <qualified-type-def type-id='type-id-16' const='yes' id='type-id-892'/>
+      <qualified-type-def type-id='type-id-1467' const='yes' id='type-id-2730'/>
+      <pointer-type-def type-id='type-id-2730' size-in-bits='64' id='type-id-1466'/>
+      <qualified-type-def type-id='type-id-1112' const='yes' id='type-id-2731'/>
+      <pointer-type-def type-id='type-id-2731' size-in-bits='64' id='type-id-2732'/>
+      <pointer-type-def type-id='type-id-2732' size-in-bits='64' id='type-id-1354'/>
+      <pointer-type-def type-id='type-id-2415' size-in-bits='64' id='type-id-1489'/>
+      <pointer-type-def type-id='type-id-2416' size-in-bits='64' id='type-id-2417'/>
+      <pointer-type-def type-id='type-id-996' size-in-bits='64' id='type-id-1686'/>
+      <pointer-type-def type-id='type-id-2309' size-in-bits='64' id='type-id-1531'/>
+      <pointer-type-def type-id='type-id-2291' size-in-bits='64' id='type-id-2286'/>
+      <pointer-type-def type-id='type-id-1593' size-in-bits='64' id='type-id-1599'/>
+      <pointer-type-def type-id='type-id-1613' size-in-bits='64' id='type-id-1600'/>
+      <pointer-type-def type-id='type-id-1602' size-in-bits='64' id='type-id-1596'/>
+      <pointer-type-def type-id='type-id-1594' size-in-bits='64' id='type-id-1585'/>
+      <pointer-type-def type-id='type-id-1607' size-in-bits='64' id='type-id-1604'/>
+      <pointer-type-def type-id='type-id-1609' size-in-bits='64' id='type-id-1597'/>
+      <pointer-type-def type-id='type-id-1584' size-in-bits='64' id='type-id-1598'/>
+      <pointer-type-def type-id='type-id-2733' size-in-bits='64' id='type-id-1610'/>
+      <pointer-type-def type-id='type-id-1337' size-in-bits='64' id='type-id-2734'/>
+      <pointer-type-def type-id='type-id-1285' size-in-bits='64' id='type-id-23'/>
+      <pointer-type-def type-id='type-id-2735' size-in-bits='64' id='type-id-2543'/>
+      <pointer-type-def type-id='type-id-2736' size-in-bits='64' id='type-id-1367'/>
+      <pointer-type-def type-id='type-id-2737' size-in-bits='64' id='type-id-1316'/>
+      <pointer-type-def type-id='type-id-2738' size-in-bits='64' id='type-id-1368'/>
+      <pointer-type-def type-id='type-id-1699' size-in-bits='64' id='type-id-1666'/>
+      <pointer-type-def type-id='type-id-2142' size-in-bits='64' id='type-id-2739'/>
+      <pointer-type-def type-id='type-id-997' size-in-bits='64' id='type-id-2018'/>
+      <pointer-type-def type-id='type-id-2066' size-in-bits='64' id='type-id-2016'/>
+      <pointer-type-def type-id='type-id-998' size-in-bits='64' id='type-id-2063'/>
+      <pointer-type-def type-id='type-id-388' size-in-bits='64' id='type-id-240'/>
+      <pointer-type-def type-id='type-id-2161' size-in-bits='64' id='type-id-2020'/>
+      <pointer-type-def type-id='type-id-2049' size-in-bits='64' id='type-id-2013'/>
+      <pointer-type-def type-id='type-id-999' size-in-bits='64' id='type-id-2024'/>
+      <pointer-type-def type-id='type-id-1000' size-in-bits='64' id='type-id-2010'/>
+      <pointer-type-def type-id='type-id-2574' size-in-bits='64' id='type-id-2740'/>
+      <pointer-type-def type-id='type-id-2083' size-in-bits='64' id='type-id-2741'/>
+      <pointer-type-def type-id='type-id-1001' size-in-bits='64' id='type-id-2021'/>
+      <pointer-type-def type-id='type-id-2494' size-in-bits='64' id='type-id-2742'/>
+      <pointer-type-def type-id='type-id-2743' size-in-bits='64' id='type-id-2506'/>
+      <pointer-type-def type-id='type-id-2742' size-in-bits='64' id='type-id-2744'/>
+      <pointer-type-def type-id='type-id-2745' size-in-bits='64' id='type-id-2491'/>
+      <pointer-type-def type-id='type-id-1002' size-in-bits='64' id='type-id-2053'/>
+      <pointer-type-def type-id='type-id-1003' size-in-bits='64' id='type-id-2746'/>
+      <pointer-type-def type-id='type-id-2747' size-in-bits='64' id='type-id-2278'/>
+      <pointer-type-def type-id='type-id-2748' size-in-bits='64' id='type-id-2273'/>
+      <pointer-type-def type-id='type-id-2269' size-in-bits='64' id='type-id-2749'/>
+      <pointer-type-def type-id='type-id-2456' size-in-bits='64' id='type-id-2455'/>
+      <pointer-type-def type-id='type-id-2750' size-in-bits='64' id='type-id-1553'/>
+      <pointer-type-def type-id='type-id-1901' size-in-bits='64' id='type-id-2751'/>
+      <pointer-type-def type-id='type-id-1877' size-in-bits='64' id='type-id-2752'/>
+      <pointer-type-def type-id='type-id-1882' size-in-bits='64' id='type-id-2753'/>
+      <pointer-type-def type-id='type-id-1878' size-in-bits='64' id='type-id-2754'/>
+      <pointer-type-def type-id='type-id-1902' size-in-bits='64' id='type-id-2755'/>
+      <pointer-type-def type-id='type-id-1905' size-in-bits='64' id='type-id-2756'/>
+      <pointer-type-def type-id='type-id-1881' size-in-bits='64' id='type-id-2757'/>
+      <pointer-type-def type-id='type-id-1911' size-in-bits='64' id='type-id-2758'/>
+      <pointer-type-def type-id='type-id-1900' size-in-bits='64' id='type-id-2759'/>
+      <pointer-type-def type-id='type-id-1907' size-in-bits='64' id='type-id-2760'/>
+      <pointer-type-def type-id='type-id-1904' size-in-bits='64' id='type-id-2761'/>
+      <pointer-type-def type-id='type-id-1884' size-in-bits='64' id='type-id-2762'/>
+      <pointer-type-def type-id='type-id-1879' size-in-bits='64' id='type-id-2763'/>
+      <pointer-type-def type-id='type-id-1883' size-in-bits='64' id='type-id-2764'/>
+      <pointer-type-def type-id='type-id-1888' size-in-bits='64' id='type-id-2765'/>
+      <pointer-type-def type-id='type-id-1887' size-in-bits='64' id='type-id-2766'/>
+      <pointer-type-def type-id='type-id-1885' size-in-bits='64' id='type-id-2767'/>
+      <pointer-type-def type-id='type-id-1903' size-in-bits='64' id='type-id-2768'/>
+      <pointer-type-def type-id='type-id-1880' size-in-bits='64' id='type-id-2769'/>
+      <pointer-type-def type-id='type-id-2451' size-in-bits='64' id='type-id-1379'/>
+      <pointer-type-def type-id='type-id-2124' size-in-bits='64' id='type-id-254'/>
+      <pointer-type-def type-id='type-id-1005' size-in-bits='64' id='type-id-2265'/>
+      <pointer-type-def type-id='type-id-1006' size-in-bits='64' id='type-id-2268'/>
+      <pointer-type-def type-id='type-id-1007' size-in-bits='64' id='type-id-2236'/>
+      <pointer-type-def type-id='type-id-1008' size-in-bits='64' id='type-id-2225'/>
+      <pointer-type-def type-id='type-id-1009' size-in-bits='64' id='type-id-2226'/>
+      <pointer-type-def type-id='type-id-1347' size-in-bits='64' id='type-id-1346'/>
+      <pointer-type-def type-id='type-id-1345' size-in-bits='64' id='type-id-2770'/>
+      <pointer-type-def type-id='type-id-1274' size-in-bits='64' id='type-id-83'/>
+      <pointer-type-def type-id='type-id-2578' size-in-bits='64' id='type-id-2579'/>
+      <pointer-type-def type-id='type-id-2579' size-in-bits='64' id='type-id-2771'/>
+      <pointer-type-def type-id='type-id-2600' size-in-bits='64' id='type-id-1306'/>
+      <pointer-type-def type-id='type-id-1366' size-in-bits='64' id='type-id-1349'/>
+      <pointer-type-def type-id='type-id-1010' size-in-bits='64' id='type-id-1515'/>
+      <pointer-type-def type-id='type-id-1793' size-in-bits='64' id='type-id-1783'/>
+      <pointer-type-def type-id='type-id-1795' size-in-bits='64' id='type-id-1784'/>
+      <pointer-type-def type-id='type-id-1797' size-in-bits='64' id='type-id-1785'/>
+      <pointer-type-def type-id='type-id-1011' size-in-bits='64' id='type-id-1514'/>
+      <pointer-type-def type-id='type-id-1012' size-in-bits='64' id='type-id-1309'/>
+      <pointer-type-def type-id='type-id-1014' size-in-bits='64' id='type-id-1308'/>
+      <pointer-type-def type-id='type-id-1015' size-in-bits='64' id='type-id-1310'/>
+      <pointer-type-def type-id='type-id-1017' size-in-bits='64' id='type-id-1534'/>
+      <pointer-type-def type-id='type-id-2179' size-in-bits='64' id='type-id-2772'/>
+      <pointer-type-def type-id='type-id-2162' size-in-bits='64' id='type-id-2025'/>
+      <pointer-type-def type-id='type-id-2773' size-in-bits='64' id='type-id-2172'/>
+      <pointer-type-def type-id='type-id-2774' size-in-bits='64' id='type-id-2174'/>
+      <pointer-type-def type-id='type-id-2775' size-in-bits='64' id='type-id-2173'/>
+      <pointer-type-def type-id='type-id-2776' size-in-bits='64' id='type-id-2165'/>
+      <pointer-type-def type-id='type-id-2178' size-in-bits='64' id='type-id-2777'/>
+      <pointer-type-def type-id='type-id-1018' size-in-bits='64' id='type-id-2524'/>
+      <pointer-type-def type-id='type-id-1997' size-in-bits='64' id='type-id-2778'/>
+      <pointer-type-def type-id='type-id-2002' size-in-bits='64' id='type-id-1933'/>
+      <pointer-type-def type-id='type-id-1944' size-in-bits='64' id='type-id-1934'/>
+      <pointer-type-def type-id='type-id-1640' size-in-bits='64' id='type-id-1616'/>
+      <pointer-type-def type-id='type-id-1019' size-in-bits='64' id='type-id-2523'/>
+      <pointer-type-def type-id='type-id-1918' size-in-bits='64' id='type-id-2779'/>
+      <pointer-type-def type-id='type-id-1286' size-in-bits='64' id='type-id-1293'/>
+      <pointer-type-def type-id='type-id-1293' size-in-bits='64' id='type-id-1294'/>
+      <pointer-type-def type-id='type-id-186' size-in-bits='64' id='type-id-746'/>
+      <pointer-type-def type-id='type-id-520' size-in-bits='64' id='type-id-97'/>
+      <pointer-type-def type-id='type-id-97' size-in-bits='64' id='type-id-1578'/>
+      <pointer-type-def type-id='type-id-2294' size-in-bits='64' id='type-id-2293'/>
+      <pointer-type-def type-id='type-id-2293' size-in-bits='64' id='type-id-2295'/>
+      <pointer-type-def type-id='type-id-681' size-in-bits='64' id='type-id-1558'/>
+      <pointer-type-def type-id='type-id-1127' size-in-bits='64' id='type-id-1554'/>
+      <pointer-type-def type-id='type-id-1561' size-in-bits='64' id='type-id-1556'/>
+      <pointer-type-def type-id='type-id-1339' size-in-bits='64' id='type-id-2780'/>
+      <pointer-type-def type-id='type-id-2218' size-in-bits='64' id='type-id-2209'/>
+      <pointer-type-def type-id='type-id-2219' size-in-bits='64' id='type-id-2210'/>
+      <pointer-type-def type-id='type-id-2220' size-in-bits='64' id='type-id-2211'/>
+      <pointer-type-def type-id='type-id-2221' size-in-bits='64' id='type-id-2212'/>
+      <pointer-type-def type-id='type-id-1803' size-in-bits='64' id='type-id-2781'/>
+      <pointer-type-def type-id='type-id-1804' size-in-bits='64' id='type-id-2782'/>
+      <pointer-type-def type-id='type-id-1777' size-in-bits='64' id='type-id-2783'/>
+      <pointer-type-def type-id='type-id-1773' size-in-bits='64' id='type-id-2784'/>
+      <pointer-type-def type-id='type-id-1020' size-in-bits='64' id='type-id-1678'/>
+      <pointer-type-def type-id='type-id-1021' size-in-bits='64' id='type-id-1679'/>
+      <pointer-type-def type-id='type-id-2244' size-in-bits='64' id='type-id-2785'/>
+      <pointer-type-def type-id='type-id-2240' size-in-bits='64' id='type-id-2238'/>
+      <pointer-type-def type-id='type-id-1022' size-in-bits='64' id='type-id-2261'/>
+      <pointer-type-def type-id='type-id-1023' size-in-bits='64' id='type-id-2228'/>
+      <pointer-type-def type-id='type-id-1297' size-in-bits='64' id='type-id-1129'/>
+      <pointer-type-def type-id='type-id-2786' size-in-bits='64' id='type-id-2475'/>
+      <pointer-type-def type-id='type-id-2787' size-in-bits='64' id='type-id-1380'/>
+      <pointer-type-def type-id='type-id-2788' size-in-bits='64' id='type-id-1978'/>
+      <pointer-type-def type-id='type-id-2789' size-in-bits='64' id='type-id-1974'/>
+      <pointer-type-def type-id='type-id-2790' size-in-bits='64' id='type-id-1977'/>
+      <pointer-type-def type-id='type-id-2791' size-in-bits='64' id='type-id-1987'/>
+      <pointer-type-def type-id='type-id-2792' size-in-bits='64' id='type-id-1976'/>
+      <pointer-type-def type-id='type-id-2793' size-in-bits='64' id='type-id-1988'/>
+      <pointer-type-def type-id='type-id-2794' size-in-bits='64' id='type-id-1983'/>
+      <pointer-type-def type-id='type-id-2795' size-in-bits='64' id='type-id-1993'/>
+      <pointer-type-def type-id='type-id-2796' size-in-bits='64' id='type-id-1992'/>
+      <pointer-type-def type-id='type-id-2797' size-in-bits='64' id='type-id-2108'/>
+      <pointer-type-def type-id='type-id-2798' size-in-bits='64' id='type-id-2104'/>
+      <pointer-type-def type-id='type-id-2799' size-in-bits='64' id='type-id-2094'/>
+      <pointer-type-def type-id='type-id-2800' size-in-bits='64' id='type-id-1261'/>
+      <pointer-type-def type-id='type-id-2801' size-in-bits='64' id='type-id-1268'/>
+      <pointer-type-def type-id='type-id-2802' size-in-bits='64' id='type-id-1265'/>
+      <pointer-type-def type-id='type-id-2803' size-in-bits='64' id='type-id-1267'/>
+      <pointer-type-def type-id='type-id-2804' size-in-bits='64' id='type-id-1835'/>
+      <pointer-type-def type-id='type-id-2805' size-in-bits='64' id='type-id-1833'/>
+      <pointer-type-def type-id='type-id-2806' size-in-bits='64' id='type-id-1834'/>
+      <pointer-type-def type-id='type-id-2807' size-in-bits='64' id='type-id-1240'/>
+      <pointer-type-def type-id='type-id-2808' size-in-bits='64' id='type-id-1829'/>
+      <pointer-type-def type-id='type-id-2809' size-in-bits='64' id='type-id-2338'/>
+      <pointer-type-def type-id='type-id-2810' size-in-bits='64' id='type-id-2352'/>
+      <pointer-type-def type-id='type-id-2811' size-in-bits='64' id='type-id-2351'/>
+      <pointer-type-def type-id='type-id-2812' size-in-bits='64' id='type-id-2342'/>
+      <pointer-type-def type-id='type-id-2813' size-in-bits='64' id='type-id-2446'/>
+      <pointer-type-def type-id='type-id-2814' size-in-bits='64' id='type-id-1273'/>
+      <pointer-type-def type-id='type-id-2815' size-in-bits='64' id='type-id-2445'/>
+      <pointer-type-def type-id='type-id-2816' size-in-bits='64' id='type-id-2536'/>
+      <pointer-type-def type-id='type-id-2817' size-in-bits='64' id='type-id-2534'/>
+      <pointer-type-def type-id='type-id-2818' size-in-bits='64' id='type-id-2535'/>
+      <pointer-type-def type-id='type-id-2819' size-in-bits='64' id='type-id-2171'/>
+      <pointer-type-def type-id='type-id-2820' size-in-bits='64' id='type-id-2175'/>
+      <pointer-type-def type-id='type-id-2821' size-in-bits='64' id='type-id-2170'/>
+      <pointer-type-def type-id='type-id-2822' size-in-bits='64' id='type-id-2177'/>
+      <pointer-type-def type-id='type-id-2823' size-in-bits='64' id='type-id-2176'/>
+      <pointer-type-def type-id='type-id-2824' size-in-bits='64' id='type-id-1915'/>
+      <pointer-type-def type-id='type-id-2825' size-in-bits='64' id='type-id-1746'/>
+      <pointer-type-def type-id='type-id-2826' size-in-bits='64' id='type-id-1331'/>
+      <pointer-type-def type-id='type-id-2827' size-in-bits='64' id='type-id-2542'/>
+      <pointer-type-def type-id='type-id-2828' size-in-bits='64' id='type-id-1914'/>
+      <pointer-type-def type-id='type-id-2829' size-in-bits='64' id='type-id-1612'/>
+      <pointer-type-def type-id='type-id-2830' size-in-bits='64' id='type-id-1592'/>
+      <pointer-type-def type-id='type-id-2831' size-in-bits='64' id='type-id-2537'/>
+      <pointer-type-def type-id='type-id-2832' size-in-bits='64' id='type-id-1321'/>
+      <pointer-type-def type-id='type-id-2833' size-in-bits='64' id='type-id-1329'/>
+      <pointer-type-def type-id='type-id-2834' size-in-bits='64' id='type-id-1323'/>
+      <pointer-type-def type-id='type-id-2835' size-in-bits='64' id='type-id-2482'/>
+      <pointer-type-def type-id='type-id-2836' size-in-bits='64' id='type-id-2533'/>
+      <pointer-type-def type-id='type-id-2837' size-in-bits='64' id='type-id-2043'/>
+      <pointer-type-def type-id='type-id-2838' size-in-bits='64' id='type-id-2045'/>
+      <pointer-type-def type-id='type-id-2839' size-in-bits='64' id='type-id-2032'/>
+      <pointer-type-def type-id='type-id-2840' size-in-bits='64' id='type-id-2075'/>
+      <pointer-type-def type-id='type-id-2841' size-in-bits='64' id='type-id-2072'/>
+      <pointer-type-def type-id='type-id-2842' size-in-bits='64' id='type-id-2081'/>
+      <pointer-type-def type-id='type-id-2843' size-in-bits='64' id='type-id-2046'/>
+      <pointer-type-def type-id='type-id-2844' size-in-bits='64' id='type-id-2082'/>
+      <pointer-type-def type-id='type-id-2845' size-in-bits='64' id='type-id-2071'/>
+      <pointer-type-def type-id='type-id-2846' size-in-bits='64' id='type-id-2576'/>
+      <pointer-type-def type-id='type-id-2847' size-in-bits='64' id='type-id-2505'/>
+      <pointer-type-def type-id='type-id-2848' size-in-bits='64' id='type-id-2272'/>
+      <pointer-type-def type-id='type-id-2849' size-in-bits='64' id='type-id-2096'/>
+      <pointer-type-def type-id='type-id-2850' size-in-bits='64' id='type-id-2097'/>
+      <pointer-type-def type-id='type-id-2851' size-in-bits='64' id='type-id-2098'/>
+      <pointer-type-def type-id='type-id-2852' size-in-bits='64' id='type-id-2556'/>
+      <pointer-type-def type-id='type-id-2853' size-in-bits='64' id='type-id-2564'/>
+      <pointer-type-def type-id='type-id-2854' size-in-bits='64' id='type-id-2041'/>
+      <pointer-type-def type-id='type-id-2855' size-in-bits='64' id='type-id-2569'/>
+      <pointer-type-def type-id='type-id-2856' size-in-bits='64' id='type-id-2093'/>
+      <pointer-type-def type-id='type-id-2857' size-in-bits='64' id='type-id-2561'/>
+      <pointer-type-def type-id='type-id-2858' size-in-bits='64' id='type-id-2573'/>
+      <pointer-type-def type-id='type-id-2859' size-in-bits='64' id='type-id-2562'/>
+      <pointer-type-def type-id='type-id-2860' size-in-bits='64' id='type-id-2559'/>
+      <pointer-type-def type-id='type-id-2861' size-in-bits='64' id='type-id-2587'/>
+      <pointer-type-def type-id='type-id-2862' size-in-bits='64' id='type-id-2591'/>
+      <pointer-type-def type-id='type-id-2863' size-in-bits='64' id='type-id-2593'/>
+      <pointer-type-def type-id='type-id-2864' size-in-bits='64' id='type-id-2479'/>
+      <pointer-type-def type-id='type-id-2865' size-in-bits='64' id='type-id-1324'/>
+      <pointer-type-def type-id='type-id-2866' size-in-bits='64' id='type-id-1325'/>
+      <pointer-type-def type-id='type-id-2867' size-in-bits='64' id='type-id-1335'/>
+      <pointer-type-def type-id='type-id-2868' size-in-bits='64' id='type-id-1328'/>
+      <pointer-type-def type-id='type-id-2869' size-in-bits='64' id='type-id-1326'/>
+      <pointer-type-def type-id='type-id-2870' size-in-bits='64' id='type-id-1322'/>
+      <pointer-type-def type-id='type-id-2871' size-in-bits='64' id='type-id-1327'/>
+      <pointer-type-def type-id='type-id-2872' size-in-bits='64' id='type-id-1333'/>
+      <pointer-type-def type-id='type-id-2873' size-in-bits='64' id='type-id-2560'/>
+      <pointer-type-def type-id='type-id-2874' size-in-bits='64' id='type-id-1318'/>
+      <pointer-type-def type-id='type-id-2875' size-in-bits='64' id='type-id-2509'/>
+      <pointer-type-def type-id='type-id-2876' size-in-bits='64' id='type-id-1336'/>
+      <pointer-type-def type-id='type-id-2877' size-in-bits='64' id='type-id-2510'/>
+      <pointer-type-def type-id='type-id-2878' size-in-bits='64' id='type-id-1334'/>
+      <pointer-type-def type-id='type-id-2879' size-in-bits='64' id='type-id-2478'/>
+      <pointer-type-def type-id='type-id-2880' size-in-bits='64' id='type-id-2566'/>
+      <pointer-type-def type-id='type-id-2881' size-in-bits='64' id='type-id-1713'/>
+      <pointer-type-def type-id='type-id-2882' size-in-bits='64' id='type-id-2563'/>
+      <pointer-type-def type-id='type-id-2883' size-in-bits='64' id='type-id-1444'/>
+      <pointer-type-def type-id='type-id-2884' size-in-bits='64' id='type-id-1443'/>
+      <pointer-type-def type-id='type-id-2885' size-in-bits='64' id='type-id-1445'/>
+      <pointer-type-def type-id='type-id-2886' size-in-bits='64' id='type-id-1460'/>
+      <pointer-type-def type-id='type-id-2887' size-in-bits='64' id='type-id-1464'/>
+      <pointer-type-def type-id='type-id-2888' size-in-bits='64' id='type-id-1441'/>
+      <pointer-type-def type-id='type-id-2889' size-in-bits='64' id='type-id-1637'/>
+      <pointer-type-def type-id='type-id-2890' size-in-bits='64' id='type-id-2891'/>
+      <qualified-type-def type-id='type-id-2891' const='yes' id='type-id-1407'/>
+      <pointer-type-def type-id='type-id-2892' size-in-bits='64' id='type-id-2893'/>
+      <qualified-type-def type-id='type-id-2893' const='yes' id='type-id-1409'/>
+      <pointer-type-def type-id='type-id-2894' size-in-bits='64' id='type-id-2435'/>
+      <pointer-type-def type-id='type-id-2895' size-in-bits='64' id='type-id-1735'/>
+      <pointer-type-def type-id='type-id-2896' size-in-bits='64' id='type-id-1734'/>
+      <pointer-type-def type-id='type-id-2897' size-in-bits='64' id='type-id-2190'/>
+      <pointer-type-def type-id='type-id-2898' size-in-bits='64' id='type-id-1949'/>
+      <pointer-type-def type-id='type-id-2899' size-in-bits='64' id='type-id-2281'/>
+      <pointer-type-def type-id='type-id-2900' size-in-bits='64' id='type-id-1955'/>
+      <pointer-type-def type-id='type-id-2901' size-in-bits='64' id='type-id-1701'/>
+      <pointer-type-def type-id='type-id-2902' size-in-bits='64' id='type-id-1741'/>
+      <pointer-type-def type-id='type-id-2903' size-in-bits='64' id='type-id-1875'/>
+      <pointer-type-def type-id='type-id-2904' size-in-bits='64' id='type-id-1872'/>
+      <pointer-type-def type-id='type-id-2905' size-in-bits='64' id='type-id-1727'/>
+      <pointer-type-def type-id='type-id-2906' size-in-bits='64' id='type-id-1862'/>
+      <pointer-type-def type-id='type-id-2907' size-in-bits='64' id='type-id-1864'/>
+      <pointer-type-def type-id='type-id-2908' size-in-bits='64' id='type-id-1855'/>
+      <pointer-type-def type-id='type-id-2909' size-in-bits='64' id='type-id-1726'/>
+      <pointer-type-def type-id='type-id-2910' size-in-bits='64' id='type-id-1866'/>
+      <pointer-type-def type-id='type-id-2911' size-in-bits='64' id='type-id-1840'/>
+      <pointer-type-def type-id='type-id-2912' size-in-bits='64' id='type-id-1848'/>
+      <pointer-type-def type-id='type-id-2913' size-in-bits='64' id='type-id-1867'/>
+      <pointer-type-def type-id='type-id-2914' size-in-bits='64' id='type-id-1868'/>
+      <pointer-type-def type-id='type-id-2915' size-in-bits='64' id='type-id-1871'/>
+      <pointer-type-def type-id='type-id-2916' size-in-bits='64' id='type-id-1847'/>
+      <pointer-type-def type-id='type-id-2917' size-in-bits='64' id='type-id-1876'/>
+      <pointer-type-def type-id='type-id-2918' size-in-bits='64' id='type-id-1859'/>
+      <pointer-type-def type-id='type-id-2919' size-in-bits='64' id='type-id-1874'/>
+      <pointer-type-def type-id='type-id-2920' size-in-bits='64' id='type-id-1870'/>
+      <pointer-type-def type-id='type-id-2921' size-in-bits='64' id='type-id-1852'/>
+      <pointer-type-def type-id='type-id-2922' size-in-bits='64' id='type-id-1850'/>
+      <pointer-type-def type-id='type-id-2923' size-in-bits='64' id='type-id-1858'/>
+      <pointer-type-def type-id='type-id-2924' size-in-bits='64' id='type-id-1857'/>
+      <pointer-type-def type-id='type-id-2925' size-in-bits='64' id='type-id-1869'/>
+      <pointer-type-def type-id='type-id-2926' size-in-bits='64' id='type-id-1844'/>
+      <pointer-type-def type-id='type-id-2927' size-in-bits='64' id='type-id-1708'/>
+      <pointer-type-def type-id='type-id-2928' size-in-bits='64' id='type-id-1707'/>
+      <pointer-type-def type-id='type-id-2929' size-in-bits='64' id='type-id-1709'/>
+      <pointer-type-def type-id='type-id-2930' size-in-bits='64' id='type-id-1720'/>
+      <pointer-type-def type-id='type-id-2931' size-in-bits='64' id='type-id-1722'/>
+      <pointer-type-def type-id='type-id-2932' size-in-bits='64' id='type-id-1721'/>
+      <pointer-type-def type-id='type-id-2933' size-in-bits='64' id='type-id-1718'/>
+      <pointer-type-def type-id='type-id-2934' size-in-bits='64' id='type-id-1723'/>
+      <pointer-type-def type-id='type-id-2935' size-in-bits='64' id='type-id-1724'/>
+      <pointer-type-def type-id='type-id-2936' size-in-bits='64' id='type-id-1719'/>
+      <pointer-type-def type-id='type-id-2937' size-in-bits='64' id='type-id-1717'/>
+      <pointer-type-def type-id='type-id-2938' size-in-bits='64' id='type-id-1745'/>
+      <pointer-type-def type-id='type-id-2939' size-in-bits='64' id='type-id-1725'/>
+      <pointer-type-def type-id='type-id-2940' size-in-bits='64' id='type-id-1716'/>
+      <pointer-type-def type-id='type-id-2941' size-in-bits='64' id='type-id-1749'/>
+      <pointer-type-def type-id='type-id-2942' size-in-bits='64' id='type-id-1710'/>
+      <pointer-type-def type-id='type-id-2943' size-in-bits='64' id='type-id-1732'/>
+      <pointer-type-def type-id='type-id-2944' size-in-bits='64' id='type-id-1729'/>
+      <pointer-type-def type-id='type-id-2945' size-in-bits='64' id='type-id-1728'/>
+      <pointer-type-def type-id='type-id-2946' size-in-bits='64' id='type-id-2196'/>
+      <pointer-type-def type-id='type-id-2947' size-in-bits='64' id='type-id-1748'/>
+      <pointer-type-def type-id='type-id-2948' size-in-bits='64' id='type-id-1740'/>
+      <pointer-type-def type-id='type-id-2949' size-in-bits='64' id='type-id-2191'/>
+      <pointer-type-def type-id='type-id-2950' size-in-bits='64' id='type-id-1737'/>
+      <pointer-type-def type-id='type-id-2951' size-in-bits='64' id='type-id-1747'/>
+      <pointer-type-def type-id='type-id-2952' size-in-bits='64' id='type-id-1715'/>
+      <pointer-type-def type-id='type-id-2953' size-in-bits='64' id='type-id-1739'/>
+      <pointer-type-def type-id='type-id-2954' size-in-bits='64' id='type-id-1731'/>
+      <pointer-type-def type-id='type-id-2955' size-in-bits='64' id='type-id-1750'/>
+      <pointer-type-def type-id='type-id-2956' size-in-bits='64' id='type-id-1873'/>
+      <pointer-type-def type-id='type-id-2957' size-in-bits='64' id='type-id-1860'/>
+      <pointer-type-def type-id='type-id-2958' size-in-bits='64' id='type-id-1861'/>
+      <pointer-type-def type-id='type-id-2959' size-in-bits='64' id='type-id-1863'/>
+      <pointer-type-def type-id='type-id-2960' size-in-bits='64' id='type-id-1706'/>
+      <pointer-type-def type-id='type-id-2961' size-in-bits='64' id='type-id-1813'/>
+      <pointer-type-def type-id='type-id-2962' size-in-bits='64' id='type-id-2189'/>
+      <pointer-type-def type-id='type-id-2963' size-in-bits='64' id='type-id-2095'/>
+      <pointer-type-def type-id='type-id-2964' size-in-bits='64' id='type-id-2101'/>
+      <pointer-type-def type-id='type-id-2965' size-in-bits='64' id='type-id-2106'/>
+      <pointer-type-def type-id='type-id-2966' size-in-bits='64' id='type-id-2092'/>
+      <pointer-type-def type-id='type-id-2967' size-in-bits='64' id='type-id-2133'/>
+      <pointer-type-def type-id='type-id-2968' size-in-bits='64' id='type-id-2257'/>
+      <pointer-type-def type-id='type-id-2969' size-in-bits='64' id='type-id-2341'/>
+      <pointer-type-def type-id='type-id-2970' size-in-bits='64' id='type-id-2487'/>
+      <pointer-type-def type-id='type-id-2971' size-in-bits='64' id='type-id-1446'/>
+      <pointer-type-def type-id='type-id-2972' size-in-bits='64' id='type-id-1442'/>
+      <pointer-type-def type-id='type-id-2973' size-in-bits='64' id='type-id-311'/>
+      <pointer-type-def type-id='type-id-2974' size-in-bits='64' id='type-id-1964'/>
+      <pointer-type-def type-id='type-id-2975' size-in-bits='64' id='type-id-2194'/>
+      <pointer-type-def type-id='type-id-2976' size-in-bits='64' id='type-id-2198'/>
+      <pointer-type-def type-id='type-id-2977' size-in-bits='64' id='type-id-2201'/>
+      <pointer-type-def type-id='type-id-2978' size-in-bits='64' id='type-id-1936'/>
+      <pointer-type-def type-id='type-id-2979' size-in-bits='64' id='type-id-1956'/>
+      <pointer-type-def type-id='type-id-2980' size-in-bits='64' id='type-id-1913'/>
+      <pointer-type-def type-id='type-id-2981' size-in-bits='64' id='type-id-1812'/>
+      <pointer-type-def type-id='type-id-2982' size-in-bits='64' id='type-id-1736'/>
+      <pointer-type-def type-id='type-id-2983' size-in-bits='64' id='type-id-1738'/>
+      <pointer-type-def type-id='type-id-2984' size-in-bits='64' id='type-id-2481'/>
+      <pointer-type-def type-id='type-id-2985' size-in-bits='64' id='type-id-2516'/>
+      <pointer-type-def type-id='type-id-2986' size-in-bits='64' id='type-id-2480'/>
+      <pointer-type-def type-id='type-id-2987' size-in-bits='64' id='type-id-2483'/>
+      <pointer-type-def type-id='type-id-2988' size-in-bits='64' id='type-id-2513'/>
+      <pointer-type-def type-id='type-id-2989' size-in-bits='64' id='type-id-2515'/>
+      <pointer-type-def type-id='type-id-2990' size-in-bits='64' id='type-id-2511'/>
+      <pointer-type-def type-id='type-id-2991' size-in-bits='64' id='type-id-2517'/>
+      <pointer-type-def type-id='type-id-2992' size-in-bits='64' id='type-id-2492'/>
+      <pointer-type-def type-id='type-id-2993' size-in-bits='64' id='type-id-2518'/>
+      <pointer-type-def type-id='type-id-2994' size-in-bits='64' id='type-id-2514'/>
+      <pointer-type-def type-id='type-id-2995' size-in-bits='64' id='type-id-2109'/>
+      <pointer-type-def type-id='type-id-2996' size-in-bits='64' id='type-id-2344'/>
+      <pointer-type-def type-id='type-id-2997' size-in-bits='64' id='type-id-1946'/>
+      <pointer-type-def type-id='type-id-2998' size-in-bits='64' id='type-id-1952'/>
+      <pointer-type-def type-id='type-id-2999' size-in-bits='64' id='type-id-1950'/>
+      <pointer-type-def type-id='type-id-3000' size-in-bits='64' id='type-id-1330'/>
+      <pointer-type-def type-id='type-id-3001' size-in-bits='64' id='type-id-1319'/>
+      <pointer-type-def type-id='type-id-3002' size-in-bits='64' id='type-id-2488'/>
+      <pointer-type-def type-id='type-id-3003' size-in-bits='64' id='type-id-2484'/>
+      <pointer-type-def type-id='type-id-3004' size-in-bits='64' id='type-id-1470'/>
+      <pointer-type-def type-id='type-id-3005' size-in-bits='64' id='type-id-1469'/>
+      <pointer-type-def type-id='type-id-3006' size-in-bits='64' id='type-id-2150'/>
+      <pointer-type-def type-id='type-id-3007' size-in-bits='64' id='type-id-1475'/>
+      <pointer-type-def type-id='type-id-17' size-in-bits='64' id='type-id-666'/>
+      <pointer-type-def type-id='type-id-2374' size-in-bits='64' id='type-id-364'/>
+      <pointer-type-def type-id='type-id-2375' size-in-bits='64' id='type-id-513'/>
+      <pointer-type-def type-id='type-id-1024' size-in-bits='64' id='type-id-2030'/>
+      <pointer-type-def type-id='type-id-1025' size-in-bits='64' id='type-id-2029'/>
+      <pointer-type-def type-id='type-id-2113' size-in-bits='64' id='type-id-3008'/>
+      <pointer-type-def type-id='type-id-2296' size-in-bits='64' id='type-id-2287'/>
+      <pointer-type-def type-id='type-id-1027' size-in-bits='64' id='type-id-2224'/>
+      <pointer-type-def type-id='type-id-1028' size-in-bits='64' id='type-id-1643'/>
+      <pointer-type-def type-id='type-id-2215' size-in-bits='64' id='type-id-2206'/>
+      <pointer-type-def type-id='type-id-1029' size-in-bits='64' id='type-id-2223'/>
+      <pointer-type-def type-id='type-id-1030' size-in-bits='64' id='type-id-2264'/>
+      <pointer-type-def type-id='type-id-1031' size-in-bits='64' id='type-id-2017'/>
+      <pointer-type-def type-id='type-id-1033' size-in-bits='64' id='type-id-1671'/>
+      <pointer-type-def type-id='type-id-2440' size-in-bits='64' id='type-id-1378'/>
+      <pointer-type-def type-id='type-id-1034' size-in-bits='64' id='type-id-1428'/>
+      <pointer-type-def type-id='type-id-1425' size-in-bits='64' id='type-id-1397'/>
+      <pointer-type-def type-id='type-id-1465' size-in-bits='64' id='type-id-3009'/>
+      <pointer-type-def type-id='type-id-1035' size-in-bits='64' id='type-id-1458'/>
+      <pointer-type-def type-id='type-id-1459' size-in-bits='64' id='type-id-2348'/>
+      <pointer-type-def type-id='type-id-1433' size-in-bits='64' id='type-id-1432'/>
+      <pointer-type-def type-id='type-id-1440' size-in-bits='64' id='type-id-1435'/>
+      <pointer-type-def type-id='type-id-1619' size-in-bits='64' id='type-id-1356'/>
+      <pointer-type-def type-id='type-id-1635' size-in-bits='64' id='type-id-1630'/>
+      <pointer-type-def type-id='type-id-1036' size-in-bits='64' id='type-id-1632'/>
+      <pointer-type-def type-id='type-id-1037' size-in-bits='64' id='type-id-1628'/>
+      <pointer-type-def type-id='type-id-330' size-in-bits='64' id='type-id-3010'/>
+      <pointer-type-def type-id='type-id-2111' size-in-bits='64' id='type-id-3011'/>
+      <pointer-type-def type-id='type-id-1038' size-in-bits='64' id='type-id-1490'/>
+      <pointer-type-def type-id='type-id-1039' size-in-bits='64' id='type-id-538'/>
+      <pointer-type-def type-id='type-id-1411' size-in-bits='64' id='type-id-1396'/>
+      <pointer-type-def type-id='type-id-1410' size-in-bits='64' id='type-id-3012'/>
+      <pointer-type-def type-id='type-id-267' size-in-bits='64' id='type-id-379'/>
+      <pointer-type-def type-id='type-id-2499' size-in-bits='64' id='type-id-3013'/>
+      <pointer-type-def type-id='type-id-2495' size-in-bits='64' id='type-id-3014'/>
+      <pointer-type-def type-id='type-id-1398' size-in-bits='64' id='type-id-1395'/>
+      <pointer-type-def type-id='type-id-1342' size-in-bits='64' id='type-id-3015'/>
+      <pointer-type-def type-id='type-id-1040' size-in-bits='64' id='type-id-3016'/>
+      <pointer-type-def type-id='type-id-2326' size-in-bits='64' id='type-id-2325'/>
+      <pointer-type-def type-id='type-id-2324' size-in-bits='64' id='type-id-2321'/>
+      <pointer-type-def type-id='type-id-42' size-in-bits='64' id='type-id-3017'/>
+      <pointer-type-def type-id='type-id-1041' size-in-bits='64' id='type-id-1487'/>
+      <pointer-type-def type-id='type-id-2216' size-in-bits='64' id='type-id-2207'/>
+      <pointer-type-def type-id='type-id-2222' size-in-bits='64' id='type-id-2213'/>
+      <pointer-type-def type-id='type-id-20' size-in-bits='64' id='type-id-877'/>
+      <pointer-type-def type-id='type-id-2551' size-in-bits='64' id='type-id-2550'/>
+      <pointer-type-def type-id='type-id-2548' size-in-bits='64' id='type-id-2547'/>
+      <pointer-type-def type-id='type-id-2549' size-in-bits='64' id='type-id-1144'/>
+      <pointer-type-def type-id='type-id-281' size-in-bits='64' id='type-id-282'/>
+      <pointer-type-def type-id='type-id-1146' size-in-bits='64' id='type-id-1698'/>
+      <pointer-type-def type-id='type-id-763' size-in-bits='64' id='type-id-85'/>
+      <pointer-type-def type-id='type-id-3018' size-in-bits='64' id='type-id-2570'/>
+      <pointer-type-def type-id='type-id-3019' size-in-bits='64' id='type-id-2558'/>
+      <pointer-type-def type-id='type-id-3020' size-in-bits='64' id='type-id-1564'/>
+      <pointer-type-def type-id='type-id-3021' size-in-bits='64' id='type-id-2493'/>
+      <pointer-type-def type-id='type-id-1042' size-in-bits='64' id='type-id-1537'/>
+      <pointer-type-def type-id='type-id-1931' size-in-bits='64' id='type-id-1684'/>
+      <pointer-type-def type-id='type-id-1482' size-in-bits='64' id='type-id-882'/>
+      <pointer-type-def type-id='type-id-1043' size-in-bits='64' id='type-id-1644'/>
+      <pointer-type-def type-id='type-id-1385' size-in-bits='64' id='type-id-1384'/>
+      <pointer-type-def type-id='type-id-1371' size-in-bits='64' id='type-id-260'/>
+      <pointer-type-def type-id='type-id-2431' size-in-bits='64' id='type-id-1374'/>
+      <pointer-type-def type-id='type-id-1373' size-in-bits='64' id='type-id-3022'/>
+      <pointer-type-def type-id='type-id-1044' size-in-bits='64' id='type-id-1387'/>
+      <pointer-type-def type-id='type-id-1045' size-in-bits='64' id='type-id-1393'/>
+      <pointer-type-def type-id='type-id-1046' size-in-bits='64' id='type-id-1386'/>
+      <pointer-type-def type-id='type-id-1047' size-in-bits='64' id='type-id-1360'/>
+      <pointer-type-def type-id='type-id-1048' size-in-bits='64' id='type-id-1513'/>
+      <pointer-type-def type-id='type-id-1809' size-in-bits='64' id='type-id-3023'/>
+      <pointer-type-def type-id='type-id-1050' size-in-bits='64' id='type-id-3024'/>
+      <pointer-type-def type-id='type-id-1051' size-in-bits='64' id='type-id-3025'/>
+      <pointer-type-def type-id='type-id-3026' size-in-bits='64' id='type-id-2282'/>
+      <pointer-type-def type-id='type-id-1647' size-in-bits='64' id='type-id-1645'/>
+      <pointer-type-def type-id='type-id-3027' size-in-bits='64' id='type-id-2199'/>
+      <pointer-type-def type-id='type-id-1665' size-in-bits='64' id='type-id-1650'/>
+      <pointer-type-def type-id='type-id-1669' size-in-bits='64' id='type-id-3028'/>
+      <pointer-type-def type-id='type-id-3029' size-in-bits='64' id='type-id-1714'/>
+      <pointer-type-def type-id='type-id-1052' size-in-bits='64' id='type-id-1662'/>
+      <pointer-type-def type-id='type-id-1053' size-in-bits='64' id='type-id-1968'/>
+      <pointer-type-def type-id='type-id-1816' size-in-bits='64' id='type-id-3030'/>
+      <pointer-type-def type-id='type-id-1815' size-in-bits='64' id='type-id-3031'/>
+      <pointer-type-def type-id='type-id-1994' size-in-bits='64' id='type-id-1685'/>
+      <pointer-type-def type-id='type-id-3032' size-in-bits='64' id='type-id-1982'/>
+      <pointer-type-def type-id='type-id-1921' size-in-bits='64' id='type-id-1682'/>
+      <pointer-type-def type-id='type-id-1810' size-in-bits='64' id='type-id-3033'/>
+      <pointer-type-def type-id='type-id-1807' size-in-bits='64' id='type-id-1826'/>
+      <pointer-type-def type-id='type-id-2229' size-in-bits='64' id='type-id-2247'/>
+      <pointer-type-def type-id='type-id-1054' size-in-bits='64' id='type-id-2288'/>
+      <pointer-type-def type-id='type-id-1055' size-in-bits='64' id='type-id-2289'/>
+      <pointer-type-def type-id='type-id-1056' size-in-bits='64' id='type-id-1153'/>
+      <pointer-type-def type-id='type-id-1059' size-in-bits='64' id='type-id-2598'/>
+      <pointer-type-def type-id='type-id-1805' size-in-bits='64' id='type-id-1998'/>
+      <pointer-type-def type-id='type-id-1998' size-in-bits='64' id='type-id-3034'/>
+      <pointer-type-def type-id='type-id-1060' size-in-bits='64' id='type-id-2596'/>
+      <pointer-type-def type-id='type-id-1814' size-in-bits='64' id='type-id-3035'/>
+      <pointer-type-def type-id='type-id-1641' size-in-bits='64' id='type-id-916'/>
+      <pointer-type-def type-id='type-id-2086' size-in-bits='64' id='type-id-512'/>
+      <pointer-type-def type-id='type-id-3036' size-in-bits='64' id='type-id-1477'/>
+      <pointer-type-def type-id='type-id-512' size-in-bits='64' id='type-id-923'/>
+      <pointer-type-def type-id='type-id-1276' size-in-bits='64' id='type-id-3037'/>
+      <pointer-type-def type-id='type-id-1062' size-in-bits='64' id='type-id-3038'/>
+      <pointer-type-def type-id='type-id-1063' size-in-bits='64' id='type-id-3039'/>
+      <pointer-type-def type-id='type-id-2009' size-in-bits='64' id='type-id-3040'/>
+      <pointer-type-def type-id='type-id-1064' size-in-bits='64' id='type-id-3041'/>
+      <pointer-type-def type-id='type-id-391' size-in-bits='64' id='type-id-2147'/>
+      <pointer-type-def type-id='type-id-2159' size-in-bits='64' id='type-id-2157'/>
+      <pointer-type-def type-id='type-id-1065' size-in-bits='64' id='type-id-1158'/>
+      <pointer-type-def type-id='type-id-1066' size-in-bits='64' id='type-id-1160'/>
+      <pointer-type-def type-id='type-id-1493' size-in-bits='64' id='type-id-1485'/>
+      <pointer-type-def type-id='type-id-1067' size-in-bits='64' id='type-id-1696'/>
+      <pointer-type-def type-id='type-id-1577' size-in-bits='64' id='type-id-251'/>
+      <pointer-type-def type-id='type-id-1579' size-in-bits='64' id='type-id-693'/>
+      <pointer-type-def type-id='type-id-2130' size-in-bits='64' id='type-id-2123'/>
+      <pointer-type-def type-id='type-id-2122' size-in-bits='64' id='type-id-87'/>
+      <pointer-type-def type-id='type-id-2461' size-in-bits='64' id='type-id-2454'/>
+      <pointer-type-def type-id='type-id-2065' size-in-bits='64' id='type-id-2061'/>
+      <pointer-type-def type-id='type-id-2152' size-in-bits='64' id='type-id-2422'/>
+      <pointer-type-def type-id='type-id-1068' size-in-bits='64' id='type-id-879'/>
+      <pointer-type-def type-id='type-id-1069' size-in-bits='64' id='type-id-237'/>
+      <pointer-type-def type-id='type-id-1070' size-in-bits='64' id='type-id-1301'/>
+      <pointer-type-def type-id='type-id-3042' size-in-bits='64' id='type-id-1320'/>
+      <pointer-type-def type-id='type-id-1071' size-in-bits='64' id='type-id-262'/>
+      <pointer-type-def type-id='type-id-1606' size-in-bits='64' id='type-id-1603'/>
+      <pointer-type-def type-id='type-id-1073' size-in-bits='64' id='type-id-2204'/>
+      <pointer-type-def type-id='type-id-2323' size-in-bits='64' id='type-id-2320'/>
+      <pointer-type-def type-id='type-id-2424' size-in-bits='64' id='type-id-2425'/>
+      <pointer-type-def type-id='type-id-2427' size-in-bits='64' id='type-id-2423'/>
+      <pointer-type-def type-id='type-id-2520' size-in-bits='64' id='type-id-3043'/>
+      <pointer-type-def type-id='type-id-2519' size-in-bits='64' id='type-id-3044'/>
+      <pointer-type-def type-id='type-id-2521' size-in-bits='64' id='type-id-3045'/>
+      <pointer-type-def type-id='type-id-2000' size-in-bits='64' id='type-id-1967'/>
+      <pointer-type-def type-id='type-id-1074' size-in-bits='64' id='type-id-3046'/>
+      <pointer-type-def type-id='type-id-2502' size-in-bits='64' id='type-id-3047'/>
+      <pointer-type-def type-id='type-id-3048' size-in-bits='64' id='type-id-2508'/>
+      <pointer-type-def type-id='type-id-1287' size-in-bits='64' id='type-id-3049'/>
+      <pointer-type-def type-id='type-id-2526' size-in-bits='64' id='type-id-2525'/>
+      <pointer-type-def type-id='type-id-1437' size-in-bits='64' id='type-id-1436'/>
+      <pointer-type-def type-id='type-id-415' size-in-bits='64' id='type-id-1438'/>
+      <pointer-type-def type-id='type-id-1789' size-in-bits='64' id='type-id-1781'/>
+      <pointer-type-def type-id='type-id-422' size-in-bits='64' id='type-id-1238'/>
+      <pointer-type-def type-id='type-id-1075' size-in-bits='64' id='type-id-1504'/>
+      <pointer-type-def type-id='type-id-1076' size-in-bits='64' id='type-id-1527'/>
+      <pointer-type-def type-id='type-id-1077' size-in-bits='64' id='type-id-1538'/>
+      <pointer-type-def type-id='type-id-2146' size-in-bits='64' id='type-id-2156'/>
+      <pointer-type-def type-id='type-id-1509' size-in-bits='64' id='type-id-3050'/>
+      <pointer-type-def type-id='type-id-2408' size-in-bits='64' id='type-id-2404'/>
+      <pointer-type-def type-id='type-id-2245' size-in-bits='64' id='type-id-2248'/>
+      <pointer-type-def type-id='type-id-2239' size-in-bits='64' id='type-id-2259'/>
+      <pointer-type-def type-id='type-id-2258' size-in-bits='64' id='type-id-3051'/>
+      <pointer-type-def type-id='type-id-1078' size-in-bits='64' id='type-id-1532'/>
+      <pointer-type-def type-id='type-id-1926' size-in-bits='64' id='type-id-1923'/>
+      <pointer-type-def type-id='type-id-1925' size-in-bits='64' id='type-id-1922'/>
+      <pointer-type-def type-id='type-id-1079' size-in-bits='64' id='type-id-2266'/>
+      <pointer-type-def type-id='type-id-1080' size-in-bits='64' id='type-id-2267'/>
+      <pointer-type-def type-id='type-id-1081' size-in-bits='64' id='type-id-1524'/>
+      <pointer-type-def type-id='type-id-1082' size-in-bits='64' id='type-id-1551'/>
+      <pointer-type-def type-id='type-id-1802' size-in-bits='64' id='type-id-3052'/>
+      <pointer-type-def type-id='type-id-1928' size-in-bits='64' id='type-id-1683'/>
+      <pointer-type-def type-id='type-id-738' size-in-bits='64' id='type-id-2284'/>
+      <pointer-type-def type-id='type-id-1083' size-in-bits='64' id='type-id-2307'/>
+      <pointer-type-def type-id='type-id-1084' size-in-bits='64' id='type-id-2306'/>
+      <pointer-type-def type-id='type-id-2085' size-in-bits='64' id='type-id-920'/>
+      <pointer-type-def type-id='type-id-1499' size-in-bits='64' id='type-id-1545'/>
+      <pointer-type-def type-id='type-id-1500' size-in-bits='64' id='type-id-1550'/>
+      <pointer-type-def type-id='type-id-1086' size-in-bits='64' id='type-id-1765'/>
+      <pointer-type-def type-id='type-id-1087' size-in-bits='64' id='type-id-2372'/>
+      <pointer-type-def type-id='type-id-386' size-in-bits='64' id='type-id-3053'/>
+      <pointer-type-def type-id='type-id-1088' size-in-bits='64' id='type-id-2270'/>
+      <pointer-type-def type-id='type-id-1447' size-in-bits='64' id='type-id-88'/>
+      <pointer-type-def type-id='type-id-1089' size-in-bits='64' id='type-id-1697'/>
+      <pointer-type-def type-id='type-id-2084' size-in-bits='64' id='type-id-922'/>
+      <pointer-type-def type-id='type-id-2503' size-in-bits='64' id='type-id-3054'/>
+      <pointer-type-def type-id='type-id-1364' size-in-bits='64' id='type-id-3055'/>
+      <pointer-type-def type-id='type-id-2362' size-in-bits='64' id='type-id-1517'/>
+      <pointer-type-def type-id='type-id-2379' size-in-bits='64' id='type-id-1528'/>
+      <pointer-type-def type-id='type-id-2353' size-in-bits='64' id='type-id-1516'/>
+      <pointer-type-def type-id='type-id-84' size-in-bits='64' id='type-id-3056'/>
+      <pointer-type-def type-id='type-id-1753' size-in-bits='64' id='type-id-1768'/>
+      <pointer-type-def type-id='type-id-3057' size-in-bits='64' id='type-id-1965'/>
+      <pointer-type-def type-id='type-id-1768' size-in-bits='64' id='type-id-3058'/>
+      <pointer-type-def type-id='type-id-1090' size-in-bits='64' id='type-id-1648'/>
+      <pointer-type-def type-id='type-id-1648' size-in-bits='64' id='type-id-2227'/>
+      <pointer-type-def type-id='type-id-1171' size-in-bits='64' id='type-id-2606'/>
+      <pointer-type-def type-id='type-id-2605' size-in-bits='64' id='type-id-1222'/>
+      <pointer-type-def type-id='type-id-247' size-in-bits='64' id='type-id-486'/>
+      <pointer-type-def type-id='type-id-1091' size-in-bits='64' id='type-id-2048'/>
+      <pointer-type-def type-id='type-id-1348' size-in-bits='64' id='type-id-28'/>
+      <pointer-type-def type-id='type-id-1092' size-in-bits='64' id='type-id-3059'/>
+      <pointer-type-def type-id='type-id-1799' size-in-bits='64' id='type-id-1786'/>
+      <pointer-type-def type-id='type-id-1093' size-in-bits='64' id='type-id-1501'/>
+      <pointer-type-def type-id='type-id-1495' size-in-bits='64' id='type-id-431'/>
+      <pointer-type-def type-id='type-id-2361' size-in-bits='64' id='type-id-2357'/>
+      <pointer-type-def type-id='type-id-1958' size-in-bits='64' id='type-id-3060'/>
+      <pointer-type-def type-id='type-id-1961' size-in-bits='64' id='type-id-1960'/>
+      <pointer-type-def type-id='type-id-3061' size-in-bits='64' id='type-id-1990'/>
+      <pointer-type-def type-id='type-id-1959' size-in-bits='64' id='type-id-1938'/>
+      <pointer-type-def type-id='type-id-1935' size-in-bits='64' id='type-id-1932'/>
+      <pointer-type-def type-id='type-id-1939' size-in-bits='64' id='type-id-3062'/>
+      <pointer-type-def type-id='type-id-1094' size-in-bits='64' id='type-id-3063'/>
+      <pointer-type-def type-id='type-id-1996' size-in-bits='64' id='type-id-3064'/>
+      <pointer-type-def type-id='type-id-1096' size-in-bits='64' id='type-id-2234'/>
+      <pointer-type-def type-id='type-id-2214' size-in-bits='64' id='type-id-2205'/>
+      <pointer-type-def type-id='type-id-1801' size-in-bits='64' id='type-id-1787'/>
+      <pointer-type-def type-id='type-id-417' size-in-bits='64' id='type-id-3065'/>
+      <pointer-type-def type-id='type-id-1552' size-in-bits='64' id='type-id-1563'/>
+      <pointer-type-def type-id='type-id-1572' size-in-bits='64' id='type-id-1570'/>
+      <pointer-type-def type-id='type-id-355' size-in-bits='64' id='type-id-3066'/>
+      <pointer-type-def type-id='type-id-1097' size-in-bits='64' id='type-id-1677'/>
+      <pointer-type-def type-id='type-id-1098' size-in-bits='64' id='type-id-3067'/>
+      <pointer-type-def type-id='type-id-3067' size-in-bits='64' id='type-id-1391'/>
+      <pointer-type-def type-id='type-id-1099' size-in-bits='64' id='type-id-3068'/>
+      <pointer-type-def type-id='type-id-3068' size-in-bits='64' id='type-id-1390'/>
+      <pointer-type-def type-id='type-id-2470' size-in-bits='64' id='type-id-883'/>
+      <qualified-type-def type-id='type-id-883' const='yes' id='type-id-2468'/>
+      <pointer-type-def type-id='type-id-2473' size-in-bits='64' id='type-id-2472'/>
+      <pointer-type-def type-id='type-id-2469' size-in-bits='64' id='type-id-1388'/>
+      <pointer-type-def type-id='type-id-1100' size-in-bits='64' id='type-id-2358'/>
+      <pointer-type-def type-id='type-id-1101' size-in-bits='64' id='type-id-2355'/>
+      <pointer-type-def type-id='type-id-3069' size-in-bits='64' id='type-id-2557'/>
+      <pointer-type-def type-id='type-id-3070' size-in-bits='64' id='type-id-1463'/>
+      <pointer-type-def type-id='type-id-3071' size-in-bits='64' id='type-id-1423'/>
+      <pointer-type-def type-id='type-id-3072' size-in-bits='64' id='type-id-1917'/>
+      <pointer-type-def type-id='type-id-3073' size-in-bits='64' id='type-id-2167'/>
+      <pointer-type-def type-id='type-id-3074' size-in-bits='64' id='type-id-2169'/>
+      <pointer-type-def type-id='type-id-3075' size-in-bits='64' id='type-id-1712'/>
+      <pointer-type-def type-id='type-id-3076' size-in-bits='64' id='type-id-2592'/>
+      <pointer-type-def type-id='type-id-3077' size-in-bits='64' id='type-id-2105'/>
+      <pointer-type-def type-id='type-id-3078' size-in-bits='64' id='type-id-2135'/>
+      <pointer-type-def type-id='type-id-3079' size-in-bits='64' id='type-id-2073'/>
+      <pointer-type-def type-id='type-id-3080' size-in-bits='64' id='type-id-2077'/>
+      <pointer-type-def type-id='type-id-3081' size-in-bits='64' id='type-id-2589'/>
+      <pointer-type-def type-id='type-id-3082' size-in-bits='64' id='type-id-1560'/>
+      <pointer-type-def type-id='type-id-3083' size-in-bits='64' id='type-id-2553'/>
+      <pointer-type-def type-id='type-id-3084' size-in-bits='64' id='type-id-1730'/>
+      <pointer-type-def type-id='type-id-3085' size-in-bits='64' id='type-id-1703'/>
+      <pointer-type-def type-id='type-id-3086' size-in-bits='64' id='type-id-1702'/>
+      <pointer-type-def type-id='type-id-3087' size-in-bits='64' id='type-id-2350'/>
+      <pointer-type-def type-id='type-id-3088' size-in-bits='64' id='type-id-2099'/>
+      <pointer-type-def type-id='type-id-3089' size-in-bits='64' id='type-id-2193'/>
+      <pointer-type-def type-id='type-id-3090' size-in-bits='64' id='type-id-2197'/>
+      <pointer-type-def type-id='type-id-3091' size-in-bits='64' id='type-id-2200'/>
+      <pointer-type-def type-id='type-id-3092' size-in-bits='64' id='type-id-1332'/>
+      <pointer-type-def type-id='type-id-3093' size-in-bits='64' id='type-id-2554'/>
+      <pointer-type-def type-id='type-id-3094' size-in-bits='64' id='type-id-2555'/>
+      <pointer-type-def type-id='type-id-3095' size-in-bits='64' id='type-id-2040'/>
+      <pointer-type-def type-id='type-id-3096' size-in-bits='64' id='type-id-2568'/>
+      <pointer-type-def type-id='type-id-3097' size-in-bits='64' id='type-id-2565'/>
+      <pointer-type-def type-id='type-id-3098' size-in-bits='64' id='type-id-2572'/>
+      <pointer-type-def type-id='type-id-3099' size-in-bits='64' id='type-id-1462'/>
+      <pointer-type-def type-id='type-id-3100' size-in-bits='64' id='type-id-2103'/>
+      <pointer-type-def type-id='type-id-3101' size-in-bits='64' id='type-id-1419'/>
+      <pointer-type-def type-id='type-id-3102' size-in-bits='64' id='type-id-1420'/>
+      <pointer-type-def type-id='type-id-3103' size-in-bits='64' id='type-id-2432'/>
+      <pointer-type-def type-id='type-id-3104' size-in-bits='64' id='type-id-2433'/>
+      <pointer-type-def type-id='type-id-3105' size-in-bits='64' id='type-id-2567'/>
+      <pointer-type-def type-id='type-id-3106' size-in-bits='64' id='type-id-2489'/>
+      <pointer-type-def type-id='type-id-3107' size-in-bits='64' id='type-id-2490'/>
+      <pointer-type-def type-id='type-id-3108' size-in-bits='64' id='type-id-1771'/>
+      <pointer-type-def type-id='type-id-3109' size-in-bits='64' id='type-id-1704'/>
+      <pointer-type-def type-id='type-id-3110' size-in-bits='64' id='type-id-1980'/>
+      <pointer-type-def type-id='type-id-3111' size-in-bits='64' id='type-id-1270'/>
+      <pointer-type-def type-id='type-id-3112' size-in-bits='64' id='type-id-1845'/>
+      <pointer-type-def type-id='type-id-3113' size-in-bits='64' id='type-id-1271'/>
+      <pointer-type-def type-id='type-id-3114' size-in-bits='64' id='type-id-2256'/>
+      <pointer-type-def type-id='type-id-3115' size-in-bits='64' id='type-id-2349'/>
+      <pointer-type-def type-id='type-id-3116' size-in-bits='64' id='type-id-2036'/>
+      <pointer-type-def type-id='type-id-3117' size-in-bits='64' id='type-id-2037'/>
+      <pointer-type-def type-id='type-id-3118' size-in-bits='64' id='type-id-1471'/>
+      <pointer-type-def type-id='type-id-3119' size-in-bits='64' id='type-id-1472'/>
+      <pointer-type-def type-id='type-id-7' size-in-bits='64' id='type-id-1567'/>
+      <pointer-type-def type-id='type-id-3120' size-in-bits='64' id='type-id-2275'/>
+      <pointer-type-def type-id='type-id-40' size-in-bits='64' id='type-id-1510'/>
+      <pointer-type-def type-id='type-id-214' size-in-bits='64' id='type-id-3121'/>
+      <pointer-type-def type-id='type-id-1614' size-in-bits='64' id='type-id-1580'/>
+      <pointer-type-def type-id='type-id-2217' size-in-bits='64' id='type-id-2208'/>
+      <pointer-type-def type-id='type-id-1102' size-in-bits='64' id='type-id-3122'/>
+      <pointer-type-def type-id='type-id-1103' size-in-bits='64' id='type-id-1649'/>
+      <pointer-type-def type-id='type-id-1187' size-in-bits='64' id='type-id-1588'/>
+      <pointer-type-def type-id='type-id-329' size-in-bits='64' id='type-id-874'/>
+      <pointer-type-def type-id='type-id-216' size-in-bits='64' id='type-id-256'/>
+      <pointer-type-def type-id='type-id-3123' size-in-bits='64' id='type-id-2195'/>
+      <pointer-type-def type-id='type-id-3124' size-in-bits='64' id='type-id-2274'/>
+      <pointer-type-def type-id='type-id-3125' size-in-bits='64' id='type-id-1223'/>
+      <pointer-type-def type-id='type-id-5' size-in-bits='64' id='type-id-482'/>
+      <pointer-type-def type-id='type-id-3126' size-in-bits='64' id='type-id-1986'/>
+      <pointer-type-def type-id='type-id-3127' size-in-bits='64' id='type-id-1991'/>
+      <pointer-type-def type-id='type-id-3128' size-in-bits='64' id='type-id-1484'/>
+      <pointer-type-def type-id='type-id-3129' size-in-bits='64' id='type-id-2588'/>
+      <pointer-type-def type-id='type-id-3130' size-in-bits='64' id='type-id-2545'/>
+      <pointer-type-def type-id='type-id-3131' size-in-bits='64' id='type-id-1474'/>
+      <pointer-type-def type-id='type-id-16' size-in-bits='64' id='type-id-45'/>
+      <pointer-type-def type-id='type-id-1104' size-in-bits='64' id='type-id-2403'/>
+      <pointer-type-def type-id='type-id-2400' size-in-bits='64' id='type-id-1539'/>
+      <pointer-type-def type-id='type-id-1582' size-in-bits='64' id='type-id-917'/>
+      <pointer-type-def type-id='type-id-1638' size-in-bits='64' id='type-id-1231'/>
+      <pointer-type-def type-id='type-id-1105' size-in-bits='64' id='type-id-1642'/>
+      <pointer-type-def type-id='type-id-1106' size-in-bits='64' id='type-id-1284'/>
+      <pointer-type-def type-id='type-id-3132' size-in-bits='64' id='type-id-2541'/>
+      <pointer-type-def type-id='type-id-1478' size-in-bits='64' id='type-id-1209'/>
+      <pointer-type-def type-id='type-id-2421' size-in-bits='64' id='type-id-3133'/>
+      <pointer-type-def type-id='type-id-2409' size-in-bits='64' id='type-id-1540'/>
+      <pointer-type-def type-id='type-id-2370' size-in-bits='64' id='type-id-1392'/>
+      <pointer-type-def type-id='type-id-3134' size-in-bits='64' id='type-id-1975'/>
+      <pointer-type-def type-id='type-id-3135' size-in-bits='64' id='type-id-1989'/>
+      <pointer-type-def type-id='type-id-3136' size-in-bits='64' id='type-id-1979'/>
+      <pointer-type-def type-id='type-id-3137' size-in-bits='64' id='type-id-1985'/>
+      <pointer-type-def type-id='type-id-3138' size-in-bits='64' id='type-id-1264'/>
+      <pointer-type-def type-id='type-id-3139' size-in-bits='64' id='type-id-1263'/>
+      <pointer-type-def type-id='type-id-3140' size-in-bits='64' id='type-id-1272'/>
+      <pointer-type-def type-id='type-id-3141' size-in-bits='64' id='type-id-89'/>
+      <pointer-type-def type-id='type-id-3142' size-in-bits='64' id='type-id-2339'/>
+      <pointer-type-def type-id='type-id-3143' size-in-bits='64' id='type-id-2340'/>
+      <pointer-type-def type-id='type-id-3144' size-in-bits='64' id='type-id-2343'/>
+      <pointer-type-def type-id='type-id-3145' size-in-bits='64' id='type-id-2183'/>
+      <pointer-type-def type-id='type-id-3146' size-in-bits='64' id='type-id-2283'/>
+      <pointer-type-def type-id='type-id-3147' size-in-bits='64' id='type-id-2544'/>
+      <pointer-type-def type-id='type-id-3148' size-in-bits='64' id='type-id-1611'/>
+      <pointer-type-def type-id='type-id-3149' size-in-bits='64' id='type-id-2538'/>
+      <pointer-type-def type-id='type-id-3150' size-in-bits='64' id='type-id-2539'/>
+      <pointer-type-def type-id='type-id-3151' size-in-bits='64' id='type-id-2028'/>
+      <pointer-type-def type-id='type-id-3152' size-in-bits='64' id='type-id-2186'/>
+      <pointer-type-def type-id='type-id-3153' size-in-bits='64' id='type-id-2079'/>
+      <pointer-type-def type-id='type-id-3154' size-in-bits='64' id='type-id-2076'/>
+      <pointer-type-def type-id='type-id-3155' size-in-bits='64' id='type-id-2067'/>
+      <pointer-type-def type-id='type-id-3156' size-in-bits='64' id='type-id-2078'/>
+      <pointer-type-def type-id='type-id-3157' size-in-bits='64' id='type-id-2074'/>
+      <pointer-type-def type-id='type-id-3158' size-in-bits='64' id='type-id-2062'/>
+      <pointer-type-def type-id='type-id-3159' size-in-bits='64' id='type-id-2070'/>
+      <pointer-type-def type-id='type-id-3160' size-in-bits='64' id='type-id-2080'/>
+      <pointer-type-def type-id='type-id-3161' size-in-bits='64' id='type-id-2507'/>
+      <pointer-type-def type-id='type-id-3162' size-in-bits='64' id='type-id-2276'/>
+      <pointer-type-def type-id='type-id-3163' size-in-bits='64' id='type-id-2277'/>
+      <pointer-type-def type-id='type-id-3164' size-in-bits='64' id='type-id-2280'/>
+      <pointer-type-def type-id='type-id-3165' size-in-bits='64' id='type-id-2279'/>
+      <pointer-type-def type-id='type-id-3166' size-in-bits='64' id='type-id-2110'/>
+      <pointer-type-def type-id='type-id-3167' size-in-bits='64' id='type-id-2585'/>
+      <pointer-type-def type-id='type-id-3168' size-in-bits='64' id='type-id-2584'/>
+      <pointer-type-def type-id='type-id-3169' size-in-bits='64' id='type-id-2594'/>
+      <pointer-type-def type-id='type-id-3170' size-in-bits='64' id='type-id-2166'/>
+      <pointer-type-def type-id='type-id-3171' size-in-bits='64' id='type-id-1916'/>
+      <pointer-type-def type-id='type-id-3172' size-in-bits='64' id='type-id-2242'/>
+      <pointer-type-def type-id='type-id-3173' size-in-bits='64' id='type-id-2241'/>
+      <pointer-type-def type-id='type-id-3174' size-in-bits='64' id='type-id-2476'/>
+      <pointer-type-def type-id='type-id-3175' size-in-bits='64' id='type-id-2477'/>
+      <pointer-type-def type-id='type-id-3176' size-in-bits='64' id='type-id-1461'/>
+      <pointer-type-def type-id='type-id-3177' size-in-bits='64' id='type-id-2112'/>
+      <pointer-type-def type-id='type-id-3178' size-in-bits='64' id='type-id-1412'/>
+      <pointer-type-def type-id='type-id-3179' size-in-bits='64' id='type-id-1417'/>
+      <pointer-type-def type-id='type-id-3180' size-in-bits='64' id='type-id-2328'/>
+      <pointer-type-def type-id='type-id-3181' size-in-bits='64' id='type-id-2436'/>
+      <pointer-type-def type-id='type-id-3182' size-in-bits='64' id='type-id-2434'/>
+      <pointer-type-def type-id='type-id-3183' size-in-bits='64' id='type-id-1691'/>
+      <pointer-type-def type-id='type-id-3184' size-in-bits='64' id='type-id-1865'/>
+      <pointer-type-def type-id='type-id-3185' size-in-bits='64' id='type-id-1841'/>
+      <pointer-type-def type-id='type-id-3186' size-in-bits='64' id='type-id-1851'/>
+      <pointer-type-def type-id='type-id-3187' size-in-bits='64' id='type-id-1842'/>
+      <pointer-type-def type-id='type-id-3188' size-in-bits='64' id='type-id-1849'/>
+      <pointer-type-def type-id='type-id-3189' size-in-bits='64' id='type-id-1856'/>
+      <pointer-type-def type-id='type-id-3190' size-in-bits='64' id='type-id-1853'/>
+      <pointer-type-def type-id='type-id-3191' size-in-bits='64' id='type-id-1843'/>
+      <pointer-type-def type-id='type-id-3192' size-in-bits='64' id='type-id-1705'/>
+      <pointer-type-def type-id='type-id-3193' size-in-bits='64' id='type-id-2192'/>
+      <pointer-type-def type-id='type-id-3194' size-in-bits='64' id='type-id-1733'/>
+      <pointer-type-def type-id='type-id-3195' size-in-bits='64' id='type-id-1711'/>
+      <pointer-type-def type-id='type-id-3196' size-in-bits='64' id='type-id-1846'/>
+      <pointer-type-def type-id='type-id-3197' size-in-bits='64' id='type-id-1854'/>
+      <pointer-type-def type-id='type-id-3198' size-in-bits='64' id='type-id-1742'/>
+      <pointer-type-def type-id='type-id-3199' size-in-bits='64' id='type-id-1744'/>
+      <pointer-type-def type-id='type-id-3200' size-in-bits='64' id='type-id-2102'/>
+      <pointer-type-def type-id='type-id-3201' size-in-bits='64' id='type-id-2107'/>
+      <pointer-type-def type-id='type-id-3202' size-in-bits='64' id='type-id-2100'/>
+      <pointer-type-def type-id='type-id-3203' size-in-bits='64' id='type-id-2154'/>
+      <pointer-type-def type-id='type-id-2158' size-in-bits='64' id='type-id-2148'/>
+      <pointer-type-def type-id='type-id-3204' size-in-bits='64' id='type-id-2134'/>
+      <pointer-type-def type-id='type-id-3205' size-in-bits='64' id='type-id-2571'/>
+      <pointer-type-def type-id='type-id-3206' size-in-bits='64' id='type-id-1454'/>
+      <pointer-type-def type-id='type-id-3207' size-in-bits='64' id='type-id-1770'/>
+      <pointer-type-def type-id='type-id-3208' size-in-bits='64' id='type-id-1370'/>
+      <pointer-type-def type-id='type-id-3209' size-in-bits='64' id='type-id-2345'/>
+      <pointer-type-def type-id='type-id-3210' size-in-bits='64' id='type-id-1947'/>
+      <pointer-type-def type-id='type-id-3211' size-in-bits='64' id='type-id-1951'/>
+      <pointer-type-def type-id='type-id-3212' size-in-bits='64' id='type-id-2007'/>
+      <pointer-type-def type-id='type-id-3213' size-in-bits='64' id='type-id-2590'/>
+      <pointer-type-def type-id='type-id-3214' size-in-bits='64' id='type-id-2438'/>
+      <pointer-type-def type-id='type-id-3215' size-in-bits='64' id='type-id-1468'/>
+      <pointer-type-def type-id='type-id-3216' size-in-bits='64' id='type-id-1473'/>
+      <pointer-type-def type-id='type-id-3217' size-in-bits='64' id='type-id-517'/>
+      <pointer-type-def type-id='type-id-3218' size-in-bits='64' id='type-id-1953'/>
+      <pointer-type-def type-id='type-id-533' size-in-bits='64' id='type-id-2486'/>
+      <pointer-type-def type-id='type-id-3219' size-in-bits='64' id='type-id-1591'/>
+      <pointer-type-def type-id='type-id-3220' size-in-bits='64' id='type-id-1369'/>
+      <pointer-type-def type-id='type-id-3221' size-in-bits='64' id='type-id-1269'/>
+      <pointer-type-def type-id='type-id-3222' size-in-bits='64' id='type-id-1266'/>
+      <pointer-type-def type-id='type-id-3223' size-in-bits='64' id='type-id-2168'/>
+      <pointer-type-def type-id='type-id-3224' size-in-bits='64' id='type-id-2185'/>
+      <pointer-type-def type-id='type-id-3225' size-in-bits='64' id='type-id-2069'/>
+      <pointer-type-def type-id='type-id-3226' size-in-bits='64' id='type-id-1416'/>
+      <pointer-type-def type-id='type-id-3227' size-in-bits='64' id='type-id-1954'/>
+      <pointer-type-def type-id='type-id-3228' size-in-bits='64' id='type-id-1743'/>
+      <pointer-type-def type-id='type-id-3229' size-in-bits='64' id='type-id-1453'/>
+      <pointer-type-def type-id='type-id-3230' size-in-bits='64' id='type-id-1455'/>
+      <pointer-type-def type-id='type-id-3231' size-in-bits='64' id='type-id-1424'/>
+      <pointer-type-def type-id='type-id-3232' size-in-bits='64' id='type-id-1948'/>
+      <pointer-type-def type-id='type-id-3233' size-in-bits='64' id='type-id-2485'/>
+      <pointer-type-def type-id='type-id-15' size-in-bits='64' id='type-id-528'/>
+      <qualified-type-def type-id='type-id-192' volatile='yes' id='type-id-1497'/>
+      <pointer-type-def type-id='type-id-225' size-in-bits='64' id='type-id-881'/>
+      <pointer-type-def type-id='type-id-1107' size-in-bits='64' id='type-id-2058'/>
+      <pointer-type-def type-id='type-id-1522' size-in-bits='64' id='type-id-2373'/>
+      <pointer-type-def type-id='type-id-2064' size-in-bits='64' id='type-id-2057'/>
+      <pointer-type-def type-id='type-id-1108' size-in-bits='64' id='type-id-1680'/>
+      <pointer-type-def type-id='type-id-255' size-in-bits='64' id='type-id-3234'/>
+      <pointer-type-def type-id='type-id-1109' size-in-bits='64' id='type-id-654'/>
+      <pointer-type-def type-id='type-id-1110' size-in-bits='64' id='type-id-1681'/>
+      <pointer-type-def type-id='type-id-1111' size-in-bits='64' id='type-id-3235'/>
+      <pointer-type-def type-id='type-id-1837' size-in-bits='64' id='type-id-3236'/>
+      <pointer-type-def type-id='type-id-3236' size-in-bits='64' id='type-id-3237'/>
+      <pointer-type-def type-id='type-id-1113' size-in-bits='64' id='type-id-1836'/>
+      <pointer-type-def type-id='type-id-1114' size-in-bits='64' id='type-id-2418'/>
+      <pointer-type-def type-id='type-id-2005' size-in-bits='64' id='type-id-1688'/>
+      <pointer-type-def type-id='type-id-2006' size-in-bits='64' id='type-id-1216'/>
+      <pointer-type-def type-id='type-id-1115' size-in-bits='64' id='type-id-2230'/>
+      <function-decl name='arch_bpf_jit_check_func' mangled-name='arch_bpf_jit_check_func' filepath='arch/arm64/net/bpf_jit_comp.c' line='954' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='arch_bpf_jit_check_func'>
+        <parameter type-id='type-id-2636' name='prog' filepath='arch/arm64/net/bpf_jit_comp.c' line='954' column='1'/>
+        <return type-id='type-id-33'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-2607'>
+        <parameter type-id='type-id-1687'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-1687'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2614'>
+        <parameter type-id='type-id-2612'/>
+        <return type-id='type-id-1232'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2616'>
+        <parameter type-id='type-id-365'/>
+        <return type-id='type-id-365'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2618'>
+        <parameter type-id='type-id-23'/>
+        <parameter type-id='type-id-2'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2619'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-874'/>
+        <return type-id='type-id-2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2620'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-874'/>
+        <parameter type-id='type-id-3017'/>
+        <parameter type-id='type-id-3010'/>
+        <return type-id='type-id-2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2641'>
+        <parameter type-id='type-id-23'/>
+        <parameter type-id='type-id-1129'/>
+        <parameter type-id='type-id-2734'/>
+        <return type-id='type-id-4'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2642'>
+        <parameter type-id='type-id-1395'/>
+        <parameter type-id='type-id-379'/>
+        <return type-id='type-id-4'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2644'>
+        <parameter type-id='type-id-1209'/>
+        <return type-id='type-id-4'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2687'>
+        <parameter type-id='type-id-379'/>
+        <return type-id='type-id-2184'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2733'>
+        <parameter type-id='type-id-1597'/>
+        <return type-id='type-id-1598'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2735'>
+        <parameter type-id='type-id-23'/>
+        <parameter type-id='type-id-2672'/>
+        <return type-id='type-id-23'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2736'>
+        <parameter type-id='type-id-1349'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-4'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-23'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2737'>
+        <parameter type-id='type-id-1129'/>
+        <parameter type-id='type-id-23'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-23'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2738'>
+        <parameter type-id='type-id-1284'/>
+        <parameter type-id='type-id-1349'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-4'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-23'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2743'>
+        <parameter type-id='type-id-28'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-2742'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2745'>
+        <parameter type-id='type-id-1129'/>
+        <return type-id='type-id-2744'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2747'>
+        <parameter type-id='type-id-2746'/>
+        <return type-id='type-id-2746'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2748'>
+        <parameter type-id='type-id-2746'/>
+        <parameter type-id='type-id-511'/>
+        <return type-id='type-id-2746'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2750'>
+        <parameter type-id='type-id-1558'/>
+        <return type-id='type-id-1555'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2773'>
+        <parameter type-id='type-id-2180'/>
+        <return type-id='type-id-2025'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2774'>
+        <parameter type-id='type-id-2180'/>
+        <parameter type-id='type-id-4'/>
+        <return type-id='type-id-2025'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2775'>
+        <parameter type-id='type-id-2180'/>
+        <parameter type-id='type-id-2025'/>
+        <return type-id='type-id-2025'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2776'>
+        <parameter type-id='type-id-2025'/>
+        <return type-id='type-id-2025'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2786'>
+        <parameter type-id='type-id-28'/>
+        <return type-id='type-id-1129'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2787'>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2788'>
+        <parameter type-id='type-id-1687'/>
+        <parameter type-id='type-id-2778'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2789'>
+        <parameter type-id='type-id-1687'/>
+        <parameter type-id='type-id-1998'/>
+        <parameter type-id='type-id-1826'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2790'>
+        <parameter type-id='type-id-1687'/>
+        <parameter type-id='type-id-1768'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2791'>
+        <parameter type-id='type-id-1687'/>
+        <parameter type-id='type-id-7'/>
+        <parameter type-id='type-id-7'/>
+        <parameter type-id='type-id-3034'/>
+        <parameter type-id='type-id-45'/>
+        <parameter type-id='type-id-1826'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2792'>
+        <parameter type-id='type-id-1687'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2793'>
+        <parameter type-id='type-id-1687'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2794'>
+        <parameter type-id='type-id-1687'/>
+        <parameter type-id='type-id-16'/>
+        <parameter type-id='type-id-1687'/>
+        <parameter type-id='type-id-2608'/>
+        <parameter type-id='type-id-1826'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2795'>
+        <parameter type-id='type-id-1687'/>
+        <parameter type-id='type-id-16'/>
+        <parameter type-id='type-id-2778'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2796'>
+        <parameter type-id='type-id-1687'/>
+        <parameter type-id='type-id-16'/>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-3064'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2797'>
+        <parameter type-id='type-id-1281'/>
+        <parameter type-id='type-id-512'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2798'>
+        <parameter type-id='type-id-1281'/>
+        <parameter type-id='type-id-512'/>
+        <parameter type-id='type-id-512'/>
+        <parameter type-id='type-id-2136'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2799'>
+        <parameter type-id='type-id-1281'/>
+        <parameter type-id='type-id-3235'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2800'>
+        <parameter type-id='type-id-2612'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2801'>
+        <parameter type-id='type-id-1232'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2802'>
+        <parameter type-id='type-id-1232'/>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2803'>
+        <parameter type-id='type-id-1232'/>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-40'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2804'>
+        <parameter type-id='type-id-1821'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2805'>
+        <parameter type-id='type-id-1821'/>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2806'>
+        <parameter type-id='type-id-1821'/>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-40'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2807'>
+        <parameter type-id='type-id-1230'/>
+        <parameter type-id='type-id-2628'/>
+        <parameter type-id='type-id-2612'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2808'>
+        <parameter type-id='type-id-2615'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2809'>
+        <parameter type-id='type-id-365'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2810'>
+        <parameter type-id='type-id-365'/>
+        <parameter type-id='type-id-2346'/>
+        <parameter type-id='type-id-1548'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2811'>
+        <parameter type-id='type-id-365'/>
+        <parameter type-id='type-id-2346'/>
+        <parameter type-id='type-id-40'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2812'>
+        <parameter type-id='type-id-2617'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2813'>
+        <parameter type-id='type-id-2'/>
+        <parameter type-id='type-id-2678'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2814'>
+        <parameter type-id='type-id-2632'/>
+        <parameter type-id='type-id-2640'/>
+        <parameter type-id='type-id-2640'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2815'>
+        <parameter type-id='type-id-4'/>
+        <parameter type-id='type-id-2678'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2816'>
+        <parameter type-id='type-id-2647'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2817'>
+        <parameter type-id='type-id-2647'/>
+        <parameter type-id='type-id-3049'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2818'>
+        <parameter type-id='type-id-2647'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-4'/>
+        <parameter type-id='type-id-2712'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2819'>
+        <parameter type-id='type-id-2180'/>
+        <parameter type-id='type-id-4'/>
+        <parameter type-id='type-id-1389'/>
+        <parameter type-id='type-id-84'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2820'>
+        <parameter type-id='type-id-2180'/>
+        <parameter type-id='type-id-4'/>
+        <parameter type-id='type-id-4'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-2777'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2821'>
+        <parameter type-id='type-id-2180'/>
+        <parameter type-id='type-id-4'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-84'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2822'>
+        <parameter type-id='type-id-2180'/>
+        <parameter type-id='type-id-240'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2823'>
+        <parameter type-id='type-id-2180'/>
+        <parameter type-id='type-id-2772'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2824'>
+        <parameter type-id='type-id-2695'/>
+        <parameter type-id='type-id-2779'/>
+        <parameter type-id='type-id-926'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2825'>
+        <parameter type-id='type-id-2697'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2826'>
+        <parameter type-id='type-id-2708'/>
+        <parameter type-id='type-id-3015'/>
+        <parameter type-id='type-id-7'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2827'>
+        <parameter type-id='type-id-2708'/>
+        <parameter type-id='type-id-33'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2828'>
+        <parameter type-id='type-id-2720'/>
+        <parameter type-id='type-id-256'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-1605'>
+        <parameter type-id='type-id-1596'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-3056'/>
+        <parameter type-id='type-id-85'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2829'>
+        <parameter type-id='type-id-1585'/>
+        <parameter type-id='type-id-1596'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2830'>
+        <parameter type-id='type-id-1598'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2831'>
+        <parameter type-id='type-id-23'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2832'>
+        <parameter type-id='type-id-23'/>
+        <parameter type-id='type-id-2'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2833'>
+        <parameter type-id='type-id-23'/>
+        <parameter type-id='type-id-2780'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2834'>
+        <parameter type-id='type-id-23'/>
+        <parameter type-id='type-id-1129'/>
+        <parameter type-id='type-id-23'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2835'>
+        <parameter type-id='type-id-23'/>
+        <parameter type-id='type-id-3016'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2836'>
+        <parameter type-id='type-id-23'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2837'>
+        <parameter type-id='type-id-240'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2838'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-2013'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2839'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-3012'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2840'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-920'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-2160'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2841'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-922'/>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-2083'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2842'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-2083'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2843'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-2055'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2844'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-40'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2845'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-1209'/>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-2083'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2846'>
+        <parameter type-id='type-id-2740'/>
+        <parameter type-id='type-id-4'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-763'/>
+        <parameter type-id='type-id-40'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2847'>
+        <parameter type-id='type-id-2742'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2848'>
+        <parameter type-id='type-id-2749'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-1957'>
+        <parameter type-id='type-id-1806'/>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2849'>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-1281'/>
+        <parameter type-id='type-id-877'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2850'>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-1281'/>
+        <parameter type-id='type-id-763'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-923'/>
+        <parameter type-id='type-id-528'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2851'>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-1281'/>
+        <parameter type-id='type-id-763'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-512'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2852'>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-2740'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2853'>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-2579'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2854'>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-379'/>
+        <parameter type-id='type-id-2610'/>
+        <parameter type-id='type-id-1209'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2855'>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-192'/>
+        <parameter type-id='type-id-2771'/>
+        <parameter type-id='type-id-528'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2856'>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-512'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2857'>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-2577'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2858'>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-763'/>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-763'/>
+        <parameter type-id='type-id-40'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2859'>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-763'/>
+        <parameter type-id='type-id-763'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2860'>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-1209'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2861'>
+        <parameter type-id='type-id-2579'/>
+        <parameter type-id='type-id-2579'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2862'>
+        <parameter type-id='type-id-2579'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2863'>
+        <parameter type-id='type-id-2579'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-877'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2864'>
+        <parameter type-id='type-id-1129'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2865'>
+        <parameter type-id='type-id-1129'/>
+        <parameter type-id='type-id-23'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2866'>
+        <parameter type-id='type-id-1129'/>
+        <parameter type-id='type-id-23'/>
+        <parameter type-id='type-id-4'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2867'>
+        <parameter type-id='type-id-1129'/>
+        <parameter type-id='type-id-23'/>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-329'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2868'>
+        <parameter type-id='type-id-1129'/>
+        <parameter type-id='type-id-23'/>
+        <parameter type-id='type-id-1129'/>
+        <parameter type-id='type-id-23'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2869'>
+        <parameter type-id='type-id-1129'/>
+        <parameter type-id='type-id-23'/>
+        <parameter type-id='type-id-329'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2870'>
+        <parameter type-id='type-id-1129'/>
+        <parameter type-id='type-id-23'/>
+        <parameter type-id='type-id-329'/>
+        <parameter type-id='type-id-33'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2871'>
+        <parameter type-id='type-id-1129'/>
+        <parameter type-id='type-id-23'/>
+        <parameter type-id='type-id-329'/>
+        <parameter type-id='type-id-269'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2872'>
+        <parameter type-id='type-id-1129'/>
+        <parameter type-id='type-id-2770'/>
+        <parameter type-id='type-id-40'/>
+        <parameter type-id='type-id-40'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2873'>
+        <parameter type-id='type-id-1129'/>
+        <parameter type-id='type-id-83'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2874'>
+        <parameter type-id='type-id-1129'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2875'>
+        <parameter type-id='type-id-1129'/>
+        <parameter type-id='type-id-3013'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2876'>
+        <parameter type-id='type-id-1129'/>
+        <parameter type-id='type-id-1301'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2877'>
+        <parameter type-id='type-id-1129'/>
+        <parameter type-id='type-id-3047'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2878'>
+        <parameter type-id='type-id-1129'/>
+        <parameter type-id='type-id-3066'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2879'>
+        <parameter type-id='type-id-1129'/>
+        <parameter type-id='type-id-3235'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2880'>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2881'>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-2697'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2882'>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2883'>
+        <parameter type-id='type-id-1397'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2884'>
+        <parameter type-id='type-id-1397'/>
+        <parameter type-id='type-id-4'/>
+        <parameter type-id='type-id-329'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2885'>
+        <parameter type-id='type-id-1397'/>
+        <parameter type-id='type-id-1397'/>
+        <parameter type-id='type-id-4'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2886'>
+        <parameter type-id='type-id-3009'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2887'>
+        <parameter type-id='type-id-3009'/>
+        <parameter type-id='type-id-1209'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2888'>
+        <parameter type-id='type-id-1432'/>
+        <parameter type-id='type-id-666'/>
+        <parameter type-id='type-id-2'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2889'>
+        <parameter type-id='type-id-1356'/>
+        <parameter type-id='type-id-2685'/>
+        <parameter type-id='type-id-2683'/>
+        <parameter type-id='type-id-1356'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2890'>
+        <parameter type-id='type-id-1395'/>
+        <parameter type-id='type-id-379'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2892'>
+        <parameter type-id='type-id-1395'/>
+        <parameter type-id='type-id-379'/>
+        <parameter type-id='type-id-3012'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2894'>
+        <parameter type-id='type-id-260'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2895'>
+        <parameter type-id='type-id-3023'/>
+        <parameter type-id='type-id-3034'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-878'/>
+        <parameter type-id='type-id-688'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2896'>
+        <parameter type-id='type-id-3023'/>
+        <parameter type-id='type-id-3034'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-878'/>
+        <parameter type-id='type-id-688'/>
+        <parameter type-id='type-id-688'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2897'>
+        <parameter type-id='type-id-1645'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-3034'/>
+        <parameter type-id='type-id-3034'/>
+        <parameter type-id='type-id-1826'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2898'>
+        <parameter type-id='type-id-1645'/>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-1932'/>
+        <parameter type-id='type-id-16'/>
+        <parameter type-id='type-id-7'/>
+        <parameter type-id='type-id-3034'/>
+        <parameter type-id='type-id-528'/>
+        <parameter type-id='type-id-33'/>
+        <parameter type-id='type-id-1826'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2899'>
+        <parameter type-id='type-id-1645'/>
+        <parameter type-id='type-id-1648'/>
+        <parameter type-id='type-id-1768'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2900'>
+        <parameter type-id='type-id-1645'/>
+        <parameter type-id='type-id-1932'/>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-3064'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2901'>
+        <parameter type-id='type-id-1650'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2902'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-2'/>
+        <parameter type-id='type-id-84'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2903'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-2658'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2904'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-2661'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2905'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-2720'/>
+        <parameter type-id='type-id-688'/>
+        <parameter type-id='type-id-7'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2906'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-2727'/>
+        <parameter type-id='type-id-658'/>
+        <parameter type-id='type-id-2728'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2907'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-2727'/>
+        <parameter type-id='type-id-658'/>
+        <parameter type-id='type-id-2728'/>
+        <parameter type-id='type-id-1567'/>
+        <parameter type-id='type-id-33'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2908'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-1886'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2909'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-1806'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2910'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-2751'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2911'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-2752'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2912'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-2753'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2913'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-2755'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2914'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-2755'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2915'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-2756'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2916'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-2757'/>
+        <parameter type-id='type-id-3121'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2917'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-2758'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2918'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-2759'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2919'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-2760'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2920'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-2761'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2921'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-2762'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2922'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-2764'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2923'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-2765'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2924'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-2765'/>
+        <parameter type-id='type-id-1567'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2925'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-2768'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2926'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-2769'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2927'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-2783'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2928'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-2784'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2929'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2930'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-2781'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2931'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-2782'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2932'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2933'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2934'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-3034'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2935'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-1768'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2936'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-33'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2937'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-688'/>
+        <parameter type-id='type-id-214'/>
+        <parameter type-id='type-id-926'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2938'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-7'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2939'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-40'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2940'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-3121'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2941'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-3237'/>
+        <parameter type-id='type-id-7'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2942'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-3024'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2943'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-3025'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2944'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-1650'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2945'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-1826'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2946'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-3034'/>
+        <parameter type-id='type-id-3034'/>
+        <parameter type-id='type-id-1826'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2947'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-3030'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2948'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-3031'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2949'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-3034'/>
+        <parameter type-id='type-id-3034'/>
+        <parameter type-id='type-id-1826'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2950'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-3035'/>
+        <parameter type-id='type-id-688'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2951'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-1768'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2952'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-926'/>
+        <parameter type-id='type-id-688'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2953'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-33'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2954'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-1668'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2955'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-7'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2956'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-7'/>
+        <parameter type-id='type-id-2753'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2957'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-1567'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2958'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-1567'/>
+        <parameter type-id='type-id-3121'/>
+        <parameter type-id='type-id-3121'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2959'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-1567'/>
+        <parameter type-id='type-id-3121'/>
+        <parameter type-id='type-id-3121'/>
+        <parameter type-id='type-id-7'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2960'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2961'>
+        <parameter type-id='type-id-3033'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2962'>
+        <parameter type-id='type-id-3034'/>
+        <parameter type-id='type-id-3034'/>
+        <parameter type-id='type-id-1826'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2963'>
+        <parameter type-id='type-id-512'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2964'>
+        <parameter type-id='type-id-512'/>
+        <parameter type-id='type-id-485'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2965'>
+        <parameter type-id='type-id-512'/>
+        <parameter type-id='type-id-16'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2966'>
+        <parameter type-id='type-id-512'/>
+        <parameter type-id='type-id-3235'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2967'>
+        <parameter type-id='type-id-87'/>
+        <parameter type-id='type-id-2123'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2968'>
+        <parameter type-id='type-id-3051'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2969'>
+        <parameter type-id='type-id-88'/>
+        <parameter type-id='type-id-365'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2970'>
+        <parameter type-id='type-id-88'/>
+        <parameter type-id='type-id-23'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2971'>
+        <parameter type-id='type-id-88'/>
+        <parameter type-id='type-id-1397'/>
+        <parameter type-id='type-id-1432'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2972'>
+        <parameter type-id='type-id-88'/>
+        <parameter type-id='type-id-1432'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2973'>
+        <parameter type-id='type-id-88'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2974'>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-1687'/>
+        <parameter type-id='type-id-3058'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2975'>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-2697'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2976'>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-2697'/>
+        <parameter type-id='type-id-2697'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2977'>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-2697'/>
+        <parameter type-id='type-id-666'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2978'>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-1943'/>
+        <parameter type-id='type-id-3062'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2979'>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-1645'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2980'>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-312'/>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2981'>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-3033'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2982'>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-3033'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-666'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2983'>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-7'/>
+        <parameter type-id='type-id-7'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-7'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2984'>
+        <parameter type-id='type-id-28'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2986'>
+        <parameter type-id='type-id-28'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2987'>
+        <parameter type-id='type-id-28'/>
+        <parameter type-id='type-id-666'/>
+        <parameter type-id='type-id-2'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2988'>
+        <parameter type-id='type-id-28'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-2708'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2989'>
+        <parameter type-id='type-id-28'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-3044'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2990'>
+        <parameter type-id='type-id-28'/>
+        <parameter type-id='type-id-3014'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2991'>
+        <parameter type-id='type-id-28'/>
+        <parameter type-id='type-id-3014'/>
+        <parameter type-id='type-id-3043'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2992'>
+        <parameter type-id='type-id-28'/>
+        <parameter type-id='type-id-512'/>
+        <parameter type-id='type-id-485'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2993'>
+        <parameter type-id='type-id-28'/>
+        <parameter type-id='type-id-3045'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2985'>
+        <parameter type-id='type-id-28'/>
+        <parameter type-id='type-id-2495'/>
+        <parameter type-id='type-id-3043'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2994'>
+        <parameter type-id='type-id-28'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2995'>
+        <parameter type-id='type-id-3059'/>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-3053'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2996'>
+        <parameter type-id='type-id-431'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2997'>
+        <parameter type-id='type-id-1932'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2998'>
+        <parameter type-id='type-id-1932'/>
+        <parameter type-id='type-id-33'/>
+        <parameter type-id='type-id-3060'/>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-1826'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2999'>
+        <parameter type-id='type-id-1932'/>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-2611'/>
+        <parameter type-id='type-id-1826'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3000'>
+        <parameter type-id='type-id-1284'/>
+        <parameter type-id='type-id-23'/>
+        <parameter type-id='type-id-2780'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3001'>
+        <parameter type-id='type-id-1284'/>
+        <parameter type-id='type-id-1129'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3002'>
+        <parameter type-id='type-id-1284'/>
+        <parameter type-id='type-id-88'/>
+        <parameter type-id='type-id-23'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3003'>
+        <parameter type-id='type-id-1284'/>
+        <parameter type-id='type-id-28'/>
+        <parameter type-id='type-id-666'/>
+        <parameter type-id='type-id-2'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3004'>
+        <parameter type-id='type-id-1209'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3005'>
+        <parameter type-id='type-id-1209'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3006'>
+        <parameter type-id='type-id-1209'/>
+        <parameter type-id='type-id-16'/>
+        <parameter type-id='type-id-2706'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-2422'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3007'>
+        <parameter type-id='type-id-1209'/>
+        <parameter type-id='type-id-16'/>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3018'>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-763'/>
+        <parameter type-id='type-id-763'/>
+        <return type-id='type-id-192'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3019'>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-192'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3020'>
+        <parameter type-id='type-id-3050'/>
+        <return type-id='type-id-192'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3021'>
+        <parameter type-id='type-id-28'/>
+        <parameter type-id='type-id-3054'/>
+        <return type-id='type-id-192'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3026'>
+        <parameter type-id='type-id-2656'/>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-3025'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3027'>
+        <parameter type-id='type-id-2697'/>
+        <return type-id='type-id-1645'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3029'>
+        <parameter type-id='type-id-1650'/>
+        <return type-id='type-id-3028'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3032'>
+        <parameter type-id='type-id-1687'/>
+        <parameter type-id='type-id-3064'/>
+        <return type-id='type-id-1685'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3036'>
+        <parameter type-id='type-id-1209'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-512'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3042'>
+        <parameter type-id='type-id-1129'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-1301'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3048'>
+        <parameter type-id='type-id-1129'/>
+        <return type-id='type-id-3047'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3057'>
+        <parameter type-id='type-id-1687'/>
+        <return type-id='type-id-1768'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3061'>
+        <parameter type-id='type-id-1687'/>
+        <parameter type-id='type-id-16'/>
+        <parameter type-id='type-id-1826'/>
+        <return type-id='type-id-1960'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3069'>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-879'/>
+        <return type-id='type-id-880'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3070'>
+        <parameter type-id='type-id-3009'/>
+        <parameter type-id='type-id-879'/>
+        <return type-id='type-id-880'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3071'>
+        <return type-id='type-id-33'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3072'>
+        <parameter type-id='type-id-4'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-33'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3073'>
+        <parameter type-id='type-id-2180'/>
+        <return type-id='type-id-33'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3074'>
+        <parameter type-id='type-id-2180'/>
+        <parameter type-id='type-id-4'/>
+        <return type-id='type-id-33'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3075'>
+        <parameter type-id='type-id-2697'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-33'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3076'>
+        <parameter type-id='type-id-2579'/>
+        <return type-id='type-id-33'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3077'>
+        <parameter type-id='type-id-512'/>
+        <parameter type-id='type-id-2137'/>
+        <return type-id='type-id-33'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3078'>
+        <parameter type-id='type-id-87'/>
+        <parameter type-id='type-id-2123'/>
+        <return type-id='type-id-33'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3079'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-512'/>
+        <parameter type-id='type-id-16'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-2160'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-2083'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3080'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-99'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-2160'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-2083'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3081'>
+        <parameter type-id='type-id-2577'/>
+        <return type-id='type-id-2577'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3082'>
+        <return type-id='type-id-682'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3083'>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-763'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-763'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3084'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-1668'/>
+        <return type-id='type-id-1668'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3085'>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-1668'/>
+        <return type-id='type-id-1668'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3086'>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-1650'/>
+        <return type-id='type-id-1752'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-1927'>
+        <parameter type-id='type-id-3058'/>
+        <return type-id='type-id-1930'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3087'>
+        <parameter type-id='type-id-365'/>
+        <parameter type-id='type-id-2346'/>
+        <return type-id='type-id-1548'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3088'>
+        <parameter type-id='type-id-1281'/>
+        <parameter type-id='type-id-386'/>
+        <return type-id='type-id-386'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3089'>
+        <parameter type-id='type-id-2697'/>
+        <return type-id='type-id-84'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3090'>
+        <parameter type-id='type-id-2697'/>
+        <parameter type-id='type-id-2697'/>
+        <return type-id='type-id-84'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3091'>
+        <parameter type-id='type-id-2697'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-84'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3092'>
+        <parameter type-id='type-id-23'/>
+        <parameter type-id='type-id-2'/>
+        <parameter type-id='type-id-84'/>
+        <return type-id='type-id-86'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3093'>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-2'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-85'/>
+        <return type-id='type-id-86'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3094'>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-4'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-85'/>
+        <return type-id='type-id-86'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3095'>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-379'/>
+        <parameter type-id='type-id-2610'/>
+        <parameter type-id='type-id-2'/>
+        <parameter type-id='type-id-763'/>
+        <parameter type-id='type-id-84'/>
+        <return type-id='type-id-86'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3096'>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-85'/>
+        <parameter type-id='type-id-87'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-86'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3097'>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-512'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-85'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-86'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3098'>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-763'/>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-763'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-86'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3099'>
+        <parameter type-id='type-id-3009'/>
+        <parameter type-id='type-id-2'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-763'/>
+        <return type-id='type-id-86'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3100'>
+        <parameter type-id='type-id-3011'/>
+        <parameter type-id='type-id-3008'/>
+        <return type-id='type-id-86'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3101'>
+        <parameter type-id='type-id-379'/>
+        <parameter type-id='type-id-2609'/>
+        <parameter type-id='type-id-2'/>
+        <return type-id='type-id-86'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3102'>
+        <parameter type-id='type-id-379'/>
+        <parameter type-id='type-id-2609'/>
+        <parameter type-id='type-id-4'/>
+        <parameter type-id='type-id-84'/>
+        <return type-id='type-id-86'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3103'>
+        <parameter type-id='type-id-1374'/>
+        <parameter type-id='type-id-3022'/>
+        <parameter type-id='type-id-2'/>
+        <return type-id='type-id-86'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3104'>
+        <parameter type-id='type-id-1374'/>
+        <parameter type-id='type-id-3022'/>
+        <parameter type-id='type-id-4'/>
+        <parameter type-id='type-id-84'/>
+        <return type-id='type-id-86'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3105'>
+        <parameter type-id='type-id-87'/>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-85'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-86'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3106'>
+        <parameter type-id='type-id-28'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-2'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-763'/>
+        <return type-id='type-id-86'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3107'>
+        <parameter type-id='type-id-28'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-4'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-763'/>
+        <return type-id='type-id-86'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3108'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-1650'/>
+        <return type-id='type-id-688'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3109'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-1772'/>
+        <return type-id='type-id-688'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3110'>
+        <parameter type-id='type-id-1687'/>
+        <return type-id='type-id-7'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3111'>
+        <parameter type-id='type-id-1232'/>
+        <parameter type-id='type-id-2613'/>
+        <return type-id='type-id-7'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3112'>
+        <parameter type-id='type-id-1650'/>
+        <return type-id='type-id-7'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3113'>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-7'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3114'>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-7'/>
+        <parameter type-id='type-id-7'/>
+        <return type-id='type-id-7'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3115'>
+        <parameter type-id='type-id-365'/>
+        <parameter type-id='type-id-2346'/>
+        <return type-id='type-id-40'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3116'>
+        <parameter type-id='type-id-379'/>
+        <parameter type-id='type-id-2609'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-329'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3117'>
+        <parameter type-id='type-id-379'/>
+        <parameter type-id='type-id-2610'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-329'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3118'>
+        <parameter type-id='type-id-3133'/>
+        <return type-id='type-id-2420'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3119'>
+        <parameter type-id='type-id-3133'/>
+        <parameter type-id='type-id-2429'/>
+        <return type-id='type-id-2420'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3120'>
+        <parameter type-id='type-id-2746'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-1567'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3123'>
+        <return type-id='type-id-5'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3124'>
+        <parameter type-id='type-id-2656'/>
+        <return type-id='type-id-5'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3125'>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-2630'/>
+        <return type-id='type-id-5'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3126'>
+        <parameter type-id='type-id-1687'/>
+        <parameter type-id='type-id-7'/>
+        <return type-id='type-id-16'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3127'>
+        <parameter type-id='type-id-1687'/>
+        <parameter type-id='type-id-16'/>
+        <parameter type-id='type-id-7'/>
+        <return type-id='type-id-16'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3128'>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-16'/>
+        <parameter type-id='type-id-16'/>
+        <parameter type-id='type-id-16'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-16'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3129'>
+        <parameter type-id='type-id-2579'/>
+        <return type-id='type-id-16'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3130'>
+        <parameter type-id='type-id-3055'/>
+        <parameter type-id='type-id-3054'/>
+        <return type-id='type-id-16'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3131'>
+        <parameter type-id='type-id-1209'/>
+        <return type-id='type-id-16'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3132'>
+        <parameter type-id='type-id-3037'/>
+        <return type-id='type-id-1284'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2370'>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3134'>
+        <parameter type-id='type-id-1687'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3135'>
+        <parameter type-id='type-id-1687'/>
+        <parameter type-id='type-id-3046'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3136'>
+        <parameter type-id='type-id-1687'/>
+        <parameter type-id='type-id-7'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3137'>
+        <parameter type-id='type-id-1687'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3138'>
+        <parameter type-id='type-id-1232'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3139'>
+        <parameter type-id='type-id-1232'/>
+        <parameter type-id='type-id-83'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3140'>
+        <parameter type-id='type-id-1232'/>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-88'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3141'>
+        <parameter type-id='type-id-91'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3142'>
+        <parameter type-id='type-id-365'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3143'>
+        <parameter type-id='type-id-365'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3144'>
+        <parameter type-id='type-id-2617'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3145'>
+        <parameter type-id='type-id-2027'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3146'>
+        <parameter type-id='type-id-2656'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3147'>
+        <parameter type-id='type-id-2708'/>
+        <parameter type-id='type-id-3037'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3148'>
+        <parameter type-id='type-id-1585'/>
+        <parameter type-id='type-id-1596'/>
+        <parameter type-id='type-id-3017'/>
+        <parameter type-id='type-id-3010'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3149'>
+        <parameter type-id='type-id-23'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3150'>
+        <parameter type-id='type-id-23'/>
+        <parameter type-id='type-id-1129'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3151'>
+        <parameter type-id='type-id-240'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3152'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-3017'/>
+        <parameter type-id='type-id-3010'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3153'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-920'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-2160'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3154'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-920'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-2160'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3155'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-33'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3156'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-2083'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-2160'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3157'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-2083'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-2160'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3158'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-738'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3159'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-2083'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3160'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-2160'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3161'>
+        <parameter type-id='type-id-2742'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3162'>
+        <parameter type-id='type-id-2746'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3163'>
+        <parameter type-id='type-id-2746'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3164'>
+        <parameter type-id='type-id-2746'/>
+        <parameter type-id='type-id-1648'/>
+        <parameter type-id='type-id-1768'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3165'>
+        <parameter type-id='type-id-2746'/>
+        <parameter type-id='type-id-1648'/>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-7'/>
+        <parameter type-id='type-id-33'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3166'>
+        <parameter type-id='type-id-83'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3167'>
+        <parameter type-id='type-id-2579'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3168'>
+        <parameter type-id='type-id-2579'/>
+        <parameter type-id='type-id-2579'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3169'>
+        <parameter type-id='type-id-2579'/>
+        <parameter type-id='type-id-528'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3170'>
+        <parameter type-id='type-id-2025'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3171'>
+        <parameter type-id='type-id-2779'/>
+        <parameter type-id='type-id-2697'/>
+        <parameter type-id='type-id-878'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3172'>
+        <parameter type-id='type-id-2785'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3173'>
+        <parameter type-id='type-id-2785'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3174'>
+        <parameter type-id='type-id-1129'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3175'>
+        <parameter type-id='type-id-1129'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2367'>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3176'>
+        <parameter type-id='type-id-3009'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3177'>
+        <parameter type-id='type-id-3011'/>
+        <parameter type-id='type-id-192'/>
+        <parameter type-id='type-id-192'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3178'>
+        <parameter type-id='type-id-379'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3179'>
+        <parameter type-id='type-id-379'/>
+        <parameter type-id='type-id-3017'/>
+        <parameter type-id='type-id-3010'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3180'>
+        <parameter type-id='type-id-2325'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3181'>
+        <parameter type-id='type-id-260'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3182'>
+        <parameter type-id='type-id-260'/>
+        <parameter type-id='type-id-4'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3183'>
+        <parameter type-id='type-id-1650'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3184'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-2751'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3185'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-2754'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3186'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-2762'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3187'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-2763'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3188'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-2764'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3189'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-2766'/>
+        <parameter type-id='type-id-1510'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3190'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-2767'/>
+        <parameter type-id='type-id-1510'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3191'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-2769'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3192'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3193'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-877'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3194'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-3025'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3195'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-3052'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3196'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-7'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3197'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-7'/>
+        <parameter type-id='type-id-3121'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3198'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-3122'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3199'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3200'>
+        <parameter type-id='type-id-512'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3201'>
+        <parameter type-id='type-id-512'/>
+        <parameter type-id='type-id-2611'/>
+        <parameter type-id='type-id-2611'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3202'>
+        <parameter type-id='type-id-512'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3203'>
+        <parameter type-id='type-id-512'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-2158'>
+        <parameter type-id='type-id-2147'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3204'>
+        <parameter type-id='type-id-87'/>
+        <parameter type-id='type-id-2123'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3205'>
+        <parameter type-id='type-id-88'/>
+        <parameter type-id='type-id-83'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3206'>
+        <parameter type-id='type-id-88'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3207'>
+        <parameter type-id='type-id-1768'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3208'>
+        <parameter type-id='type-id-28'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3209'>
+        <parameter type-id='type-id-431'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3210'>
+        <parameter type-id='type-id-1932'/>
+        <parameter type-id='type-id-1826'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3211'>
+        <parameter type-id='type-id-1932'/>
+        <parameter type-id='type-id-3063'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3212'>
+        <parameter type-id='type-id-3065'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3213'>
+        <parameter type-id='type-id-2577'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3214'>
+        <parameter type-id='type-id-2439'/>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3215'>
+        <parameter type-id='type-id-1209'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3216'>
+        <parameter type-id='type-id-3133'/>
+        <parameter type-id='type-id-16'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3217'>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3218'>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-7'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3219'>
+        <parameter type-id='type-id-3234'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3220'>
+        <return type-id='type-id-15'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3221'>
+        <parameter type-id='type-id-1232'/>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-15'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3222'>
+        <parameter type-id='type-id-1232'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-15'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3223'>
+        <parameter type-id='type-id-2180'/>
+        <parameter type-id='type-id-2651'/>
+        <return type-id='type-id-15'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3224'>
+        <parameter type-id='type-id-240'/>
+        <return type-id='type-id-15'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3225'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-2741'/>
+        <parameter type-id='type-id-485'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-15'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3226'>
+        <parameter type-id='type-id-379'/>
+        <return type-id='type-id-15'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3227'>
+        <parameter type-id='type-id-1645'/>
+        <parameter type-id='type-id-1938'/>
+        <parameter type-id='type-id-3034'/>
+        <parameter type-id='type-id-1826'/>
+        <return type-id='type-id-15'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3228'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-1650'/>
+        <return type-id='type-id-15'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3229'>
+        <parameter type-id='type-id-88'/>
+        <parameter type-id='type-id-85'/>
+        <return type-id='type-id-15'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3230'>
+        <parameter type-id='type-id-88'/>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-85'/>
+        <return type-id='type-id-15'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3231'>
+        <parameter type-id='type-id-1648'/>
+        <return type-id='type-id-15'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3232'>
+        <parameter type-id='type-id-1932'/>
+        <parameter type-id='type-id-7'/>
+        <return type-id='type-id-15'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3233'>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-15'/>
+      </function-type>
+      <union-decl name='__anonymous_union__38' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='624' column='1' id='type-id-1303'>
+        <data-member access='private'>
+          <var-decl name='i_nlink' type-id='type-id-893' visibility='default' filepath='include/linux/fs.h' line='625' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='__i_nlink' type-id='type-id-5' visibility='default' filepath='include/linux/fs.h' line='626' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__42' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/dcache.h' line='115' column='1' id='type-id-1291'>
+        <data-member access='private'>
+          <var-decl name='d_alias' type-id='type-id-520' visibility='default' filepath='include/linux/dcache.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='d_in_lookup_hash' type-id='type-id-1286' visibility='default' filepath='include/linux/dcache.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='d_rcu' type-id='type-id-385' visibility='default' filepath='include/linux/dcache.h' line='118' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__13' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/cred.h' line='154' column='1' id='type-id-1617'>
+        <data-member access='private'>
+          <var-decl name='non_rcu' type-id='type-id-17' visibility='default' filepath='include/linux/cred.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/linux/cred.h' line='156' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__41' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/dcache.h' line='106' column='1' id='type-id-1290'>
+        <data-member access='private'>
+          <var-decl name='d_lru' type-id='type-id-20' visibility='default' filepath='include/linux/dcache.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='d_wait' type-id='type-id-881' visibility='default' filepath='include/linux/dcache.h' line='108' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__12' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='158' column='1' id='type-id-1627'>
+        <data-member access='private'>
+          <var-decl name='graveyard_link' type-id='type-id-20' visibility='default' filepath='include/linux/key.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='serial_node' type-id='type-id-422' visibility='default' filepath='include/linux/key.h' line='160' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__31' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/iocontext.h' line='82' column='1' id='type-id-2377'>
+        <data-member access='private'>
+          <var-decl name='q_node' type-id='type-id-20' visibility='default' filepath='include/linux/iocontext.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='__rcu_icq_cache' type-id='type-id-538' visibility='default' filepath='include/linux/iocontext.h' line='84' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='898' column='1' id='type-id-1275'>
+        <data-member access='private'>
+          <var-decl name='fu_llist' type-id='type-id-281' visibility='default' filepath='include/linux/fs.h' line='899' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='fu_rcuhead' type-id='type-id-385' visibility='default' filepath='include/linux/fs.h' line='900' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__39' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='1064' column='1' id='type-id-2582'>
+        <data-member access='private'>
+          <var-decl name='nfs_fl' type-id='type-id-2595' visibility='default' filepath='include/linux/fs.h' line='1065' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='nfs4_fl' type-id='type-id-2597' visibility='default' filepath='include/linux/fs.h' line='1066' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='afs' type-id='type-id-2599' visibility='default' filepath='include/linux/fs.h' line='1070' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__44' is-anonymous='yes' visibility='default' filepath='include/linux/filter.h' line='502' column='1' id='type-id-1224'>
+        <data-member access='private'>
+          <var-decl name='insns' type-id='type-id-1172' visibility='default' filepath='include/linux/filter.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='insnsi' type-id='type-id-956' visibility='default' filepath='include/linux/filter.h' line='504' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__24' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='79' column='1' id='type-id-2088'>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='98' column='1' id='type-id-3238'>
+            <member-type access='public'>
+              <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='115' column='1' id='type-id-3239'>
+                <data-member access='private'>
+                  <var-decl name='s_mem' type-id='type-id-15' visibility='default' filepath='include/linux/mm_types.h' line='116' column='1'/>
+                </data-member>
+                <data-member access='private'>
+                  <var-decl name='counters' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='117' column='1'/>
+                </data-member>
+                <data-member access='private'>
+                  <var-decl name='' type-id='type-id-2139' visibility='default' filepath='include/linux/mm_types.h' line='118' column='1'/>
+                </data-member>
+              </union-decl>
+            </member-type>
+            <data-member access='public' layout-offset-in-bits='0'>
+              <var-decl name='' type-id='type-id-3240' visibility='default' filepath='include/linux/mm_types.h' line='99' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='128'>
+              <var-decl name='slab_cache' type-id='type-id-538' visibility='default' filepath='include/linux/mm_types.h' line='112' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='192'>
+              <var-decl name='freelist' type-id='type-id-15' visibility='default' filepath='include/linux/mm_types.h' line='114' column='1'/>
+            </data-member>
+          </class-decl>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__1' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='125' column='1' id='type-id-3241'>
+            <data-member access='public' layout-offset-in-bits='0'>
+              <var-decl name='compound_head' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='126' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='64'>
+              <var-decl name='compound_dtor' type-id='type-id-216' visibility='default' filepath='include/linux/mm_types.h' line='129' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='72'>
+              <var-decl name='compound_order' type-id='type-id-216' visibility='default' filepath='include/linux/mm_types.h' line='130' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='96'>
+              <var-decl name='compound_mapcount' type-id='type-id-26' visibility='default' filepath='include/linux/mm_types.h' line='131' column='1'/>
+            </data-member>
+          </class-decl>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__2' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='133' column='1' id='type-id-3242'>
+            <data-member access='public' layout-offset-in-bits='0'>
+              <var-decl name='_compound_pad_1' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='134' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='64'>
+              <var-decl name='_compound_pad_2' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='135' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='128'>
+              <var-decl name='deferred_list' type-id='type-id-20' visibility='default' filepath='include/linux/mm_types.h' line='136' column='1'/>
+            </data-member>
+          </class-decl>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__3' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='138' column='1' id='type-id-3243'>
+            <data-member access='public' layout-offset-in-bits='0'>
+              <var-decl name='_pt_pad_1' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='139' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='64'>
+              <var-decl name='pmd_huge_pte' type-id='type-id-2140' visibility='default' filepath='include/linux/mm_types.h' line='140' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='128'>
+              <var-decl name='_pt_pad_2' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='141' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='192'>
+              <var-decl name='' type-id='type-id-2141' visibility='default' filepath='include/linux/mm_types.h' line='142' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='256'>
+              <var-decl name='ptl' type-id='type-id-247' visibility='default' filepath='include/linux/mm_types.h' line='149' column='1'/>
+            </data-member>
+          </class-decl>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__4' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='152' column='1' id='type-id-3244'>
+            <data-member access='public' layout-offset-in-bits='0'>
+              <var-decl name='pgmap' type-id='type-id-2739' visibility='default' filepath='include/linux/mm_types.h' line='154' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='64'>
+              <var-decl name='hmm_data' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='155' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='128'>
+              <var-decl name='_zd_pad_1' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='156' column='1'/>
+            </data-member>
+          </class-decl>
+        </member-type>
+        <data-member access='private'>
+          <var-decl name='' type-id='type-id-2089' visibility='default' filepath='include/linux/mm_types.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='callback_head' type-id='type-id-385' visibility='default' filepath='include/linux/mm_types.h' line='160' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__35' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='303' column='1' id='type-id-1479'>
+        <data-member access='private'>
+          <var-decl name='shared' type-id='type-id-2419' visibility='default' filepath='include/linux/mm_types.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='anon_name' type-id='type-id-4' visibility='default' filepath='include/linux/mm_types.h' line='308' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__14' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='666' column='1' id='type-id-1764'>
+        <data-member access='private'>
+          <var-decl name='' type-id='type-id-1767' visibility='default' filepath='include/linux/skbuff.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rbnode' type-id='type-id-422' visibility='default' filepath='include/linux/skbuff.h' line='681' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/skbuff.h' line='682' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__23' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/netdevice.h' line='1989' column='1' id='type-id-1693'>
+        <data-member access='private'>
+          <var-decl name='ml_priv' type-id='type-id-15' visibility='default' filepath='include/linux/netdevice.h' line='1990' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='lstats' type-id='type-id-3039' visibility='default' filepath='include/linux/netdevice.h' line='1991' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='tstats' type-id='type-id-3040' visibility='default' filepath='include/linux/netdevice.h' line='1992' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='dstats' type-id='type-id-3038' visibility='default' filepath='include/linux/netdevice.h' line='1993' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='vstats' type-id='type-id-3041' visibility='default' filepath='include/linux/netdevice.h' line='1994' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__43' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/bpf.h' line='298' column='1' id='type-id-1234'>
+        <data-member access='private'>
+          <var-decl name='work' type-id='type-id-255' visibility='default' filepath='include/linux/bpf.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/linux/bpf.h' line='300' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__27' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='99' column='1' id='type-id-3240'>
+        <data-member access='private'>
+          <var-decl name='slab_list' type-id='type-id-20' visibility='default' filepath='include/linux/mm_types.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='type-id-2138' visibility='default' filepath='include/linux/mm_types.h' line='101' column='1'/>
+        </data-member>
+      </union-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/seq_file.c' language='LANG_C89'>
+      <function-decl name='seq_read' mangled-name='seq_read' filepath='fs/seq_file.c' line='153' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='seq_read'>
+        <parameter type-id='type-id-83' name='file' filepath='fs/seq_file.c' line='153' column='1'/>
+        <parameter type-id='type-id-2' name='buf' filepath='fs/seq_file.c' line='153' column='1'/>
+        <parameter type-id='type-id-84' name='size' filepath='fs/seq_file.c' line='153' column='1'/>
+        <parameter type-id='type-id-85' name='ppos' filepath='fs/seq_file.c' line='153' column='1'/>
+        <return type-id='type-id-86'/>
+      </function-decl>
+      <function-decl name='seq_lseek' mangled-name='seq_lseek' filepath='fs/seq_file.c' line='310' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='seq_lseek'>
+        <parameter type-id='type-id-83' name='file' filepath='fs/seq_file.c' line='310' column='1'/>
+        <parameter type-id='type-id-763' name='offset' filepath='fs/seq_file.c' line='310' column='1'/>
+        <parameter type-id='type-id-17' name='whence' filepath='fs/seq_file.c' line='310' column='1'/>
+        <return type-id='type-id-763'/>
+      </function-decl>
+      <function-decl name='seq_printf' mangled-name='seq_printf' filepath='fs/seq_file.c' line='401' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='seq_printf'>
+        <parameter type-id='type-id-88' name='m' filepath='fs/seq_file.c' line='401' column='1'/>
+        <parameter type-id='type-id-4' name='f' filepath='fs/seq_file.c' line='401' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='single_open' mangled-name='single_open' filepath='fs/seq_file.c' line='554' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='single_open'>
+        <parameter type-id='type-id-83' name='file' filepath='fs/seq_file.c' line='554' column='1'/>
+        <parameter type-id='type-id-311' name='show' filepath='fs/seq_file.c' line='554' column='1'/>
+        <parameter type-id='type-id-15' name='data' filepath='fs/seq_file.c' line='555' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='single_release' mangled-name='single_release' filepath='fs/seq_file.c' line='593' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='single_release'>
+        <parameter type-id='type-id-1129' name='inode' filepath='fs/seq_file.c' line='593' column='1'/>
+        <parameter type-id='type-id-83' name='file' filepath='fs/seq_file.c' line='593' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='seq_putc' mangled-name='seq_putc' filepath='fs/seq_file.c' line='645' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='seq_putc'>
+        <parameter type-id='type-id-88' name='m' filepath='fs/seq_file.c' line='645' column='1'/>
+        <parameter type-id='type-id-1' name='c' filepath='fs/seq_file.c' line='645' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='seq_puts' mangled-name='seq_puts' filepath='fs/seq_file.c' line='654' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='seq_puts'>
+        <parameter type-id='type-id-88' name='m' filepath='fs/seq_file.c' line='654' column='1'/>
+        <parameter type-id='type-id-4' name='s' filepath='fs/seq_file.c' line='654' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/slab_common.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='type-id-538' size-in-bits='infinite' id='type-id-3245'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-3246' size-in-bits='64' id='type-id-3247'>
+        <subrange length='1' type-id='type-id-9' id='type-id-180'/>
+
+      </array-type-def>
+      <class-decl name='kmem_cache_cpu' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/slub_def.h' line='41' column='1' id='type-id-3248'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='freelist' type-id='type-id-528' visibility='default' filepath='include/linux/slub_def.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tid' type-id='type-id-16' visibility='default' filepath='include/linux/slub_def.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='page' type-id='type-id-512' visibility='default' filepath='include/linux/slub_def.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='partial' type-id='type-id-512' visibility='default' filepath='include/linux/slub_def.h' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='79' column='1' id='type-id-3249'>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='98' column='1' id='type-id-3250'>
+            <member-type access='public'>
+              <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='115' column='1' id='type-id-3251'>
+                <data-member access='private'>
+                  <var-decl name='s_mem' type-id='type-id-15' visibility='default' filepath='include/linux/mm_types.h' line='116' column='1'/>
+                </data-member>
+                <data-member access='private'>
+                  <var-decl name='counters' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='117' column='1'/>
+                </data-member>
+                <data-member access='private'>
+                  <var-decl name='' type-id='type-id-2139' visibility='default' filepath='include/linux/mm_types.h' line='118' column='1'/>
+                </data-member>
+              </union-decl>
+            </member-type>
+            <data-member access='public' layout-offset-in-bits='0'>
+              <var-decl name='' type-id='type-id-3252' visibility='default' filepath='include/linux/mm_types.h' line='99' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='128'>
+              <var-decl name='slab_cache' type-id='type-id-538' visibility='default' filepath='include/linux/mm_types.h' line='112' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='192'>
+              <var-decl name='freelist' type-id='type-id-15' visibility='default' filepath='include/linux/mm_types.h' line='114' column='1'/>
+            </data-member>
+          </class-decl>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__1' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='138' column='1' id='type-id-3253'>
+            <data-member access='public' layout-offset-in-bits='0'>
+              <var-decl name='_pt_pad_1' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='139' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='64'>
+              <var-decl name='pmd_huge_pte' type-id='type-id-2140' visibility='default' filepath='include/linux/mm_types.h' line='140' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='128'>
+              <var-decl name='_pt_pad_2' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='141' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='192'>
+              <var-decl name='' type-id='type-id-3254' visibility='default' filepath='include/linux/mm_types.h' line='142' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='256'>
+              <var-decl name='ptl' type-id='type-id-247' visibility='default' filepath='include/linux/mm_types.h' line='149' column='1'/>
+            </data-member>
+          </class-decl>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__2' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='152' column='1' id='type-id-3255'>
+            <data-member access='public' layout-offset-in-bits='0'>
+              <var-decl name='pgmap' type-id='type-id-2739' visibility='default' filepath='include/linux/mm_types.h' line='154' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='64'>
+              <var-decl name='hmm_data' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='155' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='128'>
+              <var-decl name='_zd_pad_1' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='156' column='1'/>
+            </data-member>
+          </class-decl>
+        </member-type>
+        <data-member access='private'>
+          <var-decl name='' type-id='type-id-2089' visibility='default' filepath='include/linux/mm_types.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='callback_head' type-id='type-id-385' visibility='default' filepath='include/linux/mm_types.h' line='160' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='99' column='1' id='type-id-3252'>
+        <data-member access='private'>
+          <var-decl name='slab_list' type-id='type-id-20' visibility='default' filepath='include/linux/mm_types.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='type-id-2138' visibility='default' filepath='include/linux/mm_types.h' line='101' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='142' column='1' id='type-id-3254'>
+        <data-member access='private'>
+          <var-decl name='pt_mm' type-id='type-id-882' visibility='default' filepath='include/linux/mm_types.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='pt_frag_refcount' type-id='type-id-26' visibility='default' filepath='include/linux/mm_types.h' line='144' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='slab_flags_t' type-id='type-id-5' filepath='include/linux/types.h' line='159' column='1' id='type-id-3256'/>
+      <class-decl name='kmem_cache_order_objects' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/slub_def.h' line='75' column='1' id='type-id-3257'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x' type-id='type-id-5' visibility='default' filepath='include/linux/slub_def.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='memcg_cache_params' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/slab.h' line='632' column='1' id='type-id-3258'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='root_cache' type-id='type-id-538' visibility='default' filepath='include/linux/slab.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='type-id-3259' visibility='default' filepath='include/linux/slab.h' line='634' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='640' is-anonymous='yes' visibility='default' filepath='include/linux/slab.h' line='634' column='1' id='type-id-3259'>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__' size-in-bits='640' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/slab.h' line='641' column='1' id='type-id-3260'>
+            <data-member access='public' layout-offset-in-bits='0'>
+              <var-decl name='memcg' type-id='type-id-447' visibility='default' filepath='include/linux/slab.h' line='642' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='64'>
+              <var-decl name='children_node' type-id='type-id-20' visibility='default' filepath='include/linux/slab.h' line='643' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='192'>
+              <var-decl name='kmem_caches_node' type-id='type-id-20' visibility='default' filepath='include/linux/slab.h' line='644' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='320'>
+              <var-decl name='deact_fn' type-id='type-id-3261' visibility='default' filepath='include/linux/slab.h' line='646' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='384'>
+              <var-decl name='' type-id='type-id-3262' visibility='default' filepath='include/linux/slab.h' line='647' column='1'/>
+            </data-member>
+          </class-decl>
+        </member-type>
+        <data-member access='private'>
+          <var-decl name='' type-id='type-id-3263' visibility='default' filepath='include/linux/slab.h' line='635' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='384' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/slab.h' line='635' column='1' id='type-id-3263'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='memcg_caches' type-id='type-id-3264' visibility='default' filepath='include/linux/slab.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='__root_caches_node' type-id='type-id-20' visibility='default' filepath='include/linux/slab.h' line='637' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='children' type-id='type-id-20' visibility='default' filepath='include/linux/slab.h' line='638' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dying' type-id='type-id-33' visibility='default' filepath='include/linux/slab.h' line='639' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='memcg_cache_array' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/slab.h' line='594' column='1' id='type-id-3265'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/linux/slab.h' line='595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='entries' type-id='type-id-3245' visibility='default' filepath='include/linux/slab.h' line='596' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__4' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/slab.h' line='647' column='1' id='type-id-3262'>
+        <data-member access='private'>
+          <var-decl name='deact_rcu_head' type-id='type-id-385' visibility='default' filepath='include/linux/slab.h' line='648' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='deact_work' type-id='type-id-255' visibility='default' filepath='include/linux/slab.h' line='649' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='kmem_cache_node' size-in-bits='512' is-struct='yes' visibility='default' filepath='mm/slab.h' line='454' column='1' id='type-id-3266'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list_lock' type-id='type-id-247' visibility='default' filepath='mm/slab.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_partial' type-id='type-id-16' visibility='default' filepath='mm/slab.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='partial' type-id='type-id-20' visibility='default' filepath='mm/slab.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='nr_slabs' type-id='type-id-115' visibility='default' filepath='mm/slab.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='total_objects' type-id='type-id-115' visibility='default' filepath='mm/slab.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='full' type-id='type-id-20' visibility='default' filepath='mm/slab.h' line='478' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-3248' size-in-bits='64' id='type-id-3267'/>
+      <pointer-type-def type-id='type-id-3266' size-in-bits='64' id='type-id-3246'/>
+      <pointer-type-def type-id='type-id-3265' size-in-bits='64' id='type-id-3264'/>
+      <pointer-type-def type-id='type-id-3268' size-in-bits='64' id='type-id-3261'/>
+      <function-decl name='kmem_cache_create' mangled-name='kmem_cache_create' filepath='mm/slab_common.c' line='518' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmem_cache_create'>
+        <parameter type-id='type-id-4' name='name' filepath='mm/slab_common.c' line='518' column='1'/>
+        <parameter type-id='type-id-5' name='size' filepath='mm/slab_common.c' line='518' column='1'/>
+        <parameter type-id='type-id-5' name='align' filepath='mm/slab_common.c' line='518' column='1'/>
+        <parameter type-id='type-id-3256' name='flags' filepath='mm/slab_common.c' line='519' column='1'/>
+        <parameter type-id='type-id-517' name='ctor' filepath='mm/slab_common.c' line='519' column='1'/>
+        <return type-id='type-id-538'/>
+      </function-decl>
+      <function-decl name='kmem_cache_destroy' mangled-name='kmem_cache_destroy' filepath='mm/slab_common.c' line='874' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmem_cache_destroy'>
+        <parameter type-id='type-id-538' name='s' filepath='mm/slab_common.c' line='874' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='kmalloc_order_trace' mangled-name='kmalloc_order_trace' filepath='mm/slab_common.c' line='1213' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmalloc_order_trace'>
+        <parameter type-id='type-id-84' name='size' filepath='mm/slab_common.c' line='1213' column='1'/>
+        <parameter type-id='type-id-485' name='flags' filepath='mm/slab_common.c' line='1213' column='1'/>
+        <parameter type-id='type-id-5' name='order' filepath='mm/slab_common.c' line='1213' column='1'/>
+        <return type-id='type-id-15'/>
+      </function-decl>
+      <function-decl name='kzfree' mangled-name='kzfree' filepath='mm/slab_common.c' line='1555' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kzfree'>
+        <parameter type-id='type-id-15' name='p' filepath='mm/slab_common.c' line='1555' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-3268'>
+        <parameter type-id='type-id-538'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/debugfs/inode.c' language='LANG_C89'>
+      <function-decl name='debugfs_create_file' mangled-name='debugfs_create_file' filepath='fs/debugfs/inode.c' line='399' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='debugfs_create_file'>
+        <parameter type-id='type-id-4' name='name' filepath='fs/debugfs/inode.c' line='399' column='1'/>
+        <parameter type-id='type-id-329' name='mode' filepath='fs/debugfs/inode.c' line='399' column='1'/>
+        <parameter type-id='type-id-23' name='parent' filepath='fs/debugfs/inode.c' line='400' column='1'/>
+        <parameter type-id='type-id-15' name='data' filepath='fs/debugfs/inode.c' line='400' column='1'/>
+        <parameter type-id='type-id-268' name='fops' filepath='fs/debugfs/inode.c' line='401' column='1'/>
+        <return type-id='type-id-23'/>
+      </function-decl>
+      <function-decl name='debugfs_create_dir' mangled-name='debugfs_create_dir' filepath='fs/debugfs/inode.c' line='508' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='debugfs_create_dir'>
+        <parameter type-id='type-id-4' name='name' filepath='fs/debugfs/inode.c' line='508' column='1'/>
+        <parameter type-id='type-id-23' name='parent' filepath='fs/debugfs/inode.c' line='508' column='1'/>
+        <return type-id='type-id-23'/>
+      </function-decl>
+      <function-decl name='debugfs_remove' mangled-name='debugfs_remove' filepath='fs/debugfs/inode.c' line='679' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='debugfs_remove'>
+        <parameter type-id='type-id-23' name='dentry' filepath='fs/debugfs/inode.c' line='679' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='debugfs_remove_recursive' mangled-name='debugfs_remove_recursive' filepath='fs/debugfs/inode.c' line='709' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='debugfs_remove_recursive'>
+        <parameter type-id='type-id-23' name='dentry' filepath='fs/debugfs/inode.c' line='709' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/power/main.c' language='LANG_C89'>
+      <class-decl name='notifier_block' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/notifier.h' line='54' column='1' id='type-id-3269'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='notifier_call' type-id='type-id-3270' visibility='default' filepath='include/linux/notifier.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='next' type-id='type-id-3271' visibility='default' filepath='include/linux/notifier.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='priority' type-id='type-id-17' visibility='default' filepath='include/linux/notifier.h' line='57' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='notifier_fn_t' type-id='type-id-3272' filepath='include/linux/notifier.h' line='51' column='1' id='type-id-3270'/>
+      <pointer-type-def type-id='type-id-3273' size-in-bits='64' id='type-id-3272'/>
+      <pointer-type-def type-id='type-id-3269' size-in-bits='64' id='type-id-3271'/>
+      <function-decl name='register_pm_notifier' mangled-name='register_pm_notifier' filepath='kernel/power/main.c' line='58' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_pm_notifier'>
+        <parameter type-id='type-id-3271' name='nb' filepath='kernel/power/main.c' line='58' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='unregister_pm_notifier' mangled-name='unregister_pm_notifier' filepath='kernel/power/main.c' line='64' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_pm_notifier'>
+        <parameter type-id='type-id-3271' name='nb' filepath='kernel/power/main.c' line='64' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-3273'>
+        <parameter type-id='type-id-3271'/>
+        <parameter type-id='type-id-16'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/core.c' language='LANG_C89'>
+      <class-decl name='klist' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/klist.h' line='20' column='1' id='type-id-3274'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='k_lock' type-id='type-id-247' visibility='default' filepath='include/linux/klist.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='k_list' type-id='type-id-20' visibility='default' filepath='include/linux/klist.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get' type-id='type-id-3275' visibility='default' filepath='include/linux/klist.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='put' type-id='type-id-3275' visibility='default' filepath='include/linux/klist.h' line='24' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='driver_private' size-in-bits='1216' is-struct='yes' visibility='default' filepath='drivers/base/base.h' line='47' column='1' id='type-id-3276'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='type-id-267' visibility='default' filepath='drivers/base/base.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='klist_devices' type-id='type-id-3274' visibility='default' filepath='drivers/base/base.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='knode_bus' type-id='type-id-2026' visibility='default' filepath='drivers/base/base.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='mkobj' type-id='type-id-3022' visibility='default' filepath='drivers/base/base.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='driver' type-id='type-id-2013' visibility='default' filepath='drivers/base/base.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='subsys_private' size-in-bits='3264' is-struct='yes' visibility='default' filepath='drivers/base/base.h' line='29' column='1' id='type-id-3277'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='subsys' type-id='type-id-1398' visibility='default' filepath='drivers/base/base.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='devices_kset' type-id='type-id-1395' visibility='default' filepath='drivers/base/base.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='interfaces' type-id='type-id-20' visibility='default' filepath='drivers/base/base.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='mutex' type-id='type-id-245' visibility='default' filepath='drivers/base/base.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='drivers_kset' type-id='type-id-1395' visibility='default' filepath='drivers/base/base.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='klist_devices' type-id='type-id-3274' visibility='default' filepath='drivers/base/base.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='klist_drivers' type-id='type-id-3274' visibility='default' filepath='drivers/base/base.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='bus_notifier' type-id='type-id-3278' visibility='default' filepath='drivers/base/base.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='drivers_autoprobe' type-id='type-id-5' visibility='default' filepath='drivers/base/base.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='bus' type-id='type-id-2012' visibility='default' filepath='drivers/base/base.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='glue_dirs' type-id='type-id-1398' visibility='default' filepath='drivers/base/base.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='class' type-id='type-id-2027' visibility='default' filepath='drivers/base/base.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pm_qos_constraints' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/pm_qos.h' line='85' column='1' id='type-id-3279'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='type-id-3280' visibility='default' filepath='include/linux/pm_qos.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='target_value' type-id='type-id-738' visibility='default' filepath='include/linux/pm_qos.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='default_value' type-id='type-id-738' visibility='default' filepath='include/linux/pm_qos.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='no_constraint_value' type-id='type-id-738' visibility='default' filepath='include/linux/pm_qos.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='type' type-id='type-id-3281' visibility='default' filepath='include/linux/pm_qos.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='notifiers' type-id='type-id-3282' visibility='default' filepath='include/linux/pm_qos.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='pm_qos_type' filepath='include/linux/pm_qos.h' line='73' column='1' id='type-id-3281'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='PM_QOS_UNITIALIZED' value='0'/>
+        <enumerator name='PM_QOS_MAX' value='1'/>
+        <enumerator name='PM_QOS_MIN' value='2'/>
+        <enumerator name='PM_QOS_SUM' value='3'/>
+      </enum-decl>
+      <class-decl name='pm_qos_flags' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/pm_qos.h' line='94' column='1' id='type-id-3283'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/pm_qos.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='effective_flags' type-id='type-id-738' visibility='default' filepath='include/linux/pm_qos.h' line='96' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_pm_qos_request' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/pm_qos.h' line='64' column='1' id='type-id-3284'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='type-id-3285' visibility='default' filepath='include/linux/pm_qos.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='type-id-3286' visibility='default' filepath='include/linux/pm_qos.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dev' type-id='type-id-240' visibility='default' filepath='include/linux/pm_qos.h' line='70' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='dev_pm_qos_req_type' filepath='include/linux/pm_qos.h' line='58' column='1' id='type-id-3285'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='DEV_PM_QOS_RESUME_LATENCY' value='1'/>
+        <enumerator name='DEV_PM_QOS_LATENCY_TOLERANCE' value='2'/>
+        <enumerator name='DEV_PM_QOS_FLAGS' value='3'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/pm_qos.h' line='66' column='1' id='type-id-3286'>
+        <data-member access='private'>
+          <var-decl name='pnode' type-id='type-id-1506' visibility='default' filepath='include/linux/pm_qos.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='flr' type-id='type-id-3287' visibility='default' filepath='include/linux/pm_qos.h' line='68' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='pm_qos_flags_request' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/pm_qos.h' line='53' column='1' id='type-id-3287'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='type-id-20' visibility='default' filepath='include/linux/pm_qos.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='type-id-738' visibility='default' filepath='include/linux/pm_qos.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-3278' size-in-bits='64' id='type-id-3282'/>
+      <qualified-type-def type-id='type-id-3288' const='yes' id='type-id-3289'/>
+      <pointer-type-def type-id='type-id-3289' size-in-bits='64' id='type-id-3290'/>
+      <pointer-type-def type-id='type-id-3284' size-in-bits='64' id='type-id-3291'/>
+      <pointer-type-def type-id='type-id-3276' size-in-bits='64' id='type-id-3292'/>
+      <pointer-type-def type-id='type-id-3293' size-in-bits='64' id='type-id-3294'/>
+      <pointer-type-def type-id='type-id-2026' size-in-bits='64' id='type-id-3295'/>
+      <pointer-type-def type-id='type-id-3277' size-in-bits='64' id='type-id-3296'/>
+      <pointer-type-def type-id='type-id-3297' size-in-bits='64' id='type-id-3275'/>
+      <function-decl name='device_initialize' mangled-name='device_initialize' filepath='drivers/base/core.c' line='1735' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_initialize'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/base/core.c' line='1735' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='get_device' mangled-name='get_device' filepath='drivers/base/core.c' line='2342' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_device'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/base/core.c' line='2342' column='1'/>
+        <return type-id='type-id-240'/>
+      </function-decl>
+      <function-decl name='dev_driver_string' mangled-name='dev_driver_string' filepath='drivers/base/core.c' line='987' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_driver_string'>
+        <parameter type-id='type-id-2651' name='dev' filepath='drivers/base/core.c' line='987' column='1'/>
+        <return type-id='type-id-4'/>
+      </function-decl>
+      <function-decl name='_dev_info' mangled-name='_dev_info' filepath='drivers/base/core.c' line='3425' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_dev_info'>
+        <parameter type-id='type-id-2651' name='dev' filepath='drivers/base/core.c' line='3425' column='1'/>
+        <parameter type-id='type-id-4' name='fmt' filepath='drivers/base/core.c' line='3425' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='put_device' mangled-name='put_device' filepath='drivers/base/core.c' line='2352' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='put_device'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/base/core.c' line='2352' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='device_create_file' mangled-name='device_create_file' filepath='drivers/base/core.c' line='1622' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_create_file'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/base/core.c' line='1622' column='1'/>
+        <parameter type-id='type-id-3290' name='attr' filepath='drivers/base/core.c' line='1623' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='device_remove_file' mangled-name='device_remove_file' filepath='drivers/base/core.c' line='1646' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_remove_file'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/base/core.c' line='1646' column='1'/>
+        <parameter type-id='type-id-3290' name='attr' filepath='drivers/base/core.c' line='1647' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='dev_set_name' mangled-name='dev_set_name' filepath='drivers/base/core.c' line='2037' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_set_name'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/base/core.c' line='2037' column='1'/>
+        <parameter type-id='type-id-4' name='fmt' filepath='drivers/base/core.c' line='2037' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='device_add' mangled-name='device_add' filepath='drivers/base/core.c' line='2131' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_add'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/base/core.c' line='2131' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='device_register' mangled-name='device_register' filepath='drivers/base/core.c' line='2327' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_register'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/base/core.c' line='2327' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='device_del' mangled-name='device_del' filepath='drivers/base/core.c' line='2391' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_del'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/base/core.c' line='2391' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='device_unregister' mangled-name='device_unregister' filepath='drivers/base/core.c' line='2467' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_unregister'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/base/core.c' line='2467' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='device_for_each_child' mangled-name='device_for_each_child' filepath='drivers/base/core.c' line='2558' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_for_each_child'>
+        <parameter type-id='type-id-240' name='parent' filepath='drivers/base/core.c' line='2558' column='1'/>
+        <parameter type-id='type-id-15' name='data' filepath='drivers/base/core.c' line='2558' column='1'/>
+        <parameter type-id='type-id-3294' name='fn' filepath='drivers/base/core.c' line='2559' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='device_create' mangled-name='device_create' filepath='drivers/base/core.c' line='2949' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_create'>
+        <parameter type-id='type-id-2027' name='class' filepath='drivers/base/core.c' line='2949' column='1'/>
+        <parameter type-id='type-id-240' name='parent' filepath='drivers/base/core.c' line='2949' column='1'/>
+        <parameter type-id='type-id-269' name='devt' filepath='drivers/base/core.c' line='2950' column='1'/>
+        <parameter type-id='type-id-15' name='drvdata' filepath='drivers/base/core.c' line='2950' column='1'/>
+        <parameter type-id='type-id-4' name='fmt' filepath='drivers/base/core.c' line='2950' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='type-id-240'/>
+      </function-decl>
+      <function-decl name='device_destroy' mangled-name='device_destroy' filepath='drivers/base/core.c' line='3021' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_destroy'>
+        <parameter type-id='type-id-2027' name='class' filepath='drivers/base/core.c' line='3021' column='1'/>
+        <parameter type-id='type-id-269' name='devt' filepath='drivers/base/core.c' line='3021' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='dev_printk' mangled-name='dev_printk' filepath='drivers/base/core.c' line='3385' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_printk'>
+        <parameter type-id='type-id-4' name='level' filepath='drivers/base/core.c' line='3385' column='1'/>
+        <parameter type-id='type-id-2651' name='dev' filepath='drivers/base/core.c' line='3385' column='1'/>
+        <parameter type-id='type-id-4' name='fmt' filepath='drivers/base/core.c' line='3386' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='_dev_err' mangled-name='_dev_err' filepath='drivers/base/core.c' line='3422' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_dev_err'>
+        <parameter type-id='type-id-2651' name='dev' filepath='drivers/base/core.c' line='3422' column='1'/>
+        <parameter type-id='type-id-4' name='fmt' filepath='drivers/base/core.c' line='3422' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='_dev_warn' mangled-name='_dev_warn' filepath='drivers/base/core.c' line='3423' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_dev_warn'>
+        <parameter type-id='type-id-2651' name='dev' filepath='drivers/base/core.c' line='3423' column='1'/>
+        <parameter type-id='type-id-4' name='fmt' filepath='drivers/base/core.c' line='3423' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='_dev_notice' mangled-name='_dev_notice' filepath='drivers/base/core.c' line='3424' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_dev_notice'>
+        <parameter type-id='type-id-2651' name='dev' filepath='drivers/base/core.c' line='3424' column='1'/>
+        <parameter type-id='type-id-4' name='fmt' filepath='drivers/base/core.c' line='3424' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-3293'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3297'>
+        <parameter type-id='type-id-3295'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/softirq.c' language='LANG_C89'>
+      <class-decl name='tasklet_struct' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/interrupt.h' line='542' column='1' id='type-id-3298'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='type-id-3299' visibility='default' filepath='include/linux/interrupt.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='state' type-id='type-id-16' visibility='default' filepath='include/linux/interrupt.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='count' type-id='type-id-26' visibility='default' filepath='include/linux/interrupt.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='func' type-id='type-id-3300' visibility='default' filepath='include/linux/interrupt.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='data' type-id='type-id-16' visibility='default' filepath='include/linux/interrupt.h' line='548' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-3298' size-in-bits='64' id='type-id-3299'/>
+      <pointer-type-def type-id='type-id-3301' size-in-bits='64' id='type-id-3300'/>
+      <function-decl name='__local_bh_enable_ip' mangled-name='__local_bh_enable_ip' filepath='kernel/softirq.c' line='166' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__local_bh_enable_ip'>
+        <parameter type-id='type-id-16' name='ip' filepath='kernel/softirq.c' line='166' column='1'/>
+        <parameter type-id='type-id-5' name='cnt' filepath='kernel/softirq.c' line='166' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='__tasklet_schedule' mangled-name='__tasklet_schedule' filepath='kernel/softirq.c' line='486' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__tasklet_schedule'>
+        <parameter type-id='type-id-3299' name='t' filepath='kernel/softirq.c' line='486' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='__tasklet_hi_schedule' mangled-name='__tasklet_hi_schedule' filepath='kernel/softirq.c' line='493' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__tasklet_hi_schedule'>
+        <parameter type-id='type-id-3299' name='t' filepath='kernel/softirq.c' line='493' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='tasklet_init' mangled-name='tasklet_init' filepath='kernel/softirq.c' line='548' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tasklet_init'>
+        <parameter type-id='type-id-3299' name='t' filepath='kernel/softirq.c' line='548' column='1'/>
+        <parameter type-id='type-id-3300' name='func' filepath='kernel/softirq.c' line='549' column='1'/>
+        <parameter type-id='type-id-16' name='data' filepath='kernel/softirq.c' line='549' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='tasklet_kill' mangled-name='tasklet_kill' filepath='kernel/softirq.c' line='559' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tasklet_kill'>
+        <parameter type-id='type-id-3299' name='t' filepath='kernel/softirq.c' line='559' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-3301'>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/resource.c' language='LANG_C89'>
+      <class-decl name='module' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-3302'/>
+      <pointer-type-def type-id='type-id-3302' size-in-bits='64' id='type-id-3303'/>
+      <function-decl name='__devm_request_region' mangled-name='__devm_request_region' filepath='kernel/resource.c' line='1401' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__devm_request_region'>
+        <parameter type-id='type-id-240' name='dev' filepath='kernel/resource.c' line='1401' column='1'/>
+        <parameter type-id='type-id-2156' name='parent' filepath='kernel/resource.c' line='1402' column='1'/>
+        <parameter type-id='type-id-2155' name='start' filepath='kernel/resource.c' line='1402' column='1'/>
+        <parameter type-id='type-id-2155' name='n' filepath='kernel/resource.c' line='1403' column='1'/>
+        <parameter type-id='type-id-4' name='name' filepath='kernel/resource.c' line='1403' column='1'/>
+        <return type-id='type-id-2156'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/sched/wait.c' language='LANG_C89'>
+      <pointer-type-def type-id='type-id-1456' size-in-bits='64' id='type-id-3304'/>
+      <function-decl name='__init_waitqueue_head' mangled-name='__init_waitqueue_head' filepath='kernel/sched/wait.c' line='8' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__init_waitqueue_head'>
+        <parameter type-id='type-id-3304' name='wq_head' filepath='kernel/sched/wait.c' line='8' column='1'/>
+        <parameter type-id='type-id-4' name='name' filepath='kernel/sched/wait.c' line='8' column='1'/>
+        <parameter type-id='type-id-1698' name='key' filepath='kernel/sched/wait.c' line='8' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='add_wait_queue' mangled-name='add_wait_queue' filepath='kernel/sched/wait.c' line='17' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='add_wait_queue'>
+        <parameter type-id='type-id-3304' name='wq_head' filepath='kernel/sched/wait.c' line='17' column='1'/>
+        <parameter type-id='type-id-3305' name='wq_entry' filepath='kernel/sched/wait.c' line='17' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='remove_wait_queue' mangled-name='remove_wait_queue' filepath='kernel/sched/wait.c' line='39' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='remove_wait_queue'>
+        <parameter type-id='type-id-3304' name='wq_head' filepath='kernel/sched/wait.c' line='39' column='1'/>
+        <parameter type-id='type-id-3305' name='wq_entry' filepath='kernel/sched/wait.c' line='39' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='__wake_up' mangled-name='__wake_up' filepath='kernel/sched/wait.c' line='142' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__wake_up'>
+        <parameter type-id='type-id-3304' name='wq_head' filepath='kernel/sched/wait.c' line='142' column='1'/>
+        <parameter type-id='type-id-5' name='mode' filepath='kernel/sched/wait.c' line='142' column='1'/>
+        <parameter type-id='type-id-17' name='nr_exclusive' filepath='kernel/sched/wait.c' line='143' column='1'/>
+        <parameter type-id='type-id-15' name='key' filepath='kernel/sched/wait.c' line='143' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='prepare_to_wait' mangled-name='prepare_to_wait' filepath='kernel/sched/wait.c' line='225' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='prepare_to_wait'>
+        <parameter type-id='type-id-3304' name='wq_head' filepath='kernel/sched/wait.c' line='225' column='1'/>
+        <parameter type-id='type-id-3305' name='wq_entry' filepath='kernel/sched/wait.c' line='225' column='1'/>
+        <parameter type-id='type-id-17' name='state' filepath='kernel/sched/wait.c' line='225' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='init_wait_entry' mangled-name='init_wait_entry' filepath='kernel/sched/wait.c' line='252' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='init_wait_entry'>
+        <parameter type-id='type-id-3305' name='wq_entry' filepath='kernel/sched/wait.c' line='252' column='1'/>
+        <parameter type-id='type-id-17' name='flags' filepath='kernel/sched/wait.c' line='252' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='autoremove_wake_function' mangled-name='autoremove_wake_function' filepath='kernel/sched/wait.c' line='373' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='autoremove_wake_function'>
+        <parameter type-id='type-id-3305' name='wq_entry' filepath='kernel/sched/wait.c' line='373' column='1'/>
+        <parameter type-id='type-id-5' name='mode' filepath='kernel/sched/wait.c' line='373' column='1'/>
+        <parameter type-id='type-id-17' name='sync' filepath='kernel/sched/wait.c' line='373' column='1'/>
+        <parameter type-id='type-id-15' name='key' filepath='kernel/sched/wait.c' line='373' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='prepare_to_wait_event' mangled-name='prepare_to_wait_event' filepath='kernel/sched/wait.c' line='261' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='prepare_to_wait_event'>
+        <parameter type-id='type-id-3304' name='wq_head' filepath='kernel/sched/wait.c' line='261' column='1'/>
+        <parameter type-id='type-id-3305' name='wq_entry' filepath='kernel/sched/wait.c' line='261' column='1'/>
+        <parameter type-id='type-id-17' name='state' filepath='kernel/sched/wait.c' line='261' column='1'/>
+        <return type-id='type-id-192'/>
+      </function-decl>
+      <function-decl name='finish_wait' mangled-name='finish_wait' filepath='kernel/sched/wait.c' line='347' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='finish_wait'>
+        <parameter type-id='type-id-3304' name='wq_head' filepath='kernel/sched/wait.c' line='347' column='1'/>
+        <parameter type-id='type-id-3305' name='wq_entry' filepath='kernel/sched/wait.c' line='347' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='wait_woken' mangled-name='wait_woken' filepath='kernel/sched/wait.c' line='409' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wait_woken'>
+        <parameter type-id='type-id-3305' name='wq_entry' filepath='kernel/sched/wait.c' line='409' column='1'/>
+        <parameter type-id='type-id-5' name='mode' filepath='kernel/sched/wait.c' line='409' column='1'/>
+        <parameter type-id='type-id-192' name='timeout' filepath='kernel/sched/wait.c' line='409' column='1'/>
+        <return type-id='type-id-192'/>
+      </function-decl>
+      <function-decl name='woken_wake_function' mangled-name='woken_wake_function' filepath='kernel/sched/wait.c' line='434' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='woken_wake_function'>
+        <parameter type-id='type-id-3305' name='wq_entry' filepath='kernel/sched/wait.c' line='434' column='1'/>
+        <parameter type-id='type-id-5' name='mode' filepath='kernel/sched/wait.c' line='434' column='1'/>
+        <parameter type-id='type-id-17' name='sync' filepath='kernel/sched/wait.c' line='434' column='1'/>
+        <parameter type-id='type-id-15' name='key' filepath='kernel/sched/wait.c' line='434' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/printk/printk.c' language='LANG_C89'>
+      <function-decl name='printk' mangled-name='printk' filepath='kernel/printk/printk.c' line='2006' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='printk'>
+        <parameter type-id='type-id-4' name='fmt' filepath='kernel/printk/printk.c' line='2006' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/capability.c' language='LANG_C89'>
+      <function-decl name='capable' mangled-name='capable' filepath='kernel/capability.c' line='429' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='capable'>
+        <parameter type-id='type-id-17' name='cap' filepath='kernel/capability.c' line='429' column='1'/>
+        <return type-id='type-id-33'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/sched/core.c' language='LANG_C89'>
+
+
+
+      <array-type-def dimensions='1' type-id='type-id-1' size-in-bits='520' id='type-id-3306'>
+        <subrange length='65' type-id='type-id-9' id='type-id-3307'/>
+
+      </array-type-def>
+      <class-decl name='cpu_stop_done' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-3308'/>
+      <class-decl name='cpuidle_device_kobj' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-3309'/>
+      <class-decl name='cpuidle_driver_kobj' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-3310'/>
+      <class-decl name='cpuidle_state_kobj' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-3311'/>
+      <class-decl name='net_device' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-3312'/>
+      <array-type-def dimensions='1' type-id='type-id-3313' size-in-bits='7680' id='type-id-3314'>
+        <subrange length='10' type-id='type-id-9' id='type-id-1191'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-3315' size-in-bits='640' id='type-id-3316'>
+        <subrange length='10' type-id='type-id-9' id='type-id-1191'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-3317' size-in-bits='3200' id='type-id-3318'>
+        <subrange length='10' type-id='type-id-9' id='type-id-1191'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-3319' size-in-bits='13056' id='type-id-3320'>
+        <subrange length='102' type-id='type-id-9' id='type-id-3321'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-20' size-in-bits='12800' id='type-id-3322'>
+        <subrange length='100' type-id='type-id-9' id='type-id-3323'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-16' size-in-bits='320' id='type-id-3324'>
+        <subrange length='5' type-id='type-id-9' id='type-id-110'/>
+
+      </array-type-def>
+      <class-decl name='rq' size-in-bits='24064' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='809' column='1' id='type-id-3325'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='type-id-36' visibility='default' filepath='kernel/sched/sched.h' line='811' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nr_running' type-id='type-id-5' visibility='default' filepath='kernel/sched/sched.h' line='817' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cpu_load' type-id='type-id-3324' visibility='default' filepath='kernel/sched/sched.h' line='824' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='last_load_update_tick' type-id='type-id-16' visibility='default' filepath='kernel/sched/sched.h' line='827' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='last_blocked_load_update_tick' type-id='type-id-16' visibility='default' filepath='kernel/sched/sched.h' line='828' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='has_blocked_load' type-id='type-id-5' visibility='default' filepath='kernel/sched/sched.h' line='829' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='nohz_tick_stopped' type-id='type-id-5' visibility='default' filepath='kernel/sched/sched.h' line='831' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='nohz_flags' type-id='type-id-26' visibility='default' filepath='kernel/sched/sched.h' line='832' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='load' type-id='type-id-1543' visibility='default' filepath='kernel/sched/sched.h' line='836' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='nr_load_updates' type-id='type-id-16' visibility='default' filepath='kernel/sched/sched.h' line='837' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='nr_switches' type-id='type-id-40' visibility='default' filepath='kernel/sched/sched.h' line='838' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='cfs' type-id='type-id-993' visibility='default' filepath='kernel/sched/sched.h' line='840' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='rt' type-id='type-id-1082' visibility='default' filepath='kernel/sched/sched.h' line='841' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17920'>
+          <var-decl name='dl' type-id='type-id-3326' visibility='default' filepath='kernel/sched/sched.h' line='842' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18752'>
+          <var-decl name='leaf_cfs_rq_list' type-id='type-id-20' visibility='default' filepath='kernel/sched/sched.h' line='846' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18880'>
+          <var-decl name='tmp_alone_branch' type-id='type-id-877' visibility='default' filepath='kernel/sched/sched.h' line='847' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18944'>
+          <var-decl name='nr_uninterruptible' type-id='type-id-16' visibility='default' filepath='kernel/sched/sched.h' line='856' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19008'>
+          <var-decl name='curr' type-id='type-id-431' visibility='default' filepath='kernel/sched/sched.h' line='858' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19072'>
+          <var-decl name='idle' type-id='type-id-431' visibility='default' filepath='kernel/sched/sched.h' line='859' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19136'>
+          <var-decl name='stop' type-id='type-id-431' visibility='default' filepath='kernel/sched/sched.h' line='860' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19200'>
+          <var-decl name='next_balance' type-id='type-id-16' visibility='default' filepath='kernel/sched/sched.h' line='861' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19264'>
+          <var-decl name='prev_mm' type-id='type-id-882' visibility='default' filepath='kernel/sched/sched.h' line='862' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19328'>
+          <var-decl name='clock_update_flags' type-id='type-id-5' visibility='default' filepath='kernel/sched/sched.h' line='864' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19392'>
+          <var-decl name='clock' type-id='type-id-40' visibility='default' filepath='kernel/sched/sched.h' line='865' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19456'>
+          <var-decl name='clock_task' type-id='type-id-40' visibility='default' filepath='kernel/sched/sched.h' line='867' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19520'>
+          <var-decl name='clock_pelt' type-id='type-id-40' visibility='default' filepath='kernel/sched/sched.h' line='868' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19584'>
+          <var-decl name='lost_idle_time' type-id='type-id-16' visibility='default' filepath='kernel/sched/sched.h' line='869' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19648'>
+          <var-decl name='nr_iowait' type-id='type-id-26' visibility='default' filepath='kernel/sched/sched.h' line='871' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19712'>
+          <var-decl name='rd' type-id='type-id-3327' visibility='default' filepath='kernel/sched/sched.h' line='874' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19776'>
+          <var-decl name='sd' type-id='type-id-3328' visibility='default' filepath='kernel/sched/sched.h' line='875' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19840'>
+          <var-decl name='cpu_capacity' type-id='type-id-16' visibility='default' filepath='kernel/sched/sched.h' line='877' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19904'>
+          <var-decl name='cpu_capacity_orig' type-id='type-id-16' visibility='default' filepath='kernel/sched/sched.h' line='878' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19968'>
+          <var-decl name='balance_callback' type-id='type-id-91' visibility='default' filepath='kernel/sched/sched.h' line='880' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20032'>
+          <var-decl name='idle_balance' type-id='type-id-216' visibility='default' filepath='kernel/sched/sched.h' line='882' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20096'>
+          <var-decl name='misfit_task_load' type-id='type-id-16' visibility='default' filepath='kernel/sched/sched.h' line='884' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20160'>
+          <var-decl name='active_balance' type-id='type-id-17' visibility='default' filepath='kernel/sched/sched.h' line='887' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20192'>
+          <var-decl name='push_cpu' type-id='type-id-17' visibility='default' filepath='kernel/sched/sched.h' line='888' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20224'>
+          <var-decl name='active_balance_work' type-id='type-id-3329' visibility='default' filepath='kernel/sched/sched.h' line='889' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20544'>
+          <var-decl name='cpu' type-id='type-id-17' visibility='default' filepath='kernel/sched/sched.h' line='892' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20576'>
+          <var-decl name='online' type-id='type-id-17' visibility='default' filepath='kernel/sched/sched.h' line='893' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20608'>
+          <var-decl name='cfs_tasks' type-id='type-id-20' visibility='default' filepath='kernel/sched/sched.h' line='895' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20992'>
+          <var-decl name='avg_rt' type-id='type-id-1547' visibility='default' filepath='kernel/sched/sched.h' line='897' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21504'>
+          <var-decl name='avg_dl' type-id='type-id-1547' visibility='default' filepath='kernel/sched/sched.h' line='898' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22016'>
+          <var-decl name='idle_stamp' type-id='type-id-40' visibility='default' filepath='kernel/sched/sched.h' line='902' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22080'>
+          <var-decl name='avg_idle' type-id='type-id-40' visibility='default' filepath='kernel/sched/sched.h' line='903' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22144'>
+          <var-decl name='max_idle_balance_cost' type-id='type-id-40' visibility='default' filepath='kernel/sched/sched.h' line='906' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22208'>
+          <var-decl name='prev_steal_time' type-id='type-id-40' visibility='default' filepath='kernel/sched/sched.h' line='913' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22272'>
+          <var-decl name='calc_load_update' type-id='type-id-16' visibility='default' filepath='kernel/sched/sched.h' line='920' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22336'>
+          <var-decl name='calc_load_active' type-id='type-id-192' visibility='default' filepath='kernel/sched/sched.h' line='921' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22400'>
+          <var-decl name='hrtick_csd_pending' type-id='type-id-17' visibility='default' filepath='kernel/sched/sched.h' line='925' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22528'>
+          <var-decl name='hrtick_csd' type-id='type-id-3330' visibility='default' filepath='kernel/sched/sched.h' line='926' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22784'>
+          <var-decl name='hrtick_timer' type-id='type-id-681' visibility='default' filepath='kernel/sched/sched.h' line='928' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23296'>
+          <var-decl name='rq_sched_info' type-id='type-id-1505' visibility='default' filepath='kernel/sched/sched.h' line='933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23552'>
+          <var-decl name='rq_cpu_time' type-id='type-id-98' visibility='default' filepath='kernel/sched/sched.h' line='934' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23616'>
+          <var-decl name='yld_count' type-id='type-id-5' visibility='default' filepath='kernel/sched/sched.h' line='938' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23648'>
+          <var-decl name='sched_count' type-id='type-id-5' visibility='default' filepath='kernel/sched/sched.h' line='941' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23680'>
+          <var-decl name='sched_goidle' type-id='type-id-5' visibility='default' filepath='kernel/sched/sched.h' line='942' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23712'>
+          <var-decl name='ttwu_count' type-id='type-id-5' visibility='default' filepath='kernel/sched/sched.h' line='945' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23744'>
+          <var-decl name='ttwu_local' type-id='type-id-5' visibility='default' filepath='kernel/sched/sched.h' line='946' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23808'>
+          <var-decl name='wake_list' type-id='type-id-278' visibility='default' filepath='kernel/sched/sched.h' line='950' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23872'>
+          <var-decl name='idle_state' type-id='type-id-3331' visibility='default' filepath='kernel/sched/sched.h' line='955' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23936'>
+          <var-decl name='idle_state_idx' type-id='type-id-17' visibility='default' filepath='kernel/sched/sched.h' line='956' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='512' is-struct='yes' is-anonymous='yes' visibility='default' filepath='kernel/sched/sched.h' line='519' column='1' id='type-id-3332'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='type-id-36' visibility='default' filepath='kernel/sched/sched.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nr' type-id='type-id-17' visibility='default' filepath='kernel/sched/sched.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='load_avg' type-id='type-id-16' visibility='default' filepath='kernel/sched/sched.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='util_avg' type-id='type-id-16' visibility='default' filepath='kernel/sched/sched.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='runnable_sum' type-id='type-id-16' visibility='default' filepath='kernel/sched/sched.h' line='524' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rt_prio_array' size-in-bits='12928' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='232' column='1' id='type-id-3333'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bitmap' type-id='type-id-219' visibility='default' filepath='kernel/sched/sched.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='queue' type-id='type-id-3322' visibility='default' filepath='kernel/sched/sched.h' line='234' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='kernel/sched/sched.h' line='589' column='1' id='type-id-3334'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='curr' type-id='type-id-17' visibility='default' filepath='kernel/sched/sched.h' line='590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='next' type-id='type-id-17' visibility='default' filepath='kernel/sched/sched.h' line='592' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='plist_head' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/plist.h' line='81' column='1' id='type-id-3280'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node_list' type-id='type-id-20' visibility='default' filepath='include/linux/plist.h' line='82' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rt_bandwidth' size-in-bits='768' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='237' column='1' id='type-id-3335'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rt_runtime_lock' type-id='type-id-36' visibility='default' filepath='kernel/sched/sched.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rt_period' type-id='type-id-682' visibility='default' filepath='kernel/sched/sched.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rt_runtime' type-id='type-id-40' visibility='default' filepath='kernel/sched/sched.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rt_period_timer' type-id='type-id-681' visibility='default' filepath='kernel/sched/sched.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='rt_period_active' type-id='type-id-5' visibility='default' filepath='kernel/sched/sched.h' line='243' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfs_bandwidth' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='335' column='1' id='type-id-3336'/>
+      <class-decl name='dl_rq' size-in-bits='832' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='625' column='1' id='type-id-3326'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='root' type-id='type-id-1523' visibility='default' filepath='kernel/sched/sched.h' line='627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dl_nr_running' type-id='type-id-16' visibility='default' filepath='kernel/sched/sched.h' line='629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='earliest_dl' type-id='type-id-3337' visibility='default' filepath='kernel/sched/sched.h' line='641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dl_nr_migratory' type-id='type-id-16' visibility='default' filepath='kernel/sched/sched.h' line='643' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='overloaded' type-id='type-id-17' visibility='default' filepath='kernel/sched/sched.h' line='644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pushable_dl_tasks_root' type-id='type-id-1523' visibility='default' filepath='kernel/sched/sched.h' line='651' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='running_bw' type-id='type-id-40' visibility='default' filepath='kernel/sched/sched.h' line='660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='this_bw' type-id='type-id-40' visibility='default' filepath='kernel/sched/sched.h' line='671' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='extra_bw' type-id='type-id-40' visibility='default' filepath='kernel/sched/sched.h' line='672' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='bw_ratio' type-id='type-id-40' visibility='default' filepath='kernel/sched/sched.h' line='678' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='kernel/sched/sched.h' line='638' column='1' id='type-id-3337'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='curr' type-id='type-id-40' visibility='default' filepath='kernel/sched/sched.h' line='639' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='next' type-id='type-id-40' visibility='default' filepath='kernel/sched/sched.h' line='640' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__3' size-in-bits='6848' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='353' column='1' id='type-id-3338'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mmap' type-id='type-id-1209' visibility='default' filepath='include/linux/mm_types.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mm_rb' type-id='type-id-416' visibility='default' filepath='include/linux/mm_types.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vmacache_seqnum' type-id='type-id-40' visibility='default' filepath='include/linux/mm_types.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_unmapped_area' type-id='type-id-1484' visibility='default' filepath='include/linux/mm_types.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mmap_base' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mmap_legacy_base' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='task_size' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='highest_vm_end' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pgd' type-id='type-id-1485' visibility='default' filepath='include/linux/mm_types.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mm_users' type-id='type-id-26' visibility='default' filepath='include/linux/mm_types.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='mm_count' type-id='type-id-26' visibility='default' filepath='include/linux/mm_types.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='pgtables_bytes' type-id='type-id-115' visibility='default' filepath='include/linux/mm_types.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='map_count' type-id='type-id-17' visibility='default' filepath='include/linux/mm_types.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='page_table_lock' type-id='type-id-247' visibility='default' filepath='include/linux/mm_types.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mmap_sem' type-id='type-id-246' visibility='default' filepath='include/linux/mm_types.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='mmlist' type-id='type-id-20' visibility='default' filepath='include/linux/mm_types.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='hiwater_rss' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='hiwater_vm' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='total_vm' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='locked_vm' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='pinned_vm' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='data_vm' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='exec_vm' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='stack_vm' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='def_flags' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='arg_lock' type-id='type-id-247' visibility='default' filepath='include/linux/mm_types.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='start_code' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='end_code' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='start_data' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='end_data' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='start_brk' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='brk' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='start_stack' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='arg_start' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='arg_end' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='env_start' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='env_end' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='saved_auxv' type-id='type-id-1202' visibility='default' filepath='include/linux/mm_types.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='rss_stat' type-id='type-id-1486' visibility='default' filepath='include/linux/mm_types.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='binfmt' type-id='type-id-1487' visibility='default' filepath='include/linux/mm_types.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='context' type-id='type-id-1488' visibility='default' filepath='include/linux/mm_types.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='core_state' type-id='type-id-1489' visibility='default' filepath='include/linux/mm_types.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='membarrier_state' type-id='type-id-26' visibility='default' filepath='include/linux/mm_types.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6176'>
+          <var-decl name='ioctx_lock' type-id='type-id-247' visibility='default' filepath='include/linux/mm_types.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='ioctx_table' type-id='type-id-1490' visibility='default' filepath='include/linux/mm_types.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='owner' type-id='type-id-431' visibility='default' filepath='include/linux/mm_types.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='user_ns' type-id='type-id-917' visibility='default' filepath='include/linux/mm_types.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='exe_file' type-id='type-id-83' visibility='default' filepath='include/linux/mm_types.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='tlb_flush_pending' type-id='type-id-26' visibility='default' filepath='include/linux/mm_types.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='uprobes_state' type-id='type-id-1491' visibility='default' filepath='include/linux/mm_types.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='async_put_work' type-id='type-id-255' visibility='default' filepath='include/linux/mm_types.h' line='500' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='linux_binprm' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/binfmts.h' line='17' column='1' id='type-id-3339'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buf' type-id='type-id-964' visibility='default' filepath='include/linux/binfmts.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='vma' type-id='type-id-1209' visibility='default' filepath='include/linux/binfmts.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='vma_pages' type-id='type-id-16' visibility='default' filepath='include/linux/binfmts.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='mm' type-id='type-id-882' visibility='default' filepath='include/linux/binfmts.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='p' type-id='type-id-16' visibility='default' filepath='include/linux/binfmts.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='called_set_creds' type-id='type-id-5' visibility='default' filepath='include/linux/binfmts.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='cap_elevated' type-id='type-id-5' visibility='default' filepath='include/linux/binfmts.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='secureexec' type-id='type-id-5' visibility='default' filepath='include/linux/binfmts.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='recursion_depth' type-id='type-id-5' visibility='default' filepath='include/linux/binfmts.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='file' type-id='type-id-83' visibility='default' filepath='include/linux/binfmts.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='cred' type-id='type-id-3340' visibility='default' filepath='include/linux/binfmts.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='unsafe' type-id='type-id-17' visibility='default' filepath='include/linux/binfmts.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='per_clear' type-id='type-id-5' visibility='default' filepath='include/linux/binfmts.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='argc' type-id='type-id-17' visibility='default' filepath='include/linux/binfmts.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='envc' type-id='type-id-17' visibility='default' filepath='include/linux/binfmts.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='filename' type-id='type-id-4' visibility='default' filepath='include/linux/binfmts.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='interp' type-id='type-id-4' visibility='default' filepath='include/linux/binfmts.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='interp_flags' type-id='type-id-5' visibility='default' filepath='include/linux/binfmts.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1760'>
+          <var-decl name='interp_data' type-id='type-id-5' visibility='default' filepath='include/linux/binfmts.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='loader' type-id='type-id-16' visibility='default' filepath='include/linux/binfmts.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='exec' type-id='type-id-16' visibility='default' filepath='include/linux/binfmts.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='rlim_stack' type-id='type-id-1166' visibility='default' filepath='include/linux/binfmts.h' line='65' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='coredump_params' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/binfmts.h' line='80' column='1' id='type-id-3341'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='siginfo' type-id='type-id-3342' visibility='default' filepath='include/linux/binfmts.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='regs' type-id='type-id-736' visibility='default' filepath='include/linux/binfmts.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='file' type-id='type-id-83' visibility='default' filepath='include/linux/binfmts.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='limit' type-id='type-id-16' visibility='default' filepath='include/linux/binfmts.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mm_flags' type-id='type-id-16' visibility='default' filepath='include/linux/binfmts.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='written' type-id='type-id-763' visibility='default' filepath='include/linux/binfmts.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pos' type-id='type-id-763' visibility='default' filepath='include/linux/binfmts.h' line='87' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='root_domain' size-in-bits='14720' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='731' column='1' id='type-id-3343'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='type-id-26' visibility='default' filepath='kernel/sched/sched.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='rto_count' type-id='type-id-26' visibility='default' filepath='kernel/sched/sched.h' line='733' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='kernel/sched/sched.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='span' type-id='type-id-38' visibility='default' filepath='kernel/sched/sched.h' line='735' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='online' type-id='type-id-38' visibility='default' filepath='kernel/sched/sched.h' line='736' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='overload' type-id='type-id-17' visibility='default' filepath='kernel/sched/sched.h' line='743' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='overutilized' type-id='type-id-17' visibility='default' filepath='kernel/sched/sched.h' line='746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dlo_mask' type-id='type-id-38' visibility='default' filepath='kernel/sched/sched.h' line='752' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dlo_count' type-id='type-id-26' visibility='default' filepath='kernel/sched/sched.h' line='753' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dl_bw' type-id='type-id-3344' visibility='default' filepath='kernel/sched/sched.h' line='754' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='cpudl' type-id='type-id-3345' visibility='default' filepath='kernel/sched/sched.h' line='755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='rto_push_work' type-id='type-id-690' visibility='default' filepath='kernel/sched/sched.h' line='761' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rto_lock' type-id='type-id-36' visibility='default' filepath='kernel/sched/sched.h' line='762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='rto_loop' type-id='type-id-17' visibility='default' filepath='kernel/sched/sched.h' line='764' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='rto_cpu' type-id='type-id-17' visibility='default' filepath='kernel/sched/sched.h' line='765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='rto_loop_next' type-id='type-id-26' visibility='default' filepath='kernel/sched/sched.h' line='767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='rto_loop_start' type-id='type-id-26' visibility='default' filepath='kernel/sched/sched.h' line='768' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='rto_mask' type-id='type-id-38' visibility='default' filepath='kernel/sched/sched.h' line='774' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='cpupri' type-id='type-id-3346' visibility='default' filepath='kernel/sched/sched.h' line='775' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14464'>
+          <var-decl name='max_cpu_capacity' type-id='type-id-3347' visibility='default' filepath='kernel/sched/sched.h' line='778' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14656'>
+          <var-decl name='pd' type-id='type-id-3348' visibility='default' filepath='kernel/sched/sched.h' line='784' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dl_bw' size-in-bits='192' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='283' column='1' id='type-id-3344'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='type-id-36' visibility='default' filepath='kernel/sched/sched.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bw' type-id='type-id-40' visibility='default' filepath='kernel/sched/sched.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='total_bw' type-id='type-id-40' visibility='default' filepath='kernel/sched/sched.h' line='286' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpudl' size-in-bits='192' is-struct='yes' visibility='default' filepath='kernel/sched/cpudeadline.h' line='11' column='1' id='type-id-3345'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='type-id-36' visibility='default' filepath='kernel/sched/cpudeadline.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='size' type-id='type-id-17' visibility='default' filepath='kernel/sched/cpudeadline.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='free_cpus' type-id='type-id-38' visibility='default' filepath='kernel/sched/cpudeadline.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='elements' type-id='type-id-3349' visibility='default' filepath='kernel/sched/cpudeadline.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpudl_item' size-in-bits='128' is-struct='yes' visibility='default' filepath='kernel/sched/cpudeadline.h' line='5' column='1' id='type-id-3350'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dl' type-id='type-id-40' visibility='default' filepath='kernel/sched/cpudeadline.h' line='6' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cpu' type-id='type-id-17' visibility='default' filepath='kernel/sched/cpudeadline.h' line='7' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='idx' type-id='type-id-17' visibility='default' filepath='kernel/sched/cpudeadline.h' line='8' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpupri' size-in-bits='13120' is-struct='yes' visibility='default' filepath='kernel/sched/cpupri.h' line='15' column='1' id='type-id-3346'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pri_to_cpu' type-id='type-id-3320' visibility='default' filepath='kernel/sched/cpupri.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13056'>
+          <var-decl name='cpu_to_pri' type-id='type-id-666' visibility='default' filepath='kernel/sched/cpupri.h' line='17' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpupri_vec' size-in-bits='128' is-struct='yes' visibility='default' filepath='kernel/sched/cpupri.h' line='10' column='1' id='type-id-3319'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='type-id-26' visibility='default' filepath='kernel/sched/cpupri.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mask' type-id='type-id-38' visibility='default' filepath='kernel/sched/cpupri.h' line='12' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='max_cpu_capacity' size-in-bits='192' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='713' column='1' id='type-id-3347'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='type-id-36' visibility='default' filepath='kernel/sched/sched.h' line='714' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='val' type-id='type-id-16' visibility='default' filepath='kernel/sched/sched.h' line='715' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cpu' type-id='type-id-17' visibility='default' filepath='kernel/sched/sched.h' line='716' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_domain' size-in-bits='256' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='707' column='1' id='type-id-3351'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='em_pd' type-id='type-id-3352' visibility='default' filepath='kernel/sched/sched.h' line='708' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='next' type-id='type-id-3348' visibility='default' filepath='kernel/sched/sched.h' line='709' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='kernel/sched/sched.h' line='710' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='em_perf_domain' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/energy_model.h' line='37' column='1' id='type-id-3353'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='table' type-id='type-id-3354' visibility='default' filepath='include/linux/energy_model.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_cap_states' type-id='type-id-17' visibility='default' filepath='include/linux/energy_model.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cpus' type-id='type-id-280' visibility='default' filepath='include/linux/energy_model.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='em_cap_state' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/energy_model.h' line='20' column='1' id='type-id-3355'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='frequency' type-id='type-id-16' visibility='default' filepath='include/linux/energy_model.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='power' type-id='type-id-16' visibility='default' filepath='include/linux/energy_model.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cost' type-id='type-id-16' visibility='default' filepath='include/linux/energy_model.h' line='23' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_domain' size-in-bits='2496' is-struct='yes' visibility='default' filepath='include/linux/sched/topology.h' line='77' column='1' id='type-id-3356'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='parent' type-id='type-id-3328' visibility='default' filepath='include/linux/sched/topology.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='child' type-id='type-id-3328' visibility='default' filepath='include/linux/sched/topology.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='groups' type-id='type-id-3357' visibility='default' filepath='include/linux/sched/topology.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='min_interval' type-id='type-id-16' visibility='default' filepath='include/linux/sched/topology.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='max_interval' type-id='type-id-16' visibility='default' filepath='include/linux/sched/topology.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='busy_factor' type-id='type-id-5' visibility='default' filepath='include/linux/sched/topology.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='imbalance_pct' type-id='type-id-5' visibility='default' filepath='include/linux/sched/topology.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cache_nice_tries' type-id='type-id-5' visibility='default' filepath='include/linux/sched/topology.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='busy_idx' type-id='type-id-5' visibility='default' filepath='include/linux/sched/topology.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='idle_idx' type-id='type-id-5' visibility='default' filepath='include/linux/sched/topology.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='newidle_idx' type-id='type-id-5' visibility='default' filepath='include/linux/sched/topology.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wake_idx' type-id='type-id-5' visibility='default' filepath='include/linux/sched/topology.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='forkexec_idx' type-id='type-id-5' visibility='default' filepath='include/linux/sched/topology.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='smt_gain' type-id='type-id-5' visibility='default' filepath='include/linux/sched/topology.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='nohz_idle' type-id='type-id-17' visibility='default' filepath='include/linux/sched/topology.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='flags' type-id='type-id-17' visibility='default' filepath='include/linux/sched/topology.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='level' type-id='type-id-17' visibility='default' filepath='include/linux/sched/topology.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='last_balance' type-id='type-id-16' visibility='default' filepath='include/linux/sched/topology.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='balance_interval' type-id='type-id-5' visibility='default' filepath='include/linux/sched/topology.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='nr_balance_failed' type-id='type-id-5' visibility='default' filepath='include/linux/sched/topology.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='max_newidle_lb_cost' type-id='type-id-40' visibility='default' filepath='include/linux/sched/topology.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='next_decay_max_lb_cost' type-id='type-id-16' visibility='default' filepath='include/linux/sched/topology.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='avg_scan_cost' type-id='type-id-40' visibility='default' filepath='include/linux/sched/topology.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='lb_count' type-id='type-id-1193' visibility='default' filepath='include/linux/sched/topology.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='lb_failed' type-id='type-id-1193' visibility='default' filepath='include/linux/sched/topology.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='lb_balanced' type-id='type-id-1193' visibility='default' filepath='include/linux/sched/topology.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='lb_imbalance' type-id='type-id-1193' visibility='default' filepath='include/linux/sched/topology.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='lb_gained' type-id='type-id-1193' visibility='default' filepath='include/linux/sched/topology.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='lb_hot_gained' type-id='type-id-1193' visibility='default' filepath='include/linux/sched/topology.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='lb_nobusyg' type-id='type-id-1193' visibility='default' filepath='include/linux/sched/topology.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='lb_nobusyq' type-id='type-id-1193' visibility='default' filepath='include/linux/sched/topology.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='alb_count' type-id='type-id-5' visibility='default' filepath='include/linux/sched/topology.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='alb_failed' type-id='type-id-5' visibility='default' filepath='include/linux/sched/topology.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='alb_pushed' type-id='type-id-5' visibility='default' filepath='include/linux/sched/topology.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='sbe_count' type-id='type-id-5' visibility='default' filepath='include/linux/sched/topology.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='sbe_balanced' type-id='type-id-5' visibility='default' filepath='include/linux/sched/topology.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='sbe_pushed' type-id='type-id-5' visibility='default' filepath='include/linux/sched/topology.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='sbf_count' type-id='type-id-5' visibility='default' filepath='include/linux/sched/topology.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2016'>
+          <var-decl name='sbf_balanced' type-id='type-id-5' visibility='default' filepath='include/linux/sched/topology.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='sbf_pushed' type-id='type-id-5' visibility='default' filepath='include/linux/sched/topology.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='ttwu_wake_remote' type-id='type-id-5' visibility='default' filepath='include/linux/sched/topology.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='ttwu_move_affine' type-id='type-id-5' visibility='default' filepath='include/linux/sched/topology.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='ttwu_move_balance' type-id='type-id-5' visibility='default' filepath='include/linux/sched/topology.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='name' type-id='type-id-2' visibility='default' filepath='include/linux/sched/topology.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='' type-id='type-id-3358' visibility='default' filepath='include/linux/sched/topology.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='shared' type-id='type-id-3359' visibility='default' filepath='include/linux/sched/topology.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='span_weight' type-id='type-id-5' visibility='default' filepath='include/linux/sched/topology.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='span' type-id='type-id-280' visibility='default' filepath='include/linux/sched/topology.h' line='157' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_group' size-in-bits='256' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='1358' column='1' id='type-id-3360'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='type-id-3357' visibility='default' filepath='kernel/sched/sched.h' line='1359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ref' type-id='type-id-26' visibility='default' filepath='kernel/sched/sched.h' line='1360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='group_weight' type-id='type-id-5' visibility='default' filepath='kernel/sched/sched.h' line='1362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sgc' type-id='type-id-3361' visibility='default' filepath='kernel/sched/sched.h' line='1363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='asym_prefer_cpu' type-id='type-id-17' visibility='default' filepath='kernel/sched/sched.h' line='1364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cpumask' type-id='type-id-280' visibility='default' filepath='kernel/sched/sched.h' line='1373' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_group_capacity' size-in-bits='384' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='1339' column='1' id='type-id-3362'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ref' type-id='type-id-26' visibility='default' filepath='kernel/sched/sched.h' line='1340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='capacity' type-id='type-id-16' visibility='default' filepath='kernel/sched/sched.h' line='1345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='min_capacity' type-id='type-id-16' visibility='default' filepath='kernel/sched/sched.h' line='1346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_capacity' type-id='type-id-16' visibility='default' filepath='kernel/sched/sched.h' line='1347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='next_update' type-id='type-id-16' visibility='default' filepath='kernel/sched/sched.h' line='1348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='imbalance' type-id='type-id-17' visibility='default' filepath='kernel/sched/sched.h' line='1349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='id' type-id='type-id-17' visibility='default' filepath='kernel/sched/sched.h' line='1352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cpumask' type-id='type-id-280' visibility='default' filepath='kernel/sched/sched.h' line='1355' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/sched/topology.h' line='143' column='1' id='type-id-3358'>
+        <data-member access='private'>
+          <var-decl name='private' type-id='type-id-15' visibility='default' filepath='include/linux/sched/topology.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/linux/sched/topology.h' line='145' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='sched_domain_shared' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/sched/topology.h' line='71' column='1' id='type-id-3363'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ref' type-id='type-id-26' visibility='default' filepath='include/linux/sched/topology.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nr_busy_cpus' type-id='type-id-26' visibility='default' filepath='include/linux/sched/topology.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='has_idle_cores' type-id='type-id-17' visibility='default' filepath='include/linux/sched/topology.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpu_stop_work' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/stop_machine.h' line='24' column='1' id='type-id-3329'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/stop_machine.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fn' type-id='type-id-3364' visibility='default' filepath='include/linux/stop_machine.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='arg' type-id='type-id-15' visibility='default' filepath='include/linux/stop_machine.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='done' type-id='type-id-3365' visibility='default' filepath='include/linux/stop_machine.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='cpu_stop_fn_t' type-id='type-id-3366' filepath='include/linux/stop_machine.h' line='20' column='1' id='type-id-3364'/>
+      <typedef-decl name='call_single_data_t' type-id='type-id-505' filepath='include/linux/smp.h' line='26' column='1' id='type-id-3330'/>
+      <class-decl name='cpuidle_state' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/cpuidle.h' line='42' column='1' id='type-id-3313'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-43' visibility='default' filepath='include/linux/cpuidle.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='desc' type-id='type-id-373' visibility='default' filepath='include/linux/cpuidle.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='type-id-5' visibility='default' filepath='include/linux/cpuidle.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='exit_latency' type-id='type-id-5' visibility='default' filepath='include/linux/cpuidle.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='power_usage' type-id='type-id-17' visibility='default' filepath='include/linux/cpuidle.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='target_residency' type-id='type-id-5' visibility='default' filepath='include/linux/cpuidle.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='disabled' type-id='type-id-33' visibility='default' filepath='include/linux/cpuidle.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='enter' type-id='type-id-3367' visibility='default' filepath='include/linux/cpuidle.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='enter_dead' type-id='type-id-3368' visibility='default' filepath='include/linux/cpuidle.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='enter_s2idle' type-id='type-id-3369' visibility='default' filepath='include/linux/cpuidle.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpuidle_device' size-in-bits='4224' is-struct='yes' visibility='default' filepath='include/linux/cpuidle.h' line='80' column='1' id='type-id-3370'>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='registered' type-id='type-id-5' visibility='default' filepath='include/linux/cpuidle.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='enabled' type-id='type-id-5' visibility='default' filepath='include/linux/cpuidle.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='use_deepest_state' type-id='type-id-5' visibility='default' filepath='include/linux/cpuidle.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='poll_time_limit' type-id='type-id-5' visibility='default' filepath='include/linux/cpuidle.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cpu' type-id='type-id-5' visibility='default' filepath='include/linux/cpuidle.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='last_residency' type-id='type-id-17' visibility='default' filepath='include/linux/cpuidle.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='states_usage' type-id='type-id-3318' visibility='default' filepath='include/linux/cpuidle.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='kobjs' type-id='type-id-3316' visibility='default' filepath='include/linux/cpuidle.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='kobj_driver' type-id='type-id-3371' visibility='default' filepath='include/linux/cpuidle.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='kobj_dev' type-id='type-id-3372' visibility='default' filepath='include/linux/cpuidle.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='device_list' type-id='type-id-20' visibility='default' filepath='include/linux/cpuidle.h' line='92' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpuidle_state_usage' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/cpuidle.h' line='32' column='1' id='type-id-3317'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='disable' type-id='type-id-98' visibility='default' filepath='include/linux/cpuidle.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='usage' type-id='type-id-98' visibility='default' filepath='include/linux/cpuidle.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='time' type-id='type-id-98' visibility='default' filepath='include/linux/cpuidle.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='s2idle_usage' type-id='type-id-98' visibility='default' filepath='include/linux/cpuidle.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='s2idle_time' type-id='type-id-98' visibility='default' filepath='include/linux/cpuidle.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpuidle_driver' size-in-bits='8000' is-struct='yes' visibility='default' filepath='include/linux/cpuidle.h' line='117' column='1' id='type-id-3373'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/cpuidle.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='include/linux/cpuidle.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='refcnt' type-id='type-id-17' visibility='default' filepath='include/linux/cpuidle.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='bctimer' type-id='type-id-5' visibility='default' filepath='include/linux/cpuidle.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='states' type-id='type-id-3314' visibility='default' filepath='include/linux/cpuidle.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='state_count' type-id='type-id-17' visibility='default' filepath='include/linux/cpuidle.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7904'>
+          <var-decl name='safe_state_index' type-id='type-id-17' visibility='default' filepath='include/linux/cpuidle.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='cpumask' type-id='type-id-3374' visibility='default' filepath='include/linux/cpuidle.h' line='130' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rq_flags' size-in-bits='128' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='1082' column='1' id='type-id-3375'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='kernel/sched/sched.h' line='1083' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cookie' type-id='type-id-3376' visibility='default' filepath='kernel/sched/sched.h' line='1084' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='clock_update_flags' type-id='type-id-5' visibility='default' filepath='kernel/sched/sched.h' line='1091' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pin_cookie' is-struct='yes' visibility='default' filepath='include/linux/lockdep.h' line='451' column='1' id='type-id-3376'/>
+      <class-decl name='new_utsname' size-in-bits='3120' is-struct='yes' visibility='default' filepath='include/uapi/linux/utsname.h' line='25' column='1' id='type-id-3377'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sysname' type-id='type-id-3306' visibility='default' filepath='include/uapi/linux/utsname.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='520'>
+          <var-decl name='nodename' type-id='type-id-3306' visibility='default' filepath='include/uapi/linux/utsname.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1040'>
+          <var-decl name='release' type-id='type-id-3306' visibility='default' filepath='include/uapi/linux/utsname.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1560'>
+          <var-decl name='version' type-id='type-id-3306' visibility='default' filepath='include/uapi/linux/utsname.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='machine' type-id='type-id-3306' visibility='default' filepath='include/uapi/linux/utsname.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2600'>
+          <var-decl name='domainname' type-id='type-id-3306' visibility='default' filepath='include/uapi/linux/utsname.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/iocontext.h' line='82' column='1' id='type-id-3378'>
+        <data-member access='private'>
+          <var-decl name='q_node' type-id='type-id-20' visibility='default' filepath='include/linux/iocontext.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='__rcu_icq_cache' type-id='type-id-538' visibility='default' filepath='include/linux/iocontext.h' line='84' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='wait_queue_entry_t' type-id='type-id-3379' filepath='include/linux/wait.h' line='14' column='1' id='type-id-3380'/>
+      <class-decl name='wait_queue_entry' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/wait.h' line='27' column='1' id='type-id-3379'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='type-id-5' visibility='default' filepath='include/linux/wait.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='private' type-id='type-id-15' visibility='default' filepath='include/linux/wait.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='func' type-id='type-id-3381' visibility='default' filepath='include/linux/wait.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='entry' type-id='type-id-20' visibility='default' filepath='include/linux/wait.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='wait_queue_func_t' type-id='type-id-3382' filepath='include/linux/wait.h' line='16' column='1' id='type-id-3381'/>
+      <class-decl name='sched_param' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/sched/types.h' line='7' column='1' id='type-id-3383'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sched_priority' type-id='type-id-17' visibility='default' filepath='include/uapi/linux/sched/types.h' line='8' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-1546' size-in-bits='64' id='type-id-3384'/>
+      <qualified-type-def type-id='type-id-178' const='yes' id='type-id-3385'/>
+      <pointer-type-def type-id='type-id-3385' size-in-bits='64' id='type-id-3386'/>
+      <qualified-type-def type-id='type-id-3383' const='yes' id='type-id-3387'/>
+      <pointer-type-def type-id='type-id-3387' size-in-bits='64' id='type-id-3388'/>
+      <qualified-type-def type-id='type-id-2379' const='yes' id='type-id-3389'/>
+      <pointer-type-def type-id='type-id-3389' size-in-bits='64' id='type-id-3342'/>
+      <pointer-type-def type-id='type-id-3341' size-in-bits='64' id='type-id-3390'/>
+      <pointer-type-def type-id='type-id-3308' size-in-bits='64' id='type-id-3365'/>
+      <pointer-type-def type-id='type-id-3350' size-in-bits='64' id='type-id-3349'/>
+      <pointer-type-def type-id='type-id-3370' size-in-bits='64' id='type-id-3391'/>
+      <pointer-type-def type-id='type-id-3309' size-in-bits='64' id='type-id-3372'/>
+      <pointer-type-def type-id='type-id-3373' size-in-bits='64' id='type-id-3392'/>
+      <pointer-type-def type-id='type-id-3310' size-in-bits='64' id='type-id-3371'/>
+      <pointer-type-def type-id='type-id-3313' size-in-bits='64' id='type-id-3331'/>
+      <pointer-type-def type-id='type-id-3311' size-in-bits='64' id='type-id-3315'/>
+      <pointer-type-def type-id='type-id-178' size-in-bits='64' id='type-id-3374'/>
+      <pointer-type-def type-id='type-id-3355' size-in-bits='64' id='type-id-3354'/>
+      <pointer-type-def type-id='type-id-3353' size-in-bits='64' id='type-id-3352'/>
+      <pointer-type-def type-id='type-id-3393' size-in-bits='64' id='type-id-3394'/>
+      <pointer-type-def type-id='type-id-3395' size-in-bits='64' id='type-id-3367'/>
+      <pointer-type-def type-id='type-id-3396' size-in-bits='64' id='type-id-3368'/>
+      <pointer-type-def type-id='type-id-3397' size-in-bits='64' id='type-id-3398'/>
+      <pointer-type-def type-id='type-id-3399' size-in-bits='64' id='type-id-3400'/>
+      <pointer-type-def type-id='type-id-3401' size-in-bits='64' id='type-id-3402'/>
+      <pointer-type-def type-id='type-id-3403' size-in-bits='64' id='type-id-3382'/>
+      <pointer-type-def type-id='type-id-3339' size-in-bits='64' id='type-id-3404'/>
+      <pointer-type-def type-id='type-id-3312' size-in-bits='64' id='type-id-3405'/>
+      <pointer-type-def type-id='type-id-3351' size-in-bits='64' id='type-id-3348'/>
+      <pointer-type-def type-id='type-id-3343' size-in-bits='64' id='type-id-3327'/>
+      <pointer-type-def type-id='type-id-3325' size-in-bits='64' id='type-id-3406'/>
+      <pointer-type-def type-id='type-id-3375' size-in-bits='64' id='type-id-3407'/>
+      <pointer-type-def type-id='type-id-1551' size-in-bits='64' id='type-id-3408'/>
+      <pointer-type-def type-id='type-id-3356' size-in-bits='64' id='type-id-3328'/>
+      <pointer-type-def type-id='type-id-3363' size-in-bits='64' id='type-id-3359'/>
+      <pointer-type-def type-id='type-id-1545' size-in-bits='64' id='type-id-3409'/>
+      <pointer-type-def type-id='type-id-3360' size-in-bits='64' id='type-id-3357'/>
+      <pointer-type-def type-id='type-id-3362' size-in-bits='64' id='type-id-3361'/>
+      <pointer-type-def type-id='type-id-1550' size-in-bits='64' id='type-id-3410'/>
+      <pointer-type-def type-id='type-id-3411' size-in-bits='64' id='type-id-3412'/>
+      <pointer-type-def type-id='type-id-21' size-in-bits='64' id='type-id-3413'/>
+      <pointer-type-def type-id='type-id-3414' size-in-bits='64' id='type-id-3415'/>
+      <pointer-type-def type-id='type-id-3416' size-in-bits='64' id='type-id-3417'/>
+      <pointer-type-def type-id='type-id-3418' size-in-bits='64' id='type-id-3369'/>
+      <pointer-type-def type-id='type-id-3419' size-in-bits='64' id='type-id-3420'/>
+      <pointer-type-def type-id='type-id-3421' size-in-bits='64' id='type-id-3422'/>
+      <pointer-type-def type-id='type-id-3423' size-in-bits='64' id='type-id-3424'/>
+      <pointer-type-def type-id='type-id-3425' size-in-bits='64' id='type-id-3426'/>
+      <pointer-type-def type-id='type-id-3427' size-in-bits='64' id='type-id-3428'/>
+      <pointer-type-def type-id='type-id-3379' size-in-bits='64' id='type-id-3305'/>
+      <pointer-type-def type-id='type-id-3380' size-in-bits='64' id='type-id-3429'/>
+      <function-decl name='preempt_count_add' mangled-name='preempt_count_add' filepath='kernel/sched/core.c' line='3244' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='preempt_count_add'>
+        <parameter type-id='type-id-17' name='val' filepath='kernel/sched/core.c' line='3244' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='preempt_count_sub' mangled-name='preempt_count_sub' filepath='kernel/sched/core.c' line='3276' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='preempt_count_sub'>
+        <parameter type-id='type-id-17' name='val' filepath='kernel/sched/core.c' line='3276' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='preempt_schedule' mangled-name='preempt_schedule' filepath='kernel/sched/core.c' line='3678' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='preempt_schedule'>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='wake_up_process' mangled-name='wake_up_process' filepath='kernel/sched/core.c' line='2143' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wake_up_process'>
+        <parameter type-id='type-id-431' name='p' filepath='kernel/sched/core.c' line='2143' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='schedule' mangled-name='schedule' filepath='kernel/sched/core.c' line='3574' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='schedule'>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='preempt_schedule_notrace' mangled-name='preempt_schedule_notrace' filepath='kernel/sched/core.c' line='3706' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='preempt_schedule_notrace'>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='default_wake_function' mangled-name='default_wake_function' filepath='kernel/sched/core.c' line='3772' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='default_wake_function'>
+        <parameter type-id='type-id-3429' name='curr' filepath='kernel/sched/core.c' line='3772' column='1'/>
+        <parameter type-id='type-id-5' name='mode' filepath='kernel/sched/core.c' line='3772' column='1'/>
+        <parameter type-id='type-id-17' name='wake_flags' filepath='kernel/sched/core.c' line='3772' column='1'/>
+        <parameter type-id='type-id-15' name='key' filepath='kernel/sched/core.c' line='3773' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='sched_setscheduler' mangled-name='sched_setscheduler' filepath='kernel/sched/core.c' line='4450' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sched_setscheduler'>
+        <parameter type-id='type-id-431' name='p' filepath='kernel/sched/core.c' line='4450' column='1'/>
+        <parameter type-id='type-id-17' name='policy' filepath='kernel/sched/core.c' line='4450' column='1'/>
+        <parameter type-id='type-id-3388' name='param' filepath='kernel/sched/core.c' line='4451' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-3393'>
+        <parameter type-id='type-id-3390'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3395'>
+        <parameter type-id='type-id-3391'/>
+        <parameter type-id='type-id-3392'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3396'>
+        <parameter type-id='type-id-3391'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3397'>
+        <parameter type-id='type-id-83'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3399'>
+        <parameter type-id='type-id-3404'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3401'>
+        <parameter type-id='type-id-431'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3403'>
+        <parameter type-id='type-id-3305'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3411'>
+        <parameter type-id='type-id-3406'/>
+        <parameter type-id='type-id-431'/>
+        <parameter type-id='type-id-3407'/>
+        <return type-id='type-id-431'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3414'>
+        <parameter type-id='type-id-3406'/>
+        <parameter type-id='type-id-431'/>
+        <parameter type-id='type-id-33'/>
+        <return type-id='type-id-33'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3416'>
+        <parameter type-id='type-id-3406'/>
+        <parameter type-id='type-id-431'/>
+        <return type-id='type-id-5'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3418'>
+        <parameter type-id='type-id-3391'/>
+        <parameter type-id='type-id-3392'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3419'>
+        <parameter type-id='type-id-3406'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3421'>
+        <parameter type-id='type-id-3406'/>
+        <parameter type-id='type-id-431'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3423'>
+        <parameter type-id='type-id-3406'/>
+        <parameter type-id='type-id-431'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3425'>
+        <parameter type-id='type-id-431'/>
+        <parameter type-id='type-id-3386'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3427'>
+        <parameter type-id='type-id-431'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/file.c' language='LANG_C89'>
+      <function-decl name='get_unused_fd_flags' mangled-name='get_unused_fd_flags' filepath='fs/file.c' line='543' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_unused_fd_flags'>
+        <parameter type-id='type-id-5' name='flags' filepath='fs/file.c' line='543' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='put_unused_fd' mangled-name='put_unused_fd' filepath='fs/file.c' line='557' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='put_unused_fd'>
+        <parameter type-id='type-id-5' name='fd' filepath='fs/file.c' line='557' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='fd_install' mangled-name='fd_install' filepath='fs/file.c' line='611' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fd_install'>
+        <parameter type-id='type-id-5' name='fd' filepath='fs/file.c' line='611' column='1'/>
+        <parameter type-id='type-id-83' name='file' filepath='fs/file.c' line='611' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/time/hrtimer.c' language='LANG_C89'>
+      <enum-decl name='hrtimer_mode' filepath='include/linux/hrtimer.h' line='39' column='1' id='type-id-3430'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='HRTIMER_MODE_ABS' value='0'/>
+        <enumerator name='HRTIMER_MODE_REL' value='1'/>
+        <enumerator name='HRTIMER_MODE_PINNED' value='2'/>
+        <enumerator name='HRTIMER_MODE_SOFT' value='4'/>
+        <enumerator name='HRTIMER_MODE_ABS_PINNED' value='2'/>
+        <enumerator name='HRTIMER_MODE_REL_PINNED' value='3'/>
+        <enumerator name='HRTIMER_MODE_ABS_SOFT' value='4'/>
+        <enumerator name='HRTIMER_MODE_REL_SOFT' value='5'/>
+        <enumerator name='HRTIMER_MODE_ABS_PINNED_SOFT' value='6'/>
+        <enumerator name='HRTIMER_MODE_REL_PINNED_SOFT' value='7'/>
+      </enum-decl>
+      <qualified-type-def type-id='type-id-681' const='yes' id='type-id-3431'/>
+      <pointer-type-def type-id='type-id-3431' size-in-bits='64' id='type-id-3432'/>
+      <qualified-type-def type-id='type-id-3430' const='yes' id='type-id-3433'/>
+      <function-decl name='hrtimer_forward' mangled-name='hrtimer_forward' filepath='kernel/time/hrtimer.c' line='907' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hrtimer_forward'>
+        <parameter type-id='type-id-1558' name='timer' filepath='kernel/time/hrtimer.c' line='907' column='1'/>
+        <parameter type-id='type-id-682' name='now' filepath='kernel/time/hrtimer.c' line='907' column='1'/>
+        <parameter type-id='type-id-682' name='interval' filepath='kernel/time/hrtimer.c' line='907' column='1'/>
+        <return type-id='type-id-40'/>
+      </function-decl>
+      <function-decl name='hrtimer_start_range_ns' mangled-name='hrtimer_start_range_ns' filepath='kernel/time/hrtimer.c' line='1104' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hrtimer_start_range_ns'>
+        <parameter type-id='type-id-1558' name='timer' filepath='kernel/time/hrtimer.c' line='1104' column='1'/>
+        <parameter type-id='type-id-682' name='tim' filepath='kernel/time/hrtimer.c' line='1104' column='1'/>
+        <parameter type-id='type-id-40' name='delta_ns' filepath='kernel/time/hrtimer.c' line='1105' column='1'/>
+        <parameter type-id='type-id-3433' name='mode' filepath='kernel/time/hrtimer.c' line='1105' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='hrtimer_active' mangled-name='hrtimer_active' filepath='kernel/time/hrtimer.c' line='1323' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hrtimer_active'>
+        <parameter type-id='type-id-3432' name='timer' filepath='kernel/time/hrtimer.c' line='1323' column='1'/>
+        <return type-id='type-id-33'/>
+      </function-decl>
+      <function-decl name='hrtimer_cancel' mangled-name='hrtimer_cancel' filepath='kernel/time/hrtimer.c' line='1170' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hrtimer_cancel'>
+        <parameter type-id='type-id-1558' name='timer' filepath='kernel/time/hrtimer.c' line='1170' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='hrtimer_init' mangled-name='hrtimer_init' filepath='kernel/time/hrtimer.c' line='1308' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hrtimer_init'>
+        <parameter type-id='type-id-1558' name='timer' filepath='kernel/time/hrtimer.c' line='1308' column='1'/>
+        <parameter type-id='type-id-1557' name='clock_id' filepath='kernel/time/hrtimer.c' line='1308' column='1'/>
+        <parameter type-id='type-id-3430' name='mode' filepath='kernel/time/hrtimer.c' line='1309' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/shmem.c' language='LANG_C89'>
+      <union-decl name='__anonymous_union__2' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='79' column='1' id='type-id-3434'>
+        <data-member access='private'>
+          <var-decl name='' type-id='type-id-2089' visibility='default' filepath='include/linux/mm_types.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='callback_head' type-id='type-id-385' visibility='default' filepath='include/linux/mm_types.h' line='160' column='1'/>
+        </data-member>
+      </union-decl>
+      <function-decl name='shmem_file_setup' mangled-name='shmem_file_setup' filepath='mm/shmem.c' line='4009' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='shmem_file_setup'>
+        <parameter type-id='type-id-4' name='name' filepath='mm/shmem.c' line='4009' column='1'/>
+        <parameter type-id='type-id-763' name='size' filepath='mm/shmem.c' line='4009' column='1'/>
+        <parameter type-id='type-id-16' name='flags' filepath='mm/shmem.c' line='4009' column='1'/>
+        <return type-id='type-id-83'/>
+      </function-decl>
+      <function-decl name='shmem_read_mapping_page_gfp' mangled-name='shmem_read_mapping_page_gfp' filepath='mm/shmem.c' line='4077' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='shmem_read_mapping_page_gfp'>
+        <parameter type-id='type-id-1281' name='mapping' filepath='mm/shmem.c' line='4077' column='1'/>
+        <parameter type-id='type-id-16' name='index' filepath='mm/shmem.c' line='4078' column='1'/>
+        <parameter type-id='type-id-485' name='gfp' filepath='mm/shmem.c' line='4078' column='1'/>
+        <return type-id='type-id-512'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/workqueue.c' language='LANG_C89'>
+
+
+      <array-type-def dimensions='1' type-id='type-id-1' size-in-bits='192' id='type-id-3435'>
+        <subrange length='24' type-id='type-id-9' id='type-id-3436'/>
+
+      </array-type-def>
+      <class-decl name='pipe_inode_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-3437'/>
+      <array-type-def dimensions='1' type-id='type-id-17' size-in-bits='480' id='type-id-3438'>
+        <subrange length='15' type-id='type-id-9' id='type-id-3439'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-3440' size-in-bits='infinite' id='type-id-3441'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <class-decl name='wq_flusher' size-in-bits='448' is-struct='yes' visibility='default' filepath='kernel/workqueue.c' line='225' column='1' id='type-id-3442'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='kernel/workqueue.c' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flush_color' type-id='type-id-17' visibility='default' filepath='kernel/workqueue.c' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='done' type-id='type-id-1608' visibility='default' filepath='kernel/workqueue.c' line='228' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='worker' size-in-bits='1152' is-struct='yes' visibility='default' filepath='kernel/workqueue_internal.h' line='24' column='1' id='type-id-3443'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='type-id-3444' visibility='default' filepath='kernel/workqueue_internal.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='current_work' type-id='type-id-3234' visibility='default' filepath='kernel/workqueue_internal.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='current_func' type-id='type-id-1590' visibility='default' filepath='kernel/workqueue_internal.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='current_pwq' type-id='type-id-3440' visibility='default' filepath='kernel/workqueue_internal.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='scheduled' type-id='type-id-20' visibility='default' filepath='kernel/workqueue_internal.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='task' type-id='type-id-431' visibility='default' filepath='kernel/workqueue_internal.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pool' type-id='type-id-3445' visibility='default' filepath='kernel/workqueue_internal.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='node' type-id='type-id-20' visibility='default' filepath='kernel/workqueue_internal.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='last_active' type-id='type-id-16' visibility='default' filepath='kernel/workqueue_internal.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='flags' type-id='type-id-5' visibility='default' filepath='kernel/workqueue_internal.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='id' type-id='type-id-17' visibility='default' filepath='kernel/workqueue_internal.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='desc' type-id='type-id-3435' visibility='default' filepath='kernel/workqueue_internal.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='rescue_wq' type-id='type-id-654' visibility='default' filepath='kernel/workqueue_internal.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='last_func' type-id='type-id-1590' visibility='default' filepath='kernel/workqueue_internal.h' line='58' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='kernel/workqueue_internal.h' line='26' column='1' id='type-id-3444'>
+        <data-member access='private'>
+          <var-decl name='entry' type-id='type-id-20' visibility='default' filepath='kernel/workqueue_internal.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='hentry' type-id='type-id-520' visibility='default' filepath='kernel/workqueue_internal.h' line='28' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='pool_workqueue' size-in-bits='2048' is-struct='yes' visibility='default' filepath='kernel/workqueue.c' line='198' column='1' id='type-id-3446'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pool' type-id='type-id-3445' visibility='default' filepath='kernel/workqueue.c' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wq' type-id='type-id-654' visibility='default' filepath='kernel/workqueue.c' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='work_color' type-id='type-id-17' visibility='default' filepath='kernel/workqueue.c' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flush_color' type-id='type-id-17' visibility='default' filepath='kernel/workqueue.c' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='refcnt' type-id='type-id-17' visibility='default' filepath='kernel/workqueue.c' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='nr_in_flight' type-id='type-id-3438' visibility='default' filepath='kernel/workqueue.c' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='nr_active' type-id='type-id-17' visibility='default' filepath='kernel/workqueue.c' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='max_active' type-id='type-id-17' visibility='default' filepath='kernel/workqueue.c' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='delayed_works' type-id='type-id-20' visibility='default' filepath='kernel/workqueue.c' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='pwqs_node' type-id='type-id-20' visibility='default' filepath='kernel/workqueue.c' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='mayday_node' type-id='type-id-20' visibility='default' filepath='kernel/workqueue.c' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='unbound_release_work' type-id='type-id-255' visibility='default' filepath='kernel/workqueue.c' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='kernel/workqueue.c' line='219' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='worker_pool' size-in-bits='6656' is-struct='yes' visibility='default' filepath='kernel/workqueue.c' line='146' column='1' id='type-id-3447'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='kernel/workqueue.c' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cpu' type-id='type-id-17' visibility='default' filepath='kernel/workqueue.c' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='node' type-id='type-id-17' visibility='default' filepath='kernel/workqueue.c' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='id' type-id='type-id-17' visibility='default' filepath='kernel/workqueue.c' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='type-id-5' visibility='default' filepath='kernel/workqueue.c' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='watchdog_ts' type-id='type-id-16' visibility='default' filepath='kernel/workqueue.c' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='worklist' type-id='type-id-20' visibility='default' filepath='kernel/workqueue.c' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='nr_workers' type-id='type-id-17' visibility='default' filepath='kernel/workqueue.c' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='nr_idle' type-id='type-id-17' visibility='default' filepath='kernel/workqueue.c' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='idle_list' type-id='type-id-20' visibility='default' filepath='kernel/workqueue.c' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='idle_timer' type-id='type-id-417' visibility='default' filepath='kernel/workqueue.c' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='mayday_timer' type-id='type-id-417' visibility='default' filepath='kernel/workqueue.c' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='busy_hash' type-id='type-id-187' visibility='default' filepath='kernel/workqueue.c' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='manager' type-id='type-id-3448' visibility='default' filepath='kernel/workqueue.c' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='workers' type-id='type-id-20' visibility='default' filepath='kernel/workqueue.c' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='detach_completion' type-id='type-id-1394' visibility='default' filepath='kernel/workqueue.c' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='worker_ida' type-id='type-id-3449' visibility='default' filepath='kernel/workqueue.c' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='attrs' type-id='type-id-3450' visibility='default' filepath='kernel/workqueue.c' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='hash_node' type-id='type-id-520' visibility='default' filepath='kernel/workqueue.c' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='refcnt' type-id='type-id-17' visibility='default' filepath='kernel/workqueue.c' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='nr_running' type-id='type-id-26' visibility='default' filepath='kernel/workqueue.c' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='kernel/workqueue.c' line='189' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ida' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/idr.h' line='230' column='1' id='type-id-3449'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ida_rt' type-id='type-id-415' visibility='default' filepath='include/linux/idr.h' line='231' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='workqueue_attrs' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/workqueue.h' line='137' column='1' id='type-id-3451'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nice' type-id='type-id-17' visibility='default' filepath='include/linux/workqueue.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cpumask' type-id='type-id-38' visibility='default' filepath='include/linux/workqueue.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='no_numa' type-id='type-id-33' visibility='default' filepath='include/linux/workqueue.h' line='155' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wq_device' size-in-bits='6272' is-struct='yes' visibility='default' filepath='kernel/workqueue.c' line='5183' column='1' id='type-id-3452'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wq' type-id='type-id-654' visibility='default' filepath='kernel/workqueue.c' line='5184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='type-id-388' visibility='default' filepath='kernel/workqueue.c' line='5185' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-411' size-in-bits='64' id='type-id-3453'/>
+      <pointer-type-def type-id='type-id-3437' size-in-bits='64' id='type-id-3454'/>
+      <pointer-type-def type-id='type-id-3446' size-in-bits='64' id='type-id-3440'/>
+      <pointer-type-def type-id='type-id-3443' size-in-bits='64' id='type-id-3448'/>
+      <pointer-type-def type-id='type-id-3447' size-in-bits='64' id='type-id-3445'/>
+      <pointer-type-def type-id='type-id-3451' size-in-bits='64' id='type-id-3450'/>
+      <pointer-type-def type-id='type-id-3452' size-in-bits='64' id='type-id-3455'/>
+      <pointer-type-def type-id='type-id-3442' size-in-bits='64' id='type-id-3456'/>
+      <function-decl name='__alloc_workqueue_key' mangled-name='__alloc_workqueue_key' filepath='kernel/workqueue.c' line='4079' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__alloc_workqueue_key'>
+        <parameter type-id='type-id-4' name='fmt' filepath='kernel/workqueue.c' line='4079' column='1'/>
+        <parameter type-id='type-id-5' name='flags' filepath='kernel/workqueue.c' line='4080' column='1'/>
+        <parameter type-id='type-id-17' name='max_active' filepath='kernel/workqueue.c' line='4081' column='1'/>
+        <parameter type-id='type-id-1698' name='key' filepath='kernel/workqueue.c' line='4082' column='1'/>
+        <parameter type-id='type-id-4' name='lock_name' filepath='kernel/workqueue.c' line='4083' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='type-id-654'/>
+      </function-decl>
+      <function-decl name='queue_work_on' mangled-name='queue_work_on' filepath='kernel/workqueue.c' line='1497' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='queue_work_on'>
+        <parameter type-id='type-id-17' name='cpu' filepath='kernel/workqueue.c' line='1497' column='1'/>
+        <parameter type-id='type-id-654' name='wq' filepath='kernel/workqueue.c' line='1497' column='1'/>
+        <parameter type-id='type-id-3234' name='work' filepath='kernel/workqueue.c' line='1498' column='1'/>
+        <return type-id='type-id-33'/>
+      </function-decl>
+      <function-decl name='delayed_work_timer_fn' mangled-name='delayed_work_timer_fn' filepath='kernel/workqueue.c' line='1515' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='delayed_work_timer_fn'>
+        <parameter type-id='type-id-3065' name='t' filepath='kernel/workqueue.c' line='1515' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='queue_delayed_work_on' mangled-name='queue_delayed_work_on' filepath='kernel/workqueue.c' line='1567' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='queue_delayed_work_on'>
+        <parameter type-id='type-id-17' name='cpu' filepath='kernel/workqueue.c' line='1567' column='1'/>
+        <parameter type-id='type-id-654' name='wq' filepath='kernel/workqueue.c' line='1567' column='1'/>
+        <parameter type-id='type-id-3453' name='dwork' filepath='kernel/workqueue.c' line='1568' column='1'/>
+        <parameter type-id='type-id-16' name='delay' filepath='kernel/workqueue.c' line='1568' column='1'/>
+        <return type-id='type-id-33'/>
+      </function-decl>
+      <function-decl name='flush_workqueue' mangled-name='flush_workqueue' filepath='kernel/workqueue.c' line='2672' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='flush_workqueue'>
+        <parameter type-id='type-id-654' name='wq' filepath='kernel/workqueue.c' line='2672' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='flush_work' mangled-name='flush_work' filepath='kernel/workqueue.c' line='2968' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='flush_work'>
+        <parameter type-id='type-id-3234' name='work' filepath='kernel/workqueue.c' line='2968' column='1'/>
+        <return type-id='type-id-33'/>
+      </function-decl>
+      <function-decl name='cancel_work_sync' mangled-name='cancel_work_sync' filepath='kernel/workqueue.c' line='3070' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cancel_work_sync'>
+        <parameter type-id='type-id-3234' name='work' filepath='kernel/workqueue.c' line='3070' column='1'/>
+        <return type-id='type-id-33'/>
+      </function-decl>
+      <function-decl name='cancel_delayed_work' mangled-name='cancel_delayed_work' filepath='kernel/workqueue.c' line='3151' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cancel_delayed_work'>
+        <parameter type-id='type-id-3453' name='dwork' filepath='kernel/workqueue.c' line='3151' column='1'/>
+        <return type-id='type-id-33'/>
+      </function-decl>
+      <function-decl name='cancel_delayed_work_sync' mangled-name='cancel_delayed_work_sync' filepath='kernel/workqueue.c' line='3166' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cancel_delayed_work_sync'>
+        <parameter type-id='type-id-3453' name='dwork' filepath='kernel/workqueue.c' line='3166' column='1'/>
+        <return type-id='type-id-33'/>
+      </function-decl>
+      <function-decl name='destroy_workqueue' mangled-name='destroy_workqueue' filepath='kernel/workqueue.c' line='4181' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='destroy_workqueue'>
+        <parameter type-id='type-id-654' name='wq' filepath='kernel/workqueue.c' line='4181' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/kobject_uevent.c' language='LANG_C89'>
+      <enum-decl name='kobject_action' filepath='include/linux/kobject.h' line='53' column='1' id='type-id-3457'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='KOBJ_ADD' value='0'/>
+        <enumerator name='KOBJ_REMOVE' value='1'/>
+        <enumerator name='KOBJ_CHANGE' value='2'/>
+        <enumerator name='KOBJ_MOVE' value='3'/>
+        <enumerator name='KOBJ_ONLINE' value='4'/>
+        <enumerator name='KOBJ_OFFLINE' value='5'/>
+        <enumerator name='KOBJ_BIND' value='6'/>
+        <enumerator name='KOBJ_UNBIND' value='7'/>
+        <enumerator name='KOBJ_MAX' value='8'/>
+      </enum-decl>
+      <function-decl name='kobject_uevent_env' mangled-name='kobject_uevent_env' filepath='lib/kobject_uevent.c' line='454' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kobject_uevent_env'>
+        <parameter type-id='type-id-379' name='kobj' filepath='lib/kobject_uevent.c' line='454' column='1'/>
+        <parameter type-id='type-id-3457' name='action' filepath='lib/kobject_uevent.c' line='454' column='1'/>
+        <parameter type-id='type-id-3458' name='envp_ext' filepath='lib/kobject_uevent.c' line='455' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='add_uevent_var' mangled-name='add_uevent_var' filepath='lib/kobject_uevent.c' line='651' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='add_uevent_var'>
+        <parameter type-id='type-id-3012' name='env' filepath='lib/kobject_uevent.c' line='651' column='1'/>
+        <parameter type-id='type-id-4' name='format' filepath='lib/kobject_uevent.c' line='651' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='kobject_uevent' mangled-name='kobject_uevent' filepath='lib/kobject_uevent.c' line='637' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kobject_uevent'>
+        <parameter type-id='type-id-379' name='kobj' filepath='lib/kobject_uevent.c' line='637' column='1'/>
+        <parameter type-id='type-id-3457' name='action' filepath='lib/kobject_uevent.c' line='637' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/kthread.c' language='LANG_C89'>
+      <class-decl name='vm_struct' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-3459'/>
+      <pointer-type-def type-id='type-id-3460' size-in-bits='64' id='type-id-3366'/>
+      <pointer-type-def type-id='type-id-3459' size-in-bits='64' id='type-id-3461'/>
+      <function-decl name='kthread_should_stop' mangled-name='kthread_should_stop' filepath='kernel/kthread.c' line='99' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_should_stop'>
+        <return type-id='type-id-33'/>
+      </function-decl>
+      <function-decl name='kthread_create_on_node' mangled-name='kthread_create_on_node' filepath='kernel/kthread.c' line='371' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_create_on_node'>
+        <parameter type-id='type-id-3366' name='threadfn' filepath='kernel/kthread.c' line='371' column='1'/>
+        <parameter type-id='type-id-15' name='data' filepath='kernel/kthread.c' line='372' column='1'/>
+        <parameter type-id='type-id-17' name='node' filepath='kernel/kthread.c' line='372' column='1'/>
+        <parameter type-id='type-id-4' name='namefmt' filepath='kernel/kthread.c' line='373' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='type-id-431'/>
+      </function-decl>
+      <function-decl name='kthread_stop' mangled-name='kthread_stop' filepath='kernel/kthread.c' line='539' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_stop'>
+        <parameter type-id='type-id-431' name='k' filepath='kernel/kthread.c' line='539' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='kthread_create_worker' mangled-name='kthread_create_worker' filepath='kernel/kthread.c' line='718' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_create_worker'>
+        <parameter type-id='type-id-5' name='flags' filepath='kernel/kthread.c' line='718' column='1'/>
+        <parameter type-id='type-id-4' name='namefmt' filepath='kernel/kthread.c' line='718' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='type-id-2321'/>
+      </function-decl>
+      <function-decl name='kthread_queue_work' mangled-name='kthread_queue_work' filepath='kernel/kthread.c' line='810' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_queue_work'>
+        <parameter type-id='type-id-2321' name='worker' filepath='kernel/kthread.c' line='810' column='1'/>
+        <parameter type-id='type-id-2325' name='work' filepath='kernel/kthread.c' line='811' column='1'/>
+        <return type-id='type-id-33'/>
+      </function-decl>
+      <function-decl name='kthread_destroy_worker' mangled-name='kthread_destroy_worker' filepath='kernel/kthread.c' line='1169' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_destroy_worker'>
+        <parameter type-id='type-id-2321' name='worker' filepath='kernel/kthread.c' line='1169' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-3460'>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/cred.c' language='LANG_C89'>
+      <pointer-type-def type-id='type-id-1615' size-in-bits='64' id='type-id-3340'/>
+      <function-decl name='__put_cred' mangled-name='__put_cred' filepath='kernel/cred.c' line='135' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__put_cred'>
+        <parameter type-id='type-id-3340' name='cred' filepath='kernel/cred.c' line='135' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/kmod.c' language='LANG_C89'>
+      <function-decl name='__request_module' mangled-name='__request_module' filepath='kernel/kmod.c' line='125' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__request_module'>
+        <parameter type-id='type-id-33' name='wait' filepath='kernel/kmod.c' line='125' column='1'/>
+        <parameter type-id='type-id-4' name='fmt' filepath='kernel/kmod.c' line='125' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/sched/completion.c' language='LANG_C89'>
+      <function-decl name='complete' mangled-name='complete' filepath='kernel/sched/completion.c' line='28' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='complete'>
+        <parameter type-id='type-id-1394' name='x' filepath='kernel/sched/completion.c' line='28' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='complete_all' mangled-name='complete_all' filepath='kernel/sched/completion.c' line='57' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='complete_all'>
+        <parameter type-id='type-id-1394' name='x' filepath='kernel/sched/completion.c' line='57' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='wait_for_completion' mangled-name='wait_for_completion' filepath='kernel/sched/completion.c' line='134' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wait_for_completion'>
+        <parameter type-id='type-id-1394' name='x' filepath='kernel/sched/completion.c' line='134' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='wait_for_completion_killable' mangled-name='wait_for_completion_killable' filepath='kernel/sched/completion.c' line='239' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wait_for_completion_killable'>
+        <parameter type-id='type-id-1394' name='x' filepath='kernel/sched/completion.c' line='239' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='completion_done' mangled-name='completion_done' filepath='kernel/sched/completion.c' line='313' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='completion_done'>
+        <parameter type-id='type-id-1394' name='x' filepath='kernel/sched/completion.c' line='313' column='1'/>
+        <return type-id='type-id-33'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/locking/mutex.c' language='LANG_C89'>
+      <class-decl name='io_context' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-3462'/>
+      <class-decl name='mm_struct' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-3463'/>
+      <class-decl name='nsproxy' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-3464'/>
+      <class-decl name='page' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-3465'/>
+      <class-decl name='user_namespace' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-3466'/>
+      <class-decl name='ww_mutex' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/ww_mutex.h' line='51' column='1' id='type-id-3467'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='type-id-245' visibility='default' filepath='include/linux/ww_mutex.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ctx' type-id='type-id-3468' visibility='default' filepath='include/linux/ww_mutex.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ww_acquire_ctx' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/ww_mutex.h' line='31' column='1' id='type-id-3469'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='task' type-id='type-id-431' visibility='default' filepath='include/linux/ww_mutex.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='stamp' type-id='type-id-16' visibility='default' filepath='include/linux/ww_mutex.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='acquired' type-id='type-id-5' visibility='default' filepath='include/linux/ww_mutex.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='wounded' type-id='type-id-312' visibility='default' filepath='include/linux/ww_mutex.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='is_wait_die' type-id='type-id-312' visibility='default' filepath='include/linux/ww_mutex.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='27' column='1' id='type-id-3470'>
+        <data-member access='private'>
+          <var-decl name='futex' type-id='type-id-234' visibility='default' filepath='include/linux/restart_block.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='nanosleep' type-id='type-id-3471' visibility='default' filepath='include/linux/restart_block.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='poll' type-id='type-id-1566' visibility='default' filepath='include/linux/restart_block.h' line='54' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='38' column='1' id='type-id-3471'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='clockid' type-id='type-id-1557' visibility='default' filepath='include/linux/restart_block.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='type-id-1568' visibility='default' filepath='include/linux/restart_block.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='type-id-3472' visibility='default' filepath='include/linux/restart_block.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='expires' type-id='type-id-40' visibility='default' filepath='include/linux/restart_block.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='41' column='1' id='type-id-3472'>
+        <data-member access='private'>
+          <var-decl name='rmtp' type-id='type-id-1570' visibility='default' filepath='include/linux/restart_block.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='compat_rmtp' type-id='type-id-1571' visibility='default' filepath='include/linux/restart_block.h' line='43' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='type-id-3462' size-in-bits='64' id='type-id-3473'/>
+      <pointer-type-def type-id='type-id-3463' size-in-bits='64' id='type-id-3474'/>
+      <pointer-type-def type-id='type-id-245' size-in-bits='64' id='type-id-3475'/>
+      <pointer-type-def type-id='type-id-3464' size-in-bits='64' id='type-id-3476'/>
+      <pointer-type-def type-id='type-id-3465' size-in-bits='64' id='type-id-3477'/>
+      <pointer-type-def type-id='type-id-3466' size-in-bits='64' id='type-id-3478'/>
+      <pointer-type-def type-id='type-id-3469' size-in-bits='64' id='type-id-3468'/>
+      <pointer-type-def type-id='type-id-3467' size-in-bits='64' id='type-id-3479'/>
+      <function-decl name='__mutex_init' mangled-name='__mutex_init' filepath='kernel/locking/mutex.c' line='39' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__mutex_init'>
+        <parameter type-id='type-id-3475' name='lock' filepath='kernel/locking/mutex.c' line='39' column='1'/>
+        <parameter type-id='type-id-4' name='name' filepath='kernel/locking/mutex.c' line='39' column='1'/>
+        <parameter type-id='type-id-1698' name='key' filepath='kernel/locking/mutex.c' line='39' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='mutex_lock' mangled-name='mutex_lock' filepath='kernel/locking/mutex.c' line='252' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mutex_lock'>
+        <parameter type-id='type-id-3475' name='lock' filepath='kernel/locking/mutex.c' line='252' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='mutex_unlock' mangled-name='mutex_unlock' filepath='kernel/locking/mutex.c' line='707' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mutex_unlock'>
+        <parameter type-id='type-id-3475' name='lock' filepath='kernel/locking/mutex.c' line='707' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='ww_mutex_unlock' mangled-name='ww_mutex_unlock' filepath='kernel/locking/mutex.c' line='728' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ww_mutex_unlock'>
+        <parameter type-id='type-id-3479' name='lock' filepath='kernel/locking/mutex.c' line='728' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='mutex_lock_interruptible' mangled-name='mutex_lock_interruptible' filepath='kernel/locking/mutex.c' line='1275' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mutex_lock_interruptible'>
+        <parameter type-id='type-id-3475' name='lock' filepath='kernel/locking/mutex.c' line='1275' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='mutex_trylock' mangled-name='mutex_trylock' filepath='kernel/locking/mutex.c' line='1379' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mutex_trylock'>
+        <parameter type-id='type-id-3475' name='lock' filepath='kernel/locking/mutex.c' line='1379' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='ww_mutex_lock' mangled-name='ww_mutex_lock' filepath='kernel/locking/mutex.c' line='1392' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ww_mutex_lock'>
+        <parameter type-id='type-id-3479' name='lock' filepath='kernel/locking/mutex.c' line='1392' column='1'/>
+        <parameter type-id='type-id-3468' name='ctx' filepath='kernel/locking/mutex.c' line='1392' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='ww_mutex_lock_interruptible' mangled-name='ww_mutex_lock_interruptible' filepath='kernel/locking/mutex.c' line='1407' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ww_mutex_lock_interruptible'>
+        <parameter type-id='type-id-3479' name='lock' filepath='kernel/locking/mutex.c' line='1407' column='1'/>
+        <parameter type-id='type-id-3468' name='ctx' filepath='kernel/locking/mutex.c' line='1407' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/locking/rwsem.c' language='LANG_C89'>
+      <pointer-type-def type-id='type-id-246' size-in-bits='64' id='type-id-3480'/>
+      <function-decl name='up_read' mangled-name='up_read' filepath='kernel/locking/rwsem.c' line='117' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='up_read'>
+        <parameter type-id='type-id-3480' name='sem' filepath='kernel/locking/rwsem.c' line='117' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/irq/manage.c' language='LANG_C89'>
+      <typedef-decl name='irq_handler_t' type-id='type-id-3481' filepath='include/linux/interrupt.h' line='92' column='1' id='type-id-3482'/>
+      <typedef-decl name='irqreturn_t' type-id='type-id-3483' filepath='include/linux/irqreturn.h' line='17' column='1' id='type-id-3484'/>
+      <enum-decl name='irqreturn' filepath='include/linux/irqreturn.h' line='11' column='1' id='type-id-3483'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='IRQ_NONE' value='0'/>
+        <enumerator name='IRQ_HANDLED' value='1'/>
+        <enumerator name='IRQ_WAKE_THREAD' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='type-id-3485' size-in-bits='64' id='type-id-3481'/>
+      <function-decl name='synchronize_hardirq' mangled-name='synchronize_hardirq' filepath='kernel/irq/manage.c' line='98' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='synchronize_hardirq'>
+        <parameter type-id='type-id-5' name='irq' filepath='kernel/irq/manage.c' line='98' column='1'/>
+        <return type-id='type-id-33'/>
+      </function-decl>
+      <function-decl name='synchronize_irq' mangled-name='synchronize_irq' filepath='kernel/irq/manage.c' line='126' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='synchronize_irq'>
+        <parameter type-id='type-id-5' name='irq' filepath='kernel/irq/manage.c' line='126' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='irq_set_affinity_hint' mangled-name='irq_set_affinity_hint' filepath='kernel/irq/manage.c' line='308' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_set_affinity_hint'>
+        <parameter type-id='type-id-5' name='irq' filepath='kernel/irq/manage.c' line='308' column='1'/>
+        <parameter type-id='type-id-3386' name='m' filepath='kernel/irq/manage.c' line='308' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='disable_irq' mangled-name='disable_irq' filepath='kernel/irq/manage.c' line='551' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='disable_irq'>
+        <parameter type-id='type-id-5' name='irq' filepath='kernel/irq/manage.c' line='551' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='irq_set_irq_wake' mangled-name='irq_set_irq_wake' filepath='kernel/irq/manage.c' line='666' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_set_irq_wake'>
+        <parameter type-id='type-id-5' name='irq' filepath='kernel/irq/manage.c' line='666' column='1'/>
+        <parameter type-id='type-id-5' name='on' filepath='kernel/irq/manage.c' line='666' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='free_irq' mangled-name='free_irq' filepath='kernel/irq/manage.c' line='1775' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='free_irq'>
+        <parameter type-id='type-id-5' name='irq' filepath='kernel/irq/manage.c' line='1775' column='1'/>
+        <parameter type-id='type-id-15' name='dev_id' filepath='kernel/irq/manage.c' line='1775' column='1'/>
+        <return type-id='type-id-15'/>
+      </function-decl>
+      <function-decl name='request_threaded_irq' mangled-name='request_threaded_irq' filepath='kernel/irq/manage.c' line='1842' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='request_threaded_irq'>
+        <parameter type-id='type-id-5' name='irq' filepath='kernel/irq/manage.c' line='1842' column='1'/>
+        <parameter type-id='type-id-3482' name='handler' filepath='kernel/irq/manage.c' line='1842' column='1'/>
+        <parameter type-id='type-id-3482' name='thread_fn' filepath='kernel/irq/manage.c' line='1843' column='1'/>
+        <parameter type-id='type-id-16' name='irqflags' filepath='kernel/irq/manage.c' line='1843' column='1'/>
+        <parameter type-id='type-id-4' name='devname' filepath='kernel/irq/manage.c' line='1844' column='1'/>
+        <parameter type-id='type-id-15' name='dev_id' filepath='kernel/irq/manage.c' line='1844' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-3485'>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-3484'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/irq/devres.c' language='LANG_C89'>
+      <function-decl name='devm_request_threaded_irq' mangled-name='devm_request_threaded_irq' filepath='kernel/irq/devres.c' line='51' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_request_threaded_irq'>
+        <parameter type-id='type-id-240' name='dev' filepath='kernel/irq/devres.c' line='51' column='1'/>
+        <parameter type-id='type-id-5' name='irq' filepath='kernel/irq/devres.c' line='51' column='1'/>
+        <parameter type-id='type-id-3482' name='handler' filepath='kernel/irq/devres.c' line='52' column='1'/>
+        <parameter type-id='type-id-3482' name='thread_fn' filepath='kernel/irq/devres.c' line='52' column='1'/>
+        <parameter type-id='type-id-16' name='irqflags' filepath='kernel/irq/devres.c' line='53' column='1'/>
+        <parameter type-id='type-id-4' name='devname' filepath='kernel/irq/devres.c' line='53' column='1'/>
+        <parameter type-id='type-id-15' name='dev_id' filepath='kernel/irq/devres.c' line='54' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/irq/irqdomain.c' language='LANG_C89'>
+      <function-decl name='irq_dispose_mapping' mangled-name='irq_dispose_mapping' filepath='kernel/irq/irqdomain.c' line='848' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_dispose_mapping'>
+        <parameter type-id='type-id-5' name='virq' filepath='kernel/irq/irqdomain.c' line='848' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/of/device.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='type-id-7' size-in-bits='32' id='type-id-3486'>
+        <subrange length='1' type-id='type-id-9' id='type-id-180'/>
+
+      </array-type-def>
+      <enum-decl name='iommu_cap' filepath='include/linux/iommu.h' line='99' column='1' id='type-id-3487'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='IOMMU_CAP_CACHE_COHERENCY' value='0'/>
+        <enumerator name='IOMMU_CAP_INTR_REMAP' value='1'/>
+        <enumerator name='IOMMU_CAP_NOEXEC' value='2'/>
+      </enum-decl>
+      <class-decl name='iommu_domain' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='89' column='1' id='type-id-3488'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='type-id-5' visibility='default' filepath='include/linux/iommu.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='type-id-2047' visibility='default' filepath='include/linux/iommu.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pgsize_bitmap' type-id='type-id-16' visibility='default' filepath='include/linux/iommu.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='handler' type-id='type-id-3489' visibility='default' filepath='include/linux/iommu.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='handler_token' type-id='type-id-15' visibility='default' filepath='include/linux/iommu.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='geometry' type-id='type-id-3490' visibility='default' filepath='include/linux/iommu.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='iova_cookie' type-id='type-id-15' visibility='default' filepath='include/linux/iommu.h' line='96' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='iommu_fault_handler_t' type-id='type-id-3491' filepath='include/linux/iommu.h' line='56' column='1' id='type-id-3489'/>
+      <class-decl name='iommu_domain_geometry' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='59' column='1' id='type-id-3490'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='aperture_start' type-id='type-id-2083' visibility='default' filepath='include/linux/iommu.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='aperture_end' type-id='type-id-2083' visibility='default' filepath='include/linux/iommu.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='force_aperture' type-id='type-id-33' visibility='default' filepath='include/linux/iommu.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='iommu_attr' filepath='include/linux/iommu.h' line='119' column='1' id='type-id-3492'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='DOMAIN_ATTR_GEOMETRY' value='0'/>
+        <enumerator name='DOMAIN_ATTR_PAGING' value='1'/>
+        <enumerator name='DOMAIN_ATTR_WINDOWS' value='2'/>
+        <enumerator name='DOMAIN_ATTR_FSL_PAMU_STASH' value='3'/>
+        <enumerator name='DOMAIN_ATTR_FSL_PAMU_ENABLE' value='4'/>
+        <enumerator name='DOMAIN_ATTR_FSL_PAMUV1' value='5'/>
+        <enumerator name='DOMAIN_ATTR_NESTING' value='6'/>
+        <enumerator name='DOMAIN_ATTR_MAX' value='7'/>
+      </enum-decl>
+      <class-decl name='iommu_resv_region' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='150' column='1' id='type-id-3493'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/iommu.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='start' type-id='type-id-99' visibility='default' filepath='include/linux/iommu.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='length' type-id='type-id-84' visibility='default' filepath='include/linux/iommu.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='prot' type-id='type-id-17' visibility='default' filepath='include/linux/iommu.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='type' type-id='type-id-3494' visibility='default' filepath='include/linux/iommu.h' line='155' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='iommu_resv_type' filepath='include/linux/iommu.h' line='131' column='1' id='type-id-3494'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='IOMMU_RESV_DIRECT' value='0'/>
+        <enumerator name='IOMMU_RESV_RESERVED' value='1'/>
+        <enumerator name='IOMMU_RESV_MSI' value='2'/>
+        <enumerator name='IOMMU_RESV_SW_MSI' value='3'/>
+      </enum-decl>
+      <pointer-type-def type-id='type-id-3495' size-in-bits='64' id='type-id-3496'/>
+      <pointer-type-def type-id='type-id-3497' size-in-bits='64' id='type-id-3498'/>
+      <pointer-type-def type-id='type-id-3499' size-in-bits='64' id='type-id-3491'/>
+      <pointer-type-def type-id='type-id-3500' size-in-bits='64' id='type-id-3501'/>
+      <pointer-type-def type-id='type-id-3502' size-in-bits='64' id='type-id-3503'/>
+      <pointer-type-def type-id='type-id-3504' size-in-bits='64' id='type-id-3505'/>
+      <pointer-type-def type-id='type-id-3506' size-in-bits='64' id='type-id-3507'/>
+      <pointer-type-def type-id='type-id-3488' size-in-bits='64' id='type-id-3508'/>
+      <pointer-type-def type-id='type-id-3509' size-in-bits='64' id='type-id-3510'/>
+      <pointer-type-def type-id='type-id-3511' size-in-bits='64' id='type-id-3512'/>
+      <pointer-type-def type-id='type-id-3493' size-in-bits='64' id='type-id-3513'/>
+      <pointer-type-def type-id='type-id-3514' size-in-bits='64' id='type-id-3515'/>
+      <pointer-type-def type-id='type-id-3516' size-in-bits='64' id='type-id-3517'/>
+      <pointer-type-def type-id='type-id-3518' size-in-bits='64' id='type-id-3519'/>
+      <pointer-type-def type-id='type-id-3520' size-in-bits='64' id='type-id-3521'/>
+      <pointer-type-def type-id='type-id-3522' size-in-bits='64' id='type-id-3523'/>
+      <pointer-type-def type-id='type-id-3524' size-in-bits='64' id='type-id-3525'/>
+      <pointer-type-def type-id='type-id-3526' size-in-bits='64' id='type-id-3527'/>
+      <pointer-type-def type-id='type-id-3528' size-in-bits='64' id='type-id-3529'/>
+      <pointer-type-def type-id='type-id-3530' size-in-bits='64' id='type-id-3531'/>
+      <pointer-type-def type-id='type-id-3532' size-in-bits='64' id='type-id-3533'/>
+      <pointer-type-def type-id='type-id-3534' size-in-bits='64' id='type-id-3535'/>
+      <pointer-type-def type-id='type-id-3536' size-in-bits='64' id='type-id-3537'/>
+      <function-decl name='of_match_device' mangled-name='of_match_device' filepath='drivers/of/device.c' line='26' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_match_device'>
+        <parameter type-id='type-id-2051' name='matches' filepath='drivers/of/device.c' line='26' column='1'/>
+        <parameter type-id='type-id-2651' name='dev' filepath='drivers/of/device.c' line='27' column='1'/>
+        <return type-id='type-id-2051'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-3495'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-3515'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3497'>
+        <parameter type-id='type-id-3508'/>
+        <parameter type-id='type-id-240'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3499'>
+        <parameter type-id='type-id-3508'/>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-16'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3500'>
+        <parameter type-id='type-id-3508'/>
+        <parameter type-id='type-id-3492'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3502'>
+        <parameter type-id='type-id-3508'/>
+        <parameter type-id='type-id-7'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3504'>
+        <parameter type-id='type-id-3508'/>
+        <parameter type-id='type-id-7'/>
+        <parameter type-id='type-id-99'/>
+        <parameter type-id='type-id-40'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3506'>
+        <parameter type-id='type-id-3508'/>
+        <parameter type-id='type-id-16'/>
+        <parameter type-id='type-id-99'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3509'>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-3508'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3511'>
+        <parameter type-id='type-id-240'/>
+        <return type-id='type-id-2029'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3516'>
+        <parameter type-id='type-id-3487'/>
+        <return type-id='type-id-33'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3518'>
+        <parameter type-id='type-id-3508'/>
+        <parameter type-id='type-id-240'/>
+        <return type-id='type-id-33'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3520'>
+        <parameter type-id='type-id-3508'/>
+        <parameter type-id='type-id-2083'/>
+        <return type-id='type-id-99'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3522'>
+        <parameter type-id='type-id-3508'/>
+        <parameter type-id='type-id-16'/>
+        <parameter type-id='type-id-84'/>
+        <return type-id='type-id-84'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3524'>
+        <parameter type-id='type-id-3508'/>
+        <return type-id='type-id-7'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3526'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-3508'/>
+        <parameter type-id='type-id-3513'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3528'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-877'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3530'>
+        <parameter type-id='type-id-3508'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3532'>
+        <parameter type-id='type-id-3508'/>
+        <parameter type-id='type-id-240'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3534'>
+        <parameter type-id='type-id-3508'/>
+        <parameter type-id='type-id-7'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3536'>
+        <parameter type-id='type-id-3508'/>
+        <parameter type-id='type-id-16'/>
+        <parameter type-id='type-id-84'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/dma/coherent.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='type-id-895' size-in-bits='72' id='type-id-3538'>
+        <subrange length='9' type-id='type-id-9' id='type-id-953'/>
+
+      </array-type-def>
+      <typedef-decl name='kernel_ulong_t' type-id='type-id-16' filepath='include/linux/mod_devicetable.h' line='14' column='1' id='type-id-3539'/>
+      <class-decl name='device_node' size-in-bits='1408' is-struct='yes' visibility='default' filepath='include/linux/of.h' line='51' column='1' id='type-id-3540'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/of.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='type' type-id='type-id-4' visibility='default' filepath='include/linux/of.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='phandle' type-id='type-id-3541' visibility='default' filepath='include/linux/of.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='full_name' type-id='type-id-4' visibility='default' filepath='include/linux/of.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fwnode' type-id='type-id-2162' visibility='default' filepath='include/linux/of.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='properties' type-id='type-id-3542' visibility='default' filepath='include/linux/of.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='deadprops' type-id='type-id-3542' visibility='default' filepath='include/linux/of.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='parent' type-id='type-id-3543' visibility='default' filepath='include/linux/of.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='child' type-id='type-id-3543' visibility='default' filepath='include/linux/of.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='sibling' type-id='type-id-3543' visibility='default' filepath='include/linux/of.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='kobj' type-id='type-id-267' visibility='default' filepath='include/linux/of.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='_flags' type-id='type-id-16' visibility='default' filepath='include/linux/of.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='data' type-id='type-id-15' visibility='default' filepath='include/linux/of.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='phandle' type-id='type-id-7' filepath='include/linux/of.h' line='28' column='1' id='type-id-3541'/>
+      <class-decl name='property' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/of.h' line='31' column='1' id='type-id-3544'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-2' visibility='default' filepath='include/linux/of.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='length' type-id='type-id-17' visibility='default' filepath='include/linux/of.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='value' type-id='type-id-15' visibility='default' filepath='include/linux/of.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='next' type-id='type-id-3542' visibility='default' filepath='include/linux/of.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='attr' type-id='type-id-2039' visibility='default' filepath='include/linux/of.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-3540' size-in-bits='64' id='type-id-3543'/>
+      <pointer-type-def type-id='type-id-3544' size-in-bits='64' id='type-id-3542'/>
+      <function-decl name='dma_alloc_from_dev_coherent' mangled-name='dma_alloc_from_dev_coherent' filepath='kernel/dma/coherent.c' line='207' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_alloc_from_dev_coherent'>
+        <parameter type-id='type-id-240' name='dev' filepath='kernel/dma/coherent.c' line='207' column='1'/>
+        <parameter type-id='type-id-86' name='size' filepath='kernel/dma/coherent.c' line='207' column='1'/>
+        <parameter type-id='type-id-2741' name='dma_handle' filepath='kernel/dma/coherent.c' line='208' column='1'/>
+        <parameter type-id='type-id-528' name='ret' filepath='kernel/dma/coherent.c' line='208' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='dma_release_from_dev_coherent' mangled-name='dma_release_from_dev_coherent' filepath='kernel/dma/coherent.c' line='265' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_release_from_dev_coherent'>
+        <parameter type-id='type-id-240' name='dev' filepath='kernel/dma/coherent.c' line='265' column='1'/>
+        <parameter type-id='type-id-17' name='order' filepath='kernel/dma/coherent.c' line='265' column='1'/>
+        <parameter type-id='type-id-15' name='vaddr' filepath='kernel/dma/coherent.c' line='265' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/dma/swiotlb.c' language='LANG_C89'>
+      <function-decl name='swiotlb_max_segment' mangled-name='swiotlb_max_segment' filepath='kernel/dma/swiotlb.c' line='137' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='swiotlb_max_segment'>
+        <return type-id='type-id-5'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/freezer.c' language='LANG_C89'>
+      <function-decl name='freezing_slow_path' mangled-name='freezing_slow_path' filepath='kernel/freezer.c' line='42' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='freezing_slow_path'>
+        <parameter type-id='type-id-431' name='p' filepath='kernel/freezer.c' line='42' column='1'/>
+        <return type-id='type-id-33'/>
+      </function-decl>
+      <function-decl name='__refrigerator' mangled-name='__refrigerator' filepath='kernel/freezer.c' line='61' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__refrigerator'>
+        <parameter type-id='type-id-33' name='check_kthr_stop' filepath='kernel/freezer.c' line='61' column='1'/>
+        <return type-id='type-id-33'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/proc/generic.c' language='LANG_C89'>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='fs/proc/internal.h' line='48' column='1' id='type-id-3545'>
+        <data-member access='private'>
+          <var-decl name='seq_ops' type-id='type-id-1448' visibility='default' filepath='fs/proc/internal.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='single_show' type-id='type-id-311' visibility='default' filepath='fs/proc/internal.h' line='50' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='proc_write_t' type-id='type-id-3546' filepath='include/linux/proc_fs.h' line='17' column='1' id='type-id-3547'/>
+      <typedef-decl name='nlink_t' type-id='type-id-7' filepath='include/linux/types.h' line='20' column='1' id='type-id-3548'/>
+      <pointer-type-def type-id='type-id-3549' size-in-bits='64' id='type-id-3546'/>
+      <function-decl name='proc_mkdir_data' mangled-name='proc_mkdir_data' filepath='fs/proc/generic.c' line='461' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='proc_mkdir_data'>
+        <parameter type-id='type-id-4' name='name' filepath='fs/proc/generic.c' line='461' column='1'/>
+        <parameter type-id='type-id-329' name='mode' filepath='fs/proc/generic.c' line='461' column='1'/>
+        <parameter type-id='type-id-262' name='parent' filepath='fs/proc/generic.c' line='462' column='1'/>
+        <parameter type-id='type-id-15' name='data' filepath='fs/proc/generic.c' line='462' column='1'/>
+        <return type-id='type-id-262'/>
+      </function-decl>
+      <function-decl name='remove_proc_entry' mangled-name='remove_proc_entry' filepath='fs/proc/generic.c' line='654' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='remove_proc_entry'>
+        <parameter type-id='type-id-4' name='name' filepath='fs/proc/generic.c' line='654' column='1'/>
+        <parameter type-id='type-id-262' name='parent' filepath='fs/proc/generic.c' line='654' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='PDE_DATA' mangled-name='PDE_DATA' filepath='fs/proc/generic.c' line='749' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PDE_DATA'>
+        <parameter type-id='type-id-2672' name='inode' filepath='fs/proc/generic.c' line='749' column='1'/>
+        <return type-id='type-id-15'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-3549'>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-2'/>
+        <parameter type-id='type-id-84'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/time/timer.c' language='LANG_C89'>
+      <function-decl name='round_jiffies' mangled-name='round_jiffies' filepath='kernel/time/timer.c' line='380' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='round_jiffies'>
+        <parameter type-id='type-id-16' name='j' filepath='kernel/time/timer.c' line='380' column='1'/>
+        <return type-id='type-id-16'/>
+      </function-decl>
+      <function-decl name='init_timer_key' mangled-name='init_timer_key' filepath='kernel/time/timer.c' line='802' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='init_timer_key'>
+        <parameter type-id='type-id-3065' name='timer' filepath='kernel/time/timer.c' line='802' column='1'/>
+        <parameter type-id='type-id-2007' name='func' filepath='kernel/time/timer.c' line='803' column='1'/>
+        <parameter type-id='type-id-5' name='flags' filepath='kernel/time/timer.c' line='803' column='1'/>
+        <parameter type-id='type-id-4' name='name' filepath='kernel/time/timer.c' line='804' column='1'/>
+        <parameter type-id='type-id-1698' name='key' filepath='kernel/time/timer.c' line='804' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='mod_timer' mangled-name='mod_timer' filepath='kernel/time/timer.c' line='1100' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mod_timer'>
+        <parameter type-id='type-id-3065' name='timer' filepath='kernel/time/timer.c' line='1100' column='1'/>
+        <parameter type-id='type-id-16' name='expires' filepath='kernel/time/timer.c' line='1100' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='add_timer' mangled-name='add_timer' filepath='kernel/time/timer.c' line='1135' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='add_timer'>
+        <parameter type-id='type-id-3065' name='timer' filepath='kernel/time/timer.c' line='1135' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='del_timer' mangled-name='del_timer' filepath='kernel/time/timer.c' line='1192' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='del_timer'>
+        <parameter type-id='type-id-3065' name='timer' filepath='kernel/time/timer.c' line='1192' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='del_timer_sync' mangled-name='del_timer_sync' filepath='kernel/time/timer.c' line='1273' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='del_timer_sync'>
+        <parameter type-id='type-id-3065' name='timer' filepath='kernel/time/timer.c' line='1273' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='schedule_timeout' mangled-name='schedule_timeout' filepath='kernel/time/timer.c' line='1767' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='schedule_timeout'>
+        <parameter type-id='type-id-192' name='timeout' filepath='kernel/time/timer.c' line='1767' column='1'/>
+        <return type-id='type-id-192'/>
+      </function-decl>
+      <function-decl name='msleep' mangled-name='msleep' filepath='kernel/time/timer.c' line='1953' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='msleep'>
+        <parameter type-id='type-id-5' name='msecs' filepath='kernel/time/timer.c' line='1953' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='usleep_range' mangled-name='usleep_range' filepath='kernel/time/timer.c' line='1989' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usleep_range'>
+        <parameter type-id='type-id-16' name='min' filepath='kernel/time/timer.c' line='1989' column='1'/>
+        <parameter type-id='type-id-16' name='max' filepath='kernel/time/timer.c' line='1989' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/time/timekeeping.c' language='LANG_C89'>
+      <enum-decl name='tk_offsets' filepath='include/linux/timekeeping.h' line='60' column='1' id='type-id-3550'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='TK_OFFS_REAL' value='0'/>
+        <enumerator name='TK_OFFS_BOOT' value='1'/>
+        <enumerator name='TK_OFFS_TAI' value='2'/>
+        <enumerator name='TK_OFFS_MAX' value='3'/>
+      </enum-decl>
+      <function-decl name='ktime_get' mangled-name='ktime_get' filepath='kernel/time/timekeeping.c' line='746' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ktime_get'>
+        <return type-id='type-id-682'/>
+      </function-decl>
+      <function-decl name='ktime_get_with_offset' mangled-name='ktime_get_with_offset' filepath='kernel/time/timekeeping.c' line='789' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ktime_get_with_offset'>
+        <parameter type-id='type-id-3550' name='offs' filepath='kernel/time/timekeeping.c' line='789' column='1'/>
+        <return type-id='type-id-682'/>
+      </function-decl>
+      <function-decl name='ktime_get_ts64' mangled-name='ktime_get_ts64' filepath='kernel/time/timekeeping.c' line='879' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ktime_get_ts64'>
+        <parameter type-id='type-id-3066' name='ts' filepath='kernel/time/timekeeping.c' line='879' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='ktime_get_real_seconds' mangled-name='ktime_get_real_seconds' filepath='kernel/time/timekeeping.c' line='931' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ktime_get_real_seconds'>
+        <return type-id='type-id-1341'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/bus.c' language='LANG_C89'>
+      <function-decl name='bus_register' mangled-name='bus_register' filepath='drivers/base/bus.c' line='851' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bus_register'>
+        <parameter type-id='type-id-2012' name='bus' filepath='drivers/base/bus.c' line='851' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='bus_unregister' mangled-name='bus_unregister' filepath='drivers/base/bus.c' line='936' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bus_unregister'>
+        <parameter type-id='type-id-2012' name='bus' filepath='drivers/base/bus.c' line='936' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/platform.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='type-id-1' size-in-bits='160' id='type-id-3551'>
+        <subrange length='20' type-id='type-id-9' id='type-id-1184'/>
+
+      </array-type-def>
+      <class-decl name='mfd_cell' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-3552'/>
+      <class-decl name='platform_device' size-in-bits='6656' is-struct='yes' visibility='default' filepath='include/linux/platform_device.h' line='23' column='1' id='type-id-3553'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/platform_device.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id' type-id='type-id-17' visibility='default' filepath='include/linux/platform_device.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='id_auto' type-id='type-id-33' visibility='default' filepath='include/linux/platform_device.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='type-id-388' visibility='default' filepath='include/linux/platform_device.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='num_resources' type-id='type-id-7' visibility='default' filepath='include/linux/platform_device.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='resource' type-id='type-id-2156' visibility='default' filepath='include/linux/platform_device.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='id_entry' type-id='type-id-3554' visibility='default' filepath='include/linux/platform_device.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='driver_override' type-id='type-id-2' visibility='default' filepath='include/linux/platform_device.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='mfd_cell' type-id='type-id-3555' visibility='default' filepath='include/linux/platform_device.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='archdata' type-id='type-id-3556' visibility='default' filepath='include/linux/platform_device.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='platform_device_id' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='546' column='1' id='type-id-3557'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-3551' visibility='default' filepath='include/linux/mod_devicetable.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='driver_data' type-id='type-id-3539' visibility='default' filepath='include/linux/mod_devicetable.h' line='548' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pdev_archdata' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/device.h' line='29' column='1' id='type-id-3556'/>
+      <class-decl name='platform_device_info' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/platform_device.h' line='62' column='1' id='type-id-3558'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='parent' type-id='type-id-240' visibility='default' filepath='include/linux/platform_device.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fwnode' type-id='type-id-2025' visibility='default' filepath='include/linux/platform_device.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/platform_device.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='id' type-id='type-id-17' visibility='default' filepath='include/linux/platform_device.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='res' type-id='type-id-3559' visibility='default' filepath='include/linux/platform_device.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='num_res' type-id='type-id-5' visibility='default' filepath='include/linux/platform_device.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='data' type-id='type-id-15' visibility='default' filepath='include/linux/platform_device.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='size_data' type-id='type-id-84' visibility='default' filepath='include/linux/platform_device.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dma_mask' type-id='type-id-40' visibility='default' filepath='include/linux/platform_device.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='properties' type-id='type-id-3560' visibility='default' filepath='include/linux/platform_device.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='property_entry' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/property.h' line='185' column='1' id='type-id-3561'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/property.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='length' type-id='type-id-84' visibility='default' filepath='include/linux/property.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='is_array' type-id='type-id-33' visibility='default' filepath='include/linux/property.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='type' type-id='type-id-3562' visibility='default' filepath='include/linux/property.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='type-id-3563' visibility='default' filepath='include/linux/property.h' line='190' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='dev_prop_type' filepath='include/linux/property.h' line='21' column='1' id='type-id-3562'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='DEV_PROP_U8' value='0'/>
+        <enumerator name='DEV_PROP_U16' value='1'/>
+        <enumerator name='DEV_PROP_U32' value='2'/>
+        <enumerator name='DEV_PROP_U64' value='3'/>
+        <enumerator name='DEV_PROP_STRING' value='4'/>
+        <enumerator name='DEV_PROP_MAX' value='5'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/property.h' line='190' column='1' id='type-id-3563'>
+        <data-member access='private'>
+          <var-decl name='pointer' type-id='type-id-3564' visibility='default' filepath='include/linux/property.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='value' type-id='type-id-3565' visibility='default' filepath='include/linux/property.h' line='204' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/property.h' line='191' column='1' id='type-id-3564'>
+        <data-member access='private'>
+          <var-decl name='u8_data' type-id='type-id-658' visibility='default' filepath='include/linux/property.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='u16_data' type-id='type-id-3566' visibility='default' filepath='include/linux/property.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='u32_data' type-id='type-id-2727' visibility='default' filepath='include/linux/property.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='u64_data' type-id='type-id-3567' visibility='default' filepath='include/linux/property.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='str' type-id='type-id-92' visibility='default' filepath='include/linux/property.h' line='196' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/property.h' line='198' column='1' id='type-id-3565'>
+        <data-member access='private'>
+          <var-decl name='u8_data' type-id='type-id-214' visibility='default' filepath='include/linux/property.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='u16_data' type-id='type-id-688' visibility='default' filepath='include/linux/property.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='u32_data' type-id='type-id-7' visibility='default' filepath='include/linux/property.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='u64_data' type-id='type-id-40' visibility='default' filepath='include/linux/property.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='str' type-id='type-id-4' visibility='default' filepath='include/linux/property.h' line='203' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='platform_driver' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/linux/platform_device.h' line='180' column='1' id='type-id-3568'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='probe' type-id='type-id-3569' visibility='default' filepath='include/linux/platform_device.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='remove' type-id='type-id-3569' visibility='default' filepath='include/linux/platform_device.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='shutdown' type-id='type-id-3570' visibility='default' filepath='include/linux/platform_device.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='suspend' type-id='type-id-3571' visibility='default' filepath='include/linux/platform_device.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='resume' type-id='type-id-3569' visibility='default' filepath='include/linux/platform_device.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='driver' type-id='type-id-2049' visibility='default' filepath='include/linux/platform_device.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='id_table' type-id='type-id-3554' visibility='default' filepath='include/linux/platform_device.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='prevent_deferred_probe' type-id='type-id-33' visibility='default' filepath='include/linux/platform_device.h' line='188' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='type-id-3557' const='yes' id='type-id-3572'/>
+      <pointer-type-def type-id='type-id-3572' size-in-bits='64' id='type-id-3554'/>
+      <qualified-type-def type-id='type-id-3558' const='yes' id='type-id-3573'/>
+      <pointer-type-def type-id='type-id-3573' size-in-bits='64' id='type-id-3574'/>
+      <qualified-type-def type-id='type-id-2146' const='yes' id='type-id-3575'/>
+      <pointer-type-def type-id='type-id-3575' size-in-bits='64' id='type-id-3559'/>
+      <pointer-type-def type-id='type-id-2442' size-in-bits='64' id='type-id-3566'/>
+      <qualified-type-def type-id='type-id-40' const='yes' id='type-id-3576'/>
+      <pointer-type-def type-id='type-id-3576' size-in-bits='64' id='type-id-3567'/>
+      <pointer-type-def type-id='type-id-3577' size-in-bits='64' id='type-id-3569'/>
+      <pointer-type-def type-id='type-id-3578' size-in-bits='64' id='type-id-3571'/>
+      <pointer-type-def type-id='type-id-3552' size-in-bits='64' id='type-id-3555'/>
+      <pointer-type-def type-id='type-id-3553' size-in-bits='64' id='type-id-3579'/>
+      <pointer-type-def type-id='type-id-3568' size-in-bits='64' id='type-id-3580'/>
+      <pointer-type-def type-id='type-id-3561' size-in-bits='64' id='type-id-3560'/>
+      <pointer-type-def type-id='type-id-3581' size-in-bits='64' id='type-id-3570'/>
+      <function-decl name='platform_get_resource' mangled-name='platform_get_resource' filepath='drivers/base/platform.c' line='67' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_get_resource'>
+        <parameter type-id='type-id-3579' name='dev' filepath='drivers/base/platform.c' line='67' column='1'/>
+        <parameter type-id='type-id-5' name='type' filepath='drivers/base/platform.c' line='68' column='1'/>
+        <parameter type-id='type-id-5' name='num' filepath='drivers/base/platform.c' line='68' column='1'/>
+        <return type-id='type-id-2156'/>
+      </function-decl>
+      <function-decl name='platform_get_irq' mangled-name='platform_get_irq' filepath='drivers/base/platform.c' line='87' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_get_irq'>
+        <parameter type-id='type-id-3579' name='dev' filepath='drivers/base/platform.c' line='87' column='1'/>
+        <parameter type-id='type-id-5' name='num' filepath='drivers/base/platform.c' line='87' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='platform_device_unregister' mangled-name='platform_device_unregister' filepath='drivers/base/platform.c' line='489' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_device_unregister'>
+        <parameter type-id='type-id-3579' name='pdev' filepath='drivers/base/platform.c' line='489' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='platform_device_put' mangled-name='platform_device_put' filepath='drivers/base/platform.c' line='236' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_device_put'>
+        <parameter type-id='type-id-3579' name='pdev' filepath='drivers/base/platform.c' line='236' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='platform_device_alloc' mangled-name='platform_device_alloc' filepath='drivers/base/platform.c' line='264' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_device_alloc'>
+        <parameter type-id='type-id-4' name='name' filepath='drivers/base/platform.c' line='264' column='1'/>
+        <parameter type-id='type-id-17' name='id' filepath='drivers/base/platform.c' line='264' column='1'/>
+        <return type-id='type-id-3579'/>
+      </function-decl>
+      <function-decl name='platform_device_add_data' mangled-name='platform_device_add_data' filepath='drivers/base/platform.c' line='320' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_device_add_data'>
+        <parameter type-id='type-id-3579' name='pdev' filepath='drivers/base/platform.c' line='320' column='1'/>
+        <parameter type-id='type-id-15' name='data' filepath='drivers/base/platform.c' line='320' column='1'/>
+        <parameter type-id='type-id-84' name='size' filepath='drivers/base/platform.c' line='321' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='platform_device_add' mangled-name='platform_device_add' filepath='drivers/base/platform.c' line='360' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_device_add'>
+        <parameter type-id='type-id-3579' name='pdev' filepath='drivers/base/platform.c' line='360' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='platform_device_del' mangled-name='platform_device_del' filepath='drivers/base/platform.c' line='447' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_device_del'>
+        <parameter type-id='type-id-3579' name='pdev' filepath='drivers/base/platform.c' line='447' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='platform_device_register_full' mangled-name='platform_device_register_full' filepath='drivers/base/platform.c' line='504' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_device_register_full'>
+        <parameter type-id='type-id-3574' name='pdevinfo' filepath='drivers/base/platform.c' line='505' column='1'/>
+        <return type-id='type-id-3579'/>
+      </function-decl>
+      <function-decl name='__platform_driver_register' mangled-name='__platform_driver_register' filepath='drivers/base/platform.c' line='628' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__platform_driver_register'>
+        <parameter type-id='type-id-3580' name='drv' filepath='drivers/base/platform.c' line='628' column='1'/>
+        <parameter type-id='type-id-260' name='owner' filepath='drivers/base/platform.c' line='629' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='platform_driver_unregister' mangled-name='platform_driver_unregister' filepath='drivers/base/platform.c' line='645' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_driver_unregister'>
+        <parameter type-id='type-id-3580' name='drv' filepath='drivers/base/platform.c' line='645' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-3577'>
+        <parameter type-id='type-id-3579' name='pdev'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3578'>
+        <parameter type-id='type-id-3579'/>
+        <parameter type-id='type-id-2055'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3581'>
+        <parameter type-id='type-id-3579' name='pdev'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/module.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='type-id-2039' size-in-bits='infinite' id='type-id-3582'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-3583' size-in-bits='infinite' id='type-id-3584'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <class-decl name='module_sect_attr' size-in-bits='576' is-struct='yes' visibility='default' filepath='kernel/module.c' line='1453' column='1' id='type-id-3583'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mattr' type-id='type-id-2431' visibility='default' filepath='kernel/module.c' line='1454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='name' type-id='type-id-2' visibility='default' filepath='kernel/module.c' line='1455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='address' type-id='type-id-16' visibility='default' filepath='kernel/module.c' line='1456' column='1'/>
+        </data-member>
+      </class-decl>
+      <function-decl name='module_put' mangled-name='module_put' filepath='kernel/module.c' line='1129' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='module_put'>
+        <parameter type-id='type-id-260' name='module' filepath='kernel/module.c' line='1129' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='__module_get' mangled-name='__module_get' filepath='kernel/module.c' line='1099' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__module_get'>
+        <parameter type-id='type-id-260' name='module' filepath='kernel/module.c' line='1099' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='try_module_get' mangled-name='try_module_get' filepath='kernel/module.c' line='1110' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='try_module_get'>
+        <parameter type-id='type-id-260' name='module' filepath='kernel/module.c' line='1110' column='1'/>
+        <return type-id='type-id-33'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/cfi.c' language='LANG_C89'>
+      <function-decl name='__cfi_slowpath' mangled-name='__cfi_slowpath' filepath='kernel/cfi.c' line='285' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__cfi_slowpath'>
+        <parameter type-id='type-id-2439' name='id' filepath='kernel/cfi.c' line='285' column='1'/>
+        <parameter type-id='type-id-15' name='ptr' filepath='kernel/cfi.c' line='285' column='1'/>
+        <parameter type-id='type-id-15' name='diag' filepath='kernel/cfi.c' line='285' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/trace/trace_output.c' language='LANG_C89'>
+      <class-decl name='trace_print_flags' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/tracepoint-defs.h' line='14' column='1' id='type-id-3585'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mask' type-id='type-id-16' visibility='default' filepath='include/linux/tracepoint-defs.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/tracepoint-defs.h' line='16' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='type-id-3585' const='yes' id='type-id-3586'/>
+      <pointer-type-def type-id='type-id-3586' size-in-bits='64' id='type-id-3587'/>
+      <function-decl name='trace_print_symbols_seq' mangled-name='trace_print_symbols_seq' filepath='kernel/trace/trace_output.c' line='103' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_print_symbols_seq'>
+        <parameter type-id='type-id-68' name='p' filepath='kernel/trace/trace_output.c' line='103' column='1'/>
+        <parameter type-id='type-id-16' name='val' filepath='kernel/trace/trace_output.c' line='103' column='1'/>
+        <parameter type-id='type-id-3587' name='symbol_array' filepath='kernel/trace/trace_output.c' line='104' column='1'/>
+        <return type-id='type-id-4'/>
+      </function-decl>
+      <function-decl name='trace_raw_output_prep' mangled-name='trace_raw_output_prep' filepath='kernel/trace/trace_output.c' line='277' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_raw_output_prep'>
+        <parameter type-id='type-id-82' name='iter' filepath='kernel/trace/trace_output.c' line='277' column='1'/>
+        <parameter type-id='type-id-831' name='trace_event' filepath='kernel/trace/trace_output.c' line='278' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/open.c' language='LANG_C89'>
+      <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fsnotify_backend.h' line='283' column='1' id='type-id-3588'>
+        <data-member access='private'>
+          <var-decl name='obj' type-id='type-id-3589' visibility='default' filepath='include/linux/fsnotify_backend.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='destroy_next' type-id='type-id-1308' visibility='default' filepath='include/linux/fsnotify_backend.h' line='287' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='fsnotify_connp_t' type-id='type-id-1308' filepath='include/linux/fsnotify_backend.h' line='272' column='1' id='type-id-3590'/>
+      <pointer-type-def type-id='type-id-3590' size-in-bits='64' id='type-id-3589'/>
+      <function-decl name='nonseekable_open' mangled-name='nonseekable_open' filepath='fs/open.c' line='1242' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nonseekable_open'>
+        <parameter type-id='type-id-1129' name='inode' filepath='fs/open.c' line='1242' column='1'/>
+        <parameter type-id='type-id-83' name='filp' filepath='fs/open.c' line='1242' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/trace/trace_seq.c' language='LANG_C89'>
+      <function-decl name='trace_seq_printf' mangled-name='trace_seq_printf' filepath='kernel/trace/trace_seq.c' line='84' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_seq_printf'>
+        <parameter type-id='type-id-68' name='s' filepath='kernel/trace/trace_seq.c' line='84' column='1'/>
+        <parameter type-id='type-id-4' name='fmt' filepath='kernel/trace/trace_seq.c' line='84' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/trace/trace_events.c' language='LANG_C89'>
+      <function-decl name='trace_define_field' mangled-name='trace_define_field' filepath='kernel/trace/trace_events.c' line='139' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_define_field'>
+        <parameter type-id='type-id-21' name='call' filepath='kernel/trace/trace_events.c' line='139' column='1'/>
+        <parameter type-id='type-id-4' name='type' filepath='kernel/trace/trace_events.c' line='139' column='1'/>
+        <parameter type-id='type-id-4' name='name' filepath='kernel/trace/trace_events.c' line='140' column='1'/>
+        <parameter type-id='type-id-17' name='offset' filepath='kernel/trace/trace_events.c' line='140' column='1'/>
+        <parameter type-id='type-id-17' name='size' filepath='kernel/trace/trace_events.c' line='140' column='1'/>
+        <parameter type-id='type-id-17' name='is_signed' filepath='kernel/trace/trace_events.c' line='140' column='1'/>
+        <parameter type-id='type-id-17' name='filter_type' filepath='kernel/trace/trace_events.c' line='141' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='trace_event_raw_init' mangled-name='trace_event_raw_init' filepath='kernel/trace/trace_events.c' line='225' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_event_raw_init'>
+        <parameter type-id='type-id-21' name='call' filepath='kernel/trace/trace_events.c' line='225' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='trace_event_ignore_this_pid' mangled-name='trace_event_ignore_this_pid' filepath='kernel/trace/trace_events.c' line='237' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_event_ignore_this_pid'>
+        <parameter type-id='type-id-14' name='trace_file' filepath='kernel/trace/trace_events.c' line='237' column='1'/>
+        <return type-id='type-id-33'/>
+      </function-decl>
+      <function-decl name='trace_event_buffer_reserve' mangled-name='trace_event_buffer_reserve' filepath='kernel/trace/trace_events.c' line='253' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_event_buffer_reserve'>
+        <parameter type-id='type-id-66' name='fbuffer' filepath='kernel/trace/trace_events.c' line='253' column='1'/>
+        <parameter type-id='type-id-14' name='trace_file' filepath='kernel/trace/trace_events.c' line='254' column='1'/>
+        <parameter type-id='type-id-16' name='len' filepath='kernel/trace/trace_events.c' line='255' column='1'/>
+        <return type-id='type-id-15'/>
+      </function-decl>
+      <function-decl name='trace_event_reg' mangled-name='trace_event_reg' filepath='kernel/trace/trace_events.c' line='287' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_event_reg'>
+        <parameter type-id='type-id-21' name='call' filepath='kernel/trace/trace_events.c' line='287' column='1'/>
+        <parameter type-id='type-id-753' name='type' filepath='kernel/trace/trace_events.c' line='288' column='1'/>
+        <parameter type-id='type-id-15' name='data' filepath='kernel/trace/trace_events.c' line='288' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/trace/trace_event_perf.c' language='LANG_C89'>
+      <pointer-type-def type-id='type-id-736' size-in-bits='64' id='type-id-3591'/>
+      <function-decl name='perf_trace_buf_alloc' mangled-name='perf_trace_buf_alloc' filepath='kernel/trace/trace_event_perf.c' line='394' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='perf_trace_buf_alloc'>
+        <parameter type-id='type-id-17' name='size' filepath='kernel/trace/trace_event_perf.c' line='394' column='1'/>
+        <parameter type-id='type-id-3591' name='regs' filepath='kernel/trace/trace_event_perf.c' line='394' column='1'/>
+        <parameter type-id='type-id-666' name='rctxp' filepath='kernel/trace/trace_event_perf.c' line='394' column='1'/>
+        <return type-id='type-id-15'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/trace/trace_events_trigger.c' language='LANG_C89'>
+      <enum-decl name='event_trigger_type' filepath='include/linux/trace_events.h' line='421' column='1' id='type-id-3592'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='ETT_NONE' value='0'/>
+        <enumerator name='ETT_TRACE_ONOFF' value='1'/>
+        <enumerator name='ETT_SNAPSHOT' value='2'/>
+        <enumerator name='ETT_STACKTRACE' value='4'/>
+        <enumerator name='ETT_EVENT_ENABLE' value='8'/>
+        <enumerator name='ETT_EVENT_HIST' value='16'/>
+        <enumerator name='ETT_HIST_ENABLE' value='32'/>
+      </enum-decl>
+      <function-decl name='event_triggers_call' mangled-name='event_triggers_call' filepath='kernel/trace/trace_events_trigger.c' line='55' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='event_triggers_call'>
+        <parameter type-id='type-id-14' name='file' filepath='kernel/trace/trace_events_trigger.c' line='55' column='1'/>
+        <parameter type-id='type-id-15' name='rec' filepath='kernel/trace/trace_events_trigger.c' line='55' column='1'/>
+        <parameter type-id='type-id-13' name='event' filepath='kernel/trace/trace_events_trigger.c' line='56' column='1'/>
+        <return type-id='type-id-3592'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/trace/bpf_trace.c' language='LANG_C89'>
+      <function-decl name='bpf_trace_run2' mangled-name='bpf_trace_run2' filepath='kernel/trace/bpf_trace.c' line='1201' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_trace_run2'>
+        <parameter type-id='type-id-1230' name='prog' filepath='kernel/trace/bpf_trace.c' line='1201' column='1'/>
+        <parameter type-id='type-id-40' name='arg0' filepath='kernel/trace/bpf_trace.c' line='1201' column='1'/>
+        <parameter type-id='type-id-40' name='arg1' filepath='kernel/trace/bpf_trace.c' line='1201' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='bpf_trace_run8' mangled-name='bpf_trace_run8' filepath='kernel/trace/bpf_trace.c' line='1207' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_trace_run8'>
+        <parameter type-id='type-id-1230' name='prog' filepath='kernel/trace/bpf_trace.c' line='1207' column='1'/>
+        <parameter type-id='type-id-40' name='arg0' filepath='kernel/trace/bpf_trace.c' line='1207' column='1'/>
+        <parameter type-id='type-id-40' name='arg1' filepath='kernel/trace/bpf_trace.c' line='1207' column='1'/>
+        <parameter type-id='type-id-40' name='arg2' filepath='kernel/trace/bpf_trace.c' line='1207' column='1'/>
+        <parameter type-id='type-id-40' name='arg3' filepath='kernel/trace/bpf_trace.c' line='1207' column='1'/>
+        <parameter type-id='type-id-40' name='arg4' filepath='kernel/trace/bpf_trace.c' line='1207' column='1'/>
+        <parameter type-id='type-id-40' name='arg5' filepath='kernel/trace/bpf_trace.c' line='1207' column='1'/>
+        <parameter type-id='type-id-40' name='arg6' filepath='kernel/trace/bpf_trace.c' line='1207' column='1'/>
+        <parameter type-id='type-id-40' name='arg7' filepath='kernel/trace/bpf_trace.c' line='1207' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='bpf_trace_run10' mangled-name='bpf_trace_run10' filepath='kernel/trace/bpf_trace.c' line='1209' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_trace_run10'>
+        <parameter type-id='type-id-1230' name='prog' filepath='kernel/trace/bpf_trace.c' line='1209' column='1'/>
+        <parameter type-id='type-id-40' name='arg0' filepath='kernel/trace/bpf_trace.c' line='1209' column='1'/>
+        <parameter type-id='type-id-40' name='arg1' filepath='kernel/trace/bpf_trace.c' line='1209' column='1'/>
+        <parameter type-id='type-id-40' name='arg2' filepath='kernel/trace/bpf_trace.c' line='1209' column='1'/>
+        <parameter type-id='type-id-40' name='arg3' filepath='kernel/trace/bpf_trace.c' line='1209' column='1'/>
+        <parameter type-id='type-id-40' name='arg4' filepath='kernel/trace/bpf_trace.c' line='1209' column='1'/>
+        <parameter type-id='type-id-40' name='arg5' filepath='kernel/trace/bpf_trace.c' line='1209' column='1'/>
+        <parameter type-id='type-id-40' name='arg6' filepath='kernel/trace/bpf_trace.c' line='1209' column='1'/>
+        <parameter type-id='type-id-40' name='arg7' filepath='kernel/trace/bpf_trace.c' line='1209' column='1'/>
+        <parameter type-id='type-id-40' name='arg8' filepath='kernel/trace/bpf_trace.c' line='1209' column='1'/>
+        <parameter type-id='type-id-40' name='arg9' filepath='kernel/trace/bpf_trace.c' line='1209' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/bpf/syscall.c' language='LANG_C89'>
+      <function-decl name='bpf_prog_put' mangled-name='bpf_prog_put' filepath='kernel/bpf/syscall.c' line='1136' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_prog_put'>
+        <parameter type-id='type-id-1230' name='prog' filepath='kernel/bpf/syscall.c' line='1136' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='bpf_prog_add' mangled-name='bpf_prog_add' filepath='kernel/bpf/syscall.c' line='1204' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_prog_add'>
+        <parameter type-id='type-id-1230' name='prog' filepath='kernel/bpf/syscall.c' line='1204' column='1'/>
+        <parameter type-id='type-id-17' name='i' filepath='kernel/bpf/syscall.c' line='1204' column='1'/>
+        <return type-id='type-id-1230'/>
+      </function-decl>
+      <function-decl name='bpf_prog_sub' mangled-name='bpf_prog_sub' filepath='kernel/bpf/syscall.c' line='1214' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_prog_sub'>
+        <parameter type-id='type-id-1230' name='prog' filepath='kernel/bpf/syscall.c' line='1214' column='1'/>
+        <parameter type-id='type-id-17' name='i' filepath='kernel/bpf/syscall.c' line='1214' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/core/xdp.c' language='LANG_C89'>
+      <enum-decl name='xdp_mem_type' filepath='include/net/xdp.h' line='36' column='1' id='type-id-3593'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='MEM_TYPE_PAGE_SHARED' value='0'/>
+        <enumerator name='MEM_TYPE_PAGE_ORDER0' value='1'/>
+        <enumerator name='MEM_TYPE_PAGE_POOL' value='2'/>
+        <enumerator name='MEM_TYPE_ZERO_COPY' value='3'/>
+        <enumerator name='MEM_TYPE_MAX' value='4'/>
+      </enum-decl>
+      <function-decl name='xdp_rxq_info_unreg' mangled-name='xdp_rxq_info_unreg' filepath='net/core/xdp.c' line='114' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xdp_rxq_info_unreg'>
+        <parameter type-id='type-id-3594' name='xdp_rxq' filepath='net/core/xdp.c' line='114' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='xdp_rxq_info_reg' mangled-name='xdp_rxq_info_reg' filepath='net/core/xdp.c' line='139' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xdp_rxq_info_reg'>
+        <parameter type-id='type-id-3594' name='xdp_rxq' filepath='net/core/xdp.c' line='139' column='1'/>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/core/xdp.c' line='140' column='1'/>
+        <parameter type-id='type-id-7' name='queue_index' filepath='net/core/xdp.c' line='140' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='xdp_rxq_info_reg_mem_model' mangled-name='xdp_rxq_info_reg_mem_model' filepath='net/core/xdp.c' line='241' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xdp_rxq_info_reg_mem_model'>
+        <parameter type-id='type-id-3594' name='xdp_rxq' filepath='net/core/xdp.c' line='241' column='1'/>
+        <parameter type-id='type-id-3593' name='type' filepath='net/core/xdp.c' line='242' column='1'/>
+        <parameter type-id='type-id-15' name='allocator' filepath='net/core/xdp.c' line='242' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='xdp_return_frame' mangled-name='xdp_return_frame' filepath='net/core/xdp.c' line='353' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xdp_return_frame'>
+        <parameter type-id='type-id-3236' name='xdpf' filepath='net/core/xdp.c' line='353' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='xdp_return_frame_rx_napi' mangled-name='xdp_return_frame_rx_napi' filepath='net/core/xdp.c' line='359' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xdp_return_frame_rx_napi'>
+        <parameter type-id='type-id-3236' name='xdpf' filepath='net/core/xdp.c' line='359' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/core/rtnetlink.c' language='LANG_C89'>
+      <typedef-decl name='rtnl_doit_func' type-id='type-id-3595' filepath='include/net/rtnetlink.h' line='8' column='1' id='type-id-3596'/>
+      <typedef-decl name='rtnl_dumpit_func' type-id='type-id-1812' filepath='include/net/rtnetlink.h' line='10' column='1' id='type-id-3597'/>
+      <pointer-type-def type-id='type-id-3598' size-in-bits='64' id='type-id-3595'/>
+      <pointer-type-def type-id='type-id-2187' size-in-bits='64' id='type-id-3599'/>
+      <function-decl name='rtnl_lock' mangled-name='rtnl_lock' filepath='net/core/rtnetlink.c' line='75' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtnl_lock'>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='rtnl_unlock' mangled-name='rtnl_unlock' filepath='net/core/rtnetlink.c' line='114' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtnl_unlock'>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='rtnl_is_locked' mangled-name='rtnl_is_locked' filepath='net/core/rtnetlink.c' line='127' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtnl_is_locked'>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='rtnl_register_module' mangled-name='rtnl_register_module' filepath='net/core/rtnetlink.c' line='240' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtnl_register_module'>
+        <parameter type-id='type-id-260' name='owner' filepath='net/core/rtnetlink.c' line='240' column='1'/>
+        <parameter type-id='type-id-17' name='protocol' filepath='net/core/rtnetlink.c' line='241' column='1'/>
+        <parameter type-id='type-id-17' name='msgtype' filepath='net/core/rtnetlink.c' line='241' column='1'/>
+        <parameter type-id='type-id-3596' name='doit' filepath='net/core/rtnetlink.c' line='242' column='1'/>
+        <parameter type-id='type-id-3597' name='dumpit' filepath='net/core/rtnetlink.c' line='242' column='1'/>
+        <parameter type-id='type-id-5' name='flags' filepath='net/core/rtnetlink.c' line='243' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='rtnl_unregister' mangled-name='rtnl_unregister' filepath='net/core/rtnetlink.c' line='286' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtnl_unregister'>
+        <parameter type-id='type-id-17' name='protocol' filepath='net/core/rtnetlink.c' line='286' column='1'/>
+        <parameter type-id='type-id-17' name='msgtype' filepath='net/core/rtnetlink.c' line='286' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='rtnl_unregister_all' mangled-name='rtnl_unregister_all' filepath='net/core/rtnetlink.c' line='318' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtnl_unregister_all'>
+        <parameter type-id='type-id-17' name='protocol' filepath='net/core/rtnetlink.c' line='318' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='rtnl_link_register' mangled-name='rtnl_link_register' filepath='net/core/rtnetlink.c' line='395' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtnl_link_register'>
+        <parameter type-id='type-id-3599' name='ops' filepath='net/core/rtnetlink.c' line='395' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='rtnl_link_unregister' mangled-name='rtnl_link_unregister' filepath='net/core/rtnetlink.c' line='477' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtnl_link_unregister'>
+        <parameter type-id='type-id-3599' name='ops' filepath='net/core/rtnetlink.c' line='477' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-3598'>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-3035'/>
+        <parameter type-id='type-id-1826'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/filemap.c' language='LANG_C89'>
+      <function-decl name='unlock_page' mangled-name='unlock_page' filepath='mm/filemap.c' line='1239' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unlock_page'>
+        <parameter type-id='type-id-512' name='page' filepath='mm/filemap.c' line='1239' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/page-writeback.c' language='LANG_C89'>
+      <function-decl name='set_page_dirty' mangled-name='set_page_dirty' filepath='mm/page-writeback.c' line='2546' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='set_page_dirty'>
+        <parameter type-id='type-id-512' name='page' filepath='mm/page-writeback.c' line='2546' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/swap.c' language='LANG_C89'>
+      <function-decl name='__put_page' mangled-name='__put_page' filepath='mm/swap.c' line='99' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__put_page'>
+        <parameter type-id='type-id-512' name='page' filepath='mm/swap.c' line='99' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='mark_page_accessed' mangled-name='mark_page_accessed' filepath='mm/swap.c' line='372' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mark_page_accessed'>
+        <parameter type-id='type-id-512' name='page' filepath='mm/swap.c' line='372' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/page_alloc.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='type-id-888' size-in-bits='192' id='type-id-3600'>
+        <subrange length='3' type-id='type-id-9' id='type-id-196'/>
+
+      </array-type-def>
+      <class-decl name='sysinfo' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/uapi/linux/sysinfo.h' line='8' column='1' id='type-id-3601'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='uptime' type-id='type-id-105' visibility='default' filepath='include/uapi/linux/sysinfo.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='loads' type-id='type-id-3600' visibility='default' filepath='include/uapi/linux/sysinfo.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='totalram' type-id='type-id-888' visibility='default' filepath='include/uapi/linux/sysinfo.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='freeram' type-id='type-id-888' visibility='default' filepath='include/uapi/linux/sysinfo.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sharedram' type-id='type-id-888' visibility='default' filepath='include/uapi/linux/sysinfo.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='bufferram' type-id='type-id-888' visibility='default' filepath='include/uapi/linux/sysinfo.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='totalswap' type-id='type-id-888' visibility='default' filepath='include/uapi/linux/sysinfo.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='freeswap' type-id='type-id-888' visibility='default' filepath='include/uapi/linux/sysinfo.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='procs' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/sysinfo.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='656'>
+          <var-decl name='pad' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/sysinfo.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='totalhigh' type-id='type-id-888' visibility='default' filepath='include/uapi/linux/sysinfo.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='freehigh' type-id='type-id-888' visibility='default' filepath='include/uapi/linux/sysinfo.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='mem_unit' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/sysinfo.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='_f' type-id='type-id-440' visibility='default' filepath='include/uapi/linux/sysinfo.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-1530' size-in-bits='64' id='type-id-3602'/>
+      <pointer-type-def type-id='type-id-3601' size-in-bits='64' id='type-id-3603'/>
+      <function-decl name='__free_pages' mangled-name='__free_pages' filepath='mm/page_alloc.c' line='4541' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__free_pages'>
+        <parameter type-id='type-id-512' name='page' filepath='mm/page_alloc.c' line='4541' column='1'/>
+        <parameter type-id='type-id-5' name='order' filepath='mm/page_alloc.c' line='4541' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='__alloc_pages_nodemask' mangled-name='__alloc_pages_nodemask' filepath='mm/page_alloc.c' line='4451' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__alloc_pages_nodemask'>
+        <parameter type-id='type-id-485' name='gfp_mask' filepath='mm/page_alloc.c' line='4451' column='1'/>
+        <parameter type-id='type-id-5' name='order' filepath='mm/page_alloc.c' line='4451' column='1'/>
+        <parameter type-id='type-id-17' name='preferred_nid' filepath='mm/page_alloc.c' line='4451' column='1'/>
+        <parameter type-id='type-id-3602' name='nodemask' filepath='mm/page_alloc.c' line='4452' column='1'/>
+        <return type-id='type-id-512'/>
+      </function-decl>
+      <function-decl name='alloc_pages_exact' mangled-name='alloc_pages_exact' filepath='mm/page_alloc.c' line='4694' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='alloc_pages_exact'>
+        <parameter type-id='type-id-84' name='size' filepath='mm/page_alloc.c' line='4694' column='1'/>
+        <parameter type-id='type-id-485' name='gfp_mask' filepath='mm/page_alloc.c' line='4694' column='1'/>
+        <return type-id='type-id-15'/>
+      </function-decl>
+      <function-decl name='free_pages_exact' mangled-name='free_pages_exact' filepath='mm/page_alloc.c' line='4730' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='free_pages_exact'>
+        <parameter type-id='type-id-15' name='virt' filepath='mm/page_alloc.c' line='4730' column='1'/>
+        <parameter type-id='type-id-84' name='size' filepath='mm/page_alloc.c' line='4730' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='si_mem_available' mangled-name='si_mem_available' filepath='mm/page_alloc.c' line='4801' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='si_mem_available'>
+        <return type-id='type-id-192'/>
+      </function-decl>
+      <function-decl name='si_meminfo' mangled-name='si_meminfo' filepath='mm/page_alloc.c' line='4847' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='si_meminfo'>
+        <parameter type-id='type-id-3603' name='val' filepath='mm/page_alloc.c' line='4847' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/vmscan.c' language='LANG_C89'>
+      <function-decl name='register_shrinker' mangled-name='register_shrinker' filepath='mm/vmscan.c' line='418' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_shrinker'>
+        <parameter type-id='type-id-3055' name='shrinker' filepath='mm/vmscan.c' line='418' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='unregister_shrinker' mangled-name='unregister_shrinker' filepath='mm/vmscan.c' line='432' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_shrinker'>
+        <parameter type-id='type-id-3055' name='shrinker' filepath='mm/vmscan.c' line='432' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/util.c' language='LANG_C89'>
+      <function-decl name='kmemdup' mangled-name='kmemdup' filepath='mm/util.c' line='114' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmemdup'>
+        <parameter type-id='type-id-15' name='src' filepath='mm/util.c' line='114' column='1'/>
+        <parameter type-id='type-id-84' name='len' filepath='mm/util.c' line='114' column='1'/>
+        <parameter type-id='type-id-485' name='gfp' filepath='mm/util.c' line='114' column='1'/>
+        <return type-id='type-id-15'/>
+      </function-decl>
+      <function-decl name='memdup_user' mangled-name='memdup_user' filepath='mm/util.c' line='156' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='memdup_user'>
+        <parameter type-id='type-id-15' name='src' filepath='mm/util.c' line='156' column='1'/>
+        <parameter type-id='type-id-84' name='len' filepath='mm/util.c' line='156' column='1'/>
+        <return type-id='type-id-15'/>
+      </function-decl>
+      <function-decl name='kvfree' mangled-name='kvfree' filepath='mm/util.c' line='447' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kvfree'>
+        <parameter type-id='type-id-15' name='addr' filepath='mm/util.c' line='447' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='kvmalloc_node' mangled-name='kvmalloc_node' filepath='mm/util.c' line='397' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kvmalloc_node'>
+        <parameter type-id='type-id-84' name='size' filepath='mm/util.c' line='397' column='1'/>
+        <parameter type-id='type-id-485' name='flags' filepath='mm/util.c' line='397' column='1'/>
+        <parameter type-id='type-id-17' name='node' filepath='mm/util.c' line='397' column='1'/>
+        <return type-id='type-id-15'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/memory.c' language='LANG_C89'>
+      <typedef-decl name='pfn_t' type-id='type-id-3604' filepath='include/linux/pfn.h' line='15' column='1' id='type-id-3605'/>
+      <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-3605' visibility='default' filepath='include/linux/pfn.h' line='13' column='1' id='type-id-3604'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='val' type-id='type-id-40' visibility='default' filepath='include/linux/pfn.h' line='14' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='type-id-763' const='yes' id='type-id-3606'/>
+      <function-decl name='vm_insert_pfn' mangled-name='vm_insert_pfn' filepath='mm/memory.c' line='1863' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vm_insert_pfn'>
+        <parameter type-id='type-id-1209' name='vma' filepath='mm/memory.c' line='1863' column='1'/>
+        <parameter type-id='type-id-16' name='addr' filepath='mm/memory.c' line='1863' column='1'/>
+        <parameter type-id='type-id-16' name='pfn' filepath='mm/memory.c' line='1864' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='vm_insert_mixed' mangled-name='vm_insert_mixed' filepath='mm/memory.c' line='1967' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vm_insert_mixed'>
+        <parameter type-id='type-id-1209' name='vma' filepath='mm/memory.c' line='1967' column='1'/>
+        <parameter type-id='type-id-16' name='addr' filepath='mm/memory.c' line='1967' column='1'/>
+        <parameter type-id='type-id-3605' name='pfn' filepath='mm/memory.c' line='1968' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='unmap_mapping_range' mangled-name='unmap_mapping_range' filepath='mm/memory.c' line='2902' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unmap_mapping_range'>
+        <parameter type-id='type-id-1281' name='mapping' filepath='mm/memory.c' line='2902' column='1'/>
+        <parameter type-id='type-id-3606' name='holebegin' filepath='mm/memory.c' line='2903' column='1'/>
+        <parameter type-id='type-id-3606' name='holelen' filepath='mm/memory.c' line='2903' column='1'/>
+        <parameter type-id='type-id-17' name='even_cows' filepath='mm/memory.c' line='2903' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/block_dev.c' language='LANG_C89'>
+      <function-decl name='revalidate_disk' mangled-name='revalidate_disk' filepath='fs/block_dev.c' line='1371' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='revalidate_disk'>
+        <parameter type-id='type-id-360' name='disk' filepath='fs/block_dev.c' line='1371' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='check_disk_change' mangled-name='check_disk_change' filepath='fs/block_dev.c' line='1400' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='check_disk_change'>
+        <parameter type-id='type-id-875' name='bdev' filepath='fs/block_dev.c' line='1400' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/slub.c' language='LANG_C89'>
+      <function-decl name='kmem_cache_alloc' mangled-name='kmem_cache_alloc' filepath='mm/slub.c' line='2752' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmem_cache_alloc'>
+        <parameter type-id='type-id-538' name='s' filepath='mm/slub.c' line='2752' column='1'/>
+        <parameter type-id='type-id-485' name='gfpflags' filepath='mm/slub.c' line='2752' column='1'/>
+        <return type-id='type-id-15'/>
+      </function-decl>
+      <function-decl name='kmem_cache_alloc_trace' mangled-name='kmem_cache_alloc_trace' filepath='mm/slub.c' line='2764' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmem_cache_alloc_trace'>
+        <parameter type-id='type-id-538' name='s' filepath='mm/slub.c' line='2764' column='1'/>
+        <parameter type-id='type-id-485' name='gfpflags' filepath='mm/slub.c' line='2764' column='1'/>
+        <parameter type-id='type-id-84' name='size' filepath='mm/slub.c' line='2764' column='1'/>
+        <return type-id='type-id-15'/>
+      </function-decl>
+      <function-decl name='kmem_cache_free' mangled-name='kmem_cache_free' filepath='mm/slub.c' line='2999' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmem_cache_free'>
+        <parameter type-id='type-id-538' name='s' filepath='mm/slub.c' line='2999' column='1'/>
+        <parameter type-id='type-id-15' name='x' filepath='mm/slub.c' line='2999' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='__kmalloc' mangled-name='__kmalloc' filepath='mm/slub.c' line='3772' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__kmalloc'>
+        <parameter type-id='type-id-84' name='size' filepath='mm/slub.c' line='3772' column='1'/>
+        <parameter type-id='type-id-485' name='flags' filepath='mm/slub.c' line='3772' column='1'/>
+        <return type-id='type-id-15'/>
+      </function-decl>
+      <function-decl name='kfree' mangled-name='kfree' filepath='mm/slub.c' line='3928' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kfree'>
+        <parameter type-id='type-id-15' name='x' filepath='mm/slub.c' line='3928' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/usercopy.c' language='LANG_C89'>
+      <function-decl name='__check_object_size' mangled-name='__check_object_size' filepath='mm/usercopy.c' line='260' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__check_object_size'>
+        <parameter type-id='type-id-15' name='ptr' filepath='mm/usercopy.c' line='260' column='1'/>
+        <parameter type-id='type-id-16' name='n' filepath='mm/usercopy.c' line='260' column='1'/>
+        <parameter type-id='type-id-33' name='to_user' filepath='mm/usercopy.c' line='260' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/read_write.c' language='LANG_C89'>
+      <function-decl name='generic_file_llseek' mangled-name='generic_file_llseek' filepath='fs/read_write.c' line='144' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_file_llseek'>
+        <parameter type-id='type-id-83' name='file' filepath='fs/read_write.c' line='144' column='1'/>
+        <parameter type-id='type-id-763' name='offset' filepath='fs/read_write.c' line='144' column='1'/>
+        <parameter type-id='type-id-17' name='whence' filepath='fs/read_write.c' line='144' column='1'/>
+        <return type-id='type-id-763'/>
+      </function-decl>
+      <function-decl name='noop_llseek' mangled-name='noop_llseek' filepath='fs/read_write.c' line='224' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='noop_llseek'>
+        <parameter type-id='type-id-83' name='file' filepath='fs/read_write.c' line='224' column='1'/>
+        <parameter type-id='type-id-763' name='offset' filepath='fs/read_write.c' line='224' column='1'/>
+        <parameter type-id='type-id-17' name='whence' filepath='fs/read_write.c' line='224' column='1'/>
+        <return type-id='type-id-763'/>
+      </function-decl>
+      <function-decl name='no_llseek' mangled-name='no_llseek' filepath='fs/read_write.c' line='230' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='no_llseek'>
+        <parameter type-id='type-id-83' name='file' filepath='fs/read_write.c' line='230' column='1'/>
+        <parameter type-id='type-id-763' name='offset' filepath='fs/read_write.c' line='230' column='1'/>
+        <parameter type-id='type-id-17' name='whence' filepath='fs/read_write.c' line='230' column='1'/>
+        <return type-id='type-id-763'/>
+      </function-decl>
+      <function-decl name='default_llseek' mangled-name='default_llseek' filepath='fs/read_write.c' line='236' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='default_llseek'>
+        <parameter type-id='type-id-83' name='file' filepath='fs/read_write.c' line='236' column='1'/>
+        <parameter type-id='type-id-763' name='offset' filepath='fs/read_write.c' line='236' column='1'/>
+        <parameter type-id='type-id-17' name='whence' filepath='fs/read_write.c' line='236' column='1'/>
+        <return type-id='type-id-763'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/file_table.c' language='LANG_C89'>
+      <function-decl name='fput' mangled-name='fput' filepath='fs/file_table.c' line='329' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fput'>
+        <parameter type-id='type-id-83' name='file' filepath='fs/file_table.c' line='329' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/char_dev.c' language='LANG_C89'>
+      <pointer-type-def type-id='type-id-269' size-in-bits='64' id='type-id-3607'/>
+      <function-decl name='alloc_chrdev_region' mangled-name='alloc_chrdev_region' filepath='fs/char_dev.c' line='245' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='alloc_chrdev_region'>
+        <parameter type-id='type-id-3607' name='dev' filepath='fs/char_dev.c' line='245' column='1'/>
+        <parameter type-id='type-id-5' name='baseminor' filepath='fs/char_dev.c' line='245' column='1'/>
+        <parameter type-id='type-id-5' name='count' filepath='fs/char_dev.c' line='245' column='1'/>
+        <parameter type-id='type-id-4' name='name' filepath='fs/char_dev.c' line='246' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='__register_chrdev' mangled-name='__register_chrdev' filepath='fs/char_dev.c' line='277' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__register_chrdev'>
+        <parameter type-id='type-id-5' name='major' filepath='fs/char_dev.c' line='277' column='1'/>
+        <parameter type-id='type-id-5' name='baseminor' filepath='fs/char_dev.c' line='277' column='1'/>
+        <parameter type-id='type-id-5' name='count' filepath='fs/char_dev.c' line='278' column='1'/>
+        <parameter type-id='type-id-4' name='name' filepath='fs/char_dev.c' line='278' column='1'/>
+        <parameter type-id='type-id-268' name='fops' filepath='fs/char_dev.c' line='279' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='cdev_alloc' mangled-name='cdev_alloc' filepath='fs/char_dev.c' line='639' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cdev_alloc'>
+        <return type-id='type-id-774'/>
+      </function-decl>
+      <function-decl name='cdev_add' mangled-name='cdev_add' filepath='fs/char_dev.c' line='488' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cdev_add'>
+        <parameter type-id='type-id-774' name='p' filepath='fs/char_dev.c' line='488' column='1'/>
+        <parameter type-id='type-id-269' name='dev' filepath='fs/char_dev.c' line='488' column='1'/>
+        <parameter type-id='type-id-5' name='count' filepath='fs/char_dev.c' line='488' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='unregister_chrdev_region' mangled-name='unregister_chrdev_region' filepath='fs/char_dev.c' line='320' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_chrdev_region'>
+        <parameter type-id='type-id-269' name='from' filepath='fs/char_dev.c' line='320' column='1'/>
+        <parameter type-id='type-id-5' name='count' filepath='fs/char_dev.c' line='320' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='__unregister_chrdev' mangled-name='__unregister_chrdev' filepath='fs/char_dev.c' line='344' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__unregister_chrdev'>
+        <parameter type-id='type-id-5' name='major' filepath='fs/char_dev.c' line='344' column='1'/>
+        <parameter type-id='type-id-5' name='baseminor' filepath='fs/char_dev.c' line='344' column='1'/>
+        <parameter type-id='type-id-5' name='count' filepath='fs/char_dev.c' line='345' column='1'/>
+        <parameter type-id='type-id-4' name='name' filepath='fs/char_dev.c' line='345' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='cdev_del' mangled-name='cdev_del' filepath='fs/char_dev.c' line='600' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cdev_del'>
+        <parameter type-id='type-id-774' name='p' filepath='fs/char_dev.c' line='600' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='cdev_device_add' mangled-name='cdev_device_add' filepath='fs/char_dev.c' line='543' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cdev_device_add'>
+        <parameter type-id='type-id-774' name='cdev' filepath='fs/char_dev.c' line='543' column='1'/>
+        <parameter type-id='type-id-240' name='dev' filepath='fs/char_dev.c' line='543' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='cdev_device_del' mangled-name='cdev_device_del' filepath='fs/char_dev.c' line='577' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cdev_device_del'>
+        <parameter type-id='type-id-774' name='cdev' filepath='fs/char_dev.c' line='577' column='1'/>
+        <parameter type-id='type-id-240' name='dev' filepath='fs/char_dev.c' line='577' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='cdev_init' mangled-name='cdev_init' filepath='fs/char_dev.c' line='657' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cdev_init'>
+        <parameter type-id='type-id-774' name='cdev' filepath='fs/char_dev.c' line='657' column='1'/>
+        <parameter type-id='type-id-268' name='fops' filepath='fs/char_dev.c' line='657' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/exec.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='type-id-83' size-in-bits='4096' id='type-id-3608'>
+        <subrange length='64' type-id='type-id-9' id='type-id-188'/>
+
+      </array-type-def>
+      <class-decl name='fdtable' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/fdtable.h' line='26' column='1' id='type-id-3609'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max_fds' type-id='type-id-5' visibility='default' filepath='include/linux/fdtable.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fd' type-id='type-id-3610' visibility='default' filepath='include/linux/fdtable.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='close_on_exec' type-id='type-id-45' visibility='default' filepath='include/linux/fdtable.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='open_fds' type-id='type-id-45' visibility='default' filepath='include/linux/fdtable.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='full_fds_bits' type-id='type-id-45' visibility='default' filepath='include/linux/fdtable.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/linux/fdtable.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-3609' size-in-bits='64' id='type-id-3611'/>
+      <pointer-type-def type-id='type-id-83' size-in-bits='64' id='type-id-3610'/>
+      <function-decl name='__get_task_comm' mangled-name='__get_task_comm' filepath='fs/exec.c' line='1224' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__get_task_comm'>
+        <parameter type-id='type-id-2' name='buf' filepath='fs/exec.c' line='1224' column='1'/>
+        <parameter type-id='type-id-84' name='buf_size' filepath='fs/exec.c' line='1224' column='1'/>
+        <parameter type-id='type-id-431' name='tsk' filepath='fs/exec.c' line='1224' column='1'/>
+        <return type-id='type-id-2'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/pipe.c' language='LANG_C89'>
+      <function-decl name='pipe_lock' mangled-name='pipe_lock' filepath='fs/pipe.c' line='65' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pipe_lock'>
+        <parameter type-id='type-id-87' name='pipe' filepath='fs/pipe.c' line='65' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='pipe_unlock' mangled-name='pipe_unlock' filepath='fs/pipe.c' line='74' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pipe_unlock'>
+        <parameter type-id='type-id-87' name='pipe' filepath='fs/pipe.c' line='74' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/fcntl.c' language='LANG_C89'>
+      <pointer-type-def type-id='type-id-254' size-in-bits='64' id='type-id-3612'/>
+      <function-decl name='fasync_helper' mangled-name='fasync_helper' filepath='fs/fcntl.c' line='978' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fasync_helper'>
+        <parameter type-id='type-id-17' name='fd' filepath='fs/fcntl.c' line='978' column='1'/>
+        <parameter type-id='type-id-83' name='filp' filepath='fs/fcntl.c' line='978' column='1'/>
+        <parameter type-id='type-id-17' name='on' filepath='fs/fcntl.c' line='978' column='1'/>
+        <parameter type-id='type-id-3612' name='fapp' filepath='fs/fcntl.c' line='978' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='kill_fasync' mangled-name='kill_fasync' filepath='fs/fcntl.c' line='1014' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kill_fasync'>
+        <parameter type-id='type-id-3612' name='fp' filepath='fs/fcntl.c' line='1014' column='1'/>
+        <parameter type-id='type-id-17' name='sig' filepath='fs/fcntl.c' line='1014' column='1'/>
+        <parameter type-id='type-id-17' name='band' filepath='fs/fcntl.c' line='1014' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/libfs.c' language='LANG_C89'>
+      <class-decl name='iomap' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-3613'/>
+      <class-decl name='iov_iter' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-3614'/>
+      <class-decl name='fid' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/linux/exportfs.h' line='113' column='1' id='type-id-3615'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='type-id-3616' visibility='default' filepath='include/linux/exportfs.h' line='114' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='160' is-anonymous='yes' visibility='default' filepath='include/linux/exportfs.h' line='114' column='1' id='type-id-3616'>
+        <data-member access='private'>
+          <var-decl name='i32' type-id='type-id-3617' visibility='default' filepath='include/linux/exportfs.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='udf' type-id='type-id-3618' visibility='default' filepath='include/linux/exportfs.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='raw' type-id='type-id-936' visibility='default' filepath='include/linux/exportfs.h' line='129' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/exportfs.h' line='115' column='1' id='type-id-3617'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ino' type-id='type-id-7' visibility='default' filepath='include/linux/exportfs.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='gen' type-id='type-id-7' visibility='default' filepath='include/linux/exportfs.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='parent_ino' type-id='type-id-7' visibility='default' filepath='include/linux/exportfs.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='parent_gen' type-id='type-id-7' visibility='default' filepath='include/linux/exportfs.h' line='119' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='160' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/exportfs.h' line='121' column='1' id='type-id-3618'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='block' type-id='type-id-7' visibility='default' filepath='include/linux/exportfs.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='partref' type-id='type-id-688' visibility='default' filepath='include/linux/exportfs.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='parent_partref' type-id='type-id-688' visibility='default' filepath='include/linux/exportfs.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='generation' type-id='type-id-7' visibility='default' filepath='include/linux/exportfs.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='parent_block' type-id='type-id-7' visibility='default' filepath='include/linux/exportfs.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='parent_generation' type-id='type-id-7' visibility='default' filepath='include/linux/exportfs.h' line='127' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='6848' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='353' column='1' id='type-id-3619'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mmap' type-id='type-id-1209' visibility='default' filepath='include/linux/mm_types.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mm_rb' type-id='type-id-416' visibility='default' filepath='include/linux/mm_types.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vmacache_seqnum' type-id='type-id-40' visibility='default' filepath='include/linux/mm_types.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_unmapped_area' type-id='type-id-1484' visibility='default' filepath='include/linux/mm_types.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mmap_base' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mmap_legacy_base' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='task_size' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='highest_vm_end' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pgd' type-id='type-id-1485' visibility='default' filepath='include/linux/mm_types.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mm_users' type-id='type-id-26' visibility='default' filepath='include/linux/mm_types.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='mm_count' type-id='type-id-26' visibility='default' filepath='include/linux/mm_types.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='pgtables_bytes' type-id='type-id-115' visibility='default' filepath='include/linux/mm_types.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='map_count' type-id='type-id-17' visibility='default' filepath='include/linux/mm_types.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='page_table_lock' type-id='type-id-247' visibility='default' filepath='include/linux/mm_types.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mmap_sem' type-id='type-id-246' visibility='default' filepath='include/linux/mm_types.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='mmlist' type-id='type-id-20' visibility='default' filepath='include/linux/mm_types.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='hiwater_rss' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='hiwater_vm' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='total_vm' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='locked_vm' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='pinned_vm' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='data_vm' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='exec_vm' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='stack_vm' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='def_flags' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='arg_lock' type-id='type-id-247' visibility='default' filepath='include/linux/mm_types.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='start_code' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='end_code' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='start_data' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='end_data' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='start_brk' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='brk' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='start_stack' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='arg_start' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='arg_end' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='env_start' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='env_end' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='saved_auxv' type-id='type-id-1202' visibility='default' filepath='include/linux/mm_types.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='rss_stat' type-id='type-id-1486' visibility='default' filepath='include/linux/mm_types.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='binfmt' type-id='type-id-1487' visibility='default' filepath='include/linux/mm_types.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='context' type-id='type-id-1488' visibility='default' filepath='include/linux/mm_types.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='core_state' type-id='type-id-1489' visibility='default' filepath='include/linux/mm_types.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='membarrier_state' type-id='type-id-26' visibility='default' filepath='include/linux/mm_types.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6176'>
+          <var-decl name='ioctx_lock' type-id='type-id-247' visibility='default' filepath='include/linux/mm_types.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='ioctx_table' type-id='type-id-1490' visibility='default' filepath='include/linux/mm_types.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='owner' type-id='type-id-431' visibility='default' filepath='include/linux/mm_types.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='user_ns' type-id='type-id-917' visibility='default' filepath='include/linux/mm_types.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='exe_file' type-id='type-id-83' visibility='default' filepath='include/linux/mm_types.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='tlb_flush_pending' type-id='type-id-26' visibility='default' filepath='include/linux/mm_types.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='uprobes_state' type-id='type-id-1491' visibility='default' filepath='include/linux/mm_types.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='async_put_work' type-id='type-id-255' visibility='default' filepath='include/linux/mm_types.h' line='500' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__6' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='79' column='1' id='type-id-3620'>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='98' column='1' id='type-id-3621'>
+
+              <member-type access='public'>
+                <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='115' column='1' id='type-id-3622'>
+                  <data-member access='private'>
+                    <var-decl name='s_mem' type-id='type-id-15' visibility='default' filepath='include/linux/mm_types.h' line='116' column='1'/>
+                  </data-member>
+                  <data-member access='private'>
+                    <var-decl name='counters' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='117' column='1'/>
+                  </data-member>
+                  <data-member access='private'>
+                    <var-decl name='' type-id='type-id-2139' visibility='default' filepath='include/linux/mm_types.h' line='118' column='1'/>
+                  </data-member>
+                </union-decl>
+              </member-type>
+            <data-member access='public' layout-offset-in-bits='0'>
+              <var-decl name='' type-id='type-id-3623' visibility='default' filepath='include/linux/mm_types.h' line='99' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='128'>
+              <var-decl name='slab_cache' type-id='type-id-538' visibility='default' filepath='include/linux/mm_types.h' line='112' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='192'>
+              <var-decl name='freelist' type-id='type-id-15' visibility='default' filepath='include/linux/mm_types.h' line='114' column='1'/>
+            </data-member>
+          </class-decl>
+        </member-type>
+        <member-type access='private'>
+          <class-decl name='__anonymous_struct__1' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='138' column='1' id='type-id-3624'>
+            <data-member access='public' layout-offset-in-bits='0'>
+              <var-decl name='_pt_pad_1' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='139' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='64'>
+              <var-decl name='pmd_huge_pte' type-id='type-id-2140' visibility='default' filepath='include/linux/mm_types.h' line='140' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='128'>
+              <var-decl name='_pt_pad_2' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='141' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='192'>
+              <var-decl name='' type-id='type-id-3625' visibility='default' filepath='include/linux/mm_types.h' line='142' column='1'/>
+            </data-member>
+            <data-member access='public' layout-offset-in-bits='256'>
+              <var-decl name='ptl' type-id='type-id-247' visibility='default' filepath='include/linux/mm_types.h' line='149' column='1'/>
+            </data-member>
+          </class-decl>
+        </member-type>
+        <data-member access='private'>
+          <var-decl name='' type-id='type-id-3626' visibility='default' filepath='include/linux/mm_types.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='callback_head' type-id='type-id-385' visibility='default' filepath='include/linux/mm_types.h' line='160' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__3' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='80' column='1' id='type-id-3626'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lru' type-id='type-id-20' visibility='default' filepath='include/linux/mm_types.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mapping' type-id='type-id-1281' visibility='default' filepath='include/linux/mm_types.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='index' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='private' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='96' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__7' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='99' column='1' id='type-id-3623'>
+        <data-member access='private'>
+          <var-decl name='slab_list' type-id='type-id-20' visibility='default' filepath='include/linux/mm_types.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='type-id-3627' visibility='default' filepath='include/linux/mm_types.h' line='101' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__4' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='101' column='1' id='type-id-3627'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='type-id-512' visibility='default' filepath='include/linux/mm_types.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pages' type-id='type-id-17' visibility='default' filepath='include/linux/mm_types.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pobjects' type-id='type-id-17' visibility='default' filepath='include/linux/mm_types.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__8' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='142' column='1' id='type-id-3625'>
+        <data-member access='private'>
+          <var-decl name='pt_mm' type-id='type-id-882' visibility='default' filepath='include/linux/mm_types.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='pt_frag_refcount' type-id='type-id-26' visibility='default' filepath='include/linux/mm_types.h' line='144' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__10' size-in-bits='1472' is-anonymous='yes' visibility='default' filepath='include/linux/elevator.h' line='141' column='1' id='type-id-3628'>
+        <data-member access='private'>
+          <var-decl name='sq' type-id='type-id-542' visibility='default' filepath='include/linux/elevator.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='mq' type-id='type-id-600' visibility='default' filepath='include/linux/elevator.h' line='143' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='type-id-511' size-in-bits='64' id='type-id-3629'/>
+      <pointer-type-def type-id='type-id-3630' size-in-bits='64' id='type-id-3631'/>
+      <pointer-type-def type-id='type-id-3632' size-in-bits='64' id='type-id-3633'/>
+      <pointer-type-def type-id='type-id-3615' size-in-bits='64' id='type-id-3634'/>
+      <pointer-type-def type-id='type-id-3635' size-in-bits='64' id='type-id-3636'/>
+      <pointer-type-def type-id='type-id-3637' size-in-bits='64' id='type-id-3638'/>
+      <pointer-type-def type-id='type-id-3639' size-in-bits='64' id='type-id-3640'/>
+      <pointer-type-def type-id='type-id-3641' size-in-bits='64' id='type-id-3642'/>
+      <pointer-type-def type-id='type-id-3643' size-in-bits='64' id='type-id-3644'/>
+      <pointer-type-def type-id='type-id-3645' size-in-bits='64' id='type-id-3646'/>
+      <pointer-type-def type-id='type-id-3647' size-in-bits='64' id='type-id-3648'/>
+      <pointer-type-def type-id='type-id-3613' size-in-bits='64' id='type-id-3649'/>
+      <pointer-type-def type-id='type-id-3614' size-in-bits='64' id='type-id-3650'/>
+      <function-decl name='simple_attr_open' mangled-name='simple_attr_open' filepath='fs/libfs.c' line='799' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_attr_open'>
+        <parameter type-id='type-id-1129' name='inode' filepath='fs/libfs.c' line='799' column='1'/>
+        <parameter type-id='type-id-83' name='file' filepath='fs/libfs.c' line='799' column='1'/>
+        <parameter type-id='type-id-3648' name='get' filepath='fs/libfs.c' line='800' column='1'/>
+        <parameter type-id='type-id-3646' name='set' filepath='fs/libfs.c' line='800' column='1'/>
+        <parameter type-id='type-id-4' name='fmt' filepath='fs/libfs.c' line='801' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='simple_read_from_buffer' mangled-name='simple_read_from_buffer' filepath='fs/libfs.c' line='626' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_read_from_buffer'>
+        <parameter type-id='type-id-15' name='to' filepath='fs/libfs.c' line='626' column='1'/>
+        <parameter type-id='type-id-84' name='count' filepath='fs/libfs.c' line='626' column='1'/>
+        <parameter type-id='type-id-85' name='ppos' filepath='fs/libfs.c' line='626' column='1'/>
+        <parameter type-id='type-id-15' name='from' filepath='fs/libfs.c' line='627' column='1'/>
+        <parameter type-id='type-id-84' name='available' filepath='fs/libfs.c' line='627' column='1'/>
+        <return type-id='type-id-86'/>
+      </function-decl>
+      <function-decl name='simple_attr_release' mangled-name='simple_attr_release' filepath='fs/libfs.c' line='821' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_attr_release'>
+        <parameter type-id='type-id-1129' name='inode' filepath='fs/libfs.c' line='821' column='1'/>
+        <parameter type-id='type-id-83' name='file' filepath='fs/libfs.c' line='821' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='simple_attr_read' mangled-name='simple_attr_read' filepath='fs/libfs.c' line='829' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_attr_read'>
+        <parameter type-id='type-id-83' name='file' filepath='fs/libfs.c' line='829' column='1'/>
+        <parameter type-id='type-id-2' name='buf' filepath='fs/libfs.c' line='829' column='1'/>
+        <parameter type-id='type-id-84' name='len' filepath='fs/libfs.c' line='830' column='1'/>
+        <parameter type-id='type-id-85' name='ppos' filepath='fs/libfs.c' line='830' column='1'/>
+        <return type-id='type-id-86'/>
+      </function-decl>
+      <function-decl name='simple_attr_write' mangled-name='simple_attr_write' filepath='fs/libfs.c' line='865' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_attr_write'>
+        <parameter type-id='type-id-83' name='file' filepath='fs/libfs.c' line='865' column='1'/>
+        <parameter type-id='type-id-4' name='buf' filepath='fs/libfs.c' line='865' column='1'/>
+        <parameter type-id='type-id-84' name='len' filepath='fs/libfs.c' line='866' column='1'/>
+        <parameter type-id='type-id-85' name='ppos' filepath='fs/libfs.c' line='866' column='1'/>
+        <return type-id='type-id-86'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-3630'>
+        <parameter type-id='type-id-23'/>
+        <return type-id='type-id-23'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3632'>
+        <parameter type-id='type-id-28'/>
+        <parameter type-id='type-id-3634'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-23'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3635'>
+        <parameter type-id='type-id-23'/>
+        <parameter type-id='type-id-2'/>
+        <parameter type-id='type-id-23'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3637'>
+        <parameter type-id='type-id-1129'/>
+        <parameter type-id='type-id-3629'/>
+        <parameter type-id='type-id-666'/>
+        <parameter type-id='type-id-1129'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3639'>
+        <parameter type-id='type-id-1129'/>
+        <parameter type-id='type-id-3649'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-2780'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3641'>
+        <parameter type-id='type-id-1129'/>
+        <parameter type-id='type-id-763'/>
+        <parameter type-id='type-id-40'/>
+        <parameter type-id='type-id-3649'/>
+        <parameter type-id='type-id-33'/>
+        <parameter type-id='type-id-1567'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3643'>
+        <parameter type-id='type-id-28'/>
+        <parameter type-id='type-id-3121'/>
+        <parameter type-id='type-id-1567'/>
+        <parameter type-id='type-id-1510'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3645'>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-40'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3647'>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-1510'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/splice.c' language='LANG_C89'>
+      <class-decl name='splice_desc' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/splice.h' line='29' column='1' id='type-id-3651'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='total_len' type-id='type-id-84' visibility='default' filepath='include/linux/splice.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='len' type-id='type-id-5' visibility='default' filepath='include/linux/splice.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='type-id-5' visibility='default' filepath='include/linux/splice.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='u' type-id='type-id-3652' visibility='default' filepath='include/linux/splice.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pos' type-id='type-id-763' visibility='default' filepath='include/linux/splice.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='opos' type-id='type-id-85' visibility='default' filepath='include/linux/splice.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='num_spliced' type-id='type-id-84' visibility='default' filepath='include/linux/splice.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='need_wakeup' type-id='type-id-33' visibility='default' filepath='include/linux/splice.h' line='44' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/splice.h' line='36' column='1' id='type-id-3652'>
+        <data-member access='private'>
+          <var-decl name='userptr' type-id='type-id-15' visibility='default' filepath='include/linux/splice.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='file' type-id='type-id-83' visibility='default' filepath='include/linux/splice.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='data' type-id='type-id-15' visibility='default' filepath='include/linux/splice.h' line='39' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='splice_actor' type-id='type-id-3653' filepath='include/linux/splice.h' line='65' column='1' id='type-id-3654'/>
+      <pointer-type-def type-id='type-id-3654' size-in-bits='64' id='type-id-3655'/>
+      <pointer-type-def type-id='type-id-3651' size-in-bits='64' id='type-id-3656'/>
+      <function-decl name='__splice_from_pipe' mangled-name='__splice_from_pipe' filepath='fs/splice.c' line='617' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__splice_from_pipe'>
+        <parameter type-id='type-id-87' name='pipe' filepath='fs/splice.c' line='617' column='1'/>
+        <parameter type-id='type-id-3656' name='sd' filepath='fs/splice.c' line='617' column='1'/>
+        <parameter type-id='type-id-3655' name='actor' filepath='fs/splice.c' line='618' column='1'/>
+        <return type-id='type-id-86'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-3653'>
+        <parameter type-id='type-id-87'/>
+        <parameter type-id='type-id-2123'/>
+        <parameter type-id='type-id-3656'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/proc/proc_net.c' language='LANG_C89'>
+      <function-decl name='proc_create_net_single' mangled-name='proc_create_net_single' filepath='fs/proc/proc_net.c' line='193' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='proc_create_net_single'>
+        <parameter type-id='type-id-4' name='name' filepath='fs/proc/proc_net.c' line='193' column='1'/>
+        <parameter type-id='type-id-329' name='mode' filepath='fs/proc/proc_net.c' line='193' column='1'/>
+        <parameter type-id='type-id-262' name='parent' filepath='fs/proc/proc_net.c' line='194' column='1'/>
+        <parameter type-id='type-id-311' name='show' filepath='fs/proc/proc_net.c' line='195' column='1'/>
+        <parameter type-id='type-id-15' name='data' filepath='fs/proc/proc_net.c' line='195' column='1'/>
+        <return type-id='type-id-262'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/sysfs/file.c' language='LANG_C89'>
+      <qualified-type-def type-id='type-id-2039' const='yes' id='type-id-3657'/>
+      <pointer-type-def type-id='type-id-3657' size-in-bits='64' id='type-id-3658'/>
+      <function-decl name='sysfs_create_bin_file' mangled-name='sysfs_create_bin_file' filepath='fs/sysfs/file.c' line='534' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_create_bin_file'>
+        <parameter type-id='type-id-379' name='kobj' filepath='fs/sysfs/file.c' line='534' column='1'/>
+        <parameter type-id='type-id-3658' name='attr' filepath='fs/sysfs/file.c' line='535' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='sysfs_remove_bin_file' mangled-name='sysfs_remove_bin_file' filepath='fs/sysfs/file.c' line='553' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_remove_bin_file'>
+        <parameter type-id='type-id-379' name='kobj' filepath='fs/sysfs/file.c' line='553' column='1'/>
+        <parameter type-id='type-id-3658' name='attr' filepath='fs/sysfs/file.c' line='554' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/debugfs/file.c' language='LANG_C89'>
+      <function-decl name='debugfs_create_x32' mangled-name='debugfs_create_x32' filepath='fs/debugfs/file.c' line='674' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='debugfs_create_x32'>
+        <parameter type-id='type-id-4' name='name' filepath='fs/debugfs/file.c' line='674' column='1'/>
+        <parameter type-id='type-id-329' name='mode' filepath='fs/debugfs/file.c' line='674' column='1'/>
+        <parameter type-id='type-id-23' name='parent' filepath='fs/debugfs/file.c' line='675' column='1'/>
+        <parameter type-id='type-id-1567' name='value' filepath='fs/debugfs/file.c' line='675' column='1'/>
+        <return type-id='type-id-23'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='security/security.c' language='LANG_C89'>
+      <class-decl name='socket' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-3659'/>
+      <pointer-type-def type-id='type-id-3659' size-in-bits='64' id='type-id-3660'/>
+      <function-decl name='security_sock_graft' mangled-name='security_sock_graft' filepath='security/security.c' line='1500' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='security_sock_graft'>
+        <parameter type-id='type-id-1648' name='sk' filepath='security/security.c' line='1500' column='1'/>
+        <parameter type-id='type-id-3660' name='parent' filepath='security/security.c' line='1500' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/netlink/af_netlink.c' language='LANG_C89'>
+      <union-decl name='__anonymous_union__' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='666' column='1' id='type-id-3661'>
+        <data-member access='private'>
+          <var-decl name='' type-id='type-id-1767' visibility='default' filepath='include/linux/skbuff.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rbnode' type-id='type-id-422' visibility='default' filepath='include/linux/skbuff.h' line='681' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/skbuff.h' line='682' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='397' column='1' id='type-id-3662'>
+        <data-member access='private'>
+          <var-decl name='sk_wq' type-id='type-id-3663' visibility='default' filepath='include/net/sock.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sk_wq_raw' type-id='type-id-3663' visibility='default' filepath='include/net/sock.h' line='399' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='netlink_dump_control' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/netlink.h' line='194' column='1' id='type-id-3664'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='type-id-1813' visibility='default' filepath='include/linux/netlink.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dump' type-id='type-id-1812' visibility='default' filepath='include/linux/netlink.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='done' type-id='type-id-1813' visibility='default' filepath='include/linux/netlink.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='data' type-id='type-id-15' visibility='default' filepath='include/linux/netlink.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='module' type-id='type-id-260' visibility='default' filepath='include/linux/netlink.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='min_dump_alloc' type-id='type-id-688' visibility='default' filepath='include/linux/netlink.h' line='200' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-3664' size-in-bits='64' id='type-id-3665'/>
+      <function-decl name='netlink_capable' mangled-name='netlink_capable' filepath='net/netlink/af_netlink.c' line='901' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netlink_capable'>
+        <parameter type-id='type-id-2720' name='skb' filepath='net/netlink/af_netlink.c' line='901' column='1'/>
+        <parameter type-id='type-id-17' name='cap' filepath='net/netlink/af_netlink.c' line='901' column='1'/>
+        <return type-id='type-id-33'/>
+      </function-decl>
+      <function-decl name='__nlmsg_put' mangled-name='__nlmsg_put' filepath='net/netlink/af_netlink.c' line='2156' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__nlmsg_put'>
+        <parameter type-id='type-id-1768' name='skb' filepath='net/netlink/af_netlink.c' line='2156' column='1'/>
+        <parameter type-id='type-id-7' name='portid' filepath='net/netlink/af_netlink.c' line='2156' column='1'/>
+        <parameter type-id='type-id-7' name='seq' filepath='net/netlink/af_netlink.c' line='2156' column='1'/>
+        <parameter type-id='type-id-17' name='type' filepath='net/netlink/af_netlink.c' line='2156' column='1'/>
+        <parameter type-id='type-id-17' name='len' filepath='net/netlink/af_netlink.c' line='2156' column='1'/>
+        <parameter type-id='type-id-17' name='flags' filepath='net/netlink/af_netlink.c' line='2156' column='1'/>
+        <return type-id='type-id-3035'/>
+      </function-decl>
+      <function-decl name='__netlink_dump_start' mangled-name='__netlink_dump_start' filepath='net/netlink/af_netlink.c' line='2278' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__netlink_dump_start'>
+        <parameter type-id='type-id-3666' name='ssk' filepath='net/netlink/af_netlink.c' line='2278' column='1'/>
+        <parameter type-id='type-id-1768' name='skb' filepath='net/netlink/af_netlink.c' line='2278' column='1'/>
+        <parameter type-id='type-id-1811' name='nlh' filepath='net/netlink/af_netlink.c' line='2279' column='1'/>
+        <parameter type-id='type-id-3665' name='control' filepath='net/netlink/af_netlink.c' line='2280' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='crypto/algapi.c' language='LANG_C89'>
+      <class-decl name='skcipher_givcrypt_request' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-3667'/>
+      <class-decl name='crypto_alg' size-in-bits='4096' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='461' column='1' id='type-id-3668'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cra_list' type-id='type-id-20' visibility='default' filepath='include/linux/crypto.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cra_users' type-id='type-id-20' visibility='default' filepath='include/linux/crypto.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cra_flags' type-id='type-id-7' visibility='default' filepath='include/linux/crypto.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='cra_blocksize' type-id='type-id-5' visibility='default' filepath='include/linux/crypto.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cra_ctxsize' type-id='type-id-5' visibility='default' filepath='include/linux/crypto.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='cra_alignmask' type-id='type-id-5' visibility='default' filepath='include/linux/crypto.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cra_priority' type-id='type-id-17' visibility='default' filepath='include/linux/crypto.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='cra_refcnt' type-id='type-id-421' visibility='default' filepath='include/linux/crypto.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='cra_name' type-id='type-id-964' visibility='default' filepath='include/linux/crypto.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='cra_driver_name' type-id='type-id-964' visibility='default' filepath='include/linux/crypto.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='cra_type' type-id='type-id-3669' visibility='default' filepath='include/linux/crypto.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='cra_u' type-id='type-id-3670' visibility='default' filepath='include/linux/crypto.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='cra_init' type-id='type-id-3671' visibility='default' filepath='include/linux/crypto.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='cra_exit' type-id='type-id-3672' visibility='default' filepath='include/linux/crypto.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='cra_destroy' type-id='type-id-3673' visibility='default' filepath='include/linux/crypto.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='cra_module' type-id='type-id-260' visibility='default' filepath='include/linux/crypto.h' line='489' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='crypto_type' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/crypto/algapi.h' line='34' column='1' id='type-id-3674'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ctxsize' type-id='type-id-3675' visibility='default' filepath='include/crypto/algapi.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='extsize' type-id='type-id-3676' visibility='default' filepath='include/crypto/algapi.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init' type-id='type-id-3677' visibility='default' filepath='include/crypto/algapi.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='init_tfm' type-id='type-id-3671' visibility='default' filepath='include/crypto/algapi.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='show' type-id='type-id-3678' visibility='default' filepath='include/crypto/algapi.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='report' type-id='type-id-3679' visibility='default' filepath='include/crypto/algapi.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='free' type-id='type-id-3680' visibility='default' filepath='include/crypto/algapi.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='type' type-id='type-id-5' visibility='default' filepath='include/crypto/algapi.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='maskclear' type-id='type-id-5' visibility='default' filepath='include/crypto/algapi.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='maskset' type-id='type-id-5' visibility='default' filepath='include/crypto/algapi.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='tfmsize' type-id='type-id-5' visibility='default' filepath='include/crypto/algapi.h' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='crypto_tfm' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='593' column='1' id='type-id-3681'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='crt_flags' type-id='type-id-7' visibility='default' filepath='include/linux/crypto.h' line='595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='crt_u' type-id='type-id-3682' visibility='default' filepath='include/linux/crypto.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='exit' type-id='type-id-3672' visibility='default' filepath='include/linux/crypto.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='__crt_alg' type-id='type-id-3683' visibility='default' filepath='include/linux/crypto.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='__crt_ctx' type-id='type-id-1213' visibility='default' filepath='include/linux/crypto.h' line='608' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/crypto.h' line='597' column='1' id='type-id-3682'>
+        <data-member access='private'>
+          <var-decl name='ablkcipher' type-id='type-id-3684' visibility='default' filepath='include/linux/crypto.h' line='598' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='blkcipher' type-id='type-id-3685' visibility='default' filepath='include/linux/crypto.h' line='599' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='cipher' type-id='type-id-3686' visibility='default' filepath='include/linux/crypto.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='compress' type-id='type-id-3687' visibility='default' filepath='include/linux/crypto.h' line='601' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='ablkcipher_tfm' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='550' column='1' id='type-id-3684'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='setkey' type-id='type-id-3688' visibility='default' filepath='include/linux/crypto.h' line='551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='encrypt' type-id='type-id-3689' visibility='default' filepath='include/linux/crypto.h' line='553' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='decrypt' type-id='type-id-3689' visibility='default' filepath='include/linux/crypto.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='base' type-id='type-id-3690' visibility='default' filepath='include/linux/crypto.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ivsize' type-id='type-id-5' visibility='default' filepath='include/linux/crypto.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='reqsize' type-id='type-id-5' visibility='default' filepath='include/linux/crypto.h' line='559' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='crypto_ablkcipher' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='611' column='1' id='type-id-3691'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='type-id-3681' visibility='default' filepath='include/linux/crypto.h' line='612' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ablkcipher_request' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='180' column='1' id='type-id-3692'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='type-id-3693' visibility='default' filepath='include/linux/crypto.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='nbytes' type-id='type-id-5' visibility='default' filepath='include/linux/crypto.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='info' type-id='type-id-15' visibility='default' filepath='include/linux/crypto.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='src' type-id='type-id-920' visibility='default' filepath='include/linux/crypto.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='dst' type-id='type-id-920' visibility='default' filepath='include/linux/crypto.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='__ctx' type-id='type-id-1213' visibility='default' filepath='include/linux/crypto.h' line='190' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='crypto_async_request' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='171' column='1' id='type-id-3693'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/crypto.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='complete' type-id='type-id-3694' visibility='default' filepath='include/linux/crypto.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='data' type-id='type-id-15' visibility='default' filepath='include/linux/crypto.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tfm' type-id='type-id-3695' visibility='default' filepath='include/linux/crypto.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='flags' type-id='type-id-7' visibility='default' filepath='include/linux/crypto.h' line='177' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='crypto_completion_t' type-id='type-id-3696' filepath='include/linux/crypto.h' line='162' column='1' id='type-id-3694'/>
+      <class-decl name='blkcipher_tfm' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='562' column='1' id='type-id-3685'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='iv' type-id='type-id-15' visibility='default' filepath='include/linux/crypto.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='setkey' type-id='type-id-3697' visibility='default' filepath='include/linux/crypto.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='encrypt' type-id='type-id-3698' visibility='default' filepath='include/linux/crypto.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='decrypt' type-id='type-id-3698' visibility='default' filepath='include/linux/crypto.h' line='568' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blkcipher_desc' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='193' column='1' id='type-id-3699'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tfm' type-id='type-id-3700' visibility='default' filepath='include/linux/crypto.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='info' type-id='type-id-15' visibility='default' filepath='include/linux/crypto.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='type-id-7' visibility='default' filepath='include/linux/crypto.h' line='196' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='crypto_blkcipher' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='615' column='1' id='type-id-3701'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='type-id-3681' visibility='default' filepath='include/linux/crypto.h' line='616' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cipher_tfm' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='572' column='1' id='type-id-3686'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cit_setkey' type-id='type-id-3697' visibility='default' filepath='include/linux/crypto.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cit_encrypt_one' type-id='type-id-3702' visibility='default' filepath='include/linux/crypto.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cit_decrypt_one' type-id='type-id-3702' visibility='default' filepath='include/linux/crypto.h' line='576' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='compress_tfm' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='579' column='1' id='type-id-3687'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cot_compress' type-id='type-id-3703' visibility='default' filepath='include/linux/crypto.h' line='580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cot_decompress' type-id='type-id-3703' visibility='default' filepath='include/linux/crypto.h' line='583' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='crypto_instance' size-in-bits='5120' is-struct='yes' visibility='default' filepath='include/crypto/algapi.h' line='49' column='1' id='type-id-3704'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alg' type-id='type-id-3668' visibility='default' filepath='include/crypto/algapi.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='tmpl' type-id='type-id-3705' visibility='default' filepath='include/crypto/algapi.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='list' type-id='type-id-520' visibility='default' filepath='include/crypto/algapi.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='__ctx' type-id='type-id-1213' visibility='default' filepath='include/crypto/algapi.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='crypto_template' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/crypto/algapi.h' line='58' column='1' id='type-id-3706'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/crypto/algapi.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='instances' type-id='type-id-186' visibility='default' filepath='include/crypto/algapi.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='module' type-id='type-id-260' visibility='default' filepath='include/crypto/algapi.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='alloc' type-id='type-id-3707' visibility='default' filepath='include/crypto/algapi.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='free' type-id='type-id-3680' visibility='default' filepath='include/crypto/algapi.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='create' type-id='type-id-3708' visibility='default' filepath='include/crypto/algapi.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='name' type-id='type-id-964' visibility='default' filepath='include/crypto/algapi.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rtattr' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/rtnetlink.h' line='174' column='1' id='type-id-3709'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rta_len' type-id='type-id-312' visibility='default' filepath='include/uapi/linux/rtnetlink.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='rta_type' type-id='type-id-312' visibility='default' filepath='include/uapi/linux/rtnetlink.h' line='176' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='512' is-anonymous='yes' visibility='default' filepath='include/linux/crypto.h' line='478' column='1' id='type-id-3670'>
+        <data-member access='private'>
+          <var-decl name='ablkcipher' type-id='type-id-3710' visibility='default' filepath='include/linux/crypto.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='blkcipher' type-id='type-id-3711' visibility='default' filepath='include/linux/crypto.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='cipher' type-id='type-id-3712' visibility='default' filepath='include/linux/crypto.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='compress' type-id='type-id-3713' visibility='default' filepath='include/linux/crypto.h' line='482' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='ablkcipher_alg' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='265' column='1' id='type-id-3710'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='setkey' type-id='type-id-3688' visibility='default' filepath='include/linux/crypto.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='encrypt' type-id='type-id-3689' visibility='default' filepath='include/linux/crypto.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='decrypt' type-id='type-id-3689' visibility='default' filepath='include/linux/crypto.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='givencrypt' type-id='type-id-3714' visibility='default' filepath='include/linux/crypto.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='givdecrypt' type-id='type-id-3714' visibility='default' filepath='include/linux/crypto.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='geniv' type-id='type-id-4' visibility='default' filepath='include/linux/crypto.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='min_keysize' type-id='type-id-5' visibility='default' filepath='include/linux/crypto.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='max_keysize' type-id='type-id-5' visibility='default' filepath='include/linux/crypto.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ivsize' type-id='type-id-5' visibility='default' filepath='include/linux/crypto.h' line='277' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blkcipher_alg' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='292' column='1' id='type-id-3711'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='setkey' type-id='type-id-3697' visibility='default' filepath='include/linux/crypto.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='encrypt' type-id='type-id-3698' visibility='default' filepath='include/linux/crypto.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='decrypt' type-id='type-id-3698' visibility='default' filepath='include/linux/crypto.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='geniv' type-id='type-id-4' visibility='default' filepath='include/linux/crypto.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='min_keysize' type-id='type-id-5' visibility='default' filepath='include/linux/crypto.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='max_keysize' type-id='type-id-5' visibility='default' filepath='include/linux/crypto.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ivsize' type-id='type-id-5' visibility='default' filepath='include/linux/crypto.h' line='306' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cipher_alg' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='356' column='1' id='type-id-3712'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cia_min_keysize' type-id='type-id-5' visibility='default' filepath='include/linux/crypto.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cia_max_keysize' type-id='type-id-5' visibility='default' filepath='include/linux/crypto.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cia_setkey' type-id='type-id-3697' visibility='default' filepath='include/linux/crypto.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cia_encrypt' type-id='type-id-3702' visibility='default' filepath='include/linux/crypto.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cia_decrypt' type-id='type-id-3702' visibility='default' filepath='include/linux/crypto.h' line='362' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='compress_alg' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='365' column='1' id='type-id-3713'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='coa_compress' type-id='type-id-3703' visibility='default' filepath='include/linux/crypto.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='coa_decompress' type-id='type-id-3703' visibility='default' filepath='include/linux/crypto.h' line='368' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='crypto_queue' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/crypto/algapi.h' line='78' column='1' id='type-id-3715'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/crypto/algapi.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='backlog' type-id='type-id-877' visibility='default' filepath='include/crypto/algapi.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='qlen' type-id='type-id-5' visibility='default' filepath='include/crypto/algapi.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='max_qlen' type-id='type-id-5' visibility='default' filepath='include/crypto/algapi.h' line='83' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-3692' size-in-bits='64' id='type-id-3716'/>
+      <pointer-type-def type-id='type-id-3699' size-in-bits='64' id='type-id-3717'/>
+      <qualified-type-def type-id='type-id-3674' const='yes' id='type-id-3718'/>
+      <pointer-type-def type-id='type-id-3718' size-in-bits='64' id='type-id-3669'/>
+      <pointer-type-def type-id='type-id-3691' size-in-bits='64' id='type-id-3690'/>
+      <pointer-type-def type-id='type-id-3668' size-in-bits='64' id='type-id-3683'/>
+      <pointer-type-def type-id='type-id-3693' size-in-bits='64' id='type-id-3719'/>
+      <pointer-type-def type-id='type-id-3701' size-in-bits='64' id='type-id-3700'/>
+      <pointer-type-def type-id='type-id-3704' size-in-bits='64' id='type-id-3720'/>
+      <pointer-type-def type-id='type-id-3721' size-in-bits='64' id='type-id-3707'/>
+      <pointer-type-def type-id='type-id-3715' size-in-bits='64' id='type-id-3722'/>
+      <pointer-type-def type-id='type-id-3706' size-in-bits='64' id='type-id-3705'/>
+      <pointer-type-def type-id='type-id-3681' size-in-bits='64' id='type-id-3695'/>
+      <pointer-type-def type-id='type-id-3723' size-in-bits='64' id='type-id-3689'/>
+      <pointer-type-def type-id='type-id-3724' size-in-bits='64' id='type-id-3698'/>
+      <pointer-type-def type-id='type-id-3725' size-in-bits='64' id='type-id-3688'/>
+      <pointer-type-def type-id='type-id-3726' size-in-bits='64' id='type-id-3708'/>
+      <pointer-type-def type-id='type-id-3727' size-in-bits='64' id='type-id-3671'/>
+      <pointer-type-def type-id='type-id-3728' size-in-bits='64' id='type-id-3697'/>
+      <pointer-type-def type-id='type-id-3729' size-in-bits='64' id='type-id-3703'/>
+      <pointer-type-def type-id='type-id-3730' size-in-bits='64' id='type-id-3677'/>
+      <pointer-type-def type-id='type-id-3731' size-in-bits='64' id='type-id-3679'/>
+      <pointer-type-def type-id='type-id-3732' size-in-bits='64' id='type-id-3714'/>
+      <pointer-type-def type-id='type-id-3709' size-in-bits='64' id='type-id-3733'/>
+      <pointer-type-def type-id='type-id-3733' size-in-bits='64' id='type-id-3734'/>
+      <pointer-type-def type-id='type-id-3667' size-in-bits='64' id='type-id-3735'/>
+      <pointer-type-def type-id='type-id-3736' size-in-bits='64' id='type-id-3676'/>
+      <pointer-type-def type-id='type-id-3737' size-in-bits='64' id='type-id-3675'/>
+      <pointer-type-def type-id='type-id-3738' size-in-bits='64' id='type-id-3673'/>
+      <pointer-type-def type-id='type-id-3739' size-in-bits='64' id='type-id-3696'/>
+      <pointer-type-def type-id='type-id-3740' size-in-bits='64' id='type-id-3680'/>
+      <pointer-type-def type-id='type-id-3741' size-in-bits='64' id='type-id-3672'/>
+      <pointer-type-def type-id='type-id-3742' size-in-bits='64' id='type-id-3702'/>
+      <pointer-type-def type-id='type-id-3743' size-in-bits='64' id='type-id-3678'/>
+      <function-decl name='crypto_register_alg' mangled-name='crypto_register_alg' filepath='crypto/algapi.c' line='375' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_register_alg'>
+        <parameter type-id='type-id-3683' name='alg' filepath='crypto/algapi.c' line='375' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='crypto_unregister_alg' mangled-name='crypto_unregister_alg' filepath='crypto/algapi.c' line='410' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_unregister_alg'>
+        <parameter type-id='type-id-3683' name='alg' filepath='crypto/algapi.c' line='410' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='crypto_init_queue' mangled-name='crypto_init_queue' filepath='crypto/algapi.c' line='894' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_init_queue'>
+        <parameter type-id='type-id-3722' name='queue' filepath='crypto/algapi.c' line='894' column='1'/>
+        <parameter type-id='type-id-5' name='max_qlen' filepath='crypto/algapi.c' line='894' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='crypto_enqueue_request' mangled-name='crypto_enqueue_request' filepath='crypto/algapi.c' line='903' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_enqueue_request'>
+        <parameter type-id='type-id-3722' name='queue' filepath='crypto/algapi.c' line='903' column='1'/>
+        <parameter type-id='type-id-3719' name='request' filepath='crypto/algapi.c' line='904' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='crypto_dequeue_request' mangled-name='crypto_dequeue_request' filepath='crypto/algapi.c' line='926' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_dequeue_request'>
+        <parameter type-id='type-id-3722' name='queue' filepath='crypto/algapi.c' line='926' column='1'/>
+        <return type-id='type-id-3719'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-3721'>
+        <parameter type-id='type-id-3734'/>
+        <return type-id='type-id-3720'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3723'>
+        <parameter type-id='type-id-3716'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3724'>
+        <parameter type-id='type-id-3717'/>
+        <parameter type-id='type-id-920'/>
+        <parameter type-id='type-id-920'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3725'>
+        <parameter type-id='type-id-3690'/>
+        <parameter type-id='type-id-658'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3726'>
+        <parameter type-id='type-id-3705'/>
+        <parameter type-id='type-id-3734'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3727'>
+        <parameter type-id='type-id-3695'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3728'>
+        <parameter type-id='type-id-3695'/>
+        <parameter type-id='type-id-658'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3729'>
+        <parameter type-id='type-id-3695'/>
+        <parameter type-id='type-id-658'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-3121'/>
+        <parameter type-id='type-id-482'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3730'>
+        <parameter type-id='type-id-3695'/>
+        <parameter type-id='type-id-7'/>
+        <parameter type-id='type-id-7'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3731'>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-3683'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3732'>
+        <parameter type-id='type-id-3735'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3736'>
+        <parameter type-id='type-id-3683'/>
+        <return type-id='type-id-5'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3737'>
+        <parameter type-id='type-id-3683'/>
+        <parameter type-id='type-id-7'/>
+        <parameter type-id='type-id-7'/>
+        <return type-id='type-id-5'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3738'>
+        <parameter type-id='type-id-3683'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3739'>
+        <parameter type-id='type-id-3719'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3740'>
+        <parameter type-id='type-id-3720'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3741'>
+        <parameter type-id='type-id-3695'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3742'>
+        <parameter type-id='type-id-3695'/>
+        <parameter type-id='type-id-3121'/>
+        <parameter type-id='type-id-658'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3743'>
+        <parameter type-id='type-id-88'/>
+        <parameter type-id='type-id-3683'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='block/blk-mq.c' language='LANG_C89'>
+      <function-decl name='blk_mq_alloc_tag_set' mangled-name='blk_mq_alloc_tag_set' filepath='block/blk-mq.c' line='2774' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_alloc_tag_set'>
+        <parameter type-id='type-id-3744' name='set' filepath='block/blk-mq.c' line='2774' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='blk_mq_run_hw_queues' mangled-name='blk_mq_run_hw_queues' filepath='block/blk-mq.c' line='1421' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_run_hw_queues'>
+        <parameter type-id='type-id-378' name='q' filepath='block/blk-mq.c' line='1421' column='1'/>
+        <parameter type-id='type-id-33' name='async' filepath='block/blk-mq.c' line='1421' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='blk_mq_quiesce_queue' mangled-name='blk_mq_quiesce_queue' filepath='block/blk-mq.c' line='226' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_quiesce_queue'>
+        <parameter type-id='type-id-378' name='q' filepath='block/blk-mq.c' line='226' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='blk_mq_unquiesce_queue' mangled-name='blk_mq_unquiesce_queue' filepath='block/blk-mq.c' line='252' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_unquiesce_queue'>
+        <parameter type-id='type-id-378' name='q' filepath='block/blk-mq.c' line='252' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='__blk_mq_end_request' mangled-name='__blk_mq_end_request' filepath='block/blk-mq.c' line='520' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__blk_mq_end_request'>
+        <parameter type-id='type-id-463' name='rq' filepath='block/blk-mq.c' line='520' column='1'/>
+        <parameter type-id='type-id-361' name='error' filepath='block/blk-mq.c' line='520' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='blk_mq_end_request' mangled-name='blk_mq_end_request' filepath='block/blk-mq.c' line='542' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_end_request'>
+        <parameter type-id='type-id-463' name='rq' filepath='block/blk-mq.c' line='542' column='1'/>
+        <parameter type-id='type-id-361' name='error' filepath='block/blk-mq.c' line='542' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='blk_mq_complete_request' mangled-name='blk_mq_complete_request' filepath='block/blk-mq.c' line='616' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_complete_request'>
+        <parameter type-id='type-id-463' name='rq' filepath='block/blk-mq.c' line='616' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='blk_mq_start_request' mangled-name='blk_mq_start_request' filepath='block/blk-mq.c' line='630' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_start_request'>
+        <parameter type-id='type-id-463' name='rq' filepath='block/blk-mq.c' line='630' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='blk_mq_requeue_request' mangled-name='blk_mq_requeue_request' filepath='block/blk-mq.c' line='680' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_requeue_request'>
+        <parameter type-id='type-id-463' name='rq' filepath='block/blk-mq.c' line='680' column='1'/>
+        <parameter type-id='type-id-33' name='kick_requeue_list' filepath='block/blk-mq.c' line='680' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='blk_mq_stop_hw_queue' mangled-name='blk_mq_stop_hw_queue' filepath='block/blk-mq.c' line='1464' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_stop_hw_queue'>
+        <parameter type-id='type-id-3745' name='hctx' filepath='block/blk-mq.c' line='1464' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='blk_mq_start_stopped_hw_queues' mangled-name='blk_mq_start_stopped_hw_queues' filepath='block/blk-mq.c' line='1519' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_start_stopped_hw_queues'>
+        <parameter type-id='type-id-378' name='q' filepath='block/blk-mq.c' line='1519' column='1'/>
+        <parameter type-id='type-id-33' name='async' filepath='block/blk-mq.c' line='1519' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='blk_mq_init_queue' mangled-name='blk_mq_init_queue' filepath='block/blk-mq.c' line='2487' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_init_queue'>
+        <parameter type-id='type-id-3744' name='set' filepath='block/blk-mq.c' line='2487' column='1'/>
+        <return type-id='type-id-378'/>
+      </function-decl>
+      <function-decl name='blk_mq_free_tag_set' mangled-name='blk_mq_free_tag_set' filepath='block/blk-mq.c' line='2848' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_free_tag_set'>
+        <parameter type-id='type-id-3744' name='set' filepath='block/blk-mq.c' line='2848' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='block/blk-core.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='type-id-3746' size-in-bits='256' id='type-id-3747'>
+        <subrange length='4' type-id='type-id-9' id='type-id-107'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-20' size-in-bits='256' id='type-id-3748'>
+        <subrange length='2' type-id='type-id-9' id='type-id-128'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-3749' size-in-bits='192' id='type-id-3750'>
+        <subrange length='3' type-id='type-id-9' id='type-id-196'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-3751' size-in-bits='2304' id='type-id-3752'>
+        <subrange length='3' type-id='type-id-9' id='type-id-196'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-3753' size-in-bits='infinite' id='type-id-3754'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-16' size-in-bits='448' id='type-id-3755'>
+        <subrange length='7' type-id='type-id-9' id='type-id-125'/>
+
+      </array-type-def>
+      <class-decl name='__anonymous_struct__' size-in-bits='512' is-struct='yes' is-anonymous='yes' visibility='default' filepath='block/blk-mq.h' line='14' column='1' id='type-id-3756'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='block/blk-mq.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rq_list' type-id='type-id-20' visibility='default' filepath='block/blk-mq.h' line='16' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' is-anonymous='yes' visibility='default' filepath='include/linux/blk_types.h' line='191' column='1' id='type-id-3757'/>
+      <class-decl name='rq_qos_ops' size-in-bits='512' is-struct='yes' visibility='default' filepath='block/blk-rq-qos.h' line='27' column='1' id='type-id-3758'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='throttle' type-id='type-id-3759' visibility='default' filepath='block/blk-rq-qos.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='track' type-id='type-id-3760' visibility='default' filepath='block/blk-rq-qos.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='issue' type-id='type-id-3761' visibility='default' filepath='block/blk-rq-qos.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='requeue' type-id='type-id-3761' visibility='default' filepath='block/blk-rq-qos.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='done' type-id='type-id-3761' visibility='default' filepath='block/blk-rq-qos.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='done_bio' type-id='type-id-3762' visibility='default' filepath='block/blk-rq-qos.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cleanup' type-id='type-id-3762' visibility='default' filepath='block/blk-rq-qos.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='exit' type-id='type-id-3763' visibility='default' filepath='block/blk-rq-qos.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='rq_qos_id' filepath='block/blk-rq-qos.h' line='10' column='1' id='type-id-3764'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='RQ_QOS_WBT' value='0'/>
+        <enumerator name='RQ_QOS_CGROUP' value='1'/>
+      </enum-decl>
+      <typedef-decl name='queue_rq_fn' type-id='type-id-3765' filepath='include/linux/blk-mq.h' line='100' column='1' id='type-id-3766'/>
+      <class-decl name='blk_mq_hw_ctx' size-in-bits='4608' is-struct='yes' visibility='default' filepath='include/linux/blk-mq.h' line='15' column='1' id='type-id-3767'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='type-id-3768' visibility='default' filepath='include/linux/blk-mq.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='run_work' type-id='type-id-411' visibility='default' filepath='include/linux/blk-mq.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='cpumask' type-id='type-id-38' visibility='default' filepath='include/linux/blk-mq.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='next_cpu' type-id='type-id-17' visibility='default' filepath='include/linux/blk-mq.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='next_cpu_batch' type-id='type-id-17' visibility='default' filepath='include/linux/blk-mq.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='include/linux/blk-mq.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='sched_data' type-id='type-id-15' visibility='default' filepath='include/linux/blk-mq.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='queue' type-id='type-id-378' visibility='default' filepath='include/linux/blk-mq.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='fq' type-id='type-id-3769' visibility='default' filepath='include/linux/blk-mq.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='driver_data' type-id='type-id-15' visibility='default' filepath='include/linux/blk-mq.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='ctx_map' type-id='type-id-3770' visibility='default' filepath='include/linux/blk-mq.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='dispatch_from' type-id='type-id-483' visibility='default' filepath='include/linux/blk-mq.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='dispatch_busy' type-id='type-id-5' visibility='default' filepath='include/linux/blk-mq.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='nr_ctx' type-id='type-id-5' visibility='default' filepath='include/linux/blk-mq.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='ctxs' type-id='type-id-3771' visibility='default' filepath='include/linux/blk-mq.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='dispatch_wait_lock' type-id='type-id-247' visibility='default' filepath='include/linux/blk-mq.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='dispatch_wait' type-id='type-id-3380' visibility='default' filepath='include/linux/blk-mq.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='wait_index' type-id='type-id-26' visibility='default' filepath='include/linux/blk-mq.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='tags' type-id='type-id-3772' visibility='default' filepath='include/linux/blk-mq.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='sched_tags' type-id='type-id-3772' visibility='default' filepath='include/linux/blk-mq.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='queued' type-id='type-id-16' visibility='default' filepath='include/linux/blk-mq.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='run' type-id='type-id-16' visibility='default' filepath='include/linux/blk-mq.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='dispatched' type-id='type-id-3755' visibility='default' filepath='include/linux/blk-mq.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='numa_node' type-id='type-id-5' visibility='default' filepath='include/linux/blk-mq.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3232'>
+          <var-decl name='queue_num' type-id='type-id-5' visibility='default' filepath='include/linux/blk-mq.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='nr_active' type-id='type-id-26' visibility='default' filepath='include/linux/blk-mq.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3296'>
+          <var-decl name='nr_expired' type-id='type-id-5' visibility='default' filepath='include/linux/blk-mq.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='cpuhp_dead' type-id='type-id-520' visibility='default' filepath='include/linux/blk-mq.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='kobj' type-id='type-id-267' visibility='default' filepath='include/linux/blk-mq.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='poll_considered' type-id='type-id-16' visibility='default' filepath='include/linux/blk-mq.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='poll_invoked' type-id='type-id-16' visibility='default' filepath='include/linux/blk-mq.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='poll_success' type-id='type-id-16' visibility='default' filepath='include/linux/blk-mq.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='debugfs_dir' type-id='type-id-23' visibility='default' filepath='include/linux/blk-mq.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='sched_debugfs_dir' type-id='type-id-23' visibility='default' filepath='include/linux/blk-mq.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='srcu' type-id='type-id-3754' visibility='default' filepath='include/linux/blk-mq.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='512' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/blk-mq.h' line='16' column='1' id='type-id-3768'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='include/linux/blk-mq.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dispatch' type-id='type-id-20' visibility='default' filepath='include/linux/blk-mq.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='state' type-id='type-id-16' visibility='default' filepath='include/linux/blk-mq.h' line='19' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_flush_queue' size-in-bits='704' is-struct='yes' visibility='default' filepath='block/blk.h' line='22' column='1' id='type-id-3773'>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='flush_queue_delayed' type-id='type-id-5' visibility='default' filepath='block/blk.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='flush_pending_idx' type-id='type-id-5' visibility='default' filepath='block/blk.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='flush_running_idx' type-id='type-id-5' visibility='default' filepath='block/blk.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='rq_status' type-id='type-id-361' visibility='default' filepath='block/blk.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flush_pending_since' type-id='type-id-16' visibility='default' filepath='block/blk.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flush_queue' type-id='type-id-3748' visibility='default' filepath='block/blk.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flush_data_in_flight' type-id='type-id-20' visibility='default' filepath='block/blk.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='flush_rq' type-id='type-id-463' visibility='default' filepath='block/blk.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='orig_rq' type-id='type-id-463' visibility='default' filepath='block/blk.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mq_flush_lock' type-id='type-id-247' visibility='default' filepath='block/blk.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sbitmap' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/sbitmap.h' line='49' column='1' id='type-id-3770'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='depth' type-id='type-id-5' visibility='default' filepath='include/linux/sbitmap.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='shift' type-id='type-id-5' visibility='default' filepath='include/linux/sbitmap.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='map_nr' type-id='type-id-5' visibility='default' filepath='include/linux/sbitmap.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map' type-id='type-id-3774' visibility='default' filepath='include/linux/sbitmap.h' line='68' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sbitmap_word' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/sbitmap.h' line='31' column='1' id='type-id-3775'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='word' type-id='type-id-16' visibility='default' filepath='include/linux/sbitmap.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='depth' type-id='type-id-16' visibility='default' filepath='include/linux/sbitmap.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_mq_tags' size-in-bits='1280' is-struct='yes' visibility='default' filepath='block/blk-mq-tag.h' line='10' column='1' id='type-id-3776'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nr_tags' type-id='type-id-5' visibility='default' filepath='block/blk-mq-tag.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nr_reserved_tags' type-id='type-id-5' visibility='default' filepath='block/blk-mq-tag.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='active_queues' type-id='type-id-26' visibility='default' filepath='block/blk-mq-tag.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bitmap_tags' type-id='type-id-3777' visibility='default' filepath='block/blk-mq-tag.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='breserved_tags' type-id='type-id-3777' visibility='default' filepath='block/blk-mq-tag.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='rqs' type-id='type-id-643' visibility='default' filepath='block/blk-mq-tag.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='static_rqs' type-id='type-id-643' visibility='default' filepath='block/blk-mq-tag.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='page_list' type-id='type-id-20' visibility='default' filepath='block/blk-mq-tag.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sbitmap_queue' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/sbitmap.h' line='98' column='1' id='type-id-3777'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sb' type-id='type-id-3770' visibility='default' filepath='include/linux/sbitmap.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='alloc_hint' type-id='type-id-482' visibility='default' filepath='include/linux/sbitmap.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='wake_batch' type-id='type-id-5' visibility='default' filepath='include/linux/sbitmap.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='wake_index' type-id='type-id-26' visibility='default' filepath='include/linux/sbitmap.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ws' type-id='type-id-3778' visibility='default' filepath='include/linux/sbitmap.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='round_robin' type-id='type-id-33' visibility='default' filepath='include/linux/sbitmap.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='min_shallow_depth' type-id='type-id-5' visibility='default' filepath='include/linux/sbitmap.h' line='137' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sbq_wait_state' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/sbitmap.h' line='77' column='1' id='type-id-3779'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wait_cnt' type-id='type-id-26' visibility='default' filepath='include/linux/sbitmap.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait' type-id='type-id-225' visibility='default' filepath='include/linux/sbitmap.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='srcu_struct' size-in-bits='4800' is-struct='yes' visibility='default' filepath='include/linux/srcutree.h' line='76' column='1' id='type-id-3753'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='type-id-3752' visibility='default' filepath='include/linux/srcutree.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='level' type-id='type-id-3750' visibility='default' filepath='include/linux/srcutree.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='srcu_cb_mutex' type-id='type-id-245' visibility='default' filepath='include/linux/srcutree.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='include/linux/srcutree.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='srcu_gp_mutex' type-id='type-id-245' visibility='default' filepath='include/linux/srcutree.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='srcu_idx' type-id='type-id-5' visibility='default' filepath='include/linux/srcutree.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='srcu_gp_seq' type-id='type-id-16' visibility='default' filepath='include/linux/srcutree.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='srcu_gp_seq_needed' type-id='type-id-16' visibility='default' filepath='include/linux/srcutree.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='srcu_gp_seq_needed_exp' type-id='type-id-16' visibility='default' filepath='include/linux/srcutree.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='srcu_last_gp_end' type-id='type-id-16' visibility='default' filepath='include/linux/srcutree.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='sda' type-id='type-id-3780' visibility='default' filepath='include/linux/srcutree.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='srcu_barrier_seq' type-id='type-id-16' visibility='default' filepath='include/linux/srcutree.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='srcu_barrier_mutex' type-id='type-id-245' visibility='default' filepath='include/linux/srcutree.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='srcu_barrier_completion' type-id='type-id-1608' visibility='default' filepath='include/linux/srcutree.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='srcu_barrier_cpu_cnt' type-id='type-id-26' visibility='default' filepath='include/linux/srcutree.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='work' type-id='type-id-411' visibility='default' filepath='include/linux/srcutree.h' line='96' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='srcu_node' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/srcutree.h' line='60' column='1' id='type-id-3751'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='include/linux/srcutree.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='srcu_have_cbs' type-id='type-id-222' visibility='default' filepath='include/linux/srcutree.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='srcu_data_have_cbs' type-id='type-id-222' visibility='default' filepath='include/linux/srcutree.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='srcu_gp_seq_needed_exp' type-id='type-id-16' visibility='default' filepath='include/linux/srcutree.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='srcu_parent' type-id='type-id-3749' visibility='default' filepath='include/linux/srcutree.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='grplo' type-id='type-id-17' visibility='default' filepath='include/linux/srcutree.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='grphi' type-id='type-id-17' visibility='default' filepath='include/linux/srcutree.h' line='70' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='srcu_data' size-in-bits='2560' is-struct='yes' visibility='default' filepath='include/linux/srcutree.h' line='37' column='1' id='type-id-3781'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='srcu_lock_count' type-id='type-id-219' visibility='default' filepath='include/linux/srcutree.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='srcu_unlock_count' type-id='type-id-219' visibility='default' filepath='include/linux/srcutree.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='include/linux/srcutree.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='srcu_cblist' type-id='type-id-3782' visibility='default' filepath='include/linux/srcutree.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='srcu_gp_seq_needed' type-id='type-id-16' visibility='default' filepath='include/linux/srcutree.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='srcu_gp_seq_needed_exp' type-id='type-id-16' visibility='default' filepath='include/linux/srcutree.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='srcu_cblist_invoking' type-id='type-id-33' visibility='default' filepath='include/linux/srcutree.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='work' type-id='type-id-411' visibility='default' filepath='include/linux/srcutree.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='srcu_barrier_head' type-id='type-id-385' visibility='default' filepath='include/linux/srcutree.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='mynode' type-id='type-id-3749' visibility='default' filepath='include/linux/srcutree.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='grpmask' type-id='type-id-16' visibility='default' filepath='include/linux/srcutree.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='cpu' type-id='type-id-17' visibility='default' filepath='include/linux/srcutree.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='sp' type-id='type-id-3783' visibility='default' filepath='include/linux/srcutree.h' line='54' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rcu_segcblist' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/rcu_segcblist.h' line='77' column='1' id='type-id-3782'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='type-id-91' visibility='default' filepath='include/linux/rcu_segcblist.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tails' type-id='type-id-3747' visibility='default' filepath='include/linux/rcu_segcblist.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='gp_seq' type-id='type-id-222' visibility='default' filepath='include/linux/rcu_segcblist.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='len' type-id='type-id-192' visibility='default' filepath='include/linux/rcu_segcblist.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='len_lazy' type-id='type-id-192' visibility='default' filepath='include/linux/rcu_segcblist.h' line='82' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_mq_queue_data' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/blk-mq.h' line='95' column='1' id='type-id-3784'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rq' type-id='type-id-463' visibility='default' filepath='include/linux/blk-mq.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='last' type-id='type-id-33' visibility='default' filepath='include/linux/blk-mq.h' line='97' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='get_budget_fn' type-id='type-id-3785' filepath='include/linux/blk-mq.h' line='102' column='1' id='type-id-3786'/>
+      <typedef-decl name='put_budget_fn' type-id='type-id-3787' filepath='include/linux/blk-mq.h' line='103' column='1' id='type-id-3788'/>
+      <typedef-decl name='timeout_fn' type-id='type-id-3789' filepath='include/linux/blk-mq.h' line='104' column='1' id='type-id-3790'/>
+      <typedef-decl name='poll_fn' type-id='type-id-3791' filepath='include/linux/blk-mq.h' line='115' column='1' id='type-id-3792'/>
+      <typedef-decl name='init_hctx_fn' type-id='type-id-3793' filepath='include/linux/blk-mq.h' line='105' column='1' id='type-id-3794'/>
+      <typedef-decl name='exit_hctx_fn' type-id='type-id-3795' filepath='include/linux/blk-mq.h' line='106' column='1' id='type-id-3796'/>
+      <typedef-decl name='init_request_fn' type-id='type-id-3797' filepath='include/linux/blk-mq.h' line='107' column='1' id='type-id-3798'/>
+      <class-decl name='blk_mq_tag_set' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/linux/blk-mq.h' line='77' column='1' id='type-id-3799'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mq_map' type-id='type-id-482' visibility='default' filepath='include/linux/blk-mq.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='type-id-481' visibility='default' filepath='include/linux/blk-mq.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nr_hw_queues' type-id='type-id-5' visibility='default' filepath='include/linux/blk-mq.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='queue_depth' type-id='type-id-5' visibility='default' filepath='include/linux/blk-mq.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reserved_tags' type-id='type-id-5' visibility='default' filepath='include/linux/blk-mq.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='cmd_size' type-id='type-id-5' visibility='default' filepath='include/linux/blk-mq.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='numa_node' type-id='type-id-17' visibility='default' filepath='include/linux/blk-mq.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='timeout' type-id='type-id-5' visibility='default' filepath='include/linux/blk-mq.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='flags' type-id='type-id-5' visibility='default' filepath='include/linux/blk-mq.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='driver_data' type-id='type-id-15' visibility='default' filepath='include/linux/blk-mq.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='tags' type-id='type-id-3800' visibility='default' filepath='include/linux/blk-mq.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='tag_list_lock' type-id='type-id-245' visibility='default' filepath='include/linux/blk-mq.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='tag_list' type-id='type-id-20' visibility='default' filepath='include/linux/blk-mq.h' line='92' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='exit_request_fn' type-id='type-id-3801' filepath='include/linux/blk-mq.h' line='109' column='1' id='type-id-3802'/>
+      <typedef-decl name='cleanup_rq_fn' type-id='type-id-590' filepath='include/linux/blk-mq.h' line='117' column='1' id='type-id-3803'/>
+      <typedef-decl name='map_queues_fn' type-id='type-id-3804' filepath='include/linux/blk-mq.h' line='116' column='1' id='type-id-3805'/>
+      <typedef-decl name='blk_mq_req_flags_t' type-id='type-id-511' filepath='include/linux/blk_types.h' line='266' column='1' id='type-id-3806'/>
+      <pointer-type-def type-id='type-id-3773' size-in-bits='64' id='type-id-3769'/>
+      <pointer-type-def type-id='type-id-483' size-in-bits='64' id='type-id-3771'/>
+      <pointer-type-def type-id='type-id-3767' size-in-bits='64' id='type-id-3745'/>
+      <pointer-type-def type-id='type-id-3745' size-in-bits='64' id='type-id-3807'/>
+      <pointer-type-def type-id='type-id-3799' size-in-bits='64' id='type-id-3744'/>
+      <pointer-type-def type-id='type-id-3776' size-in-bits='64' id='type-id-3772'/>
+      <pointer-type-def type-id='type-id-3772' size-in-bits='64' id='type-id-3800'/>
+      <pointer-type-def type-id='type-id-133' size-in-bits='64' id='type-id-3808'/>
+      <pointer-type-def type-id='type-id-91' size-in-bits='64' id='type-id-3746'/>
+      <pointer-type-def type-id='type-id-3803' size-in-bits='64' id='type-id-3809'/>
+      <qualified-type-def type-id='type-id-3784' const='yes' id='type-id-3810'/>
+      <pointer-type-def type-id='type-id-3810' size-in-bits='64' id='type-id-3811'/>
+      <qualified-type-def type-id='type-id-499' const='yes' id='type-id-3812'/>
+      <pointer-type-def type-id='type-id-3812' size-in-bits='64' id='type-id-3813'/>
+      <pointer-type-def type-id='type-id-3796' size-in-bits='64' id='type-id-3814'/>
+      <pointer-type-def type-id='type-id-3802' size-in-bits='64' id='type-id-3815'/>
+      <pointer-type-def type-id='type-id-3786' size-in-bits='64' id='type-id-3816'/>
+      <pointer-type-def type-id='type-id-3794' size-in-bits='64' id='type-id-3817'/>
+      <pointer-type-def type-id='type-id-3798' size-in-bits='64' id='type-id-3818'/>
+      <pointer-type-def type-id='type-id-3819' size-in-bits='64' id='type-id-3820'/>
+      <pointer-type-def type-id='type-id-3805' size-in-bits='64' id='type-id-3821'/>
+      <pointer-type-def type-id='type-id-3792' size-in-bits='64' id='type-id-3822'/>
+      <pointer-type-def type-id='type-id-3788' size-in-bits='64' id='type-id-3823'/>
+      <pointer-type-def type-id='type-id-3766' size-in-bits='64' id='type-id-3824'/>
+      <pointer-type-def type-id='type-id-3758' size-in-bits='64' id='type-id-3825'/>
+      <pointer-type-def type-id='type-id-3775' size-in-bits='64' id='type-id-3774'/>
+      <pointer-type-def type-id='type-id-3779' size-in-bits='64' id='type-id-3778'/>
+      <pointer-type-def type-id='type-id-3781' size-in-bits='64' id='type-id-3780'/>
+      <pointer-type-def type-id='type-id-3751' size-in-bits='64' id='type-id-3749'/>
+      <pointer-type-def type-id='type-id-3753' size-in-bits='64' id='type-id-3783'/>
+      <pointer-type-def type-id='type-id-3790' size-in-bits='64' id='type-id-3826'/>
+      <pointer-type-def type-id='type-id-3827' size-in-bits='64' id='type-id-3828'/>
+      <pointer-type-def type-id='type-id-3829' size-in-bits='64' id='type-id-3763'/>
+      <pointer-type-def type-id='type-id-3830' size-in-bits='64' id='type-id-3762'/>
+      <pointer-type-def type-id='type-id-3831' size-in-bits='64' id='type-id-3759'/>
+      <pointer-type-def type-id='type-id-3832' size-in-bits='64' id='type-id-3761'/>
+      <pointer-type-def type-id='type-id-3833' size-in-bits='64' id='type-id-3760'/>
+      <pointer-type-def type-id='type-id-3834' size-in-bits='64' id='type-id-3835'/>
+      <function-decl name='blk_queue_flag_set' mangled-name='blk_queue_flag_set' filepath='block/blk-core.c' line='81' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_flag_set'>
+        <parameter type-id='type-id-5' name='flag' filepath='block/blk-core.c' line='81' column='1'/>
+        <parameter type-id='type-id-378' name='q' filepath='block/blk-core.c' line='81' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='blk_queue_flag_clear' mangled-name='blk_queue_flag_clear' filepath='block/blk-core.c' line='96' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_flag_clear'>
+        <parameter type-id='type-id-5' name='flag' filepath='block/blk-core.c' line='96' column='1'/>
+        <parameter type-id='type-id-378' name='q' filepath='block/blk-core.c' line='96' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='blk_status_to_errno' mangled-name='blk_status_to_errno' filepath='block/blk-core.c' line='244' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_status_to_errno'>
+        <parameter type-id='type-id-361' name='status' filepath='block/blk-core.c' line='244' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='blk_put_queue' mangled-name='blk_put_queue' filepath='block/blk-core.c' line='540' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_put_queue'>
+        <parameter type-id='type-id-378' name='q' filepath='block/blk-core.c' line='540' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='blk_cleanup_queue' mangled-name='blk_cleanup_queue' filepath='block/blk-core.c' line='757' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_cleanup_queue'>
+        <parameter type-id='type-id-378' name='q' filepath='block/blk-core.c' line='757' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='blk_get_queue' mangled-name='blk_get_queue' filepath='block/blk-core.c' line='1207' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_get_queue'>
+        <parameter type-id='type-id-378' name='q' filepath='block/blk-core.c' line='1207' column='1'/>
+        <return type-id='type-id-33'/>
+      </function-decl>
+      <function-decl name='blk_get_request' mangled-name='blk_get_request' filepath='block/blk-core.c' line='1624' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_get_request'>
+        <parameter type-id='type-id-378' name='q' filepath='block/blk-core.c' line='1624' column='1'/>
+        <parameter type-id='type-id-5' name='op' filepath='block/blk-core.c' line='1624' column='1'/>
+        <parameter type-id='type-id-3806' name='flags' filepath='block/blk-core.c' line='1625' column='1'/>
+        <return type-id='type-id-463'/>
+      </function-decl>
+      <function-decl name='blk_put_request' mangled-name='blk_put_request' filepath='block/blk-core.c' line='1792' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_put_request'>
+        <parameter type-id='type-id-463' name='req' filepath='block/blk-core.c' line='1792' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='blk_update_request' mangled-name='blk_update_request' filepath='block/blk-core.c' line='3110' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_update_request'>
+        <parameter type-id='type-id-463' name='req' filepath='block/blk-core.c' line='3110' column='1'/>
+        <parameter type-id='type-id-361' name='error' filepath='block/blk-core.c' line='3110' column='1'/>
+        <parameter type-id='type-id-5' name='nr_bytes' filepath='block/blk-core.c' line='3111' column='1'/>
+        <return type-id='type-id-33'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-3789'>
+        <parameter type-id='type-id-463'/>
+        <parameter type-id='type-id-33'/>
+        <return type-id='type-id-634'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3791'>
+        <parameter type-id='type-id-3745'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3793'>
+        <parameter type-id='type-id-3745'/>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3804'>
+        <parameter type-id='type-id-3744'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3797'>
+        <parameter type-id='type-id-3744'/>
+        <parameter type-id='type-id-463'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3819'>
+        <parameter type-id='type-id-3813'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3765'>
+        <parameter type-id='type-id-3745'/>
+        <parameter type-id='type-id-3811'/>
+        <return type-id='type-id-361'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3785'>
+        <parameter type-id='type-id-3745'/>
+        <return type-id='type-id-33'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3787'>
+        <parameter type-id='type-id-3745'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3795'>
+        <parameter type-id='type-id-3745'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3801'>
+        <parameter type-id='type-id-3744'/>
+        <parameter type-id='type-id-463'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3827'>
+        <parameter type-id='type-id-490'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3829'>
+        <parameter type-id='type-id-467'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3830'>
+        <parameter type-id='type-id-467'/>
+        <parameter type-id='type-id-358'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3831'>
+        <parameter type-id='type-id-467'/>
+        <parameter type-id='type-id-358'/>
+        <parameter type-id='type-id-486'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3832'>
+        <parameter type-id='type-id-467'/>
+        <parameter type-id='type-id-463'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3833'>
+        <parameter type-id='type-id-467'/>
+        <parameter type-id='type-id-463'/>
+        <parameter type-id='type-id-358'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3834'>
+        <parameter type-id='type-id-88'/>
+        <parameter type-id='type-id-463'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='block/blk-settings.c' language='LANG_C89'>
+      <class-decl name='cgroup_subsys_state' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-3836'/>
+      <pointer-type-def type-id='type-id-3836' size-in-bits='64' id='type-id-3837'/>
+      <function-decl name='blk_queue_rq_timeout' mangled-name='blk_queue_rq_timeout' filepath='block/blk-settings.c' line='63' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_rq_timeout'>
+        <parameter type-id='type-id-378' name='q' filepath='block/blk-settings.c' line='63' column='1'/>
+        <parameter type-id='type-id-5' name='timeout' filepath='block/blk-settings.c' line='63' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='blk_queue_bounce_limit' mangled-name='blk_queue_bounce_limit' filepath='block/blk-settings.c' line='190' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_bounce_limit'>
+        <parameter type-id='type-id-378' name='q' filepath='block/blk-settings.c' line='190' column='1'/>
+        <parameter type-id='type-id-40' name='max_addr' filepath='block/blk-settings.c' line='190' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='blk_queue_max_hw_sectors' mangled-name='blk_queue_max_hw_sectors' filepath='block/blk-settings.c' line='237' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_max_hw_sectors'>
+        <parameter type-id='type-id-378' name='q' filepath='block/blk-settings.c' line='237' column='1'/>
+        <parameter type-id='type-id-5' name='max_hw_sectors' filepath='block/blk-settings.c' line='237' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='blk_queue_max_discard_sectors' mangled-name='blk_queue_max_discard_sectors' filepath='block/blk-settings.c' line='281' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_max_discard_sectors'>
+        <parameter type-id='type-id-378' name='q' filepath='block/blk-settings.c' line='281' column='1'/>
+        <parameter type-id='type-id-5' name='max_discard_sectors' filepath='block/blk-settings.c' line='282' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='blk_queue_max_segments' mangled-name='blk_queue_max_segments' filepath='block/blk-settings.c' line='323' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_max_segments'>
+        <parameter type-id='type-id-378' name='q' filepath='block/blk-settings.c' line='323' column='1'/>
+        <parameter type-id='type-id-312' name='max_segments' filepath='block/blk-settings.c' line='323' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='blk_queue_max_segment_size' mangled-name='blk_queue_max_segment_size' filepath='block/blk-settings.c' line='360' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_max_segment_size'>
+        <parameter type-id='type-id-378' name='q' filepath='block/blk-settings.c' line='360' column='1'/>
+        <parameter type-id='type-id-5' name='max_size' filepath='block/blk-settings.c' line='360' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='blk_queue_logical_block_size' mangled-name='blk_queue_logical_block_size' filepath='block/blk-settings.c' line='382' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_logical_block_size'>
+        <parameter type-id='type-id-378' name='q' filepath='block/blk-settings.c' line='382' column='1'/>
+        <parameter type-id='type-id-312' name='size' filepath='block/blk-settings.c' line='382' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='blk_queue_physical_block_size' mangled-name='blk_queue_physical_block_size' filepath='block/blk-settings.c' line='404' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_physical_block_size'>
+        <parameter type-id='type-id-378' name='q' filepath='block/blk-settings.c' line='404' column='1'/>
+        <parameter type-id='type-id-5' name='size' filepath='block/blk-settings.c' line='404' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='blk_queue_alignment_offset' mangled-name='blk_queue_alignment_offset' filepath='block/blk-settings.c' line='427' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_alignment_offset'>
+        <parameter type-id='type-id-378' name='q' filepath='block/blk-settings.c' line='427' column='1'/>
+        <parameter type-id='type-id-5' name='offset' filepath='block/blk-settings.c' line='427' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='blk_queue_io_min' mangled-name='blk_queue_io_min' filepath='block/blk-settings.c' line='472' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_io_min'>
+        <parameter type-id='type-id-378' name='q' filepath='block/blk-settings.c' line='472' column='1'/>
+        <parameter type-id='type-id-5' name='min' filepath='block/blk-settings.c' line='472' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='blk_queue_io_opt' mangled-name='blk_queue_io_opt' filepath='block/blk-settings.c' line='510' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_io_opt'>
+        <parameter type-id='type-id-378' name='q' filepath='block/blk-settings.c' line='510' column='1'/>
+        <parameter type-id='type-id-5' name='opt' filepath='block/blk-settings.c' line='510' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='blk_queue_write_cache' mangled-name='blk_queue_write_cache' filepath='block/blk-settings.c' line='890' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_write_cache'>
+        <parameter type-id='type-id-378' name='q' filepath='block/blk-settings.c' line='890' column='1'/>
+        <parameter type-id='type-id-33' name='wc' filepath='block/blk-settings.c' line='890' column='1'/>
+        <parameter type-id='type-id-33' name='fua' filepath='block/blk-settings.c' line='890' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='block/blk-map.c' language='LANG_C89'>
+      <union-decl name='__anonymous_union__' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='178' column='1' id='type-id-3838'>
+        <data-member access='private'>
+          <var-decl name='hash' type-id='type-id-520' visibility='default' filepath='include/linux/blkdev.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ipi_list' type-id='type-id-20' visibility='default' filepath='include/linux/blkdev.h' line='180' column='1'/>
+        </data-member>
+      </union-decl>
+      <function-decl name='blk_rq_map_kern' mangled-name='blk_rq_map_kern' filepath='block/blk-map.c' line='215' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_rq_map_kern'>
+        <parameter type-id='type-id-378' name='q' filepath='block/blk-map.c' line='215' column='1'/>
+        <parameter type-id='type-id-463' name='rq' filepath='block/blk-map.c' line='215' column='1'/>
+        <parameter type-id='type-id-15' name='kbuf' filepath='block/blk-map.c' line='215' column='1'/>
+        <parameter type-id='type-id-5' name='len' filepath='block/blk-map.c' line='216' column='1'/>
+        <parameter type-id='type-id-485' name='gfp_mask' filepath='block/blk-map.c' line='216' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='block/blk-exec.c' language='LANG_C89'>
+      <function-decl name='blk_execute_rq' mangled-name='blk_execute_rq' filepath='block/blk-exec.c' line='94' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_execute_rq'>
+        <parameter type-id='type-id-378' name='q' filepath='block/blk-exec.c' line='94' column='1'/>
+        <parameter type-id='type-id-360' name='bd_disk' filepath='block/blk-exec.c' line='94' column='1'/>
+        <parameter type-id='type-id-463' name='rq' filepath='block/blk-exec.c' line='95' column='1'/>
+        <parameter type-id='type-id-17' name='at_head' filepath='block/blk-exec.c' line='95' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='block/blk-merge.c' language='LANG_C89'>
+      <function-decl name='blk_rq_map_sg' mangled-name='blk_rq_map_sg' filepath='block/blk-merge.c' line='437' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_rq_map_sg'>
+        <parameter type-id='type-id-378' name='q' filepath='block/blk-merge.c' line='437' column='1'/>
+        <parameter type-id='type-id-463' name='rq' filepath='block/blk-merge.c' line='437' column='1'/>
+        <parameter type-id='type-id-920' name='sglist' filepath='block/blk-merge.c' line='438' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='block/genhd.c' language='LANG_C89'>
+      <function-decl name='__alloc_disk_node' mangled-name='__alloc_disk_node' filepath='block/genhd.c' line='1435' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__alloc_disk_node'>
+        <parameter type-id='type-id-17' name='minors' filepath='block/genhd.c' line='1435' column='1'/>
+        <parameter type-id='type-id-17' name='node_id' filepath='block/genhd.c' line='1435' column='1'/>
+        <return type-id='type-id-360'/>
+      </function-decl>
+      <function-decl name='register_blkdev' mangled-name='register_blkdev' filepath='block/genhd.c' line='340' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_blkdev'>
+        <parameter type-id='type-id-5' name='major' filepath='block/genhd.c' line='340' column='1'/>
+        <parameter type-id='type-id-4' name='name' filepath='block/genhd.c' line='340' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='unregister_blkdev' mangled-name='unregister_blkdev' filepath='block/genhd.c' line='404' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_blkdev'>
+        <parameter type-id='type-id-5' name='major' filepath='block/genhd.c' line='404' column='1'/>
+        <parameter type-id='type-id-4' name='name' filepath='block/genhd.c' line='404' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='device_add_disk' mangled-name='device_add_disk' filepath='block/genhd.c' line='727' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_add_disk'>
+        <parameter type-id='type-id-240' name='parent' filepath='block/genhd.c' line='727' column='1'/>
+        <parameter type-id='type-id-360' name='disk' filepath='block/genhd.c' line='727' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='del_gendisk' mangled-name='del_gendisk' filepath='block/genhd.c' line='739' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='del_gendisk'>
+        <parameter type-id='type-id-360' name='disk' filepath='block/genhd.c' line='739' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='put_disk' mangled-name='put_disk' filepath='block/genhd.c' line='1509' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='put_disk'>
+        <parameter type-id='type-id-360' name='disk' filepath='block/genhd.c' line='1509' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='set_disk_ro' mangled-name='set_disk_ro' filepath='block/genhd.c' line='1548' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='set_disk_ro'>
+        <parameter type-id='type-id-360' name='disk' filepath='block/genhd.c' line='1548' column='1'/>
+        <parameter type-id='type-id-17' name='flag' filepath='block/genhd.c' line='1548' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='block/blk-mq-virtio.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='type-id-3839' size-in-bits='infinite' id='type-id-3840'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <class-decl name='irq_affinity' size-in-bits='64' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-3841'/>
+      <array-type-def dimensions='1' type-id='type-id-3842' size-in-bits='infinite' id='type-id-3843'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <class-decl name='virtio_device' size-in-bits='6784' is-struct='yes' visibility='default' filepath='include/linux/virtio.h' line='125' column='1' id='type-id-3844'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='type-id-17' visibility='default' filepath='include/linux/virtio.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='failed' type-id='type-id-33' visibility='default' filepath='include/linux/virtio.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='config_enabled' type-id='type-id-33' visibility='default' filepath='include/linux/virtio.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='config_change_pending' type-id='type-id-33' visibility='default' filepath='include/linux/virtio.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='config_lock' type-id='type-id-247' visibility='default' filepath='include/linux/virtio.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='type-id-388' visibility='default' filepath='include/linux/virtio.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='id' type-id='type-id-3845' visibility='default' filepath='include/linux/virtio.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='config' type-id='type-id-3846' visibility='default' filepath='include/linux/virtio.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='vringh_config' type-id='type-id-3847' visibility='default' filepath='include/linux/virtio.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='vqs' type-id='type-id-20' visibility='default' filepath='include/linux/virtio.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='features' type-id='type-id-40' visibility='default' filepath='include/linux/virtio.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='priv' type-id='type-id-15' visibility='default' filepath='include/linux/virtio.h' line='137' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='virtio_device_id' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='408' column='1' id='type-id-3845'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='device' type-id='type-id-511' visibility='default' filepath='include/linux/mod_devicetable.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='vendor' type-id='type-id-511' visibility='default' filepath='include/linux/mod_devicetable.h' line='410' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='virtio_config_ops' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/virtio_config.h' line='65' column='1' id='type-id-3848'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get' type-id='type-id-3849' visibility='default' filepath='include/linux/virtio_config.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='set' type-id='type-id-3849' visibility='default' filepath='include/linux/virtio_config.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='generation' type-id='type-id-3850' visibility='default' filepath='include/linux/virtio_config.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_status' type-id='type-id-3851' visibility='default' filepath='include/linux/virtio_config.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_status' type-id='type-id-3852' visibility='default' filepath='include/linux/virtio_config.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='reset' type-id='type-id-3853' visibility='default' filepath='include/linux/virtio_config.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='find_vqs' type-id='type-id-3854' visibility='default' filepath='include/linux/virtio_config.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='del_vqs' type-id='type-id-3853' visibility='default' filepath='include/linux/virtio_config.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_features' type-id='type-id-3855' visibility='default' filepath='include/linux/virtio_config.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='finalize_features' type-id='type-id-3856' visibility='default' filepath='include/linux/virtio_config.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bus_name' type-id='type-id-3857' visibility='default' filepath='include/linux/virtio_config.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='set_vq_affinity' type-id='type-id-3858' visibility='default' filepath='include/linux/virtio_config.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='get_vq_affinity' type-id='type-id-3859' visibility='default' filepath='include/linux/virtio_config.h' line='84' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='virtqueue' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/virtio.h' line='28' column='1' id='type-id-3860'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/virtio.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='callback' type-id='type-id-3861' visibility='default' filepath='include/linux/virtio.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/virtio.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='vdev' type-id='type-id-3862' visibility='default' filepath='include/linux/virtio.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='index' type-id='type-id-5' visibility='default' filepath='include/linux/virtio.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='num_free' type-id='type-id-5' visibility='default' filepath='include/linux/virtio.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='priv' type-id='type-id-15' visibility='default' filepath='include/linux/virtio.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='vq_callback_t' type-id='type-id-3863' filepath='include/linux/virtio_config.h' line='64' column='1' id='type-id-3864'/>
+      <class-decl name='vringh_config_ops' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/vringh.h' line='72' column='1' id='type-id-3865'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='find_vrhs' type-id='type-id-3866' visibility='default' filepath='include/linux/vringh.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='del_vrhs' type-id='type-id-3853' visibility='default' filepath='include/linux/vringh.h' line='75' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vringh' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/vringh.h' line='33' column='1' id='type-id-3867'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='little_endian' type-id='type-id-33' visibility='default' filepath='include/linux/vringh.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='event_indices' type-id='type-id-33' visibility='default' filepath='include/linux/vringh.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='weak_barriers' type-id='type-id-33' visibility='default' filepath='include/linux/vringh.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='last_avail_idx' type-id='type-id-688' visibility='default' filepath='include/linux/vringh.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='last_used_idx' type-id='type-id-688' visibility='default' filepath='include/linux/vringh.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='completed' type-id='type-id-7' visibility='default' filepath='include/linux/vringh.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vring' type-id='type-id-3868' visibility='default' filepath='include/linux/vringh.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='notify' type-id='type-id-3869' visibility='default' filepath='include/linux/vringh.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vring' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='97' column='1' id='type-id-3868'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num' type-id='type-id-5' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='desc' type-id='type-id-3870' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='avail' type-id='type-id-3871' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='used' type-id='type-id-3872' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='104' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vring_desc' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='66' column='1' id='type-id-3873'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='type-id-3874' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='len' type-id='type-id-3875' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='type-id-3839' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='next' type-id='type-id-3839' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__virtio64' type-id='type-id-100' filepath='include/uapi/linux/virtio_types.h' line='44' column='1' id='type-id-3874'/>
+      <typedef-decl name='__virtio32' type-id='type-id-511' filepath='include/uapi/linux/virtio_types.h' line='43' column='1' id='type-id-3875'/>
+      <typedef-decl name='__virtio16' type-id='type-id-108' filepath='include/uapi/linux/virtio_types.h' line='42' column='1' id='type-id-3839'/>
+      <class-decl name='vring_avail' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='77' column='1' id='type-id-3876'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='type-id-3839' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='idx' type-id='type-id-3839' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ring' type-id='type-id-3840' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='80' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vring_used' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='91' column='1' id='type-id-3877'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='type-id-3839' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='idx' type-id='type-id-3839' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ring' type-id='type-id-3843' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='94' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vring_used_elem' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='84' column='1' id='type-id-3842'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='type-id-3875' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='len' type-id='type-id-3875' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='88' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='vrh_callback_t' type-id='type-id-3878' filepath='include/linux/vringh.h' line='71' column='1' id='type-id-3879'/>
+      <qualified-type-def type-id='type-id-33' const='yes' id='type-id-3880'/>
+      <pointer-type-def type-id='type-id-3880' size-in-bits='64' id='type-id-3881'/>
+      <pointer-type-def type-id='type-id-3882' size-in-bits='64' id='type-id-3857'/>
+      <qualified-type-def type-id='type-id-4' const='yes' id='type-id-3883'/>
+      <pointer-type-def type-id='type-id-3883' size-in-bits='64' id='type-id-92'/>
+      <pointer-type-def type-id='type-id-3884' size-in-bits='64' id='type-id-3859'/>
+      <qualified-type-def type-id='type-id-3848' const='yes' id='type-id-3885'/>
+      <pointer-type-def type-id='type-id-3885' size-in-bits='64' id='type-id-3846'/>
+      <qualified-type-def type-id='type-id-3865' const='yes' id='type-id-3886'/>
+      <pointer-type-def type-id='type-id-3886' size-in-bits='64' id='type-id-3847'/>
+      <pointer-type-def type-id='type-id-3887' size-in-bits='64' id='type-id-3856'/>
+      <pointer-type-def type-id='type-id-3888' size-in-bits='64' id='type-id-3854'/>
+      <pointer-type-def type-id='type-id-3889' size-in-bits='64' id='type-id-3866'/>
+      <pointer-type-def type-id='type-id-3890' size-in-bits='64' id='type-id-3858'/>
+      <pointer-type-def type-id='type-id-3841' size-in-bits='64' id='type-id-3891'/>
+      <pointer-type-def type-id='type-id-3892' size-in-bits='64' id='type-id-3850'/>
+      <pointer-type-def type-id='type-id-3893' size-in-bits='64' id='type-id-3855'/>
+      <pointer-type-def type-id='type-id-3894' size-in-bits='64' id='type-id-3851'/>
+      <pointer-type-def type-id='type-id-3844' size-in-bits='64' id='type-id-3862'/>
+      <pointer-type-def type-id='type-id-3860' size-in-bits='64' id='type-id-3895'/>
+      <pointer-type-def type-id='type-id-3895' size-in-bits='64' id='type-id-3896'/>
+      <pointer-type-def type-id='type-id-3897' size-in-bits='64' id='type-id-3853'/>
+      <pointer-type-def type-id='type-id-3898' size-in-bits='64' id='type-id-3852'/>
+      <pointer-type-def type-id='type-id-3899' size-in-bits='64' id='type-id-3849'/>
+      <pointer-type-def type-id='type-id-3863' size-in-bits='64' id='type-id-3861'/>
+      <pointer-type-def type-id='type-id-3900' size-in-bits='64' id='type-id-3869'/>
+      <pointer-type-def type-id='type-id-3864' size-in-bits='64' id='type-id-3901'/>
+      <pointer-type-def type-id='type-id-3901' size-in-bits='64' id='type-id-3902'/>
+      <pointer-type-def type-id='type-id-3879' size-in-bits='64' id='type-id-3903'/>
+      <pointer-type-def type-id='type-id-3903' size-in-bits='64' id='type-id-3904'/>
+      <pointer-type-def type-id='type-id-3876' size-in-bits='64' id='type-id-3871'/>
+      <pointer-type-def type-id='type-id-3873' size-in-bits='64' id='type-id-3870'/>
+      <pointer-type-def type-id='type-id-3877' size-in-bits='64' id='type-id-3872'/>
+      <pointer-type-def type-id='type-id-3867' size-in-bits='64' id='type-id-3905'/>
+      <pointer-type-def type-id='type-id-3905' size-in-bits='64' id='type-id-3906'/>
+      <function-decl name='blk_mq_virtio_map_queues' mangled-name='blk_mq_virtio_map_queues' filepath='block/blk-mq-virtio.c' line='32' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_virtio_map_queues'>
+        <parameter type-id='type-id-3744' name='set' filepath='block/blk-mq-virtio.c' line='32' column='1'/>
+        <parameter type-id='type-id-3862' name='vdev' filepath='block/blk-mq-virtio.c' line='33' column='1'/>
+        <parameter type-id='type-id-17' name='first_vec' filepath='block/blk-mq-virtio.c' line='33' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-3882'>
+        <parameter type-id='type-id-3862'/>
+        <return type-id='type-id-4'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3884'>
+        <parameter type-id='type-id-3862'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-3386'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3887'>
+        <parameter type-id='type-id-3862'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3888'>
+        <parameter type-id='type-id-3862'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-3896'/>
+        <parameter type-id='type-id-3902'/>
+        <parameter type-id='type-id-92'/>
+        <parameter type-id='type-id-3881'/>
+        <parameter type-id='type-id-3891'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3889'>
+        <parameter type-id='type-id-3862'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-3906'/>
+        <parameter type-id='type-id-3904'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3890'>
+        <parameter type-id='type-id-3895'/>
+        <parameter type-id='type-id-3386'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3892'>
+        <parameter type-id='type-id-3862'/>
+        <return type-id='type-id-7'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3893'>
+        <parameter type-id='type-id-3862'/>
+        <return type-id='type-id-40'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3894'>
+        <parameter type-id='type-id-3862'/>
+        <return type-id='type-id-214'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3897'>
+        <parameter type-id='type-id-3862'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3898'>
+        <parameter type-id='type-id-3862'/>
+        <parameter type-id='type-id-214'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3899'>
+        <parameter type-id='type-id-3862'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3878'>
+        <parameter type-id='type-id-3862'/>
+        <parameter type-id='type-id-3905'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3863'>
+        <parameter type-id='type-id-3895'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3900'>
+        <parameter type-id='type-id-3905'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/lib/atomic_ll_sc.c' language='LANG_C89'>
+      <pointer-type-def type-id='type-id-113' size-in-bits='64' id='type-id-3907'/>
+      <pointer-type-def type-id='type-id-26' size-in-bits='64' id='type-id-3908'/>
+      <function-decl name='__ll_sc_atomic_add' mangled-name='__ll_sc_atomic_add' filepath='arch/arm64/include/asm/atomic_ll_sc.h' line='113' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__ll_sc_atomic_add'>
+        <parameter type-id='type-id-17' name='i' filepath='arch/arm64/include/asm/atomic_ll_sc.h' line='113' column='1'/>
+        <parameter type-id='type-id-3908' name='v' filepath='arch/arm64/include/asm/atomic_ll_sc.h' line='113' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='__ll_sc_atomic_add_return' mangled-name='__ll_sc_atomic_add_return' filepath='arch/arm64/include/asm/atomic_ll_sc.h' line='113' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__ll_sc_atomic_add_return'>
+        <parameter type-id='type-id-17' name='i' filepath='arch/arm64/include/asm/atomic_ll_sc.h' line='113' column='1'/>
+        <parameter type-id='type-id-3908' name='v' filepath='arch/arm64/include/asm/atomic_ll_sc.h' line='113' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='__ll_sc_atomic_sub' mangled-name='__ll_sc_atomic_sub' filepath='arch/arm64/include/asm/atomic_ll_sc.h' line='114' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__ll_sc_atomic_sub'>
+        <parameter type-id='type-id-17' name='i' filepath='arch/arm64/include/asm/atomic_ll_sc.h' line='114' column='1'/>
+        <parameter type-id='type-id-3908' name='v' filepath='arch/arm64/include/asm/atomic_ll_sc.h' line='114' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='__ll_sc_atomic_sub_return' mangled-name='__ll_sc_atomic_sub_return' filepath='arch/arm64/include/asm/atomic_ll_sc.h' line='114' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__ll_sc_atomic_sub_return'>
+        <parameter type-id='type-id-17' name='i' filepath='arch/arm64/include/asm/atomic_ll_sc.h' line='114' column='1'/>
+        <parameter type-id='type-id-3908' name='v' filepath='arch/arm64/include/asm/atomic_ll_sc.h' line='114' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='__ll_sc_atomic64_add' mangled-name='__ll_sc_atomic64_add' filepath='arch/arm64/include/asm/atomic_ll_sc.h' line='207' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__ll_sc_atomic64_add'>
+        <parameter type-id='type-id-192' name='i' filepath='arch/arm64/include/asm/atomic_ll_sc.h' line='207' column='1'/>
+        <parameter type-id='type-id-3907' name='v' filepath='arch/arm64/include/asm/atomic_ll_sc.h' line='207' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='__ll_sc_atomic64_add_return_relaxed' mangled-name='__ll_sc_atomic64_add_return_relaxed' filepath='arch/arm64/include/asm/atomic_ll_sc.h' line='207' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__ll_sc_atomic64_add_return_relaxed'>
+        <parameter type-id='type-id-192' name='i' filepath='arch/arm64/include/asm/atomic_ll_sc.h' line='207' column='1'/>
+        <parameter type-id='type-id-3907' name='v' filepath='arch/arm64/include/asm/atomic_ll_sc.h' line='207' column='1'/>
+        <return type-id='type-id-192'/>
+      </function-decl>
+      <function-decl name='__ll_sc_atomic64_andnot' mangled-name='__ll_sc_atomic64_andnot' filepath='arch/arm64/include/asm/atomic_ll_sc.h' line='219' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__ll_sc_atomic64_andnot'>
+        <parameter type-id='type-id-192' name='i' filepath='arch/arm64/include/asm/atomic_ll_sc.h' line='219' column='1'/>
+        <parameter type-id='type-id-3907' name='v' filepath='arch/arm64/include/asm/atomic_ll_sc.h' line='219' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='__ll_sc_atomic64_or' mangled-name='__ll_sc_atomic64_or' filepath='arch/arm64/include/asm/atomic_ll_sc.h' line='220' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__ll_sc_atomic64_or'>
+        <parameter type-id='type-id-192' name='i' filepath='arch/arm64/include/asm/atomic_ll_sc.h' line='220' column='1'/>
+        <parameter type-id='type-id-3907' name='v' filepath='arch/arm64/include/asm/atomic_ll_sc.h' line='220' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='__ll_sc_atomic64_fetch_or' mangled-name='__ll_sc_atomic64_fetch_or' filepath='arch/arm64/include/asm/atomic_ll_sc.h' line='220' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__ll_sc_atomic64_fetch_or'>
+        <parameter type-id='type-id-192' name='i' filepath='arch/arm64/include/asm/atomic_ll_sc.h' line='220' column='1'/>
+        <parameter type-id='type-id-3907' name='v' filepath='arch/arm64/include/asm/atomic_ll_sc.h' line='220' column='1'/>
+        <return type-id='type-id-192'/>
+      </function-decl>
+      <function-decl name='__ll_sc___cmpxchg_case_mb_4' mangled-name='__ll_sc___cmpxchg_case_mb_4' filepath='arch/arm64/include/asm/atomic_ll_sc.h' line='291' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__ll_sc___cmpxchg_case_mb_4'>
+        <parameter type-id='type-id-104' name='ptr' filepath='arch/arm64/include/asm/atomic_ll_sc.h' line='291' column='1'/>
+        <parameter type-id='type-id-16' name='old' filepath='arch/arm64/include/asm/atomic_ll_sc.h' line='291' column='1'/>
+        <parameter type-id='type-id-16' name='new' filepath='arch/arm64/include/asm/atomic_ll_sc.h' line='291' column='1'/>
+        <return type-id='type-id-16'/>
+      </function-decl>
+      <function-decl name='__ll_sc___cmpxchg_case_mb_8' mangled-name='__ll_sc___cmpxchg_case_mb_8' filepath='arch/arm64/include/asm/atomic_ll_sc.h' line='292' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__ll_sc___cmpxchg_case_mb_8'>
+        <parameter type-id='type-id-104' name='ptr' filepath='arch/arm64/include/asm/atomic_ll_sc.h' line='292' column='1'/>
+        <parameter type-id='type-id-16' name='old' filepath='arch/arm64/include/asm/atomic_ll_sc.h' line='292' column='1'/>
+        <parameter type-id='type-id-16' name='new' filepath='arch/arm64/include/asm/atomic_ll_sc.h' line='292' column='1'/>
+        <return type-id='type-id-16'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/random32.c' language='LANG_C89'>
+      <function-decl name='prandom_u32' mangled-name='prandom_u32' filepath='lib/random32.c' line='79' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='prandom_u32'>
+        <return type-id='type-id-7'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/iov_iter.c' language='LANG_C89'>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/uio.h' line='35' column='1' id='type-id-3909'>
+        <data-member access='private'>
+          <var-decl name='iov' type-id='type-id-2117' visibility='default' filepath='include/linux/uio.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='kvec' type-id='type-id-2118' visibility='default' filepath='include/linux/uio.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='bvec' type-id='type-id-3910' visibility='default' filepath='include/linux/uio.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='pipe' type-id='type-id-87' visibility='default' filepath='include/linux/uio.h' line='39' column='1'/>
+        </data-member>
+      </union-decl>
+      <qualified-type-def type-id='type-id-131' const='yes' id='type-id-3911'/>
+      <pointer-type-def type-id='type-id-3911' size-in-bits='64' id='type-id-3910'/>
+      <function-decl name='_copy_to_iter' mangled-name='_copy_to_iter' filepath='lib/iov_iter.c' line='558' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_copy_to_iter'>
+        <parameter type-id='type-id-15' name='addr' filepath='lib/iov_iter.c' line='558' column='1'/>
+        <parameter type-id='type-id-84' name='bytes' filepath='lib/iov_iter.c' line='558' column='1'/>
+        <parameter type-id='type-id-3008' name='i' filepath='lib/iov_iter.c' line='558' column='1'/>
+        <return type-id='type-id-84'/>
+      </function-decl>
+      <function-decl name='_copy_from_iter_full' mangled-name='_copy_from_iter_full' filepath='lib/iov_iter.c' line='712' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_copy_from_iter_full'>
+        <parameter type-id='type-id-15' name='addr' filepath='lib/iov_iter.c' line='712' column='1'/>
+        <parameter type-id='type-id-84' name='bytes' filepath='lib/iov_iter.c' line='712' column='1'/>
+        <parameter type-id='type-id-3008' name='i' filepath='lib/iov_iter.c' line='712' column='1'/>
+        <return type-id='type-id-33'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/refcount.c' language='LANG_C89'>
+      <pointer-type-def type-id='type-id-421' size-in-bits='64' id='type-id-3912'/>
+      <function-decl name='refcount_inc_not_zero_checked' mangled-name='refcount_inc_not_zero_checked' filepath='lib/refcount.c' line='118' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='refcount_inc_not_zero_checked'>
+        <parameter type-id='type-id-3912' name='r' filepath='lib/refcount.c' line='118' column='1'/>
+        <return type-id='type-id-33'/>
+      </function-decl>
+      <function-decl name='refcount_inc_checked' mangled-name='refcount_inc_checked' filepath='lib/refcount.c' line='151' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='refcount_inc_checked'>
+        <parameter type-id='type-id-3912' name='r' filepath='lib/refcount.c' line='151' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='refcount_dec_and_test_checked' mangled-name='refcount_dec_and_test_checked' filepath='lib/refcount.c' line='210' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='refcount_dec_and_test_checked'>
+        <parameter type-id='type-id-3912' name='r' filepath='lib/refcount.c' line='210' column='1'/>
+        <return type-id='type-id-33'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/string_helpers.c' language='LANG_C89'>
+      <enum-decl name='string_size_units' filepath='include/linux/string_helpers.h' line='12' column='1' id='type-id-3913'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='STRING_UNITS_10' value='0'/>
+        <enumerator name='STRING_UNITS_2' value='1'/>
+      </enum-decl>
+      <qualified-type-def type-id='type-id-3913' const='yes' id='type-id-3914'/>
+      <function-decl name='string_get_size' mangled-name='string_get_size' filepath='lib/string_helpers.c' line='33' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='string_get_size'>
+        <parameter type-id='type-id-40' name='size' filepath='lib/string_helpers.c' line='33' column='1'/>
+        <parameter type-id='type-id-40' name='blk_size' filepath='lib/string_helpers.c' line='33' column='1'/>
+        <parameter type-id='type-id-3914' name='units' filepath='lib/string_helpers.c' line='33' column='1'/>
+        <parameter type-id='type-id-2' name='buf' filepath='lib/string_helpers.c' line='34' column='1'/>
+        <parameter type-id='type-id-17' name='len' filepath='lib/string_helpers.c' line='34' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/kstrtox.c' language='LANG_C89'>
+      <pointer-type-def type-id='type-id-98' size-in-bits='64' id='type-id-3915'/>
+      <function-decl name='kstrtoull' mangled-name='kstrtoull' filepath='lib/kstrtox.c' line='121' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrtoull'>
+        <parameter type-id='type-id-4' name='s' filepath='lib/kstrtox.c' line='121' column='1'/>
+        <parameter type-id='type-id-5' name='base' filepath='lib/kstrtox.c' line='121' column='1'/>
+        <parameter type-id='type-id-3915' name='res' filepath='lib/kstrtox.c' line='121' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/pci_iomap.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='type-id-2610' size-in-bits='704' id='type-id-3916'>
+        <subrange length='11' type-id='type-id-9' id='type-id-183'/>
+
+      </array-type-def>
+      <class-decl name='hotplug_slot' size-in-bits='384' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-3917'/>
+      <class-decl name='msi_controller' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-3918'/>
+      <class-decl name='pci_vpd' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-3919'/>
+      <array-type-def dimensions='1' type-id='type-id-2156' size-in-bits='256' id='type-id-3920'>
+        <subrange length='4' type-id='type-id-9' id='type-id-107'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-2146' size-in-bits='5632' id='type-id-3921'>
+        <subrange length='11' type-id='type-id-9' id='type-id-183'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-7' size-in-bits='512' id='type-id-3922'>
+        <subrange length='16' type-id='type-id-9' id='type-id-135'/>
+
+      </array-type-def>
+      <class-decl name='pci_dev' size-in-bits='15744' is-struct='yes' visibility='default' filepath='include/linux/pci.h' line='286' column='1' id='type-id-3923'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bus_list' type-id='type-id-20' visibility='default' filepath='include/linux/pci.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bus' type-id='type-id-3924' visibility='default' filepath='include/linux/pci.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='subordinate' type-id='type-id-3924' visibility='default' filepath='include/linux/pci.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sysdata' type-id='type-id-15' visibility='default' filepath='include/linux/pci.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='procent' type-id='type-id-262' visibility='default' filepath='include/linux/pci.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='slot' type-id='type-id-3925' visibility='default' filepath='include/linux/pci.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='devfn' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='vendor' type-id='type-id-312' visibility='default' filepath='include/linux/pci.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='496'>
+          <var-decl name='device' type-id='type-id-312' visibility='default' filepath='include/linux/pci.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='subsystem_vendor' type-id='type-id-312' visibility='default' filepath='include/linux/pci.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='528'>
+          <var-decl name='subsystem_device' type-id='type-id-312' visibility='default' filepath='include/linux/pci.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='class' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='revision' type-id='type-id-214' visibility='default' filepath='include/linux/pci.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='584'>
+          <var-decl name='hdr_type' type-id='type-id-214' visibility='default' filepath='include/linux/pci.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='592'>
+          <var-decl name='pcie_cap' type-id='type-id-214' visibility='default' filepath='include/linux/pci.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='600'>
+          <var-decl name='msi_cap' type-id='type-id-214' visibility='default' filepath='include/linux/pci.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='msix_cap' type-id='type-id-214' visibility='default' filepath='include/linux/pci.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='pcie_mpss' type-id='type-id-214' visibility='default' filepath='include/linux/pci.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='624'>
+          <var-decl name='rom_base_reg' type-id='type-id-214' visibility='default' filepath='include/linux/pci.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='632'>
+          <var-decl name='pin' type-id='type-id-214' visibility='default' filepath='include/linux/pci.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='pcie_flags_reg' type-id='type-id-688' visibility='default' filepath='include/linux/pci.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dma_alias_mask' type-id='type-id-45' visibility='default' filepath='include/linux/pci.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='driver' type-id='type-id-3926' visibility='default' filepath='include/linux/pci.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='dma_mask' type-id='type-id-40' visibility='default' filepath='include/linux/pci.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dma_parms' type-id='type-id-2161' visibility='default' filepath='include/linux/pci.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='current_state' type-id='type-id-3927' visibility='default' filepath='include/linux/pci.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='pm_cap' type-id='type-id-214' visibility='default' filepath='include/linux/pci.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='pme_support' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18'>
+          <var-decl name='pme_poll' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17'>
+          <var-decl name='d1_support' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='d2_support' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='no_d1d2' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='no_d3cold' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='bridge_d3' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='d3cold_allowed' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='mmio_always_on' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='wakeup_prepared' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='runtime_d3cold' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='ignore_hotplug' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='hotplug_user_indicators' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='clear_retrain_link' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='d3_delay' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='d3cold_delay' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='eetlp_prefix_path' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='error_state' type-id='type-id-3928' visibility='default' filepath='include/linux/pci.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='dev' type-id='type-id-388' visibility='default' filepath='include/linux/pci.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='cfg_size' type-id='type-id-17' visibility='default' filepath='include/linux/pci.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7456'>
+          <var-decl name='irq' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='resource' type-id='type-id-3921' visibility='default' filepath='include/linux/pci.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13120'>
+          <var-decl name='match_driver' type-id='type-id-33' visibility='default' filepath='include/linux/pci.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='transparent' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='multifunction' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='is_busmaster' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='no_msi' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='no_64bit_msi' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18'>
+          <var-decl name='block_cfg_access' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17'>
+          <var-decl name='broken_parity_status' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='irq_reroute_variant' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='msi_enabled' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='msix_enabled' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='ari_enabled' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='ats_enabled' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='pasid_enabled' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='pri_enabled' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='is_managed' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='needs_freset' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='state_saved' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='is_physfn' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='is_virtfn' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='reset_fn' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='is_hotplug_bridge' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='shpc_managed' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13120'>
+          <var-decl name='is_thunderbolt' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='__aer_firmware_first_valid' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='__aer_firmware_first' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='broken_intx_masking' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='io_window_1k' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='irq_managed' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='has_secondary_link' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='non_compliant_bars' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='is_probed' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13168'>
+          <var-decl name='dev_flags' type-id='type-id-3929' visibility='default' filepath='include/linux/pci.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13184'>
+          <var-decl name='enable_cnt' type-id='type-id-26' visibility='default' filepath='include/linux/pci.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13216'>
+          <var-decl name='saved_config_space' type-id='type-id-3922' visibility='default' filepath='include/linux/pci.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13760'>
+          <var-decl name='saved_cap_space' type-id='type-id-186' visibility='default' filepath='include/linux/pci.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13824'>
+          <var-decl name='rom_attr' type-id='type-id-2610' visibility='default' filepath='include/linux/pci.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13888'>
+          <var-decl name='rom_attr_enabled' type-id='type-id-17' visibility='default' filepath='include/linux/pci.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13952'>
+          <var-decl name='res_attr' type-id='type-id-3916' visibility='default' filepath='include/linux/pci.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14656'>
+          <var-decl name='res_attr_wc' type-id='type-id-3916' visibility='default' filepath='include/linux/pci.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15360'>
+          <var-decl name='msi_irq_groups' type-id='type-id-665' visibility='default' filepath='include/linux/pci.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15424'>
+          <var-decl name='vpd' type-id='type-id-3930' visibility='default' filepath='include/linux/pci.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15488'>
+          <var-decl name='rom' type-id='type-id-99' visibility='default' filepath='include/linux/pci.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15552'>
+          <var-decl name='romlen' type-id='type-id-84' visibility='default' filepath='include/linux/pci.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15616'>
+          <var-decl name='driver_override' type-id='type-id-2' visibility='default' filepath='include/linux/pci.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15680'>
+          <var-decl name='priv_flags' type-id='type-id-16' visibility='default' filepath='include/linux/pci.h' line='448' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pci_bus' size-in-bits='8768' is-struct='yes' visibility='default' filepath='include/linux/pci.h' line='545' column='1' id='type-id-3931'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='type-id-20' visibility='default' filepath='include/linux/pci.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='parent' type-id='type-id-3924' visibility='default' filepath='include/linux/pci.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='children' type-id='type-id-20' visibility='default' filepath='include/linux/pci.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='devices' type-id='type-id-20' visibility='default' filepath='include/linux/pci.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='self' type-id='type-id-3932' visibility='default' filepath='include/linux/pci.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='slots' type-id='type-id-20' visibility='default' filepath='include/linux/pci.h' line='551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='resource' type-id='type-id-3920' visibility='default' filepath='include/linux/pci.h' line='553' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='resources' type-id='type-id-20' visibility='default' filepath='include/linux/pci.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='busn_res' type-id='type-id-2146' visibility='default' filepath='include/linux/pci.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='ops' type-id='type-id-3933' visibility='default' filepath='include/linux/pci.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='msi' type-id='type-id-3934' visibility='default' filepath='include/linux/pci.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='sysdata' type-id='type-id-15' visibility='default' filepath='include/linux/pci.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='procdir' type-id='type-id-262' visibility='default' filepath='include/linux/pci.h' line='560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='number' type-id='type-id-216' visibility='default' filepath='include/linux/pci.h' line='562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1800'>
+          <var-decl name='primary' type-id='type-id-216' visibility='default' filepath='include/linux/pci.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1808'>
+          <var-decl name='max_bus_speed' type-id='type-id-216' visibility='default' filepath='include/linux/pci.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1816'>
+          <var-decl name='cur_bus_speed' type-id='type-id-216' visibility='default' filepath='include/linux/pci.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='domain_nr' type-id='type-id-17' visibility='default' filepath='include/linux/pci.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='name' type-id='type-id-972' visibility='default' filepath='include/linux/pci.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='bridge_ctl' type-id='type-id-312' visibility='default' filepath='include/linux/pci.h' line='572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2256'>
+          <var-decl name='bus_flags' type-id='type-id-3935' visibility='default' filepath='include/linux/pci.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='bridge' type-id='type-id-240' visibility='default' filepath='include/linux/pci.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='dev' type-id='type-id-388' visibility='default' filepath='include/linux/pci.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='legacy_io' type-id='type-id-2610' visibility='default' filepath='include/linux/pci.h' line='576' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='legacy_mem' type-id='type-id-2610' visibility='default' filepath='include/linux/pci.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='is_added' type-id='type-id-5' visibility='default' filepath='include/linux/pci.h' line='578' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pci_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/pci.h' line='669' column='1' id='type-id-3936'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='add_bus' type-id='type-id-3937' visibility='default' filepath='include/linux/pci.h' line='670' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='remove_bus' type-id='type-id-3938' visibility='default' filepath='include/linux/pci.h' line='671' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map_bus' type-id='type-id-3939' visibility='default' filepath='include/linux/pci.h' line='672' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='read' type-id='type-id-3940' visibility='default' filepath='include/linux/pci.h' line='673' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='write' type-id='type-id-3941' visibility='default' filepath='include/linux/pci.h' line='674' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='pci_bus_flags_t' type-id='type-id-312' filepath='include/linux/pci.h' line='215' column='1' id='type-id-3935'/>
+      <class-decl name='pci_slot' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/pci.h' line='56' column='1' id='type-id-3942'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bus' type-id='type-id-3924' visibility='default' filepath='include/linux/pci.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/pci.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hotplug' type-id='type-id-3943' visibility='default' filepath='include/linux/pci.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='number' type-id='type-id-216' visibility='default' filepath='include/linux/pci.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='kobj' type-id='type-id-267' visibility='default' filepath='include/linux/pci.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pci_driver' size-in-bits='2176' is-struct='yes' visibility='default' filepath='include/linux/pci.h' line='754' column='1' id='type-id-3944'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='type-id-20' visibility='default' filepath='include/linux/pci.h' line='755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/pci.h' line='756' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='id_table' type-id='type-id-3945' visibility='default' filepath='include/linux/pci.h' line='757' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='probe' type-id='type-id-3946' visibility='default' filepath='include/linux/pci.h' line='758' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='remove' type-id='type-id-3947' visibility='default' filepath='include/linux/pci.h' line='759' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='suspend' type-id='type-id-3948' visibility='default' filepath='include/linux/pci.h' line='760' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='suspend_late' type-id='type-id-3948' visibility='default' filepath='include/linux/pci.h' line='761' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='resume_early' type-id='type-id-3949' visibility='default' filepath='include/linux/pci.h' line='762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='resume' type-id='type-id-3949' visibility='default' filepath='include/linux/pci.h' line='763' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='shutdown' type-id='type-id-3947' visibility='default' filepath='include/linux/pci.h' line='764' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='sriov_configure' type-id='type-id-3950' visibility='default' filepath='include/linux/pci.h' line='765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='err_handler' type-id='type-id-3951' visibility='default' filepath='include/linux/pci.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='groups' type-id='type-id-665' visibility='default' filepath='include/linux/pci.h' line='767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='driver' type-id='type-id-2049' visibility='default' filepath='include/linux/pci.h' line='768' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='dynids' type-id='type-id-3952' visibility='default' filepath='include/linux/pci.h' line='769' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pci_device_id' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='19' column='1' id='type-id-3953'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vendor' type-id='type-id-511' visibility='default' filepath='include/linux/mod_devicetable.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='device' type-id='type-id-511' visibility='default' filepath='include/linux/mod_devicetable.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='subvendor' type-id='type-id-511' visibility='default' filepath='include/linux/mod_devicetable.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='subdevice' type-id='type-id-511' visibility='default' filepath='include/linux/mod_devicetable.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='class' type-id='type-id-511' visibility='default' filepath='include/linux/mod_devicetable.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='class_mask' type-id='type-id-511' visibility='default' filepath='include/linux/mod_devicetable.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='driver_data' type-id='type-id-3539' visibility='default' filepath='include/linux/mod_devicetable.h' line='23' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pci_error_handlers' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/pci.h' line='733' column='1' id='type-id-3954'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='error_detected' type-id='type-id-3955' visibility='default' filepath='include/linux/pci.h' line='735' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mmio_enabled' type-id='type-id-3956' visibility='default' filepath='include/linux/pci.h' line='739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='slot_reset' type-id='type-id-3956' visibility='default' filepath='include/linux/pci.h' line='742' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reset_prepare' type-id='type-id-3947' visibility='default' filepath='include/linux/pci.h' line='745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='reset_done' type-id='type-id-3947' visibility='default' filepath='include/linux/pci.h' line='746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='resume' type-id='type-id-3947' visibility='default' filepath='include/linux/pci.h' line='749' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='pci_ers_result_t' type-id='type-id-5' filepath='include/linux/pci.h' line='710' column='1' id='type-id-3957'/>
+      <enum-decl name='pci_channel_state' filepath='include/linux/pci.h' line='160' column='1' id='type-id-3958'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='pci_channel_io_normal' value='1'/>
+        <enumerator name='pci_channel_io_frozen' value='2'/>
+        <enumerator name='pci_channel_io_perm_failure' value='3'/>
+      </enum-decl>
+      <class-decl name='pci_dynids' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/pci.h' line='697' column='1' id='type-id-3952'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='include/linux/pci.h' line='698' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/pci.h' line='699' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='pci_power_t' type-id='type-id-17' filepath='include/linux/pci.h' line='130' column='1' id='type-id-3927'/>
+      <typedef-decl name='pci_channel_state_t' type-id='type-id-5' filepath='include/linux/pci.h' line='158' column='1' id='type-id-3928'/>
+      <typedef-decl name='pci_dev_flags_t' type-id='type-id-312' filepath='include/linux/pci.h' line='184' column='1' id='type-id-3929'/>
+      <qualified-type-def type-id='type-id-3953' const='yes' id='type-id-3959'/>
+      <pointer-type-def type-id='type-id-3959' size-in-bits='64' id='type-id-3945'/>
+      <qualified-type-def type-id='type-id-3954' const='yes' id='type-id-3960'/>
+      <pointer-type-def type-id='type-id-3960' size-in-bits='64' id='type-id-3951'/>
+      <pointer-type-def type-id='type-id-3917' size-in-bits='64' id='type-id-3943'/>
+      <pointer-type-def type-id='type-id-3961' size-in-bits='64' id='type-id-3937'/>
+      <pointer-type-def type-id='type-id-3962' size-in-bits='64' id='type-id-3941'/>
+      <pointer-type-def type-id='type-id-3963' size-in-bits='64' id='type-id-3940'/>
+      <pointer-type-def type-id='type-id-3964' size-in-bits='64' id='type-id-3949'/>
+      <pointer-type-def type-id='type-id-3965' size-in-bits='64' id='type-id-3946'/>
+      <pointer-type-def type-id='type-id-3966' size-in-bits='64' id='type-id-3950'/>
+      <pointer-type-def type-id='type-id-3967' size-in-bits='64' id='type-id-3948'/>
+      <pointer-type-def type-id='type-id-3918' size-in-bits='64' id='type-id-3934'/>
+      <pointer-type-def type-id='type-id-3931' size-in-bits='64' id='type-id-3924'/>
+      <pointer-type-def type-id='type-id-3923' size-in-bits='64' id='type-id-3932'/>
+      <pointer-type-def type-id='type-id-3944' size-in-bits='64' id='type-id-3926'/>
+      <pointer-type-def type-id='type-id-3936' size-in-bits='64' id='type-id-3933'/>
+      <pointer-type-def type-id='type-id-3942' size-in-bits='64' id='type-id-3925'/>
+      <pointer-type-def type-id='type-id-3919' size-in-bits='64' id='type-id-3930'/>
+      <pointer-type-def type-id='type-id-3968' size-in-bits='64' id='type-id-3956'/>
+      <pointer-type-def type-id='type-id-3969' size-in-bits='64' id='type-id-3955'/>
+      <pointer-type-def type-id='type-id-3970' size-in-bits='64' id='type-id-3938'/>
+      <pointer-type-def type-id='type-id-3971' size-in-bits='64' id='type-id-3947'/>
+      <pointer-type-def type-id='type-id-3972' size-in-bits='64' id='type-id-3939'/>
+      <function-decl name='pci_iomap_range' mangled-name='pci_iomap_range' filepath='lib/pci_iomap.c' line='28' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_iomap_range'>
+        <parameter type-id='type-id-3932' name='dev' filepath='lib/pci_iomap.c' line='28' column='1'/>
+        <parameter type-id='type-id-17' name='bar' filepath='lib/pci_iomap.c' line='29' column='1'/>
+        <parameter type-id='type-id-16' name='offset' filepath='lib/pci_iomap.c' line='30' column='1'/>
+        <parameter type-id='type-id-16' name='maxlen' filepath='lib/pci_iomap.c' line='31' column='1'/>
+        <return type-id='type-id-15'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-3961'>
+        <parameter type-id='type-id-3924'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3962'>
+        <parameter type-id='type-id-3924'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-7'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3963'>
+        <parameter type-id='type-id-3924'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-1567'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3964'>
+        <parameter type-id='type-id-3932'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3965'>
+        <parameter type-id='type-id-3932'/>
+        <parameter type-id='type-id-3945'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3966'>
+        <parameter type-id='type-id-3932'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3967'>
+        <parameter type-id='type-id-3932'/>
+        <parameter type-id='type-id-2055'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3968'>
+        <parameter type-id='type-id-3932'/>
+        <return type-id='type-id-3957'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3969'>
+        <parameter type-id='type-id-3932'/>
+        <parameter type-id='type-id-3958'/>
+        <return type-id='type-id-3957'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3970'>
+        <parameter type-id='type-id-3924'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3971'>
+        <parameter type-id='type-id-3932'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3972'>
+        <parameter type-id='type-id-3924'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-15'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/devres.c' language='LANG_C89'>
+      <function-decl name='devm_ioremap' mangled-name='devm_ioremap' filepath='lib/devres.c' line='64' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_ioremap'>
+        <parameter type-id='type-id-240' name='dev' filepath='lib/devres.c' line='64' column='1'/>
+        <parameter type-id='type-id-2155' name='offset' filepath='lib/devres.c' line='64' column='1'/>
+        <parameter type-id='type-id-2155' name='size' filepath='lib/devres.c' line='65' column='1'/>
+        <return type-id='type-id-15'/>
+      </function-decl>
+      <function-decl name='devm_ioremap_resource' mangled-name='devm_ioremap_resource' filepath='lib/devres.c' line='134' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_ioremap_resource'>
+        <parameter type-id='type-id-240' name='dev' filepath='lib/devres.c' line='134' column='1'/>
+        <parameter type-id='type-id-2156' name='res' filepath='lib/devres.c' line='134' column='1'/>
+        <return type-id='type-id-15'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/pci/pci.c' language='LANG_C89'>
+      <class-decl name='hotplug_slot_ops' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/pci_hotplug.h' line='48' column='1' id='type-id-3973'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='include/linux/pci_hotplug.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mod_name' type-id='type-id-4' visibility='default' filepath='include/linux/pci_hotplug.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='enable_slot' type-id='type-id-3974' visibility='default' filepath='include/linux/pci_hotplug.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='disable_slot' type-id='type-id-3974' visibility='default' filepath='include/linux/pci_hotplug.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_attention_status' type-id='type-id-3975' visibility='default' filepath='include/linux/pci_hotplug.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hardware_test' type-id='type-id-3976' visibility='default' filepath='include/linux/pci_hotplug.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_power_status' type-id='type-id-3977' visibility='default' filepath='include/linux/pci_hotplug.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_attention_status' type-id='type-id-3977' visibility='default' filepath='include/linux/pci_hotplug.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_latch_status' type-id='type-id-3977' visibility='default' filepath='include/linux/pci_hotplug.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_adapter_status' type-id='type-id-3977' visibility='default' filepath='include/linux/pci_hotplug.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='reset_slot' type-id='type-id-3978' visibility='default' filepath='include/linux/pci_hotplug.h' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hotplug_slot_info' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/pci_hotplug.h' line='71' column='1' id='type-id-3979'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='power_status' type-id='type-id-214' visibility='default' filepath='include/linux/pci_hotplug.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='attention_status' type-id='type-id-214' visibility='default' filepath='include/linux/pci_hotplug.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='latch_status' type-id='type-id-214' visibility='default' filepath='include/linux/pci_hotplug.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='adapter_status' type-id='type-id-214' visibility='default' filepath='include/linux/pci_hotplug.h' line='75' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-3979' size-in-bits='64' id='type-id-3980'/>
+      <pointer-type-def type-id='type-id-3973' size-in-bits='64' id='type-id-3981'/>
+      <pointer-type-def type-id='type-id-3982' size-in-bits='64' id='type-id-3974'/>
+      <pointer-type-def type-id='type-id-3983' size-in-bits='64' id='type-id-3978'/>
+      <pointer-type-def type-id='type-id-3984' size-in-bits='64' id='type-id-3976'/>
+      <pointer-type-def type-id='type-id-3985' size-in-bits='64' id='type-id-3975'/>
+      <pointer-type-def type-id='type-id-3986' size-in-bits='64' id='type-id-3977'/>
+      <function-decl name='pci_disable_device' mangled-name='pci_disable_device' filepath='drivers/pci/pci.c' line='1852' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_disable_device'>
+        <parameter type-id='type-id-3932' name='dev' filepath='drivers/pci/pci.c' line='1852' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='pci_find_next_capability' mangled-name='pci_find_next_capability' filepath='drivers/pci/pci.c' line='393' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_find_next_capability'>
+        <parameter type-id='type-id-3932' name='dev' filepath='drivers/pci/pci.c' line='393' column='1'/>
+        <parameter type-id='type-id-214' name='pos' filepath='drivers/pci/pci.c' line='393' column='1'/>
+        <parameter type-id='type-id-17' name='cap' filepath='drivers/pci/pci.c' line='393' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='pci_find_capability' mangled-name='pci_find_capability' filepath='drivers/pci/pci.c' line='439' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_find_capability'>
+        <parameter type-id='type-id-3932' name='dev' filepath='drivers/pci/pci.c' line='439' column='1'/>
+        <parameter type-id='type-id-17' name='cap' filepath='drivers/pci/pci.c' line='439' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='pci_find_ext_capability' mangled-name='pci_find_ext_capability' filepath='drivers/pci/pci.c' line='545' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_find_ext_capability'>
+        <parameter type-id='type-id-3932' name='dev' filepath='drivers/pci/pci.c' line='545' column='1'/>
+        <parameter type-id='type-id-17' name='cap' filepath='drivers/pci/pci.c' line='545' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='pci_enable_device' mangled-name='pci_enable_device' filepath='drivers/pci/pci.c' line='1660' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_enable_device'>
+        <parameter type-id='type-id-3932' name='dev' filepath='drivers/pci/pci.c' line='1660' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='pci_release_selected_regions' mangled-name='pci_release_selected_regions' filepath='drivers/pci/pci.c' line='3679' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_release_selected_regions'>
+        <parameter type-id='type-id-3932' name='pdev' filepath='drivers/pci/pci.c' line='3679' column='1'/>
+        <parameter type-id='type-id-17' name='bars' filepath='drivers/pci/pci.c' line='3679' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='pci_request_selected_regions' mangled-name='pci_request_selected_regions' filepath='drivers/pci/pci.c' line='3715' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_request_selected_regions'>
+        <parameter type-id='type-id-3932' name='pdev' filepath='drivers/pci/pci.c' line='3715' column='1'/>
+        <parameter type-id='type-id-17' name='bars' filepath='drivers/pci/pci.c' line='3715' column='1'/>
+        <parameter type-id='type-id-4' name='res_name' filepath='drivers/pci/pci.c' line='3716' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='pci_set_master' mangled-name='pci_set_master' filepath='drivers/pci/pci.c' line='4077' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_set_master'>
+        <parameter type-id='type-id-3932' name='dev' filepath='drivers/pci/pci.c' line='4077' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-3982'>
+        <parameter type-id='type-id-3943'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3983'>
+        <parameter type-id='type-id-3943'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3984'>
+        <parameter type-id='type-id-3943'/>
+        <parameter type-id='type-id-7'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3985'>
+        <parameter type-id='type-id-3943'/>
+        <parameter type-id='type-id-214'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-3986'>
+        <parameter type-id='type-id-3943'/>
+        <parameter type-id='type-id-3121'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/hweight.c' language='LANG_C89'>
+      <function-decl name='__sw_hweight64' mangled-name='__sw_hweight64' filepath='lib/hweight.c' line='50' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__sw_hweight64'>
+        <parameter type-id='type-id-100' name='w' filepath='lib/hweight.c' line='50' column='1'/>
+        <return type-id='type-id-16'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/nlattr.c' language='LANG_C89'>
+      <union-decl name='__anonymous_union__' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='666' column='1' id='type-id-3987'>
+        <data-member access='private'>
+          <var-decl name='' type-id='type-id-3988' visibility='default' filepath='include/linux/skbuff.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rbnode' type-id='type-id-422' visibility='default' filepath='include/linux/skbuff.h' line='681' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/skbuff.h' line='682' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='667' column='1' id='type-id-3988'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='type-id-1768' visibility='default' filepath='include/linux/skbuff.h' line='669' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prev' type-id='type-id-1768' visibility='default' filepath='include/linux/skbuff.h' line='670' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='type-id-3989' visibility='default' filepath='include/linux/skbuff.h' line='672' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='672' column='1' id='type-id-3989'>
+        <data-member access='private'>
+          <var-decl name='dev' type-id='type-id-3405' visibility='default' filepath='include/linux/skbuff.h' line='673' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='dev_scratch' type-id='type-id-16' visibility='default' filepath='include/linux/skbuff.h' line='678' column='1'/>
+        </data-member>
+      </union-decl>
+      <function-decl name='nla_parse' mangled-name='nla_parse' filepath='lib/nlattr.c' line='240' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nla_parse'>
+        <parameter type-id='type-id-3034' name='tb' filepath='lib/nlattr.c' line='240' column='1'/>
+        <parameter type-id='type-id-17' name='maxtype' filepath='lib/nlattr.c' line='240' column='1'/>
+        <parameter type-id='type-id-1808' name='head' filepath='lib/nlattr.c' line='240' column='1'/>
+        <parameter type-id='type-id-17' name='len' filepath='lib/nlattr.c' line='241' column='1'/>
+        <parameter type-id='type-id-2188' name='policy' filepath='lib/nlattr.c' line='241' column='1'/>
+        <parameter type-id='type-id-1826' name='extack' filepath='lib/nlattr.c' line='242' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='nla_memcpy' mangled-name='nla_memcpy' filepath='lib/nlattr.c' line='363' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nla_memcpy'>
+        <parameter type-id='type-id-15' name='dest' filepath='lib/nlattr.c' line='363' column='1'/>
+        <parameter type-id='type-id-1808' name='src' filepath='lib/nlattr.c' line='363' column='1'/>
+        <parameter type-id='type-id-17' name='count' filepath='lib/nlattr.c' line='363' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='nla_put' mangled-name='nla_put' filepath='lib/nlattr.c' line='622' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nla_put'>
+        <parameter type-id='type-id-1768' name='skb' filepath='lib/nlattr.c' line='622' column='1'/>
+        <parameter type-id='type-id-17' name='attrtype' filepath='lib/nlattr.c' line='622' column='1'/>
+        <parameter type-id='type-id-17' name='attrlen' filepath='lib/nlattr.c' line='622' column='1'/>
+        <parameter type-id='type-id-15' name='data' filepath='lib/nlattr.c' line='622' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/pci/msi.c' language='LANG_C89'>
+      <qualified-type-def type-id='type-id-3841' const='yes' id='type-id-3990'/>
+      <pointer-type-def type-id='type-id-3990' size-in-bits='64' id='type-id-3991'/>
+      <function-decl name='pci_alloc_irq_vectors_affinity' mangled-name='pci_alloc_irq_vectors_affinity' filepath='drivers/pci/msi.c' line='1153' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_alloc_irq_vectors_affinity'>
+        <parameter type-id='type-id-3932' name='dev' filepath='drivers/pci/msi.c' line='1153' column='1'/>
+        <parameter type-id='type-id-5' name='min_vecs' filepath='drivers/pci/msi.c' line='1153' column='1'/>
+        <parameter type-id='type-id-5' name='max_vecs' filepath='drivers/pci/msi.c' line='1154' column='1'/>
+        <parameter type-id='type-id-5' name='flags' filepath='drivers/pci/msi.c' line='1154' column='1'/>
+        <parameter type-id='type-id-3991' name='affd' filepath='drivers/pci/msi.c' line='1155' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='pci_free_irq_vectors' mangled-name='pci_free_irq_vectors' filepath='drivers/pci/msi.c' line='1203' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_free_irq_vectors'>
+        <parameter type-id='type-id-3932' name='dev' filepath='drivers/pci/msi.c' line='1203' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='pci_irq_vector' mangled-name='pci_irq_vector' filepath='drivers/pci/msi.c' line='1215' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_irq_vector'>
+        <parameter type-id='type-id-3932' name='dev' filepath='drivers/pci/msi.c' line='1215' column='1'/>
+        <parameter type-id='type-id-5' name='nr' filepath='drivers/pci/msi.c' line='1215' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='pci_irq_get_affinity' mangled-name='pci_irq_get_affinity' filepath='drivers/pci/msi.c' line='1249' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_irq_get_affinity'>
+        <parameter type-id='type-id-3932' name='dev' filepath='drivers/pci/msi.c' line='1249' column='1'/>
+        <parameter type-id='type-id-17' name='nr' filepath='drivers/pci/msi.c' line='1249' column='1'/>
+        <return type-id='type-id-3386'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/property.c' language='LANG_C89'>
+      <function-decl name='dev_fwnode' mangled-name='dev_fwnode' filepath='drivers/base/property.c' line='251' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_fwnode'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/base/property.c' line='251' column='1'/>
+        <return type-id='type-id-2025'/>
+      </function-decl>
+      <function-decl name='device_property_present' mangled-name='device_property_present' filepath='drivers/base/property.c' line='310' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_property_present'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/base/property.c' line='310' column='1'/>
+        <parameter type-id='type-id-4' name='propname' filepath='drivers/base/property.c' line='310' column='1'/>
+        <return type-id='type-id-33'/>
+      </function-decl>
+      <function-decl name='device_property_read_u32_array' mangled-name='device_property_read_u32_array' filepath='drivers/base/property.c' line='403' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_property_read_u32_array'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/base/property.c' line='403' column='1'/>
+        <parameter type-id='type-id-4' name='propname' filepath='drivers/base/property.c' line='403' column='1'/>
+        <parameter type-id='type-id-1567' name='val' filepath='drivers/base/property.c' line='404' column='1'/>
+        <parameter type-id='type-id-84' name='nval' filepath='drivers/base/property.c' line='404' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/of/base.c' language='LANG_C89'>
+      <qualified-type-def type-id='type-id-3540' const='yes' id='type-id-3992'/>
+      <pointer-type-def type-id='type-id-3992' size-in-bits='64' id='type-id-3993'/>
+      <function-decl name='of_find_property' mangled-name='of_find_property' filepath='drivers/of/base.c' line='264' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_find_property'>
+        <parameter type-id='type-id-3993' name='np' filepath='drivers/of/base.c' line='264' column='1'/>
+        <parameter type-id='type-id-4' name='name' filepath='drivers/of/base.c' line='265' column='1'/>
+        <parameter type-id='type-id-666' name='lenp' filepath='drivers/of/base.c' line='266' column='1'/>
+        <return type-id='type-id-3542'/>
+      </function-decl>
+      <function-decl name='of_get_property' mangled-name='of_get_property' filepath='drivers/of/base.c' line='334' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_get_property'>
+        <parameter type-id='type-id-3993' name='np' filepath='drivers/of/base.c' line='334' column='1'/>
+        <parameter type-id='type-id-4' name='name' filepath='drivers/of/base.c' line='334' column='1'/>
+        <parameter type-id='type-id-666' name='lenp' filepath='drivers/of/base.c' line='335' column='1'/>
+        <return type-id='type-id-15'/>
+      </function-decl>
+      <function-decl name='of_device_is_compatible' mangled-name='of_device_is_compatible' filepath='drivers/of/base.c' line='541' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_device_is_compatible'>
+        <parameter type-id='type-id-3993' name='device' filepath='drivers/of/base.c' line='541' column='1'/>
+        <parameter type-id='type-id-4' name='compat' filepath='drivers/of/base.c' line='542' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='of_device_is_big_endian' mangled-name='of_device_is_big_endian' filepath='drivers/of/base.c' line='658' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_device_is_big_endian'>
+        <parameter type-id='type-id-3993' name='device' filepath='drivers/of/base.c' line='658' column='1'/>
+        <return type-id='type-id-33'/>
+      </function-decl>
+      <function-decl name='of_get_next_child' mangled-name='of_get_next_child' filepath='drivers/of/base.c' line='746' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_get_next_child'>
+        <parameter type-id='type-id-3993' name='node' filepath='drivers/of/base.c' line='746' column='1'/>
+        <parameter type-id='type-id-3543' name='prev' filepath='drivers/of/base.c' line='747' column='1'/>
+        <return type-id='type-id-3543'/>
+      </function-decl>
+      <function-decl name='of_get_child_by_name' mangled-name='of_get_child_by_name' filepath='drivers/of/base.c' line='826' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_get_child_by_name'>
+        <parameter type-id='type-id-3993' name='node' filepath='drivers/of/base.c' line='826' column='1'/>
+        <parameter type-id='type-id-4' name='name' filepath='drivers/of/base.c' line='827' column='1'/>
+        <return type-id='type-id-3543'/>
+      </function-decl>
+      <function-decl name='of_parse_phandle' mangled-name='of_parse_phandle' filepath='drivers/of/base.c' line='1408' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_parse_phandle'>
+        <parameter type-id='type-id-3993' name='np' filepath='drivers/of/base.c' line='1408' column='1'/>
+        <parameter type-id='type-id-4' name='phandle_name' filepath='drivers/of/base.c' line='1409' column='1'/>
+        <parameter type-id='type-id-17' name='index' filepath='drivers/of/base.c' line='1409' column='1'/>
+        <return type-id='type-id-3543'/>
+      </function-decl>
+      <function-decl name='of_alias_get_id' mangled-name='of_alias_get_id' filepath='drivers/of/base.c' line='1977' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_alias_get_id'>
+        <parameter type-id='type-id-3543' name='np' filepath='drivers/of/base.c' line='1977' column='1'/>
+        <parameter type-id='type-id-4' name='stem' filepath='drivers/of/base.c' line='1977' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/regulator/core.c' language='LANG_C89'>
+      <class-decl name='regmap' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-3994'/>
+      <array-type-def dimensions='1' type-id='type-id-3995' size-in-bits='256' id='type-id-3996'>
+        <subrange length='4' type-id='type-id-9' id='type-id-107'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-3997' size-in-bits='320' id='type-id-3998'>
+        <subrange length='5' type-id='type-id-9' id='type-id-110'/>
+
+      </array-type-def>
+      <class-decl name='regulator' size-in-bits='1024' is-struct='yes' visibility='default' filepath='drivers/regulator/internal.h' line='39' column='1' id='type-id-3999'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='type-id-240' visibility='default' filepath='drivers/regulator/internal.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='drivers/regulator/internal.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='always_on' type-id='type-id-5' visibility='default' filepath='drivers/regulator/internal.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='bypass' type-id='type-id-5' visibility='default' filepath='drivers/regulator/internal.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='uA_load' type-id='type-id-17' visibility='default' filepath='drivers/regulator/internal.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='voltage' type-id='type-id-3998' visibility='default' filepath='drivers/regulator/internal.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='supply_name' type-id='type-id-4' visibility='default' filepath='drivers/regulator/internal.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='dev_attr' type-id='type-id-3288' visibility='default' filepath='drivers/regulator/internal.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='rdev' type-id='type-id-3995' visibility='default' filepath='drivers/regulator/internal.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='debugfs' type-id='type-id-23' visibility='default' filepath='drivers/regulator/internal.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator_voltage' size-in-bits='64' is-struct='yes' visibility='default' filepath='drivers/regulator/internal.h' line='23' column='1' id='type-id-3997'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min_uV' type-id='type-id-17' visibility='default' filepath='drivers/regulator/internal.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max_uV' type-id='type-id-17' visibility='default' filepath='drivers/regulator/internal.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='device_attribute' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='580' column='1' id='type-id-3288'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attr' type-id='type-id-619' visibility='default' filepath='include/linux/device.h' line='581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='show' type-id='type-id-4000' visibility='default' filepath='include/linux/device.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='store' type-id='type-id-4001' visibility='default' filepath='include/linux/device.h' line='584' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator_dev' size-in-bits='9152' is-struct='yes' visibility='default' filepath='include/linux/regulator/driver.h' line='438' column='1' id='type-id-4002'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='desc' type-id='type-id-4003' visibility='default' filepath='include/linux/regulator/driver.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='exclusive' type-id='type-id-17' visibility='default' filepath='include/linux/regulator/driver.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='use_count' type-id='type-id-7' visibility='default' filepath='include/linux/regulator/driver.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='open_count' type-id='type-id-7' visibility='default' filepath='include/linux/regulator/driver.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='bypass_count' type-id='type-id-7' visibility='default' filepath='include/linux/regulator/driver.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/regulator/driver.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='consumer_list' type-id='type-id-20' visibility='default' filepath='include/linux/regulator/driver.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='coupling_desc' type-id='type-id-4004' visibility='default' filepath='include/linux/regulator/driver.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='notifier' type-id='type-id-3278' visibility='default' filepath='include/linux/regulator/driver.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='mutex' type-id='type-id-245' visibility='default' filepath='include/linux/regulator/driver.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='mutex_owner' type-id='type-id-431' visibility='default' filepath='include/linux/regulator/driver.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='ref_cnt' type-id='type-id-17' visibility='default' filepath='include/linux/regulator/driver.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='include/linux/regulator/driver.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='dev' type-id='type-id-388' visibility='default' filepath='include/linux/regulator/driver.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='constraints' type-id='type-id-4005' visibility='default' filepath='include/linux/regulator/driver.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='supply' type-id='type-id-4006' visibility='default' filepath='include/linux/regulator/driver.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='supply_name' type-id='type-id-4' visibility='default' filepath='include/linux/regulator/driver.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='regmap' type-id='type-id-4007' visibility='default' filepath='include/linux/regulator/driver.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='disable_work' type-id='type-id-411' visibility='default' filepath='include/linux/regulator/driver.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='deferred_disables' type-id='type-id-17' visibility='default' filepath='include/linux/regulator/driver.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='reg_data' type-id='type-id-15' visibility='default' filepath='include/linux/regulator/driver.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='debugfs' type-id='type-id-23' visibility='default' filepath='include/linux/regulator/driver.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='ena_pin' type-id='type-id-4008' visibility='default' filepath='include/linux/regulator/driver.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='ena_gpio_state' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='is_switch' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='last_off_jiffy' type-id='type-id-16' visibility='default' filepath='include/linux/regulator/driver.h' line='477' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator_desc' size-in-bits='1984' is-struct='yes' visibility='default' filepath='include/linux/regulator/driver.h' line='317' column='1' id='type-id-4009'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/regulator/driver.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='supply_name' type-id='type-id-4' visibility='default' filepath='include/linux/regulator/driver.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='of_match' type-id='type-id-4' visibility='default' filepath='include/linux/regulator/driver.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='regulators_node' type-id='type-id-4' visibility='default' filepath='include/linux/regulator/driver.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='of_parse_cb' type-id='type-id-4010' visibility='default' filepath='include/linux/regulator/driver.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='id' type-id='type-id-17' visibility='default' filepath='include/linux/regulator/driver.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='continuous_voltage_range' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='n_voltages' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ops' type-id='type-id-4011' visibility='default' filepath='include/linux/regulator/driver.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='irq' type-id='type-id-17' visibility='default' filepath='include/linux/regulator/driver.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='type' type-id='type-id-4012' visibility='default' filepath='include/linux/regulator/driver.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='include/linux/regulator/driver.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='min_uV' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='uV_step' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='linear_min_sel' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='fixed_uV' type-id='type-id-17' visibility='default' filepath='include/linux/regulator/driver.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='ramp_delay' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='min_dropout_uV' type-id='type-id-17' visibility='default' filepath='include/linux/regulator/driver.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='linear_ranges' type-id='type-id-4013' visibility='default' filepath='include/linux/regulator/driver.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='n_linear_ranges' type-id='type-id-17' visibility='default' filepath='include/linux/regulator/driver.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='volt_table' type-id='type-id-4014' visibility='default' filepath='include/linux/regulator/driver.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='vsel_reg' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='vsel_mask' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='csel_reg' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='csel_mask' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='apply_reg' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='apply_bit' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='enable_reg' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='enable_mask' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='enable_val' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='disable_val' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='enable_is_inverted' type-id='type-id-33' visibility='default' filepath='include/linux/regulator/driver.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='bypass_reg' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='bypass_mask' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='bypass_val_on' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='bypass_val_off' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='active_discharge_on' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='active_discharge_off' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='active_discharge_mask' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='active_discharge_reg' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='soft_start_reg' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='soft_start_mask' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='soft_start_val_on' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='pull_down_reg' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1760'>
+          <var-decl name='pull_down_mask' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='pull_down_val_on' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='enable_time' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='off_on_delay' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='of_map_mode' type-id='type-id-4015' visibility='default' filepath='include/linux/regulator/driver.h' line='375' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator_config' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/regulator/driver.h' line='400' column='1' id='type-id-4016'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='type-id-240' visibility='default' filepath='include/linux/regulator/driver.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='init_data' type-id='type-id-4017' visibility='default' filepath='include/linux/regulator/driver.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='driver_data' type-id='type-id-15' visibility='default' filepath='include/linux/regulator/driver.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='of_node' type-id='type-id-3543' visibility='default' filepath='include/linux/regulator/driver.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='regmap' type-id='type-id-4007' visibility='default' filepath='include/linux/regulator/driver.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ena_gpio_initialized' type-id='type-id-33' visibility='default' filepath='include/linux/regulator/driver.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='ena_gpio' type-id='type-id-17' visibility='default' filepath='include/linux/regulator/driver.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ena_gpiod' type-id='type-id-4018' visibility='default' filepath='include/linux/regulator/driver.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='ena_gpio_invert' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='ena_gpio_flags' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='411' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator_init_data' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/linux/regulator/machine.h' line='235' column='1' id='type-id-4019'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='supply_regulator' type-id='type-id-4' visibility='default' filepath='include/linux/regulator/machine.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='constraints' type-id='type-id-4020' visibility='default' filepath='include/linux/regulator/machine.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='num_consumer_supplies' type-id='type-id-17' visibility='default' filepath='include/linux/regulator/machine.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='consumer_supplies' type-id='type-id-4021' visibility='default' filepath='include/linux/regulator/machine.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='regulator_init' type-id='type-id-3366' visibility='default' filepath='include/linux/regulator/machine.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='driver_data' type-id='type-id-15' visibility='default' filepath='include/linux/regulator/machine.h' line='245' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulation_constraints' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/linux/regulator/machine.h' line='141' column='1' id='type-id-4020'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/regulator/machine.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='min_uV' type-id='type-id-17' visibility='default' filepath='include/linux/regulator/machine.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_uV' type-id='type-id-17' visibility='default' filepath='include/linux/regulator/machine.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='uV_offset' type-id='type-id-17' visibility='default' filepath='include/linux/regulator/machine.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='min_uA' type-id='type-id-17' visibility='default' filepath='include/linux/regulator/machine.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_uA' type-id='type-id-17' visibility='default' filepath='include/linux/regulator/machine.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='ilim_uA' type-id='type-id-17' visibility='default' filepath='include/linux/regulator/machine.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='system_load' type-id='type-id-17' visibility='default' filepath='include/linux/regulator/machine.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='max_spread' type-id='type-id-17' visibility='default' filepath='include/linux/regulator/machine.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='valid_modes_mask' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/machine.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='valid_ops_mask' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/machine.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='input_uV' type-id='type-id-17' visibility='default' filepath='include/linux/regulator/machine.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='state_disk' type-id='type-id-4022' visibility='default' filepath='include/linux/regulator/machine.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='state_mem' type-id='type-id-4022' visibility='default' filepath='include/linux/regulator/machine.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='state_standby' type-id='type-id-4022' visibility='default' filepath='include/linux/regulator/machine.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='initial_state' type-id='type-id-4023' visibility='default' filepath='include/linux/regulator/machine.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='initial_mode' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/machine.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='ramp_delay' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/machine.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='settling_time' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/machine.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='settling_time_up' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/machine.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='settling_time_down' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/machine.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='enable_time' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/machine.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='active_discharge' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/machine.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='always_on' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/machine.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='boot_on' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/machine.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='apply_uV' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/machine.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='ramp_disable' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/machine.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='soft_start' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/machine.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='pull_down' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/machine.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='over_current_protection' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/machine.h' line='194' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator_state' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/regulator/machine.h' line='80' column='1' id='type-id-4022'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='uV' type-id='type-id-17' visibility='default' filepath='include/linux/regulator/machine.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='min_uV' type-id='type-id-17' visibility='default' filepath='include/linux/regulator/machine.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_uV' type-id='type-id-17' visibility='default' filepath='include/linux/regulator/machine.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='mode' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/machine.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='enabled' type-id='type-id-17' visibility='default' filepath='include/linux/regulator/machine.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='changeable' type-id='type-id-33' visibility='default' filepath='include/linux/regulator/machine.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='suspend_state_t' type-id='type-id-17' filepath='include/linux/suspend.h' line='34' column='1' id='type-id-4023'/>
+      <class-decl name='regulator_consumer_supply' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/regulator/machine.h' line='206' column='1' id='type-id-4024'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev_name' type-id='type-id-4' visibility='default' filepath='include/linux/regulator/machine.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='supply' type-id='type-id-4' visibility='default' filepath='include/linux/regulator/machine.h' line='208' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator_ops' size-in-bits='2112' is-struct='yes' visibility='default' filepath='include/linux/regulator/driver.h' line='148' column='1' id='type-id-4025'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list_voltage' type-id='type-id-4026' visibility='default' filepath='include/linux/regulator/driver.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='set_voltage' type-id='type-id-4027' visibility='default' filepath='include/linux/regulator/driver.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map_voltage' type-id='type-id-4028' visibility='default' filepath='include/linux/regulator/driver.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='set_voltage_sel' type-id='type-id-4026' visibility='default' filepath='include/linux/regulator/driver.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_voltage' type-id='type-id-4029' visibility='default' filepath='include/linux/regulator/driver.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_voltage_sel' type-id='type-id-4029' visibility='default' filepath='include/linux/regulator/driver.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_current_limit' type-id='type-id-4028' visibility='default' filepath='include/linux/regulator/driver.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_current_limit' type-id='type-id-4029' visibility='default' filepath='include/linux/regulator/driver.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_input_current_limit' type-id='type-id-4030' visibility='default' filepath='include/linux/regulator/driver.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_over_current_protection' type-id='type-id-4029' visibility='default' filepath='include/linux/regulator/driver.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_active_discharge' type-id='type-id-4031' visibility='default' filepath='include/linux/regulator/driver.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='enable' type-id='type-id-4029' visibility='default' filepath='include/linux/regulator/driver.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='disable' type-id='type-id-4029' visibility='default' filepath='include/linux/regulator/driver.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='is_enabled' type-id='type-id-4029' visibility='default' filepath='include/linux/regulator/driver.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='set_mode' type-id='type-id-4026' visibility='default' filepath='include/linux/regulator/driver.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='get_mode' type-id='type-id-4032' visibility='default' filepath='include/linux/regulator/driver.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='get_error_flags' type-id='type-id-4033' visibility='default' filepath='include/linux/regulator/driver.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='enable_time' type-id='type-id-4029' visibility='default' filepath='include/linux/regulator/driver.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='set_ramp_delay' type-id='type-id-4030' visibility='default' filepath='include/linux/regulator/driver.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='set_voltage_time' type-id='type-id-4028' visibility='default' filepath='include/linux/regulator/driver.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='set_voltage_time_sel' type-id='type-id-4034' visibility='default' filepath='include/linux/regulator/driver.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='set_soft_start' type-id='type-id-4029' visibility='default' filepath='include/linux/regulator/driver.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='get_status' type-id='type-id-4029' visibility='default' filepath='include/linux/regulator/driver.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='get_optimum_mode' type-id='type-id-4035' visibility='default' filepath='include/linux/regulator/driver.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='set_load' type-id='type-id-4030' visibility='default' filepath='include/linux/regulator/driver.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='set_bypass' type-id='type-id-4031' visibility='default' filepath='include/linux/regulator/driver.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='get_bypass' type-id='type-id-4036' visibility='default' filepath='include/linux/regulator/driver.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='set_suspend_voltage' type-id='type-id-4030' visibility='default' filepath='include/linux/regulator/driver.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='set_suspend_enable' type-id='type-id-4029' visibility='default' filepath='include/linux/regulator/driver.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='set_suspend_disable' type-id='type-id-4029' visibility='default' filepath='include/linux/regulator/driver.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='set_suspend_mode' type-id='type-id-4026' visibility='default' filepath='include/linux/regulator/driver.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='resume' type-id='type-id-4029' visibility='default' filepath='include/linux/regulator/driver.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='set_pull_down' type-id='type-id-4029' visibility='default' filepath='include/linux/regulator/driver.h' line='225' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='regulator_type' filepath='include/linux/regulator/driver.h' line='231' column='1' id='type-id-4012'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='REGULATOR_VOLTAGE' value='0'/>
+        <enumerator name='REGULATOR_CURRENT' value='1'/>
+      </enum-decl>
+      <class-decl name='regulator_linear_range' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/regulator/driver.h' line='57' column='1' id='type-id-4037'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min_uV' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='min_sel' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_sel' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='uV_step' type-id='type-id-5' visibility='default' filepath='include/linux/regulator/driver.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='coupling_desc' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/regulator/driver.h' line='422' column='1' id='type-id-4004'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='coupled_rdevs' type-id='type-id-3996' visibility='default' filepath='include/linux/regulator/driver.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='n_resolved' type-id='type-id-17' visibility='default' filepath='include/linux/regulator/driver.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='n_coupled' type-id='type-id-17' visibility='default' filepath='include/linux/regulator/driver.h' line='425' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blocking_notifier_head' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/notifier.h' line='65' column='1' id='type-id-3278'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rwsem' type-id='type-id-246' visibility='default' filepath='include/linux/notifier.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='head' type-id='type-id-3271' visibility='default' filepath='include/linux/notifier.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator_enable_gpio' size-in-bits='320' is-struct='yes' visibility='default' filepath='drivers/regulator/core.c' line='78' column='1' id='type-id-4038'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='drivers/regulator/core.c' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='gpiod' type-id='type-id-4018' visibility='default' filepath='drivers/regulator/core.c' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='enable_count' type-id='type-id-7' visibility='default' filepath='drivers/regulator/core.c' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='request_count' type-id='type-id-7' visibility='default' filepath='drivers/regulator/core.c' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='ena_gpio_invert' type-id='type-id-5' visibility='default' filepath='drivers/regulator/core.c' line='83' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='type-id-4009' const='yes' id='type-id-4039'/>
+      <pointer-type-def type-id='type-id-4039' size-in-bits='64' id='type-id-4003'/>
+      <qualified-type-def type-id='type-id-4019' const='yes' id='type-id-4040'/>
+      <pointer-type-def type-id='type-id-4040' size-in-bits='64' id='type-id-4017'/>
+      <qualified-type-def type-id='type-id-4037' const='yes' id='type-id-4041'/>
+      <pointer-type-def type-id='type-id-4041' size-in-bits='64' id='type-id-4013'/>
+      <qualified-type-def type-id='type-id-4025' const='yes' id='type-id-4042'/>
+      <pointer-type-def type-id='type-id-4042' size-in-bits='64' id='type-id-4011'/>
+      <pointer-type-def type-id='type-id-893' size-in-bits='64' id='type-id-4014'/>
+      <pointer-type-def type-id='type-id-3288' size-in-bits='64' id='type-id-4043'/>
+      <pointer-type-def type-id='type-id-4044' size-in-bits='64' id='type-id-4010'/>
+      <pointer-type-def type-id='type-id-4045' size-in-bits='64' id='type-id-4029'/>
+      <pointer-type-def type-id='type-id-4046' size-in-bits='64' id='type-id-4036'/>
+      <pointer-type-def type-id='type-id-4047' size-in-bits='64' id='type-id-4030'/>
+      <pointer-type-def type-id='type-id-4048' size-in-bits='64' id='type-id-4028'/>
+      <pointer-type-def type-id='type-id-4049' size-in-bits='64' id='type-id-4027'/>
+      <pointer-type-def type-id='type-id-4050' size-in-bits='64' id='type-id-4031'/>
+      <pointer-type-def type-id='type-id-4051' size-in-bits='64' id='type-id-4026'/>
+      <pointer-type-def type-id='type-id-4052' size-in-bits='64' id='type-id-4033'/>
+      <pointer-type-def type-id='type-id-4053' size-in-bits='64' id='type-id-4034'/>
+      <pointer-type-def type-id='type-id-3994' size-in-bits='64' id='type-id-4007'/>
+      <pointer-type-def type-id='type-id-4020' size-in-bits='64' id='type-id-4005'/>
+      <pointer-type-def type-id='type-id-3999' size-in-bits='64' id='type-id-4006'/>
+      <pointer-type-def type-id='type-id-4016' size-in-bits='64' id='type-id-4054'/>
+      <pointer-type-def type-id='type-id-4024' size-in-bits='64' id='type-id-4021'/>
+      <pointer-type-def type-id='type-id-4002' size-in-bits='64' id='type-id-3995'/>
+      <pointer-type-def type-id='type-id-4038' size-in-bits='64' id='type-id-4008'/>
+      <pointer-type-def type-id='type-id-4055' size-in-bits='64' id='type-id-4000'/>
+      <pointer-type-def type-id='type-id-4056' size-in-bits='64' id='type-id-4001'/>
+      <pointer-type-def type-id='type-id-4057' size-in-bits='64' id='type-id-4032'/>
+      <pointer-type-def type-id='type-id-4058' size-in-bits='64' id='type-id-4035'/>
+      <pointer-type-def type-id='type-id-4059' size-in-bits='64' id='type-id-4015'/>
+      <function-decl name='regulator_enable' mangled-name='regulator_enable' filepath='drivers/regulator/core.c' line='2271' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_enable'>
+        <parameter type-id='type-id-4006' name='regulator' filepath='drivers/regulator/core.c' line='2271' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='regulator_disable' mangled-name='regulator_disable' filepath='drivers/regulator/core.c' line='2385' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_disable'>
+        <parameter type-id='type-id-4006' name='regulator' filepath='drivers/regulator/core.c' line='2385' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='regulator_count_voltages' mangled-name='regulator_count_voltages' filepath='drivers/regulator/core.c' line='2611' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_count_voltages'>
+        <parameter type-id='type-id-4006' name='regulator' filepath='drivers/regulator/core.c' line='2611' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='regulator_list_voltage' mangled-name='regulator_list_voltage' filepath='drivers/regulator/core.c' line='2635' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_list_voltage'>
+        <parameter type-id='type-id-4006' name='regulator' filepath='drivers/regulator/core.c' line='2635' column='1'/>
+        <parameter type-id='type-id-5' name='selector' filepath='drivers/regulator/core.c' line='2635' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='regulator_is_supported_voltage' mangled-name='regulator_is_supported_voltage' filepath='drivers/regulator/core.c' line='2736' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_is_supported_voltage'>
+        <parameter type-id='type-id-4006' name='regulator' filepath='drivers/regulator/core.c' line='2736' column='1'/>
+        <parameter type-id='type-id-17' name='min_uV' filepath='drivers/regulator/core.c' line='2737' column='1'/>
+        <parameter type-id='type-id-17' name='max_uV' filepath='drivers/regulator/core.c' line='2737' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='regulator_get_voltage' mangled-name='regulator_get_voltage' filepath='drivers/regulator/core.c' line='3417' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_get_voltage'>
+        <parameter type-id='type-id-4006' name='regulator' filepath='drivers/regulator/core.c' line='3417' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='regulator_set_voltage' mangled-name='regulator_set_voltage' filepath='drivers/regulator/core.c' line='3137' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_set_voltage'>
+        <parameter type-id='type-id-4006' name='regulator' filepath='drivers/regulator/core.c' line='3137' column='1'/>
+        <parameter type-id='type-id-17' name='min_uV' filepath='drivers/regulator/core.c' line='3137' column='1'/>
+        <parameter type-id='type-id-17' name='max_uV' filepath='drivers/regulator/core.c' line='3137' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='regulator_get_current_limit' mangled-name='regulator_get_current_limit' filepath='drivers/regulator/core.c' line='3500' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_get_current_limit'>
+        <parameter type-id='type-id-4006' name='regulator' filepath='drivers/regulator/core.c' line='3500' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-4044'>
+        <parameter type-id='type-id-3543'/>
+        <parameter type-id='type-id-4003'/>
+        <parameter type-id='type-id-4054'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4045'>
+        <parameter type-id='type-id-3995'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4046'>
+        <parameter type-id='type-id-3995'/>
+        <parameter type-id='type-id-2611'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4047'>
+        <parameter type-id='type-id-3995'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4048'>
+        <parameter type-id='type-id-3995'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4049'>
+        <parameter type-id='type-id-3995'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-482'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4050'>
+        <parameter type-id='type-id-3995'/>
+        <parameter type-id='type-id-33'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4051'>
+        <parameter type-id='type-id-3995'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4052'>
+        <parameter type-id='type-id-3995'/>
+        <parameter type-id='type-id-482'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4053'>
+        <parameter type-id='type-id-3995'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4055'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-4043'/>
+        <parameter type-id='type-id-2'/>
+        <return type-id='type-id-86'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4056'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-4043'/>
+        <parameter type-id='type-id-4'/>
+        <parameter type-id='type-id-84'/>
+        <return type-id='type-id-86'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4057'>
+        <parameter type-id='type-id-3995'/>
+        <return type-id='type-id-5'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4058'>
+        <parameter type-id='type-id-3995'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-5'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4059'>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-5'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpio/devres.c' language='LANG_C89'>
+      <class-decl name='irq_affinity_notify' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-4060'/>
+      <class-decl name='irqaction' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-4061'/>
+      <class-decl name='msi_desc' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-4062'/>
+      <class-decl name='msi_msg' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-4063'/>
+      <class-decl name='pinctrl' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-4064'/>
+      <class-decl name='pinctrl_state' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-4065'/>
+      <enum-decl name='irqchip_irq_state' id='type-id-4066'>
+        <underlying-type type-id='type-id-4067'/>
+      </enum-decl>
+      <array-type-def dimensions='1' type-id='type-id-4068' size-in-bits='infinite' id='type-id-4069'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-4070' size-in-bits='infinite' id='type-id-4071'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1343' size-in-bits='512' id='type-id-4072'>
+        <subrange length='16' type-id='type-id-9' id='type-id-135'/>
+
+      </array-type-def>
+      <type-decl name='unnamed-enum-underlying-type' is-anonymous='yes' id='type-id-4067'/>
+      <array-type-def dimensions='1' type-id='type-id-5' size-in-bits='infinite' id='type-id-4073'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <class-decl name='gpio_desc' size-in-bits='256' is-struct='yes' visibility='default' filepath='drivers/gpio/gpiolib.h' line='205' column='1' id='type-id-4074'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='gdev' type-id='type-id-4075' visibility='default' filepath='drivers/gpio/gpiolib.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='drivers/gpio/gpiolib.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='label' type-id='type-id-4' visibility='default' filepath='drivers/gpio/gpiolib.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='drivers/gpio/gpiolib.h' line='223' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='gpio_device' size-in-bits='7808' is-struct='yes' visibility='default' filepath='drivers/gpio/gpiolib.h' line='51' column='1' id='type-id-4076'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='type-id-17' visibility='default' filepath='drivers/gpio/gpiolib.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='type-id-388' visibility='default' filepath='drivers/gpio/gpiolib.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='chrdev' type-id='type-id-266' visibility='default' filepath='drivers/gpio/gpiolib.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7104'>
+          <var-decl name='mockdev' type-id='type-id-240' visibility='default' filepath='drivers/gpio/gpiolib.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='drivers/gpio/gpiolib.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='chip' type-id='type-id-4077' visibility='default' filepath='drivers/gpio/gpiolib.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='descs' type-id='type-id-4018' visibility='default' filepath='drivers/gpio/gpiolib.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='base' type-id='type-id-17' visibility='default' filepath='drivers/gpio/gpiolib.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7392'>
+          <var-decl name='ngpio' type-id='type-id-688' visibility='default' filepath='drivers/gpio/gpiolib.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='label' type-id='type-id-4' visibility='default' filepath='drivers/gpio/gpiolib.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='data' type-id='type-id-15' visibility='default' filepath='drivers/gpio/gpiolib.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='drivers/gpio/gpiolib.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='pin_ranges' type-id='type-id-20' visibility='default' filepath='drivers/gpio/gpiolib.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_domain' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/linux/irqdomain.h' line='157' column='1' id='type-id-4078'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='link' type-id='type-id-20' visibility='default' filepath='include/linux/irqdomain.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/irqdomain.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ops' type-id='type-id-4079' visibility='default' filepath='include/linux/irqdomain.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='host_data' type-id='type-id-15' visibility='default' filepath='include/linux/irqdomain.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='flags' type-id='type-id-5' visibility='default' filepath='include/linux/irqdomain.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='mapcount' type-id='type-id-5' visibility='default' filepath='include/linux/irqdomain.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fwnode' type-id='type-id-2025' visibility='default' filepath='include/linux/irqdomain.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='bus_token' type-id='type-id-4080' visibility='default' filepath='include/linux/irqdomain.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='gc' type-id='type-id-4081' visibility='default' filepath='include/linux/irqdomain.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='parent' type-id='type-id-4082' visibility='default' filepath='include/linux/irqdomain.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='hwirq_max' type-id='type-id-4083' visibility='default' filepath='include/linux/irqdomain.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='revmap_direct_max_irq' type-id='type-id-5' visibility='default' filepath='include/linux/irqdomain.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='revmap_size' type-id='type-id-5' visibility='default' filepath='include/linux/irqdomain.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='revmap_tree' type-id='type-id-415' visibility='default' filepath='include/linux/irqdomain.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='revmap_tree_mutex' type-id='type-id-245' visibility='default' filepath='include/linux/irqdomain.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='linear_revmap' type-id='type-id-4073' visibility='default' filepath='include/linux/irqdomain.h' line='182' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_domain_ops' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/irqdomain.h' line='100' column='1' id='type-id-4084'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='match' type-id='type-id-4085' visibility='default' filepath='include/linux/irqdomain.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='select' type-id='type-id-4086' visibility='default' filepath='include/linux/irqdomain.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map' type-id='type-id-4087' visibility='default' filepath='include/linux/irqdomain.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unmap' type-id='type-id-4088' visibility='default' filepath='include/linux/irqdomain.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='xlate' type-id='type-id-4089' visibility='default' filepath='include/linux/irqdomain.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='alloc' type-id='type-id-4090' visibility='default' filepath='include/linux/irqdomain.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='free' type-id='type-id-4091' visibility='default' filepath='include/linux/irqdomain.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='activate' type-id='type-id-4092' visibility='default' filepath='include/linux/irqdomain.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='deactivate' type-id='type-id-4093' visibility='default' filepath='include/linux/irqdomain.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='translate' type-id='type-id-4094' visibility='default' filepath='include/linux/irqdomain.h' line='118' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='irq_domain_bus_token' filepath='include/linux/irqdomain.h' line='75' column='1' id='type-id-4080'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='DOMAIN_BUS_ANY' value='0'/>
+        <enumerator name='DOMAIN_BUS_WIRED' value='1'/>
+        <enumerator name='DOMAIN_BUS_PCI_MSI' value='2'/>
+        <enumerator name='DOMAIN_BUS_PLATFORM_MSI' value='3'/>
+        <enumerator name='DOMAIN_BUS_NEXUS' value='4'/>
+        <enumerator name='DOMAIN_BUS_IPI' value='5'/>
+        <enumerator name='DOMAIN_BUS_FSL_MC_MSI' value='6'/>
+      </enum-decl>
+      <class-decl name='irq_fwspec' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/irqdomain.h' line='62' column='1' id='type-id-4095'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fwnode' type-id='type-id-2025' visibility='default' filepath='include/linux/irqdomain.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='param_count' type-id='type-id-17' visibility='default' filepath='include/linux/irqdomain.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='param' type-id='type-id-3922' visibility='default' filepath='include/linux/irqdomain.h' line='65' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='irq_hw_number_t' type-id='type-id-16' filepath='include/linux/types.h' line='174' column='1' id='type-id-4083'/>
+      <class-decl name='irq_data' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/irq.h' line='172' column='1' id='type-id-4096'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mask' type-id='type-id-7' visibility='default' filepath='include/linux/irq.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='irq' type-id='type-id-5' visibility='default' filepath='include/linux/irq.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hwirq' type-id='type-id-16' visibility='default' filepath='include/linux/irq.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='common' type-id='type-id-4097' visibility='default' filepath='include/linux/irq.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='chip' type-id='type-id-4098' visibility='default' filepath='include/linux/irq.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='domain' type-id='type-id-4082' visibility='default' filepath='include/linux/irq.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='parent_data' type-id='type-id-4099' visibility='default' filepath='include/linux/irq.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='chip_data' type-id='type-id-15' visibility='default' filepath='include/linux/irq.h' line='182' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_common_data' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/irq.h' line='142' column='1' id='type-id-4100'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state_use_accessors' type-id='type-id-5' visibility='default' filepath='include/linux/irq.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='handler_data' type-id='type-id-15' visibility='default' filepath='include/linux/irq.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='msi_desc' type-id='type-id-4101' visibility='default' filepath='include/linux/irq.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='affinity' type-id='type-id-38' visibility='default' filepath='include/linux/irq.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='effective_affinity' type-id='type-id-38' visibility='default' filepath='include/linux/irq.h' line='151' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_chip' size-in-bits='2176' is-struct='yes' visibility='default' filepath='include/linux/irq.h' line='446' column='1' id='type-id-4102'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='parent_device' type-id='type-id-240' visibility='default' filepath='include/linux/irq.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/irq.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='irq_startup' type-id='type-id-4103' visibility='default' filepath='include/linux/irq.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='irq_shutdown' type-id='type-id-4104' visibility='default' filepath='include/linux/irq.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='irq_enable' type-id='type-id-4104' visibility='default' filepath='include/linux/irq.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='irq_disable' type-id='type-id-4104' visibility='default' filepath='include/linux/irq.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='irq_ack' type-id='type-id-4104' visibility='default' filepath='include/linux/irq.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='irq_mask' type-id='type-id-4104' visibility='default' filepath='include/linux/irq.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='irq_mask_ack' type-id='type-id-4104' visibility='default' filepath='include/linux/irq.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='irq_unmask' type-id='type-id-4104' visibility='default' filepath='include/linux/irq.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='irq_eoi' type-id='type-id-4104' visibility='default' filepath='include/linux/irq.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='irq_set_affinity' type-id='type-id-4105' visibility='default' filepath='include/linux/irq.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='irq_retrigger' type-id='type-id-4106' visibility='default' filepath='include/linux/irq.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='irq_set_type' type-id='type-id-4107' visibility='default' filepath='include/linux/irq.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='irq_set_wake' type-id='type-id-4107' visibility='default' filepath='include/linux/irq.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='irq_bus_lock' type-id='type-id-4104' visibility='default' filepath='include/linux/irq.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='irq_bus_sync_unlock' type-id='type-id-4104' visibility='default' filepath='include/linux/irq.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='irq_cpu_online' type-id='type-id-4104' visibility='default' filepath='include/linux/irq.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='irq_cpu_offline' type-id='type-id-4104' visibility='default' filepath='include/linux/irq.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='irq_suspend' type-id='type-id-4104' visibility='default' filepath='include/linux/irq.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='irq_resume' type-id='type-id-4104' visibility='default' filepath='include/linux/irq.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='irq_pm_shutdown' type-id='type-id-4104' visibility='default' filepath='include/linux/irq.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='irq_calc_mask' type-id='type-id-4104' visibility='default' filepath='include/linux/irq.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='irq_print_chip' type-id='type-id-4108' visibility='default' filepath='include/linux/irq.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='irq_request_resources' type-id='type-id-4106' visibility='default' filepath='include/linux/irq.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='irq_release_resources' type-id='type-id-4104' visibility='default' filepath='include/linux/irq.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='irq_compose_msi_msg' type-id='type-id-4109' visibility='default' filepath='include/linux/irq.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='irq_write_msi_msg' type-id='type-id-4109' visibility='default' filepath='include/linux/irq.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='irq_get_irqchip_state' type-id='type-id-4110' visibility='default' filepath='include/linux/irq.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='irq_set_irqchip_state' type-id='type-id-4111' visibility='default' filepath='include/linux/irq.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='irq_set_vcpu_affinity' type-id='type-id-4112' visibility='default' filepath='include/linux/irq.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='ipi_send_single' type-id='type-id-4113' visibility='default' filepath='include/linux/irq.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='ipi_send_mask' type-id='type-id-4114' visibility='default' filepath='include/linux/irq.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='include/linux/irq.h' line='492' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_domain_chip_generic' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/irq.h' line='1024' column='1' id='type-id-4115'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='irqs_per_chip' type-id='type-id-5' visibility='default' filepath='include/linux/irq.h' line='1025' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='num_chips' type-id='type-id-5' visibility='default' filepath='include/linux/irq.h' line='1026' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='irq_flags_to_clear' type-id='type-id-5' visibility='default' filepath='include/linux/irq.h' line='1027' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='irq_flags_to_set' type-id='type-id-5' visibility='default' filepath='include/linux/irq.h' line='1028' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='gc_flags' type-id='type-id-4116' visibility='default' filepath='include/linux/irq.h' line='1029' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='gc' type-id='type-id-4069' visibility='default' filepath='include/linux/irq.h' line='1030' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='irq_gc_flags' filepath='include/linux/irq.h' line='1007' column='1' id='type-id-4116'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='IRQ_GC_INIT_MASK_CACHE' value='1'/>
+        <enumerator name='IRQ_GC_INIT_NESTED_LOCK' value='2'/>
+        <enumerator name='IRQ_GC_MASK_CACHE_PER_TYPE' value='4'/>
+        <enumerator name='IRQ_GC_NO_MASK' value='8'/>
+        <enumerator name='IRQ_GC_BE_IO' value='16'/>
+      </enum-decl>
+      <class-decl name='irq_chip_generic' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/irq.h' line='974' column='1' id='type-id-4117'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='type-id-36' visibility='default' filepath='include/linux/irq.h' line='975' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reg_base' type-id='type-id-15' visibility='default' filepath='include/linux/irq.h' line='976' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='reg_readl' type-id='type-id-1271' visibility='default' filepath='include/linux/irq.h' line='977' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reg_writel' type-id='type-id-4118' visibility='default' filepath='include/linux/irq.h' line='978' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='suspend' type-id='type-id-4119' visibility='default' filepath='include/linux/irq.h' line='979' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='resume' type-id='type-id-4119' visibility='default' filepath='include/linux/irq.h' line='980' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='irq_base' type-id='type-id-5' visibility='default' filepath='include/linux/irq.h' line='981' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='irq_cnt' type-id='type-id-5' visibility='default' filepath='include/linux/irq.h' line='982' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mask_cache' type-id='type-id-7' visibility='default' filepath='include/linux/irq.h' line='983' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='type_cache' type-id='type-id-7' visibility='default' filepath='include/linux/irq.h' line='984' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='polarity_cache' type-id='type-id-7' visibility='default' filepath='include/linux/irq.h' line='985' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='wake_enabled' type-id='type-id-7' visibility='default' filepath='include/linux/irq.h' line='986' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='wake_active' type-id='type-id-7' visibility='default' filepath='include/linux/irq.h' line='987' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='num_ct' type-id='type-id-5' visibility='default' filepath='include/linux/irq.h' line='988' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='private' type-id='type-id-15' visibility='default' filepath='include/linux/irq.h' line='989' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='installed' type-id='type-id-16' visibility='default' filepath='include/linux/irq.h' line='990' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='unused' type-id='type-id-16' visibility='default' filepath='include/linux/irq.h' line='991' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='domain' type-id='type-id-4082' visibility='default' filepath='include/linux/irq.h' line='992' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/irq.h' line='993' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='chip_types' type-id='type-id-4071' visibility='default' filepath='include/linux/irq.h' line='994' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_chip_type' size-in-bits='2816' is-struct='yes' visibility='default' filepath='include/linux/irq.h' line='932' column='1' id='type-id-4070'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chip' type-id='type-id-4102' visibility='default' filepath='include/linux/irq.h' line='933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='regs' type-id='type-id-4120' visibility='default' filepath='include/linux/irq.h' line='934' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='handler' type-id='type-id-4121' visibility='default' filepath='include/linux/irq.h' line='935' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='type' type-id='type-id-7' visibility='default' filepath='include/linux/irq.h' line='936' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2720'>
+          <var-decl name='mask_cache_priv' type-id='type-id-7' visibility='default' filepath='include/linux/irq.h' line='937' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='mask_cache' type-id='type-id-1567' visibility='default' filepath='include/linux/irq.h' line='938' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_chip_regs' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/irq.h' line='909' column='1' id='type-id-4120'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enable' type-id='type-id-16' visibility='default' filepath='include/linux/irq.h' line='910' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='disable' type-id='type-id-16' visibility='default' filepath='include/linux/irq.h' line='911' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mask' type-id='type-id-16' visibility='default' filepath='include/linux/irq.h' line='912' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ack' type-id='type-id-16' visibility='default' filepath='include/linux/irq.h' line='913' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='eoi' type-id='type-id-16' visibility='default' filepath='include/linux/irq.h' line='914' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='type' type-id='type-id-16' visibility='default' filepath='include/linux/irq.h' line='915' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='polarity' type-id='type-id-16' visibility='default' filepath='include/linux/irq.h' line='916' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_desc' size-in-bits='3584' is-struct='yes' visibility='default' filepath='include/linux/irqdesc.h' line='55' column='1' id='type-id-4122'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='irq_common_data' type-id='type-id-4100' visibility='default' filepath='include/linux/irqdesc.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='irq_data' type-id='type-id-4096' visibility='default' filepath='include/linux/irqdesc.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='kstat_irqs' type-id='type-id-482' visibility='default' filepath='include/linux/irqdesc.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='handle_irq' type-id='type-id-4121' visibility='default' filepath='include/linux/irqdesc.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='action' type-id='type-id-4123' visibility='default' filepath='include/linux/irqdesc.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='status_use_accessors' type-id='type-id-5' visibility='default' filepath='include/linux/irqdesc.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='core_internal_state__do_not_mess_with_it' type-id='type-id-5' visibility='default' filepath='include/linux/irqdesc.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='depth' type-id='type-id-5' visibility='default' filepath='include/linux/irqdesc.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='wake_depth' type-id='type-id-5' visibility='default' filepath='include/linux/irqdesc.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='tot_count' type-id='type-id-5' visibility='default' filepath='include/linux/irqdesc.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='irq_count' type-id='type-id-5' visibility='default' filepath='include/linux/irqdesc.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='last_unhandled' type-id='type-id-16' visibility='default' filepath='include/linux/irqdesc.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='irqs_unhandled' type-id='type-id-5' visibility='default' filepath='include/linux/irqdesc.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='threads_handled' type-id='type-id-26' visibility='default' filepath='include/linux/irqdesc.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='threads_handled_last' type-id='type-id-17' visibility='default' filepath='include/linux/irqdesc.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='lock' type-id='type-id-36' visibility='default' filepath='include/linux/irqdesc.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='percpu_enabled' type-id='type-id-3374' visibility='default' filepath='include/linux/irqdesc.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='percpu_affinity' type-id='type-id-3386' visibility='default' filepath='include/linux/irqdesc.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='affinity_hint' type-id='type-id-3386' visibility='default' filepath='include/linux/irqdesc.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='affinity_notify' type-id='type-id-4124' visibility='default' filepath='include/linux/irqdesc.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='threads_oneshot' type-id='type-id-16' visibility='default' filepath='include/linux/irqdesc.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='threads_active' type-id='type-id-26' visibility='default' filepath='include/linux/irqdesc.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='wait_for_threads' type-id='type-id-225' visibility='default' filepath='include/linux/irqdesc.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='nr_actions' type-id='type-id-5' visibility='default' filepath='include/linux/irqdesc.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='no_suspend_depth' type-id='type-id-5' visibility='default' filepath='include/linux/irqdesc.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='cond_suspend_depth' type-id='type-id-5' visibility='default' filepath='include/linux/irqdesc.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2016'>
+          <var-decl name='force_resume_depth' type-id='type-id-5' visibility='default' filepath='include/linux/irqdesc.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='dir' type-id='type-id-262' visibility='default' filepath='include/linux/irqdesc.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/linux/irqdesc.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='kobj' type-id='type-id-267' visibility='default' filepath='include/linux/irqdesc.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='request_mutex' type-id='type-id-245' visibility='default' filepath='include/linux/irqdesc.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='parent_irq' type-id='type-id-17' visibility='default' filepath='include/linux/irqdesc.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='include/linux/irqdesc.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/irqdesc.h' line='107' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='irq_flow_handler_t' type-id='type-id-4125' filepath='include/linux/irqhandler.h' line='12' column='1' id='type-id-4121'/>
+      <class-decl name='gpio_chip' size-in-bits='2496' is-struct='yes' visibility='default' filepath='include/linux/gpio/driver.h' line='232' column='1' id='type-id-4126'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='label' type-id='type-id-4' visibility='default' filepath='include/linux/gpio/driver.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='gpiodev' type-id='type-id-4075' visibility='default' filepath='include/linux/gpio/driver.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='parent' type-id='type-id-240' visibility='default' filepath='include/linux/gpio/driver.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='include/linux/gpio/driver.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='request' type-id='type-id-4127' visibility='default' filepath='include/linux/gpio/driver.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='free' type-id='type-id-4128' visibility='default' filepath='include/linux/gpio/driver.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_direction' type-id='type-id-4127' visibility='default' filepath='include/linux/gpio/driver.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='direction_input' type-id='type-id-4127' visibility='default' filepath='include/linux/gpio/driver.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='direction_output' type-id='type-id-4129' visibility='default' filepath='include/linux/gpio/driver.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get' type-id='type-id-4127' visibility='default' filepath='include/linux/gpio/driver.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='get_multiple' type-id='type-id-4130' visibility='default' filepath='include/linux/gpio/driver.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='set' type-id='type-id-4131' visibility='default' filepath='include/linux/gpio/driver.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='set_multiple' type-id='type-id-4132' visibility='default' filepath='include/linux/gpio/driver.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='set_config' type-id='type-id-4133' visibility='default' filepath='include/linux/gpio/driver.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='to_irq' type-id='type-id-4127' visibility='default' filepath='include/linux/gpio/driver.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='dbg_show' type-id='type-id-4134' visibility='default' filepath='include/linux/gpio/driver.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='base' type-id='type-id-17' visibility='default' filepath='include/linux/gpio/driver.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='ngpio' type-id='type-id-688' visibility='default' filepath='include/linux/gpio/driver.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='names' type-id='type-id-92' visibility='default' filepath='include/linux/gpio/driver.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='can_sleep' type-id='type-id-33' visibility='default' filepath='include/linux/gpio/driver.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='irq' type-id='type-id-4135' visibility='default' filepath='include/linux/gpio/driver.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='need_valid_mask' type-id='type-id-33' visibility='default' filepath='include/linux/gpio/driver.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='valid_mask' type-id='type-id-45' visibility='default' filepath='include/linux/gpio/driver.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='of_node' type-id='type-id-3543' visibility='default' filepath='include/linux/gpio/driver.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='of_gpio_n_cells' type-id='type-id-5' visibility='default' filepath='include/linux/gpio/driver.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='of_xlate' type-id='type-id-4136' visibility='default' filepath='include/linux/gpio/driver.h' line='342' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='gpio_irq_chip' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/gpio/driver.h' line='27' column='1' id='type-id-4135'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chip' type-id='type-id-4098' visibility='default' filepath='include/linux/gpio/driver.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='domain' type-id='type-id-4082' visibility='default' filepath='include/linux/gpio/driver.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='domain_ops' type-id='type-id-4079' visibility='default' filepath='include/linux/gpio/driver.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='handler' type-id='type-id-4121' visibility='default' filepath='include/linux/gpio/driver.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='default_type' type-id='type-id-5' visibility='default' filepath='include/linux/gpio/driver.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='lock_key' type-id='type-id-1698' visibility='default' filepath='include/linux/gpio/driver.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='request_key' type-id='type-id-1698' visibility='default' filepath='include/linux/gpio/driver.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='parent_handler' type-id='type-id-4121' visibility='default' filepath='include/linux/gpio/driver.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='parent_handler_data' type-id='type-id-15' visibility='default' filepath='include/linux/gpio/driver.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='num_parents' type-id='type-id-5' visibility='default' filepath='include/linux/gpio/driver.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='parent_irq' type-id='type-id-5' visibility='default' filepath='include/linux/gpio/driver.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='parents' type-id='type-id-482' visibility='default' filepath='include/linux/gpio/driver.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='map' type-id='type-id-482' visibility='default' filepath='include/linux/gpio/driver.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='threaded' type-id='type-id-33' visibility='default' filepath='include/linux/gpio/driver.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='776'>
+          <var-decl name='need_valid_mask' type-id='type-id-33' visibility='default' filepath='include/linux/gpio/driver.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='valid_mask' type-id='type-id-45' visibility='default' filepath='include/linux/gpio/driver.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='first' type-id='type-id-5' visibility='default' filepath='include/linux/gpio/driver.h' line='147' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='of_phandle_args' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/of.h' line='76' column='1' id='type-id-3514'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='np' type-id='type-id-3543' visibility='default' filepath='include/linux/of.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='args_count' type-id='type-id-17' visibility='default' filepath='include/linux/of.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='args' type-id='type-id-4072' visibility='default' filepath='include/linux/of.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='gpiod_flags' filepath='include/linux/gpio/consumer.h' line='38' column='1' id='type-id-4137'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='GPIOD_ASIS' value='0'/>
+        <enumerator name='GPIOD_IN' value='1'/>
+        <enumerator name='GPIOD_OUT_LOW' value='3'/>
+        <enumerator name='GPIOD_OUT_HIGH' value='7'/>
+        <enumerator name='GPIOD_OUT_LOW_OPEN_DRAIN' value='11'/>
+        <enumerator name='GPIOD_OUT_HIGH_OPEN_DRAIN' value='15'/>
+      </enum-decl>
+      <qualified-type-def type-id='type-id-4084' const='yes' id='type-id-4138'/>
+      <pointer-type-def type-id='type-id-4138' size-in-bits='64' id='type-id-4079'/>
+      <qualified-type-def type-id='type-id-3514' const='yes' id='type-id-4139'/>
+      <pointer-type-def type-id='type-id-4139' size-in-bits='64' id='type-id-4140'/>
+      <pointer-type-def type-id='type-id-4126' size-in-bits='64' id='type-id-4077'/>
+      <pointer-type-def type-id='type-id-4074' size-in-bits='64' id='type-id-4018'/>
+      <pointer-type-def type-id='type-id-4076' size-in-bits='64' id='type-id-4075'/>
+      <pointer-type-def type-id='type-id-4141' size-in-bits='64' id='type-id-4136'/>
+      <pointer-type-def type-id='type-id-4142' size-in-bits='64' id='type-id-4127'/>
+      <pointer-type-def type-id='type-id-4143' size-in-bits='64' id='type-id-4129'/>
+      <pointer-type-def type-id='type-id-4144' size-in-bits='64' id='type-id-4133'/>
+      <pointer-type-def type-id='type-id-4145' size-in-bits='64' id='type-id-4130'/>
+      <pointer-type-def type-id='type-id-4146' size-in-bits='64' id='type-id-4106'/>
+      <pointer-type-def type-id='type-id-4147' size-in-bits='64' id='type-id-4105'/>
+      <pointer-type-def type-id='type-id-4148' size-in-bits='64' id='type-id-4110'/>
+      <pointer-type-def type-id='type-id-4149' size-in-bits='64' id='type-id-4111'/>
+      <pointer-type-def type-id='type-id-4150' size-in-bits='64' id='type-id-4107'/>
+      <pointer-type-def type-id='type-id-4151' size-in-bits='64' id='type-id-4112'/>
+      <pointer-type-def type-id='type-id-4152' size-in-bits='64' id='type-id-4089'/>
+      <pointer-type-def type-id='type-id-4153' size-in-bits='64' id='type-id-4085'/>
+      <pointer-type-def type-id='type-id-4154' size-in-bits='64' id='type-id-4092'/>
+      <pointer-type-def type-id='type-id-4155' size-in-bits='64' id='type-id-4086'/>
+      <pointer-type-def type-id='type-id-4156' size-in-bits='64' id='type-id-4094'/>
+      <pointer-type-def type-id='type-id-4157' size-in-bits='64' id='type-id-4087'/>
+      <pointer-type-def type-id='type-id-4158' size-in-bits='64' id='type-id-4090'/>
+      <pointer-type-def type-id='type-id-4060' size-in-bits='64' id='type-id-4124'/>
+      <pointer-type-def type-id='type-id-4102' size-in-bits='64' id='type-id-4098'/>
+      <pointer-type-def type-id='type-id-4117' size-in-bits='64' id='type-id-4068'/>
+      <pointer-type-def type-id='type-id-4100' size-in-bits='64' id='type-id-4097'/>
+      <pointer-type-def type-id='type-id-4096' size-in-bits='64' id='type-id-4099'/>
+      <pointer-type-def type-id='type-id-4122' size-in-bits='64' id='type-id-4159'/>
+      <pointer-type-def type-id='type-id-4078' size-in-bits='64' id='type-id-4082'/>
+      <pointer-type-def type-id='type-id-4115' size-in-bits='64' id='type-id-4081'/>
+      <pointer-type-def type-id='type-id-4095' size-in-bits='64' id='type-id-4160'/>
+      <pointer-type-def type-id='type-id-4061' size-in-bits='64' id='type-id-4123'/>
+      <pointer-type-def type-id='type-id-4062' size-in-bits='64' id='type-id-4101'/>
+      <pointer-type-def type-id='type-id-4063' size-in-bits='64' id='type-id-4161'/>
+      <pointer-type-def type-id='type-id-4064' size-in-bits='64' id='type-id-4162'/>
+      <pointer-type-def type-id='type-id-4065' size-in-bits='64' id='type-id-4163'/>
+      <pointer-type-def type-id='type-id-4164' size-in-bits='64' id='type-id-4103'/>
+      <pointer-type-def type-id='type-id-4165' size-in-bits='64' id='type-id-4128'/>
+      <pointer-type-def type-id='type-id-4166' size-in-bits='64' id='type-id-4131'/>
+      <pointer-type-def type-id='type-id-4167' size-in-bits='64' id='type-id-4132'/>
+      <pointer-type-def type-id='type-id-4168' size-in-bits='64' id='type-id-4119'/>
+      <pointer-type-def type-id='type-id-4169' size-in-bits='64' id='type-id-4104'/>
+      <pointer-type-def type-id='type-id-4170' size-in-bits='64' id='type-id-4114'/>
+      <pointer-type-def type-id='type-id-4171' size-in-bits='64' id='type-id-4109'/>
+      <pointer-type-def type-id='type-id-4172' size-in-bits='64' id='type-id-4108'/>
+      <pointer-type-def type-id='type-id-4173' size-in-bits='64' id='type-id-4113'/>
+      <pointer-type-def type-id='type-id-4174' size-in-bits='64' id='type-id-4125'/>
+      <pointer-type-def type-id='type-id-4175' size-in-bits='64' id='type-id-4093'/>
+      <pointer-type-def type-id='type-id-4176' size-in-bits='64' id='type-id-4088'/>
+      <pointer-type-def type-id='type-id-4177' size-in-bits='64' id='type-id-4091'/>
+      <pointer-type-def type-id='type-id-4178' size-in-bits='64' id='type-id-4134'/>
+      <pointer-type-def type-id='type-id-4179' size-in-bits='64' id='type-id-4118'/>
+      <function-decl name='devm_gpiod_get_index' mangled-name='devm_gpiod_get_index' filepath='drivers/gpio/devres.c' line='101' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_gpiod_get_index'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/gpio/devres.c' line='101' column='1'/>
+        <parameter type-id='type-id-4' name='con_id' filepath='drivers/gpio/devres.c' line='102' column='1'/>
+        <parameter type-id='type-id-5' name='idx' filepath='drivers/gpio/devres.c' line='103' column='1'/>
+        <parameter type-id='type-id-4137' name='flags' filepath='drivers/gpio/devres.c' line='104' column='1'/>
+        <return type-id='type-id-4018'/>
+      </function-decl>
+      <function-decl name='devm_gpio_request_one' mangled-name='devm_gpio_request_one' filepath='drivers/gpio/devres.c' line='408' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_gpio_request_one'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/gpio/devres.c' line='408' column='1'/>
+        <parameter type-id='type-id-5' name='gpio' filepath='drivers/gpio/devres.c' line='408' column='1'/>
+        <parameter type-id='type-id-16' name='flags' filepath='drivers/gpio/devres.c' line='409' column='1'/>
+        <parameter type-id='type-id-4' name='label' filepath='drivers/gpio/devres.c' line='409' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-4141'>
+        <parameter type-id='type-id-4077'/>
+        <parameter type-id='type-id-4140'/>
+        <parameter type-id='type-id-1567'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4142'>
+        <parameter type-id='type-id-4077'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4143'>
+        <parameter type-id='type-id-4077'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4144'>
+        <parameter type-id='type-id-4077'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4145'>
+        <parameter type-id='type-id-4077'/>
+        <parameter type-id='type-id-45'/>
+        <parameter type-id='type-id-45'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4146'>
+        <parameter type-id='type-id-4099'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4147'>
+        <parameter type-id='type-id-4099'/>
+        <parameter type-id='type-id-3386'/>
+        <parameter type-id='type-id-33'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4148'>
+        <parameter type-id='type-id-4099'/>
+        <parameter type-id='type-id-4066'/>
+        <parameter type-id='type-id-2611'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4149'>
+        <parameter type-id='type-id-4099'/>
+        <parameter type-id='type-id-4066'/>
+        <parameter type-id='type-id-33'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4150'>
+        <parameter type-id='type-id-4099'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4151'>
+        <parameter type-id='type-id-4099'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4152'>
+        <parameter type-id='type-id-4082'/>
+        <parameter type-id='type-id-3543'/>
+        <parameter type-id='type-id-2727'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-45'/>
+        <parameter type-id='type-id-482'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4153'>
+        <parameter type-id='type-id-4082'/>
+        <parameter type-id='type-id-3543'/>
+        <parameter type-id='type-id-4080'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4154'>
+        <parameter type-id='type-id-4082'/>
+        <parameter type-id='type-id-4099'/>
+        <parameter type-id='type-id-33'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4155'>
+        <parameter type-id='type-id-4082'/>
+        <parameter type-id='type-id-4160'/>
+        <parameter type-id='type-id-4080'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4156'>
+        <parameter type-id='type-id-4082'/>
+        <parameter type-id='type-id-4160'/>
+        <parameter type-id='type-id-45'/>
+        <parameter type-id='type-id-482'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4157'>
+        <parameter type-id='type-id-4082'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-4083'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4158'>
+        <parameter type-id='type-id-4082'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4164'>
+        <parameter type-id='type-id-4099'/>
+        <return type-id='type-id-5'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4165'>
+        <parameter type-id='type-id-4077'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4166'>
+        <parameter type-id='type-id-4077'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4167'>
+        <parameter type-id='type-id-4077'/>
+        <parameter type-id='type-id-45'/>
+        <parameter type-id='type-id-45'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4168'>
+        <parameter type-id='type-id-4068'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4169'>
+        <parameter type-id='type-id-4099'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4170'>
+        <parameter type-id='type-id-4099'/>
+        <parameter type-id='type-id-3386'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4171'>
+        <parameter type-id='type-id-4099'/>
+        <parameter type-id='type-id-4161'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4172'>
+        <parameter type-id='type-id-4099'/>
+        <parameter type-id='type-id-88'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4173'>
+        <parameter type-id='type-id-4099'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4174'>
+        <parameter type-id='type-id-4159'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4175'>
+        <parameter type-id='type-id-4082'/>
+        <parameter type-id='type-id-4099'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4176'>
+        <parameter type-id='type-id-4082'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4177'>
+        <parameter type-id='type-id-4082'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4178'>
+        <parameter type-id='type-id-88'/>
+        <parameter type-id='type-id-4077'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4179'>
+        <parameter type-id='type-id-7'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpio/gpiolib.c' language='LANG_C89'>
+      <qualified-type-def type-id='type-id-4074' const='yes' id='type-id-4180'/>
+      <pointer-type-def type-id='type-id-4180' size-in-bits='64' id='type-id-4181'/>
+      <function-decl name='gpio_to_desc' mangled-name='gpio_to_desc' filepath='drivers/gpio/gpiolib.c' line='105' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpio_to_desc'>
+        <parameter type-id='type-id-5' name='gpio' filepath='drivers/gpio/gpiolib.c' line='105' column='1'/>
+        <return type-id='type-id-4018'/>
+      </function-decl>
+      <function-decl name='gpiod_set_debounce' mangled-name='gpiod_set_debounce' filepath='drivers/gpio/gpiolib.c' line='2725' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_set_debounce'>
+        <parameter type-id='type-id-4018' name='desc' filepath='drivers/gpio/gpiolib.c' line='2725' column='1'/>
+        <parameter type-id='type-id-5' name='debounce' filepath='drivers/gpio/gpiolib.c' line='2725' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='gpiod_is_active_low' mangled-name='gpiod_is_active_low' filepath='drivers/gpio/gpiolib.c' line='2794' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_is_active_low'>
+        <parameter type-id='type-id-4181' name='desc' filepath='drivers/gpio/gpiolib.c' line='2794' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='gpiod_get_raw_value' mangled-name='gpiod_get_raw_value' filepath='drivers/gpio/gpiolib.c' line='2930' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_get_raw_value'>
+        <parameter type-id='type-id-4181' name='desc' filepath='drivers/gpio/gpiolib.c' line='2930' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='gpiod_get_value' mangled-name='gpiod_get_value' filepath='drivers/gpio/gpiolib.c' line='2949' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_get_value'>
+        <parameter type-id='type-id-4181' name='desc' filepath='drivers/gpio/gpiolib.c' line='2949' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='gpiod_cansleep' mangled-name='gpiod_cansleep' filepath='drivers/gpio/gpiolib.c' line='3271' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_cansleep'>
+        <parameter type-id='type-id-4181' name='desc' filepath='drivers/gpio/gpiolib.c' line='3271' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='gpiod_to_irq' mangled-name='gpiod_to_irq' filepath='drivers/gpio/gpiolib.c' line='3306' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_to_irq'>
+        <parameter type-id='type-id-4181' name='desc' filepath='drivers/gpio/gpiolib.c' line='3306' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='gpiod_get_raw_value_cansleep' mangled-name='gpiod_get_raw_value_cansleep' filepath='drivers/gpio/gpiolib.c' line='3454' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_get_raw_value_cansleep'>
+        <parameter type-id='type-id-4181' name='desc' filepath='drivers/gpio/gpiolib.c' line='3454' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='gpiod_get_value_cansleep' mangled-name='gpiod_get_value_cansleep' filepath='drivers/gpio/gpiolib.c' line='3471' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_get_value_cansleep'>
+        <parameter type-id='type-id-4181' name='desc' filepath='drivers/gpio/gpiolib.c' line='3471' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/pci/access.c' language='LANG_C89'>
+      <qualified-type-def type-id='type-id-3923' const='yes' id='type-id-4182'/>
+      <pointer-type-def type-id='type-id-4182' size-in-bits='64' id='type-id-4183'/>
+      <function-decl name='pci_read_config_dword' mangled-name='pci_read_config_dword' filepath='drivers/pci/access.c' line='556' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_read_config_dword'>
+        <parameter type-id='type-id-4183' name='dev' filepath='drivers/pci/access.c' line='556' column='1'/>
+        <parameter type-id='type-id-17' name='where' filepath='drivers/pci/access.c' line='556' column='1'/>
+        <parameter type-id='type-id-1567' name='val' filepath='drivers/pci/access.c' line='557' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='pci_read_config_byte' mangled-name='pci_read_config_byte' filepath='drivers/pci/access.c' line='536' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_read_config_byte'>
+        <parameter type-id='type-id-4183' name='dev' filepath='drivers/pci/access.c' line='536' column='1'/>
+        <parameter type-id='type-id-17' name='where' filepath='drivers/pci/access.c' line='536' column='1'/>
+        <parameter type-id='type-id-3121' name='val' filepath='drivers/pci/access.c' line='536' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/pci/pci-driver.c' language='LANG_C89'>
+      <function-decl name='__pci_register_driver' mangled-name='__pci_register_driver' filepath='drivers/pci/pci-driver.c' line='1395' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__pci_register_driver'>
+        <parameter type-id='type-id-3926' name='drv' filepath='drivers/pci/pci-driver.c' line='1395' column='1'/>
+        <parameter type-id='type-id-260' name='owner' filepath='drivers/pci/pci-driver.c' line='1395' column='1'/>
+        <parameter type-id='type-id-4' name='mod_name' filepath='drivers/pci/pci-driver.c' line='1396' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='pci_unregister_driver' mangled-name='pci_unregister_driver' filepath='drivers/pci/pci-driver.c' line='1423' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_unregister_driver'>
+        <parameter type-id='type-id-3926' name='drv' filepath='drivers/pci/pci-driver.c' line='1423' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/video/fbdev/core/fbmem.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='type-id-4184' size-in-bits='infinite' id='type-id-4185'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <class-decl name='apertures_struct' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/fb.h' line='522' column='1' id='type-id-4186'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='type-id-5' visibility='default' filepath='include/linux/fb.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ranges' type-id='type-id-4185' visibility='default' filepath='include/linux/fb.h' line='527' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='aperture' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/fb.h' line='524' column='1' id='type-id-4184'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='type-id-2155' visibility='default' filepath='include/linux/fb.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='type-id-2155' visibility='default' filepath='include/linux/fb.h' line='526' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-4186' size-in-bits='64' id='type-id-4187'/>
+      <function-decl name='remove_conflicting_framebuffers' mangled-name='remove_conflicting_framebuffers' filepath='drivers/video/fbdev/core/fbmem.c' line='1803' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='remove_conflicting_framebuffers'>
+        <parameter type-id='type-id-4187' name='a' filepath='drivers/video/fbdev/core/fbmem.c' line='1803' column='1'/>
+        <parameter type-id='type-id-4' name='name' filepath='drivers/video/fbdev/core/fbmem.c' line='1804' column='1'/>
+        <parameter type-id='type-id-33' name='primary' filepath='drivers/video/fbdev/core/fbmem.c' line='1804' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/clk/clk-devres.c' language='LANG_C89'>
+      <class-decl name='clk' size-in-bits='512' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-4188'/>
+      <class-decl name='fwnode_handle' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-4189'/>
+      <pointer-type-def type-id='type-id-4188' size-in-bits='64' id='type-id-4190'/>
+      <pointer-type-def type-id='type-id-4189' size-in-bits='64' id='type-id-4191'/>
+      <function-decl name='devm_clk_get' mangled-name='devm_clk_get' filepath='drivers/clk/clk-devres.c' line='17' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_clk_get'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/clk/clk-devres.c' line='17' column='1'/>
+        <parameter type-id='type-id-4' name='id' filepath='drivers/clk/clk-devres.c' line='17' column='1'/>
+        <return type-id='type-id-4190'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/clk/clk.c' language='LANG_C89'>
+      <class-decl name='clk_core' size-in-bits='1984' is-struct='yes' visibility='default' filepath='drivers/clk/clk.c' line='45' column='1' id='type-id-4192'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='drivers/clk/clk.c' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='type-id-4193' visibility='default' filepath='drivers/clk/clk.c' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hw' type-id='type-id-4194' visibility='default' filepath='drivers/clk/clk.c' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='drivers/clk/clk.c' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev' type-id='type-id-240' visibility='default' filepath='drivers/clk/clk.c' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='parent' type-id='type-id-4195' visibility='default' filepath='drivers/clk/clk.c' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='parent_names' type-id='type-id-1389' visibility='default' filepath='drivers/clk/clk.c' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='parents' type-id='type-id-4196' visibility='default' filepath='drivers/clk/clk.c' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='num_parents' type-id='type-id-214' visibility='default' filepath='drivers/clk/clk.c' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='520'>
+          <var-decl name='new_parent_index' type-id='type-id-214' visibility='default' filepath='drivers/clk/clk.c' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rate' type-id='type-id-16' visibility='default' filepath='drivers/clk/clk.c' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='req_rate' type-id='type-id-16' visibility='default' filepath='drivers/clk/clk.c' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='new_rate' type-id='type-id-16' visibility='default' filepath='drivers/clk/clk.c' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='new_parent' type-id='type-id-4195' visibility='default' filepath='drivers/clk/clk.c' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='new_child' type-id='type-id-4195' visibility='default' filepath='drivers/clk/clk.c' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='drivers/clk/clk.c' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='orphan' type-id='type-id-33' visibility='default' filepath='drivers/clk/clk.c' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='968'>
+          <var-decl name='need_sync' type-id='type-id-33' visibility='default' filepath='drivers/clk/clk.c' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='976'>
+          <var-decl name='boot_enabled' type-id='type-id-33' visibility='default' filepath='drivers/clk/clk.c' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='enable_count' type-id='type-id-5' visibility='default' filepath='drivers/clk/clk.c' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='prepare_count' type-id='type-id-5' visibility='default' filepath='drivers/clk/clk.c' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='protect_count' type-id='type-id-5' visibility='default' filepath='drivers/clk/clk.c' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='min_rate' type-id='type-id-16' visibility='default' filepath='drivers/clk/clk.c' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='max_rate' type-id='type-id-16' visibility='default' filepath='drivers/clk/clk.c' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='accuracy' type-id='type-id-16' visibility='default' filepath='drivers/clk/clk.c' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='phase' type-id='type-id-17' visibility='default' filepath='drivers/clk/clk.c' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='duty' type-id='type-id-4197' visibility='default' filepath='drivers/clk/clk.c' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='children' type-id='type-id-186' visibility='default' filepath='drivers/clk/clk.c' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='child_node' type-id='type-id-520' visibility='default' filepath='drivers/clk/clk.c' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='clks' type-id='type-id-186' visibility='default' filepath='drivers/clk/clk.c' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='notifier_count' type-id='type-id-5' visibility='default' filepath='drivers/clk/clk.c' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='dentry' type-id='type-id-23' visibility='default' filepath='drivers/clk/clk.c' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='debug_node' type-id='type-id-520' visibility='default' filepath='drivers/clk/clk.c' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='ref' type-id='type-id-239' visibility='default' filepath='drivers/clk/clk.c' line='81' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='clk_ops' size-in-bits='1408' is-struct='yes' visibility='default' filepath='include/linux/clk-provider.h' line='218' column='1' id='type-id-4198'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prepare' type-id='type-id-4199' visibility='default' filepath='include/linux/clk-provider.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unprepare' type-id='type-id-4200' visibility='default' filepath='include/linux/clk-provider.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='is_prepared' type-id='type-id-4199' visibility='default' filepath='include/linux/clk-provider.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unprepare_unused' type-id='type-id-4200' visibility='default' filepath='include/linux/clk-provider.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='enable' type-id='type-id-4199' visibility='default' filepath='include/linux/clk-provider.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='disable' type-id='type-id-4200' visibility='default' filepath='include/linux/clk-provider.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='is_enabled' type-id='type-id-4199' visibility='default' filepath='include/linux/clk-provider.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='disable_unused' type-id='type-id-4200' visibility='default' filepath='include/linux/clk-provider.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='recalc_rate' type-id='type-id-4201' visibility='default' filepath='include/linux/clk-provider.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='round_rate' type-id='type-id-4202' visibility='default' filepath='include/linux/clk-provider.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='determine_rate' type-id='type-id-4203' visibility='default' filepath='include/linux/clk-provider.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='set_parent' type-id='type-id-4204' visibility='default' filepath='include/linux/clk-provider.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='get_parent' type-id='type-id-4205' visibility='default' filepath='include/linux/clk-provider.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='set_rate' type-id='type-id-4206' visibility='default' filepath='include/linux/clk-provider.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='set_rate_and_parent' type-id='type-id-4207' visibility='default' filepath='include/linux/clk-provider.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='recalc_accuracy' type-id='type-id-4201' visibility='default' filepath='include/linux/clk-provider.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='get_phase' type-id='type-id-4199' visibility='default' filepath='include/linux/clk-provider.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='set_phase' type-id='type-id-4208' visibility='default' filepath='include/linux/clk-provider.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='get_duty_cycle' type-id='type-id-4209' visibility='default' filepath='include/linux/clk-provider.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='set_duty_cycle' type-id='type-id-4209' visibility='default' filepath='include/linux/clk-provider.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='init' type-id='type-id-4200' visibility='default' filepath='include/linux/clk-provider.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='debug_init' type-id='type-id-4210' visibility='default' filepath='include/linux/clk-provider.h' line='249' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='clk_hw' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/clk-provider.h' line='285' column='1' id='type-id-4211'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='core' type-id='type-id-4195' visibility='default' filepath='include/linux/clk-provider.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='clk' type-id='type-id-4190' visibility='default' filepath='include/linux/clk-provider.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init' type-id='type-id-4212' visibility='default' filepath='include/linux/clk-provider.h' line='288' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='clk_init_data' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/clk-provider.h' line='262' column='1' id='type-id-4213'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/clk-provider.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='type-id-4193' visibility='default' filepath='include/linux/clk-provider.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='parent_names' type-id='type-id-92' visibility='default' filepath='include/linux/clk-provider.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='num_parents' type-id='type-id-214' visibility='default' filepath='include/linux/clk-provider.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='include/linux/clk-provider.h' line='267' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='clk_rate_request' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/clk-provider.h' line='64' column='1' id='type-id-4214'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rate' type-id='type-id-16' visibility='default' filepath='include/linux/clk-provider.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='min_rate' type-id='type-id-16' visibility='default' filepath='include/linux/clk-provider.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max_rate' type-id='type-id-16' visibility='default' filepath='include/linux/clk-provider.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='best_parent_rate' type-id='type-id-16' visibility='default' filepath='include/linux/clk-provider.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='best_parent_hw' type-id='type-id-4194' visibility='default' filepath='include/linux/clk-provider.h' line='69' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='clk_duty' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/clk-provider.h' line='78' column='1' id='type-id-4197'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num' type-id='type-id-5' visibility='default' filepath='include/linux/clk-provider.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='den' type-id='type-id-5' visibility='default' filepath='include/linux/clk-provider.h' line='80' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-4192' size-in-bits='64' id='type-id-4195'/>
+      <pointer-type-def type-id='type-id-4195' size-in-bits='64' id='type-id-4196'/>
+      <pointer-type-def type-id='type-id-4197' size-in-bits='64' id='type-id-4215'/>
+      <pointer-type-def type-id='type-id-4211' size-in-bits='64' id='type-id-4194'/>
+      <pointer-type-def type-id='type-id-4214' size-in-bits='64' id='type-id-4216'/>
+      <qualified-type-def type-id='type-id-4213' const='yes' id='type-id-4217'/>
+      <pointer-type-def type-id='type-id-4217' size-in-bits='64' id='type-id-4212'/>
+      <qualified-type-def type-id='type-id-4198' const='yes' id='type-id-4218'/>
+      <pointer-type-def type-id='type-id-4218' size-in-bits='64' id='type-id-4193'/>
+      <pointer-type-def type-id='type-id-4219' size-in-bits='64' id='type-id-4199'/>
+      <pointer-type-def type-id='type-id-4220' size-in-bits='64' id='type-id-4209'/>
+      <pointer-type-def type-id='type-id-4221' size-in-bits='64' id='type-id-4203'/>
+      <pointer-type-def type-id='type-id-4222' size-in-bits='64' id='type-id-4208'/>
+      <pointer-type-def type-id='type-id-4223' size-in-bits='64' id='type-id-4204'/>
+      <pointer-type-def type-id='type-id-4224' size-in-bits='64' id='type-id-4206'/>
+      <pointer-type-def type-id='type-id-4225' size-in-bits='64' id='type-id-4207'/>
+      <pointer-type-def type-id='type-id-4226' size-in-bits='64' id='type-id-4202'/>
+      <pointer-type-def type-id='type-id-4227' size-in-bits='64' id='type-id-4205'/>
+      <pointer-type-def type-id='type-id-4228' size-in-bits='64' id='type-id-4201'/>
+      <pointer-type-def type-id='type-id-4229' size-in-bits='64' id='type-id-4200'/>
+      <pointer-type-def type-id='type-id-4230' size-in-bits='64' id='type-id-4210'/>
+      <function-decl name='clk_unprepare' mangled-name='clk_unprepare' filepath='drivers/clk/clk.c' line='733' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_unprepare'>
+        <parameter type-id='type-id-4190' name='clk' filepath='drivers/clk/clk.c' line='733' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='clk_prepare' mangled-name='clk_prepare' filepath='drivers/clk/clk.c' line='814' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_prepare'>
+        <parameter type-id='type-id-4190' name='clk' filepath='drivers/clk/clk.c' line='814' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='clk_disable' mangled-name='clk_disable' filepath='drivers/clk/clk.c' line='871' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_disable'>
+        <parameter type-id='type-id-4190' name='clk' filepath='drivers/clk/clk.c' line='871' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='clk_enable' mangled-name='clk_enable' filepath='drivers/clk/clk.c' line='941' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_enable'>
+        <parameter type-id='type-id-4190' name='clk' filepath='drivers/clk/clk.c' line='941' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='clk_get_rate' mangled-name='clk_get_rate' filepath='drivers/clk/clk.c' line='1449' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_get_rate'>
+        <parameter type-id='type-id-4190' name='clk' filepath='drivers/clk/clk.c' line='1449' column='1'/>
+        <return type-id='type-id-16'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-4219'>
+        <parameter type-id='type-id-4194'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4220'>
+        <parameter type-id='type-id-4194'/>
+        <parameter type-id='type-id-4215'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4221'>
+        <parameter type-id='type-id-4194'/>
+        <parameter type-id='type-id-4216'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4222'>
+        <parameter type-id='type-id-4194'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4223'>
+        <parameter type-id='type-id-4194'/>
+        <parameter type-id='type-id-214'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4224'>
+        <parameter type-id='type-id-4194'/>
+        <parameter type-id='type-id-16'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4225'>
+        <parameter type-id='type-id-4194'/>
+        <parameter type-id='type-id-16'/>
+        <parameter type-id='type-id-16'/>
+        <parameter type-id='type-id-214'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4226'>
+        <parameter type-id='type-id-4194'/>
+        <parameter type-id='type-id-16'/>
+        <parameter type-id='type-id-45'/>
+        <return type-id='type-id-192'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4227'>
+        <parameter type-id='type-id-4194'/>
+        <return type-id='type-id-214'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4228'>
+        <parameter type-id='type-id-4194'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-16'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4229'>
+        <parameter type-id='type-id-4194'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4230'>
+        <parameter type-id='type-id-4194'/>
+        <parameter type-id='type-id-23'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/regulator/devres.c' language='LANG_C89'>
+      <function-decl name='devm_regulator_get_optional' mangled-name='devm_regulator_get_optional' filepath='drivers/regulator/devres.c' line='87' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_regulator_get_optional'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/regulator/devres.c' line='87' column='1'/>
+        <parameter type-id='type-id-4' name='id' filepath='drivers/regulator/devres.c' line='88' column='1'/>
+        <return type-id='type-id-4006'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/reset/core.c' language='LANG_C89'>
+      <class-decl name='reset_control' size-in-bits='384' is-struct='yes' visibility='default' filepath='drivers/reset/core.c' line='43' column='1' id='type-id-4231'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcdev' type-id='type-id-4232' visibility='default' filepath='drivers/reset/core.c' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='drivers/reset/core.c' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='id' type-id='type-id-5' visibility='default' filepath='drivers/reset/core.c' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='refcnt' type-id='type-id-239' visibility='default' filepath='drivers/reset/core.c' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='shared' type-id='type-id-33' visibility='default' filepath='drivers/reset/core.c' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='array' type-id='type-id-33' visibility='default' filepath='drivers/reset/core.c' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='deassert_count' type-id='type-id-26' visibility='default' filepath='drivers/reset/core.c' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='triggered_count' type-id='type-id-26' visibility='default' filepath='drivers/reset/core.c' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='reset_controller_dev' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/reset-controller.h' line='68' column='1' id='type-id-4233'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='type-id-4234' visibility='default' filepath='include/linux/reset-controller.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='include/linux/reset-controller.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/reset-controller.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='reset_control_head' type-id='type-id-20' visibility='default' filepath='include/linux/reset-controller.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dev' type-id='type-id-240' visibility='default' filepath='include/linux/reset-controller.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='of_node' type-id='type-id-3543' visibility='default' filepath='include/linux/reset-controller.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='of_reset_n_cells' type-id='type-id-17' visibility='default' filepath='include/linux/reset-controller.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='of_xlate' type-id='type-id-4235' visibility='default' filepath='include/linux/reset-controller.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='nr_resets' type-id='type-id-5' visibility='default' filepath='include/linux/reset-controller.h' line='78' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='reset_control_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/reset-controller.h' line='18' column='1' id='type-id-4236'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reset' type-id='type-id-4237' visibility='default' filepath='include/linux/reset-controller.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='assert' type-id='type-id-4237' visibility='default' filepath='include/linux/reset-controller.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='deassert' type-id='type-id-4237' visibility='default' filepath='include/linux/reset-controller.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='status' type-id='type-id-4237' visibility='default' filepath='include/linux/reset-controller.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='type-id-4236' const='yes' id='type-id-4238'/>
+      <pointer-type-def type-id='type-id-4238' size-in-bits='64' id='type-id-4234'/>
+      <pointer-type-def type-id='type-id-4239' size-in-bits='64' id='type-id-4235'/>
+      <pointer-type-def type-id='type-id-4240' size-in-bits='64' id='type-id-4237'/>
+      <pointer-type-def type-id='type-id-4231' size-in-bits='64' id='type-id-4241'/>
+      <pointer-type-def type-id='type-id-4233' size-in-bits='64' id='type-id-4232'/>
+      <function-decl name='reset_control_assert' mangled-name='reset_control_assert' filepath='drivers/reset/core.c' line='302' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='reset_control_assert'>
+        <parameter type-id='type-id-4241' name='rstc' filepath='drivers/reset/core.c' line='302' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='reset_control_deassert' mangled-name='reset_control_deassert' filepath='drivers/reset/core.c' line='355' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='reset_control_deassert'>
+        <parameter type-id='type-id-4241' name='rstc' filepath='drivers/reset/core.c' line='355' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='__devm_reset_control_get' mangled-name='__devm_reset_control_get' filepath='drivers/reset/core.c' line='638' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__devm_reset_control_get'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/reset/core.c' line='638' column='1'/>
+        <parameter type-id='type-id-4' name='id' filepath='drivers/reset/core.c' line='639' column='1'/>
+        <parameter type-id='type-id-17' name='index' filepath='drivers/reset/core.c' line='639' column='1'/>
+        <parameter type-id='type-id-33' name='shared' filepath='drivers/reset/core.c' line='639' column='1'/>
+        <parameter type-id='type-id-33' name='optional' filepath='drivers/reset/core.c' line='640' column='1'/>
+        <return type-id='type-id-4241'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-4239'>
+        <parameter type-id='type-id-4232'/>
+        <parameter type-id='type-id-4140'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4240'>
+        <parameter type-id='type-id-4232'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/tty/hvc/hvc_console.c' language='LANG_C89'>
+      <class-decl name='hv_ops' size-in-bits='576' is-struct='yes' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='54' column='1' id='type-id-4242'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_chars' type-id='type-id-4243' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='put_chars' type-id='type-id-4244' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flush' type-id='type-id-4245' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='notifier_add' type-id='type-id-4246' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='notifier_del' type-id='type-id-4247' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='notifier_hangup' type-id='type-id-4247' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='tiocmget' type-id='type-id-4248' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='tiocmset' type-id='type-id-4249' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dtr_rts' type-id='type-id-4247' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='69' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hvc_struct' size-in-bits='3776' is-struct='yes' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='35' column='1' id='type-id-4250'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port' type-id='type-id-272' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2848'>
+          <var-decl name='index' type-id='type-id-17' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='do_wakeup' type-id='type-id-17' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='outbuf' type-id='type-id-2' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='outbuf_size' type-id='type-id-17' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3040'>
+          <var-decl name='n_outbuf' type-id='type-id-17' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='vtermno' type-id='type-id-1343' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='ops' type-id='type-id-4251' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='irq_requested' type-id='type-id-17' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3232'>
+          <var-decl name='data' type-id='type-id-17' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='ws' type-id='type-id-252' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='tty_resize' type-id='type-id-255' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='next' type-id='type-id-20' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='50' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='type-id-4242' const='yes' id='type-id-4252'/>
+      <pointer-type-def type-id='type-id-4252' size-in-bits='64' id='type-id-4251'/>
+      <pointer-type-def type-id='type-id-4250' size-in-bits='64' id='type-id-4253'/>
+      <pointer-type-def type-id='type-id-4254' size-in-bits='64' id='type-id-4248'/>
+      <pointer-type-def type-id='type-id-4255' size-in-bits='64' id='type-id-4246'/>
+      <pointer-type-def type-id='type-id-4256' size-in-bits='64' id='type-id-4249'/>
+      <pointer-type-def type-id='type-id-4257' size-in-bits='64' id='type-id-4243'/>
+      <pointer-type-def type-id='type-id-4258' size-in-bits='64' id='type-id-4244'/>
+      <pointer-type-def type-id='type-id-4259' size-in-bits='64' id='type-id-4245'/>
+      <pointer-type-def type-id='type-id-4260' size-in-bits='64' id='type-id-4247'/>
+      <function-decl name='hvc_instantiate' mangled-name='hvc_instantiate' filepath='drivers/tty/hvc/hvc_console.c' line='285' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hvc_instantiate'>
+        <parameter type-id='type-id-1343' name='vtermno' filepath='drivers/tty/hvc/hvc_console.c' line='285' column='1'/>
+        <parameter type-id='type-id-17' name='index' filepath='drivers/tty/hvc/hvc_console.c' line='285' column='1'/>
+        <parameter type-id='type-id-4251' name='ops' filepath='drivers/tty/hvc/hvc_console.c' line='285' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='hvc_kick' mangled-name='hvc_kick' filepath='drivers/tty/hvc/hvc_console.c' line='317' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hvc_kick'>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='hvc_poll' mangled-name='hvc_poll' filepath='drivers/tty/hvc/hvc_console.c' line='773' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hvc_poll'>
+        <parameter type-id='type-id-4253' name='hp' filepath='drivers/tty/hvc/hvc_console.c' line='773' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='__hvc_resize' mangled-name='__hvc_resize' filepath='drivers/tty/hvc/hvc_console.c' line='789' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__hvc_resize'>
+        <parameter type-id='type-id-4253' name='hp' filepath='drivers/tty/hvc/hvc_console.c' line='789' column='1'/>
+        <parameter type-id='type-id-252' name='ws' filepath='drivers/tty/hvc/hvc_console.c' line='789' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='hvc_alloc' mangled-name='hvc_alloc' filepath='drivers/tty/hvc/hvc_console.c' line='922' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hvc_alloc'>
+        <parameter type-id='type-id-1343' name='vtermno' filepath='drivers/tty/hvc/hvc_console.c' line='922' column='1'/>
+        <parameter type-id='type-id-17' name='data' filepath='drivers/tty/hvc/hvc_console.c' line='922' column='1'/>
+        <parameter type-id='type-id-4251' name='ops' filepath='drivers/tty/hvc/hvc_console.c' line='923' column='1'/>
+        <parameter type-id='type-id-17' name='outbuf_size' filepath='drivers/tty/hvc/hvc_console.c' line='924' column='1'/>
+        <return type-id='type-id-4253'/>
+      </function-decl>
+      <function-decl name='hvc_remove' mangled-name='hvc_remove' filepath='drivers/tty/hvc/hvc_console.c' line='981' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hvc_remove'>
+        <parameter type-id='type-id-4253' name='hp' filepath='drivers/tty/hvc/hvc_console.c' line='981' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-4254'>
+        <parameter type-id='type-id-4253'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4255'>
+        <parameter type-id='type-id-4253'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4256'>
+        <parameter type-id='type-id-4253'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4257'>
+        <parameter type-id='type-id-1343'/>
+        <parameter type-id='type-id-2'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4258'>
+        <parameter type-id='type-id-1343'/>
+        <parameter type-id='type-id-4'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4259'>
+        <parameter type-id='type-id-1343'/>
+        <parameter type-id='type-id-33'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4260'>
+        <parameter type-id='type-id-4253'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/tty/serial/8250/8250_core.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='type-id-511' size-in-bits='160' id='type-id-4261'>
+        <subrange length='5' type-id='type-id-9' id='type-id-110'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1' size-in-bits='8' id='type-id-4262'>
+        <subrange length='1' type-id='type-id-9' id='type-id-180'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-4263' size-in-bits='infinite' id='type-id-4264'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-2083' size-in-bits='infinite' id='type-id-4265'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-216' size-in-bits='16' id='type-id-4266'>
+        <subrange length='2' type-id='type-id-9' id='type-id-128'/>
+
+      </array-type-def>
+      <class-decl name='uart_8250_port' size-in-bits='5120' is-struct='yes' visibility='default' filepath='include/linux/serial_8250.h' line='96' column='1' id='type-id-4267'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port' type-id='type-id-4268' visibility='default' filepath='include/linux/serial_8250.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='timer' type-id='type-id-417' visibility='default' filepath='include/linux/serial_8250.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/serial_8250.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='capabilities' type-id='type-id-7' visibility='default' filepath='include/linux/serial_8250.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3808'>
+          <var-decl name='bugs' type-id='type-id-312' visibility='default' filepath='include/linux/serial_8250.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3824'>
+          <var-decl name='fifo_bug' type-id='type-id-33' visibility='default' filepath='include/linux/serial_8250.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='tx_loadsz' type-id='type-id-5' visibility='default' filepath='include/linux/serial_8250.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3872'>
+          <var-decl name='acr' type-id='type-id-216' visibility='default' filepath='include/linux/serial_8250.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3880'>
+          <var-decl name='fcr' type-id='type-id-216' visibility='default' filepath='include/linux/serial_8250.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3888'>
+          <var-decl name='ier' type-id='type-id-216' visibility='default' filepath='include/linux/serial_8250.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3896'>
+          <var-decl name='lcr' type-id='type-id-216' visibility='default' filepath='include/linux/serial_8250.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='mcr' type-id='type-id-216' visibility='default' filepath='include/linux/serial_8250.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3912'>
+          <var-decl name='mcr_mask' type-id='type-id-216' visibility='default' filepath='include/linux/serial_8250.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3920'>
+          <var-decl name='mcr_force' type-id='type-id-216' visibility='default' filepath='include/linux/serial_8250.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3928'>
+          <var-decl name='cur_iotype' type-id='type-id-216' visibility='default' filepath='include/linux/serial_8250.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3936'>
+          <var-decl name='rpm_tx_active' type-id='type-id-5' visibility='default' filepath='include/linux/serial_8250.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='canary' type-id='type-id-216' visibility='default' filepath='include/linux/serial_8250.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3976'>
+          <var-decl name='probe' type-id='type-id-216' visibility='default' filepath='include/linux/serial_8250.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3984'>
+          <var-decl name='lsr_saved_flags' type-id='type-id-216' visibility='default' filepath='include/linux/serial_8250.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3992'>
+          <var-decl name='msr_saved_flags' type-id='type-id-216' visibility='default' filepath='include/linux/serial_8250.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='dma' type-id='type-id-4269' visibility='default' filepath='include/linux/serial_8250.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='ops' type-id='type-id-4270' visibility='default' filepath='include/linux/serial_8250.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='dl_read' type-id='type-id-4271' visibility='default' filepath='include/linux/serial_8250.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='dl_write' type-id='type-id-4272' visibility='default' filepath='include/linux/serial_8250.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='em485' type-id='type-id-4273' visibility='default' filepath='include/linux/serial_8250.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='overrun_backoff' type-id='type-id-411' visibility='default' filepath='include/linux/serial_8250.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='overrun_backoff_time_ms' type-id='type-id-7' visibility='default' filepath='include/linux/serial_8250.h' line='140' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uart_port' size-in-bits='3328' is-struct='yes' visibility='default' filepath='include/linux/serial_core.h' line='117' column='1' id='type-id-4268'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='include/linux/serial_core.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='iobase' type-id='type-id-16' visibility='default' filepath='include/linux/serial_core.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='membase' type-id='type-id-256' visibility='default' filepath='include/linux/serial_core.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='serial_in' type-id='type-id-4274' visibility='default' filepath='include/linux/serial_core.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='serial_out' type-id='type-id-4275' visibility='default' filepath='include/linux/serial_core.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_termios' type-id='type-id-4276' visibility='default' filepath='include/linux/serial_core.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_ldisc' type-id='type-id-4277' visibility='default' filepath='include/linux/serial_core.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_mctrl' type-id='type-id-4278' visibility='default' filepath='include/linux/serial_core.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_mctrl' type-id='type-id-4279' visibility='default' filepath='include/linux/serial_core.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_divisor' type-id='type-id-4280' visibility='default' filepath='include/linux/serial_core.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_divisor' type-id='type-id-4281' visibility='default' filepath='include/linux/serial_core.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='startup' type-id='type-id-4282' visibility='default' filepath='include/linux/serial_core.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='shutdown' type-id='type-id-4283' visibility='default' filepath='include/linux/serial_core.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='throttle' type-id='type-id-4283' visibility='default' filepath='include/linux/serial_core.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='unthrottle' type-id='type-id-4283' visibility='default' filepath='include/linux/serial_core.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='handle_irq' type-id='type-id-4282' visibility='default' filepath='include/linux/serial_core.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='pm' type-id='type-id-4284' visibility='default' filepath='include/linux/serial_core.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='handle_break' type-id='type-id-4283' visibility='default' filepath='include/linux/serial_core.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='rs485_config' type-id='type-id-4285' visibility='default' filepath='include/linux/serial_core.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='irq' type-id='type-id-5' visibility='default' filepath='include/linux/serial_core.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='irqflags' type-id='type-id-16' visibility='default' filepath='include/linux/serial_core.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='uartclk' type-id='type-id-5' visibility='default' filepath='include/linux/serial_core.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='fifosize' type-id='type-id-5' visibility='default' filepath='include/linux/serial_core.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='x_char' type-id='type-id-216' visibility='default' filepath='include/linux/serial_core.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1416'>
+          <var-decl name='regshift' type-id='type-id-216' visibility='default' filepath='include/linux/serial_core.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1424'>
+          <var-decl name='iotype' type-id='type-id-216' visibility='default' filepath='include/linux/serial_core.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1432'>
+          <var-decl name='quirks' type-id='type-id-216' visibility='default' filepath='include/linux/serial_core.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='read_status_mask' type-id='type-id-5' visibility='default' filepath='include/linux/serial_core.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='ignore_status_mask' type-id='type-id-5' visibility='default' filepath='include/linux/serial_core.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='state' type-id='type-id-4286' visibility='default' filepath='include/linux/serial_core.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='icount' type-id='type-id-4287' visibility='default' filepath='include/linux/serial_core.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='cons' type-id='type-id-4288' visibility='default' filepath='include/linux/serial_core.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='sysrq' type-id='type-id-16' visibility='default' filepath='include/linux/serial_core.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='sysrq_ch' type-id='type-id-5' visibility='default' filepath='include/linux/serial_core.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='flags' type-id='type-id-4289' visibility='default' filepath='include/linux/serial_core.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='status' type-id='type-id-4290' visibility='default' filepath='include/linux/serial_core.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2208'>
+          <var-decl name='hw_stopped' type-id='type-id-17' visibility='default' filepath='include/linux/serial_core.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='mctrl' type-id='type-id-5' visibility='default' filepath='include/linux/serial_core.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2272'>
+          <var-decl name='timeout' type-id='type-id-5' visibility='default' filepath='include/linux/serial_core.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='type' type-id='type-id-5' visibility='default' filepath='include/linux/serial_core.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='ops' type-id='type-id-4291' visibility='default' filepath='include/linux/serial_core.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='custom_divisor' type-id='type-id-5' visibility='default' filepath='include/linux/serial_core.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2464'>
+          <var-decl name='line' type-id='type-id-5' visibility='default' filepath='include/linux/serial_core.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='minor' type-id='type-id-5' visibility='default' filepath='include/linux/serial_core.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='mapbase' type-id='type-id-2155' visibility='default' filepath='include/linux/serial_core.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='mapsize' type-id='type-id-2155' visibility='default' filepath='include/linux/serial_core.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='dev' type-id='type-id-240' visibility='default' filepath='include/linux/serial_core.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='hub6' type-id='type-id-216' visibility='default' filepath='include/linux/serial_core.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2760'>
+          <var-decl name='suspended' type-id='type-id-216' visibility='default' filepath='include/linux/serial_core.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2768'>
+          <var-decl name='unused' type-id='type-id-4266' visibility='default' filepath='include/linux/serial_core.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/serial_core.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='attr_group' type-id='type-id-4292' visibility='default' filepath='include/linux/serial_core.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='tty_groups' type-id='type-id-665' visibility='default' filepath='include/linux/serial_core.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='rs485' type-id='type-id-4293' visibility='default' filepath='include/linux/serial_core.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='private_data' type-id='type-id-15' visibility='default' filepath='include/linux/serial_core.h' line='264' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='serial_rs485' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/linux/serial.h' line='117' column='1' id='type-id-4293'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/serial.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='delay_rts_before_send' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/serial.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='delay_rts_after_send' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/serial.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='padding' type-id='type-id-4261' visibility='default' filepath='include/uapi/linux/serial.h' line='131' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uart_state' size-in-bits='3328' is-struct='yes' visibility='default' filepath='include/linux/serial_core.h' line='292' column='1' id='type-id-4294'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port' type-id='type-id-272' visibility='default' filepath='include/linux/serial_core.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='pm_state' type-id='type-id-4295' visibility='default' filepath='include/linux/serial_core.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='xmit' type-id='type-id-4296' visibility='default' filepath='include/linux/serial_core.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='refcount' type-id='type-id-26' visibility='default' filepath='include/linux/serial_core.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='remove_wait' type-id='type-id-225' visibility='default' filepath='include/linux/serial_core.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='uart_port' type-id='type-id-4297' visibility='default' filepath='include/linux/serial_core.h' line='300' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='158' column='1' id='type-id-4298'>
+        <data-member access='private'>
+          <var-decl name='graveyard_link' type-id='type-id-20' visibility='default' filepath='include/linux/key.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='serial_node' type-id='type-id-422' visibility='default' filepath='include/linux/key.h' line='160' column='1'/>
+        </data-member>
+      </union-decl>
+      <enum-decl name='uart_pm_state' filepath='include/linux/serial_core.h' line='283' column='1' id='type-id-4295'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='UART_PM_STATE_ON' value='0'/>
+        <enumerator name='UART_PM_STATE_OFF' value='3'/>
+        <enumerator name='UART_PM_STATE_UNDEFINED' value='4'/>
+      </enum-decl>
+      <class-decl name='circ_buf' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/circ_buf.h' line='9' column='1' id='type-id-4296'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buf' type-id='type-id-2' visibility='default' filepath='include/linux/circ_buf.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='head' type-id='type-id-17' visibility='default' filepath='include/linux/circ_buf.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='tail' type-id='type-id-17' visibility='default' filepath='include/linux/circ_buf.h' line='12' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uart_icount' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/linux/serial_core.h' line='100' column='1' id='type-id-4287'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cts' type-id='type-id-511' visibility='default' filepath='include/linux/serial_core.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dsr' type-id='type-id-511' visibility='default' filepath='include/linux/serial_core.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rng' type-id='type-id-511' visibility='default' filepath='include/linux/serial_core.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dcd' type-id='type-id-511' visibility='default' filepath='include/linux/serial_core.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rx' type-id='type-id-511' visibility='default' filepath='include/linux/serial_core.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tx' type-id='type-id-511' visibility='default' filepath='include/linux/serial_core.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='frame' type-id='type-id-511' visibility='default' filepath='include/linux/serial_core.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='overrun' type-id='type-id-511' visibility='default' filepath='include/linux/serial_core.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='parity' type-id='type-id-511' visibility='default' filepath='include/linux/serial_core.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='brk' type-id='type-id-511' visibility='default' filepath='include/linux/serial_core.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='buf_overrun' type-id='type-id-511' visibility='default' filepath='include/linux/serial_core.h' line='111' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='console' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/console.h' line='145' column='1' id='type-id-4299'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-43' visibility='default' filepath='include/linux/console.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='write' type-id='type-id-4300' visibility='default' filepath='include/linux/console.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='read' type-id='type-id-4301' visibility='default' filepath='include/linux/console.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='device' type-id='type-id-4302' visibility='default' filepath='include/linux/console.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='unblank' type-id='type-id-1392' visibility='default' filepath='include/linux/console.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='setup' type-id='type-id-4303' visibility='default' filepath='include/linux/console.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='match' type-id='type-id-4304' visibility='default' filepath='include/linux/console.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='flags' type-id='type-id-261' visibility='default' filepath='include/linux/console.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='528'>
+          <var-decl name='index' type-id='type-id-261' visibility='default' filepath='include/linux/console.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='cflag' type-id='type-id-17' visibility='default' filepath='include/linux/console.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='data' type-id='type-id-15' visibility='default' filepath='include/linux/console.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='next' type-id='type-id-4288' visibility='default' filepath='include/linux/console.h' line='157' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='upf_t' type-id='type-id-5' filepath='include/linux/serial_core.h' line='114' column='1' id='type-id-4289'/>
+      <typedef-decl name='upstat_t' type-id='type-id-5' filepath='include/linux/serial_core.h' line='115' column='1' id='type-id-4290'/>
+      <class-decl name='uart_ops' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/serial_core.h' line='49' column='1' id='type-id-4305'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tx_empty' type-id='type-id-4278' visibility='default' filepath='include/linux/serial_core.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='set_mctrl' type-id='type-id-4279' visibility='default' filepath='include/linux/serial_core.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_mctrl' type-id='type-id-4278' visibility='default' filepath='include/linux/serial_core.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='stop_tx' type-id='type-id-4283' visibility='default' filepath='include/linux/serial_core.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='start_tx' type-id='type-id-4283' visibility='default' filepath='include/linux/serial_core.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='throttle' type-id='type-id-4283' visibility='default' filepath='include/linux/serial_core.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='unthrottle' type-id='type-id-4283' visibility='default' filepath='include/linux/serial_core.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='send_xchar' type-id='type-id-4306' visibility='default' filepath='include/linux/serial_core.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='stop_rx' type-id='type-id-4283' visibility='default' filepath='include/linux/serial_core.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='enable_ms' type-id='type-id-4283' visibility='default' filepath='include/linux/serial_core.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='break_ctl' type-id='type-id-4307' visibility='default' filepath='include/linux/serial_core.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='startup' type-id='type-id-4282' visibility='default' filepath='include/linux/serial_core.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='shutdown' type-id='type-id-4283' visibility='default' filepath='include/linux/serial_core.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='flush_buffer' type-id='type-id-4283' visibility='default' filepath='include/linux/serial_core.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='set_termios' type-id='type-id-4276' visibility='default' filepath='include/linux/serial_core.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='set_ldisc' type-id='type-id-4277' visibility='default' filepath='include/linux/serial_core.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='pm' type-id='type-id-4284' visibility='default' filepath='include/linux/serial_core.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='type' type-id='type-id-4308' visibility='default' filepath='include/linux/serial_core.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='release_port' type-id='type-id-4283' visibility='default' filepath='include/linux/serial_core.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='request_port' type-id='type-id-4282' visibility='default' filepath='include/linux/serial_core.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='config_port' type-id='type-id-4307' visibility='default' filepath='include/linux/serial_core.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='verify_port' type-id='type-id-4309' visibility='default' filepath='include/linux/serial_core.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='ioctl' type-id='type-id-4310' visibility='default' filepath='include/linux/serial_core.h' line='88' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='serial_struct' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/uapi/linux/serial.h' line='19' column='1' id='type-id-4311'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='type-id-17' visibility='default' filepath='include/uapi/linux/serial.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='line' type-id='type-id-17' visibility='default' filepath='include/uapi/linux/serial.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='port' type-id='type-id-5' visibility='default' filepath='include/uapi/linux/serial.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='irq' type-id='type-id-17' visibility='default' filepath='include/uapi/linux/serial.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='type-id-17' visibility='default' filepath='include/uapi/linux/serial.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='xmit_fifo_size' type-id='type-id-17' visibility='default' filepath='include/uapi/linux/serial.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='custom_divisor' type-id='type-id-17' visibility='default' filepath='include/uapi/linux/serial.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='baud_base' type-id='type-id-17' visibility='default' filepath='include/uapi/linux/serial.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='close_delay' type-id='type-id-312' visibility='default' filepath='include/uapi/linux/serial.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='io_type' type-id='type-id-1' visibility='default' filepath='include/uapi/linux/serial.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='280'>
+          <var-decl name='reserved_char' type-id='type-id-4262' visibility='default' filepath='include/uapi/linux/serial.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='hub6' type-id='type-id-17' visibility='default' filepath='include/uapi/linux/serial.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='closing_wait' type-id='type-id-312' visibility='default' filepath='include/uapi/linux/serial.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='closing_wait2' type-id='type-id-312' visibility='default' filepath='include/uapi/linux/serial.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='iomem_base' type-id='type-id-256' visibility='default' filepath='include/uapi/linux/serial.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='iomem_reg_shift' type-id='type-id-312' visibility='default' filepath='include/uapi/linux/serial.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='port_high' type-id='type-id-5' visibility='default' filepath='include/uapi/linux/serial.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='iomap_base' type-id='type-id-16' visibility='default' filepath='include/uapi/linux/serial.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uart_8250_dma' size-in-bits='1920' is-struct='yes' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='14' column='1' id='type-id-4312'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tx_dma' type-id='type-id-4271' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_dma' type-id='type-id-4271' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fn' type-id='type-id-4313' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rx_param' type-id='type-id-15' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tx_param' type-id='type-id-15' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rxconf' type-id='type-id-4314' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='txconf' type-id='type-id-4314' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='rxchan' type-id='type-id-4315' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='txchan' type-id='type-id-4315' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rx_dma_addr' type-id='type-id-99' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='tx_dma_addr' type-id='type-id-99' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='rx_addr' type-id='type-id-2083' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='tx_addr' type-id='type-id-2083' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='rx_cookie' type-id='type-id-4316' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='tx_cookie' type-id='type-id-4316' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='rx_buf' type-id='type-id-15' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='rx_size' type-id='type-id-84' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='tx_size' type-id='type-id-84' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='tx_running' type-id='type-id-216' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1864'>
+          <var-decl name='tx_err' type-id='type-id-216' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1872'>
+          <var-decl name='rx_running' type-id='type-id-216' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='48' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_chan' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='265' column='1' id='type-id-4317'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='device' type-id='type-id-4318' visibility='default' filepath='include/linux/dmaengine.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cookie' type-id='type-id-4316' visibility='default' filepath='include/linux/dmaengine.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='completed_cookie' type-id='type-id-4316' visibility='default' filepath='include/linux/dmaengine.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='chan_id' type-id='type-id-17' visibility='default' filepath='include/linux/dmaengine.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='type-id-4319' visibility='default' filepath='include/linux/dmaengine.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='device_node' type-id='type-id-20' visibility='default' filepath='include/linux/dmaengine.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='local' type-id='type-id-4320' visibility='default' filepath='include/linux/dmaengine.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='client_count' type-id='type-id-17' visibility='default' filepath='include/linux/dmaengine.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='table_count' type-id='type-id-17' visibility='default' filepath='include/linux/dmaengine.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='router' type-id='type-id-4321' visibility='default' filepath='include/linux/dmaengine.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='route_data' type-id='type-id-15' visibility='default' filepath='include/linux/dmaengine.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='private' type-id='type-id-15' visibility='default' filepath='include/linux/dmaengine.h' line='283' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_device' size-in-bits='2368' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='734' column='1' id='type-id-4322'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chancnt' type-id='type-id-5' visibility='default' filepath='include/linux/dmaengine.h' line='736' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='privatecnt' type-id='type-id-5' visibility='default' filepath='include/linux/dmaengine.h' line='737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='channels' type-id='type-id-20' visibility='default' filepath='include/linux/dmaengine.h' line='738' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='global_node' type-id='type-id-20' visibility='default' filepath='include/linux/dmaengine.h' line='739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='filter' type-id='type-id-4323' visibility='default' filepath='include/linux/dmaengine.h' line='740' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cap_mask' type-id='type-id-4324' visibility='default' filepath='include/linux/dmaengine.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='max_xor' type-id='type-id-312' visibility='default' filepath='include/linux/dmaengine.h' line='742' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='592'>
+          <var-decl name='max_pq' type-id='type-id-312' visibility='default' filepath='include/linux/dmaengine.h' line='743' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='copy_align' type-id='type-id-4325' visibility='default' filepath='include/linux/dmaengine.h' line='744' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='xor_align' type-id='type-id-4325' visibility='default' filepath='include/linux/dmaengine.h' line='745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='pq_align' type-id='type-id-4325' visibility='default' filepath='include/linux/dmaengine.h' line='746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='fill_align' type-id='type-id-4325' visibility='default' filepath='include/linux/dmaengine.h' line='747' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='dev_id' type-id='type-id-17' visibility='default' filepath='include/linux/dmaengine.h' line='750' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='dev' type-id='type-id-240' visibility='default' filepath='include/linux/dmaengine.h' line='751' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='src_addr_widths' type-id='type-id-7' visibility='default' filepath='include/linux/dmaengine.h' line='753' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='dst_addr_widths' type-id='type-id-7' visibility='default' filepath='include/linux/dmaengine.h' line='754' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='directions' type-id='type-id-7' visibility='default' filepath='include/linux/dmaengine.h' line='755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='max_burst' type-id='type-id-7' visibility='default' filepath='include/linux/dmaengine.h' line='756' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='descriptor_reuse' type-id='type-id-33' visibility='default' filepath='include/linux/dmaengine.h' line='757' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='residue_granularity' type-id='type-id-4326' visibility='default' filepath='include/linux/dmaengine.h' line='758' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='device_alloc_chan_resources' type-id='type-id-4327' visibility='default' filepath='include/linux/dmaengine.h' line='760' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='device_free_chan_resources' type-id='type-id-4328' visibility='default' filepath='include/linux/dmaengine.h' line='761' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='device_prep_dma_memcpy' type-id='type-id-4329' visibility='default' filepath='include/linux/dmaengine.h' line='763' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='device_prep_dma_xor' type-id='type-id-4330' visibility='default' filepath='include/linux/dmaengine.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='device_prep_dma_xor_val' type-id='type-id-4331' visibility='default' filepath='include/linux/dmaengine.h' line='769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='device_prep_dma_pq' type-id='type-id-4332' visibility='default' filepath='include/linux/dmaengine.h' line='772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='device_prep_dma_pq_val' type-id='type-id-4333' visibility='default' filepath='include/linux/dmaengine.h' line='776' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='device_prep_dma_memset' type-id='type-id-4334' visibility='default' filepath='include/linux/dmaengine.h' line='780' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='device_prep_dma_memset_sg' type-id='type-id-4335' visibility='default' filepath='include/linux/dmaengine.h' line='783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='device_prep_dma_interrupt' type-id='type-id-4336' visibility='default' filepath='include/linux/dmaengine.h' line='786' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='device_prep_slave_sg' type-id='type-id-4337' visibility='default' filepath='include/linux/dmaengine.h' line='789' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='device_prep_dma_cyclic' type-id='type-id-4338' visibility='default' filepath='include/linux/dmaengine.h' line='793' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='device_prep_interleaved_dma' type-id='type-id-4339' visibility='default' filepath='include/linux/dmaengine.h' line='797' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='device_prep_dma_imm_data' type-id='type-id-4340' visibility='default' filepath='include/linux/dmaengine.h' line='800' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='device_config' type-id='type-id-4341' visibility='default' filepath='include/linux/dmaengine.h' line='804' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='device_pause' type-id='type-id-4327' visibility='default' filepath='include/linux/dmaengine.h' line='806' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='device_resume' type-id='type-id-4327' visibility='default' filepath='include/linux/dmaengine.h' line='807' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='device_terminate_all' type-id='type-id-4327' visibility='default' filepath='include/linux/dmaengine.h' line='808' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='device_synchronize' type-id='type-id-4328' visibility='default' filepath='include/linux/dmaengine.h' line='809' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='device_tx_status' type-id='type-id-4342' visibility='default' filepath='include/linux/dmaengine.h' line='811' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='device_issue_pending' type-id='type-id-4328' visibility='default' filepath='include/linux/dmaengine.h' line='814' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_filter' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='667' column='1' id='type-id-4323'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fn' type-id='type-id-4313' visibility='default' filepath='include/linux/dmaengine.h' line='668' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mapcnt' type-id='type-id-17' visibility='default' filepath='include/linux/dmaengine.h' line='669' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map' type-id='type-id-4343' visibility='default' filepath='include/linux/dmaengine.h' line='670' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='dma_filter_fn' type-id='type-id-4344' filepath='include/linux/dmaengine.h' line='456' column='1' id='type-id-4313'/>
+      <class-decl name='dma_slave_map' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='654' column='1' id='type-id-4345'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='devname' type-id='type-id-4' visibility='default' filepath='include/linux/dmaengine.h' line='655' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='slave' type-id='type-id-4' visibility='default' filepath='include/linux/dmaengine.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='param' type-id='type-id-15' visibility='default' filepath='include/linux/dmaengine.h' line='657' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='dma_cap_mask_t' type-id='type-id-4346' filepath='include/linux/dmaengine.h' line='226' column='1' id='type-id-4324'/>
+      <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-4324' visibility='default' filepath='include/linux/dmaengine.h' line='226' column='1' id='type-id-4346'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bits' type-id='type-id-491' visibility='default' filepath='include/linux/dmaengine.h' line='226' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='dmaengine_alignment' filepath='include/linux/dmaengine.h' line='637' column='1' id='type-id-4325'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='DMAENGINE_ALIGN_1_BYTE' value='0'/>
+        <enumerator name='DMAENGINE_ALIGN_2_BYTES' value='1'/>
+        <enumerator name='DMAENGINE_ALIGN_4_BYTES' value='2'/>
+        <enumerator name='DMAENGINE_ALIGN_8_BYTES' value='3'/>
+        <enumerator name='DMAENGINE_ALIGN_16_BYTES' value='4'/>
+        <enumerator name='DMAENGINE_ALIGN_32_BYTES' value='5'/>
+        <enumerator name='DMAENGINE_ALIGN_64_BYTES' value='6'/>
+      </enum-decl>
+      <enum-decl name='dma_residue_granularity' filepath='include/linux/dmaengine.h' line='401' column='1' id='type-id-4326'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='DMA_RESIDUE_GRANULARITY_DESCRIPTOR' value='0'/>
+        <enumerator name='DMA_RESIDUE_GRANULARITY_SEGMENT' value='1'/>
+        <enumerator name='DMA_RESIDUE_GRANULARITY_BURST' value='2'/>
+      </enum-decl>
+      <class-decl name='dma_async_tx_descriptor' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='508' column='1' id='type-id-4347'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cookie' type-id='type-id-4316' visibility='default' filepath='include/linux/dmaengine.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='type-id-4348' visibility='default' filepath='include/linux/dmaengine.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='phys' type-id='type-id-2083' visibility='default' filepath='include/linux/dmaengine.h' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='chan' type-id='type-id-4315' visibility='default' filepath='include/linux/dmaengine.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_submit' type-id='type-id-4349' visibility='default' filepath='include/linux/dmaengine.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='desc_free' type-id='type-id-4350' visibility='default' filepath='include/linux/dmaengine.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='callback' type-id='type-id-4351' visibility='default' filepath='include/linux/dmaengine.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='callback_result' type-id='type-id-4352' visibility='default' filepath='include/linux/dmaengine.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='callback_param' type-id='type-id-15' visibility='default' filepath='include/linux/dmaengine.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='unmap' type-id='type-id-4353' visibility='default' filepath='include/linux/dmaengine.h' line='518' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='dma_cookie_t' type-id='type-id-738' filepath='include/linux/dmaengine.h' line='34' column='1' id='type-id-4316'/>
+      <enum-decl name='dma_ctrl_flags' filepath='include/linux/dmaengine.h' line='192' column='1' id='type-id-4348'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='DMA_PREP_INTERRUPT' value='1'/>
+        <enumerator name='DMA_CTRL_ACK' value='2'/>
+        <enumerator name='DMA_PREP_PQ_DISABLE_P' value='4'/>
+        <enumerator name='DMA_PREP_PQ_DISABLE_Q' value='8'/>
+        <enumerator name='DMA_PREP_CONTINUE' value='16'/>
+        <enumerator name='DMA_PREP_FENCE' value='32'/>
+        <enumerator name='DMA_CTRL_REUSE' value='64'/>
+        <enumerator name='DMA_PREP_CMD' value='128'/>
+      </enum-decl>
+      <typedef-decl name='dma_async_tx_callback' type-id='type-id-517' filepath='include/linux/dmaengine.h' line='458' column='1' id='type-id-4351'/>
+      <typedef-decl name='dma_async_tx_callback_result' type-id='type-id-4354' filepath='include/linux/dmaengine.h' line='472' column='1' id='type-id-4352'/>
+      <class-decl name='dmaengine_result' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='467' column='1' id='type-id-4355'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='result' type-id='type-id-4356' visibility='default' filepath='include/linux/dmaengine.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='residue' type-id='type-id-7' visibility='default' filepath='include/linux/dmaengine.h' line='469' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='dmaengine_tx_result' filepath='include/linux/dmaengine.h' line='460' column='1' id='type-id-4356'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='DMA_TRANS_NOERROR' value='0'/>
+        <enumerator name='DMA_TRANS_READ_FAILED' value='1'/>
+        <enumerator name='DMA_TRANS_WRITE_FAILED' value='2'/>
+        <enumerator name='DMA_TRANS_ABORTED' value='3'/>
+      </enum-decl>
+      <class-decl name='dmaengine_unmap_data' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='475' column='1' id='type-id-4357'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='map_cnt' type-id='type-id-214' visibility='default' filepath='include/linux/dmaengine.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='to_cnt' type-id='type-id-214' visibility='default' filepath='include/linux/dmaengine.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='from_cnt' type-id='type-id-214' visibility='default' filepath='include/linux/dmaengine.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bidi_cnt' type-id='type-id-214' visibility='default' filepath='include/linux/dmaengine.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='type-id-240' visibility='default' filepath='include/linux/dmaengine.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='kref' type-id='type-id-239' visibility='default' filepath='include/linux/dmaengine.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='len' type-id='type-id-84' visibility='default' filepath='include/linux/dmaengine.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='addr' type-id='type-id-4265' visibility='default' filepath='include/linux/dmaengine.h' line='487' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='sum_check_flags' filepath='include/linux/dmaengine.h' line='216' column='1' id='type-id-4358'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='SUM_CHECK_P_RESULT' value='1'/>
+        <enumerator name='SUM_CHECK_Q_RESULT' value='2'/>
+      </enum-decl>
+      <enum-decl name='dma_transfer_direction' filepath='include/linux/dmaengine.h' line='87' column='1' id='type-id-4359'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='DMA_MEM_TO_MEM' value='0'/>
+        <enumerator name='DMA_MEM_TO_DEV' value='1'/>
+        <enumerator name='DMA_DEV_TO_MEM' value='2'/>
+        <enumerator name='DMA_DEV_TO_DEV' value='3'/>
+        <enumerator name='DMA_TRANS_NONE' value='4'/>
+      </enum-decl>
+      <class-decl name='dma_interleaved_template' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='158' column='1' id='type-id-4360'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='src_start' type-id='type-id-2083' visibility='default' filepath='include/linux/dmaengine.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dst_start' type-id='type-id-2083' visibility='default' filepath='include/linux/dmaengine.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dir' type-id='type-id-4359' visibility='default' filepath='include/linux/dmaengine.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='src_inc' type-id='type-id-33' visibility='default' filepath='include/linux/dmaengine.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='dst_inc' type-id='type-id-33' visibility='default' filepath='include/linux/dmaengine.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='src_sgl' type-id='type-id-33' visibility='default' filepath='include/linux/dmaengine.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='184'>
+          <var-decl name='dst_sgl' type-id='type-id-33' visibility='default' filepath='include/linux/dmaengine.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='numf' type-id='type-id-84' visibility='default' filepath='include/linux/dmaengine.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='frame_size' type-id='type-id-84' visibility='default' filepath='include/linux/dmaengine.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sgl' type-id='type-id-4264' visibility='default' filepath='include/linux/dmaengine.h' line='168' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='data_chunk' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='133' column='1' id='type-id-4263'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='type-id-84' visibility='default' filepath='include/linux/dmaengine.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='icg' type-id='type-id-84' visibility='default' filepath='include/linux/dmaengine.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dst_icg' type-id='type-id-84' visibility='default' filepath='include/linux/dmaengine.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='src_icg' type-id='type-id-84' visibility='default' filepath='include/linux/dmaengine.h' line='137' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_slave_config' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='367' column='1' id='type-id-4314'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='direction' type-id='type-id-4359' visibility='default' filepath='include/linux/dmaengine.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='src_addr' type-id='type-id-99' visibility='default' filepath='include/linux/dmaengine.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dst_addr' type-id='type-id-99' visibility='default' filepath='include/linux/dmaengine.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='src_addr_width' type-id='type-id-4361' visibility='default' filepath='include/linux/dmaengine.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='dst_addr_width' type-id='type-id-4361' visibility='default' filepath='include/linux/dmaengine.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='src_maxburst' type-id='type-id-7' visibility='default' filepath='include/linux/dmaengine.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='dst_maxburst' type-id='type-id-7' visibility='default' filepath='include/linux/dmaengine.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='src_port_window_size' type-id='type-id-7' visibility='default' filepath='include/linux/dmaengine.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='dst_port_window_size' type-id='type-id-7' visibility='default' filepath='include/linux/dmaengine.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='device_fc' type-id='type-id-33' visibility='default' filepath='include/linux/dmaengine.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='slave_id' type-id='type-id-5' visibility='default' filepath='include/linux/dmaengine.h' line='378' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='dma_slave_buswidth' filepath='include/linux/dmaengine.h' line='304' column='1' id='type-id-4361'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='DMA_SLAVE_BUSWIDTH_UNDEFINED' value='0'/>
+        <enumerator name='DMA_SLAVE_BUSWIDTH_1_BYTE' value='1'/>
+        <enumerator name='DMA_SLAVE_BUSWIDTH_2_BYTES' value='2'/>
+        <enumerator name='DMA_SLAVE_BUSWIDTH_3_BYTES' value='3'/>
+        <enumerator name='DMA_SLAVE_BUSWIDTH_4_BYTES' value='4'/>
+        <enumerator name='DMA_SLAVE_BUSWIDTH_8_BYTES' value='8'/>
+        <enumerator name='DMA_SLAVE_BUSWIDTH_16_BYTES' value='16'/>
+        <enumerator name='DMA_SLAVE_BUSWIDTH_32_BYTES' value='32'/>
+        <enumerator name='DMA_SLAVE_BUSWIDTH_64_BYTES' value='64'/>
+      </enum-decl>
+      <enum-decl name='dma_status' filepath='include/linux/dmaengine.h' line='49' column='1' id='type-id-4362'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='DMA_COMPLETE' value='0'/>
+        <enumerator name='DMA_IN_PROGRESS' value='1'/>
+        <enumerator name='DMA_PAUSED' value='2'/>
+        <enumerator name='DMA_ERROR' value='3'/>
+      </enum-decl>
+      <class-decl name='dma_tx_state' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='627' column='1' id='type-id-4363'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='last' type-id='type-id-4316' visibility='default' filepath='include/linux/dmaengine.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='used' type-id='type-id-4316' visibility='default' filepath='include/linux/dmaengine.h' line='629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='residue' type-id='type-id-7' visibility='default' filepath='include/linux/dmaengine.h' line='630' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_chan_dev' size-in-bits='6400' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='293' column='1' id='type-id-4364'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chan' type-id='type-id-4315' visibility='default' filepath='include/linux/dmaengine.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='device' type-id='type-id-388' visibility='default' filepath='include/linux/dmaengine.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='dev_id' type-id='type-id-17' visibility='default' filepath='include/linux/dmaengine.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='idr_ref' type-id='type-id-3908' visibility='default' filepath='include/linux/dmaengine.h' line='297' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_chan_percpu' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='234' column='1' id='type-id-4365'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='memcpy_count' type-id='type-id-16' visibility='default' filepath='include/linux/dmaengine.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bytes_transferred' type-id='type-id-16' visibility='default' filepath='include/linux/dmaengine.h' line='237' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_router' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='245' column='1' id='type-id-4366'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='type-id-240' visibility='default' filepath='include/linux/dmaengine.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='route_free' type-id='type-id-4367' visibility='default' filepath='include/linux/dmaengine.h' line='247' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uart_8250_ops' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/serial_8250.h' line='77' column='1' id='type-id-4368'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='setup_irq' type-id='type-id-4271' visibility='default' filepath='include/linux/serial_8250.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='release_irq' type-id='type-id-4369' visibility='default' filepath='include/linux/serial_8250.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uart_8250_em485' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/linux/serial_8250.h' line='82' column='1' id='type-id-4370'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start_tx_timer' type-id='type-id-681' visibility='default' filepath='include/linux/serial_8250.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='stop_tx_timer' type-id='type-id-681' visibility='default' filepath='include/linux/serial_8250.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='active_timer' type-id='type-id-1558' visibility='default' filepath='include/linux/serial_8250.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='port' type-id='type-id-4371' visibility='default' filepath='include/linux/serial_8250.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-2035' size-in-bits='64' id='type-id-4292'/>
+      <pointer-type-def type-id='type-id-4299' size-in-bits='64' id='type-id-4288'/>
+      <pointer-type-def type-id='type-id-4372' size-in-bits='64' id='type-id-4308'/>
+      <qualified-type-def type-id='type-id-4345' const='yes' id='type-id-4373'/>
+      <pointer-type-def type-id='type-id-4373' size-in-bits='64' id='type-id-4343'/>
+      <qualified-type-def type-id='type-id-4355' const='yes' id='type-id-4374'/>
+      <pointer-type-def type-id='type-id-4374' size-in-bits='64' id='type-id-4375'/>
+      <qualified-type-def type-id='type-id-4368' const='yes' id='type-id-4376'/>
+      <pointer-type-def type-id='type-id-4376' size-in-bits='64' id='type-id-4270'/>
+      <qualified-type-def type-id='type-id-4305' const='yes' id='type-id-4377'/>
+      <pointer-type-def type-id='type-id-4377' size-in-bits='64' id='type-id-4291'/>
+      <pointer-type-def type-id='type-id-4347' size-in-bits='64' id='type-id-4378'/>
+      <pointer-type-def type-id='type-id-4379' size-in-bits='64' id='type-id-4333'/>
+      <pointer-type-def type-id='type-id-4380' size-in-bits='64' id='type-id-4332'/>
+      <pointer-type-def type-id='type-id-4381' size-in-bits='64' id='type-id-4331'/>
+      <pointer-type-def type-id='type-id-4382' size-in-bits='64' id='type-id-4339'/>
+      <pointer-type-def type-id='type-id-4383' size-in-bits='64' id='type-id-4337'/>
+      <pointer-type-def type-id='type-id-4384' size-in-bits='64' id='type-id-4335'/>
+      <pointer-type-def type-id='type-id-4385' size-in-bits='64' id='type-id-4330'/>
+      <pointer-type-def type-id='type-id-4386' size-in-bits='64' id='type-id-4334'/>
+      <pointer-type-def type-id='type-id-4387' size-in-bits='64' id='type-id-4329'/>
+      <pointer-type-def type-id='type-id-4388' size-in-bits='64' id='type-id-4338'/>
+      <pointer-type-def type-id='type-id-4389' size-in-bits='64' id='type-id-4340'/>
+      <pointer-type-def type-id='type-id-4390' size-in-bits='64' id='type-id-4336'/>
+      <pointer-type-def type-id='type-id-4317' size-in-bits='64' id='type-id-4315'/>
+      <pointer-type-def type-id='type-id-4364' size-in-bits='64' id='type-id-4319'/>
+      <pointer-type-def type-id='type-id-4365' size-in-bits='64' id='type-id-4320'/>
+      <pointer-type-def type-id='type-id-4322' size-in-bits='64' id='type-id-4318'/>
+      <pointer-type-def type-id='type-id-4360' size-in-bits='64' id='type-id-4391'/>
+      <pointer-type-def type-id='type-id-4366' size-in-bits='64' id='type-id-4321'/>
+      <pointer-type-def type-id='type-id-4314' size-in-bits='64' id='type-id-4392'/>
+      <pointer-type-def type-id='type-id-4363' size-in-bits='64' id='type-id-4393'/>
+      <pointer-type-def type-id='type-id-4357' size-in-bits='64' id='type-id-4353'/>
+      <pointer-type-def type-id='type-id-4394' size-in-bits='64' id='type-id-4342'/>
+      <pointer-type-def type-id='type-id-4395' size-in-bits='64' id='type-id-4303'/>
+      <pointer-type-def type-id='type-id-4396' size-in-bits='64' id='type-id-4304'/>
+      <pointer-type-def type-id='type-id-4397' size-in-bits='64' id='type-id-4301'/>
+      <pointer-type-def type-id='type-id-4398' size-in-bits='64' id='type-id-4350'/>
+      <pointer-type-def type-id='type-id-4399' size-in-bits='64' id='type-id-4327'/>
+      <pointer-type-def type-id='type-id-4400' size-in-bits='64' id='type-id-4341'/>
+      <pointer-type-def type-id='type-id-4401' size-in-bits='64' id='type-id-4271'/>
+      <pointer-type-def type-id='type-id-4402' size-in-bits='64' id='type-id-4282'/>
+      <pointer-type-def type-id='type-id-4403' size-in-bits='64' id='type-id-4285'/>
+      <pointer-type-def type-id='type-id-4404' size-in-bits='64' id='type-id-4309'/>
+      <pointer-type-def type-id='type-id-4405' size-in-bits='64' id='type-id-4310'/>
+      <pointer-type-def type-id='type-id-4293' size-in-bits='64' id='type-id-4406'/>
+      <pointer-type-def type-id='type-id-4311' size-in-bits='64' id='type-id-4407'/>
+      <pointer-type-def type-id='type-id-4358' size-in-bits='64' id='type-id-4408'/>
+      <pointer-type-def type-id='type-id-4409' size-in-bits='64' id='type-id-4302'/>
+      <pointer-type-def type-id='type-id-4410' size-in-bits='64' id='type-id-4344'/>
+      <pointer-type-def type-id='type-id-4411' size-in-bits='64' id='type-id-4349'/>
+      <pointer-type-def type-id='type-id-4312' size-in-bits='64' id='type-id-4269'/>
+      <pointer-type-def type-id='type-id-4370' size-in-bits='64' id='type-id-4273'/>
+      <pointer-type-def type-id='type-id-4267' size-in-bits='64' id='type-id-4371'/>
+      <pointer-type-def type-id='type-id-4268' size-in-bits='64' id='type-id-4297'/>
+      <pointer-type-def type-id='type-id-4294' size-in-bits='64' id='type-id-4286'/>
+      <pointer-type-def type-id='type-id-4412' size-in-bits='64' id='type-id-4278'/>
+      <pointer-type-def type-id='type-id-4413' size-in-bits='64' id='type-id-4274'/>
+      <pointer-type-def type-id='type-id-4414' size-in-bits='64' id='type-id-4280'/>
+      <pointer-type-def type-id='type-id-4415' size-in-bits='64' id='type-id-4300'/>
+      <pointer-type-def type-id='type-id-4416' size-in-bits='64' id='type-id-4367'/>
+      <pointer-type-def type-id='type-id-4417' size-in-bits='64' id='type-id-4328'/>
+      <pointer-type-def type-id='type-id-4418' size-in-bits='64' id='type-id-4369'/>
+      <pointer-type-def type-id='type-id-4419' size-in-bits='64' id='type-id-4272'/>
+      <pointer-type-def type-id='type-id-4420' size-in-bits='64' id='type-id-4283'/>
+      <pointer-type-def type-id='type-id-4421' size-in-bits='64' id='type-id-4306'/>
+      <pointer-type-def type-id='type-id-4422' size-in-bits='64' id='type-id-4307'/>
+      <pointer-type-def type-id='type-id-4423' size-in-bits='64' id='type-id-4275'/>
+      <pointer-type-def type-id='type-id-4424' size-in-bits='64' id='type-id-4277'/>
+      <pointer-type-def type-id='type-id-4425' size-in-bits='64' id='type-id-4276'/>
+      <pointer-type-def type-id='type-id-4426' size-in-bits='64' id='type-id-4279'/>
+      <pointer-type-def type-id='type-id-4427' size-in-bits='64' id='type-id-4284'/>
+      <pointer-type-def type-id='type-id-4428' size-in-bits='64' id='type-id-4281'/>
+      <pointer-type-def type-id='type-id-4429' size-in-bits='64' id='type-id-4354'/>
+      <function-decl name='serial8250_get_port' mangled-name='serial8250_get_port' filepath='drivers/tty/serial/8250/8250_core.c' line='415' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serial8250_get_port'>
+        <parameter type-id='type-id-17' name='line' filepath='drivers/tty/serial/8250/8250_core.c' line='415' column='1'/>
+        <return type-id='type-id-4371'/>
+      </function-decl>
+      <function-decl name='serial8250_suspend_port' mangled-name='serial8250_suspend_port' filepath='drivers/tty/serial/8250/8250_core.c' line='752' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serial8250_suspend_port'>
+        <parameter type-id='type-id-17' name='line' filepath='drivers/tty/serial/8250/8250_core.c' line='752' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='serial8250_resume_port' mangled-name='serial8250_resume_port' filepath='drivers/tty/serial/8250/8250_core.c' line='775' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serial8250_resume_port'>
+        <parameter type-id='type-id-17' name='line' filepath='drivers/tty/serial/8250/8250_core.c' line='775' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='serial8250_register_8250_port' mangled-name='serial8250_register_8250_port' filepath='drivers/tty/serial/8250/8250_core.c' line='977' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serial8250_register_8250_port'>
+        <parameter type-id='type-id-4371' name='up' filepath='drivers/tty/serial/8250/8250_core.c' line='977' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='serial8250_unregister_port' mangled-name='serial8250_unregister_port' filepath='drivers/tty/serial/8250/8250_core.c' line='1102' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serial8250_unregister_port'>
+        <parameter type-id='type-id-17' name='line' filepath='drivers/tty/serial/8250/8250_core.c' line='1102' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-4372'>
+        <parameter type-id='type-id-4297'/>
+        <return type-id='type-id-4'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4379'>
+        <parameter type-id='type-id-4315'/>
+        <parameter type-id='type-id-2741'/>
+        <parameter type-id='type-id-2741'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-878'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-4408'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-4378'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4380'>
+        <parameter type-id='type-id-4315'/>
+        <parameter type-id='type-id-2741'/>
+        <parameter type-id='type-id-2741'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-878'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-4378'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4381'>
+        <parameter type-id='type-id-4315'/>
+        <parameter type-id='type-id-2741'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-4408'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-4378'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4382'>
+        <parameter type-id='type-id-4315'/>
+        <parameter type-id='type-id-4391'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-4378'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4383'>
+        <parameter type-id='type-id-4315'/>
+        <parameter type-id='type-id-920'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-4359'/>
+        <parameter type-id='type-id-16'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-4378'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4384'>
+        <parameter type-id='type-id-4315'/>
+        <parameter type-id='type-id-920'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-4378'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4385'>
+        <parameter type-id='type-id-4315'/>
+        <parameter type-id='type-id-2083'/>
+        <parameter type-id='type-id-2741'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-4378'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4386'>
+        <parameter type-id='type-id-4315'/>
+        <parameter type-id='type-id-2083'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-4378'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4387'>
+        <parameter type-id='type-id-4315'/>
+        <parameter type-id='type-id-2083'/>
+        <parameter type-id='type-id-2083'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-4378'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4388'>
+        <parameter type-id='type-id-4315'/>
+        <parameter type-id='type-id-2083'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-4359'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-4378'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4389'>
+        <parameter type-id='type-id-4315'/>
+        <parameter type-id='type-id-2083'/>
+        <parameter type-id='type-id-40'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-4378'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4390'>
+        <parameter type-id='type-id-4315'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-4378'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4394'>
+        <parameter type-id='type-id-4315'/>
+        <parameter type-id='type-id-4316'/>
+        <parameter type-id='type-id-4393'/>
+        <return type-id='type-id-4362'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4395'>
+        <parameter type-id='type-id-4288'/>
+        <parameter type-id='type-id-2'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4396'>
+        <parameter type-id='type-id-4288'/>
+        <parameter type-id='type-id-2'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-2'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4397'>
+        <parameter type-id='type-id-4288'/>
+        <parameter type-id='type-id-2'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4398'>
+        <parameter type-id='type-id-4378'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4399'>
+        <parameter type-id='type-id-4315'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4400'>
+        <parameter type-id='type-id-4315'/>
+        <parameter type-id='type-id-4392'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4401'>
+        <parameter type-id='type-id-4371'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4402'>
+        <parameter type-id='type-id-4297'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4403'>
+        <parameter type-id='type-id-4297'/>
+        <parameter type-id='type-id-4406'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4404'>
+        <parameter type-id='type-id-4297'/>
+        <parameter type-id='type-id-4407'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4405'>
+        <parameter type-id='type-id-4297'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4409'>
+        <parameter type-id='type-id-4288'/>
+        <parameter type-id='type-id-666'/>
+        <return type-id='type-id-241'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4410'>
+        <parameter type-id='type-id-4315'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-33'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4411'>
+        <parameter type-id='type-id-4378'/>
+        <return type-id='type-id-4316'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4412'>
+        <parameter type-id='type-id-4297'/>
+        <return type-id='type-id-5'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4413'>
+        <parameter type-id='type-id-4297'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-5'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4414'>
+        <parameter type-id='type-id-4297'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-482'/>
+        <return type-id='type-id-5'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4415'>
+        <parameter type-id='type-id-4288'/>
+        <parameter type-id='type-id-4'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4416'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4417'>
+        <parameter type-id='type-id-4315'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4418'>
+        <parameter type-id='type-id-4371'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4419'>
+        <parameter type-id='type-id-4371'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4420'>
+        <parameter type-id='type-id-4297'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4421'>
+        <parameter type-id='type-id-4297'/>
+        <parameter type-id='type-id-1'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4422'>
+        <parameter type-id='type-id-4297'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4423'>
+        <parameter type-id='type-id-4297'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4424'>
+        <parameter type-id='type-id-4297'/>
+        <parameter type-id='type-id-821'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4425'>
+        <parameter type-id='type-id-4297'/>
+        <parameter type-id='type-id-821'/>
+        <parameter type-id='type-id-821'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4426'>
+        <parameter type-id='type-id-4297'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4427'>
+        <parameter type-id='type-id-4297'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4428'>
+        <parameter type-id='type-id-4297'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4429'>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-4375'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/tty/serial/8250/8250_fsl.c' language='LANG_C89'>
+      <function-decl name='fsl8250_handle_irq' mangled-name='fsl8250_handle_irq' filepath='drivers/tty/serial/8250/8250_fsl.c' line='23' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fsl8250_handle_irq'>
+        <parameter type-id='type-id-4297' name='port' filepath='drivers/tty/serial/8250/8250_fsl.c' line='23' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/char/random.c' language='LANG_C89'>
+      <function-decl name='get_random_bytes' mangled-name='get_random_bytes' filepath='drivers/char/random.c' line='1646' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_random_bytes'>
+        <parameter type-id='type-id-15' name='buf' filepath='drivers/char/random.c' line='1646' column='1'/>
+        <parameter type-id='type-id-17' name='nbytes' filepath='drivers/char/random.c' line='1646' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/char/misc.c' language='LANG_C89'>
+      <class-decl name='miscdevice' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/miscdevice.h' line='66' column='1' id='type-id-4430'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='minor' type-id='type-id-17' visibility='default' filepath='include/linux/miscdevice.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/miscdevice.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fops' type-id='type-id-268' visibility='default' filepath='include/linux/miscdevice.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/miscdevice.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='parent' type-id='type-id-240' visibility='default' filepath='include/linux/miscdevice.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='this_device' type-id='type-id-240' visibility='default' filepath='include/linux/miscdevice.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='groups' type-id='type-id-665' visibility='default' filepath='include/linux/miscdevice.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='nodename' type-id='type-id-4' visibility='default' filepath='include/linux/miscdevice.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mode' type-id='type-id-329' visibility='default' filepath='include/linux/miscdevice.h' line='75' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-4430' size-in-bits='64' id='type-id-4431'/>
+      <function-decl name='misc_register' mangled-name='misc_register' filepath='drivers/char/misc.c' line='173' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='misc_register'>
+        <parameter type-id='type-id-4431' name='misc' filepath='drivers/char/misc.c' line='173' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='misc_deregister' mangled-name='misc_deregister' filepath='drivers/char/misc.c' line='238' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='misc_deregister'>
+        <parameter type-id='type-id-4431' name='misc' filepath='drivers/char/misc.c' line='238' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/char/hw_random/core.c' language='LANG_C89'>
+      <class-decl name='hwrng' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/hw_random.h' line='38' column='1' id='type-id-4432'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/hw_random.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='init' type-id='type-id-4433' visibility='default' filepath='include/linux/hw_random.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cleanup' type-id='type-id-4434' visibility='default' filepath='include/linux/hw_random.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='data_present' type-id='type-id-4435' visibility='default' filepath='include/linux/hw_random.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='data_read' type-id='type-id-4436' visibility='default' filepath='include/linux/hw_random.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='read' type-id='type-id-4437' visibility='default' filepath='include/linux/hw_random.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='priv' type-id='type-id-16' visibility='default' filepath='include/linux/hw_random.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='quality' type-id='type-id-312' visibility='default' filepath='include/linux/hw_random.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/hw_random.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ref' type-id='type-id-239' visibility='default' filepath='include/linux/hw_random.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='cleanup_done' type-id='type-id-1608' visibility='default' filepath='include/linux/hw_random.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-4432' size-in-bits='64' id='type-id-4438'/>
+      <pointer-type-def type-id='type-id-4439' size-in-bits='64' id='type-id-4433'/>
+      <pointer-type-def type-id='type-id-4440' size-in-bits='64' id='type-id-4435'/>
+      <pointer-type-def type-id='type-id-4441' size-in-bits='64' id='type-id-4436'/>
+      <pointer-type-def type-id='type-id-4442' size-in-bits='64' id='type-id-4437'/>
+      <pointer-type-def type-id='type-id-4443' size-in-bits='64' id='type-id-4434'/>
+      <function-decl name='hwrng_register' mangled-name='hwrng_register' filepath='drivers/char/hw_random/core.c' line='457' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hwrng_register'>
+        <parameter type-id='type-id-4438' name='rng' filepath='drivers/char/hw_random/core.c' line='457' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='hwrng_unregister' mangled-name='hwrng_unregister' filepath='drivers/char/hw_random/core.c' line='517' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hwrng_unregister'>
+        <parameter type-id='type-id-4438' name='rng' filepath='drivers/char/hw_random/core.c' line='517' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-4439'>
+        <parameter type-id='type-id-4438' name='rng'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4440'>
+        <parameter type-id='type-id-4438'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4441'>
+        <parameter type-id='type-id-4438'/>
+        <parameter type-id='type-id-1567'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4442'>
+        <parameter type-id='type-id-4438'/>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-33'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4443'>
+        <parameter type-id='type-id-4438'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_modes.c' language='LANG_C89'>
+      <function-decl name='drm_mode_probed_add' mangled-name='drm_mode_probed_add' filepath='drivers/gpu/drm/drm_modes.c' line='110' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_probed_add'>
+        <parameter type-id='type-id-4444' name='connector' filepath='drivers/gpu/drm/drm_modes.c' line='110' column='1'/>
+        <parameter type-id='type-id-4445' name='mode' filepath='drivers/gpu/drm/drm_modes.c' line='111' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='drm_cvt_mode' mangled-name='drm_cvt_mode' filepath='drivers/gpu/drm/drm_modes.c' line='143' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_cvt_mode'>
+        <parameter type-id='type-id-4446' name='dev' filepath='drivers/gpu/drm/drm_modes.c' line='143' column='1'/>
+        <parameter type-id='type-id-17' name='hdisplay' filepath='drivers/gpu/drm/drm_modes.c' line='143' column='1'/>
+        <parameter type-id='type-id-17' name='vdisplay' filepath='drivers/gpu/drm/drm_modes.c' line='144' column='1'/>
+        <parameter type-id='type-id-17' name='vrefresh' filepath='drivers/gpu/drm/drm_modes.c' line='144' column='1'/>
+        <parameter type-id='type-id-33' name='reduced' filepath='drivers/gpu/drm/drm_modes.c' line='145' column='1'/>
+        <parameter type-id='type-id-33' name='interlaced' filepath='drivers/gpu/drm/drm_modes.c' line='145' column='1'/>
+        <parameter type-id='type-id-33' name='margins' filepath='drivers/gpu/drm/drm_modes.c' line='145' column='1'/>
+        <return type-id='type-id-4445'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_probe_helper.c' language='LANG_C89'>
+
+
+      <array-type-def dimensions='1' type-id='type-id-108' size-in-bits='32' id='type-id-4447'>
+        <subrange length='2' type-id='type-id-9' id='type-id-128'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-511' size-in-bits='128' id='type-id-4448'>
+        <subrange length='4' type-id='type-id-9' id='type-id-107'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-100' size-in-bits='256' id='type-id-4449'>
+        <subrange length='4' type-id='type-id-9' id='type-id-107'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-895' size-in-bits='112' id='type-id-4450'>
+        <subrange length='14' type-id='type-id-9' id='type-id-117'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-895' size-in-bits='32' id='type-id-4451'>
+        <subrange length='4' type-id='type-id-9' id='type-id-107'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-33' size-in-bits='16' id='type-id-4452'>
+        <subrange length='2' type-id='type-id-9' id='type-id-128'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1' size-in-bits='480' id='type-id-4453'>
+        <subrange length='60' type-id='type-id-9' id='type-id-4454'/>
+
+      </array-type-def>
+      <class-decl name='agp_bridge_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-4455'/>
+      <class-decl name='dma_buf' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-4456'/>
+      <class-decl name='dma_buf_attachment' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-4457'/>
+      <class-decl name='drm_atomic_state' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-4458'/>
+      <class-decl name='drm_crtc_commit' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-4459'/>
+      <class-decl name='drm_device_dma' size-in-bits='7744' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-4460'/>
+      <class-decl name='drm_gem_object' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-4461'/>
+      <class-decl name='drm_local_map' size-in-bits='320' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-4462'/>
+      <class-decl name='drm_master' size-in-bits='1792' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-4463'/>
+      <class-decl name='drm_sg_mem' size-in-bits='320' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-4464'/>
+      <class-decl name='drm_vma_offset_manager' size-in-bits='1920' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-4465'/>
+      <class-decl name='drm_writeback_job' size-in-bits='512' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-4466'/>
+      <class-decl name='reservation_object' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-4467'/>
+      <array-type-def dimensions='1' type-id='type-id-4468' size-in-bits='256' id='type-id-4469'>
+        <subrange length='4' type-id='type-id-9' id='type-id-107'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-4470' size-in-bits='1536' id='type-id-4471'>
+        <subrange length='24' type-id='type-id-9' id='type-id-3436'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-7' size-in-bits='544' id='type-id-4472'>
+        <subrange length='17' type-id='type-id-9' id='type-id-4473'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1343' size-in-bits='320' id='type-id-4474'>
+        <subrange length='10' type-id='type-id-9' id='type-id-1191'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1343' size-in-bits='96' id='type-id-4475'>
+        <subrange length='3' type-id='type-id-9' id='type-id-196'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-2439' size-in-bits='1536' id='type-id-4476'>
+        <subrange length='24' type-id='type-id-9' id='type-id-3436'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-4477' size-in-bits='1024' id='type-id-4478'>
+        <subrange length='128' type-id='type-id-9' id='type-id-965'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-5' size-in-bits='128' id='type-id-4479'>
+        <subrange length='4' type-id='type-id-9' id='type-id-107'/>
+
+      </array-type-def>
+      <class-decl name='drm_connector' size-in-bits='8448' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='781' column='1' id='type-id-4480'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='type-id-4446' visibility='default' filepath='include/drm/drm_connector.h' line='783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='kdev' type-id='type-id-240' visibility='default' filepath='include/drm/drm_connector.h' line='785' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='attr' type-id='type-id-4043' visibility='default' filepath='include/drm/drm_connector.h' line='787' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='head' type-id='type-id-20' visibility='default' filepath='include/drm/drm_connector.h' line='797' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='base' type-id='type-id-4481' visibility='default' filepath='include/drm/drm_connector.h' line='800' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='name' type-id='type-id-2' visibility='default' filepath='include/drm/drm_connector.h' line='803' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mutex' type-id='type-id-245' visibility='default' filepath='include/drm/drm_connector.h' line='810' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='index' type-id='type-id-5' visibility='default' filepath='include/drm/drm_connector.h' line='818' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='connector_type' type-id='type-id-17' visibility='default' filepath='include/drm/drm_connector.h' line='824' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='connector_type_id' type-id='type-id-17' visibility='default' filepath='include/drm/drm_connector.h' line='826' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='interlace_allowed' type-id='type-id-33' visibility='default' filepath='include/drm/drm_connector.h' line='832' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1000'>
+          <var-decl name='doublescan_allowed' type-id='type-id-33' visibility='default' filepath='include/drm/drm_connector.h' line='838' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1008'>
+          <var-decl name='stereo_allowed' type-id='type-id-33' visibility='default' filepath='include/drm/drm_connector.h' line='844' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1016'>
+          <var-decl name='ycbcr_420_allowed' type-id='type-id-33' visibility='default' filepath='include/drm/drm_connector.h' line='852' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='registered' type-id='type-id-33' visibility='default' filepath='include/drm/drm_connector.h' line='858' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='modes' type-id='type-id-20' visibility='default' filepath='include/drm/drm_connector.h' line='865' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='status' type-id='type-id-4482' visibility='default' filepath='include/drm/drm_connector.h' line='872' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='probed_modes' type-id='type-id-20' visibility='default' filepath='include/drm/drm_connector.h' line='880' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='display_info' type-id='type-id-4483' visibility='default' filepath='include/drm/drm_connector.h' line='891' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='funcs' type-id='type-id-4484' visibility='default' filepath='include/drm/drm_connector.h' line='894' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='edid_blob_ptr' type-id='type-id-4485' visibility='default' filepath='include/drm/drm_connector.h' line='901' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='properties' type-id='type-id-4486' visibility='default' filepath='include/drm/drm_connector.h' line='904' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='scaling_mode_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_connector.h' line='910' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='content_protection_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_connector.h' line='916' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='path_blob_ptr' type-id='type-id-4485' visibility='default' filepath='include/drm/drm_connector.h' line='924' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='polled' type-id='type-id-4477' visibility='default' filepath='include/drm/drm_connector.h' line='951' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6112'>
+          <var-decl name='dpms' type-id='type-id-17' visibility='default' filepath='include/drm/drm_connector.h' line='959' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='helper_private' type-id='type-id-4487' visibility='default' filepath='include/drm/drm_connector.h' line='962' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='cmdline_mode' type-id='type-id-4488' visibility='default' filepath='include/drm/drm_connector.h' line='965' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6432'>
+          <var-decl name='force' type-id='type-id-4489' visibility='default' filepath='include/drm/drm_connector.h' line='967' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='override_edid' type-id='type-id-33' visibility='default' filepath='include/drm/drm_connector.h' line='969' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6496'>
+          <var-decl name='encoder_ids' type-id='type-id-4475' visibility='default' filepath='include/drm/drm_connector.h' line='976' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='encoder' type-id='type-id-4490' visibility='default' filepath='include/drm/drm_connector.h' line='984' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='eld' type-id='type-id-4478' visibility='default' filepath='include/drm/drm_connector.h' line='988' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='latency_present' type-id='type-id-4452' visibility='default' filepath='include/drm/drm_connector.h' line='990' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7712'>
+          <var-decl name='video_latency' type-id='type-id-465' visibility='default' filepath='include/drm/drm_connector.h' line='995' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7776'>
+          <var-decl name='audio_latency' type-id='type-id-465' visibility='default' filepath='include/drm/drm_connector.h' line='1000' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7840'>
+          <var-decl name='null_edid_counter' type-id='type-id-17' visibility='default' filepath='include/drm/drm_connector.h' line='1005' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='bad_edid_counter' type-id='type-id-5' visibility='default' filepath='include/drm/drm_connector.h' line='1008' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7904'>
+          <var-decl name='edid_corrupt' type-id='type-id-33' visibility='default' filepath='include/drm/drm_connector.h' line='1015' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='debugfs_entry' type-id='type-id-23' visibility='default' filepath='include/drm/drm_connector.h' line='1018' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='state' type-id='type-id-4491' visibility='default' filepath='include/drm/drm_connector.h' line='1034' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='tile_blob_ptr' type-id='type-id-4485' visibility='default' filepath='include/drm/drm_connector.h' line='1051' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='has_tile' type-id='type-id-33' visibility='default' filepath='include/drm/drm_connector.h' line='1054' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='tile_group' type-id='type-id-4492' visibility='default' filepath='include/drm/drm_connector.h' line='1056' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='tile_is_single_monitor' type-id='type-id-33' visibility='default' filepath='include/drm/drm_connector.h' line='1058' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8264'>
+          <var-decl name='num_h_tile' type-id='type-id-4477' visibility='default' filepath='include/drm/drm_connector.h' line='1062' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8272'>
+          <var-decl name='num_v_tile' type-id='type-id-4477' visibility='default' filepath='include/drm/drm_connector.h' line='1062' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8280'>
+          <var-decl name='tile_h_loc' type-id='type-id-4477' visibility='default' filepath='include/drm/drm_connector.h' line='1065' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8288'>
+          <var-decl name='tile_v_loc' type-id='type-id-4477' visibility='default' filepath='include/drm/drm_connector.h' line='1065' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8304'>
+          <var-decl name='tile_h_size' type-id='type-id-4493' visibility='default' filepath='include/drm/drm_connector.h' line='1068' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='tile_v_size' type-id='type-id-4493' visibility='default' filepath='include/drm/drm_connector.h' line='1068' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='free_node' type-id='type-id-281' visibility='default' filepath='include/drm/drm_connector.h' line='1077' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_device' size-in-bits='13312' is-struct='yes' visibility='default' filepath='include/drm/drm_device.h' line='31' column='1' id='type-id-4494'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='legacy_dev_list' type-id='type-id-20' visibility='default' filepath='include/drm/drm_device.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='if_version' type-id='type-id-17' visibility='default' filepath='include/drm/drm_device.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ref' type-id='type-id-239' visibility='default' filepath='include/drm/drm_device.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='type-id-240' visibility='default' filepath='include/drm/drm_device.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='driver' type-id='type-id-4495' visibility='default' filepath='include/drm/drm_device.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dev_private' type-id='type-id-15' visibility='default' filepath='include/drm/drm_device.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='primary' type-id='type-id-4496' visibility='default' filepath='include/drm/drm_device.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='render' type-id='type-id-4496' visibility='default' filepath='include/drm/drm_device.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='registered' type-id='type-id-33' visibility='default' filepath='include/drm/drm_device.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='master' type-id='type-id-4497' visibility='default' filepath='include/drm/drm_device.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='unplugged' type-id='type-id-33' visibility='default' filepath='include/drm/drm_device.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='anon_inode' type-id='type-id-1129' visibility='default' filepath='include/drm/drm_device.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='unique' type-id='type-id-2' visibility='default' filepath='include/drm/drm_device.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='struct_mutex' type-id='type-id-245' visibility='default' filepath='include/drm/drm_device.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='master_mutex' type-id='type-id-245' visibility='default' filepath='include/drm/drm_device.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='open_count' type-id='type-id-17' visibility='default' filepath='include/drm/drm_device.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='buf_lock' type-id='type-id-247' visibility='default' filepath='include/drm/drm_device.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='buf_use' type-id='type-id-17' visibility='default' filepath='include/drm/drm_device.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='buf_alloc' type-id='type-id-26' visibility='default' filepath='include/drm/drm_device.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='filelist_mutex' type-id='type-id-245' visibility='default' filepath='include/drm/drm_device.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='filelist' type-id='type-id-20' visibility='default' filepath='include/drm/drm_device.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='filelist_internal' type-id='type-id-20' visibility='default' filepath='include/drm/drm_device.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='clientlist_mutex' type-id='type-id-245' visibility='default' filepath='include/drm/drm_device.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='clientlist' type-id='type-id-20' visibility='default' filepath='include/drm/drm_device.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='maplist' type-id='type-id-20' visibility='default' filepath='include/drm/drm_device.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='map_hash' type-id='type-id-4498' visibility='default' filepath='include/drm/drm_device.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='ctxlist' type-id='type-id-20' visibility='default' filepath='include/drm/drm_device.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='ctxlist_mutex' type-id='type-id-245' visibility='default' filepath='include/drm/drm_device.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='ctx_idr' type-id='type-id-1434' visibility='default' filepath='include/drm/drm_device.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='vmalist' type-id='type-id-20' visibility='default' filepath='include/drm/drm_device.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='dma' type-id='type-id-4499' visibility='default' filepath='include/drm/drm_device.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='context_flag' type-id='type-id-1497' visibility='default' filepath='include/drm/drm_device.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='last_context' type-id='type-id-17' visibility='default' filepath='include/drm/drm_device.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3488'>
+          <var-decl name='irq_enabled' type-id='type-id-33' visibility='default' filepath='include/drm/drm_device.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='irq' type-id='type-id-17' visibility='default' filepath='include/drm/drm_device.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3552'>
+          <var-decl name='vblank_disable_immediate' type-id='type-id-33' visibility='default' filepath='include/drm/drm_device.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='vblank' type-id='type-id-4500' visibility='default' filepath='include/drm/drm_device.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='vblank_time_lock' type-id='type-id-247' visibility='default' filepath='include/drm/drm_device.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3680'>
+          <var-decl name='vbl_lock' type-id='type-id-247' visibility='default' filepath='include/drm/drm_device.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='max_vblank_count' type-id='type-id-7' visibility='default' filepath='include/drm/drm_device.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='vblank_event_list' type-id='type-id-20' visibility='default' filepath='include/drm/drm_device.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='event_lock' type-id='type-id-247' visibility='default' filepath='include/drm/drm_device.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='agp' type-id='type-id-4501' visibility='default' filepath='include/drm/drm_device.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='pdev' type-id='type-id-3932' visibility='default' filepath='include/drm/drm_device.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='sg' type-id='type-id-4502' visibility='default' filepath='include/drm/drm_device.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='num_crtcs' type-id='type-id-5' visibility='default' filepath='include/drm/drm_device.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='sigdata' type-id='type-id-4503' visibility='default' filepath='include/drm/drm_device.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='agp_buffer_map' type-id='type-id-4504' visibility='default' filepath='include/drm/drm_device.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='agp_buffer_token' type-id='type-id-5' visibility='default' filepath='include/drm/drm_device.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='mode_config' type-id='type-id-4505' visibility='default' filepath='include/drm/drm_device.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12672'>
+          <var-decl name='object_name_lock' type-id='type-id-245' visibility='default' filepath='include/drm/drm_device.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12928'>
+          <var-decl name='object_name_idr' type-id='type-id-1434' visibility='default' filepath='include/drm/drm_device.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13120'>
+          <var-decl name='vma_offset_manager' type-id='type-id-4506' visibility='default' filepath='include/drm/drm_device.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13184'>
+          <var-decl name='switch_power_state' type-id='type-id-17' visibility='default' filepath='include/drm/drm_device.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13248'>
+          <var-decl name='fb_helper' type-id='type-id-4507' visibility='default' filepath='include/drm/drm_device.h' line='229' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_driver' size-in-bits='3776' is-struct='yes' visibility='default' filepath='include/drm/drm_drv.h' line='70' column='1' id='type-id-4508'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='load' type-id='type-id-4509' visibility='default' filepath='include/drm/drm_drv.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='open' type-id='type-id-4510' visibility='default' filepath='include/drm/drm_drv.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='postclose' type-id='type-id-4511' visibility='default' filepath='include/drm/drm_drv.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='lastclose' type-id='type-id-4512' visibility='default' filepath='include/drm/drm_drv.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='unload' type-id='type-id-4512' visibility='default' filepath='include/drm/drm_drv.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='release' type-id='type-id-4512' visibility='default' filepath='include/drm/drm_drv.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_vblank_counter' type-id='type-id-4513' visibility='default' filepath='include/drm/drm_drv.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='enable_vblank' type-id='type-id-4514' visibility='default' filepath='include/drm/drm_drv.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='disable_vblank' type-id='type-id-4515' visibility='default' filepath='include/drm/drm_drv.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_scanout_position' type-id='type-id-4516' visibility='default' filepath='include/drm/drm_drv.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='get_vblank_timestamp' type-id='type-id-4517' visibility='default' filepath='include/drm/drm_drv.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='irq_handler' type-id='type-id-3481' visibility='default' filepath='include/drm/drm_drv.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='irq_preinstall' type-id='type-id-4512' visibility='default' filepath='include/drm/drm_drv.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='irq_postinstall' type-id='type-id-4518' visibility='default' filepath='include/drm/drm_drv.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='irq_uninstall' type-id='type-id-4512' visibility='default' filepath='include/drm/drm_drv.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='master_create' type-id='type-id-4519' visibility='default' filepath='include/drm/drm_drv.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='master_destroy' type-id='type-id-4520' visibility='default' filepath='include/drm/drm_drv.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='master_set' type-id='type-id-4521' visibility='default' filepath='include/drm/drm_drv.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='master_drop' type-id='type-id-4511' visibility='default' filepath='include/drm/drm_drv.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='debugfs_init' type-id='type-id-4522' visibility='default' filepath='include/drm/drm_drv.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='gem_free_object' type-id='type-id-4523' visibility='default' filepath='include/drm/drm_drv.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='gem_free_object_unlocked' type-id='type-id-4523' visibility='default' filepath='include/drm/drm_drv.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='gem_open_object' type-id='type-id-4524' visibility='default' filepath='include/drm/drm_drv.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='gem_close_object' type-id='type-id-4525' visibility='default' filepath='include/drm/drm_drv.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='gem_print_info' type-id='type-id-4526' visibility='default' filepath='include/drm/drm_drv.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='gem_create_object' type-id='type-id-4527' visibility='default' filepath='include/drm/drm_drv.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='prime_handle_to_fd' type-id='type-id-4528' visibility='default' filepath='include/drm/drm_drv.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='prime_fd_to_handle' type-id='type-id-4529' visibility='default' filepath='include/drm/drm_drv.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='gem_prime_export' type-id='type-id-4530' visibility='default' filepath='include/drm/drm_drv.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='gem_prime_import' type-id='type-id-4531' visibility='default' filepath='include/drm/drm_drv.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='gem_prime_pin' type-id='type-id-4532' visibility='default' filepath='include/drm/drm_drv.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='gem_prime_unpin' type-id='type-id-4523' visibility='default' filepath='include/drm/drm_drv.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='gem_prime_res_obj' type-id='type-id-4533' visibility='default' filepath='include/drm/drm_drv.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='gem_prime_get_sg_table' type-id='type-id-4534' visibility='default' filepath='include/drm/drm_drv.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='gem_prime_import_sg_table' type-id='type-id-4535' visibility='default' filepath='include/drm/drm_drv.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='gem_prime_vmap' type-id='type-id-4536' visibility='default' filepath='include/drm/drm_drv.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='gem_prime_vunmap' type-id='type-id-4537' visibility='default' filepath='include/drm/drm_drv.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='gem_prime_mmap' type-id='type-id-4538' visibility='default' filepath='include/drm/drm_drv.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='dumb_create' type-id='type-id-4539' visibility='default' filepath='include/drm/drm_drv.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='dumb_map_offset' type-id='type-id-4540' visibility='default' filepath='include/drm/drm_drv.h' line='536' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='dumb_destroy' type-id='type-id-4541' visibility='default' filepath='include/drm/drm_drv.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='gem_vm_ops' type-id='type-id-1466' visibility='default' filepath='include/drm/drm_drv.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='major' type-id='type-id-17' visibility='default' filepath='include/drm/drm_drv.h' line='562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2720'>
+          <var-decl name='minor' type-id='type-id-17' visibility='default' filepath='include/drm/drm_drv.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='patchlevel' type-id='type-id-17' visibility='default' filepath='include/drm/drm_drv.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='name' type-id='type-id-2' visibility='default' filepath='include/drm/drm_drv.h' line='568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='desc' type-id='type-id-2' visibility='default' filepath='include/drm/drm_drv.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='date' type-id='type-id-2' visibility='default' filepath='include/drm/drm_drv.h' line='572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='driver_features' type-id='type-id-7' visibility='default' filepath='include/drm/drm_drv.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='ioctls' type-id='type-id-4542' visibility='default' filepath='include/drm/drm_drv.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='num_ioctls' type-id='type-id-17' visibility='default' filepath='include/drm/drm_drv.h' line='587' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='fops' type-id='type-id-268' visibility='default' filepath='include/drm/drm_drv.h' line='596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='legacy_dev_list' type-id='type-id-20' visibility='default' filepath='include/drm/drm_drv.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='firstopen' type-id='type-id-4518' visibility='default' filepath='include/drm/drm_drv.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='preclose' type-id='type-id-4511' visibility='default' filepath='include/drm/drm_drv.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='dma_ioctl' type-id='type-id-4543' visibility='default' filepath='include/drm/drm_drv.h' line='605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='dma_quiescent' type-id='type-id-4518' visibility='default' filepath='include/drm/drm_drv.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='context_dtor' type-id='type-id-4544' visibility='default' filepath='include/drm/drm_drv.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='dev_priv_size' type-id='type-id-17' visibility='default' filepath='include/drm/drm_drv.h' line='608' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_file' size-in-bits='2816' is-struct='yes' visibility='default' filepath='include/drm/drm_file.h' line='157' column='1' id='type-id-4545'>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='authenticated' type-id='type-id-5' visibility='default' filepath='include/drm/drm_file.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='stereo_allowed' type-id='type-id-5' visibility='default' filepath='include/drm/drm_file.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='universal_planes' type-id='type-id-5' visibility='default' filepath='include/drm/drm_file.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='atomic' type-id='type-id-5' visibility='default' filepath='include/drm/drm_file.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='aspect_ratio_allowed' type-id='type-id-5' visibility='default' filepath='include/drm/drm_file.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='writeback_connectors' type-id='type-id-5' visibility='default' filepath='include/drm/drm_file.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='is_master' type-id='type-id-5' visibility='default' filepath='include/drm/drm_file.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='master' type-id='type-id-4497' visibility='default' filepath='include/drm/drm_file.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pid' type-id='type-id-251' visibility='default' filepath='include/drm/drm_file.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='magic' type-id='type-id-4546' visibility='default' filepath='include/drm/drm_file.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lhead' type-id='type-id-20' visibility='default' filepath='include/drm/drm_file.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='minor' type-id='type-id-4496' visibility='default' filepath='include/drm/drm_file.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='object_idr' type-id='type-id-1434' visibility='default' filepath='include/drm/drm_file.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='table_lock' type-id='type-id-247' visibility='default' filepath='include/drm/drm_file.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='syncobj_idr' type-id='type-id-1434' visibility='default' filepath='include/drm/drm_file.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='syncobj_table_lock' type-id='type-id-247' visibility='default' filepath='include/drm/drm_file.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='filp' type-id='type-id-83' visibility='default' filepath='include/drm/drm_file.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='driver_priv' type-id='type-id-15' visibility='default' filepath='include/drm/drm_file.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='fbs' type-id='type-id-20' visibility='default' filepath='include/drm/drm_file.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='fbs_lock' type-id='type-id-245' visibility='default' filepath='include/drm/drm_file.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='blobs' type-id='type-id-20' visibility='default' filepath='include/drm/drm_file.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='event_wait' type-id='type-id-225' visibility='default' filepath='include/drm/drm_file.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='pending_event_list' type-id='type-id-20' visibility='default' filepath='include/drm/drm_file.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='event_list' type-id='type-id-20' visibility='default' filepath='include/drm/drm_file.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='event_space' type-id='type-id-17' visibility='default' filepath='include/drm/drm_file.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='event_read_lock' type-id='type-id-245' visibility='default' filepath='include/drm/drm_file.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='prime' type-id='type-id-4547' visibility='default' filepath='include/drm/drm_file.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='lock_count' type-id='type-id-16' visibility='default' filepath='include/drm/drm_file.h' line='337' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='drm_magic_t' type-id='type-id-5' filepath='include/uapi/drm/drm.h' line='85' column='1' id='type-id-4546'/>
+      <class-decl name='drm_minor' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/drm/drm_file.h' line='68' column='1' id='type-id-4548'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='type-id-17' visibility='default' filepath='include/drm/drm_file.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='type-id-17' visibility='default' filepath='include/drm/drm_file.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='kdev' type-id='type-id-240' visibility='default' filepath='include/drm/drm_file.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='type-id-4446' visibility='default' filepath='include/drm/drm_file.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='debugfs_root' type-id='type-id-23' visibility='default' filepath='include/drm/drm_file.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='debugfs_list' type-id='type-id-20' visibility='default' filepath='include/drm/drm_file.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='debugfs_lock' type-id='type-id-245' visibility='default' filepath='include/drm/drm_file.h' line='78' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_prime_file_private' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/drm/drm_prime.h' line='46' column='1' id='type-id-4547'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='type-id-245' visibility='default' filepath='include/drm/drm_prime.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dmabufs' type-id='type-id-416' visibility='default' filepath='include/drm/drm_prime.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='handles' type-id='type-id-416' visibility='default' filepath='include/drm/drm_prime.h' line='50' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_display_mode' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/drm/drm_modes.h' line='208' column='1' id='type-id-4549'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='type-id-20' visibility='default' filepath='include/drm/drm_modes.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='base' type-id='type-id-4481' visibility='default' filepath='include/drm/drm_modes.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='name' type-id='type-id-373' visibility='default' filepath='include/drm/drm_modes.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='status' type-id='type-id-4550' visibility='default' filepath='include/drm/drm_modes.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='type' type-id='type-id-5' visibility='default' filepath='include/drm/drm_modes.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='clock' type-id='type-id-17' visibility='default' filepath='include/drm/drm_modes.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='hdisplay' type-id='type-id-17' visibility='default' filepath='include/drm/drm_modes.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='hsync_start' type-id='type-id-17' visibility='default' filepath='include/drm/drm_modes.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='hsync_end' type-id='type-id-17' visibility='default' filepath='include/drm/drm_modes.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='htotal' type-id='type-id-17' visibility='default' filepath='include/drm/drm_modes.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='hskew' type-id='type-id-17' visibility='default' filepath='include/drm/drm_modes.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='vdisplay' type-id='type-id-17' visibility='default' filepath='include/drm/drm_modes.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='vsync_start' type-id='type-id-17' visibility='default' filepath='include/drm/drm_modes.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='vsync_end' type-id='type-id-17' visibility='default' filepath='include/drm/drm_modes.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='vtotal' type-id='type-id-17' visibility='default' filepath='include/drm/drm_modes.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='vscan' type-id='type-id-17' visibility='default' filepath='include/drm/drm_modes.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='flags' type-id='type-id-5' visibility='default' filepath='include/drm/drm_modes.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='width_mm' type-id='type-id-17' visibility='default' filepath='include/drm/drm_modes.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='height_mm' type-id='type-id-17' visibility='default' filepath='include/drm/drm_modes.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='crtc_clock' type-id='type-id-17' visibility='default' filepath='include/drm/drm_modes.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='crtc_hdisplay' type-id='type-id-17' visibility='default' filepath='include/drm/drm_modes.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='crtc_hblank_start' type-id='type-id-17' visibility='default' filepath='include/drm/drm_modes.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='crtc_hblank_end' type-id='type-id-17' visibility='default' filepath='include/drm/drm_modes.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='crtc_hsync_start' type-id='type-id-17' visibility='default' filepath='include/drm/drm_modes.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='crtc_hsync_end' type-id='type-id-17' visibility='default' filepath='include/drm/drm_modes.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='crtc_htotal' type-id='type-id-17' visibility='default' filepath='include/drm/drm_modes.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='crtc_hskew' type-id='type-id-17' visibility='default' filepath='include/drm/drm_modes.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='crtc_vdisplay' type-id='type-id-17' visibility='default' filepath='include/drm/drm_modes.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='crtc_vblank_start' type-id='type-id-17' visibility='default' filepath='include/drm/drm_modes.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='crtc_vblank_end' type-id='type-id-17' visibility='default' filepath='include/drm/drm_modes.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='crtc_vsync_start' type-id='type-id-17' visibility='default' filepath='include/drm/drm_modes.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='crtc_vsync_end' type-id='type-id-17' visibility='default' filepath='include/drm/drm_modes.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='crtc_vtotal' type-id='type-id-17' visibility='default' filepath='include/drm/drm_modes.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='private' type-id='type-id-666' visibility='default' filepath='include/drm/drm_modes.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='private_flags' type-id='type-id-17' visibility='default' filepath='include/drm/drm_modes.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='vrefresh' type-id='type-id-17' visibility='default' filepath='include/drm/drm_modes.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='hsync' type-id='type-id-17' visibility='default' filepath='include/drm/drm_modes.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1760'>
+          <var-decl name='picture_aspect_ratio' type-id='type-id-4551' visibility='default' filepath='include/drm/drm_modes.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='export_head' type-id='type-id-20' visibility='default' filepath='include/drm/drm_modes.h' line='426' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_mode_object' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/drm_mode_object.h' line='55' column='1' id='type-id-4481'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='type-id-1343' visibility='default' filepath='include/drm/drm_mode_object.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='type-id-1343' visibility='default' filepath='include/drm/drm_mode_object.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='properties' type-id='type-id-4552' visibility='default' filepath='include/drm/drm_mode_object.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='refcount' type-id='type-id-239' visibility='default' filepath='include/drm/drm_mode_object.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='free_cb' type-id='type-id-4553' visibility='default' filepath='include/drm/drm_mode_object.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_object_properties' size-in-bits='3136' is-struct='yes' visibility='default' filepath='include/drm/drm_mode_object.h' line='67' column='1' id='type-id-4486'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='type-id-17' visibility='default' filepath='include/drm/drm_mode_object.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='properties' type-id='type-id-4471' visibility='default' filepath='include/drm/drm_mode_object.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='values' type-id='type-id-4476' visibility='default' filepath='include/drm/drm_mode_object.h' line='102' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_property' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/drm/drm_property.h' line='71' column='1' id='type-id-4554'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='type-id-20' visibility='default' filepath='include/drm/drm_property.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='base' type-id='type-id-4481' visibility='default' filepath='include/drm/drm_property.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='type-id-1343' visibility='default' filepath='include/drm/drm_property.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='name' type-id='type-id-373' visibility='default' filepath='include/drm/drm_property.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='num_values' type-id='type-id-1343' visibility='default' filepath='include/drm/drm_property.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='values' type-id='type-id-4555' visibility='default' filepath='include/drm/drm_property.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='dev' type-id='type-id-4446' visibility='default' filepath='include/drm/drm_property.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='enum_list' type-id='type-id-20' visibility='default' filepath='include/drm/drm_property.h' line='187' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='drm_mode_status' filepath='include/drm/drm_modes.h' line='91' column='1' id='type-id-4550'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='MODE_OK' value='0'/>
+        <enumerator name='MODE_HSYNC' value='1'/>
+        <enumerator name='MODE_VSYNC' value='2'/>
+        <enumerator name='MODE_H_ILLEGAL' value='3'/>
+        <enumerator name='MODE_V_ILLEGAL' value='4'/>
+        <enumerator name='MODE_BAD_WIDTH' value='5'/>
+        <enumerator name='MODE_NOMODE' value='6'/>
+        <enumerator name='MODE_NO_INTERLACE' value='7'/>
+        <enumerator name='MODE_NO_DBLESCAN' value='8'/>
+        <enumerator name='MODE_NO_VSCAN' value='9'/>
+        <enumerator name='MODE_MEM' value='10'/>
+        <enumerator name='MODE_VIRTUAL_X' value='11'/>
+        <enumerator name='MODE_VIRTUAL_Y' value='12'/>
+        <enumerator name='MODE_MEM_VIRT' value='13'/>
+        <enumerator name='MODE_NOCLOCK' value='14'/>
+        <enumerator name='MODE_CLOCK_HIGH' value='15'/>
+        <enumerator name='MODE_CLOCK_LOW' value='16'/>
+        <enumerator name='MODE_CLOCK_RANGE' value='17'/>
+        <enumerator name='MODE_BAD_HVALUE' value='18'/>
+        <enumerator name='MODE_BAD_VVALUE' value='19'/>
+        <enumerator name='MODE_BAD_VSCAN' value='20'/>
+        <enumerator name='MODE_HSYNC_NARROW' value='21'/>
+        <enumerator name='MODE_HSYNC_WIDE' value='22'/>
+        <enumerator name='MODE_HBLANK_NARROW' value='23'/>
+        <enumerator name='MODE_HBLANK_WIDE' value='24'/>
+        <enumerator name='MODE_VSYNC_NARROW' value='25'/>
+        <enumerator name='MODE_VSYNC_WIDE' value='26'/>
+        <enumerator name='MODE_VBLANK_NARROW' value='27'/>
+        <enumerator name='MODE_VBLANK_WIDE' value='28'/>
+        <enumerator name='MODE_PANEL' value='29'/>
+        <enumerator name='MODE_INTERLACE_WIDTH' value='30'/>
+        <enumerator name='MODE_ONE_WIDTH' value='31'/>
+        <enumerator name='MODE_ONE_HEIGHT' value='32'/>
+        <enumerator name='MODE_ONE_SIZE' value='33'/>
+        <enumerator name='MODE_NO_REDUCED' value='34'/>
+        <enumerator name='MODE_NO_STEREO' value='35'/>
+        <enumerator name='MODE_NO_420' value='36'/>
+        <enumerator name='MODE_STALE' value='-3'/>
+        <enumerator name='MODE_BAD' value='-2'/>
+        <enumerator name='MODE_ERROR' value='-1'/>
+      </enum-decl>
+      <enum-decl name='hdmi_picture_aspect' filepath='include/linux/hdmi.h' line='78' column='1' id='type-id-4551'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='HDMI_PICTURE_ASPECT_NONE' value='0'/>
+        <enumerator name='HDMI_PICTURE_ASPECT_4_3' value='1'/>
+        <enumerator name='HDMI_PICTURE_ASPECT_16_9' value='2'/>
+        <enumerator name='HDMI_PICTURE_ASPECT_64_27' value='3'/>
+        <enumerator name='HDMI_PICTURE_ASPECT_256_135' value='4'/>
+        <enumerator name='HDMI_PICTURE_ASPECT_RESERVED' value='5'/>
+      </enum-decl>
+      <class-decl name='drm_printer' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/drm_print.h' line='69' column='1' id='type-id-4556'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='printfn' type-id='type-id-4557' visibility='default' filepath='include/drm/drm_print.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='puts' type-id='type-id-4558' visibility='default' filepath='include/drm/drm_print.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='arg' type-id='type-id-15' visibility='default' filepath='include/drm/drm_print.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='prefix' type-id='type-id-4' visibility='default' filepath='include/drm/drm_print.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='va_format' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/printk.h' line='86' column='1' id='type-id-4559'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fmt' type-id='type-id-4' visibility='default' filepath='include/linux/printk.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='va' type-id='type-id-4560' visibility='default' filepath='include/linux/printk.h' line='88' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='va_list' type-id='type-id-4561' filepath='prebuilts-master/clang/host/linux-x86/clang-r370808/lib64/clang/10.0.1/include/stdarg.h' line='14' column='1' id='type-id-4562'/>
+      <typedef-decl name='__builtin_va_list' type-id='type-id-4563' filepath='drivers/gpu/drm/drm_probe_helper.c' line='66' column='1' id='type-id-4561'/>
+      <class-decl name='__va_list' size-in-bits='256' is-struct='yes' visibility='default' filepath='drivers/gpu/drm/drm_probe_helper.c' line='66' column='1' id='type-id-4563'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__stack' type-id='type-id-15' visibility='default' filepath='drivers/gpu/drm/drm_probe_helper.c' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='__gr_top' type-id='type-id-15' visibility='default' filepath='drivers/gpu/drm/drm_probe_helper.c' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='__vr_top' type-id='type-id-15' visibility='default' filepath='drivers/gpu/drm/drm_probe_helper.c' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='__gr_offs' type-id='type-id-17' visibility='default' filepath='drivers/gpu/drm/drm_probe_helper.c' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='__vr_offs' type-id='type-id-17' visibility='default' filepath='drivers/gpu/drm/drm_probe_helper.c' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='6848' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='353' column='1' id='type-id-4564'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mmap' type-id='type-id-1209' visibility='default' filepath='include/linux/mm_types.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mm_rb' type-id='type-id-416' visibility='default' filepath='include/linux/mm_types.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vmacache_seqnum' type-id='type-id-40' visibility='default' filepath='include/linux/mm_types.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_unmapped_area' type-id='type-id-1484' visibility='default' filepath='include/linux/mm_types.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mmap_base' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mmap_legacy_base' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='task_size' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='highest_vm_end' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pgd' type-id='type-id-1485' visibility='default' filepath='include/linux/mm_types.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mm_users' type-id='type-id-26' visibility='default' filepath='include/linux/mm_types.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='mm_count' type-id='type-id-26' visibility='default' filepath='include/linux/mm_types.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='pgtables_bytes' type-id='type-id-115' visibility='default' filepath='include/linux/mm_types.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='map_count' type-id='type-id-17' visibility='default' filepath='include/linux/mm_types.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='page_table_lock' type-id='type-id-247' visibility='default' filepath='include/linux/mm_types.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mmap_sem' type-id='type-id-246' visibility='default' filepath='include/linux/mm_types.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='mmlist' type-id='type-id-20' visibility='default' filepath='include/linux/mm_types.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='hiwater_rss' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='hiwater_vm' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='total_vm' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='locked_vm' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='pinned_vm' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='data_vm' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='exec_vm' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='stack_vm' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='def_flags' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='arg_lock' type-id='type-id-247' visibility='default' filepath='include/linux/mm_types.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='start_code' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='end_code' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='start_data' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='end_data' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='start_brk' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='brk' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='start_stack' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='arg_start' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='arg_end' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='env_start' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='env_end' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='saved_auxv' type-id='type-id-1202' visibility='default' filepath='include/linux/mm_types.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='rss_stat' type-id='type-id-1486' visibility='default' filepath='include/linux/mm_types.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='binfmt' type-id='type-id-1487' visibility='default' filepath='include/linux/mm_types.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='context' type-id='type-id-1488' visibility='default' filepath='include/linux/mm_types.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='core_state' type-id='type-id-1489' visibility='default' filepath='include/linux/mm_types.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='membarrier_state' type-id='type-id-26' visibility='default' filepath='include/linux/mm_types.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6176'>
+          <var-decl name='ioctx_lock' type-id='type-id-247' visibility='default' filepath='include/linux/mm_types.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='ioctx_table' type-id='type-id-1490' visibility='default' filepath='include/linux/mm_types.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='owner' type-id='type-id-431' visibility='default' filepath='include/linux/mm_types.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='user_ns' type-id='type-id-3478' visibility='default' filepath='include/linux/mm_types.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='exe_file' type-id='type-id-83' visibility='default' filepath='include/linux/mm_types.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='tlb_flush_pending' type-id='type-id-26' visibility='default' filepath='include/linux/mm_types.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='uprobes_state' type-id='type-id-1491' visibility='default' filepath='include/linux/mm_types.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='async_put_work' type-id='type-id-255' visibility='default' filepath='include/linux/mm_types.h' line='500' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_mode_create_dumb' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='703' column='1' id='type-id-4565'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='height' type-id='type-id-511' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='704' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='width' type-id='type-id-511' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bpp' type-id='type-id-511' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='706' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='type-id-511' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='707' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='handle' type-id='type-id-511' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='709' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='pitch' type-id='type-id-511' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='710' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='size' type-id='type-id-100' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='711' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_ioctl_desc' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/drm/drm_ioctl.h' line='141' column='1' id='type-id-4566'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='type-id-5' visibility='default' filepath='include/drm/drm_ioctl.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='type-id-4567' visibility='default' filepath='include/drm/drm_ioctl.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='func' type-id='type-id-4568' visibility='default' filepath='include/drm/drm_ioctl.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/drm/drm_ioctl.h' line='145' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='drm_ioctl_flags' filepath='include/drm/drm_ioctl.h' line='79' column='1' id='type-id-4567'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='DRM_AUTH' value='1'/>
+        <enumerator name='DRM_MASTER' value='2'/>
+        <enumerator name='DRM_ROOT_ONLY' value='4'/>
+        <enumerator name='DRM_UNLOCKED' value='16'/>
+        <enumerator name='DRM_RENDER_ALLOW' value='32'/>
+      </enum-decl>
+      <typedef-decl name='drm_ioctl_t' type-id='type-id-4569' filepath='include/drm/drm_ioctl.h' line='54' column='1' id='type-id-4570'/>
+      <class-decl name='drm_open_hash' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_hashtab.h' line='47' column='1' id='type-id-4498'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='table' type-id='type-id-746' visibility='default' filepath='include/drm/drm_hashtab.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='order' type-id='type-id-214' visibility='default' filepath='include/drm/drm_hashtab.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_vblank_crtc' size-in-bits='3008' is-struct='yes' visibility='default' filepath='include/drm/drm_vblank.h' line='90' column='1' id='type-id-4571'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='type-id-4446' visibility='default' filepath='include/drm/drm_vblank.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='queue' type-id='type-id-225' visibility='default' filepath='include/drm/drm_vblank.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='disable_timer' type-id='type-id-417' visibility='default' filepath='include/drm/drm_vblank.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='seqlock' type-id='type-id-1919' visibility='default' filepath='include/drm/drm_vblank.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='count' type-id='type-id-40' visibility='default' filepath='include/drm/drm_vblank.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='time' type-id='type-id-682' visibility='default' filepath='include/drm/drm_vblank.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='refcount' type-id='type-id-26' visibility='default' filepath='include/drm/drm_vblank.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='last' type-id='type-id-7' visibility='default' filepath='include/drm/drm_vblank.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='max_vblank_count' type-id='type-id-7' visibility='default' filepath='include/drm/drm_vblank.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='inmodeset' type-id='type-id-5' visibility='default' filepath='include/drm/drm_vblank.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='pipe' type-id='type-id-5' visibility='default' filepath='include/drm/drm_vblank.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='framedur_ns' type-id='type-id-17' visibility='default' filepath='include/drm/drm_vblank.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='linedur_ns' type-id='type-id-17' visibility='default' filepath='include/drm/drm_vblank.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='hwmode' type-id='type-id-4549' visibility='default' filepath='include/drm/drm_vblank.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='enabled' type-id='type-id-33' visibility='default' filepath='include/drm/drm_vblank.h' line='195' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_agp_head' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/drm/drm_agpsupport.h' line='16' column='1' id='type-id-4572'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='agp_info' type-id='type-id-4573' visibility='default' filepath='include/drm/drm_agpsupport.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='memory' type-id='type-id-20' visibility='default' filepath='include/drm/drm_agpsupport.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mode' type-id='type-id-16' visibility='default' filepath='include/drm/drm_agpsupport.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='bridge' type-id='type-id-4574' visibility='default' filepath='include/drm/drm_agpsupport.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='enabled' type-id='type-id-17' visibility='default' filepath='include/drm/drm_agpsupport.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='acquired' type-id='type-id-17' visibility='default' filepath='include/drm/drm_agpsupport.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='base' type-id='type-id-16' visibility='default' filepath='include/drm/drm_agpsupport.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='agp_mtrr' type-id='type-id-17' visibility='default' filepath='include/drm/drm_agpsupport.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='cant_use_aperture' type-id='type-id-17' visibility='default' filepath='include/drm/drm_agpsupport.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='page_mask' type-id='type-id-16' visibility='default' filepath='include/drm/drm_agpsupport.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='agp_kern_info' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/agp_backend.h' line='45' column='1' id='type-id-4573'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='version' type-id='type-id-4575' visibility='default' filepath='include/linux/agp_backend.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='device' type-id='type-id-3932' visibility='default' filepath='include/linux/agp_backend.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='chipset' type-id='type-id-4576' visibility='default' filepath='include/linux/agp_backend.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mode' type-id='type-id-16' visibility='default' filepath='include/linux/agp_backend.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='aper_base' type-id='type-id-16' visibility='default' filepath='include/linux/agp_backend.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='aper_size' type-id='type-id-84' visibility='default' filepath='include/linux/agp_backend.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='max_memory' type-id='type-id-17' visibility='default' filepath='include/linux/agp_backend.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='current_memory' type-id='type-id-17' visibility='default' filepath='include/linux/agp_backend.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='cant_use_aperture' type-id='type-id-33' visibility='default' filepath='include/linux/agp_backend.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='page_mask' type-id='type-id-16' visibility='default' filepath='include/linux/agp_backend.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='vm_ops' type-id='type-id-1466' visibility='default' filepath='include/linux/agp_backend.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='agp_version' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/agp_backend.h' line='40' column='1' id='type-id-4575'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='major' type-id='type-id-688' visibility='default' filepath='include/linux/agp_backend.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='minor' type-id='type-id-688' visibility='default' filepath='include/linux/agp_backend.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='chipset_type' filepath='include/linux/agp_backend.h' line='35' column='1' id='type-id-4576'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='NOT_SUPPORTED' value='0'/>
+        <enumerator name='SUPPORTED' value='1'/>
+      </enum-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/drm/drm_device.h' line='205' column='1' id='type-id-4503'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='context' type-id='type-id-17' visibility='default' filepath='include/drm/drm_device.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lock' type-id='type-id-4577' visibility='default' filepath='include/drm/drm_device.h' line='207' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_hw_lock' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/drm/drm.h' line='129' column='1' id='type-id-4578'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='type-id-4579' visibility='default' filepath='include/uapi/drm/drm.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='padding' type-id='type-id-4453' visibility='default' filepath='include/uapi/drm/drm.h' line='131' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_mode_config' size-in-bits='8192' is-struct='yes' visibility='default' filepath='include/drm/drm_mode_config.h' line='352' column='1' id='type-id-4505'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mutex' type-id='type-id-245' visibility='default' filepath='include/drm/drm_mode_config.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='connection_mutex' type-id='type-id-4580' visibility='default' filepath='include/drm/drm_mode_config.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='acquire_ctx' type-id='type-id-4581' visibility='default' filepath='include/drm/drm_mode_config.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='idr_mutex' type-id='type-id-245' visibility='default' filepath='include/drm/drm_mode_config.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='crtc_idr' type-id='type-id-1434' visibility='default' filepath='include/drm/drm_mode_config.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='tile_idr' type-id='type-id-1434' visibility='default' filepath='include/drm/drm_mode_config.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='fb_lock' type-id='type-id-245' visibility='default' filepath='include/drm/drm_mode_config.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='num_fb' type-id='type-id-17' visibility='default' filepath='include/drm/drm_mode_config.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='fb_list' type-id='type-id-20' visibility='default' filepath='include/drm/drm_mode_config.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='connector_list_lock' type-id='type-id-247' visibility='default' filepath='include/drm/drm_mode_config.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='num_connector' type-id='type-id-17' visibility='default' filepath='include/drm/drm_mode_config.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='connector_ida' type-id='type-id-3449' visibility='default' filepath='include/drm/drm_mode_config.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='connector_list' type-id='type-id-20' visibility='default' filepath='include/drm/drm_mode_config.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='connector_free_list' type-id='type-id-278' visibility='default' filepath='include/drm/drm_mode_config.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='connector_free_work' type-id='type-id-255' visibility='default' filepath='include/drm/drm_mode_config.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='num_encoder' type-id='type-id-17' visibility='default' filepath='include/drm/drm_mode_config.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='encoder_list' type-id='type-id-20' visibility='default' filepath='include/drm/drm_mode_config.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='num_total_plane' type-id='type-id-17' visibility='default' filepath='include/drm/drm_mode_config.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='plane_list' type-id='type-id-20' visibility='default' filepath='include/drm/drm_mode_config.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='num_crtc' type-id='type-id-17' visibility='default' filepath='include/drm/drm_mode_config.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='crtc_list' type-id='type-id-20' visibility='default' filepath='include/drm/drm_mode_config.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='property_list' type-id='type-id-20' visibility='default' filepath='include/drm/drm_mode_config.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='min_width' type-id='type-id-17' visibility='default' filepath='include/drm/drm_mode_config.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3232'>
+          <var-decl name='min_height' type-id='type-id-17' visibility='default' filepath='include/drm/drm_mode_config.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='max_width' type-id='type-id-17' visibility='default' filepath='include/drm/drm_mode_config.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3296'>
+          <var-decl name='max_height' type-id='type-id-17' visibility='default' filepath='include/drm/drm_mode_config.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='funcs' type-id='type-id-4582' visibility='default' filepath='include/drm/drm_mode_config.h' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='fb_base' type-id='type-id-2155' visibility='default' filepath='include/drm/drm_mode_config.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='poll_enabled' type-id='type-id-33' visibility='default' filepath='include/drm/drm_mode_config.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3464'>
+          <var-decl name='poll_running' type-id='type-id-33' visibility='default' filepath='include/drm/drm_mode_config.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3472'>
+          <var-decl name='delayed_event' type-id='type-id-33' visibility='default' filepath='include/drm/drm_mode_config.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='output_poll_work' type-id='type-id-411' visibility='default' filepath='include/drm/drm_mode_config.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='blob_lock' type-id='type-id-245' visibility='default' filepath='include/drm/drm_mode_config.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='property_blob_list' type-id='type-id-20' visibility='default' filepath='include/drm/drm_mode_config.h' line='534' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='edid_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='dpms_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='path_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='tile_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='link_status_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='plane_type_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='prop_src_x' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='prop_src_y' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='prop_src_w' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='prop_src_h' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='prop_crtc_x' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='prop_crtc_y' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='prop_crtc_w' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='prop_crtc_h' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='prop_fb_id' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='prop_in_fence_fd' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='prop_out_fence_ptr' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='624' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='prop_crtc_id' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='prop_active' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='635' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='prop_mode_id' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='dvi_i_subconnector_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='647' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='dvi_i_select_subconnector_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='tv_subconnector_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='658' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='tv_select_subconnector_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='663' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='tv_mode_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='668' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='tv_left_margin_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='673' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='tv_right_margin_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='678' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='tv_top_margin_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='683' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='tv_bottom_margin_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='688' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='tv_brightness_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='693' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='tv_contrast_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='698' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='tv_flicker_reduction_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='703' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='tv_overscan_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='708' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='tv_saturation_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='713' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='tv_hue_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='717' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='scaling_mode_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='723' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='aspect_ratio_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='728' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='content_type_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='733' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7040'>
+          <var-decl name='degamma_lut_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='738' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7104'>
+          <var-decl name='degamma_lut_size_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='743' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='ctm_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='749' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='gamma_lut_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='gamma_lut_size_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='760' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='suggested_x_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='suggested_y_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='non_desktop_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='778' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='panel_orientation_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='785' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='writeback_fb_id_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='792' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='writeback_pixel_formats_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='800' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='writeback_out_fence_ptr_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='808' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='preferred_depth' type-id='type-id-1343' visibility='default' filepath='include/drm/drm_mode_config.h' line='811' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7840'>
+          <var-decl name='prefer_shadow' type-id='type-id-1343' visibility='default' filepath='include/drm/drm_mode_config.h' line='811' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='async_page_flip' type-id='type-id-33' visibility='default' filepath='include/drm/drm_mode_config.h' line='817' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7880'>
+          <var-decl name='allow_fb_modifiers' type-id='type-id-33' visibility='default' filepath='include/drm/drm_mode_config.h' line='824' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7888'>
+          <var-decl name='normalize_zpos' type-id='type-id-33' visibility='default' filepath='include/drm/drm_mode_config.h' line='832' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='modifiers_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_mode_config.h' line='838' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='cursor_width' type-id='type-id-1343' visibility='default' filepath='include/drm/drm_mode_config.h' line='841' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8032'>
+          <var-decl name='cursor_height' type-id='type-id-1343' visibility='default' filepath='include/drm/drm_mode_config.h' line='841' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='suspend_state' type-id='type-id-4583' visibility='default' filepath='include/drm/drm_mode_config.h' line='850' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='helper_private' type-id='type-id-4584' visibility='default' filepath='include/drm/drm_mode_config.h' line='852' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_modeset_lock' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/drm/drm_modeset_lock.h' line='76' column='1' id='type-id-4580'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mutex' type-id='type-id-3467' visibility='default' filepath='include/drm/drm_modeset_lock.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='head' type-id='type-id-20' visibility='default' filepath='include/drm/drm_modeset_lock.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_modeset_acquire_ctx' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/drm/drm_modeset_lock.h' line='43' column='1' id='type-id-4585'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ww_ctx' type-id='type-id-3469' visibility='default' filepath='include/drm/drm_modeset_lock.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='contended' type-id='type-id-4586' visibility='default' filepath='include/drm/drm_modeset_lock.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='locked' type-id='type-id-20' visibility='default' filepath='include/drm/drm_modeset_lock.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='trylock_only' type-id='type-id-33' visibility='default' filepath='include/drm/drm_modeset_lock.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='392'>
+          <var-decl name='interruptible' type-id='type-id-33' visibility='default' filepath='include/drm/drm_modeset_lock.h' line='65' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_mode_config_funcs' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/drm/drm_mode_config.h' line='47' column='1' id='type-id-4587'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fb_create' type-id='type-id-4588' visibility='default' filepath='include/drm/drm_mode_config.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get_format_info' type-id='type-id-4589' visibility='default' filepath='include/drm/drm_mode_config.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='output_poll_changed' type-id='type-id-4512' visibility='default' filepath='include/drm/drm_mode_config.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mode_valid' type-id='type-id-4590' visibility='default' filepath='include/drm/drm_mode_config.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='atomic_check' type-id='type-id-4591' visibility='default' filepath='include/drm/drm_mode_config.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='atomic_commit' type-id='type-id-4592' visibility='default' filepath='include/drm/drm_mode_config.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='atomic_state_alloc' type-id='type-id-4593' visibility='default' filepath='include/drm/drm_mode_config.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='atomic_state_clear' type-id='type-id-4594' visibility='default' filepath='include/drm/drm_mode_config.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='atomic_state_free' type-id='type-id-4594' visibility='default' filepath='include/drm/drm_mode_config.h' line='327' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_framebuffer' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/drm/drm_framebuffer.h' line='109' column='1' id='type-id-4595'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='type-id-4446' visibility='default' filepath='include/drm/drm_framebuffer.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='head' type-id='type-id-20' visibility='default' filepath='include/drm/drm_framebuffer.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='base' type-id='type-id-4481' visibility='default' filepath='include/drm/drm_framebuffer.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='comm' type-id='type-id-43' visibility='default' filepath='include/drm/drm_framebuffer.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='format' type-id='type-id-4596' visibility='default' filepath='include/drm/drm_framebuffer.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='funcs' type-id='type-id-4597' visibility='default' filepath='include/drm/drm_framebuffer.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='pitches' type-id='type-id-4479' visibility='default' filepath='include/drm/drm_framebuffer.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='offsets' type-id='type-id-4479' visibility='default' filepath='include/drm/drm_framebuffer.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='modifier' type-id='type-id-2439' visibility='default' filepath='include/drm/drm_framebuffer.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='width' type-id='type-id-5' visibility='default' filepath='include/drm/drm_framebuffer.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='height' type-id='type-id-5' visibility='default' filepath='include/drm/drm_framebuffer.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='flags' type-id='type-id-17' visibility='default' filepath='include/drm/drm_framebuffer.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='hot_x' type-id='type-id-17' visibility='default' filepath='include/drm/drm_framebuffer.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='hot_y' type-id='type-id-17' visibility='default' filepath='include/drm/drm_framebuffer.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='filp_head' type-id='type-id-20' visibility='default' filepath='include/drm/drm_framebuffer.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='obj' type-id='type-id-4469' visibility='default' filepath='include/drm/drm_framebuffer.h' line='205' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_format_info' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_fourcc.h' line='66' column='1' id='type-id-4598'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='format' type-id='type-id-7' visibility='default' filepath='include/drm/drm_fourcc.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='depth' type-id='type-id-214' visibility='default' filepath='include/drm/drm_fourcc.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='num_planes' type-id='type-id-214' visibility='default' filepath='include/drm/drm_fourcc.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='cpp' type-id='type-id-1185' visibility='default' filepath='include/drm/drm_fourcc.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='hsub' type-id='type-id-214' visibility='default' filepath='include/drm/drm_fourcc.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='vsub' type-id='type-id-214' visibility='default' filepath='include/drm/drm_fourcc.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='has_alpha' type-id='type-id-33' visibility='default' filepath='include/drm/drm_fourcc.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='is_yuv' type-id='type-id-33' visibility='default' filepath='include/drm/drm_fourcc.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_framebuffer_funcs' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/drm/drm_framebuffer.h' line='37' column='1' id='type-id-4599'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='destroy' type-id='type-id-4600' visibility='default' filepath='include/drm/drm_framebuffer.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='create_handle' type-id='type-id-4601' visibility='default' filepath='include/drm/drm_framebuffer.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dirty' type-id='type-id-4602' visibility='default' filepath='include/drm/drm_framebuffer.h' line='89' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_clip_rect' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/drm/drm.h' line='96' column='1' id='type-id-4603'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x1' type-id='type-id-312' visibility='default' filepath='include/uapi/drm/drm.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='y1' type-id='type-id-312' visibility='default' filepath='include/uapi/drm/drm.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='x2' type-id='type-id-312' visibility='default' filepath='include/uapi/drm/drm.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='y2' type-id='type-id-312' visibility='default' filepath='include/uapi/drm/drm.h' line='100' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_mode_fb_cmd2' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='479' column='1' id='type-id-4604'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fb_id' type-id='type-id-511' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='width' type-id='type-id-511' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='height' type-id='type-id-511' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pixel_format' type-id='type-id-511' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='type-id-511' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='handles' type-id='type-id-4448' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='pitches' type-id='type-id-4448' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='offsets' type-id='type-id-4448' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='modifier' type-id='type-id-4449' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='513' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_mode_config_helper_funcs' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1213' column='1' id='type-id-4605'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='atomic_commit_tail' type-id='type-id-4594' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1249' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_fb_helper' size-in-bits='2624' is-struct='yes' visibility='default' filepath='include/drm/drm_fb_helper.h' line='157' column='1' id='type-id-4606'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='client' type-id='type-id-4607' visibility='default' filepath='include/drm/drm_fb_helper.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='buffer' type-id='type-id-4608' visibility='default' filepath='include/drm/drm_fb_helper.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fb' type-id='type-id-4609' visibility='default' filepath='include/drm/drm_fb_helper.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dev' type-id='type-id-4446' visibility='default' filepath='include/drm/drm_fb_helper.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='crtc_count' type-id='type-id-17' visibility='default' filepath='include/drm/drm_fb_helper.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='crtc_info' type-id='type-id-4610' visibility='default' filepath='include/drm/drm_fb_helper.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='connector_count' type-id='type-id-17' visibility='default' filepath='include/drm/drm_fb_helper.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='connector_info_alloc_count' type-id='type-id-17' visibility='default' filepath='include/drm/drm_fb_helper.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='sw_rotations' type-id='type-id-17' visibility='default' filepath='include/drm/drm_fb_helper.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='connector_info' type-id='type-id-4611' visibility='default' filepath='include/drm/drm_fb_helper.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='funcs' type-id='type-id-4612' visibility='default' filepath='include/drm/drm_fb_helper.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='fbdev' type-id='type-id-4613' visibility='default' filepath='include/drm/drm_fb_helper.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='pseudo_palette' type-id='type-id-4472' visibility='default' filepath='include/drm/drm_fb_helper.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='dirty_clip' type-id='type-id-4603' visibility='default' filepath='include/drm/drm_fb_helper.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='dirty_lock' type-id='type-id-247' visibility='default' filepath='include/drm/drm_fb_helper.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='dirty_work' type-id='type-id-255' visibility='default' filepath='include/drm/drm_fb_helper.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='resume_work' type-id='type-id-255' visibility='default' filepath='include/drm/drm_fb_helper.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='lock' type-id='type-id-245' visibility='default' filepath='include/drm/drm_fb_helper.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='kernel_fb_list' type-id='type-id-20' visibility='default' filepath='include/drm/drm_fb_helper.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='delayed_hotplug' type-id='type-id-33' visibility='default' filepath='include/drm/drm_fb_helper.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2568'>
+          <var-decl name='deferred_setup' type-id='type-id-33' visibility='default' filepath='include/drm/drm_fb_helper.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2592'>
+          <var-decl name='preferred_bpp' type-id='type-id-17' visibility='default' filepath='include/drm/drm_fb_helper.h' line='249' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_client_dev' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/drm/drm_client.h' line='60' column='1' id='type-id-4607'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='type-id-4446' visibility='default' filepath='include/drm/drm_client.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/drm/drm_client.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/drm/drm_client.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='funcs' type-id='type-id-4614' visibility='default' filepath='include/drm/drm_client.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='file' type-id='type-id-4615' visibility='default' filepath='include/drm/drm_client.h' line='87' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_client_funcs' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/drm_client.h' line='19' column='1' id='type-id-4616'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='include/drm/drm_client.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unregister' type-id='type-id-4617' visibility='default' filepath='include/drm/drm_client.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='restore' type-id='type-id-4618' visibility='default' filepath='include/drm/drm_client.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hotplug' type-id='type-id-4618' visibility='default' filepath='include/drm/drm_client.h' line='54' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_client_buffer' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/drm/drm_client.h' line='102' column='1' id='type-id-4619'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='client' type-id='type-id-4620' visibility='default' filepath='include/drm/drm_client.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='handle' type-id='type-id-7' visibility='default' filepath='include/drm/drm_client.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pitch' type-id='type-id-7' visibility='default' filepath='include/drm/drm_client.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='gem' type-id='type-id-4468' visibility='default' filepath='include/drm/drm_client.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vaddr' type-id='type-id-15' visibility='default' filepath='include/drm/drm_client.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fb' type-id='type-id-4609' visibility='default' filepath='include/drm/drm_client.h' line='131' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_fb_helper_crtc' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/drm/drm_fb_helper.h' line='49' column='1' id='type-id-4621'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mode_set' type-id='type-id-4622' visibility='default' filepath='include/drm/drm_fb_helper.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='desired_mode' type-id='type-id-4445' visibility='default' filepath='include/drm/drm_fb_helper.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='x' type-id='type-id-17' visibility='default' filepath='include/drm/drm_fb_helper.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='y' type-id='type-id-17' visibility='default' filepath='include/drm/drm_fb_helper.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='rotation' type-id='type-id-17' visibility='default' filepath='include/drm/drm_fb_helper.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_mode_set' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/drm/drm_crtc.h' line='1059' column='1' id='type-id-4622'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fb' type-id='type-id-4609' visibility='default' filepath='include/drm/drm_crtc.h' line='1060' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='crtc' type-id='type-id-4623' visibility='default' filepath='include/drm/drm_crtc.h' line='1061' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mode' type-id='type-id-4445' visibility='default' filepath='include/drm/drm_crtc.h' line='1062' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='x' type-id='type-id-1343' visibility='default' filepath='include/drm/drm_crtc.h' line='1064' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='y' type-id='type-id-1343' visibility='default' filepath='include/drm/drm_crtc.h' line='1065' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='connectors' type-id='type-id-4624' visibility='default' filepath='include/drm/drm_crtc.h' line='1067' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='num_connectors' type-id='type-id-84' visibility='default' filepath='include/drm/drm_crtc.h' line='1068' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_crtc' size-in-bits='9856' is-struct='yes' visibility='default' filepath='include/drm/drm_crtc.h' line='816' column='1' id='type-id-4625'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='type-id-4446' visibility='default' filepath='include/drm/drm_crtc.h' line='818' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='port' type-id='type-id-3543' visibility='default' filepath='include/drm/drm_crtc.h' line='820' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='head' type-id='type-id-20' visibility='default' filepath='include/drm/drm_crtc.h' line='828' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='name' type-id='type-id-2' visibility='default' filepath='include/drm/drm_crtc.h' line='831' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mutex' type-id='type-id-4580' visibility='default' filepath='include/drm/drm_crtc.h' line='843' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='base' type-id='type-id-4481' visibility='default' filepath='include/drm/drm_crtc.h' line='846' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='primary' type-id='type-id-4626' visibility='default' filepath='include/drm/drm_crtc.h' line='855' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='cursor' type-id='type-id-4626' visibility='default' filepath='include/drm/drm_crtc.h' line='864' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='index' type-id='type-id-5' visibility='default' filepath='include/drm/drm_crtc.h' line='870' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='cursor_x' type-id='type-id-17' visibility='default' filepath='include/drm/drm_crtc.h' line='879' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='cursor_y' type-id='type-id-17' visibility='default' filepath='include/drm/drm_crtc.h' line='887' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='enabled' type-id='type-id-33' visibility='default' filepath='include/drm/drm_crtc.h' line='897' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='mode' type-id='type-id-4549' visibility='default' filepath='include/drm/drm_crtc.h' line='907' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='hwmode' type-id='type-id-4549' visibility='default' filepath='include/drm/drm_crtc.h' line='922' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='x' type-id='type-id-17' visibility='default' filepath='include/drm/drm_crtc.h' line='931' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5152'>
+          <var-decl name='y' type-id='type-id-17' visibility='default' filepath='include/drm/drm_crtc.h' line='939' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='funcs' type-id='type-id-4627' visibility='default' filepath='include/drm/drm_crtc.h' line='942' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='gamma_size' type-id='type-id-1343' visibility='default' filepath='include/drm/drm_crtc.h' line='948' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='gamma_store' type-id='type-id-4628' visibility='default' filepath='include/drm/drm_crtc.h' line='954' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='helper_private' type-id='type-id-4629' visibility='default' filepath='include/drm/drm_crtc.h' line='957' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='properties' type-id='type-id-4486' visibility='default' filepath='include/drm/drm_crtc.h' line='960' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='state' type-id='type-id-4630' visibility='default' filepath='include/drm/drm_crtc.h' line='975' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='commit_list' type-id='type-id-20' visibility='default' filepath='include/drm/drm_crtc.h' line='992' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='commit_lock' type-id='type-id-247' visibility='default' filepath='include/drm/drm_crtc.h' line='999' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='debugfs_entry' type-id='type-id-23' visibility='default' filepath='include/drm/drm_crtc.h' line='1007' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='crc' type-id='type-id-4631' visibility='default' filepath='include/drm/drm_crtc.h' line='1015' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='fence_context' type-id='type-id-5' visibility='default' filepath='include/drm/drm_crtc.h' line='1022' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9504'>
+          <var-decl name='fence_lock' type-id='type-id-247' visibility='default' filepath='include/drm/drm_crtc.h' line='1029' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='fence_seqno' type-id='type-id-16' visibility='default' filepath='include/drm/drm_crtc.h' line='1036' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9600'>
+          <var-decl name='timeline_name' type-id='type-id-373' visibility='default' filepath='include/drm/drm_crtc.h' line='1043' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_plane' size-in-bits='5184' is-struct='yes' visibility='default' filepath='include/drm/drm_plane.h' line='535' column='1' id='type-id-4632'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='type-id-4446' visibility='default' filepath='include/drm/drm_plane.h' line='537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='head' type-id='type-id-20' visibility='default' filepath='include/drm/drm_plane.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='type-id-2' visibility='default' filepath='include/drm/drm_plane.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mutex' type-id='type-id-4580' visibility='default' filepath='include/drm/drm_plane.h' line='560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='base' type-id='type-id-4481' visibility='default' filepath='include/drm/drm_plane.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='possible_crtcs' type-id='type-id-1343' visibility='default' filepath='include/drm/drm_plane.h' line='569' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='format_types' type-id='type-id-4633' visibility='default' filepath='include/drm/drm_plane.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='format_count' type-id='type-id-5' visibility='default' filepath='include/drm/drm_plane.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='format_default' type-id='type-id-33' visibility='default' filepath='include/drm/drm_plane.h' line='578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='modifiers' type-id='type-id-4555' visibility='default' filepath='include/drm/drm_plane.h' line='581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='modifier_count' type-id='type-id-5' visibility='default' filepath='include/drm/drm_plane.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='crtc' type-id='type-id-4623' visibility='default' filepath='include/drm/drm_plane.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='fb' type-id='type-id-4609' visibility='default' filepath='include/drm/drm_plane.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='old_fb' type-id='type-id-4609' visibility='default' filepath='include/drm/drm_plane.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='funcs' type-id='type-id-4634' visibility='default' filepath='include/drm/drm_plane.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='properties' type-id='type-id-4486' visibility='default' filepath='include/drm/drm_plane.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='type' type-id='type-id-4635' visibility='default' filepath='include/drm/drm_plane.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4704'>
+          <var-decl name='index' type-id='type-id-5' visibility='default' filepath='include/drm/drm_plane.h' line='624' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='helper_private' type-id='type-id-4636' visibility='default' filepath='include/drm/drm_plane.h' line='627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='state' type-id='type-id-4637' visibility='default' filepath='include/drm/drm_plane.h' line='642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='alpha_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_plane.h' line='649' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='zpos_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_plane.h' line='655' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='rotation_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_plane.h' line='661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='color_encoding_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_plane.h' line='670' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='color_range_property' type-id='type-id-4470' visibility='default' filepath='include/drm/drm_plane.h' line='678' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_plane_funcs' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/drm/drm_plane.h' line='216' column='1' id='type-id-4638'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='update_plane' type-id='type-id-4639' visibility='default' filepath='include/drm/drm_plane.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='disable_plane' type-id='type-id-4640' visibility='default' filepath='include/drm/drm_plane.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='destroy' type-id='type-id-4641' visibility='default' filepath='include/drm/drm_plane.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reset' type-id='type-id-4641' visibility='default' filepath='include/drm/drm_plane.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_property' type-id='type-id-4642' visibility='default' filepath='include/drm/drm_plane.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='atomic_duplicate_state' type-id='type-id-4643' visibility='default' filepath='include/drm/drm_plane.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='atomic_destroy_state' type-id='type-id-4644' visibility='default' filepath='include/drm/drm_plane.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='atomic_set_property' type-id='type-id-4645' visibility='default' filepath='include/drm/drm_plane.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='atomic_get_property' type-id='type-id-4646' visibility='default' filepath='include/drm/drm_plane.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='late_register' type-id='type-id-4647' visibility='default' filepath='include/drm/drm_plane.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='early_unregister' type-id='type-id-4641' visibility='default' filepath='include/drm/drm_plane.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='atomic_print_state' type-id='type-id-4648' visibility='default' filepath='include/drm/drm_plane.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='format_mod_supported' type-id='type-id-4649' visibility='default' filepath='include/drm/drm_plane.h' line='474' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_plane_state' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/drm/drm_plane.h' line='44' column='1' id='type-id-4650'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='plane' type-id='type-id-4626' visibility='default' filepath='include/drm/drm_plane.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='crtc' type-id='type-id-4623' visibility='default' filepath='include/drm/drm_plane.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fb' type-id='type-id-4609' visibility='default' filepath='include/drm/drm_plane.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fence' type-id='type-id-4651' visibility='default' filepath='include/drm/drm_plane.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='crtc_x' type-id='type-id-1631' visibility='default' filepath='include/drm/drm_plane.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='crtc_y' type-id='type-id-1631' visibility='default' filepath='include/drm/drm_plane.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='crtc_w' type-id='type-id-1343' visibility='default' filepath='include/drm/drm_plane.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='crtc_h' type-id='type-id-1343' visibility='default' filepath='include/drm/drm_plane.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='src_x' type-id='type-id-1343' visibility='default' filepath='include/drm/drm_plane.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='src_y' type-id='type-id-1343' visibility='default' filepath='include/drm/drm_plane.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='src_h' type-id='type-id-1343' visibility='default' filepath='include/drm/drm_plane.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='src_w' type-id='type-id-1343' visibility='default' filepath='include/drm/drm_plane.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='alpha' type-id='type-id-688' visibility='default' filepath='include/drm/drm_plane.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='rotation' type-id='type-id-5' visibility='default' filepath='include/drm/drm_plane.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='zpos' type-id='type-id-5' visibility='default' filepath='include/drm/drm_plane.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='normalized_zpos' type-id='type-id-5' visibility='default' filepath='include/drm/drm_plane.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='color_encoding' type-id='type-id-4652' visibility='default' filepath='include/drm/drm_plane.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='color_range' type-id='type-id-4653' visibility='default' filepath='include/drm/drm_plane.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='src' type-id='type-id-4654' visibility='default' filepath='include/drm/drm_plane.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='dst' type-id='type-id-4654' visibility='default' filepath='include/drm/drm_plane.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='visible' type-id='type-id-33' visibility='default' filepath='include/drm/drm_plane.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='commit' type-id='type-id-4655' visibility='default' filepath='include/drm/drm_plane.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='state' type-id='type-id-4583' visibility='default' filepath='include/drm/drm_plane.h' line='186' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_fence' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/dma-fence.h' line='73' column='1' id='type-id-4656'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='type-id-239' visibility='default' filepath='include/linux/dma-fence.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='type-id-4657' visibility='default' filepath='include/linux/dma-fence.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/linux/dma-fence.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cb_list' type-id='type-id-20' visibility='default' filepath='include/linux/dma-fence.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='lock' type-id='type-id-486' visibility='default' filepath='include/linux/dma-fence.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='context' type-id='type-id-40' visibility='default' filepath='include/linux/dma-fence.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='seqno' type-id='type-id-5' visibility='default' filepath='include/linux/dma-fence.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='include/linux/dma-fence.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='timestamp' type-id='type-id-682' visibility='default' filepath='include/linux/dma-fence.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='error' type-id='type-id-17' visibility='default' filepath='include/linux/dma-fence.h' line='83' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_fence_ops' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/dma-fence.h' line='113' column='1' id='type-id-4658'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_driver_name' type-id='type-id-4659' visibility='default' filepath='include/linux/dma-fence.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get_timeline_name' type-id='type-id-4659' visibility='default' filepath='include/linux/dma-fence.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='enable_signaling' type-id='type-id-4660' visibility='default' filepath='include/linux/dma-fence.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='signaled' type-id='type-id-4660' visibility='default' filepath='include/linux/dma-fence.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='wait' type-id='type-id-4661' visibility='default' filepath='include/linux/dma-fence.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='release' type-id='type-id-4662' visibility='default' filepath='include/linux/dma-fence.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fence_value_str' type-id='type-id-4663' visibility='default' filepath='include/linux/dma-fence.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='timeline_value_str' type-id='type-id-4663' visibility='default' filepath='include/linux/dma-fence.h' line='242' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='drm_color_encoding' filepath='include/drm/drm_color_mgmt.h' line='53' column='1' id='type-id-4652'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='DRM_COLOR_YCBCR_BT601' value='0'/>
+        <enumerator name='DRM_COLOR_YCBCR_BT709' value='1'/>
+        <enumerator name='DRM_COLOR_YCBCR_BT2020' value='2'/>
+        <enumerator name='DRM_COLOR_ENCODING_MAX' value='3'/>
+      </enum-decl>
+      <enum-decl name='drm_color_range' filepath='include/drm/drm_color_mgmt.h' line='60' column='1' id='type-id-4653'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='DRM_COLOR_YCBCR_LIMITED_RANGE' value='0'/>
+        <enumerator name='DRM_COLOR_YCBCR_FULL_RANGE' value='1'/>
+        <enumerator name='DRM_COLOR_RANGE_MAX' value='2'/>
+      </enum-decl>
+      <class-decl name='drm_rect' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_rect.h' line='41' column='1' id='type-id-4654'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x1' type-id='type-id-17' visibility='default' filepath='include/drm/drm_rect.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='y1' type-id='type-id-17' visibility='default' filepath='include/drm/drm_rect.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='x2' type-id='type-id-17' visibility='default' filepath='include/drm/drm_rect.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='y2' type-id='type-id-17' visibility='default' filepath='include/drm/drm_rect.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='drm_plane_type' filepath='include/drm/drm_plane.h' line='496' column='1' id='type-id-4635'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='DRM_PLANE_TYPE_OVERLAY' value='0'/>
+        <enumerator name='DRM_PLANE_TYPE_PRIMARY' value='1'/>
+        <enumerator name='DRM_PLANE_TYPE_CURSOR' value='2'/>
+      </enum-decl>
+      <class-decl name='drm_plane_helper_funcs' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1011' column='1' id='type-id-4664'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prepare_fb' type-id='type-id-4665' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1043' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cleanup_fb' type-id='type-id-4644' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1054' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='atomic_check' type-id='type-id-4665' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1093' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='atomic_update' type-id='type-id-4644' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='atomic_disable' type-id='type-id-4644' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='atomic_async_check' type-id='type-id-4665' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='atomic_async_update' type-id='type-id-4644' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1193' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_crtc_funcs' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/drm/drm_crtc.h' line='368' column='1' id='type-id-4666'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reset' type-id='type-id-4667' visibility='default' filepath='include/drm/drm_crtc.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cursor_set' type-id='type-id-4668' visibility='default' filepath='include/drm/drm_crtc.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cursor_set2' type-id='type-id-4669' visibility='default' filepath='include/drm/drm_crtc.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cursor_move' type-id='type-id-4670' visibility='default' filepath='include/drm/drm_crtc.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='gamma_set' type-id='type-id-4671' visibility='default' filepath='include/drm/drm_crtc.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='destroy' type-id='type-id-4667' visibility='default' filepath='include/drm/drm_crtc.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_config' type-id='type-id-4672' visibility='default' filepath='include/drm/drm_crtc.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='page_flip' type-id='type-id-4673' visibility='default' filepath='include/drm/drm_crtc.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='page_flip_target' type-id='type-id-4674' visibility='default' filepath='include/drm/drm_crtc.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_property' type-id='type-id-4675' visibility='default' filepath='include/drm/drm_crtc.h' line='581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='atomic_duplicate_state' type-id='type-id-4676' visibility='default' filepath='include/drm/drm_crtc.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='atomic_destroy_state' type-id='type-id-4677' visibility='default' filepath='include/drm/drm_crtc.h' line='625' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='atomic_set_property' type-id='type-id-4678' visibility='default' filepath='include/drm/drm_crtc.h' line='670' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='atomic_get_property' type-id='type-id-4679' visibility='default' filepath='include/drm/drm_crtc.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='late_register' type-id='type-id-4680' visibility='default' filepath='include/drm/drm_crtc.h' line='710' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='early_unregister' type-id='type-id-4667' visibility='default' filepath='include/drm/drm_crtc.h' line='721' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='set_crc_source' type-id='type-id-4681' visibility='default' filepath='include/drm/drm_crtc.h' line='747' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='atomic_print_state' type-id='type-id-4682' visibility='default' filepath='include/drm/drm_crtc.h' line='759' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='get_vblank_counter' type-id='type-id-4683' visibility='default' filepath='include/drm/drm_crtc.h' line='786' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='enable_vblank' type-id='type-id-4680' visibility='default' filepath='include/drm/drm_crtc.h' line='799' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='disable_vblank' type-id='type-id-4667' visibility='default' filepath='include/drm/drm_crtc.h' line='807' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_pending_vblank_event' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/drm/drm_vblank.h' line='41' column='1' id='type-id-4684'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='type-id-4685' visibility='default' filepath='include/drm/drm_vblank.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pipe' type-id='type-id-5' visibility='default' filepath='include/drm/drm_vblank.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sequence' type-id='type-id-40' visibility='default' filepath='include/drm/drm_vblank.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='event' type-id='type-id-4686' visibility='default' filepath='include/drm/drm_vblank.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_pending_event' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/drm/drm_file.h' line='88' column='1' id='type-id-4685'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='completion' type-id='type-id-1394' visibility='default' filepath='include/drm/drm_file.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='completion_release' type-id='type-id-4687' visibility='default' filepath='include/drm/drm_file.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='event' type-id='type-id-4688' visibility='default' filepath='include/drm/drm_file.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fence' type-id='type-id-4651' visibility='default' filepath='include/drm/drm_file.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='file_priv' type-id='type-id-4615' visibility='default' filepath='include/drm/drm_file.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='link' type-id='type-id-20' visibility='default' filepath='include/drm/drm_file.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pending_link' type-id='type-id-20' visibility='default' filepath='include/drm/drm_file.h' line='149' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_event' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/drm/drm.h' line='935' column='1' id='type-id-4689'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='type-id-511' visibility='default' filepath='include/uapi/drm/drm.h' line='936' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='length' type-id='type-id-511' visibility='default' filepath='include/uapi/drm/drm.h' line='937' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_event_vblank' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/drm/drm.h' line='944' column='1' id='type-id-4690'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='type-id-4689' visibility='default' filepath='include/uapi/drm/drm.h' line='945' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='user_data' type-id='type-id-100' visibility='default' filepath='include/uapi/drm/drm.h' line='946' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tv_sec' type-id='type-id-511' visibility='default' filepath='include/uapi/drm/drm.h' line='947' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tv_usec' type-id='type-id-511' visibility='default' filepath='include/uapi/drm/drm.h' line='948' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sequence' type-id='type-id-511' visibility='default' filepath='include/uapi/drm/drm.h' line='949' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='crtc_id' type-id='type-id-511' visibility='default' filepath='include/uapi/drm/drm.h' line='950' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_event_crtc_sequence' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/drm/drm.h' line='956' column='1' id='type-id-4691'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='type-id-4689' visibility='default' filepath='include/uapi/drm/drm.h' line='957' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='user_data' type-id='type-id-100' visibility='default' filepath='include/uapi/drm/drm.h' line='958' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='time_ns' type-id='type-id-900' visibility='default' filepath='include/uapi/drm/drm.h' line='959' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sequence' type-id='type-id-100' visibility='default' filepath='include/uapi/drm/drm.h' line='960' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_crtc_state' size-in-bits='4544' is-struct='yes' visibility='default' filepath='include/drm/drm_crtc.h' line='98' column='1' id='type-id-4692'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='crtc' type-id='type-id-4623' visibility='default' filepath='include/drm/drm_crtc.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='enable' type-id='type-id-33' visibility='default' filepath='include/drm/drm_crtc.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='active' type-id='type-id-33' visibility='default' filepath='include/drm/drm_crtc.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='planes_changed' type-id='type-id-33' visibility='default' filepath='include/drm/drm_crtc.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='mode_changed' type-id='type-id-33' visibility='default' filepath='include/drm/drm_crtc.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='active_changed' type-id='type-id-33' visibility='default' filepath='include/drm/drm_crtc.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='connectors_changed' type-id='type-id-33' visibility='default' filepath='include/drm/drm_crtc.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='zpos_changed' type-id='type-id-33' visibility='default' filepath='include/drm/drm_crtc.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='color_mgmt_changed' type-id='type-id-33' visibility='default' filepath='include/drm/drm_crtc.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='no_vblank' type-id='type-id-33' visibility='default' filepath='include/drm/drm_crtc.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='plane_mask' type-id='type-id-7' visibility='default' filepath='include/drm/drm_crtc.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='connector_mask' type-id='type-id-7' visibility='default' filepath='include/drm/drm_crtc.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='encoder_mask' type-id='type-id-7' visibility='default' filepath='include/drm/drm_crtc.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='adjusted_mode' type-id='type-id-4549' visibility='default' filepath='include/drm/drm_crtc.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='mode' type-id='type-id-4549' visibility='default' filepath='include/drm/drm_crtc.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='mode_blob' type-id='type-id-4485' visibility='default' filepath='include/drm/drm_crtc.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='degamma_lut' type-id='type-id-4485' visibility='default' filepath='include/drm/drm_crtc.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='ctm' type-id='type-id-4485' visibility='default' filepath='include/drm/drm_crtc.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='gamma_lut' type-id='type-id-4485' visibility='default' filepath='include/drm/drm_crtc.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='target_vblank' type-id='type-id-7' visibility='default' filepath='include/drm/drm_crtc.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4320'>
+          <var-decl name='pageflip_flags' type-id='type-id-7' visibility='default' filepath='include/drm/drm_crtc.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='event' type-id='type-id-4693' visibility='default' filepath='include/drm/drm_crtc.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='commit' type-id='type-id-4655' visibility='default' filepath='include/drm/drm_crtc.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='state' type-id='type-id-4583' visibility='default' filepath='include/drm/drm_crtc.h' line='353' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_property_blob' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/drm/drm_property.h' line='206' column='1' id='type-id-4694'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='type-id-4481' visibility='default' filepath='include/drm/drm_property.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev' type-id='type-id-4446' visibility='default' filepath='include/drm/drm_property.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='head_global' type-id='type-id-20' visibility='default' filepath='include/drm/drm_property.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='head_file' type-id='type-id-20' visibility='default' filepath='include/drm/drm_property.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='length' type-id='type-id-84' visibility='default' filepath='include/drm/drm_property.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='data' type-id='type-id-15' visibility='default' filepath='include/drm/drm_property.h' line='212' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='uint16_t' type-id='type-id-688' filepath='include/linux/types.h' line='108' column='1' id='type-id-4493'/>
+      <class-decl name='drm_crtc_helper_funcs' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='59' column='1' id='type-id-4695'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dpms' type-id='type-id-4696' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prepare' type-id='type-id-4667' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='commit' type-id='type-id-4667' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mode_valid' type-id='type-id-4697' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mode_fixup' type-id='type-id-4698' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mode_set' type-id='type-id-4699' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mode_set_nofb' type-id='type-id-4667' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mode_set_base' type-id='type-id-4700' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='mode_set_base_atomic' type-id='type-id-4701' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='disable' type-id='type-id-4667' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='atomic_check' type-id='type-id-4702' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='atomic_begin' type-id='type-id-4677' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='atomic_flush' type-id='type-id-4677' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='atomic_enable' type-id='type-id-4677' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='atomic_disable' type-id='type-id-4677' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='445' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='mode_set_atomic' filepath='include/drm/drm_fb_helper.h' line='40' column='1' id='type-id-4703'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='LEAVE_ATOMIC_MODE_SET' value='0'/>
+        <enumerator name='ENTER_ATOMIC_MODE_SET' value='1'/>
+      </enum-decl>
+      <class-decl name='drm_crtc_crc' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='53' column='1' id='type-id-4631'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='source' type-id='type-id-4' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='opened' type-id='type-id-33' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='overflow' type-id='type-id-33' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='entries' type-id='type-id-4704' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='head' type-id='type-id-17' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='tail' type-id='type-id-17' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='values_cnt' type-id='type-id-84' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='wq' type-id='type-id-225' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_crtc_crc_entry' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='33' column='1' id='type-id-4705'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='has_frame_counter' type-id='type-id-33' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='frame' type-id='type-id-1343' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='crcs' type-id='type-id-4474' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_fb_helper_connector' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/drm/drm_fb_helper.h' line='131' column='1' id='type-id-4706'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='connector' type-id='type-id-4444' visibility='default' filepath='include/drm/drm_fb_helper.h' line='132' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_fb_helper_funcs' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_fb_helper.h' line='89' column='1' id='type-id-4707'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fb_probe' type-id='type-id-4708' visibility='default' filepath='include/drm/drm_fb_helper.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='initial_config' type-id='type-id-4709' visibility='default' filepath='include/drm/drm_fb_helper.h' line='124' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_fb_helper_surface_size' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/drm/drm_fb_helper.h' line='75' column='1' id='type-id-4710'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fb_width' type-id='type-id-7' visibility='default' filepath='include/drm/drm_fb_helper.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='fb_height' type-id='type-id-7' visibility='default' filepath='include/drm/drm_fb_helper.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='surface_width' type-id='type-id-7' visibility='default' filepath='include/drm/drm_fb_helper.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='surface_height' type-id='type-id-7' visibility='default' filepath='include/drm/drm_fb_helper.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='surface_bpp' type-id='type-id-7' visibility='default' filepath='include/drm/drm_fb_helper.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='surface_depth' type-id='type-id-7' visibility='default' filepath='include/drm/drm_fb_helper.h' line='81' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_fb_offset' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/drm/drm_fb_helper.h' line='45' column='1' id='type-id-4711'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x' type-id='type-id-17' visibility='default' filepath='include/drm/drm_fb_helper.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='y' type-id='type-id-17' visibility='default' filepath='include/drm/drm_fb_helper.h' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_info' size-in-bits='6912' is-struct='yes' visibility='default' filepath='include/linux/fb.h' line='464' column='1' id='type-id-4712'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='type-id-26' visibility='default' filepath='include/linux/fb.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='node' type-id='type-id-17' visibility='default' filepath='include/linux/fb.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='type-id-17' visibility='default' filepath='include/linux/fb.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='fbcon_rotate_hint' type-id='type-id-17' visibility='default' filepath='include/linux/fb.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='type-id-245' visibility='default' filepath='include/linux/fb.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mm_lock' type-id='type-id-245' visibility='default' filepath='include/linux/fb.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='var' type-id='type-id-4713' visibility='default' filepath='include/linux/fb.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='fix' type-id='type-id-4714' visibility='default' filepath='include/linux/fb.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='monspecs' type-id='type-id-4715' visibility='default' filepath='include/linux/fb.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='queue' type-id='type-id-255' visibility='default' filepath='include/linux/fb.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='pixmap' type-id='type-id-4716' visibility='default' filepath='include/linux/fb.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='sprite' type-id='type-id-4716' visibility='default' filepath='include/linux/fb.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='cmap' type-id='type-id-4717' visibility='default' filepath='include/linux/fb.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='modelist' type-id='type-id-20' visibility='default' filepath='include/linux/fb.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='mode' type-id='type-id-4718' visibility='default' filepath='include/linux/fb.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='deferred_work' type-id='type-id-411' visibility='default' filepath='include/linux/fb.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='fbdefio' type-id='type-id-4719' visibility='default' filepath='include/linux/fb.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='fbops' type-id='type-id-4720' visibility='default' filepath='include/linux/fb.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='device' type-id='type-id-240' visibility='default' filepath='include/linux/fb.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='dev' type-id='type-id-240' visibility='default' filepath='include/linux/fb.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='class_flag' type-id='type-id-17' visibility='default' filepath='include/linux/fb.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='' type-id='type-id-4721' visibility='default' filepath='include/linux/fb.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='screen_size' type-id='type-id-16' visibility='default' filepath='include/linux/fb.h' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='pseudo_palette' type-id='type-id-15' visibility='default' filepath='include/linux/fb.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='state' type-id='type-id-7' visibility='default' filepath='include/linux/fb.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='fbcon_par' type-id='type-id-15' visibility='default' filepath='include/linux/fb.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='par' type-id='type-id-15' visibility='default' filepath='include/linux/fb.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='apertures' type-id='type-id-4187' visibility='default' filepath='include/linux/fb.h' line='528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='skip_vt_switch' type-id='type-id-33' visibility='default' filepath='include/linux/fb.h' line='530' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_var_screeninfo' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/uapi/linux/fb.h' line='241' column='1' id='type-id-4713'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='xres' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='yres' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='xres_virtual' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='yres_virtual' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='xoffset' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='yoffset' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bits_per_pixel' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='grayscale' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='red' type-id='type-id-4722' visibility='default' filepath='include/uapi/linux/fb.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='green' type-id='type-id-4722' visibility='default' filepath='include/uapi/linux/fb.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='blue' type-id='type-id-4722' visibility='default' filepath='include/uapi/linux/fb.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='transp' type-id='type-id-4722' visibility='default' filepath='include/uapi/linux/fb.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='nonstd' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='activate' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='height' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='width' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='accel_flags' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='pixclock' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='left_margin' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='right_margin' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='upper_margin' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='lower_margin' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='hsync_len' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='vsync_len' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='sync' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='vmode' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rotate' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='colorspace' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='reserved' type-id='type-id-4448' visibility='default' filepath='include/uapi/linux/fb.h' line='278' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_bitfield' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/fb.h' line='188' column='1' id='type-id-4722'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='offset' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='length' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='msb_right' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='191' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_fix_screeninfo' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/uapi/linux/fb.h' line='157' column='1' id='type-id-4714'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='type-id-43' visibility='default' filepath='include/uapi/linux/fb.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='smem_start' type-id='type-id-16' visibility='default' filepath='include/uapi/linux/fb.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='smem_len' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='type' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='type_aux' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='visual' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='xpanstep' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/fb.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='ypanstep' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/fb.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='ywrapstep' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/fb.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='line_length' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mmio_start' type-id='type-id-16' visibility='default' filepath='include/uapi/linux/fb.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='mmio_len' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='accel' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='capabilities' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/fb.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='592'>
+          <var-decl name='reserved' type-id='type-id-4447' visibility='default' filepath='include/uapi/linux/fb.h' line='175' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_monspecs' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/linux/fb.h' line='63' column='1' id='type-id-4715'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chroma' type-id='type-id-4723' visibility='default' filepath='include/linux/fb.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='modedb' type-id='type-id-4718' visibility='default' filepath='include/linux/fb.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='manufacturer' type-id='type-id-4451' visibility='default' filepath='include/linux/fb.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='monitor' type-id='type-id-4450' visibility='default' filepath='include/linux/fb.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='serial_no' type-id='type-id-4450' visibility='default' filepath='include/linux/fb.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ascii' type-id='type-id-4450' visibility='default' filepath='include/linux/fb.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='modedb_len' type-id='type-id-511' visibility='default' filepath='include/linux/fb.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='model' type-id='type-id-511' visibility='default' filepath='include/linux/fb.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='serial' type-id='type-id-511' visibility='default' filepath='include/linux/fb.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='year' type-id='type-id-511' visibility='default' filepath='include/linux/fb.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='week' type-id='type-id-511' visibility='default' filepath='include/linux/fb.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='hfmin' type-id='type-id-511' visibility='default' filepath='include/linux/fb.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='hfmax' type-id='type-id-511' visibility='default' filepath='include/linux/fb.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='dclkmin' type-id='type-id-511' visibility='default' filepath='include/linux/fb.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='dclkmax' type-id='type-id-511' visibility='default' filepath='include/linux/fb.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='input' type-id='type-id-108' visibility='default' filepath='include/linux/fb.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1008'>
+          <var-decl name='dpms' type-id='type-id-108' visibility='default' filepath='include/linux/fb.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='signal' type-id='type-id-108' visibility='default' filepath='include/linux/fb.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1040'>
+          <var-decl name='vfmin' type-id='type-id-108' visibility='default' filepath='include/linux/fb.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='vfmax' type-id='type-id-108' visibility='default' filepath='include/linux/fb.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1072'>
+          <var-decl name='gamma' type-id='type-id-108' visibility='default' filepath='include/linux/fb.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='gtf' type-id='type-id-108' visibility='default' filepath='include/linux/fb.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1104'>
+          <var-decl name='misc' type-id='type-id-108' visibility='default' filepath='include/linux/fb.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='version' type-id='type-id-895' visibility='default' filepath='include/linux/fb.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1128'>
+          <var-decl name='revision' type-id='type-id-895' visibility='default' filepath='include/linux/fb.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1136'>
+          <var-decl name='max_x' type-id='type-id-895' visibility='default' filepath='include/linux/fb.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1144'>
+          <var-decl name='max_y' type-id='type-id-895' visibility='default' filepath='include/linux/fb.h' line='90' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_chroma' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/fb.h' line='52' column='1' id='type-id-4723'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='redx' type-id='type-id-511' visibility='default' filepath='include/linux/fb.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='greenx' type-id='type-id-511' visibility='default' filepath='include/linux/fb.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bluex' type-id='type-id-511' visibility='default' filepath='include/linux/fb.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='whitex' type-id='type-id-511' visibility='default' filepath='include/linux/fb.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='redy' type-id='type-id-511' visibility='default' filepath='include/linux/fb.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='greeny' type-id='type-id-511' visibility='default' filepath='include/linux/fb.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bluey' type-id='type-id-511' visibility='default' filepath='include/linux/fb.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='whitey' type-id='type-id-511' visibility='default' filepath='include/linux/fb.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_videomode' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/fb.h' line='786' column='1' id='type-id-4724'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/fb.h' line='787' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='refresh' type-id='type-id-7' visibility='default' filepath='include/linux/fb.h' line='788' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='xres' type-id='type-id-7' visibility='default' filepath='include/linux/fb.h' line='789' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='yres' type-id='type-id-7' visibility='default' filepath='include/linux/fb.h' line='790' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='pixclock' type-id='type-id-7' visibility='default' filepath='include/linux/fb.h' line='791' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='left_margin' type-id='type-id-7' visibility='default' filepath='include/linux/fb.h' line='792' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='right_margin' type-id='type-id-7' visibility='default' filepath='include/linux/fb.h' line='793' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='upper_margin' type-id='type-id-7' visibility='default' filepath='include/linux/fb.h' line='794' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='lower_margin' type-id='type-id-7' visibility='default' filepath='include/linux/fb.h' line='795' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hsync_len' type-id='type-id-7' visibility='default' filepath='include/linux/fb.h' line='796' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='vsync_len' type-id='type-id-7' visibility='default' filepath='include/linux/fb.h' line='797' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sync' type-id='type-id-7' visibility='default' filepath='include/linux/fb.h' line='798' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='vmode' type-id='type-id-7' visibility='default' filepath='include/linux/fb.h' line='799' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='flag' type-id='type-id-7' visibility='default' filepath='include/linux/fb.h' line='800' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_pixmap' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/fb.h' line='213' column='1' id='type-id-4716'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='type-id-3121' visibility='default' filepath='include/linux/fb.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='type-id-7' visibility='default' filepath='include/linux/fb.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='offset' type-id='type-id-7' visibility='default' filepath='include/linux/fb.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='buf_align' type-id='type-id-7' visibility='default' filepath='include/linux/fb.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='scan_align' type-id='type-id-7' visibility='default' filepath='include/linux/fb.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='access_align' type-id='type-id-7' visibility='default' filepath='include/linux/fb.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='flags' type-id='type-id-7' visibility='default' filepath='include/linux/fb.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='blit_x' type-id='type-id-7' visibility='default' filepath='include/linux/fb.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='blit_y' type-id='type-id-7' visibility='default' filepath='include/linux/fb.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='writeio' type-id='type-id-4725' visibility='default' filepath='include/linux/fb.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='readio' type-id='type-id-4725' visibility='default' filepath='include/linux/fb.h' line='227' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_cmap' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/fb.h' line='281' column='1' id='type-id-4717'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='len' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='red' type-id='type-id-4726' visibility='default' filepath='include/uapi/linux/fb.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='green' type-id='type-id-4726' visibility='default' filepath='include/uapi/linux/fb.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='blue' type-id='type-id-4726' visibility='default' filepath='include/uapi/linux/fb.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='transp' type-id='type-id-4726' visibility='default' filepath='include/uapi/linux/fb.h' line='287' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_deferred_io' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/fb.h' line='231' column='1' id='type-id-4727'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='delay' type-id='type-id-16' visibility='default' filepath='include/linux/fb.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lock' type-id='type-id-245' visibility='default' filepath='include/linux/fb.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pagelist' type-id='type-id-20' visibility='default' filepath='include/linux/fb.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='first_io' type-id='type-id-4728' visibility='default' filepath='include/linux/fb.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='deferred_io' type-id='type-id-4729' visibility='default' filepath='include/linux/fb.h' line='238' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_ops' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/fb.h' line='256' column='1' id='type-id-4730'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='include/linux/fb.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fb_open' type-id='type-id-4731' visibility='default' filepath='include/linux/fb.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fb_release' type-id='type-id-4731' visibility='default' filepath='include/linux/fb.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fb_read' type-id='type-id-4732' visibility='default' filepath='include/linux/fb.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fb_write' type-id='type-id-4733' visibility='default' filepath='include/linux/fb.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fb_check_var' type-id='type-id-4734' visibility='default' filepath='include/linux/fb.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fb_set_par' type-id='type-id-4735' visibility='default' filepath='include/linux/fb.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fb_setcolreg' type-id='type-id-4736' visibility='default' filepath='include/linux/fb.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='fb_setcmap' type-id='type-id-4737' visibility='default' filepath='include/linux/fb.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='fb_blank' type-id='type-id-4738' visibility='default' filepath='include/linux/fb.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fb_pan_display' type-id='type-id-4734' visibility='default' filepath='include/linux/fb.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='fb_fillrect' type-id='type-id-4739' visibility='default' filepath='include/linux/fb.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='fb_copyarea' type-id='type-id-4740' visibility='default' filepath='include/linux/fb.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='fb_imageblit' type-id='type-id-4741' visibility='default' filepath='include/linux/fb.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='fb_cursor' type-id='type-id-4742' visibility='default' filepath='include/linux/fb.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='fb_sync' type-id='type-id-4735' visibility='default' filepath='include/linux/fb.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='fb_ioctl' type-id='type-id-4743' visibility='default' filepath='include/linux/fb.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='fb_compat_ioctl' type-id='type-id-4743' visibility='default' filepath='include/linux/fb.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='fb_mmap' type-id='type-id-4744' visibility='default' filepath='include/linux/fb.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='fb_get_caps' type-id='type-id-4745' visibility='default' filepath='include/linux/fb.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='fb_destroy' type-id='type-id-4728' visibility='default' filepath='include/linux/fb.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='fb_debug_enter' type-id='type-id-4735' visibility='default' filepath='include/linux/fb.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='fb_debug_leave' type-id='type-id-4735' visibility='default' filepath='include/linux/fb.h' line='323' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_fillrect' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/fb.h' line='350' column='1' id='type-id-4746'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dx' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dy' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='width' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='height' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='color' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='rop' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='356' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_copyarea' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/fb.h' line='341' column='1' id='type-id-4747'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dx' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dy' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='width' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='height' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sx' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='sy' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='347' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_image' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/uapi/linux/fb.h' line='359' column='1' id='type-id-4748'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dx' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dy' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='width' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='height' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fg_color' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='bg_color' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fb.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='depth' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/fb.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='data' type-id='type-id-4' visibility='default' filepath='include/uapi/linux/fb.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cmap' type-id='type-id-4717' visibility='default' filepath='include/uapi/linux/fb.h' line='368' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_cursor' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/uapi/linux/fb.h' line='387' column='1' id='type-id-4749'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='set' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/fb.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='enable' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/fb.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='rop' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/fb.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mask' type-id='type-id-4' visibility='default' filepath='include/uapi/linux/fb.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hot' type-id='type-id-4750' visibility='default' filepath='include/uapi/linux/fb.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='image' type-id='type-id-4748' visibility='default' filepath='include/uapi/linux/fb.h' line='393' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fbcurpos' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/fb.h' line='383' column='1' id='type-id-4750'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/fb.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='y' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/fb.h' line='384' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_blit_caps' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/fb.h' line='172' column='1' id='type-id-4751'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x' type-id='type-id-7' visibility='default' filepath='include/linux/fb.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='y' type-id='type-id-7' visibility='default' filepath='include/linux/fb.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='len' type-id='type-id-7' visibility='default' filepath='include/linux/fb.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='type-id-7' visibility='default' filepath='include/linux/fb.h' line='176' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__4' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fb.h' line='507' column='1' id='type-id-4721'>
+        <data-member access='private'>
+          <var-decl name='screen_base' type-id='type-id-2' visibility='default' filepath='include/linux/fb.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='screen_buffer' type-id='type-id-2' visibility='default' filepath='include/linux/fb.h' line='509' column='1'/>
+        </data-member>
+      </union-decl>
+      <enum-decl name='drm_connector_status' filepath='include/drm/drm_connector.h' line='57' column='1' id='type-id-4482'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='connector_status_connected' value='1'/>
+        <enumerator name='connector_status_disconnected' value='2'/>
+        <enumerator name='connector_status_unknown' value='3'/>
+      </enum-decl>
+      <class-decl name='drm_display_info' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='219' column='1' id='type-id-4483'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-373' visibility='default' filepath='include/drm/drm_connector.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='width_mm' type-id='type-id-5' visibility='default' filepath='include/drm/drm_connector.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='height_mm' type-id='type-id-5' visibility='default' filepath='include/drm/drm_connector.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pixel_clock' type-id='type-id-5' visibility='default' filepath='include/drm/drm_connector.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='bpc' type-id='type-id-5' visibility='default' filepath='include/drm/drm_connector.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='subpixel_order' type-id='type-id-4752' visibility='default' filepath='include/drm/drm_connector.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='panel_orientation' type-id='type-id-17' visibility='default' filepath='include/drm/drm_connector.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='color_formats' type-id='type-id-7' visibility='default' filepath='include/drm/drm_connector.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='bus_formats' type-id='type-id-2727' visibility='default' filepath='include/drm/drm_connector.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='num_bus_formats' type-id='type-id-5' visibility='default' filepath='include/drm/drm_connector.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='bus_flags' type-id='type-id-7' visibility='default' filepath='include/drm/drm_connector.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='max_tmds_clock' type-id='type-id-17' visibility='default' filepath='include/drm/drm_connector.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='dvi_dual' type-id='type-id-33' visibility='default' filepath='include/drm/drm_connector.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='680'>
+          <var-decl name='has_hdmi_infoframe' type-id='type-id-33' visibility='default' filepath='include/drm/drm_connector.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='688'>
+          <var-decl name='edid_hdmi_dc_modes' type-id='type-id-214' visibility='default' filepath='include/drm/drm_connector.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='696'>
+          <var-decl name='cea_rev' type-id='type-id-214' visibility='default' filepath='include/drm/drm_connector.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='hdmi' type-id='type-id-4753' visibility='default' filepath='include/drm/drm_connector.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='non_desktop' type-id='type-id-33' visibility='default' filepath='include/drm/drm_connector.h' line='339' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='subpixel_order' filepath='include/drm/drm_connector.h' line='84' column='1' id='type-id-4752'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='SubPixelUnknown' value='0'/>
+        <enumerator name='SubPixelHorizontalRGB' value='1'/>
+        <enumerator name='SubPixelHorizontalBGR' value='2'/>
+        <enumerator name='SubPixelVerticalRGB' value='3'/>
+        <enumerator name='SubPixelVerticalBGR' value='4'/>
+        <enumerator name='SubPixelNone' value='5'/>
+      </enum-decl>
+      <class-decl name='drm_hdmi_info' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='136' column='1' id='type-id-4753'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='scdc' type-id='type-id-4754' visibility='default' filepath='include/drm/drm_connector.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='y420_vdb_modes' type-id='type-id-219' visibility='default' filepath='include/drm/drm_connector.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='y420_cmdb_modes' type-id='type-id-219' visibility='default' filepath='include/drm/drm_connector.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='y420_cmdb_map' type-id='type-id-40' visibility='default' filepath='include/drm/drm_connector.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='y420_dc_modes' type-id='type-id-214' visibility='default' filepath='include/drm/drm_connector.h' line='160' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_scdc' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='114' column='1' id='type-id-4754'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='supported' type-id='type-id-33' visibility='default' filepath='include/drm/drm_connector.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='read_request' type-id='type-id-33' visibility='default' filepath='include/drm/drm_connector.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='scrambling' type-id='type-id-4755' visibility='default' filepath='include/drm/drm_connector.h' line='126' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_scrambling' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='97' column='1' id='type-id-4755'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='supported' type-id='type-id-33' visibility='default' filepath='include/drm/drm_connector.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='low_rates' type-id='type-id-33' visibility='default' filepath='include/drm/drm_connector.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_connector_funcs' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='472' column='1' id='type-id-4756'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dpms' type-id='type-id-4757' visibility='default' filepath='include/drm/drm_connector.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reset' type-id='type-id-4758' visibility='default' filepath='include/drm/drm_connector.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='detect' type-id='type-id-4759' visibility='default' filepath='include/drm/drm_connector.h' line='529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='force' type-id='type-id-4758' visibility='default' filepath='include/drm/drm_connector.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fill_modes' type-id='type-id-4760' visibility='default' filepath='include/drm/drm_connector.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_property' type-id='type-id-4761' visibility='default' filepath='include/drm/drm_connector.h' line='587' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='late_register' type-id='type-id-4762' visibility='default' filepath='include/drm/drm_connector.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='early_unregister' type-id='type-id-4758' visibility='default' filepath='include/drm/drm_connector.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='destroy' type-id='type-id-4758' visibility='default' filepath='include/drm/drm_connector.h' line='629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='atomic_duplicate_state' type-id='type-id-4763' visibility='default' filepath='include/drm/drm_connector.h' line='662' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='atomic_destroy_state' type-id='type-id-4764' visibility='default' filepath='include/drm/drm_connector.h' line='672' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='atomic_set_property' type-id='type-id-4765' visibility='default' filepath='include/drm/drm_connector.h' line='717' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='atomic_get_property' type-id='type-id-4766' visibility='default' filepath='include/drm/drm_connector.h' line='740' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='atomic_print_state' type-id='type-id-4767' visibility='default' filepath='include/drm/drm_connector.h' line='754' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_connector_state' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='382' column='1' id='type-id-4768'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='connector' type-id='type-id-4444' visibility='default' filepath='include/drm/drm_connector.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='crtc' type-id='type-id-4623' visibility='default' filepath='include/drm/drm_connector.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='best_encoder' type-id='type-id-4490' visibility='default' filepath='include/drm/drm_connector.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='link_status' type-id='type-id-4769' visibility='default' filepath='include/drm/drm_connector.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='state' type-id='type-id-4583' visibility='default' filepath='include/drm/drm_connector.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='commit' type-id='type-id-4655' visibility='default' filepath='include/drm/drm_connector.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='tv' type-id='type-id-4770' visibility='default' filepath='include/drm/drm_connector.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='picture_aspect_ratio' type-id='type-id-4551' visibility='default' filepath='include/drm/drm_connector.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='content_type' type-id='type-id-5' visibility='default' filepath='include/drm/drm_connector.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='scaling_mode' type-id='type-id-5' visibility='default' filepath='include/drm/drm_connector.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='content_protection' type-id='type-id-5' visibility='default' filepath='include/drm/drm_connector.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='writeback_job' type-id='type-id-4771' visibility='default' filepath='include/drm/drm_connector.h' line='462' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_encoder' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/drm/drm_encoder.h' line='98' column='1' id='type-id-4772'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='type-id-4446' visibility='default' filepath='include/drm/drm_encoder.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='head' type-id='type-id-20' visibility='default' filepath='include/drm/drm_encoder.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='base' type-id='type-id-4481' visibility='default' filepath='include/drm/drm_encoder.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='name' type-id='type-id-2' visibility='default' filepath='include/drm/drm_encoder.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='encoder_type' type-id='type-id-17' visibility='default' filepath='include/drm/drm_encoder.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='index' type-id='type-id-5' visibility='default' filepath='include/drm/drm_encoder.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='possible_crtcs' type-id='type-id-1343' visibility='default' filepath='include/drm/drm_encoder.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='possible_clones' type-id='type-id-1343' visibility='default' filepath='include/drm/drm_encoder.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='crtc' type-id='type-id-4623' visibility='default' filepath='include/drm/drm_encoder.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='bridge' type-id='type-id-4773' visibility='default' filepath='include/drm/drm_encoder.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='funcs' type-id='type-id-4774' visibility='default' filepath='include/drm/drm_encoder.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='helper_private' type-id='type-id-4775' visibility='default' filepath='include/drm/drm_encoder.h' line='176' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_bridge' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/drm/drm_bridge.h' line='274' column='1' id='type-id-4776'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='type-id-4446' visibility='default' filepath='include/drm/drm_bridge.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='encoder' type-id='type-id-4490' visibility='default' filepath='include/drm/drm_bridge.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='next' type-id='type-id-4773' visibility='default' filepath='include/drm/drm_bridge.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='of_node' type-id='type-id-3543' visibility='default' filepath='include/drm/drm_bridge.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/drm/drm_bridge.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='timings' type-id='type-id-4777' visibility='default' filepath='include/drm/drm_bridge.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='funcs' type-id='type-id-4778' visibility='default' filepath='include/drm/drm_bridge.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='driver_private' type-id='type-id-15' visibility='default' filepath='include/drm/drm_bridge.h' line='296' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_bridge_timings' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/drm/drm_bridge.h' line='245' column='1' id='type-id-4779'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sampling_edge' type-id='type-id-7' visibility='default' filepath='include/drm/drm_bridge.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='setup_time_ps' type-id='type-id-7' visibility='default' filepath='include/drm/drm_bridge.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hold_time_ps' type-id='type-id-7' visibility='default' filepath='include/drm/drm_bridge.h' line='268' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_bridge_funcs' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/drm/drm_bridge.h' line='38' column='1' id='type-id-4780'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attach' type-id='type-id-4781' visibility='default' filepath='include/drm/drm_bridge.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='detach' type-id='type-id-4782' visibility='default' filepath='include/drm/drm_bridge.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mode_valid' type-id='type-id-4783' visibility='default' filepath='include/drm/drm_bridge.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mode_fixup' type-id='type-id-4784' visibility='default' filepath='include/drm/drm_bridge.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='disable' type-id='type-id-4782' visibility='default' filepath='include/drm/drm_bridge.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='post_disable' type-id='type-id-4782' visibility='default' filepath='include/drm/drm_bridge.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mode_set' type-id='type-id-4785' visibility='default' filepath='include/drm/drm_bridge.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pre_enable' type-id='type-id-4782' visibility='default' filepath='include/drm/drm_bridge.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='enable' type-id='type-id-4782' visibility='default' filepath='include/drm/drm_bridge.h' line='239' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_encoder_funcs' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/drm_encoder.h' line='39' column='1' id='type-id-4786'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reset' type-id='type-id-4787' visibility='default' filepath='include/drm/drm_encoder.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='destroy' type-id='type-id-4787' visibility='default' filepath='include/drm/drm_encoder.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='late_register' type-id='type-id-4788' visibility='default' filepath='include/drm/drm_encoder.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='early_unregister' type-id='type-id-4787' visibility='default' filepath='include/drm/drm_encoder.h' line='82' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_encoder_helper_funcs' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='466' column='1' id='type-id-4789'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dpms' type-id='type-id-4790' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mode_valid' type-id='type-id-4791' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mode_fixup' type-id='type-id-4792' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='prepare' type-id='type-id-4787' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='576' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='commit' type-id='type-id-4787' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mode_set' type-id='type-id-4793' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='atomic_mode_set' type-id='type-id-4794' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='638' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_crtc' type-id='type-id-4795' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='detect' type-id='type-id-4796' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='673' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='disable' type-id='type-id-4787' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='704' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='enable' type-id='type-id-4787' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='722' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='atomic_check' type-id='type-id-4797' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='760' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='drm_link_status' filepath='include/drm/drm_connector.h' line='174' column='1' id='type-id-4769'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='DRM_LINK_STATUS_GOOD' value='0'/>
+        <enumerator name='DRM_LINK_STATUS_BAD' value='1'/>
+      </enum-decl>
+      <class-decl name='drm_tv_connector_state' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='362' column='1' id='type-id-4770'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='subconnector' type-id='type-id-4798' visibility='default' filepath='include/drm/drm_connector.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='margins' type-id='type-id-4799' visibility='default' filepath='include/drm/drm_connector.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='mode' type-id='type-id-5' visibility='default' filepath='include/drm/drm_connector.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='brightness' type-id='type-id-5' visibility='default' filepath='include/drm/drm_connector.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='contrast' type-id='type-id-5' visibility='default' filepath='include/drm/drm_connector.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flicker_reduction' type-id='type-id-5' visibility='default' filepath='include/drm/drm_connector.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='overscan' type-id='type-id-5' visibility='default' filepath='include/drm/drm_connector.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='saturation' type-id='type-id-5' visibility='default' filepath='include/drm/drm_connector.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='hue' type-id='type-id-5' visibility='default' filepath='include/drm/drm_connector.h' line='376' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='drm_mode_subconnector' filepath='include/uapi/drm/drm_mode.h' line='325' column='1' id='type-id-4798'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='DRM_MODE_SUBCONNECTOR_Automatic' value='0'/>
+        <enumerator name='DRM_MODE_SUBCONNECTOR_Unknown' value='0'/>
+        <enumerator name='DRM_MODE_SUBCONNECTOR_DVID' value='3'/>
+        <enumerator name='DRM_MODE_SUBCONNECTOR_DVIA' value='4'/>
+        <enumerator name='DRM_MODE_SUBCONNECTOR_Composite' value='5'/>
+        <enumerator name='DRM_MODE_SUBCONNECTOR_SVIDEO' value='6'/>
+        <enumerator name='DRM_MODE_SUBCONNECTOR_Component' value='8'/>
+        <enumerator name='DRM_MODE_SUBCONNECTOR_SCART' value='9'/>
+      </enum-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/drm/drm_connector.h' line='364' column='1' id='type-id-4799'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='left' type-id='type-id-5' visibility='default' filepath='include/drm/drm_connector.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='right' type-id='type-id-5' visibility='default' filepath='include/drm/drm_connector.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='top' type-id='type-id-5' visibility='default' filepath='include/drm/drm_connector.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='bottom' type-id='type-id-5' visibility='default' filepath='include/drm/drm_connector.h' line='368' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='uint8_t' type-id='type-id-214' filepath='include/linux/types.h' line='107' column='1' id='type-id-4477'/>
+      <class-decl name='drm_connector_helper_funcs' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='782' column='1' id='type-id-4800'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_modes' type-id='type-id-4762' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='819' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='detect_ctx' type-id='type-id-4801' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='845' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mode_valid' type-id='type-id-4802' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='883' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='best_encoder' type-id='type-id-4803' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='914' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='atomic_best_encoder' type-id='type-id-4804' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='941' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='atomic_check' type-id='type-id-4805' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='975' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='atomic_commit' type-id='type-id-4764' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='990' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_cmdline_mode' size-in-bits='224' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='759' column='1' id='type-id-4488'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='specified' type-id='type-id-33' visibility='default' filepath='include/drm/drm_connector.h' line='760' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='refresh_specified' type-id='type-id-33' visibility='default' filepath='include/drm/drm_connector.h' line='761' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bpp_specified' type-id='type-id-33' visibility='default' filepath='include/drm/drm_connector.h' line='762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='xres' type-id='type-id-17' visibility='default' filepath='include/drm/drm_connector.h' line='763' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='yres' type-id='type-id-17' visibility='default' filepath='include/drm/drm_connector.h' line='763' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='bpp' type-id='type-id-17' visibility='default' filepath='include/drm/drm_connector.h' line='764' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='refresh' type-id='type-id-17' visibility='default' filepath='include/drm/drm_connector.h' line='765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='rb' type-id='type-id-33' visibility='default' filepath='include/drm/drm_connector.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='interlace' type-id='type-id-33' visibility='default' filepath='include/drm/drm_connector.h' line='767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='cvt' type-id='type-id-33' visibility='default' filepath='include/drm/drm_connector.h' line='768' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='184'>
+          <var-decl name='margins' type-id='type-id-33' visibility='default' filepath='include/drm/drm_connector.h' line='769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='force' type-id='type-id-4489' visibility='default' filepath='include/drm/drm_connector.h' line='770' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='drm_connector_force' filepath='include/drm/drm_connector.h' line='44' column='1' id='type-id-4489'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='DRM_FORCE_UNSPECIFIED' value='0'/>
+        <enumerator name='DRM_FORCE_OFF' value='1'/>
+        <enumerator name='DRM_FORCE_ON' value='2'/>
+        <enumerator name='DRM_FORCE_ON_DIGITAL' value='3'/>
+      </enum-decl>
+      <class-decl name='drm_tile_group' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='1215' column='1' id='type-id-4806'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='type-id-239' visibility='default' filepath='include/drm/drm_connector.h' line='1216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='type-id-4446' visibility='default' filepath='include/drm/drm_connector.h' line='1217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='id' type-id='type-id-17' visibility='default' filepath='include/drm/drm_connector.h' line='1218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='group_data' type-id='type-id-1186' visibility='default' filepath='include/drm/drm_connector.h' line='1219' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-108' size-in-bits='64' id='type-id-4726'/>
+      <pointer-type-def type-id='type-id-4455' size-in-bits='64' id='type-id-4574'/>
+      <pointer-type-def type-id='type-id-4807' size-in-bits='64' id='type-id-4659'/>
+      <qualified-type-def type-id='type-id-4658' const='yes' id='type-id-4808'/>
+      <pointer-type-def type-id='type-id-4808' size-in-bits='64' id='type-id-4657'/>
+      <qualified-type-def type-id='type-id-4780' const='yes' id='type-id-4809'/>
+      <pointer-type-def type-id='type-id-4809' size-in-bits='64' id='type-id-4778'/>
+      <qualified-type-def type-id='type-id-4779' const='yes' id='type-id-4810'/>
+      <pointer-type-def type-id='type-id-4810' size-in-bits='64' id='type-id-4777'/>
+      <qualified-type-def type-id='type-id-4616' const='yes' id='type-id-4811'/>
+      <pointer-type-def type-id='type-id-4811' size-in-bits='64' id='type-id-4614'/>
+      <qualified-type-def type-id='type-id-4756' const='yes' id='type-id-4812'/>
+      <pointer-type-def type-id='type-id-4812' size-in-bits='64' id='type-id-4484'/>
+      <qualified-type-def type-id='type-id-4800' const='yes' id='type-id-4813'/>
+      <pointer-type-def type-id='type-id-4813' size-in-bits='64' id='type-id-4487'/>
+      <qualified-type-def type-id='type-id-4768' const='yes' id='type-id-4814'/>
+      <pointer-type-def type-id='type-id-4814' size-in-bits='64' id='type-id-4815'/>
+      <qualified-type-def type-id='type-id-4666' const='yes' id='type-id-4816'/>
+      <pointer-type-def type-id='type-id-4816' size-in-bits='64' id='type-id-4627'/>
+      <qualified-type-def type-id='type-id-4695' const='yes' id='type-id-4817'/>
+      <pointer-type-def type-id='type-id-4817' size-in-bits='64' id='type-id-4629'/>
+      <qualified-type-def type-id='type-id-4692' const='yes' id='type-id-4818'/>
+      <pointer-type-def type-id='type-id-4818' size-in-bits='64' id='type-id-4819'/>
+      <qualified-type-def type-id='type-id-4549' const='yes' id='type-id-4820'/>
+      <pointer-type-def type-id='type-id-4820' size-in-bits='64' id='type-id-4821'/>
+      <qualified-type-def type-id='type-id-4786' const='yes' id='type-id-4822'/>
+      <pointer-type-def type-id='type-id-4822' size-in-bits='64' id='type-id-4774'/>
+      <qualified-type-def type-id='type-id-4789' const='yes' id='type-id-4823'/>
+      <pointer-type-def type-id='type-id-4823' size-in-bits='64' id='type-id-4775'/>
+      <qualified-type-def type-id='type-id-4707' const='yes' id='type-id-4824'/>
+      <pointer-type-def type-id='type-id-4824' size-in-bits='64' id='type-id-4612'/>
+      <qualified-type-def type-id='type-id-4598' const='yes' id='type-id-4825'/>
+      <pointer-type-def type-id='type-id-4825' size-in-bits='64' id='type-id-4596'/>
+      <pointer-type-def type-id='type-id-4826' size-in-bits='64' id='type-id-4589'/>
+      <qualified-type-def type-id='type-id-4599' const='yes' id='type-id-4827'/>
+      <pointer-type-def type-id='type-id-4827' size-in-bits='64' id='type-id-4597'/>
+      <qualified-type-def type-id='type-id-4461' const='yes' id='type-id-4828'/>
+      <pointer-type-def type-id='type-id-4828' size-in-bits='64' id='type-id-4829'/>
+      <qualified-type-def type-id='type-id-4566' const='yes' id='type-id-4830'/>
+      <pointer-type-def type-id='type-id-4830' size-in-bits='64' id='type-id-4542'/>
+      <qualified-type-def type-id='type-id-4587' const='yes' id='type-id-4831'/>
+      <pointer-type-def type-id='type-id-4831' size-in-bits='64' id='type-id-4582'/>
+      <qualified-type-def type-id='type-id-4605' const='yes' id='type-id-4832'/>
+      <pointer-type-def type-id='type-id-4832' size-in-bits='64' id='type-id-4584'/>
+      <qualified-type-def type-id='type-id-4604' const='yes' id='type-id-4833'/>
+      <pointer-type-def type-id='type-id-4833' size-in-bits='64' id='type-id-4834'/>
+      <qualified-type-def type-id='type-id-4638' const='yes' id='type-id-4835'/>
+      <pointer-type-def type-id='type-id-4835' size-in-bits='64' id='type-id-4634'/>
+      <qualified-type-def type-id='type-id-4664' const='yes' id='type-id-4836'/>
+      <pointer-type-def type-id='type-id-4836' size-in-bits='64' id='type-id-4636'/>
+      <qualified-type-def type-id='type-id-4650' const='yes' id='type-id-4837'/>
+      <pointer-type-def type-id='type-id-4837' size-in-bits='64' id='type-id-4838'/>
+      <qualified-type-def type-id='type-id-4747' const='yes' id='type-id-4839'/>
+      <pointer-type-def type-id='type-id-4839' size-in-bits='64' id='type-id-4840'/>
+      <qualified-type-def type-id='type-id-4746' const='yes' id='type-id-4841'/>
+      <pointer-type-def type-id='type-id-4841' size-in-bits='64' id='type-id-4842'/>
+      <qualified-type-def type-id='type-id-4748' const='yes' id='type-id-4843'/>
+      <pointer-type-def type-id='type-id-4843' size-in-bits='64' id='type-id-4844'/>
+      <pointer-type-def type-id='type-id-4456' size-in-bits='64' id='type-id-4845'/>
+      <pointer-type-def type-id='type-id-4846' size-in-bits='64' id='type-id-4530'/>
+      <pointer-type-def type-id='type-id-4457' size-in-bits='64' id='type-id-4847'/>
+      <pointer-type-def type-id='type-id-4656' size-in-bits='64' id='type-id-4651'/>
+      <pointer-type-def type-id='type-id-4572' size-in-bits='64' id='type-id-4501'/>
+      <pointer-type-def type-id='type-id-4458' size-in-bits='64' id='type-id-4583'/>
+      <pointer-type-def type-id='type-id-4848' size-in-bits='64' id='type-id-4593'/>
+      <pointer-type-def type-id='type-id-4776' size-in-bits='64' id='type-id-4773'/>
+      <pointer-type-def type-id='type-id-4619' size-in-bits='64' id='type-id-4608'/>
+      <pointer-type-def type-id='type-id-4607' size-in-bits='64' id='type-id-4620'/>
+      <pointer-type-def type-id='type-id-4603' size-in-bits='64' id='type-id-4849'/>
+      <pointer-type-def type-id='type-id-4480' size-in-bits='64' id='type-id-4444'/>
+      <pointer-type-def type-id='type-id-4444' size-in-bits='64' id='type-id-4624'/>
+      <pointer-type-def type-id='type-id-4768' size-in-bits='64' id='type-id-4491'/>
+      <pointer-type-def type-id='type-id-4850' size-in-bits='64' id='type-id-4763'/>
+      <pointer-type-def type-id='type-id-4625' size-in-bits='64' id='type-id-4623'/>
+      <pointer-type-def type-id='type-id-4851' size-in-bits='64' id='type-id-4795'/>
+      <pointer-type-def type-id='type-id-4459' size-in-bits='64' id='type-id-4655'/>
+      <pointer-type-def type-id='type-id-4705' size-in-bits='64' id='type-id-4704'/>
+      <pointer-type-def type-id='type-id-4692' size-in-bits='64' id='type-id-4630'/>
+      <pointer-type-def type-id='type-id-4852' size-in-bits='64' id='type-id-4676'/>
+      <pointer-type-def type-id='type-id-4494' size-in-bits='64' id='type-id-4446'/>
+      <pointer-type-def type-id='type-id-4460' size-in-bits='64' id='type-id-4499'/>
+      <pointer-type-def type-id='type-id-4549' size-in-bits='64' id='type-id-4445'/>
+      <pointer-type-def type-id='type-id-4445' size-in-bits='64' id='type-id-4853'/>
+      <pointer-type-def type-id='type-id-4508' size-in-bits='64' id='type-id-4495'/>
+      <pointer-type-def type-id='type-id-4772' size-in-bits='64' id='type-id-4490'/>
+      <pointer-type-def type-id='type-id-4854' size-in-bits='64' id='type-id-4803'/>
+      <pointer-type-def type-id='type-id-4855' size-in-bits='64' id='type-id-4804'/>
+      <pointer-type-def type-id='type-id-4689' size-in-bits='64' id='type-id-4688'/>
+      <pointer-type-def type-id='type-id-4606' size-in-bits='64' id='type-id-4507'/>
+      <pointer-type-def type-id='type-id-4706' size-in-bits='64' id='type-id-4856'/>
+      <pointer-type-def type-id='type-id-4856' size-in-bits='64' id='type-id-4611'/>
+      <pointer-type-def type-id='type-id-4621' size-in-bits='64' id='type-id-4610'/>
+      <pointer-type-def type-id='type-id-4610' size-in-bits='64' id='type-id-4857'/>
+      <pointer-type-def type-id='type-id-4710' size-in-bits='64' id='type-id-4858'/>
+      <pointer-type-def type-id='type-id-4711' size-in-bits='64' id='type-id-4859'/>
+      <pointer-type-def type-id='type-id-4545' size-in-bits='64' id='type-id-4615'/>
+      <pointer-type-def type-id='type-id-4595' size-in-bits='64' id='type-id-4609'/>
+      <pointer-type-def type-id='type-id-4860' size-in-bits='64' id='type-id-4588'/>
+      <pointer-type-def type-id='type-id-4461' size-in-bits='64' id='type-id-4468'/>
+      <pointer-type-def type-id='type-id-4861' size-in-bits='64' id='type-id-4531'/>
+      <pointer-type-def type-id='type-id-4862' size-in-bits='64' id='type-id-4535'/>
+      <pointer-type-def type-id='type-id-4863' size-in-bits='64' id='type-id-4527'/>
+      <pointer-type-def type-id='type-id-4578' size-in-bits='64' id='type-id-4577'/>
+      <pointer-type-def type-id='type-id-4570' size-in-bits='64' id='type-id-4568'/>
+      <pointer-type-def type-id='type-id-4462' size-in-bits='64' id='type-id-4504'/>
+      <pointer-type-def type-id='type-id-4463' size-in-bits='64' id='type-id-4497'/>
+      <pointer-type-def type-id='type-id-4548' size-in-bits='64' id='type-id-4496'/>
+      <pointer-type-def type-id='type-id-4565' size-in-bits='64' id='type-id-4864'/>
+      <pointer-type-def type-id='type-id-4622' size-in-bits='64' id='type-id-4865'/>
+      <pointer-type-def type-id='type-id-4585' size-in-bits='64' id='type-id-4581'/>
+      <pointer-type-def type-id='type-id-4580' size-in-bits='64' id='type-id-4586'/>
+      <pointer-type-def type-id='type-id-4486' size-in-bits='64' id='type-id-4552'/>
+      <pointer-type-def type-id='type-id-4684' size-in-bits='64' id='type-id-4693'/>
+      <pointer-type-def type-id='type-id-4632' size-in-bits='64' id='type-id-4626'/>
+      <pointer-type-def type-id='type-id-4650' size-in-bits='64' id='type-id-4637'/>
+      <pointer-type-def type-id='type-id-4866' size-in-bits='64' id='type-id-4643'/>
+      <pointer-type-def type-id='type-id-4556' size-in-bits='64' id='type-id-4867'/>
+      <pointer-type-def type-id='type-id-4554' size-in-bits='64' id='type-id-4470'/>
+      <pointer-type-def type-id='type-id-4694' size-in-bits='64' id='type-id-4485'/>
+      <pointer-type-def type-id='type-id-4464' size-in-bits='64' id='type-id-4502'/>
+      <pointer-type-def type-id='type-id-4806' size-in-bits='64' id='type-id-4492'/>
+      <pointer-type-def type-id='type-id-4571' size-in-bits='64' id='type-id-4500'/>
+      <pointer-type-def type-id='type-id-4465' size-in-bits='64' id='type-id-4506'/>
+      <pointer-type-def type-id='type-id-4466' size-in-bits='64' id='type-id-4771'/>
+      <pointer-type-def type-id='type-id-4868' size-in-bits='64' id='type-id-4759'/>
+      <pointer-type-def type-id='type-id-4869' size-in-bits='64' id='type-id-4796'/>
+      <pointer-type-def type-id='type-id-4870' size-in-bits='64' id='type-id-4783'/>
+      <pointer-type-def type-id='type-id-4871' size-in-bits='64' id='type-id-4802'/>
+      <pointer-type-def type-id='type-id-4872' size-in-bits='64' id='type-id-4697'/>
+      <pointer-type-def type-id='type-id-4873' size-in-bits='64' id='type-id-4590'/>
+      <pointer-type-def type-id='type-id-4874' size-in-bits='64' id='type-id-4791'/>
+      <pointer-type-def type-id='type-id-4751' size-in-bits='64' id='type-id-4875'/>
+      <pointer-type-def type-id='type-id-4717' size-in-bits='64' id='type-id-4876'/>
+      <pointer-type-def type-id='type-id-4749' size-in-bits='64' id='type-id-4877'/>
+      <pointer-type-def type-id='type-id-4727' size-in-bits='64' id='type-id-4719'/>
+      <pointer-type-def type-id='type-id-4712' size-in-bits='64' id='type-id-4613'/>
+      <pointer-type-def type-id='type-id-4730' size-in-bits='64' id='type-id-4720'/>
+      <pointer-type-def type-id='type-id-4713' size-in-bits='64' id='type-id-4878'/>
+      <pointer-type-def type-id='type-id-4724' size-in-bits='64' id='type-id-4718'/>
+      <pointer-type-def type-id='type-id-4879' size-in-bits='64' id='type-id-4781'/>
+      <pointer-type-def type-id='type-id-4880' size-in-bits='64' id='type-id-4618'/>
+      <pointer-type-def type-id='type-id-4881' size-in-bits='64' id='type-id-4762'/>
+      <pointer-type-def type-id='type-id-4882' size-in-bits='64' id='type-id-4766'/>
+      <pointer-type-def type-id='type-id-4883' size-in-bits='64' id='type-id-4805'/>
+      <pointer-type-def type-id='type-id-4884' size-in-bits='64' id='type-id-4765'/>
+      <pointer-type-def type-id='type-id-4885' size-in-bits='64' id='type-id-4801'/>
+      <pointer-type-def type-id='type-id-4886' size-in-bits='64' id='type-id-4761'/>
+      <pointer-type-def type-id='type-id-4887' size-in-bits='64' id='type-id-4757'/>
+      <pointer-type-def type-id='type-id-4888' size-in-bits='64' id='type-id-4760'/>
+      <pointer-type-def type-id='type-id-4889' size-in-bits='64' id='type-id-4680'/>
+      <pointer-type-def type-id='type-id-4890' size-in-bits='64' id='type-id-4681'/>
+      <pointer-type-def type-id='type-id-4891' size-in-bits='64' id='type-id-4679'/>
+      <pointer-type-def type-id='type-id-4892' size-in-bits='64' id='type-id-4702'/>
+      <pointer-type-def type-id='type-id-4893' size-in-bits='64' id='type-id-4678'/>
+      <pointer-type-def type-id='type-id-4894' size-in-bits='64' id='type-id-4699'/>
+      <pointer-type-def type-id='type-id-4895' size-in-bits='64' id='type-id-4668'/>
+      <pointer-type-def type-id='type-id-4896' size-in-bits='64' id='type-id-4669'/>
+      <pointer-type-def type-id='type-id-4897' size-in-bits='64' id='type-id-4673'/>
+      <pointer-type-def type-id='type-id-4898' size-in-bits='64' id='type-id-4674'/>
+      <pointer-type-def type-id='type-id-4899' size-in-bits='64' id='type-id-4701'/>
+      <pointer-type-def type-id='type-id-4900' size-in-bits='64' id='type-id-4675'/>
+      <pointer-type-def type-id='type-id-4901' size-in-bits='64' id='type-id-4670'/>
+      <pointer-type-def type-id='type-id-4902' size-in-bits='64' id='type-id-4700'/>
+      <pointer-type-def type-id='type-id-4903' size-in-bits='64' id='type-id-4671'/>
+      <pointer-type-def type-id='type-id-4904' size-in-bits='64' id='type-id-4518'/>
+      <pointer-type-def type-id='type-id-4905' size-in-bits='64' id='type-id-4591'/>
+      <pointer-type-def type-id='type-id-4906' size-in-bits='64' id='type-id-4592'/>
+      <pointer-type-def type-id='type-id-4907' size-in-bits='64' id='type-id-4510'/>
+      <pointer-type-def type-id='type-id-4908' size-in-bits='64' id='type-id-4529'/>
+      <pointer-type-def type-id='type-id-4909' size-in-bits='64' id='type-id-4521'/>
+      <pointer-type-def type-id='type-id-4910' size-in-bits='64' id='type-id-4528'/>
+      <pointer-type-def type-id='type-id-4911' size-in-bits='64' id='type-id-4519'/>
+      <pointer-type-def type-id='type-id-4912' size-in-bits='64' id='type-id-4544'/>
+      <pointer-type-def type-id='type-id-4913' size-in-bits='64' id='type-id-4514'/>
+      <pointer-type-def type-id='type-id-4914' size-in-bits='64' id='type-id-4509'/>
+      <pointer-type-def type-id='type-id-4569' size-in-bits='64' id='type-id-4543'/>
+      <pointer-type-def type-id='type-id-4915' size-in-bits='64' id='type-id-4788'/>
+      <pointer-type-def type-id='type-id-4916' size-in-bits='64' id='type-id-4797'/>
+      <pointer-type-def type-id='type-id-4917' size-in-bits='64' id='type-id-4708'/>
+      <pointer-type-def type-id='type-id-4918' size-in-bits='64' id='type-id-4539'/>
+      <pointer-type-def type-id='type-id-4919' size-in-bits='64' id='type-id-4541'/>
+      <pointer-type-def type-id='type-id-4920' size-in-bits='64' id='type-id-4540'/>
+      <pointer-type-def type-id='type-id-4921' size-in-bits='64' id='type-id-4601'/>
+      <pointer-type-def type-id='type-id-4922' size-in-bits='64' id='type-id-4602'/>
+      <pointer-type-def type-id='type-id-4923' size-in-bits='64' id='type-id-4532'/>
+      <pointer-type-def type-id='type-id-4924' size-in-bits='64' id='type-id-4524'/>
+      <pointer-type-def type-id='type-id-4925' size-in-bits='64' id='type-id-4538'/>
+      <pointer-type-def type-id='type-id-4926' size-in-bits='64' id='type-id-4522'/>
+      <pointer-type-def type-id='type-id-4927' size-in-bits='64' id='type-id-4672'/>
+      <pointer-type-def type-id='type-id-4928' size-in-bits='64' id='type-id-4647'/>
+      <pointer-type-def type-id='type-id-4929' size-in-bits='64' id='type-id-4646'/>
+      <pointer-type-def type-id='type-id-4930' size-in-bits='64' id='type-id-4639'/>
+      <pointer-type-def type-id='type-id-4931' size-in-bits='64' id='type-id-4640'/>
+      <pointer-type-def type-id='type-id-4932' size-in-bits='64' id='type-id-4665'/>
+      <pointer-type-def type-id='type-id-4933' size-in-bits='64' id='type-id-4645'/>
+      <pointer-type-def type-id='type-id-4934' size-in-bits='64' id='type-id-4642'/>
+      <pointer-type-def type-id='type-id-4935' size-in-bits='64' id='type-id-4737'/>
+      <pointer-type-def type-id='type-id-4936' size-in-bits='64' id='type-id-4735'/>
+      <pointer-type-def type-id='type-id-4937' size-in-bits='64' id='type-id-4742'/>
+      <pointer-type-def type-id='type-id-4938' size-in-bits='64' id='type-id-4731'/>
+      <pointer-type-def type-id='type-id-4939' size-in-bits='64' id='type-id-4743'/>
+      <pointer-type-def type-id='type-id-4940' size-in-bits='64' id='type-id-4744'/>
+      <pointer-type-def type-id='type-id-4941' size-in-bits='64' id='type-id-4734'/>
+      <pointer-type-def type-id='type-id-4942' size-in-bits='64' id='type-id-4738'/>
+      <pointer-type-def type-id='type-id-4943' size-in-bits='64' id='type-id-4736'/>
+      <pointer-type-def type-id='type-id-239' size-in-bits='64' id='type-id-4944'/>
+      <pointer-type-def type-id='type-id-682' size-in-bits='64' id='type-id-4945'/>
+      <pointer-type-def type-id='type-id-4946' size-in-bits='64' id='type-id-4661'/>
+      <pointer-type-def type-id='type-id-4467' size-in-bits='64' id='type-id-4947'/>
+      <pointer-type-def type-id='type-id-4948' size-in-bits='64' id='type-id-4533'/>
+      <pointer-type-def type-id='type-id-4949' size-in-bits='64' id='type-id-4534'/>
+      <pointer-type-def type-id='type-id-4950' size-in-bits='64' id='type-id-4660'/>
+      <pointer-type-def type-id='type-id-4951' size-in-bits='64' id='type-id-4784'/>
+      <pointer-type-def type-id='type-id-4952' size-in-bits='64' id='type-id-4698'/>
+      <pointer-type-def type-id='type-id-4953' size-in-bits='64' id='type-id-4517'/>
+      <pointer-type-def type-id='type-id-4954' size-in-bits='64' id='type-id-4516'/>
+      <pointer-type-def type-id='type-id-4955' size-in-bits='64' id='type-id-4792'/>
+      <pointer-type-def type-id='type-id-4956' size-in-bits='64' id='type-id-4709'/>
+      <pointer-type-def type-id='type-id-4957' size-in-bits='64' id='type-id-4649'/>
+      <pointer-type-def type-id='type-id-4958' size-in-bits='64' id='type-id-4732'/>
+      <pointer-type-def type-id='type-id-4959' size-in-bits='64' id='type-id-4733'/>
+      <pointer-type-def type-id='type-id-4960' size-in-bits='64' id='type-id-4683'/>
+      <pointer-type-def type-id='type-id-4961' size-in-bits='64' id='type-id-4513'/>
+      <pointer-type-def type-id='type-id-688' size-in-bits='64' id='type-id-4962'/>
+      <pointer-type-def type-id='type-id-4493' size-in-bits='64' id='type-id-4628'/>
+      <pointer-type-def type-id='type-id-1343' size-in-bits='64' id='type-id-4633'/>
+      <pointer-type-def type-id='type-id-2439' size-in-bits='64' id='type-id-4555'/>
+      <pointer-type-def type-id='type-id-4559' size-in-bits='64' id='type-id-4963'/>
+      <pointer-type-def type-id='type-id-4562' size-in-bits='64' id='type-id-4560'/>
+      <pointer-type-def type-id='type-id-4964' size-in-bits='64' id='type-id-4687'/>
+      <pointer-type-def type-id='type-id-4965' size-in-bits='64' id='type-id-4662'/>
+      <pointer-type-def type-id='type-id-4966' size-in-bits='64' id='type-id-4663'/>
+      <pointer-type-def type-id='type-id-4967' size-in-bits='64' id='type-id-4594'/>
+      <pointer-type-def type-id='type-id-4968' size-in-bits='64' id='type-id-4782'/>
+      <pointer-type-def type-id='type-id-4969' size-in-bits='64' id='type-id-4785'/>
+      <pointer-type-def type-id='type-id-4970' size-in-bits='64' id='type-id-4617'/>
+      <pointer-type-def type-id='type-id-4971' size-in-bits='64' id='type-id-4758'/>
+      <pointer-type-def type-id='type-id-4972' size-in-bits='64' id='type-id-4764'/>
+      <pointer-type-def type-id='type-id-4973' size-in-bits='64' id='type-id-4667'/>
+      <pointer-type-def type-id='type-id-4974' size-in-bits='64' id='type-id-4677'/>
+      <pointer-type-def type-id='type-id-4975' size-in-bits='64' id='type-id-4696'/>
+      <pointer-type-def type-id='type-id-4976' size-in-bits='64' id='type-id-4512'/>
+      <pointer-type-def type-id='type-id-4977' size-in-bits='64' id='type-id-4511'/>
+      <pointer-type-def type-id='type-id-4978' size-in-bits='64' id='type-id-4520'/>
+      <pointer-type-def type-id='type-id-4979' size-in-bits='64' id='type-id-4515'/>
+      <pointer-type-def type-id='type-id-4980' size-in-bits='64' id='type-id-4787'/>
+      <pointer-type-def type-id='type-id-4981' size-in-bits='64' id='type-id-4794'/>
+      <pointer-type-def type-id='type-id-4982' size-in-bits='64' id='type-id-4793'/>
+      <pointer-type-def type-id='type-id-4983' size-in-bits='64' id='type-id-4790'/>
+      <pointer-type-def type-id='type-id-4984' size-in-bits='64' id='type-id-4600'/>
+      <pointer-type-def type-id='type-id-4985' size-in-bits='64' id='type-id-4523'/>
+      <pointer-type-def type-id='type-id-4986' size-in-bits='64' id='type-id-4525'/>
+      <pointer-type-def type-id='type-id-4987' size-in-bits='64' id='type-id-4537'/>
+      <pointer-type-def type-id='type-id-4988' size-in-bits='64' id='type-id-4641'/>
+      <pointer-type-def type-id='type-id-4989' size-in-bits='64' id='type-id-4644'/>
+      <pointer-type-def type-id='type-id-4990' size-in-bits='64' id='type-id-4558'/>
+      <pointer-type-def type-id='type-id-4991' size-in-bits='64' id='type-id-4767'/>
+      <pointer-type-def type-id='type-id-4992' size-in-bits='64' id='type-id-4682'/>
+      <pointer-type-def type-id='type-id-4993' size-in-bits='64' id='type-id-4648'/>
+      <pointer-type-def type-id='type-id-4994' size-in-bits='64' id='type-id-4526'/>
+      <pointer-type-def type-id='type-id-4995' size-in-bits='64' id='type-id-4557'/>
+      <pointer-type-def type-id='type-id-4996' size-in-bits='64' id='type-id-4728'/>
+      <pointer-type-def type-id='type-id-4997' size-in-bits='64' id='type-id-4740'/>
+      <pointer-type-def type-id='type-id-4998' size-in-bits='64' id='type-id-4739'/>
+      <pointer-type-def type-id='type-id-4999' size-in-bits='64' id='type-id-4741'/>
+      <pointer-type-def type-id='type-id-5000' size-in-bits='64' id='type-id-4745'/>
+      <pointer-type-def type-id='type-id-5001' size-in-bits='64' id='type-id-4729'/>
+      <pointer-type-def type-id='type-id-5002' size-in-bits='64' id='type-id-4725'/>
+      <pointer-type-def type-id='type-id-5003' size-in-bits='64' id='type-id-4553'/>
+      <pointer-type-def type-id='type-id-5004' size-in-bits='64' id='type-id-4536'/>
+      <qualified-type-def type-id='type-id-5' volatile='yes' id='type-id-4579'/>
+      <function-decl name='drm_helper_probe_single_connector_modes' mangled-name='drm_helper_probe_single_connector_modes' filepath='drivers/gpu/drm/drm_probe_helper.c' line='387' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_helper_probe_single_connector_modes'>
+        <parameter type-id='type-id-4444' name='connector' filepath='drivers/gpu/drm/drm_probe_helper.c' line='387' column='1'/>
+        <parameter type-id='type-id-1343' name='maxX' filepath='drivers/gpu/drm/drm_probe_helper.c' line='388' column='1'/>
+        <parameter type-id='type-id-1343' name='maxY' filepath='drivers/gpu/drm/drm_probe_helper.c' line='388' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='drm_kms_helper_hotplug_event' mangled-name='drm_kms_helper_hotplug_event' filepath='drivers/gpu/drm/drm_probe_helper.c' line='564' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_kms_helper_hotplug_event'>
+        <parameter type-id='type-id-4446' name='dev' filepath='drivers/gpu/drm/drm_probe_helper.c' line='564' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='drm_helper_hpd_irq_event' mangled-name='drm_helper_hpd_irq_event' filepath='drivers/gpu/drm/drm_probe_helper.c' line='772' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_helper_hpd_irq_event'>
+        <parameter type-id='type-id-4446' name='dev' filepath='drivers/gpu/drm/drm_probe_helper.c' line='772' column='1'/>
+        <return type-id='type-id-33'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-4807'>
+        <parameter type-id='type-id-4651'/>
+        <return type-id='type-id-4'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4826'>
+        <parameter type-id='type-id-4834'/>
+        <return type-id='type-id-4596'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4846'>
+        <parameter type-id='type-id-4446'/>
+        <parameter type-id='type-id-4468'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-4845'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4848'>
+        <parameter type-id='type-id-4446'/>
+        <return type-id='type-id-4583'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4850'>
+        <parameter type-id='type-id-4444'/>
+        <return type-id='type-id-4491'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4851'>
+        <parameter type-id='type-id-4490'/>
+        <return type-id='type-id-4623'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4852'>
+        <parameter type-id='type-id-4623'/>
+        <return type-id='type-id-4630'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4854'>
+        <parameter type-id='type-id-4444'/>
+        <return type-id='type-id-4490'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4855'>
+        <parameter type-id='type-id-4444'/>
+        <parameter type-id='type-id-4491'/>
+        <return type-id='type-id-4490'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4860'>
+        <parameter type-id='type-id-4446'/>
+        <parameter type-id='type-id-4615'/>
+        <parameter type-id='type-id-4834'/>
+        <return type-id='type-id-4609'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4861'>
+        <parameter type-id='type-id-4446'/>
+        <parameter type-id='type-id-4845'/>
+        <return type-id='type-id-4468'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4862'>
+        <parameter type-id='type-id-4446'/>
+        <parameter type-id='type-id-4847'/>
+        <parameter type-id='type-id-922'/>
+        <return type-id='type-id-4468'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4863'>
+        <parameter type-id='type-id-4446'/>
+        <parameter type-id='type-id-84'/>
+        <return type-id='type-id-4468'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4866'>
+        <parameter type-id='type-id-4626'/>
+        <return type-id='type-id-4637'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4868'>
+        <parameter type-id='type-id-4444'/>
+        <parameter type-id='type-id-33'/>
+        <return type-id='type-id-4482'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4869'>
+        <parameter type-id='type-id-4490'/>
+        <parameter type-id='type-id-4444'/>
+        <return type-id='type-id-4482'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4870'>
+        <parameter type-id='type-id-4773'/>
+        <parameter type-id='type-id-4821'/>
+        <return type-id='type-id-4550'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4871'>
+        <parameter type-id='type-id-4444'/>
+        <parameter type-id='type-id-4445'/>
+        <return type-id='type-id-4550'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4872'>
+        <parameter type-id='type-id-4623'/>
+        <parameter type-id='type-id-4821'/>
+        <return type-id='type-id-4550'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4873'>
+        <parameter type-id='type-id-4446'/>
+        <parameter type-id='type-id-4821'/>
+        <return type-id='type-id-4550'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4874'>
+        <parameter type-id='type-id-4490'/>
+        <parameter type-id='type-id-4821'/>
+        <return type-id='type-id-4550'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4879'>
+        <parameter type-id='type-id-4773'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4880'>
+        <parameter type-id='type-id-4620'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4881'>
+        <parameter type-id='type-id-4444'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4882'>
+        <parameter type-id='type-id-4444'/>
+        <parameter type-id='type-id-4815'/>
+        <parameter type-id='type-id-4470'/>
+        <parameter type-id='type-id-4555'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4883'>
+        <parameter type-id='type-id-4444'/>
+        <parameter type-id='type-id-4491'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4884'>
+        <parameter type-id='type-id-4444'/>
+        <parameter type-id='type-id-4491'/>
+        <parameter type-id='type-id-4470'/>
+        <parameter type-id='type-id-2439'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4885'>
+        <parameter type-id='type-id-4444'/>
+        <parameter type-id='type-id-4581'/>
+        <parameter type-id='type-id-33'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4886'>
+        <parameter type-id='type-id-4444'/>
+        <parameter type-id='type-id-4470'/>
+        <parameter type-id='type-id-2439'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4887'>
+        <parameter type-id='type-id-4444'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4888'>
+        <parameter type-id='type-id-4444' name='connector'/>
+        <parameter type-id='type-id-1343' name='maxX'/>
+        <parameter type-id='type-id-1343' name='maxY'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4889'>
+        <parameter type-id='type-id-4623'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4890'>
+        <parameter type-id='type-id-4623'/>
+        <parameter type-id='type-id-4'/>
+        <parameter type-id='type-id-3056'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4891'>
+        <parameter type-id='type-id-4623'/>
+        <parameter type-id='type-id-4819'/>
+        <parameter type-id='type-id-4470'/>
+        <parameter type-id='type-id-4555'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4892'>
+        <parameter type-id='type-id-4623'/>
+        <parameter type-id='type-id-4630'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4893'>
+        <parameter type-id='type-id-4623'/>
+        <parameter type-id='type-id-4630'/>
+        <parameter type-id='type-id-4470'/>
+        <parameter type-id='type-id-2439'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4894'>
+        <parameter type-id='type-id-4623'/>
+        <parameter type-id='type-id-4445'/>
+        <parameter type-id='type-id-4445'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-4609'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4895'>
+        <parameter type-id='type-id-4623'/>
+        <parameter type-id='type-id-4615'/>
+        <parameter type-id='type-id-1343'/>
+        <parameter type-id='type-id-1343'/>
+        <parameter type-id='type-id-1343'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4896'>
+        <parameter type-id='type-id-4623'/>
+        <parameter type-id='type-id-4615'/>
+        <parameter type-id='type-id-1343'/>
+        <parameter type-id='type-id-1343'/>
+        <parameter type-id='type-id-1343'/>
+        <parameter type-id='type-id-1631'/>
+        <parameter type-id='type-id-1631'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4897'>
+        <parameter type-id='type-id-4623'/>
+        <parameter type-id='type-id-4609'/>
+        <parameter type-id='type-id-4693'/>
+        <parameter type-id='type-id-1343'/>
+        <parameter type-id='type-id-4581'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4898'>
+        <parameter type-id='type-id-4623'/>
+        <parameter type-id='type-id-4609'/>
+        <parameter type-id='type-id-4693'/>
+        <parameter type-id='type-id-1343'/>
+        <parameter type-id='type-id-1343'/>
+        <parameter type-id='type-id-4581'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4899'>
+        <parameter type-id='type-id-4623'/>
+        <parameter type-id='type-id-4609'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-4703'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4900'>
+        <parameter type-id='type-id-4623'/>
+        <parameter type-id='type-id-4470'/>
+        <parameter type-id='type-id-2439'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4901'>
+        <parameter type-id='type-id-4623'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4902'>
+        <parameter type-id='type-id-4623'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-4609'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4903'>
+        <parameter type-id='type-id-4623'/>
+        <parameter type-id='type-id-4962'/>
+        <parameter type-id='type-id-4962'/>
+        <parameter type-id='type-id-4962'/>
+        <parameter type-id='type-id-1343'/>
+        <parameter type-id='type-id-4581'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4904'>
+        <parameter type-id='type-id-4446'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4905'>
+        <parameter type-id='type-id-4446'/>
+        <parameter type-id='type-id-4583'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4906'>
+        <parameter type-id='type-id-4446'/>
+        <parameter type-id='type-id-4583'/>
+        <parameter type-id='type-id-33'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4907'>
+        <parameter type-id='type-id-4446'/>
+        <parameter type-id='type-id-4615'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4908'>
+        <parameter type-id='type-id-4446'/>
+        <parameter type-id='type-id-4615'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-4633'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4909'>
+        <parameter type-id='type-id-4446'/>
+        <parameter type-id='type-id-4615'/>
+        <parameter type-id='type-id-33'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4910'>
+        <parameter type-id='type-id-4446'/>
+        <parameter type-id='type-id-4615'/>
+        <parameter type-id='type-id-1343'/>
+        <parameter type-id='type-id-1343'/>
+        <parameter type-id='type-id-666'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4911'>
+        <parameter type-id='type-id-4446'/>
+        <parameter type-id='type-id-4497'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4912'>
+        <parameter type-id='type-id-4446'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4913'>
+        <parameter type-id='type-id-4446'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4914'>
+        <parameter type-id='type-id-4446'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4569'>
+        <parameter type-id='type-id-4446'/>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-4615'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4915'>
+        <parameter type-id='type-id-4490'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4916'>
+        <parameter type-id='type-id-4490'/>
+        <parameter type-id='type-id-4630'/>
+        <parameter type-id='type-id-4491'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4917'>
+        <parameter type-id='type-id-4507'/>
+        <parameter type-id='type-id-4858'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4918'>
+        <parameter type-id='type-id-4615'/>
+        <parameter type-id='type-id-4446'/>
+        <parameter type-id='type-id-4864'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4919'>
+        <parameter type-id='type-id-4615'/>
+        <parameter type-id='type-id-4446'/>
+        <parameter type-id='type-id-1343'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4920'>
+        <parameter type-id='type-id-4615'/>
+        <parameter type-id='type-id-4446'/>
+        <parameter type-id='type-id-1343'/>
+        <parameter type-id='type-id-4555'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4921'>
+        <parameter type-id='type-id-4609'/>
+        <parameter type-id='type-id-4615'/>
+        <parameter type-id='type-id-482'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4922'>
+        <parameter type-id='type-id-4609'/>
+        <parameter type-id='type-id-4615'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-4849'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4923'>
+        <parameter type-id='type-id-4468'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4924'>
+        <parameter type-id='type-id-4468'/>
+        <parameter type-id='type-id-4615'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4925'>
+        <parameter type-id='type-id-4468'/>
+        <parameter type-id='type-id-1209'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4926'>
+        <parameter type-id='type-id-4496'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4927'>
+        <parameter type-id='type-id-4865'/>
+        <parameter type-id='type-id-4581'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4928'>
+        <parameter type-id='type-id-4626'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4929'>
+        <parameter type-id='type-id-4626'/>
+        <parameter type-id='type-id-4838'/>
+        <parameter type-id='type-id-4470'/>
+        <parameter type-id='type-id-4555'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4930'>
+        <parameter type-id='type-id-4626'/>
+        <parameter type-id='type-id-4623'/>
+        <parameter type-id='type-id-4609'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-1343'/>
+        <parameter type-id='type-id-1343'/>
+        <parameter type-id='type-id-1343'/>
+        <parameter type-id='type-id-1343'/>
+        <parameter type-id='type-id-4581'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4931'>
+        <parameter type-id='type-id-4626'/>
+        <parameter type-id='type-id-4581'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4932'>
+        <parameter type-id='type-id-4626'/>
+        <parameter type-id='type-id-4637'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4933'>
+        <parameter type-id='type-id-4626'/>
+        <parameter type-id='type-id-4637'/>
+        <parameter type-id='type-id-4470'/>
+        <parameter type-id='type-id-2439'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4934'>
+        <parameter type-id='type-id-4626'/>
+        <parameter type-id='type-id-4470'/>
+        <parameter type-id='type-id-2439'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4935'>
+        <parameter type-id='type-id-4876'/>
+        <parameter type-id='type-id-4613'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4936'>
+        <parameter type-id='type-id-4613'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4937'>
+        <parameter type-id='type-id-4613'/>
+        <parameter type-id='type-id-4877'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4938'>
+        <parameter type-id='type-id-4613'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4939'>
+        <parameter type-id='type-id-4613'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4940'>
+        <parameter type-id='type-id-4613'/>
+        <parameter type-id='type-id-1209'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4941'>
+        <parameter type-id='type-id-4878'/>
+        <parameter type-id='type-id-4613'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4942'>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-4613'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4943'>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-4613'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4946'>
+        <parameter type-id='type-id-4651'/>
+        <parameter type-id='type-id-33'/>
+        <parameter type-id='type-id-192'/>
+        <return type-id='type-id-192'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4948'>
+        <parameter type-id='type-id-4468'/>
+        <return type-id='type-id-4947'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4949'>
+        <parameter type-id='type-id-4468'/>
+        <return type-id='type-id-922'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4950'>
+        <parameter type-id='type-id-4651'/>
+        <return type-id='type-id-33'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4951'>
+        <parameter type-id='type-id-4773'/>
+        <parameter type-id='type-id-4821'/>
+        <parameter type-id='type-id-4445'/>
+        <return type-id='type-id-33'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4952'>
+        <parameter type-id='type-id-4623'/>
+        <parameter type-id='type-id-4821'/>
+        <parameter type-id='type-id-4445'/>
+        <return type-id='type-id-33'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4953'>
+        <parameter type-id='type-id-4446'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-666'/>
+        <parameter type-id='type-id-4945'/>
+        <parameter type-id='type-id-33'/>
+        <return type-id='type-id-33'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4954'>
+        <parameter type-id='type-id-4446'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-33'/>
+        <parameter type-id='type-id-666'/>
+        <parameter type-id='type-id-666'/>
+        <parameter type-id='type-id-4945'/>
+        <parameter type-id='type-id-4945'/>
+        <parameter type-id='type-id-4821'/>
+        <return type-id='type-id-33'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4955'>
+        <parameter type-id='type-id-4490'/>
+        <parameter type-id='type-id-4821'/>
+        <parameter type-id='type-id-4445'/>
+        <return type-id='type-id-33'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4956'>
+        <parameter type-id='type-id-4507'/>
+        <parameter type-id='type-id-4857'/>
+        <parameter type-id='type-id-4853'/>
+        <parameter type-id='type-id-4859'/>
+        <parameter type-id='type-id-2611'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-33'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4957'>
+        <parameter type-id='type-id-4626'/>
+        <parameter type-id='type-id-1343'/>
+        <parameter type-id='type-id-2439'/>
+        <return type-id='type-id-33'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4958'>
+        <parameter type-id='type-id-4613'/>
+        <parameter type-id='type-id-2'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-85'/>
+        <return type-id='type-id-86'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4959'>
+        <parameter type-id='type-id-4613'/>
+        <parameter type-id='type-id-4'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-85'/>
+        <return type-id='type-id-86'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4960'>
+        <parameter type-id='type-id-4623'/>
+        <return type-id='type-id-7'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4961'>
+        <parameter type-id='type-id-4446'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-7'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4964'>
+        <parameter type-id='type-id-1394'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4965'>
+        <parameter type-id='type-id-4651'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4966'>
+        <parameter type-id='type-id-4651'/>
+        <parameter type-id='type-id-2'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4967'>
+        <parameter type-id='type-id-4583'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4968'>
+        <parameter type-id='type-id-4773'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4969'>
+        <parameter type-id='type-id-4773'/>
+        <parameter type-id='type-id-4445'/>
+        <parameter type-id='type-id-4445'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4970'>
+        <parameter type-id='type-id-4620'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4971'>
+        <parameter type-id='type-id-4444'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4972'>
+        <parameter type-id='type-id-4444'/>
+        <parameter type-id='type-id-4491'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4973'>
+        <parameter type-id='type-id-4623'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4974'>
+        <parameter type-id='type-id-4623'/>
+        <parameter type-id='type-id-4630'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4975'>
+        <parameter type-id='type-id-4623'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4976'>
+        <parameter type-id='type-id-4446'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4977'>
+        <parameter type-id='type-id-4446'/>
+        <parameter type-id='type-id-4615'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4978'>
+        <parameter type-id='type-id-4446'/>
+        <parameter type-id='type-id-4497'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4979'>
+        <parameter type-id='type-id-4446'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4980'>
+        <parameter type-id='type-id-4490'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4981'>
+        <parameter type-id='type-id-4490'/>
+        <parameter type-id='type-id-4630'/>
+        <parameter type-id='type-id-4491'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4982'>
+        <parameter type-id='type-id-4490'/>
+        <parameter type-id='type-id-4445'/>
+        <parameter type-id='type-id-4445'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4983'>
+        <parameter type-id='type-id-4490'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4984'>
+        <parameter type-id='type-id-4609'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4985'>
+        <parameter type-id='type-id-4468'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4986'>
+        <parameter type-id='type-id-4468'/>
+        <parameter type-id='type-id-4615'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4987'>
+        <parameter type-id='type-id-4468'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4988'>
+        <parameter type-id='type-id-4626'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4989'>
+        <parameter type-id='type-id-4626'/>
+        <parameter type-id='type-id-4637'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4990'>
+        <parameter type-id='type-id-4867'/>
+        <parameter type-id='type-id-4'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4991'>
+        <parameter type-id='type-id-4867'/>
+        <parameter type-id='type-id-4815'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4992'>
+        <parameter type-id='type-id-4867'/>
+        <parameter type-id='type-id-4819'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4993'>
+        <parameter type-id='type-id-4867'/>
+        <parameter type-id='type-id-4838'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4994'>
+        <parameter type-id='type-id-4867'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-4829'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4995'>
+        <parameter type-id='type-id-4867'/>
+        <parameter type-id='type-id-4963'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4996'>
+        <parameter type-id='type-id-4613'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4997'>
+        <parameter type-id='type-id-4613'/>
+        <parameter type-id='type-id-4840'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4998'>
+        <parameter type-id='type-id-4613'/>
+        <parameter type-id='type-id-4842'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-4999'>
+        <parameter type-id='type-id-4613'/>
+        <parameter type-id='type-id-4844'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5000'>
+        <parameter type-id='type-id-4613'/>
+        <parameter type-id='type-id-4875'/>
+        <parameter type-id='type-id-4878'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5001'>
+        <parameter type-id='type-id-4613'/>
+        <parameter type-id='type-id-877'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5002'>
+        <parameter type-id='type-id-4613'/>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5003'>
+        <parameter type-id='type-id-4944'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5004'>
+        <parameter type-id='type-id-4468'/>
+        <return type-id='type-id-15'/>
+      </function-type>
+      <union-decl name='__anonymous_union__3' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/drm/drm_vblank.h' line='57' column='1' id='type-id-4686'>
+        <data-member access='private'>
+          <var-decl name='base' type-id='type-id-4689' visibility='default' filepath='include/drm/drm_vblank.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='vbl' type-id='type-id-4690' visibility='default' filepath='include/drm/drm_vblank.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='seq' type-id='type-id-4691' visibility='default' filepath='include/drm/drm_vblank.h' line='76' column='1'/>
+        </data-member>
+      </union-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_connector.c' language='LANG_C89'>
+      <qualified-type-def type-id='type-id-5005' const='yes' id='type-id-5006'/>
+      <pointer-type-def type-id='type-id-5006' size-in-bits='64' id='type-id-5007'/>
+      <function-decl name='drm_connector_init' mangled-name='drm_connector_init' filepath='drivers/gpu/drm/drm_connector.c' line='189' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_connector_init'>
+        <parameter type-id='type-id-4446' name='dev' filepath='drivers/gpu/drm/drm_connector.c' line='189' column='1'/>
+        <parameter type-id='type-id-4444' name='connector' filepath='drivers/gpu/drm/drm_connector.c' line='190' column='1'/>
+        <parameter type-id='type-id-4484' name='funcs' filepath='drivers/gpu/drm/drm_connector.c' line='191' column='1'/>
+        <parameter type-id='type-id-17' name='connector_type' filepath='drivers/gpu/drm/drm_connector.c' line='192' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='drm_connector_attach_edid_property' mangled-name='drm_connector_attach_edid_property' filepath='drivers/gpu/drm/drm_connector.c' line='300' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_connector_attach_edid_property'>
+        <parameter type-id='type-id-4444' name='connector' filepath='drivers/gpu/drm/drm_connector.c' line='300' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='drm_connector_attach_encoder' mangled-name='drm_connector_attach_encoder' filepath='drivers/gpu/drm/drm_connector.c' line='322' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_connector_attach_encoder'>
+        <parameter type-id='type-id-4444' name='connector' filepath='drivers/gpu/drm/drm_connector.c' line='322' column='1'/>
+        <parameter type-id='type-id-4490' name='encoder' filepath='drivers/gpu/drm/drm_connector.c' line='323' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='drm_connector_cleanup' mangled-name='drm_connector_cleanup' filepath='drivers/gpu/drm/drm_connector.c' line='387' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_connector_cleanup'>
+        <parameter type-id='type-id-4444' name='connector' filepath='drivers/gpu/drm/drm_connector.c' line='387' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='drm_connector_unregister' mangled-name='drm_connector_unregister' filepath='drivers/gpu/drm/drm_connector.c' line='491' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_connector_unregister'>
+        <parameter type-id='type-id-4444' name='connector' filepath='drivers/gpu/drm/drm_connector.c' line='491' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='drm_connector_register' mangled-name='drm_connector_register' filepath='drivers/gpu/drm/drm_connector.c' line='444' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_connector_register'>
+        <parameter type-id='type-id-4444' name='connector' filepath='drivers/gpu/drm/drm_connector.c' line='444' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='drm_connector_update_edid_property' mangled-name='drm_connector_update_edid_property' filepath='drivers/gpu/drm/drm_connector.c' line='1527' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_connector_update_edid_property'>
+        <parameter type-id='type-id-4444' name='connector' filepath='drivers/gpu/drm/drm_connector.c' line='1527' column='1'/>
+        <parameter type-id='type-id-5007' name='edid' filepath='drivers/gpu/drm/drm_connector.c' line='1528' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_atomic_helper.c' language='LANG_C89'>
+      <class-decl name='drm_atomic_state' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/drm/drm_atomic.h' line='282' column='1' id='type-id-5008'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ref' type-id='type-id-239' visibility='default' filepath='include/drm/drm_atomic.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='type-id-4446' visibility='default' filepath='include/drm/drm_atomic.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='allow_modeset' type-id='type-id-33' visibility='default' filepath='include/drm/drm_atomic.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='legacy_cursor_update' type-id='type-id-33' visibility='default' filepath='include/drm/drm_atomic.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='async_update' type-id='type-id-33' visibility='default' filepath='include/drm/drm_atomic.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='planes' type-id='type-id-5009' visibility='default' filepath='include/drm/drm_atomic.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='crtcs' type-id='type-id-5010' visibility='default' filepath='include/drm/drm_atomic.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='num_connector' type-id='type-id-17' visibility='default' filepath='include/drm/drm_atomic.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='connectors' type-id='type-id-5011' visibility='default' filepath='include/drm/drm_atomic.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='num_private_objs' type-id='type-id-17' visibility='default' filepath='include/drm/drm_atomic.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='private_objs' type-id='type-id-5012' visibility='default' filepath='include/drm/drm_atomic.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='acquire_ctx' type-id='type-id-4581' visibility='default' filepath='include/drm/drm_atomic.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fake_commit' type-id='type-id-5013' visibility='default' filepath='include/drm/drm_atomic.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='commit_work' type-id='type-id-255' visibility='default' filepath='include/drm/drm_atomic.h' line='316' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__drm_planes_state' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/drm_atomic.h' line='148' column='1' id='type-id-5014'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ptr' type-id='type-id-4626' visibility='default' filepath='include/drm/drm_atomic.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='state' type-id='type-id-4637' visibility='default' filepath='include/drm/drm_atomic.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='old_state' type-id='type-id-4637' visibility='default' filepath='include/drm/drm_atomic.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='new_state' type-id='type-id-4637' visibility='default' filepath='include/drm/drm_atomic.h' line='150' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_crtc_commit' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/drm/drm_atomic.h' line='69' column='1' id='type-id-5015'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='crtc' type-id='type-id-4623' visibility='default' filepath='include/drm/drm_atomic.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ref' type-id='type-id-239' visibility='default' filepath='include/drm/drm_atomic.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flip_done' type-id='type-id-1608' visibility='default' filepath='include/drm/drm_atomic.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='hw_done' type-id='type-id-1608' visibility='default' filepath='include/drm/drm_atomic.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='cleanup_done' type-id='type-id-1608' visibility='default' filepath='include/drm/drm_atomic.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='commit_entry' type-id='type-id-20' visibility='default' filepath='include/drm/drm_atomic.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='event' type-id='type-id-4693' visibility='default' filepath='include/drm/drm_atomic.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='abort_completion' type-id='type-id-33' visibility='default' filepath='include/drm/drm_atomic.h' line='145' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__drm_crtcs_state' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/drm/drm_atomic.h' line='153' column='1' id='type-id-5016'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ptr' type-id='type-id-4623' visibility='default' filepath='include/drm/drm_atomic.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='state' type-id='type-id-4630' visibility='default' filepath='include/drm/drm_atomic.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='old_state' type-id='type-id-4630' visibility='default' filepath='include/drm/drm_atomic.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='new_state' type-id='type-id-4630' visibility='default' filepath='include/drm/drm_atomic.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='commit' type-id='type-id-5013' visibility='default' filepath='include/drm/drm_atomic.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='out_fence_ptr' type-id='type-id-2284' visibility='default' filepath='include/drm/drm_atomic.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='last_vblank_count' type-id='type-id-40' visibility='default' filepath='include/drm/drm_atomic.h' line='168' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__drm_connnectors_state' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/drm/drm_atomic.h' line='171' column='1' id='type-id-5017'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ptr' type-id='type-id-4444' visibility='default' filepath='include/drm/drm_atomic.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='state' type-id='type-id-4491' visibility='default' filepath='include/drm/drm_atomic.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='old_state' type-id='type-id-4491' visibility='default' filepath='include/drm/drm_atomic.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='new_state' type-id='type-id-4491' visibility='default' filepath='include/drm/drm_atomic.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='out_fence_ptr' type-id='type-id-2284' visibility='default' filepath='include/drm/drm_atomic.h' line='181' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__drm_private_objs_state' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/drm_atomic.h' line='258' column='1' id='type-id-5018'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ptr' type-id='type-id-5019' visibility='default' filepath='include/drm/drm_atomic.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='state' type-id='type-id-5020' visibility='default' filepath='include/drm/drm_atomic.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='old_state' type-id='type-id-5020' visibility='default' filepath='include/drm/drm_atomic.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='new_state' type-id='type-id-5020' visibility='default' filepath='include/drm/drm_atomic.h' line='260' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_private_obj' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_atomic.h' line='231' column='1' id='type-id-5021'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='type-id-5020' visibility='default' filepath='include/drm/drm_atomic.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='funcs' type-id='type-id-5022' visibility='default' filepath='include/drm/drm_atomic.h' line='243' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_private_state' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/drm/drm_atomic.h' line='254' column='1' id='type-id-5023'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='type-id-5024' visibility='default' filepath='include/drm/drm_atomic.h' line='255' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_private_state_funcs' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_atomic.h' line='197' column='1' id='type-id-5025'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='atomic_duplicate_state' type-id='type-id-5026' visibility='default' filepath='include/drm/drm_atomic.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='atomic_destroy_state' type-id='type-id-5027' visibility='default' filepath='include/drm/drm_atomic.h' line='216' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-5017' size-in-bits='64' id='type-id-5011'/>
+      <pointer-type-def type-id='type-id-5016' size-in-bits='64' id='type-id-5010'/>
+      <pointer-type-def type-id='type-id-5014' size-in-bits='64' id='type-id-5009'/>
+      <pointer-type-def type-id='type-id-5018' size-in-bits='64' id='type-id-5012'/>
+      <qualified-type-def type-id='type-id-5025' const='yes' id='type-id-5028'/>
+      <pointer-type-def type-id='type-id-5028' size-in-bits='64' id='type-id-5022'/>
+      <pointer-type-def type-id='type-id-5008' size-in-bits='64' id='type-id-5024'/>
+      <pointer-type-def type-id='type-id-5015' size-in-bits='64' id='type-id-5013'/>
+      <pointer-type-def type-id='type-id-5021' size-in-bits='64' id='type-id-5019'/>
+      <pointer-type-def type-id='type-id-5023' size-in-bits='64' id='type-id-5020'/>
+      <pointer-type-def type-id='type-id-5029' size-in-bits='64' id='type-id-5026'/>
+      <pointer-type-def type-id='type-id-5030' size-in-bits='64' id='type-id-5027'/>
+      <function-decl name='drm_atomic_helper_check' mangled-name='drm_atomic_helper_check' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='887' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_check'>
+        <parameter type-id='type-id-4446' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='887' column='1'/>
+        <parameter type-id='type-id-5024' name='state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='888' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_commit_modeset_disables' mangled-name='drm_atomic_helper_commit_modeset_disables' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1165' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_commit_modeset_disables'>
+        <parameter type-id='type-id-4446' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1165' column='1'/>
+        <parameter type-id='type-id-5024' name='old_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1166' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_commit_modeset_enables' mangled-name='drm_atomic_helper_commit_modeset_enables' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1211' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_commit_modeset_enables'>
+        <parameter type-id='type-id-4446' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1211' column='1'/>
+        <parameter type-id='type-id-5024' name='old_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1212' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_wait_for_vblanks' mangled-name='drm_atomic_helper_wait_for_vblanks' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1349' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_wait_for_vblanks'>
+        <parameter type-id='type-id-4446' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1349' column='1'/>
+        <parameter type-id='type-id-5024' name='old_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1350' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_commit_planes' mangled-name='drm_atomic_helper_commit_planes' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2310' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_commit_planes'>
+        <parameter type-id='type-id-4446' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2310' column='1'/>
+        <parameter type-id='type-id-5024' name='old_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2311' column='1'/>
+        <parameter type-id='type-id-1343' name='flags' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2312' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_commit_hw_done' mangled-name='drm_atomic_helper_commit_hw_done' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2143' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_commit_hw_done'>
+        <parameter type-id='type-id-5024' name='old_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2143' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_cleanup_planes' mangled-name='drm_atomic_helper_cleanup_planes' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2516' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_cleanup_planes'>
+        <parameter type-id='type-id-4446' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2516' column='1'/>
+        <parameter type-id='type-id-5024' name='old_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2517' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_commit' mangled-name='drm_atomic_helper_commit' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1662' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_commit'>
+        <parameter type-id='type-id-4446' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1662' column='1'/>
+        <parameter type-id='type-id-5024' name='state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1663' column='1'/>
+        <parameter type-id='type-id-33' name='nonblock' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1664' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_update_plane' mangled-name='drm_atomic_helper_update_plane' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2710' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_update_plane'>
+        <parameter type-id='type-id-4626' name='plane' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2710' column='1'/>
+        <parameter type-id='type-id-4623' name='crtc' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2711' column='1'/>
+        <parameter type-id='type-id-4609' name='fb' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2712' column='1'/>
+        <parameter type-id='type-id-17' name='crtc_x' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2713' column='1'/>
+        <parameter type-id='type-id-17' name='crtc_y' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2713' column='1'/>
+        <parameter type-id='type-id-5' name='crtc_w' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2714' column='1'/>
+        <parameter type-id='type-id-5' name='crtc_h' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2714' column='1'/>
+        <parameter type-id='type-id-1343' name='src_x' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2715' column='1'/>
+        <parameter type-id='type-id-1343' name='src_y' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2715' column='1'/>
+        <parameter type-id='type-id-1343' name='src_w' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2716' column='1'/>
+        <parameter type-id='type-id-1343' name='src_h' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2716' column='1'/>
+        <parameter type-id='type-id-4581' name='ctx' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2717' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_disable_plane' mangled-name='drm_atomic_helper_disable_plane' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2767' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_disable_plane'>
+        <parameter type-id='type-id-4626' name='plane' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2767' column='1'/>
+        <parameter type-id='type-id-4581' name='ctx' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2768' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_set_config' mangled-name='drm_atomic_helper_set_config' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2904' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_set_config'>
+        <parameter type-id='type-id-4865' name='set' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2904' column='1'/>
+        <parameter type-id='type-id-4581' name='ctx' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2905' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_shutdown' mangled-name='drm_atomic_helper_shutdown' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3109' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_shutdown'>
+        <parameter type-id='type-id-4446' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3109' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_page_flip' mangled-name='drm_atomic_helper_page_flip' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3343' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_page_flip'>
+        <parameter type-id='type-id-4623' name='crtc' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3343' column='1'/>
+        <parameter type-id='type-id-4609' name='fb' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3344' column='1'/>
+        <parameter type-id='type-id-4693' name='event' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3345' column='1'/>
+        <parameter type-id='type-id-1343' name='flags' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3346' column='1'/>
+        <parameter type-id='type-id-4581' name='ctx' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3347' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_crtc_reset' mangled-name='drm_atomic_helper_crtc_reset' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3467' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_crtc_reset'>
+        <parameter type-id='type-id-4623' name='crtc' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3467' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_crtc_duplicate_state' mangled-name='drm_atomic_helper_crtc_duplicate_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3521' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_crtc_duplicate_state'>
+        <parameter type-id='type-id-4623' name='crtc' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3521' column='1'/>
+        <return type-id='type-id-4630'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_crtc_destroy_state' mangled-name='drm_atomic_helper_crtc_destroy_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3580' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_crtc_destroy_state'>
+        <parameter type-id='type-id-4623' name='crtc' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3580' column='1'/>
+        <parameter type-id='type-id-4630' name='state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3581' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_plane_reset' mangled-name='drm_atomic_helper_plane_reset' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3595' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_plane_reset'>
+        <parameter type-id='type-id-4626' name='plane' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3595' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_plane_duplicate_state' mangled-name='drm_atomic_helper_plane_duplicate_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3643' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_plane_duplicate_state'>
+        <parameter type-id='type-id-4626' name='plane' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3643' column='1'/>
+        <return type-id='type-id-4637'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_plane_destroy_state' mangled-name='drm_atomic_helper_plane_destroy_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3687' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_plane_destroy_state'>
+        <parameter type-id='type-id-4626' name='plane' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3687' column='1'/>
+        <parameter type-id='type-id-4637' name='state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3688' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_connector_reset' mangled-name='drm_atomic_helper_connector_reset' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3726' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_connector_reset'>
+        <parameter type-id='type-id-4444' name='connector' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3726' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_connector_duplicate_state' mangled-name='drm_atomic_helper_connector_duplicate_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3769' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_connector_duplicate_state'>
+        <parameter type-id='type-id-4444' name='connector' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3769' column='1'/>
+        <return type-id='type-id-4491'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_connector_destroy_state' mangled-name='drm_atomic_helper_connector_destroy_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3898' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_connector_destroy_state'>
+        <parameter type-id='type-id-4444' name='connector' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3898' column='1'/>
+        <parameter type-id='type-id-4491' name='state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3899' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-5029'>
+        <parameter type-id='type-id-5019'/>
+        <return type-id='type-id-5020'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5030'>
+        <parameter type-id='type-id-5019'/>
+        <parameter type-id='type-id-5020'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_modeset_helper.c' language='LANG_C89'>
+      <function-decl name='drm_helper_mode_fill_fb_struct' mangled-name='drm_helper_mode_fill_fb_struct' filepath='drivers/gpu/drm/drm_modeset_helper.c' line='77' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_helper_mode_fill_fb_struct'>
+        <parameter type-id='type-id-4446' name='dev' filepath='drivers/gpu/drm/drm_modeset_helper.c' line='77' column='1'/>
+        <parameter type-id='type-id-4609' name='fb' filepath='drivers/gpu/drm/drm_modeset_helper.c' line='78' column='1'/>
+        <parameter type-id='type-id-4834' name='mode_cmd' filepath='drivers/gpu/drm/drm_modeset_helper.c' line='79' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_gem_framebuffer_helper.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='type-id-4651' size-in-bits='infinite' id='type-id-5031'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <class-decl name='drm_gem_object' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/drm/drm_gem.h' line='49' column='1' id='type-id-5032'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='type-id-239' visibility='default' filepath='include/drm/drm_gem.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='handle_count' type-id='type-id-5' visibility='default' filepath='include/drm/drm_gem.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='type-id-4446' visibility='default' filepath='include/drm/drm_gem.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='filp' type-id='type-id-83' visibility='default' filepath='include/drm/drm_gem.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vma_node' type-id='type-id-5033' visibility='default' filepath='include/drm/drm_gem.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='size' type-id='type-id-84' visibility='default' filepath='include/drm/drm_gem.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='name' type-id='type-id-17' visibility='default' filepath='include/drm/drm_gem.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='dma_buf' type-id='type-id-5034' visibility='default' filepath='include/drm/drm_gem.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='import_attach' type-id='type-id-5035' visibility='default' filepath='include/drm/drm_gem.h' line='148' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_vma_offset_node' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/drm/drm_vma_manager.h' line='40' column='1' id='type-id-5033'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vm_lock' type-id='type-id-885' visibility='default' filepath='include/drm/drm_vma_manager.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vm_node' type-id='type-id-5036' visibility='default' filepath='include/drm/drm_vma_manager.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='vm_files' type-id='type-id-416' visibility='default' filepath='include/drm/drm_vma_manager.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='readonly' type-id='type-id-33' visibility='default' filepath='include/drm/drm_vma_manager.h' line='44' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_mm_node' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/drm/drm_mm.h' line='155' column='1' id='type-id-5036'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='color' type-id='type-id-16' visibility='default' filepath='include/drm/drm_mm.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='start' type-id='type-id-40' visibility='default' filepath='include/drm/drm_mm.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='type-id-40' visibility='default' filepath='include/drm/drm_mm.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mm' type-id='type-id-5037' visibility='default' filepath='include/drm/drm_mm.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='node_list' type-id='type-id-20' visibility='default' filepath='include/drm/drm_mm.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='hole_stack' type-id='type-id-20' visibility='default' filepath='include/drm/drm_mm.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='rb' type-id='type-id-422' visibility='default' filepath='include/drm/drm_mm.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='rb_hole_size' type-id='type-id-422' visibility='default' filepath='include/drm/drm_mm.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='rb_hole_addr' type-id='type-id-422' visibility='default' filepath='include/drm/drm_mm.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='__subtree_last' type-id='type-id-40' visibility='default' filepath='include/drm/drm_mm.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='hole_size' type-id='type-id-40' visibility='default' filepath='include/drm/drm_mm.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='allocated' type-id='type-id-33' visibility='default' filepath='include/drm/drm_mm.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='scanned_block' type-id='type-id-33' visibility='default' filepath='include/drm/drm_mm.h' line='172' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_mm' size-in-bits='1856' is-struct='yes' visibility='default' filepath='include/drm/drm_mm.h' line='186' column='1' id='type-id-5038'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='color_adjust' type-id='type-id-5039' visibility='default' filepath='include/drm/drm_mm.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hole_stack' type-id='type-id-20' visibility='default' filepath='include/drm/drm_mm.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='head_node' type-id='type-id-5036' visibility='default' filepath='include/drm/drm_mm.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='interval_tree' type-id='type-id-1523' visibility='default' filepath='include/drm/drm_mm.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='holes_size' type-id='type-id-1523' visibility='default' filepath='include/drm/drm_mm.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='holes_addr' type-id='type-id-416' visibility='default' filepath='include/drm/drm_mm.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='scan_active' type-id='type-id-16' visibility='default' filepath='include/drm/drm_mm.h' line='211' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_buf' size-in-bits='1984' is-struct='yes' visibility='default' filepath='include/linux/dma-buf.h' line='282' column='1' id='type-id-5040'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='type-id-84' visibility='default' filepath='include/linux/dma-buf.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='file' type-id='type-id-83' visibility='default' filepath='include/linux/dma-buf.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='attachments' type-id='type-id-20' visibility='default' filepath='include/linux/dma-buf.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ops' type-id='type-id-5041' visibility='default' filepath='include/linux/dma-buf.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='lock' type-id='type-id-245' visibility='default' filepath='include/linux/dma-buf.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='vmapping_counter' type-id='type-id-5' visibility='default' filepath='include/linux/dma-buf.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='vmap_ptr' type-id='type-id-15' visibility='default' filepath='include/linux/dma-buf.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='exp_name' type-id='type-id-4' visibility='default' filepath='include/linux/dma-buf.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/dma-buf.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='include/linux/dma-buf.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='list_node' type-id='type-id-20' visibility='default' filepath='include/linux/dma-buf.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='priv' type-id='type-id-15' visibility='default' filepath='include/linux/dma-buf.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='resv' type-id='type-id-5042' visibility='default' filepath='include/linux/dma-buf.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='poll' type-id='type-id-225' visibility='default' filepath='include/linux/dma-buf.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='cb_excl' type-id='type-id-5043' visibility='default' filepath='include/linux/dma-buf.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='cb_shared' type-id='type-id-5043' visibility='default' filepath='include/linux/dma-buf.h' line='305' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_buf_ops' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/dma-buf.h' line='53' column='1' id='type-id-5044'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attach' type-id='type-id-5045' visibility='default' filepath='include/linux/dma-buf.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='detach' type-id='type-id-5046' visibility='default' filepath='include/linux/dma-buf.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map_dma_buf' type-id='type-id-5047' visibility='default' filepath='include/linux/dma-buf.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unmap_dma_buf' type-id='type-id-5048' visibility='default' filepath='include/linux/dma-buf.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='release' type-id='type-id-5049' visibility='default' filepath='include/linux/dma-buf.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='begin_cpu_access' type-id='type-id-5050' visibility='default' filepath='include/linux/dma-buf.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='end_cpu_access' type-id='type-id-5050' visibility='default' filepath='include/linux/dma-buf.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='map' type-id='type-id-5051' visibility='default' filepath='include/linux/dma-buf.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='unmap' type-id='type-id-5052' visibility='default' filepath='include/linux/dma-buf.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mmap' type-id='type-id-5053' visibility='default' filepath='include/linux/dma-buf.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='vmap' type-id='type-id-5054' visibility='default' filepath='include/linux/dma-buf.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='vunmap' type-id='type-id-5055' visibility='default' filepath='include/linux/dma-buf.h' line='249' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_buf_attachment' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/dma-buf.h' line='324' column='1' id='type-id-5056'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dmabuf' type-id='type-id-5034' visibility='default' filepath='include/linux/dma-buf.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='type-id-240' visibility='default' filepath='include/linux/dma-buf.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='node' type-id='type-id-20' visibility='default' filepath='include/linux/dma-buf.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='priv' type-id='type-id-15' visibility='default' filepath='include/linux/dma-buf.h' line='328' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='reservation_object' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/reservation.h' line='73' column='1' id='type-id-5057'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='type-id-3467' visibility='default' filepath='include/linux/reservation.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='seq' type-id='type-id-387' visibility='default' filepath='include/linux/reservation.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fence_excl' type-id='type-id-4651' visibility='default' filepath='include/linux/reservation.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fence' type-id='type-id-5058' visibility='default' filepath='include/linux/reservation.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='staged' type-id='type-id-5058' visibility='default' filepath='include/linux/reservation.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='reservation_object_list' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/reservation.h' line='59' column='1' id='type-id-5059'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/linux/reservation.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='shared_count' type-id='type-id-7' visibility='default' filepath='include/linux/reservation.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='shared_max' type-id='type-id-7' visibility='default' filepath='include/linux/reservation.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='shared' type-id='type-id-5031' visibility='default' filepath='include/linux/reservation.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_buf_poll_cb_t' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/dma-buf.h' line='300' column='1' id='type-id-5043'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cb' type-id='type-id-5060' visibility='default' filepath='include/linux/dma-buf.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='poll' type-id='type-id-881' visibility='default' filepath='include/linux/dma-buf.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='active' type-id='type-id-880' visibility='default' filepath='include/linux/dma-buf.h' line='304' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_fence_cb' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/dma-fence.h' line='104' column='1' id='type-id-5060'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='type-id-20' visibility='default' filepath='include/linux/dma-fence.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='func' type-id='type-id-5061' visibility='default' filepath='include/linux/dma-fence.h' line='106' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='dma_fence_func_t' type-id='type-id-5062' filepath='include/linux/dma-fence.h' line='93' column='1' id='type-id-5061'/>
+      <qualified-type-def type-id='type-id-5044' const='yes' id='type-id-5063'/>
+      <pointer-type-def type-id='type-id-5063' size-in-bits='64' id='type-id-5041'/>
+      <qualified-type-def type-id='type-id-5036' const='yes' id='type-id-5064'/>
+      <pointer-type-def type-id='type-id-5064' size-in-bits='64' id='type-id-5065'/>
+      <pointer-type-def type-id='type-id-5040' size-in-bits='64' id='type-id-5034'/>
+      <pointer-type-def type-id='type-id-5056' size-in-bits='64' id='type-id-5035'/>
+      <pointer-type-def type-id='type-id-5060' size-in-bits='64' id='type-id-5066'/>
+      <pointer-type-def type-id='type-id-5032' size-in-bits='64' id='type-id-5067'/>
+      <pointer-type-def type-id='type-id-5038' size-in-bits='64' id='type-id-5037'/>
+      <pointer-type-def type-id='type-id-5068' size-in-bits='64' id='type-id-5045'/>
+      <pointer-type-def type-id='type-id-5069' size-in-bits='64' id='type-id-5050'/>
+      <pointer-type-def type-id='type-id-5070' size-in-bits='64' id='type-id-5053'/>
+      <pointer-type-def type-id='type-id-5057' size-in-bits='64' id='type-id-5042'/>
+      <pointer-type-def type-id='type-id-5059' size-in-bits='64' id='type-id-5058'/>
+      <pointer-type-def type-id='type-id-5071' size-in-bits='64' id='type-id-5047'/>
+      <pointer-type-def type-id='type-id-5072' size-in-bits='64' id='type-id-5039'/>
+      <pointer-type-def type-id='type-id-5073' size-in-bits='64' id='type-id-5049'/>
+      <pointer-type-def type-id='type-id-5074' size-in-bits='64' id='type-id-5046'/>
+      <pointer-type-def type-id='type-id-5075' size-in-bits='64' id='type-id-5052'/>
+      <pointer-type-def type-id='type-id-5076' size-in-bits='64' id='type-id-5055'/>
+      <pointer-type-def type-id='type-id-5077' size-in-bits='64' id='type-id-5048'/>
+      <pointer-type-def type-id='type-id-5078' size-in-bits='64' id='type-id-5062'/>
+      <pointer-type-def type-id='type-id-5079' size-in-bits='64' id='type-id-5054'/>
+      <pointer-type-def type-id='type-id-5080' size-in-bits='64' id='type-id-5051'/>
+      <function-decl name='drm_gem_fb_destroy' mangled-name='drm_gem_fb_destroy' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='97' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_fb_destroy'>
+        <parameter type-id='type-id-4609' name='fb' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='97' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='drm_gem_fb_create_handle' mangled-name='drm_gem_fb_create_handle' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='122' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_fb_create_handle'>
+        <parameter type-id='type-id-4609' name='fb' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='122' column='1'/>
+        <parameter type-id='type-id-4615' name='file' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='122' column='1'/>
+        <parameter type-id='type-id-482' name='handle' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='123' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-5068'>
+        <parameter type-id='type-id-5034'/>
+        <parameter type-id='type-id-5035'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5069'>
+        <parameter type-id='type-id-5034'/>
+        <parameter type-id='type-id-2160'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5070'>
+        <parameter type-id='type-id-5034'/>
+        <parameter type-id='type-id-1209'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5071'>
+        <parameter type-id='type-id-5035'/>
+        <parameter type-id='type-id-2160'/>
+        <return type-id='type-id-922'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5072'>
+        <parameter type-id='type-id-5065'/>
+        <parameter type-id='type-id-16'/>
+        <parameter type-id='type-id-1510'/>
+        <parameter type-id='type-id-1510'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5073'>
+        <parameter type-id='type-id-5034'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5074'>
+        <parameter type-id='type-id-5034'/>
+        <parameter type-id='type-id-5035'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5075'>
+        <parameter type-id='type-id-5034'/>
+        <parameter type-id='type-id-16'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5076'>
+        <parameter type-id='type-id-5034'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5077'>
+        <parameter type-id='type-id-5035'/>
+        <parameter type-id='type-id-922'/>
+        <parameter type-id='type-id-2160'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5078'>
+        <parameter type-id='type-id-4651'/>
+        <parameter type-id='type-id-5066'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5079'>
+        <parameter type-id='type-id-5034'/>
+        <return type-id='type-id-15'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5080'>
+        <parameter type-id='type-id-5034'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-15'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_cache.c' language='LANG_C89'>
+      <function-decl name='drm_clflush_pages' mangled-name='drm_clflush_pages' filepath='drivers/gpu/drm/drm_cache.c' line='81' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_clflush_pages'>
+        <parameter type-id='type-id-923' name='pages' filepath='drivers/gpu/drm/drm_cache.c' line='81' column='1'/>
+        <parameter type-id='type-id-16' name='num_pages' filepath='drivers/gpu/drm/drm_cache.c' line='81' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_file.c' language='LANG_C89'>
+      <function-decl name='drm_open' mangled-name='drm_open' filepath='drivers/gpu/drm/drm_file.c' line='298' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_open'>
+        <parameter type-id='type-id-1129' name='inode' filepath='drivers/gpu/drm/drm_file.c' line='298' column='1'/>
+        <parameter type-id='type-id-83' name='filp' filepath='drivers/gpu/drm/drm_file.c' line='298' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='drm_release' mangled-name='drm_release' filepath='drivers/gpu/drm/drm_file.c' line='466' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_release'>
+        <parameter type-id='type-id-1129' name='inode' filepath='drivers/gpu/drm/drm_file.c' line='466' column='1'/>
+        <parameter type-id='type-id-83' name='filp' filepath='drivers/gpu/drm/drm_file.c' line='466' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='drm_read' mangled-name='drm_read' filepath='drivers/gpu/drm/drm_file.c' line='519' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_read'>
+        <parameter type-id='type-id-83' name='filp' filepath='drivers/gpu/drm/drm_file.c' line='519' column='1'/>
+        <parameter type-id='type-id-2' name='buffer' filepath='drivers/gpu/drm/drm_file.c' line='519' column='1'/>
+        <parameter type-id='type-id-84' name='count' filepath='drivers/gpu/drm/drm_file.c' line='520' column='1'/>
+        <parameter type-id='type-id-85' name='offset' filepath='drivers/gpu/drm/drm_file.c' line='520' column='1'/>
+        <return type-id='type-id-86'/>
+      </function-decl>
+      <function-decl name='drm_poll' mangled-name='drm_poll' filepath='drivers/gpu/drm/drm_file.c' line='606' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_poll'>
+        <parameter type-id='type-id-83' name='filp' filepath='drivers/gpu/drm/drm_file.c' line='606' column='1'/>
+        <parameter type-id='type-id-879' name='wait' filepath='drivers/gpu/drm/drm_file.c' line='606' column='1'/>
+        <return type-id='type-id-880'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_gem.c' language='LANG_C89'>
+      <union-decl name='__anonymous_union__' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='624' column='1' id='type-id-5081'>
+        <data-member access='private'>
+          <var-decl name='i_nlink' type-id='type-id-893' visibility='default' filepath='include/linux/fs.h' line='625' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='__i_nlink' type-id='type-id-5' visibility='default' filepath='include/linux/fs.h' line='626' column='1'/>
+        </data-member>
+      </union-decl>
+      <function-decl name='drm_gem_object_init' mangled-name='drm_gem_object_init' filepath='drivers/gpu/drm/drm_gem.c' line='135' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_object_init'>
+        <parameter type-id='type-id-4446' name='dev' filepath='drivers/gpu/drm/drm_gem.c' line='135' column='1'/>
+        <parameter type-id='type-id-5067' name='obj' filepath='drivers/gpu/drm/drm_gem.c' line='136' column='1'/>
+        <parameter type-id='type-id-84' name='size' filepath='drivers/gpu/drm/drm_gem.c' line='136' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='drm_gem_object_lookup' mangled-name='drm_gem_object_lookup' filepath='drivers/gpu/drm/drm_gem.c' line='637' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_object_lookup'>
+        <parameter type-id='type-id-4615' name='filp' filepath='drivers/gpu/drm/drm_gem.c' line='637' column='1'/>
+        <parameter type-id='type-id-7' name='handle' filepath='drivers/gpu/drm/drm_gem.c' line='637' column='1'/>
+        <return type-id='type-id-5067'/>
+      </function-decl>
+      <function-decl name='drm_gem_object_put_unlocked' mangled-name='drm_gem_object_put_unlocked' filepath='drivers/gpu/drm/drm_gem.c' line='858' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_object_put_unlocked'>
+        <parameter type-id='type-id-5067' name='obj' filepath='drivers/gpu/drm/drm_gem.c' line='858' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='drm_gem_handle_create' mangled-name='drm_gem_handle_create' filepath='drivers/gpu/drm/drm_gem.c' line='446' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_handle_create'>
+        <parameter type-id='type-id-4615' name='file_priv' filepath='drivers/gpu/drm/drm_gem.c' line='446' column='1'/>
+        <parameter type-id='type-id-5067' name='obj' filepath='drivers/gpu/drm/drm_gem.c' line='447' column='1'/>
+        <parameter type-id='type-id-1567' name='handlep' filepath='drivers/gpu/drm/drm_gem.c' line='448' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='drm_gem_object_release' mangled-name='drm_gem_object_release' filepath='drivers/gpu/drm/drm_gem.c' line='811' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_object_release'>
+        <parameter type-id='type-id-5067' name='obj' filepath='drivers/gpu/drm/drm_gem.c' line='811' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_drv.c' language='LANG_C89'>
+
+      <array-type-def dimensions='1' type-id='type-id-5082' size-in-bits='7360' id='type-id-5083'>
+        <subrange length='23' type-id='type-id-9' id='type-id-5084'/>
+
+      </array-type-def>
+      <class-decl name='drm_lock_data' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/drm/drm_auth.h' line='37' column='1' id='type-id-5085'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hw_lock' type-id='type-id-4577' visibility='default' filepath='include/drm/drm_auth.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='file_priv' type-id='type-id-4615' visibility='default' filepath='include/drm/drm_auth.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock_queue' type-id='type-id-225' visibility='default' filepath='include/drm/drm_auth.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='lock_time' type-id='type-id-16' visibility='default' filepath='include/drm/drm_auth.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='spinlock' type-id='type-id-247' visibility='default' filepath='include/drm/drm_auth.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='kernel_waiters' type-id='type-id-1343' visibility='default' filepath='include/drm/drm_auth.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='user_waiters' type-id='type-id-1343' visibility='default' filepath='include/drm/drm_auth.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='idle_has_lock' type-id='type-id-17' visibility='default' filepath='include/drm/drm_auth.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_buf_entry' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/drm/drm_legacy.h' line='86' column='1' id='type-id-5082'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buf_size' type-id='type-id-17' visibility='default' filepath='include/drm/drm_legacy.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='buf_count' type-id='type-id-17' visibility='default' filepath='include/drm/drm_legacy.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='buflist' type-id='type-id-5086' visibility='default' filepath='include/drm/drm_legacy.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='seg_count' type-id='type-id-17' visibility='default' filepath='include/drm/drm_legacy.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='page_order' type-id='type-id-17' visibility='default' filepath='include/drm/drm_legacy.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='seglist' type-id='type-id-5087' visibility='default' filepath='include/drm/drm_legacy.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='low_mark' type-id='type-id-17' visibility='default' filepath='include/drm/drm_legacy.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='high_mark' type-id='type-id-17' visibility='default' filepath='include/drm/drm_legacy.h' line='95' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_buf' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/drm/drm_legacy.h' line='50' column='1' id='type-id-5088'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='idx' type-id='type-id-17' visibility='default' filepath='include/drm/drm_legacy.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='total' type-id='type-id-17' visibility='default' filepath='include/drm/drm_legacy.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='order' type-id='type-id-17' visibility='default' filepath='include/drm/drm_legacy.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='used' type-id='type-id-17' visibility='default' filepath='include/drm/drm_legacy.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='offset' type-id='type-id-16' visibility='default' filepath='include/drm/drm_legacy.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='address' type-id='type-id-15' visibility='default' filepath='include/drm/drm_legacy.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='bus_address' type-id='type-id-16' visibility='default' filepath='include/drm/drm_legacy.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='next' type-id='type-id-5086' visibility='default' filepath='include/drm/drm_legacy.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='waiting' type-id='type-id-5089' visibility='default' filepath='include/drm/drm_legacy.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='pending' type-id='type-id-5089' visibility='default' filepath='include/drm/drm_legacy.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='file_priv' type-id='type-id-4615' visibility='default' filepath='include/drm/drm_legacy.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='context' type-id='type-id-17' visibility='default' filepath='include/drm/drm_legacy.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='while_locked' type-id='type-id-17' visibility='default' filepath='include/drm/drm_legacy.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='list' type-id='type-id-5090' visibility='default' filepath='include/drm/drm_legacy.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='dev_priv_size' type-id='type-id-17' visibility='default' filepath='include/drm/drm_legacy.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='dev_private' type-id='type-id-15' visibility='default' filepath='include/drm/drm_legacy.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='__anonymous_enum__' is-anonymous='yes' filepath='include/drm/drm_legacy.h' line='64' column='1' id='type-id-5090'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='DRM_LIST_NONE' value='0'/>
+        <enumerator name='DRM_LIST_FREE' value='1'/>
+        <enumerator name='DRM_LIST_WAIT' value='2'/>
+        <enumerator name='DRM_LIST_PEND' value='3'/>
+        <enumerator name='DRM_LIST_PRIO' value='4'/>
+        <enumerator name='DRM_LIST_RECLAIM' value='5'/>
+      </enum-decl>
+      <class-decl name='drm_dma_handle' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/drm/drm_legacy.h' line='77' column='1' id='type-id-5091'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='busaddr' type-id='type-id-2083' visibility='default' filepath='include/drm/drm_legacy.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vaddr' type-id='type-id-15' visibility='default' filepath='include/drm/drm_legacy.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='type-id-84' visibility='default' filepath='include/drm/drm_legacy.h' line='80' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='__anonymous_enum__1' is-anonymous='yes' filepath='include/drm/drm_legacy.h' line='110' column='1' id='type-id-5092'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='_DRM_DMA_USE_AGP' value='1'/>
+        <enumerator name='_DRM_DMA_USE_SG' value='2'/>
+        <enumerator name='_DRM_DMA_USE_FB' value='4'/>
+        <enumerator name='_DRM_DMA_USE_PCI_RO' value='8'/>
+      </enum-decl>
+      <enum-decl name='drm_map_type' filepath='include/uapi/drm/drm.h' line='188' column='1' id='type-id-5093'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='_DRM_FRAME_BUFFER' value='0'/>
+        <enumerator name='_DRM_REGISTERS' value='1'/>
+        <enumerator name='_DRM_SHM' value='2'/>
+        <enumerator name='_DRM_AGP' value='3'/>
+        <enumerator name='_DRM_SCATTER_GATHER' value='4'/>
+        <enumerator name='_DRM_CONSISTENT' value='5'/>
+      </enum-decl>
+      <enum-decl name='drm_map_flags' filepath='include/uapi/drm/drm.h' line='200' column='1' id='type-id-5094'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='_DRM_RESTRICTED' value='1'/>
+        <enumerator name='_DRM_READ_ONLY' value='2'/>
+        <enumerator name='_DRM_LOCKED' value='4'/>
+        <enumerator name='_DRM_KERNEL' value='8'/>
+        <enumerator name='_DRM_WRITE_COMBINING' value='16'/>
+        <enumerator name='_DRM_CONTAINS_LOCK' value='32'/>
+        <enumerator name='_DRM_REMOVABLE' value='64'/>
+        <enumerator name='_DRM_DRIVER' value='128'/>
+      </enum-decl>
+      <pointer-type-def type-id='type-id-5088' size-in-bits='64' id='type-id-5086'/>
+      <pointer-type-def type-id='type-id-5086' size-in-bits='64' id='type-id-5095'/>
+      <pointer-type-def type-id='type-id-5091' size-in-bits='64' id='type-id-5096'/>
+      <pointer-type-def type-id='type-id-5096' size-in-bits='64' id='type-id-5087'/>
+      <qualified-type-def type-id='type-id-17' volatile='yes' id='type-id-5089'/>
+      <function-decl name='drm_dev_put' mangled-name='drm_dev_put' filepath='drivers/gpu/drm/drm_drv.c' line='698' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dev_put'>
+        <parameter type-id='type-id-4446' name='dev' filepath='drivers/gpu/drm/drm_drv.c' line='698' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='drm_put_dev' mangled-name='drm_put_dev' filepath='drivers/gpu/drm/drm_drv.c' line='310' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_put_dev'>
+        <parameter type-id='type-id-4446' name='dev' filepath='drivers/gpu/drm/drm_drv.c' line='310' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='drm_dev_set_unique' mangled-name='drm_dev_set_unique' filepath='drivers/gpu/drm/drm_drv.c' line='898' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dev_set_unique'>
+        <parameter type-id='type-id-4446' name='dev' filepath='drivers/gpu/drm/drm_drv.c' line='898' column='1'/>
+        <parameter type-id='type-id-4' name='name' filepath='drivers/gpu/drm/drm_drv.c' line='898' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='drm_dev_alloc' mangled-name='drm_dev_alloc' filepath='drivers/gpu/drm/drm_drv.c' line='640' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dev_alloc'>
+        <parameter type-id='type-id-4495' name='driver' filepath='drivers/gpu/drm/drm_drv.c' line='640' column='1'/>
+        <parameter type-id='type-id-240' name='parent' filepath='drivers/gpu/drm/drm_drv.c' line='641' column='1'/>
+        <return type-id='type-id-4446'/>
+      </function-decl>
+      <function-decl name='drm_dev_register' mangled-name='drm_dev_register' filepath='drivers/gpu/drm/drm_drv.c' line='794' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dev_register'>
+        <parameter type-id='type-id-4446' name='dev' filepath='drivers/gpu/drm/drm_drv.c' line='794' column='1'/>
+        <parameter type-id='type-id-16' name='flags' filepath='drivers/gpu/drm/drm_drv.c' line='794' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_ioctl.c' language='LANG_C89'>
+      <function-decl name='drm_ioctl' mangled-name='drm_ioctl' filepath='drivers/gpu/drm/drm_ioctl.c' line='775' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_ioctl'>
+        <parameter type-id='type-id-83' name='filp' filepath='drivers/gpu/drm/drm_ioctl.c' line='775' column='1'/>
+        <parameter type-id='type-id-5' name='cmd' filepath='drivers/gpu/drm/drm_ioctl.c' line='776' column='1'/>
+        <parameter type-id='type-id-16' name='arg' filepath='drivers/gpu/drm/drm_ioctl.c' line='776' column='1'/>
+        <return type-id='type-id-192'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_mode_config.c' language='LANG_C89'>
+      <function-decl name='drm_mode_config_init' mangled-name='drm_mode_config_init' filepath='drivers/gpu/drm/drm_mode_config.c' line='371' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_config_init'>
+        <parameter type-id='type-id-4446' name='dev' filepath='drivers/gpu/drm/drm_mode_config.c' line='371' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='drm_mode_config_reset' mangled-name='drm_mode_config_reset' filepath='drivers/gpu/drm/drm_mode_config.c' line='176' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_config_reset'>
+        <parameter type-id='type-id-4446' name='dev' filepath='drivers/gpu/drm/drm_mode_config.c' line='176' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='drm_mode_config_cleanup' mangled-name='drm_mode_config_cleanup' filepath='drivers/gpu/drm/drm_mode_config.c' line='417' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_config_cleanup'>
+        <parameter type-id='type-id-4446' name='dev' filepath='drivers/gpu/drm/drm_mode_config.c' line='417' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_sysfs.c' language='LANG_C89'>
+      <function-decl name='drm_class_device_register' mangled-name='drm_class_device_register' filepath='drivers/gpu/drm/drm_sysfs.c' line='380' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_class_device_register'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/gpu/drm/drm_sysfs.c' line='380' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='drm_class_device_unregister' mangled-name='drm_class_device_unregister' filepath='drivers/gpu/drm/drm_sysfs.c' line='398' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_class_device_unregister'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/gpu/drm/drm_sysfs.c' line='398' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_hashtab.c' language='LANG_C89'>
+      <class-decl name='drm_hash_item' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/drm/drm_hashtab.h' line='42' column='1' id='type-id-5097'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='type-id-520' visibility='default' filepath='include/drm/drm_hashtab.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='key' type-id='type-id-16' visibility='default' filepath='include/drm/drm_hashtab.h' line='44' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-5097' size-in-bits='64' id='type-id-5098'/>
+      <pointer-type-def type-id='type-id-5098' size-in-bits='64' id='type-id-5099'/>
+      <pointer-type-def type-id='type-id-4498' size-in-bits='64' id='type-id-5100'/>
+      <function-decl name='drm_ht_create' mangled-name='drm_ht_create' filepath='drivers/gpu/drm/drm_hashtab.c' line='41' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_ht_create'>
+        <parameter type-id='type-id-5100' name='ht' filepath='drivers/gpu/drm/drm_hashtab.c' line='41' column='1'/>
+        <parameter type-id='type-id-5' name='order' filepath='drivers/gpu/drm/drm_hashtab.c' line='41' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='drm_ht_insert_item' mangled-name='drm_ht_insert_item' filepath='drivers/gpu/drm/drm_hashtab.c' line='109' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_ht_insert_item'>
+        <parameter type-id='type-id-5100' name='ht' filepath='drivers/gpu/drm/drm_hashtab.c' line='109' column='1'/>
+        <parameter type-id='type-id-5098' name='item' filepath='drivers/gpu/drm/drm_hashtab.c' line='109' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='drm_ht_just_insert_please' mangled-name='drm_ht_just_insert_please' filepath='drivers/gpu/drm/drm_hashtab.c' line='140' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_ht_just_insert_please'>
+        <parameter type-id='type-id-5100' name='ht' filepath='drivers/gpu/drm/drm_hashtab.c' line='140' column='1'/>
+        <parameter type-id='type-id-5098' name='item' filepath='drivers/gpu/drm/drm_hashtab.c' line='140' column='1'/>
+        <parameter type-id='type-id-16' name='seed' filepath='drivers/gpu/drm/drm_hashtab.c' line='141' column='1'/>
+        <parameter type-id='type-id-17' name='bits' filepath='drivers/gpu/drm/drm_hashtab.c' line='141' column='1'/>
+        <parameter type-id='type-id-17' name='shift' filepath='drivers/gpu/drm/drm_hashtab.c' line='141' column='1'/>
+        <parameter type-id='type-id-16' name='add' filepath='drivers/gpu/drm/drm_hashtab.c' line='142' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='drm_ht_find_item' mangled-name='drm_ht_find_item' filepath='drivers/gpu/drm/drm_hashtab.c' line='165' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_ht_find_item'>
+        <parameter type-id='type-id-5100' name='ht' filepath='drivers/gpu/drm/drm_hashtab.c' line='165' column='1'/>
+        <parameter type-id='type-id-16' name='key' filepath='drivers/gpu/drm/drm_hashtab.c' line='165' column='1'/>
+        <parameter type-id='type-id-5099' name='item' filepath='drivers/gpu/drm/drm_hashtab.c' line='166' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='drm_ht_remove_item' mangled-name='drm_ht_remove_item' filepath='drivers/gpu/drm/drm_hashtab.c' line='191' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_ht_remove_item'>
+        <parameter type-id='type-id-5100' name='ht' filepath='drivers/gpu/drm/drm_hashtab.c' line='191' column='1'/>
+        <parameter type-id='type-id-5098' name='item' filepath='drivers/gpu/drm/drm_hashtab.c' line='191' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='drm_ht_remove' mangled-name='drm_ht_remove' filepath='drivers/gpu/drm/drm_hashtab.c' line='198' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_ht_remove'>
+        <parameter type-id='type-id-5100' name='ht' filepath='drivers/gpu/drm/drm_hashtab.c' line='198' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_mm.c' language='LANG_C89'>
+      <enum-decl name='drm_mm_insert_mode' filepath='include/drm/drm_mm.h' line='68' column='1' id='type-id-5101'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='DRM_MM_INSERT_BEST' value='0'/>
+        <enumerator name='DRM_MM_INSERT_LOW' value='1'/>
+        <enumerator name='DRM_MM_INSERT_HIGH' value='2'/>
+        <enumerator name='DRM_MM_INSERT_EVICT' value='3'/>
+        <enumerator name='DRM_MM_INSERT_ONCE' value='2147483648'/>
+        <enumerator name='DRM_MM_INSERT_HIGHEST' value='2147483650'/>
+        <enumerator name='DRM_MM_INSERT_LOWEST' value='2147483649'/>
+      </enum-decl>
+      <qualified-type-def type-id='type-id-5038' const='yes' id='type-id-5102'/>
+      <pointer-type-def type-id='type-id-5102' size-in-bits='64' id='type-id-5103'/>
+      <qualified-type-def type-id='type-id-5037' const='yes' id='type-id-5104'/>
+      <pointer-type-def type-id='type-id-5036' size-in-bits='64' id='type-id-5105'/>
+      <qualified-type-def type-id='type-id-5105' const='yes' id='type-id-5106'/>
+      <function-decl name='drm_mm_insert_node_in_range' mangled-name='drm_mm_insert_node_in_range' filepath='drivers/gpu/drm/drm_mm.c' line='474' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mm_insert_node_in_range'>
+        <parameter type-id='type-id-5104' name='mm' filepath='drivers/gpu/drm/drm_mm.c' line='474' column='1'/>
+        <parameter type-id='type-id-5106' name='node' filepath='drivers/gpu/drm/drm_mm.c' line='475' column='1'/>
+        <parameter type-id='type-id-40' name='size' filepath='drivers/gpu/drm/drm_mm.c' line='476' column='1'/>
+        <parameter type-id='type-id-40' name='alignment' filepath='drivers/gpu/drm/drm_mm.c' line='476' column='1'/>
+        <parameter type-id='type-id-16' name='color' filepath='drivers/gpu/drm/drm_mm.c' line='477' column='1'/>
+        <parameter type-id='type-id-40' name='range_start' filepath='drivers/gpu/drm/drm_mm.c' line='478' column='1'/>
+        <parameter type-id='type-id-40' name='range_end' filepath='drivers/gpu/drm/drm_mm.c' line='478' column='1'/>
+        <parameter type-id='type-id-5101' name='mode' filepath='drivers/gpu/drm/drm_mm.c' line='479' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='drm_mm_remove_node' mangled-name='drm_mm_remove_node' filepath='drivers/gpu/drm/drm_mm.c' line='582' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mm_remove_node'>
+        <parameter type-id='type-id-5105' name='node' filepath='drivers/gpu/drm/drm_mm.c' line='582' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='drm_mm_init' mangled-name='drm_mm_init' filepath='drivers/gpu/drm/drm_mm.c' line='917' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mm_init'>
+        <parameter type-id='type-id-5037' name='mm' filepath='drivers/gpu/drm/drm_mm.c' line='917' column='1'/>
+        <parameter type-id='type-id-40' name='start' filepath='drivers/gpu/drm/drm_mm.c' line='917' column='1'/>
+        <parameter type-id='type-id-40' name='size' filepath='drivers/gpu/drm/drm_mm.c' line='917' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='drm_mm_takedown' mangled-name='drm_mm_takedown' filepath='drivers/gpu/drm/drm_mm.c' line='947' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mm_takedown'>
+        <parameter type-id='type-id-5037' name='mm' filepath='drivers/gpu/drm/drm_mm.c' line='947' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='drm_mm_print' mangled-name='drm_mm_print' filepath='drivers/gpu/drm/drm_mm.c' line='973' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mm_print'>
+        <parameter type-id='type-id-5103' name='mm' filepath='drivers/gpu/drm/drm_mm.c' line='973' column='1'/>
+        <parameter type-id='type-id-4867' name='p' filepath='drivers/gpu/drm/drm_mm.c' line='973' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_crtc.c' language='LANG_C89'>
+      <class-decl name='drm_encoder' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-5107'/>
+      <union-decl name='__anonymous_union__' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/drm/drm_vblank.h' line='57' column='1' id='type-id-5108'>
+        <data-member access='private'>
+          <var-decl name='base' type-id='type-id-4689' visibility='default' filepath='include/drm/drm_vblank.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='vbl' type-id='type-id-4690' visibility='default' filepath='include/drm/drm_vblank.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='seq' type-id='type-id-4691' visibility='default' filepath='include/drm/drm_vblank.h' line='76' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='type-id-5107' size-in-bits='64' id='type-id-5109'/>
+      <function-decl name='drm_crtc_init_with_planes' mangled-name='drm_crtc_init_with_planes' filepath='drivers/gpu/drm/drm_crtc.c' line='266' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_crtc_init_with_planes'>
+        <parameter type-id='type-id-4446' name='dev' filepath='drivers/gpu/drm/drm_crtc.c' line='266' column='1'/>
+        <parameter type-id='type-id-4623' name='crtc' filepath='drivers/gpu/drm/drm_crtc.c' line='266' column='1'/>
+        <parameter type-id='type-id-4626' name='primary' filepath='drivers/gpu/drm/drm_crtc.c' line='267' column='1'/>
+        <parameter type-id='type-id-4626' name='cursor' filepath='drivers/gpu/drm/drm_crtc.c' line='268' column='1'/>
+        <parameter type-id='type-id-4627' name='funcs' filepath='drivers/gpu/drm/drm_crtc.c' line='269' column='1'/>
+        <parameter type-id='type-id-4' name='name' filepath='drivers/gpu/drm/drm_crtc.c' line='270' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='drm_crtc_cleanup' mangled-name='drm_crtc_cleanup' filepath='drivers/gpu/drm/drm_crtc.c' line='354' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_crtc_cleanup'>
+        <parameter type-id='type-id-4623' name='crtc' filepath='drivers/gpu/drm/drm_crtc.c' line='354' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_debugfs.c' language='LANG_C89'>
+      <class-decl name='drm_info_list' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/drm_debugfs.h' line='41' column='1' id='type-id-5110'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/drm/drm_debugfs.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='show' type-id='type-id-311' visibility='default' filepath='include/drm/drm_debugfs.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='driver_features' type-id='type-id-7' visibility='default' filepath='include/drm/drm_debugfs.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='data' type-id='type-id-15' visibility='default' filepath='include/drm/drm_debugfs.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='type-id-5110' const='yes' id='type-id-5111'/>
+      <pointer-type-def type-id='type-id-5111' size-in-bits='64' id='type-id-5112'/>
+      <function-decl name='drm_debugfs_create_files' mangled-name='drm_debugfs_create_files' filepath='drivers/gpu/drm/drm_debugfs.c' line='83' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_debugfs_create_files'>
+        <parameter type-id='type-id-5112' name='files' filepath='drivers/gpu/drm/drm_debugfs.c' line='83' column='1'/>
+        <parameter type-id='type-id-17' name='count' filepath='drivers/gpu/drm/drm_debugfs.c' line='83' column='1'/>
+        <parameter type-id='type-id-23' name='root' filepath='drivers/gpu/drm/drm_debugfs.c' line='84' column='1'/>
+        <parameter type-id='type-id-4496' name='minor' filepath='drivers/gpu/drm/drm_debugfs.c' line='84' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_edid.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='type-id-5113' size-in-bits='96' id='type-id-5114'>
+        <subrange length='4' type-id='type-id-9' id='type-id-107'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-5115' size-in-bits='576' id='type-id-5116'>
+        <subrange length='4' type-id='type-id-9' id='type-id-107'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-5117' size-in-bits='96' id='type-id-5118'>
+        <subrange length='6' type-id='type-id-9' id='type-id-191'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-5117' size-in-bits='128' id='type-id-5119'>
+        <subrange length='8' type-id='type-id-9' id='type-id-928'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-214' size-in-bits='104' id='type-id-5120'>
+        <subrange length='13' type-id='type-id-9' id='type-id-201'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-214' size-in-bits='16' id='type-id-5121'>
+        <subrange length='2' type-id='type-id-9' id='type-id-128'/>
+
+      </array-type-def>
+      <class-decl name='edid' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='282' column='1' id='type-id-5005'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='header' type-id='type-id-1186' visibility='default' filepath='include/drm/drm_edid.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mfg_id' type-id='type-id-5121' visibility='default' filepath='include/drm/drm_edid.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='prod_code' type-id='type-id-5121' visibility='default' filepath='include/drm/drm_edid.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='serial' type-id='type-id-7' visibility='default' filepath='include/drm/drm_edid.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mfg_week' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='mfg_year' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='version' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='revision' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='input' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='width_cm' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='height_cm' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='184'>
+          <var-decl name='gamma' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='features' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='red_green_lo' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='black_white_lo' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='216'>
+          <var-decl name='red_x' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='red_y' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='232'>
+          <var-decl name='green_x' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='240'>
+          <var-decl name='green_y' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='248'>
+          <var-decl name='blue_x' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='blue_y' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='white_x' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='white_y' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='280'>
+          <var-decl name='established_timings' type-id='type-id-5122' visibility='default' filepath='include/drm/drm_edid.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='304'>
+          <var-decl name='standard_timings' type-id='type-id-5119' visibility='default' filepath='include/drm/drm_edid.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='432'>
+          <var-decl name='detailed_timings' type-id='type-id-5116' visibility='default' filepath='include/drm/drm_edid.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1008'>
+          <var-decl name='extensions' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1016'>
+          <var-decl name='checksum' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='319' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='est_timings' size-in-bits='24' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='43' column='1' id='type-id-5122'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='t1' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='t2' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='mfg_rsvd' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='std_timing' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='57' column='1' id='type-id-5117'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hsize' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='vfreq_aspect' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='detailed_timing' size-in-bits='144' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='164' column='1' id='type-id-5115'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pixel_clock' type-id='type-id-5123' visibility='default' filepath='include/drm/drm_edid.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='data' type-id='type-id-5124' visibility='default' filepath='include/drm/drm_edid.h' line='169' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__le16' type-id='type-id-108' filepath='include/uapi/linux/types.h' line='29' column='1' id='type-id-5123'/>
+      <union-decl name='__anonymous_union__' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/drm/drm_edid.h' line='166' column='1' id='type-id-5124'>
+        <data-member access='private'>
+          <var-decl name='pixel_data' type-id='type-id-5125' visibility='default' filepath='include/drm/drm_edid.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='other_data' type-id='type-id-5126' visibility='default' filepath='include/drm/drm_edid.h' line='168' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='detailed_pixel_timing' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='69' column='1' id='type-id-5125'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hactive_lo' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='hblank_lo' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='hactive_hblank_hi' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='vactive_lo' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='vblank_lo' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='vactive_vblank_hi' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='hsync_offset_lo' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='hsync_pulse_width_lo' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vsync_offset_pulse_width_lo' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='hsync_vsync_offset_pulse_width_hi' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='width_mm_lo' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='height_mm_lo' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='width_height_mm_hi' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='hborder' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='vborder' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='misc' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='85' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='detailed_non_pixel' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='139' column='1' id='type-id-5126'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pad1' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='type' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='pad2' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='data' type-id='type-id-5127' visibility='default' filepath='include/drm/drm_edid.h' line='151' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='104' is-anonymous='yes' visibility='default' filepath='include/drm/drm_edid.h' line='145' column='1' id='type-id-5127'>
+        <data-member access='private'>
+          <var-decl name='str' type-id='type-id-5128' visibility='default' filepath='include/drm/drm_edid.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='range' type-id='type-id-5129' visibility='default' filepath='include/drm/drm_edid.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='color' type-id='type-id-5130' visibility='default' filepath='include/drm/drm_edid.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='timings' type-id='type-id-5118' visibility='default' filepath='include/drm/drm_edid.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='cvt' type-id='type-id-5114' visibility='default' filepath='include/drm/drm_edid.h' line='150' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='detailed_data_string' size-in-bits='104' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='89' column='1' id='type-id-5128'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='str' type-id='type-id-5120' visibility='default' filepath='include/drm/drm_edid.h' line='90' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='detailed_data_monitor_range' size-in-bits='104' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='93' column='1' id='type-id-5129'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min_vfreq' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='max_vfreq' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='min_hfreq_khz' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='max_hfreq_khz' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pixel_clock_mhz' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='flags' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='formula' type-id='type-id-5131' visibility='default' filepath='include/drm/drm_edid.h' line='118' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='56' is-anonymous='yes' visibility='default' filepath='include/drm/drm_edid.h' line='100' column='1' id='type-id-5131'>
+        <data-member access='private'>
+          <var-decl name='gtf2' type-id='type-id-5132' visibility='default' filepath='include/drm/drm_edid.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='cvt' type-id='type-id-5133' visibility='default' filepath='include/drm/drm_edid.h' line='117' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='56' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/drm/drm_edid.h' line='101' column='1' id='type-id-5132'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reserved' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='hfreq_start_khz' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='c' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='m' type-id='type-id-5123' visibility='default' filepath='include/drm/drm_edid.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='k' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='j' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='107' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='56' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/drm/drm_edid.h' line='109' column='1' id='type-id-5133'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='version' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='data1' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='data2' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='supported_aspects' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='supported_scalings' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='preferred_refresh' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='116' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='detailed_data_wpindex' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='121' column='1' id='type-id-5130'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='white_yx_lo' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='white_x_hi' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='white_y_hi' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='gamma' type-id='type-id-214' visibility='default' filepath='include/drm/drm_edid.h' line='125' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cvt_timing' size-in-bits='24' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='135' column='1' id='type-id-5113'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='code' type-id='type-id-1185' visibility='default' filepath='include/drm/drm_edid.h' line='136' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-5005' size-in-bits='64' id='type-id-5134'/>
+      <pointer-type-def type-id='type-id-5135' size-in-bits='64' id='type-id-5136'/>
+      <function-decl name='drm_add_edid_modes' mangled-name='drm_add_edid_modes' filepath='drivers/gpu/drm/drm_edid.c' line='4818' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_add_edid_modes'>
+        <parameter type-id='type-id-4444' name='connector' filepath='drivers/gpu/drm/drm_edid.c' line='4818' column='1'/>
+        <parameter type-id='type-id-5134' name='edid' filepath='drivers/gpu/drm/drm_edid.c' line='4818' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='drm_do_get_edid' mangled-name='drm_do_get_edid' filepath='drivers/gpu/drm/drm_edid.c' line='1651' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_do_get_edid'>
+        <parameter type-id='type-id-4444' name='connector' filepath='drivers/gpu/drm/drm_edid.c' line='1651' column='1'/>
+        <parameter type-id='type-id-5136' name='get_edid_block' filepath='drivers/gpu/drm/drm_edid.c' line='1652' column='1'/>
+        <parameter type-id='type-id-15' name='data' filepath='drivers/gpu/drm/drm_edid.c' line='1654' column='1'/>
+        <return type-id='type-id-5134'/>
+      </function-decl>
+      <function-decl name='drm_add_modes_noedid' mangled-name='drm_add_modes_noedid' filepath='drivers/gpu/drm/drm_edid.c' line='4897' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_add_modes_noedid'>
+        <parameter type-id='type-id-4444' name='connector' filepath='drivers/gpu/drm/drm_edid.c' line='4897' column='1'/>
+        <parameter type-id='type-id-17' name='hdisplay' filepath='drivers/gpu/drm/drm_edid.c' line='4898' column='1'/>
+        <parameter type-id='type-id-17' name='vdisplay' filepath='drivers/gpu/drm/drm_edid.c' line='4898' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='drm_set_preferred_mode' mangled-name='drm_set_preferred_mode' filepath='drivers/gpu/drm/drm_edid.c' line='4943' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_set_preferred_mode'>
+        <parameter type-id='type-id-4444' name='connector' filepath='drivers/gpu/drm/drm_edid.c' line='4943' column='1'/>
+        <parameter type-id='type-id-17' name='hpref' filepath='drivers/gpu/drm/drm_edid.c' line='4944' column='1'/>
+        <parameter type-id='type-id-17' name='vpref' filepath='drivers/gpu/drm/drm_edid.c' line='4944' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-5135'>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-3121'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-84'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_global.c' language='LANG_C89'>
+      <class-decl name='drm_global_reference' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/drm/drm_global.h' line='40' column='1' id='type-id-5137'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='global_type' type-id='type-id-5138' visibility='default' filepath='include/drm/drm_global.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='type-id-84' visibility='default' filepath='include/drm/drm_global.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='object' type-id='type-id-15' visibility='default' filepath='include/drm/drm_global.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='init' type-id='type-id-5139' visibility='default' filepath='include/drm/drm_global.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='release' type-id='type-id-5140' visibility='default' filepath='include/drm/drm_global.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='drm_global_types' filepath='include/drm/drm_global.h' line='33' column='1' id='type-id-5138'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='DRM_GLOBAL_TTM_MEM' value='0'/>
+        <enumerator name='DRM_GLOBAL_TTM_BO' value='1'/>
+        <enumerator name='DRM_GLOBAL_TTM_OBJECT' value='2'/>
+        <enumerator name='DRM_GLOBAL_NUM' value='3'/>
+      </enum-decl>
+      <pointer-type-def type-id='type-id-5137' size-in-bits='64' id='type-id-5141'/>
+      <pointer-type-def type-id='type-id-5142' size-in-bits='64' id='type-id-5139'/>
+      <pointer-type-def type-id='type-id-5143' size-in-bits='64' id='type-id-5140'/>
+      <function-decl name='drm_global_item_ref' mangled-name='drm_global_item_ref' filepath='drivers/gpu/drm/drm_global.c' line='78' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_global_item_ref'>
+        <parameter type-id='type-id-5141' name='ref' filepath='drivers/gpu/drm/drm_global.c' line='78' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='drm_global_item_unref' mangled-name='drm_global_item_unref' filepath='drivers/gpu/drm/drm_global.c' line='123' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_global_item_unref'>
+        <parameter type-id='type-id-5141' name='ref' filepath='drivers/gpu/drm/drm_global.c' line='123' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-5142'>
+        <parameter type-id='type-id-5141' name='ref'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5143'>
+        <parameter type-id='type-id-5141'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_prime.c' language='LANG_C89'>
+      <function-decl name='drm_gem_prime_export' mangled-name='drm_gem_prime_export' filepath='drivers/gpu/drm/drm_prime.c' line='530' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_prime_export'>
+        <parameter type-id='type-id-4446' name='dev' filepath='drivers/gpu/drm/drm_prime.c' line='530' column='1'/>
+        <parameter type-id='type-id-5067' name='obj' filepath='drivers/gpu/drm/drm_prime.c' line='531' column='1'/>
+        <parameter type-id='type-id-17' name='flags' filepath='drivers/gpu/drm/drm_prime.c' line='532' column='1'/>
+        <return type-id='type-id-5034'/>
+      </function-decl>
+      <function-decl name='drm_gem_prime_handle_to_fd' mangled-name='drm_gem_prime_handle_to_fd' filepath='drivers/gpu/drm/drm_prime.c' line='594' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_prime_handle_to_fd'>
+        <parameter type-id='type-id-4446' name='dev' filepath='drivers/gpu/drm/drm_prime.c' line='594' column='1'/>
+        <parameter type-id='type-id-4615' name='file_priv' filepath='drivers/gpu/drm/drm_prime.c' line='595' column='1'/>
+        <parameter type-id='type-id-1343' name='handle' filepath='drivers/gpu/drm/drm_prime.c' line='595' column='1'/>
+        <parameter type-id='type-id-1343' name='flags' filepath='drivers/gpu/drm/drm_prime.c' line='596' column='1'/>
+        <parameter type-id='type-id-666' name='prime_fd' filepath='drivers/gpu/drm/drm_prime.c' line='597' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='drm_gem_prime_mmap' mangled-name='drm_gem_prime_mmap' filepath='drivers/gpu/drm/drm_prime.c' line='693' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_prime_mmap'>
+        <parameter type-id='type-id-5067' name='obj' filepath='drivers/gpu/drm/drm_prime.c' line='693' column='1'/>
+        <parameter type-id='type-id-1209' name='vma' filepath='drivers/gpu/drm/drm_prime.c' line='693' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='drm_gem_prime_import' mangled-name='drm_gem_prime_import' filepath='drivers/gpu/drm/drm_prime.c' line='792' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_prime_import'>
+        <parameter type-id='type-id-4446' name='dev' filepath='drivers/gpu/drm/drm_prime.c' line='792' column='1'/>
+        <parameter type-id='type-id-5034' name='dma_buf' filepath='drivers/gpu/drm/drm_prime.c' line='793' column='1'/>
+        <return type-id='type-id-5067'/>
+      </function-decl>
+      <function-decl name='drm_gem_prime_fd_to_handle' mangled-name='drm_gem_prime_fd_to_handle' filepath='drivers/gpu/drm/drm_prime.c' line='811' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_prime_fd_to_handle'>
+        <parameter type-id='type-id-4446' name='dev' filepath='drivers/gpu/drm/drm_prime.c' line='811' column='1'/>
+        <parameter type-id='type-id-4615' name='file_priv' filepath='drivers/gpu/drm/drm_prime.c' line='812' column='1'/>
+        <parameter type-id='type-id-17' name='prime_fd' filepath='drivers/gpu/drm/drm_prime.c' line='812' column='1'/>
+        <parameter type-id='type-id-4633' name='handle' filepath='drivers/gpu/drm/drm_prime.c' line='813' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='drm_prime_pages_to_sg' mangled-name='drm_prime_pages_to_sg' filepath='drivers/gpu/drm/drm_prime.c' line='921' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_prime_pages_to_sg'>
+        <parameter type-id='type-id-923' name='pages' filepath='drivers/gpu/drm/drm_prime.c' line='921' column='1'/>
+        <parameter type-id='type-id-5' name='nr_pages' filepath='drivers/gpu/drm/drm_prime.c' line='921' column='1'/>
+        <return type-id='type-id-922'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_vma_manager.c' language='LANG_C89'>
+      <pointer-type-def type-id='type-id-5033' size-in-bits='64' id='type-id-5144'/>
+      <function-decl name='drm_vma_offset_manager_init' mangled-name='drm_vma_offset_manager_init' filepath='drivers/gpu/drm/drm_vma_manager.c' line='85' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_vma_offset_manager_init'>
+        <parameter type-id='type-id-4506' name='mgr' filepath='drivers/gpu/drm/drm_vma_manager.c' line='85' column='1'/>
+        <parameter type-id='type-id-16' name='page_offset' filepath='drivers/gpu/drm/drm_vma_manager.c' line='86' column='1'/>
+        <parameter type-id='type-id-16' name='size' filepath='drivers/gpu/drm/drm_vma_manager.c' line='86' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='drm_vma_offset_manager_destroy' mangled-name='drm_vma_offset_manager_destroy' filepath='drivers/gpu/drm/drm_vma_manager.c' line='104' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_vma_offset_manager_destroy'>
+        <parameter type-id='type-id-4506' name='mgr' filepath='drivers/gpu/drm/drm_vma_manager.c' line='104' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='drm_vma_offset_lookup_locked' mangled-name='drm_vma_offset_lookup_locked' filepath='drivers/gpu/drm/drm_vma_manager.c' line='143' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_vma_offset_lookup_locked'>
+        <parameter type-id='type-id-4506' name='mgr' filepath='drivers/gpu/drm/drm_vma_manager.c' line='143' column='1'/>
+        <parameter type-id='type-id-16' name='start' filepath='drivers/gpu/drm/drm_vma_manager.c' line='144' column='1'/>
+        <parameter type-id='type-id-16' name='pages' filepath='drivers/gpu/drm/drm_vma_manager.c' line='145' column='1'/>
+        <return type-id='type-id-5144'/>
+      </function-decl>
+      <function-decl name='drm_vma_offset_add' mangled-name='drm_vma_offset_add' filepath='drivers/gpu/drm/drm_vma_manager.c' line='204' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_vma_offset_add'>
+        <parameter type-id='type-id-4506' name='mgr' filepath='drivers/gpu/drm/drm_vma_manager.c' line='204' column='1'/>
+        <parameter type-id='type-id-5144' name='node' filepath='drivers/gpu/drm/drm_vma_manager.c' line='205' column='1'/>
+        <parameter type-id='type-id-16' name='pages' filepath='drivers/gpu/drm/drm_vma_manager.c' line='205' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='drm_vma_offset_remove' mangled-name='drm_vma_offset_remove' filepath='drivers/gpu/drm/drm_vma_manager.c' line='232' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_vma_offset_remove'>
+        <parameter type-id='type-id-4506' name='mgr' filepath='drivers/gpu/drm/drm_vma_manager.c' line='232' column='1'/>
+        <parameter type-id='type-id-5144' name='node' filepath='drivers/gpu/drm/drm_vma_manager.c' line='233' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_framebuffer.c' language='LANG_C89'>
+      <function-decl name='drm_framebuffer_init' mangled-name='drm_framebuffer_init' filepath='drivers/gpu/drm/drm_framebuffer.c' line='681' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_framebuffer_init'>
+        <parameter type-id='type-id-4446' name='dev' filepath='drivers/gpu/drm/drm_framebuffer.c' line='681' column='1'/>
+        <parameter type-id='type-id-4609' name='fb' filepath='drivers/gpu/drm/drm_framebuffer.c' line='681' column='1'/>
+        <parameter type-id='type-id-4597' name='funcs' filepath='drivers/gpu/drm/drm_framebuffer.c' line='682' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_encoder.c' language='LANG_C89'>
+      <function-decl name='drm_encoder_init' mangled-name='drm_encoder_init' filepath='drivers/gpu/drm/drm_encoder.c' line='106' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_encoder_init'>
+        <parameter type-id='type-id-4446' name='dev' filepath='drivers/gpu/drm/drm_encoder.c' line='106' column='1'/>
+        <parameter type-id='type-id-4490' name='encoder' filepath='drivers/gpu/drm/drm_encoder.c' line='107' column='1'/>
+        <parameter type-id='type-id-4774' name='funcs' filepath='drivers/gpu/drm/drm_encoder.c' line='108' column='1'/>
+        <parameter type-id='type-id-17' name='encoder_type' filepath='drivers/gpu/drm/drm_encoder.c' line='109' column='1'/>
+        <parameter type-id='type-id-4' name='name' filepath='drivers/gpu/drm/drm_encoder.c' line='109' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='drm_encoder_cleanup' mangled-name='drm_encoder_cleanup' filepath='drivers/gpu/drm/drm_encoder.c' line='157' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_encoder_cleanup'>
+        <parameter type-id='type-id-4490' name='encoder' filepath='drivers/gpu/drm/drm_encoder.c' line='157' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_plane.c' language='LANG_C89'>
+      <qualified-type-def type-id='type-id-1343' const='yes' id='type-id-5145'/>
+      <pointer-type-def type-id='type-id-5145' size-in-bits='64' id='type-id-5146'/>
+      <qualified-type-def type-id='type-id-2439' const='yes' id='type-id-5147'/>
+      <pointer-type-def type-id='type-id-5147' size-in-bits='64' id='type-id-5148'/>
+      <function-decl name='drm_universal_plane_init' mangled-name='drm_universal_plane_init' filepath='drivers/gpu/drm/drm_plane.c' line='164' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_universal_plane_init'>
+        <parameter type-id='type-id-4446' name='dev' filepath='drivers/gpu/drm/drm_plane.c' line='164' column='1'/>
+        <parameter type-id='type-id-4626' name='plane' filepath='drivers/gpu/drm/drm_plane.c' line='164' column='1'/>
+        <parameter type-id='type-id-1343' name='possible_crtcs' filepath='drivers/gpu/drm/drm_plane.c' line='165' column='1'/>
+        <parameter type-id='type-id-4634' name='funcs' filepath='drivers/gpu/drm/drm_plane.c' line='166' column='1'/>
+        <parameter type-id='type-id-5146' name='formats' filepath='drivers/gpu/drm/drm_plane.c' line='167' column='1'/>
+        <parameter type-id='type-id-5' name='format_count' filepath='drivers/gpu/drm/drm_plane.c' line='167' column='1'/>
+        <parameter type-id='type-id-5148' name='format_modifiers' filepath='drivers/gpu/drm/drm_plane.c' line='168' column='1'/>
+        <parameter type-id='type-id-4635' name='type' filepath='drivers/gpu/drm/drm_plane.c' line='169' column='1'/>
+        <parameter type-id='type-id-4' name='name' filepath='drivers/gpu/drm/drm_plane.c' line='170' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='drm_plane_cleanup' mangled-name='drm_plane_cleanup' filepath='drivers/gpu/drm/drm_plane.c' line='346' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_plane_cleanup'>
+        <parameter type-id='type-id-4626' name='plane' filepath='drivers/gpu/drm/drm_plane.c' line='346' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_print.c' language='LANG_C89'>
+      <function-decl name='__drm_printfn_debug' mangled-name='__drm_printfn_debug' filepath='drivers/gpu/drm/drm_print.c' line='139' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__drm_printfn_debug'>
+        <parameter type-id='type-id-4867' name='p' filepath='drivers/gpu/drm/drm_print.c' line='139' column='1'/>
+        <parameter type-id='type-id-4963' name='vaf' filepath='drivers/gpu/drm/drm_print.c' line='139' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='drm_dbg' mangled-name='drm_dbg' filepath='drivers/gpu/drm/drm_print.c' line='222' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dbg'>
+        <parameter type-id='type-id-5' name='category' filepath='drivers/gpu/drm/drm_print.c' line='222' column='1'/>
+        <parameter type-id='type-id-4' name='format' filepath='drivers/gpu/drm/drm_print.c' line='222' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='drm_err' mangled-name='drm_err' filepath='drivers/gpu/drm/drm_print.c' line='241' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_err'>
+        <parameter type-id='type-id-4' name='format' filepath='drivers/gpu/drm/drm_print.c' line='241' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_vblank.c' language='LANG_C89'>
+      <function-decl name='drm_crtc_send_vblank_event' mangled-name='drm_crtc_send_vblank_event' filepath='drivers/gpu/drm/drm_vblank.c' line='912' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_crtc_send_vblank_event'>
+        <parameter type-id='type-id-4623' name='crtc' filepath='drivers/gpu/drm/drm_vblank.c' line='912' column='1'/>
+        <parameter type-id='type-id-4693' name='e' filepath='drivers/gpu/drm/drm_vblank.c' line='913' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_ioc32.c' language='LANG_C89'>
+      <function-decl name='drm_compat_ioctl' mangled-name='drm_compat_ioctl' filepath='drivers/gpu/drm/drm_ioc32.c' line='957' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_compat_ioctl'>
+        <parameter type-id='type-id-83' name='filp' filepath='drivers/gpu/drm/drm_ioc32.c' line='957' column='1'/>
+        <parameter type-id='type-id-5' name='cmd' filepath='drivers/gpu/drm/drm_ioc32.c' line='957' column='1'/>
+        <parameter type-id='type-id-16' name='arg' filepath='drivers/gpu/drm/drm_ioc32.c' line='957' column='1'/>
+        <return type-id='type-id-192'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/driver.c' language='LANG_C89'>
+      <function-decl name='driver_register' mangled-name='driver_register' filepath='drivers/base/driver.c' line='146' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='driver_register'>
+        <parameter type-id='type-id-2013' name='drv' filepath='drivers/base/driver.c' line='146' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='driver_unregister' mangled-name='driver_unregister' filepath='drivers/base/driver.c' line='190' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='driver_unregister'>
+        <parameter type-id='type-id-2013' name='drv' filepath='drivers/base/driver.c' line='190' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/class.c' language='LANG_C89'>
+      <function-decl name='__class_register' mangled-name='__class_register' filepath='drivers/base/class.c' line='146' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__class_register'>
+        <parameter type-id='type-id-2027' name='cls' filepath='drivers/base/class.c' line='146' column='1'/>
+        <parameter type-id='type-id-1698' name='key' filepath='drivers/base/class.c' line='146' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='class_unregister' mangled-name='class_unregister' filepath='drivers/base/class.c' line='192' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='class_unregister'>
+        <parameter type-id='type-id-2027' name='cls' filepath='drivers/base/class.c' line='192' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='__class_create' mangled-name='__class_create' filepath='drivers/base/class.c' line='219' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__class_create'>
+        <parameter type-id='type-id-260' name='owner' filepath='drivers/base/class.c' line='219' column='1'/>
+        <parameter type-id='type-id-4' name='name' filepath='drivers/base/class.c' line='219' column='1'/>
+        <parameter type-id='type-id-1698' name='key' filepath='drivers/base/class.c' line='220' column='1'/>
+        <return type-id='type-id-2027'/>
+      </function-decl>
+      <function-decl name='class_destroy' mangled-name='class_destroy' filepath='drivers/base/class.c' line='254' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='class_destroy'>
+        <parameter type-id='type-id-2027' name='cls' filepath='drivers/base/class.c' line='254' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/devres.c' language='LANG_C89'>
+      <typedef-decl name='dr_release_t' type-id='type-id-4367' filepath='include/linux/device.h' line='642' column='1' id='type-id-5149'/>
+      <typedef-decl name='dr_match_t' type-id='type-id-5150' filepath='include/linux/device.h' line='643' column='1' id='type-id-5151'/>
+      <pointer-type-def type-id='type-id-5152' size-in-bits='64' id='type-id-5150'/>
+      <function-decl name='__devres_alloc_node' mangled-name='__devres_alloc_node' filepath='drivers/base/devres.c' line='120' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__devres_alloc_node'>
+        <parameter type-id='type-id-5149' name='release' filepath='drivers/base/devres.c' line='120' column='1'/>
+        <parameter type-id='type-id-84' name='size' filepath='drivers/base/devres.c' line='120' column='1'/>
+        <parameter type-id='type-id-485' name='gfp' filepath='drivers/base/devres.c' line='120' column='1'/>
+        <parameter type-id='type-id-17' name='nid' filepath='drivers/base/devres.c' line='120' column='1'/>
+        <parameter type-id='type-id-4' name='name' filepath='drivers/base/devres.c' line='121' column='1'/>
+        <return type-id='type-id-15'/>
+      </function-decl>
+      <function-decl name='devres_free' mangled-name='devres_free' filepath='drivers/base/devres.c' line='207' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devres_free'>
+        <parameter type-id='type-id-15' name='res' filepath='drivers/base/devres.c' line='207' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='devres_add' mangled-name='devres_add' filepath='drivers/base/devres.c' line='227' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devres_add'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/base/devres.c' line='227' column='1'/>
+        <parameter type-id='type-id-15' name='res' filepath='drivers/base/devres.c' line='227' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='devres_destroy' mangled-name='devres_destroy' filepath='drivers/base/devres.c' line='374' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devres_destroy'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/base/devres.c' line='374' column='1'/>
+        <parameter type-id='type-id-5149' name='release' filepath='drivers/base/devres.c' line='374' column='1'/>
+        <parameter type-id='type-id-5151' name='match' filepath='drivers/base/devres.c' line='375' column='1'/>
+        <parameter type-id='type-id-15' name='match_data' filepath='drivers/base/devres.c' line='375' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='devm_kmalloc' mangled-name='devm_kmalloc' filepath='drivers/base/devres.c' line='786' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_kmalloc'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/base/devres.c' line='786' column='1'/>
+        <parameter type-id='type-id-84' name='size' filepath='drivers/base/devres.c' line='786' column='1'/>
+        <parameter type-id='type-id-485' name='gfp' filepath='drivers/base/devres.c' line='786' column='1'/>
+        <return type-id='type-id-15'/>
+      </function-decl>
+      <function-decl name='devm_kfree' mangled-name='devm_kfree' filepath='drivers/base/devres.c' line='894' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_kfree'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/base/devres.c' line='894' column='1'/>
+        <parameter type-id='type-id-15' name='p' filepath='drivers/base/devres.c' line='894' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-5152'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/power/generic_ops.c' language='LANG_C89'>
+      <function-decl name='pm_generic_runtime_suspend' mangled-name='pm_generic_runtime_suspend' filepath='drivers/base/power/generic_ops.c' line='22' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_generic_runtime_suspend'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/base/power/generic_ops.c' line='22' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='pm_generic_runtime_resume' mangled-name='pm_generic_runtime_resume' filepath='drivers/base/power/generic_ops.c' line='41' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_generic_runtime_resume'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/base/power/generic_ops.c' line='41' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='pm_generic_suspend' mangled-name='pm_generic_suspend' filepath='drivers/base/power/generic_ops.c' line='99' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_generic_suspend'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/base/power/generic_ops.c' line='99' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='pm_generic_resume' mangled-name='pm_generic_resume' filepath='drivers/base/power/generic_ops.c' line='243' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_generic_resume'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/base/power/generic_ops.c' line='243' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/power/common.c' language='LANG_C89'>
+      <function-decl name='dev_pm_domain_attach' mangled-name='dev_pm_domain_attach' filepath='drivers/base/power/common.c' line='104' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_domain_attach'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/base/power/common.c' line='104' column='1'/>
+        <parameter type-id='type-id-33' name='power_on' filepath='drivers/base/power/common.c' line='104' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='dev_pm_domain_detach' mangled-name='dev_pm_domain_detach' filepath='drivers/base/power/common.c' line='185' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_domain_detach'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/base/power/common.c' line='185' column='1'/>
+        <parameter type-id='type-id-33' name='power_off' filepath='drivers/base/power/common.c' line='185' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/power/runtime.c' language='LANG_C89'>
+      <function-decl name='__pm_runtime_idle' mangled-name='__pm_runtime_idle' filepath='drivers/base/power/runtime.c' line='965' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__pm_runtime_idle'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/base/power/runtime.c' line='965' column='1'/>
+        <parameter type-id='type-id-17' name='rpmflags' filepath='drivers/base/power/runtime.c' line='965' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='__pm_runtime_suspend' mangled-name='__pm_runtime_suspend' filepath='drivers/base/power/runtime.c' line='997' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__pm_runtime_suspend'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/base/power/runtime.c' line='997' column='1'/>
+        <parameter type-id='type-id-17' name='rpmflags' filepath='drivers/base/power/runtime.c' line='997' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='__pm_runtime_resume' mangled-name='__pm_runtime_resume' filepath='drivers/base/power/runtime.c' line='1028' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__pm_runtime_resume'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/base/power/runtime.c' line='1028' column='1'/>
+        <parameter type-id='type-id-17' name='rpmflags' filepath='drivers/base/power/runtime.c' line='1028' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='__pm_runtime_set_status' mangled-name='__pm_runtime_set_status' filepath='drivers/base/power/runtime.c' line='1088' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__pm_runtime_set_status'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/base/power/runtime.c' line='1088' column='1'/>
+        <parameter type-id='type-id-5' name='status' filepath='drivers/base/power/runtime.c' line='1088' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='__pm_runtime_disable' mangled-name='__pm_runtime_disable' filepath='drivers/base/power/runtime.c' line='1245' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__pm_runtime_disable'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/base/power/runtime.c' line='1245' column='1'/>
+        <parameter type-id='type-id-33' name='check_resume' filepath='drivers/base/power/runtime.c' line='1245' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='pm_runtime_enable' mangled-name='pm_runtime_enable' filepath='drivers/base/power/runtime.c' line='1284' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_runtime_enable'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/base/power/runtime.c' line='1284' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='pm_runtime_set_autosuspend_delay' mangled-name='pm_runtime_set_autosuspend_delay' filepath='drivers/base/power/runtime.c' line='1435' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_runtime_set_autosuspend_delay'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/base/power/runtime.c' line='1435' column='1'/>
+        <parameter type-id='type-id-17' name='delay' filepath='drivers/base/power/runtime.c' line='1435' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='__pm_runtime_use_autosuspend' mangled-name='__pm_runtime_use_autosuspend' filepath='drivers/base/power/runtime.c' line='1456' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__pm_runtime_use_autosuspend'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/base/power/runtime.c' line='1456' column='1'/>
+        <parameter type-id='type-id-33' name='use' filepath='drivers/base/power/runtime.c' line='1456' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/power/wakeup.c' language='LANG_C89'>
+      <function-decl name='pm_wakeup_dev_event' mangled-name='pm_wakeup_dev_event' filepath='drivers/base/power/wakeup.c' line='804' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_wakeup_dev_event'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/base/power/wakeup.c' line='804' column='1'/>
+        <parameter type-id='type-id-5' name='msec' filepath='drivers/base/power/wakeup.c' line='804' column='1'/>
+        <parameter type-id='type-id-33' name='hard' filepath='drivers/base/power/wakeup.c' line='804' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/dma-buf/dma-buf.c' language='LANG_C89'>
+      <class-decl name='dma_buf_export_info' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/dma-buf.h' line='344' column='1' id='type-id-5153'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='exp_name' type-id='type-id-4' visibility='default' filepath='include/linux/dma-buf.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='include/linux/dma-buf.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ops' type-id='type-id-5041' visibility='default' filepath='include/linux/dma-buf.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='size' type-id='type-id-84' visibility='default' filepath='include/linux/dma-buf.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='type-id-17' visibility='default' filepath='include/linux/dma-buf.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='resv' type-id='type-id-5042' visibility='default' filepath='include/linux/dma-buf.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='priv' type-id='type-id-15' visibility='default' filepath='include/linux/dma-buf.h' line='351' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='type-id-5153' const='yes' id='type-id-5154'/>
+      <pointer-type-def type-id='type-id-5154' size-in-bits='64' id='type-id-5155'/>
+      <function-decl name='dma_buf_export' mangled-name='dma_buf_export' filepath='drivers/dma-buf/dma-buf.c' line='508' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_export'>
+        <parameter type-id='type-id-5155' name='exp_info' filepath='drivers/dma-buf/dma-buf.c' line='508' column='1'/>
+        <return type-id='type-id-5034'/>
+      </function-decl>
+      <function-decl name='dma_buf_fd' mangled-name='dma_buf_fd' filepath='drivers/dma-buf/dma-buf.c' line='589' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_fd'>
+        <parameter type-id='type-id-5034' name='dmabuf' filepath='drivers/dma-buf/dma-buf.c' line='589' column='1'/>
+        <parameter type-id='type-id-17' name='flags' filepath='drivers/dma-buf/dma-buf.c' line='589' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='dma_buf_get' mangled-name='dma_buf_get' filepath='drivers/dma-buf/dma-buf.c' line='614' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_get'>
+        <parameter type-id='type-id-17' name='fd' filepath='drivers/dma-buf/dma-buf.c' line='614' column='1'/>
+        <return type-id='type-id-5034'/>
+      </function-decl>
+      <function-decl name='dma_buf_put' mangled-name='dma_buf_put' filepath='drivers/dma-buf/dma-buf.c' line='642' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_put'>
+        <parameter type-id='type-id-5034' name='dmabuf' filepath='drivers/dma-buf/dma-buf.c' line='642' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/dma-buf/dma-fence.c' language='LANG_C89'>
+      <function-decl name='dma_fence_context_alloc' mangled-name='dma_fence_context_alloc' filepath='drivers/dma-buf/dma-fence.c' line='79' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_context_alloc'>
+        <parameter type-id='type-id-5' name='num' filepath='drivers/dma-buf/dma-fence.c' line='79' column='1'/>
+        <return type-id='type-id-40'/>
+      </function-decl>
+      <function-decl name='dma_fence_signal_locked' mangled-name='dma_fence_signal_locked' filepath='drivers/dma-buf/dma-fence.c' line='102' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_signal_locked'>
+        <parameter type-id='type-id-4651' name='fence' filepath='drivers/dma-buf/dma-fence.c' line='102' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='dma_fence_signal' mangled-name='dma_fence_signal' filepath='drivers/dma-buf/dma-fence.c' line='146' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_signal'>
+        <parameter type-id='type-id-4651' name='fence' filepath='drivers/dma-buf/dma-fence.c' line='146' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='dma_fence_wait_timeout' mangled-name='dma_fence_wait_timeout' filepath='drivers/dma-buf/dma-fence.c' line='193' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_wait_timeout'>
+        <parameter type-id='type-id-4651' name='fence' filepath='drivers/dma-buf/dma-fence.c' line='193' column='1'/>
+        <parameter type-id='type-id-33' name='intr' filepath='drivers/dma-buf/dma-fence.c' line='193' column='1'/>
+        <parameter type-id='type-id-192' name='timeout' filepath='drivers/dma-buf/dma-fence.c' line='193' column='1'/>
+        <return type-id='type-id-192'/>
+      </function-decl>
+      <function-decl name='dma_fence_release' mangled-name='dma_fence_release' filepath='drivers/dma-buf/dma-fence.c' line='217' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_release'>
+        <parameter type-id='type-id-4944' name='kref' filepath='drivers/dma-buf/dma-fence.c' line='217' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='dma_fence_enable_sw_signaling' mangled-name='dma_fence_enable_sw_signaling' filepath='drivers/dma-buf/dma-fence.c' line='255' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_enable_sw_signaling'>
+        <parameter type-id='type-id-4651' name='fence' filepath='drivers/dma-buf/dma-fence.c' line='255' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='dma_fence_init' mangled-name='dma_fence_init' filepath='drivers/dma-buf/dma-fence.c' line='617' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_init'>
+        <parameter type-id='type-id-4651' name='fence' filepath='drivers/dma-buf/dma-fence.c' line='617' column='1'/>
+        <parameter type-id='type-id-4657' name='ops' filepath='drivers/dma-buf/dma-fence.c' line='617' column='1'/>
+        <parameter type-id='type-id-486' name='lock' filepath='drivers/dma-buf/dma-fence.c' line='618' column='1'/>
+        <parameter type-id='type-id-40' name='context' filepath='drivers/dma-buf/dma-fence.c' line='618' column='1'/>
+        <parameter type-id='type-id-5' name='seqno' filepath='drivers/dma-buf/dma-fence.c' line='618' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/dma-buf/dma-fence-array.c' language='LANG_C89'>
+      <function-decl name='dma_fence_match_context' mangled-name='dma_fence_match_context' filepath='drivers/dma-buf/dma-fence-array.c' line='166' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_match_context'>
+        <parameter type-id='type-id-4651' name='fence' filepath='drivers/dma-buf/dma-fence-array.c' line='166' column='1'/>
+        <parameter type-id='type-id-40' name='context' filepath='drivers/dma-buf/dma-fence-array.c' line='166' column='1'/>
+        <return type-id='type-id-33'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/dma-buf/reservation.c' language='LANG_C89'>
+      <function-decl name='reservation_object_reserve_shared' mangled-name='reservation_object_reserve_shared' filepath='drivers/dma-buf/reservation.c' line='69' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='reservation_object_reserve_shared'>
+        <parameter type-id='type-id-5042' name='obj' filepath='drivers/dma-buf/reservation.c' line='69' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='reservation_object_add_shared_fence' mangled-name='reservation_object_add_shared_fence' filepath='drivers/dma-buf/reservation.c' line='226' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='reservation_object_add_shared_fence'>
+        <parameter type-id='type-id-5042' name='obj' filepath='drivers/dma-buf/reservation.c' line='226' column='1'/>
+        <parameter type-id='type-id-4651' name='fence' filepath='drivers/dma-buf/reservation.c' line='227' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='reservation_object_add_excl_fence' mangled-name='reservation_object_add_excl_fence' filepath='drivers/dma-buf/reservation.c' line='248' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='reservation_object_add_excl_fence'>
+        <parameter type-id='type-id-5042' name='obj' filepath='drivers/dma-buf/reservation.c' line='248' column='1'/>
+        <parameter type-id='type-id-4651' name='fence' filepath='drivers/dma-buf/reservation.c' line='249' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='reservation_object_copy_fences' mangled-name='reservation_object_copy_fences' filepath='drivers/dma-buf/reservation.c' line='287' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='reservation_object_copy_fences'>
+        <parameter type-id='type-id-5042' name='dst' filepath='drivers/dma-buf/reservation.c' line='287' column='1'/>
+        <parameter type-id='type-id-5042' name='src' filepath='drivers/dma-buf/reservation.c' line='288' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='reservation_object_wait_timeout_rcu' mangled-name='reservation_object_wait_timeout_rcu' filepath='drivers/dma-buf/reservation.c' line='486' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='reservation_object_wait_timeout_rcu'>
+        <parameter type-id='type-id-5042' name='obj' filepath='drivers/dma-buf/reservation.c' line='486' column='1'/>
+        <parameter type-id='type-id-33' name='wait_all' filepath='drivers/dma-buf/reservation.c' line='487' column='1'/>
+        <parameter type-id='type-id-33' name='intr' filepath='drivers/dma-buf/reservation.c' line='487' column='1'/>
+        <parameter type-id='type-id-16' name='timeout' filepath='drivers/dma-buf/reservation.c' line='488' column='1'/>
+        <return type-id='type-id-192'/>
+      </function-decl>
+      <function-decl name='reservation_object_test_signaled_rcu' mangled-name='reservation_object_test_signaled_rcu' filepath='drivers/dma-buf/reservation.c' line='590' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='reservation_object_test_signaled_rcu'>
+        <parameter type-id='type-id-5042' name='obj' filepath='drivers/dma-buf/reservation.c' line='590' column='1'/>
+        <parameter type-id='type-id-33' name='test_all' filepath='drivers/dma-buf/reservation.c' line='591' column='1'/>
+        <return type-id='type-id-33'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/dma-buf/sync_file.c' language='LANG_C89'>
+      <class-decl name='cred' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-5156'/>
+      <class-decl name='sync_file' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/sync_file.h' line='35' column='1' id='type-id-5157'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='file' type-id='type-id-83' visibility='default' filepath='include/linux/sync_file.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='user_name' type-id='type-id-373' visibility='default' filepath='include/linux/sync_file.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sync_file_list' type-id='type-id-20' visibility='default' filepath='include/linux/sync_file.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='wq' type-id='type-id-225' visibility='default' filepath='include/linux/sync_file.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='include/linux/sync_file.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='fence' type-id='type-id-4651' visibility='default' filepath='include/linux/sync_file.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='cb' type-id='type-id-5060' visibility='default' filepath='include/linux/sync_file.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='type-id-5156' const='yes' id='type-id-5158'/>
+      <pointer-type-def type-id='type-id-5158' size-in-bits='64' id='type-id-5159'/>
+      <pointer-type-def type-id='type-id-5157' size-in-bits='64' id='type-id-5160'/>
+      <function-decl name='sync_file_create' mangled-name='sync_file_create' filepath='drivers/dma-buf/sync_file.c' line='73' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sync_file_create'>
+        <parameter type-id='type-id-4651' name='fence' filepath='drivers/dma-buf/sync_file.c' line='73' column='1'/>
+        <return type-id='type-id-5160'/>
+      </function-decl>
+      <function-decl name='sync_file_get_fence' mangled-name='sync_file_get_fence' filepath='drivers/dma-buf/sync_file.c' line='111' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sync_file_get_fence'>
+        <parameter type-id='type-id-17' name='fd' filepath='drivers/dma-buf/sync_file.c' line='111' column='1'/>
+        <return type-id='type-id-4651'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/core/ethtool.c' language='LANG_C89'>
+
+      <array-type-def dimensions='1' type-id='type-id-1' size-in-bits='488' id='type-id-5161'>
+        <subrange length='61' type-id='type-id-9' id='type-id-5162'/>
+
+      </array-type-def>
+      <class-decl name='Qdisc' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-5163'/>
+      <class-decl name='mini_Qdisc' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-5164'/>
+      <class-decl name='phylink' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-5165'/>
+      <array-type-def dimensions='1' type-id='type-id-5166' size-in-bits='2048' id='type-id-5167'>
+        <subrange length='32' type-id='type-id-9' id='type-id-941'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-7' size-in-bits='256' id='type-id-5168'>
+        <subrange length='8' type-id='type-id-9' id='type-id-928'/>
+
+      </array-type-def>
+      <class-decl name='mdio_device' size-in-bits='6912' is-struct='yes' visibility='default' filepath='include/linux/mdio.h' line='29' column='1' id='type-id-5169'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='type-id-388' visibility='default' filepath='include/linux/mdio.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='bus' type-id='type-id-5170' visibility='default' filepath='include/linux/mdio.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='modalias' type-id='type-id-373' visibility='default' filepath='include/linux/mdio.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='bus_match' type-id='type-id-2045' visibility='default' filepath='include/linux/mdio.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='device_free' type-id='type-id-5171' visibility='default' filepath='include/linux/mdio.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='device_remove' type-id='type-id-5171' visibility='default' filepath='include/linux/mdio.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='addr' type-id='type-id-17' visibility='default' filepath='include/linux/mdio.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6752'>
+          <var-decl name='flags' type-id='type-id-17' visibility='default' filepath='include/linux/mdio.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='reset' type-id='type-id-4018' visibility='default' filepath='include/linux/mdio.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='reset_assert_delay' type-id='type-id-5' visibility='default' filepath='include/linux/mdio.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6880'>
+          <var-decl name='reset_deassert_delay' type-id='type-id-5' visibility='default' filepath='include/linux/mdio.h' line='44' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mii_bus' size-in-bits='10752' is-struct='yes' visibility='default' filepath='include/linux/phy.h' line='193' column='1' id='type-id-5172'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='include/linux/phy.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/phy.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='id' type-id='type-id-5161' visibility='default' filepath='include/linux/phy.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='priv' type-id='type-id-15' visibility='default' filepath='include/linux/phy.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='read' type-id='type-id-5173' visibility='default' filepath='include/linux/phy.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='write' type-id='type-id-5174' visibility='default' filepath='include/linux/phy.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='reset' type-id='type-id-5175' visibility='default' filepath='include/linux/phy.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='mdio_lock' type-id='type-id-245' visibility='default' filepath='include/linux/phy.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='parent' type-id='type-id-240' visibility='default' filepath='include/linux/phy.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='state' type-id='type-id-5176' visibility='default' filepath='include/linux/phy.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='dev' type-id='type-id-388' visibility='default' filepath='include/linux/phy.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='mdio_map' type-id='type-id-5167' visibility='default' filepath='include/linux/phy.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='phy_mask' type-id='type-id-7' visibility='default' filepath='include/linux/phy.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9568'>
+          <var-decl name='phy_ignore_ta_mask' type-id='type-id-7' visibility='default' filepath='include/linux/phy.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9600'>
+          <var-decl name='irq' type-id='type-id-5177' visibility='default' filepath='include/linux/phy.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='reset_delay_us' type-id='type-id-17' visibility='default' filepath='include/linux/phy.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='reset_gpiod' type-id='type-id-4018' visibility='default' filepath='include/linux/phy.h' line='235' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='__anonymous_enum__2' is-anonymous='yes' filepath='include/linux/phy.h' line='209' column='1' id='type-id-5176'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='MDIOBUS_ALLOCATED' value='1'/>
+        <enumerator name='MDIOBUS_REGISTERED' value='2'/>
+        <enumerator name='MDIOBUS_UNREGISTERED' value='3'/>
+        <enumerator name='MDIOBUS_RELEASED' value='4'/>
+      </enum-decl>
+      <class-decl name='phy_driver' size-in-bits='3520' is-struct='yes' visibility='default' filepath='include/linux/phy.h' line='507' column='1' id='type-id-5178'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mdiodrv' type-id='type-id-5179' visibility='default' filepath='include/linux/phy.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='phy_id' type-id='type-id-7' visibility='default' filepath='include/linux/phy.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='name' type-id='type-id-2' visibility='default' filepath='include/linux/phy.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='phy_id_mask' type-id='type-id-7' visibility='default' filepath='include/linux/phy.h' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='features' type-id='type-id-7' visibility='default' filepath='include/linux/phy.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='flags' type-id='type-id-7' visibility='default' filepath='include/linux/phy.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='driver_data' type-id='type-id-15' visibility='default' filepath='include/linux/phy.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='soft_reset' type-id='type-id-5180' visibility='default' filepath='include/linux/phy.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='config_init' type-id='type-id-5180' visibility='default' filepath='include/linux/phy.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='probe' type-id='type-id-5180' visibility='default' filepath='include/linux/phy.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='suspend' type-id='type-id-5180' visibility='default' filepath='include/linux/phy.h' line='534' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='resume' type-id='type-id-5180' visibility='default' filepath='include/linux/phy.h' line='535' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='config_aneg' type-id='type-id-5180' visibility='default' filepath='include/linux/phy.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='aneg_done' type-id='type-id-5180' visibility='default' filepath='include/linux/phy.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='read_status' type-id='type-id-5180' visibility='default' filepath='include/linux/phy.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='ack_interrupt' type-id='type-id-5180' visibility='default' filepath='include/linux/phy.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='config_intr' type-id='type-id-5180' visibility='default' filepath='include/linux/phy.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='did_interrupt' type-id='type-id-5180' visibility='default' filepath='include/linux/phy.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='remove' type-id='type-id-5181' visibility='default' filepath='include/linux/phy.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='match_phy_device' type-id='type-id-5180' visibility='default' filepath='include/linux/phy.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='ts_info' type-id='type-id-5182' visibility='default' filepath='include/linux/phy.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='hwtstamp' type-id='type-id-5183' visibility='default' filepath='include/linux/phy.h' line='576' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='rxtstamp' type-id='type-id-5184' visibility='default' filepath='include/linux/phy.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='txtstamp' type-id='type-id-5185' visibility='default' filepath='include/linux/phy.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='set_wol' type-id='type-id-5186' visibility='default' filepath='include/linux/phy.h' line='598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='get_wol' type-id='type-id-5187' visibility='default' filepath='include/linux/phy.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='link_change_notify' type-id='type-id-5181' visibility='default' filepath='include/linux/phy.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='read_mmd' type-id='type-id-5188' visibility='default' filepath='include/linux/phy.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='write_mmd' type-id='type-id-5189' visibility='default' filepath='include/linux/phy.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='read_page' type-id='type-id-5180' visibility='default' filepath='include/linux/phy.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='write_page' type-id='type-id-5190' visibility='default' filepath='include/linux/phy.h' line='637' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='module_info' type-id='type-id-5191' visibility='default' filepath='include/linux/phy.h' line='641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='module_eeprom' type-id='type-id-5192' visibility='default' filepath='include/linux/phy.h' line='645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='get_sset_count' type-id='type-id-5180' visibility='default' filepath='include/linux/phy.h' line='649' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='get_strings' type-id='type-id-5193' visibility='default' filepath='include/linux/phy.h' line='650' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='get_stats' type-id='type-id-5194' visibility='default' filepath='include/linux/phy.h' line='651' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='get_tunable' type-id='type-id-5195' visibility='default' filepath='include/linux/phy.h' line='655' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='set_tunable' type-id='type-id-5195' visibility='default' filepath='include/linux/phy.h' line='657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='set_loopback' type-id='type-id-5196' visibility='default' filepath='include/linux/phy.h' line='660' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mdio_driver_common' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/linux/mdio.h' line='49' column='1' id='type-id-5179'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='driver' type-id='type-id-2049' visibility='default' filepath='include/linux/mdio.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='flags' type-id='type-id-17' visibility='default' filepath='include/linux/mdio.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='phy_c45_device_ids' size-in-bits='288' is-struct='yes' visibility='default' filepath='include/linux/phy.h' line='361' column='1' id='type-id-5197'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='devices_in_package' type-id='type-id-7' visibility='default' filepath='include/linux/phy.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='device_ids' type-id='type-id-5168' visibility='default' filepath='include/linux/phy.h' line='363' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='phy_state' filepath='include/linux/phy.h' line='341' column='1' id='type-id-5198'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='PHY_DOWN' value='0'/>
+        <enumerator name='PHY_STARTING' value='1'/>
+        <enumerator name='PHY_READY' value='2'/>
+        <enumerator name='PHY_PENDING' value='3'/>
+        <enumerator name='PHY_UP' value='4'/>
+        <enumerator name='PHY_AN' value='5'/>
+        <enumerator name='PHY_RUNNING' value='6'/>
+        <enumerator name='PHY_NOLINK' value='7'/>
+        <enumerator name='PHY_FORCING' value='8'/>
+        <enumerator name='PHY_CHANGELINK' value='9'/>
+        <enumerator name='PHY_HALTED' value='10'/>
+        <enumerator name='PHY_RESUMING' value='11'/>
+      </enum-decl>
+      <typedef-decl name='phy_interface_t' type-id='type-id-5199' filepath='include/linux/phy.h' line='92' column='1' id='type-id-5200'/>
+      <enum-decl name='__anonymous_enum__3' is-anonymous='yes' filepath='include/linux/phy.h' line='66' column='1' id='type-id-5199'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='PHY_INTERFACE_MODE_NA' value='0'/>
+        <enumerator name='PHY_INTERFACE_MODE_INTERNAL' value='1'/>
+        <enumerator name='PHY_INTERFACE_MODE_MII' value='2'/>
+        <enumerator name='PHY_INTERFACE_MODE_GMII' value='3'/>
+        <enumerator name='PHY_INTERFACE_MODE_SGMII' value='4'/>
+        <enumerator name='PHY_INTERFACE_MODE_TBI' value='5'/>
+        <enumerator name='PHY_INTERFACE_MODE_REVMII' value='6'/>
+        <enumerator name='PHY_INTERFACE_MODE_RMII' value='7'/>
+        <enumerator name='PHY_INTERFACE_MODE_RGMII' value='8'/>
+        <enumerator name='PHY_INTERFACE_MODE_RGMII_ID' value='9'/>
+        <enumerator name='PHY_INTERFACE_MODE_RGMII_RXID' value='10'/>
+        <enumerator name='PHY_INTERFACE_MODE_RGMII_TXID' value='11'/>
+        <enumerator name='PHY_INTERFACE_MODE_RTBI' value='12'/>
+        <enumerator name='PHY_INTERFACE_MODE_SMII' value='13'/>
+        <enumerator name='PHY_INTERFACE_MODE_XGMII' value='14'/>
+        <enumerator name='PHY_INTERFACE_MODE_MOCA' value='15'/>
+        <enumerator name='PHY_INTERFACE_MODE_QSGMII' value='16'/>
+        <enumerator name='PHY_INTERFACE_MODE_TRGMII' value='17'/>
+        <enumerator name='PHY_INTERFACE_MODE_1000BASEX' value='18'/>
+        <enumerator name='PHY_INTERFACE_MODE_2500BASEX' value='19'/>
+        <enumerator name='PHY_INTERFACE_MODE_RXAUI' value='20'/>
+        <enumerator name='PHY_INTERFACE_MODE_XAUI' value='21'/>
+        <enumerator name='PHY_INTERFACE_MODE_10GKR' value='22'/>
+        <enumerator name='PHY_INTERFACE_MODE_MAX' value='23'/>
+      </enum-decl>
+      <pointer-type-def type-id='type-id-5163' size-in-bits='64' id='type-id-5201'/>
+      <pointer-type-def type-id='type-id-1906' size-in-bits='64' id='type-id-5202'/>
+      <pointer-type-def type-id='type-id-5203' size-in-bits='64' id='type-id-5175'/>
+      <pointer-type-def type-id='type-id-5204' size-in-bits='64' id='type-id-5173'/>
+      <pointer-type-def type-id='type-id-5205' size-in-bits='64' id='type-id-5174'/>
+      <pointer-type-def type-id='type-id-5206' size-in-bits='64' id='type-id-5180'/>
+      <pointer-type-def type-id='type-id-5207' size-in-bits='64' id='type-id-5192'/>
+      <pointer-type-def type-id='type-id-5208' size-in-bits='64' id='type-id-5191'/>
+      <pointer-type-def type-id='type-id-5209' size-in-bits='64' id='type-id-5182'/>
+      <pointer-type-def type-id='type-id-5210' size-in-bits='64' id='type-id-5195'/>
+      <pointer-type-def type-id='type-id-5211' size-in-bits='64' id='type-id-5186'/>
+      <pointer-type-def type-id='type-id-5212' size-in-bits='64' id='type-id-5183'/>
+      <pointer-type-def type-id='type-id-5213' size-in-bits='64' id='type-id-5190'/>
+      <pointer-type-def type-id='type-id-5214' size-in-bits='64' id='type-id-5188'/>
+      <pointer-type-def type-id='type-id-5215' size-in-bits='64' id='type-id-5189'/>
+      <pointer-type-def type-id='type-id-5216' size-in-bits='64' id='type-id-5196'/>
+      <pointer-type-def type-id='type-id-5169' size-in-bits='64' id='type-id-5166'/>
+      <pointer-type-def type-id='type-id-5172' size-in-bits='64' id='type-id-5170'/>
+      <pointer-type-def type-id='type-id-5164' size-in-bits='64' id='type-id-5217'/>
+      <pointer-type-def type-id='type-id-5178' size-in-bits='64' id='type-id-5218'/>
+      <pointer-type-def type-id='type-id-5165' size-in-bits='64' id='type-id-5219'/>
+      <pointer-type-def type-id='type-id-5220' size-in-bits='64' id='type-id-5184'/>
+      <pointer-type-def type-id='type-id-5221' size-in-bits='64' id='type-id-5171'/>
+      <pointer-type-def type-id='type-id-5222' size-in-bits='64' id='type-id-5181'/>
+      <pointer-type-def type-id='type-id-5223' size-in-bits='64' id='type-id-5194'/>
+      <pointer-type-def type-id='type-id-5224' size-in-bits='64' id='type-id-5187'/>
+      <pointer-type-def type-id='type-id-5225' size-in-bits='64' id='type-id-5185'/>
+      <pointer-type-def type-id='type-id-5226' size-in-bits='64' id='type-id-5227'/>
+      <pointer-type-def type-id='type-id-5228' size-in-bits='64' id='type-id-5193'/>
+      <function-decl name='__ethtool_get_link_ksettings' mangled-name='__ethtool_get_link_ksettings' filepath='net/core/ethtool.c' line='552' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__ethtool_get_link_ksettings'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/core/ethtool.c' line='552' column='1'/>
+        <parameter type-id='type-id-2760' name='link_ksettings' filepath='net/core/ethtool.c' line='553' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='ethtool_op_get_link' mangled-name='ethtool_op_get_link' filepath='net/core/ethtool.c' line='37' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ethtool_op_get_link'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/core/ethtool.c' line='37' column='1'/>
+        <return type-id='type-id-7'/>
+      </function-decl>
+      <function-decl name='ethtool_op_get_ts_info' mangled-name='ethtool_op_get_ts_info' filepath='net/core/ethtool.c' line='43' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ethtool_op_get_ts_info'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/core/ethtool.c' line='43' column='1'/>
+        <parameter type-id='type-id-2768' name='info' filepath='net/core/ethtool.c' line='43' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-5203'>
+        <parameter type-id='type-id-5170'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5204'>
+        <parameter type-id='type-id-5170'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5205'>
+        <parameter type-id='type-id-5170'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-688'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5206'>
+        <parameter type-id='type-id-1696'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5207'>
+        <parameter type-id='type-id-1696'/>
+        <parameter type-id='type-id-2757'/>
+        <parameter type-id='type-id-3121'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5208'>
+        <parameter type-id='type-id-1696'/>
+        <parameter type-id='type-id-2761'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5209'>
+        <parameter type-id='type-id-1696'/>
+        <parameter type-id='type-id-2768'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5210'>
+        <parameter type-id='type-id-1696'/>
+        <parameter type-id='type-id-5202'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5211'>
+        <parameter type-id='type-id-1696'/>
+        <parameter type-id='type-id-2769'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5212'>
+        <parameter type-id='type-id-1696'/>
+        <parameter type-id='type-id-2784'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5213'>
+        <parameter type-id='type-id-1696'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5214'>
+        <parameter type-id='type-id-1696'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-688'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5215'>
+        <parameter type-id='type-id-1696'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-688'/>
+        <parameter type-id='type-id-688'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5216'>
+        <parameter type-id='type-id-1696'/>
+        <parameter type-id='type-id-33'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5220'>
+        <parameter type-id='type-id-1696'/>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-33'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5221'>
+        <parameter type-id='type-id-5166'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5222'>
+        <parameter type-id='type-id-1696'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5223'>
+        <parameter type-id='type-id-1696'/>
+        <parameter type-id='type-id-2766'/>
+        <parameter type-id='type-id-1510'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5224'>
+        <parameter type-id='type-id-1696'/>
+        <parameter type-id='type-id-2769'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5225'>
+        <parameter type-id='type-id-1696'/>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5226'>
+        <parameter type-id='type-id-1696'/>
+        <parameter type-id='type-id-33'/>
+        <parameter type-id='type-id-33'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5228'>
+        <parameter type-id='type-id-1696'/>
+        <parameter type-id='type-id-3121'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/core/skbuff.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='type-id-5229' size-in-bits='1536' id='type-id-5230'>
+        <subrange length='8' type-id='type-id-9' id='type-id-928'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-5231' size-in-bits='160' id='type-id-5232'>
+        <subrange length='1' type-id='type-id-9' id='type-id-180'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-5233' size-in-bits='384' id='type-id-5234'>
+        <subrange length='6' type-id='type-id-9' id='type-id-191'/>
+
+      </array-type-def>
+      <class-decl name='xfrm_offload' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='1071' column='1' id='type-id-5231'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='seq' type-id='type-id-5235' visibility='default' filepath='include/net/xfrm.h' line='1076' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='type-id-511' visibility='default' filepath='include/net/xfrm.h' line='1078' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='status' type-id='type-id-511' visibility='default' filepath='include/net/xfrm.h' line='1088' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='proto' type-id='type-id-895' visibility='default' filepath='include/net/xfrm.h' line='1098' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/xfrm.h' line='1073' column='1' id='type-id-5235'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='low' type-id='type-id-511' visibility='default' filepath='include/net/xfrm.h' line='1074' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='hi' type-id='type-id-511' visibility='default' filepath='include/net/xfrm.h' line='1075' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='napi_struct' size-in-bits='2880' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='319' column='1' id='type-id-5236'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='poll_list' type-id='type-id-20' visibility='default' filepath='include/linux/netdevice.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='state' type-id='type-id-16' visibility='default' filepath='include/linux/netdevice.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='weight' type-id='type-id-17' visibility='default' filepath='include/linux/netdevice.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='gro_bitmask' type-id='type-id-16' visibility='default' filepath='include/linux/netdevice.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='poll' type-id='type-id-5237' visibility='default' filepath='include/linux/netdevice.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dev' type-id='type-id-1650' visibility='default' filepath='include/linux/netdevice.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='gro_hash' type-id='type-id-5230' visibility='default' filepath='include/linux/netdevice.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='skb' type-id='type-id-1768' visibility='default' filepath='include/linux/netdevice.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='timer' type-id='type-id-681' visibility='default' filepath='include/linux/netdevice.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='dev_list' type-id='type-id-20' visibility='default' filepath='include/linux/netdevice.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='napi_hash_node' type-id='type-id-520' visibility='default' filepath='include/linux/netdevice.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='napi_id' type-id='type-id-5' visibility='default' filepath='include/linux/netdevice.h' line='341' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='gro_list' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='305' column='1' id='type-id-5229'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/netdevice.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='count' type-id='type-id-17' visibility='default' filepath='include/linux/netdevice.h' line='307' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='skb_shared_hwtstamps' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/skbuff.h' line='400' column='1' id='type-id-5238'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hwtstamp' type-id='type-id-682' visibility='default' filepath='include/linux/skbuff.h' line='401' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-5239' size-in-bits='64' id='type-id-5237'/>
+      <pointer-type-def type-id='type-id-5236' size-in-bits='64' id='type-id-5240'/>
+      <pointer-type-def type-id='type-id-1661' size-in-bits='64' id='type-id-5241'/>
+      <pointer-type-def type-id='type-id-5238' size-in-bits='64' id='type-id-5242'/>
+      <function-decl name='__alloc_skb' mangled-name='__alloc_skb' filepath='net/core/skbuff.c' line='177' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__alloc_skb'>
+        <parameter type-id='type-id-5' name='size' filepath='net/core/skbuff.c' line='177' column='1'/>
+        <parameter type-id='type-id-485' name='gfp_mask' filepath='net/core/skbuff.c' line='177' column='1'/>
+        <parameter type-id='type-id-17' name='flags' filepath='net/core/skbuff.c' line='178' column='1'/>
+        <parameter type-id='type-id-17' name='node' filepath='net/core/skbuff.c' line='178' column='1'/>
+        <return type-id='type-id-1768'/>
+      </function-decl>
+      <function-decl name='build_skb' mangled-name='build_skb' filepath='net/core/skbuff.c' line='310' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='build_skb'>
+        <parameter type-id='type-id-15' name='data' filepath='net/core/skbuff.c' line='310' column='1'/>
+        <parameter type-id='type-id-5' name='frag_size' filepath='net/core/skbuff.c' line='310' column='1'/>
+        <return type-id='type-id-1768'/>
+      </function-decl>
+      <function-decl name='__netdev_alloc_skb' mangled-name='__netdev_alloc_skb' filepath='net/core/skbuff.c' line='390' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__netdev_alloc_skb'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/core/skbuff.c' line='390' column='1'/>
+        <parameter type-id='type-id-5' name='len' filepath='net/core/skbuff.c' line='390' column='1'/>
+        <parameter type-id='type-id-485' name='gfp_mask' filepath='net/core/skbuff.c' line='391' column='1'/>
+        <return type-id='type-id-1768'/>
+      </function-decl>
+      <function-decl name='__napi_alloc_skb' mangled-name='__napi_alloc_skb' filepath='net/core/skbuff.c' line='459' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__napi_alloc_skb'>
+        <parameter type-id='type-id-5240' name='napi' filepath='net/core/skbuff.c' line='459' column='1'/>
+        <parameter type-id='type-id-5' name='len' filepath='net/core/skbuff.c' line='459' column='1'/>
+        <parameter type-id='type-id-485' name='gfp_mask' filepath='net/core/skbuff.c' line='460' column='1'/>
+        <return type-id='type-id-1768'/>
+      </function-decl>
+      <function-decl name='skb_add_rx_frag' mangled-name='skb_add_rx_frag' filepath='net/core/skbuff.c' line='506' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_add_rx_frag'>
+        <parameter type-id='type-id-1768' name='skb' filepath='net/core/skbuff.c' line='506' column='1'/>
+        <parameter type-id='type-id-17' name='i' filepath='net/core/skbuff.c' line='506' column='1'/>
+        <parameter type-id='type-id-512' name='page' filepath='net/core/skbuff.c' line='506' column='1'/>
+        <parameter type-id='type-id-17' name='off' filepath='net/core/skbuff.c' line='506' column='1'/>
+        <parameter type-id='type-id-17' name='size' filepath='net/core/skbuff.c' line='507' column='1'/>
+        <parameter type-id='type-id-5' name='truesize' filepath='net/core/skbuff.c' line='507' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='skb_coalesce_rx_frag' mangled-name='skb_coalesce_rx_frag' filepath='net/core/skbuff.c' line='516' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_coalesce_rx_frag'>
+        <parameter type-id='type-id-1768' name='skb' filepath='net/core/skbuff.c' line='516' column='1'/>
+        <parameter type-id='type-id-17' name='i' filepath='net/core/skbuff.c' line='516' column='1'/>
+        <parameter type-id='type-id-17' name='size' filepath='net/core/skbuff.c' line='516' column='1'/>
+        <parameter type-id='type-id-5' name='truesize' filepath='net/core/skbuff.c' line='517' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='kfree_skb' mangled-name='kfree_skb' filepath='net/core/skbuff.c' line='657' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kfree_skb'>
+        <parameter type-id='type-id-1768' name='skb' filepath='net/core/skbuff.c' line='657' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='consume_skb' mangled-name='consume_skb' filepath='net/core/skbuff.c' line='699' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='consume_skb'>
+        <parameter type-id='type-id-1768' name='skb' filepath='net/core/skbuff.c' line='699' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='napi_consume_skb' mangled-name='napi_consume_skb' filepath='net/core/skbuff.c' line='762' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='napi_consume_skb'>
+        <parameter type-id='type-id-1768' name='skb' filepath='net/core/skbuff.c' line='762' column='1'/>
+        <parameter type-id='type-id-17' name='budget' filepath='net/core/skbuff.c' line='762' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='skb_clone' mangled-name='skb_clone' filepath='net/core/skbuff.c' line='1266' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_clone'>
+        <parameter type-id='type-id-1768' name='skb' filepath='net/core/skbuff.c' line='1266' column='1'/>
+        <parameter type-id='type-id-485' name='gfp_mask' filepath='net/core/skbuff.c' line='1266' column='1'/>
+        <return type-id='type-id-1768'/>
+      </function-decl>
+      <function-decl name='skb_copy' mangled-name='skb_copy' filepath='net/core/skbuff.c' line='1345' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_copy'>
+        <parameter type-id='type-id-2720' name='skb' filepath='net/core/skbuff.c' line='1345' column='1'/>
+        <parameter type-id='type-id-485' name='gfp_mask' filepath='net/core/skbuff.c' line='1345' column='1'/>
+        <return type-id='type-id-1768'/>
+      </function-decl>
+      <function-decl name='skb_put' mangled-name='skb_put' filepath='net/core/skbuff.c' line='1695' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_put'>
+        <parameter type-id='type-id-1768' name='skb' filepath='net/core/skbuff.c' line='1695' column='1'/>
+        <parameter type-id='type-id-5' name='len' filepath='net/core/skbuff.c' line='1695' column='1'/>
+        <return type-id='type-id-15'/>
+      </function-decl>
+      <function-decl name='skb_trim' mangled-name='skb_trim' filepath='net/core/skbuff.c' line='1751' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_trim'>
+        <parameter type-id='type-id-1768' name='skb' filepath='net/core/skbuff.c' line='1751' column='1'/>
+        <parameter type-id='type-id-5' name='len' filepath='net/core/skbuff.c' line='1751' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='skb_dequeue' mangled-name='skb_dequeue' filepath='net/core/skbuff.c' line='2814' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_dequeue'>
+        <parameter type-id='type-id-5241' name='list' filepath='net/core/skbuff.c' line='2814' column='1'/>
+        <return type-id='type-id-1768'/>
+      </function-decl>
+      <function-decl name='skb_queue_purge' mangled-name='skb_queue_purge' filepath='net/core/skbuff.c' line='2854' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_queue_purge'>
+        <parameter type-id='type-id-5241' name='list' filepath='net/core/skbuff.c' line='2854' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='skb_queue_tail' mangled-name='skb_queue_tail' filepath='net/core/skbuff.c' line='2920' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_queue_tail'>
+        <parameter type-id='type-id-5241' name='list' filepath='net/core/skbuff.c' line='2920' column='1'/>
+        <parameter type-id='type-id-1768' name='newsk' filepath='net/core/skbuff.c' line='2920' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='skb_to_sgvec' mangled-name='skb_to_sgvec' filepath='net/core/skbuff.c' line='4058' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_to_sgvec'>
+        <parameter type-id='type-id-1768' name='skb' filepath='net/core/skbuff.c' line='4058' column='1'/>
+        <parameter type-id='type-id-920' name='sg' filepath='net/core/skbuff.c' line='4058' column='1'/>
+        <parameter type-id='type-id-17' name='offset' filepath='net/core/skbuff.c' line='4058' column='1'/>
+        <parameter type-id='type-id-17' name='len' filepath='net/core/skbuff.c' line='4058' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='skb_tstamp_tx' mangled-name='skb_tstamp_tx' filepath='net/core/skbuff.c' line='4432' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_tstamp_tx'>
+        <parameter type-id='type-id-1768' name='orig_skb' filepath='net/core/skbuff.c' line='4432' column='1'/>
+        <parameter type-id='type-id-5242' name='hwtstamps' filepath='net/core/skbuff.c' line='4433' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='skb_partial_csum_set' mangled-name='skb_partial_csum_set' filepath='net/core/skbuff.c' line='4478' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_partial_csum_set'>
+        <parameter type-id='type-id-1768' name='skb' filepath='net/core/skbuff.c' line='4478' column='1'/>
+        <parameter type-id='type-id-688' name='start' filepath='net/core/skbuff.c' line='4478' column='1'/>
+        <parameter type-id='type-id-688' name='off' filepath='net/core/skbuff.c' line='4478' column='1'/>
+        <return type-id='type-id-33'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-5239'>
+        <parameter type-id='type-id-5240'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/core/utils.c' language='LANG_C89'>
+      <function-decl name='net_ratelimit' mangled-name='net_ratelimit' filepath='net/core/utils.c' line='42' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='net_ratelimit'>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/core/usb.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='type-id-2462' size-in-bits='32' id='type-id-5243'>
+        <subrange length='1' type-id='type-id-9' id='type-id-180'/>
+
+      </array-type-def>
+      <class-decl name='ep_device' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-5244'/>
+      <class-decl name='wusb_dev' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-5245'/>
+      <array-type-def dimensions='1' type-id='type-id-5246' size-in-bits='1024' id='type-id-5247'>
+        <subrange length='16' type-id='type-id-9' id='type-id-135'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-5248' size-in-bits='infinite' id='type-id-5249'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-5250' size-in-bits='2048' id='type-id-5251'>
+        <subrange length='32' type-id='type-id-9' id='type-id-941'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-5252' size-in-bits='1024' id='type-id-5253'>
+        <subrange length='16' type-id='type-id-9' id='type-id-135'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-5254' size-in-bits='2048' id='type-id-5255'>
+        <subrange length='32' type-id='type-id-9' id='type-id-941'/>
+
+      </array-type-def>
+      <class-decl name='usb_device' size-in-bits='11264' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='631' column='1' id='type-id-5256'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='devnum' type-id='type-id-17' visibility='default' filepath='include/linux/usb.h' line='632' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='devpath' type-id='type-id-43' visibility='default' filepath='include/linux/usb.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='route' type-id='type-id-7' visibility='default' filepath='include/linux/usb.h' line='634' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='state' type-id='type-id-5257' visibility='default' filepath='include/linux/usb.h' line='635' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='speed' type-id='type-id-5258' visibility='default' filepath='include/linux/usb.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rx_lanes' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='637' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='tx_lanes' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='638' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tt' type-id='type-id-5259' visibility='default' filepath='include/linux/usb.h' line='640' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ttport' type-id='type-id-17' visibility='default' filepath='include/linux/usb.h' line='641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='toggle' type-id='type-id-488' visibility='default' filepath='include/linux/usb.h' line='643' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='parent' type-id='type-id-5260' visibility='default' filepath='include/linux/usb.h' line='645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='bus' type-id='type-id-5261' visibility='default' filepath='include/linux/usb.h' line='646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ep0' type-id='type-id-5262' visibility='default' filepath='include/linux/usb.h' line='647' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='dev' type-id='type-id-388' visibility='default' filepath='include/linux/usb.h' line='649' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='descriptor' type-id='type-id-5263' visibility='default' filepath='include/linux/usb.h' line='651' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='bos' type-id='type-id-5264' visibility='default' filepath='include/linux/usb.h' line='652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='config' type-id='type-id-5265' visibility='default' filepath='include/linux/usb.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='actconfig' type-id='type-id-5265' visibility='default' filepath='include/linux/usb.h' line='655' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='ep_in' type-id='type-id-5247' visibility='default' filepath='include/linux/usb.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='ep_out' type-id='type-id-5247' visibility='default' filepath='include/linux/usb.h' line='657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9920'>
+          <var-decl name='rawdescriptors' type-id='type-id-3458' visibility='default' filepath='include/linux/usb.h' line='659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='bus_mA' type-id='type-id-312' visibility='default' filepath='include/linux/usb.h' line='661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10000'>
+          <var-decl name='portnum' type-id='type-id-214' visibility='default' filepath='include/linux/usb.h' line='662' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10008'>
+          <var-decl name='level' type-id='type-id-214' visibility='default' filepath='include/linux/usb.h' line='663' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='can_submit' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='665' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='persist_enabled' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='666' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='have_langid' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='authorized' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='668' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='authenticated' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='669' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='wusb' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='670' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='lpm_capable' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='671' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='usb2_hw_lpm_capable' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='672' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='usb2_hw_lpm_besl_capable' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='673' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='usb2_hw_lpm_enabled' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='674' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='usb2_hw_lpm_allowed' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='675' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='usb3_lpm_u1_enabled' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='usb3_lpm_u2_enabled' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='677' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='string_langid' type-id='type-id-17' visibility='default' filepath='include/linux/usb.h' line='678' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='product' type-id='type-id-2' visibility='default' filepath='include/linux/usb.h' line='681' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='manufacturer' type-id='type-id-2' visibility='default' filepath='include/linux/usb.h' line='682' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='serial' type-id='type-id-2' visibility='default' filepath='include/linux/usb.h' line='683' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10304'>
+          <var-decl name='filelist' type-id='type-id-20' visibility='default' filepath='include/linux/usb.h' line='685' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10432'>
+          <var-decl name='maxchild' type-id='type-id-17' visibility='default' filepath='include/linux/usb.h' line='687' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10464'>
+          <var-decl name='quirks' type-id='type-id-7' visibility='default' filepath='include/linux/usb.h' line='689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='urbnum' type-id='type-id-26' visibility='default' filepath='include/linux/usb.h' line='690' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='active_duration' type-id='type-id-16' visibility='default' filepath='include/linux/usb.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='connect_time' type-id='type-id-16' visibility='default' filepath='include/linux/usb.h' line='695' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='do_remote_wakeup' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='697' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='reset_resume' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='698' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='port_is_suspended' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='699' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='wusb_dev' type-id='type-id-5266' visibility='default' filepath='include/linux/usb.h' line='701' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='slot_id' type-id='type-id-17' visibility='default' filepath='include/linux/usb.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10848'>
+          <var-decl name='removable' type-id='type-id-5267' visibility='default' filepath='include/linux/usb.h' line='703' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='l1_params' type-id='type-id-5268' visibility='default' filepath='include/linux/usb.h' line='704' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='u1_params' type-id='type-id-5269' visibility='default' filepath='include/linux/usb.h' line='705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='u2_params' type-id='type-id-5269' visibility='default' filepath='include/linux/usb.h' line='706' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11200'>
+          <var-decl name='lpm_disable_count' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='707' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11232'>
+          <var-decl name='hub_delay' type-id='type-id-688' visibility='default' filepath='include/linux/usb.h' line='709' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='usb_device_state' filepath='include/uapi/linux/usb/ch9.h' line='1147' column='1' id='type-id-5257'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='USB_STATE_NOTATTACHED' value='0'/>
+        <enumerator name='USB_STATE_ATTACHED' value='1'/>
+        <enumerator name='USB_STATE_POWERED' value='2'/>
+        <enumerator name='USB_STATE_RECONNECTING' value='3'/>
+        <enumerator name='USB_STATE_UNAUTHENTICATED' value='4'/>
+        <enumerator name='USB_STATE_DEFAULT' value='5'/>
+        <enumerator name='USB_STATE_ADDRESS' value='6'/>
+        <enumerator name='USB_STATE_CONFIGURED' value='7'/>
+        <enumerator name='USB_STATE_SUSPENDED' value='8'/>
+      </enum-decl>
+      <enum-decl name='usb_device_speed' filepath='include/uapi/linux/usb/ch9.h' line='1137' column='1' id='type-id-5258'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='USB_SPEED_UNKNOWN' value='0'/>
+        <enumerator name='USB_SPEED_LOW' value='1'/>
+        <enumerator name='USB_SPEED_FULL' value='2'/>
+        <enumerator name='USB_SPEED_HIGH' value='3'/>
+        <enumerator name='USB_SPEED_WIRELESS' value='4'/>
+        <enumerator name='USB_SPEED_SUPER' value='5'/>
+        <enumerator name='USB_SPEED_SUPER_PLUS' value='6'/>
+      </enum-decl>
+      <class-decl name='usb_tt' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/usb/hcd.h' line='543' column='1' id='type-id-5270'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hub' type-id='type-id-5260' visibility='default' filepath='include/linux/usb/hcd.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='multi' type-id='type-id-17' visibility='default' filepath='include/linux/usb/hcd.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='think_time' type-id='type-id-5' visibility='default' filepath='include/linux/usb/hcd.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hcpriv' type-id='type-id-15' visibility='default' filepath='include/linux/usb/hcd.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='include/linux/usb/hcd.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='clear_list' type-id='type-id-20' visibility='default' filepath='include/linux/usb/hcd.h' line='551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='clear_work' type-id='type-id-255' visibility='default' filepath='include/linux/usb/hcd.h' line='552' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_bus' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='424' column='1' id='type-id-5271'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='controller' type-id='type-id-240' visibility='default' filepath='include/linux/usb.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sysdev' type-id='type-id-240' visibility='default' filepath='include/linux/usb.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='busnum' type-id='type-id-17' visibility='default' filepath='include/linux/usb.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bus_name' type-id='type-id-4' visibility='default' filepath='include/linux/usb.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='uses_dma' type-id='type-id-214' visibility='default' filepath='include/linux/usb.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='uses_pio_for_control' type-id='type-id-214' visibility='default' filepath='include/linux/usb.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='otg_port' type-id='type-id-214' visibility='default' filepath='include/linux/usb.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='is_b_host' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='b_hnp_enable' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='no_stop_on_short' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='no_sg_constraint' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='sg_tablesize' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='devnum_next' type-id='type-id-17' visibility='default' filepath='include/linux/usb.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='devnum_next_mutex' type-id='type-id-245' visibility='default' filepath='include/linux/usb.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='devmap' type-id='type-id-5272' visibility='default' filepath='include/linux/usb.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='root_hub' type-id='type-id-5260' visibility='default' filepath='include/linux/usb.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='hs_companion' type-id='type-id-5261' visibility='default' filepath='include/linux/usb.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='bandwidth_allocated' type-id='type-id-17' visibility='default' filepath='include/linux/usb.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='bandwidth_int_reqs' type-id='type-id-17' visibility='default' filepath='include/linux/usb.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='bandwidth_isoc_reqs' type-id='type-id-17' visibility='default' filepath='include/linux/usb.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='resuming_ports' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='463' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_devmap' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='417' column='1' id='type-id-5272'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='devicemap' type-id='type-id-219' visibility='default' filepath='include/linux/usb.h' line='418' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_host_endpoint' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='67' column='1' id='type-id-5262'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='desc' type-id='type-id-5273' visibility='default' filepath='include/linux/usb.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='ss_ep_comp' type-id='type-id-5274' visibility='default' filepath='include/linux/usb.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='ssp_isoc_ep_comp' type-id='type-id-5275' visibility='default' filepath='include/linux/usb.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='urb_list' type-id='type-id-20' visibility='default' filepath='include/linux/usb.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hcpriv' type-id='type-id-15' visibility='default' filepath='include/linux/usb.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ep_dev' type-id='type-id-5276' visibility='default' filepath='include/linux/usb.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='extra' type-id='type-id-256' visibility='default' filepath='include/linux/usb.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='extralen' type-id='type-id-17' visibility='default' filepath='include/linux/usb.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='enabled' type-id='type-id-17' visibility='default' filepath='include/linux/usb.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='streams' type-id='type-id-17' visibility='default' filepath='include/linux/usb.h' line='78' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_endpoint_descriptor' size-in-bits='72' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='400' column='1' id='type-id-5273'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bEndpointAddress' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bmAttributes' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='wMaxPacketSize' type-id='type-id-5123' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='bInterval' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='bRefresh' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bSynchAddress' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='412' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_ss_ep_comp_descriptor' size-in-bits='48' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='682' column='1' id='type-id-5274'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='683' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='684' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bMaxBurst' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bmAttributes' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='687' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='wBytesPerInterval' type-id='type-id-5123' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='688' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_ssp_isoc_ep_comp_descriptor' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='670' column='1' id='type-id-5275'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='671' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='672' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='wReseved' type-id='type-id-5123' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='673' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dwBytesPerInterval' type-id='type-id-2462' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='674' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_device_descriptor' size-in-bits='144' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='289' column='1' id='type-id-5263'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bcdUSB' type-id='type-id-5123' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bDeviceClass' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='bDeviceSubClass' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='bDeviceProtocol' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='bMaxPacketSize0' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='idVendor' type-id='type-id-5123' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='idProduct' type-id='type-id-5123' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='bcdDevice' type-id='type-id-5123' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='iManufacturer' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='iProduct' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='iSerialNumber' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='bNumConfigurations' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='304' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_host_bos' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='396' column='1' id='type-id-5277'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='desc' type-id='type-id-5278' visibility='default' filepath='include/linux/usb.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ext_cap' type-id='type-id-5279' visibility='default' filepath='include/linux/usb.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ss_cap' type-id='type-id-5280' visibility='default' filepath='include/linux/usb.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ssp_cap' type-id='type-id-5281' visibility='default' filepath='include/linux/usb.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ss_id' type-id='type-id-5282' visibility='default' filepath='include/linux/usb.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ptm_cap' type-id='type-id-5283' visibility='default' filepath='include/linux/usb.h' line='404' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_bos_descriptor' size-in-bits='40' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='837' column='1' id='type-id-5284'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='838' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='839' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='wTotalLength' type-id='type-id-5123' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='841' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bNumDeviceCaps' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='842' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_ext_cap_descriptor' size-in-bits='56' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='888' column='1' id='type-id-5285'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='889' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='890' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDevCapabilityType' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='891' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bmAttributes' type-id='type-id-2462' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='892' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_ss_cap_descriptor' size-in-bits='80' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='908' column='1' id='type-id-5286'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='909' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='910' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDevCapabilityType' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='911' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bmAttributes' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='912' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='wSpeedSupported' type-id='type-id-5123' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='914' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='bFunctionalitySupport' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='919' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='bU1devExitLat' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='920' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bU2DevExitLat' type-id='type-id-5123' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='921' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_ssp_cap_descriptor' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='946' column='1' id='type-id-5287'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='947' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='948' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDevCapabilityType' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='949' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bReserved' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='950' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bmAttributes' type-id='type-id-2462' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='951' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wFunctionalitySupport' type-id='type-id-5123' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='954' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='wReserved' type-id='type-id-5123' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='958' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='bmSublinkSpeedAttr' type-id='type-id-5243' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='959' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_ss_container_id_descriptor' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='931' column='1' id='type-id-5288'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='932' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDevCapabilityType' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='934' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bReserved' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='935' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ContainerID' type-id='type-id-938' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='936' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_ptm_cap_descriptor' size-in-bits='24' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='1071' column='1' id='type-id-5289'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='1072' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='1073' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDevCapabilityType' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='1074' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_host_config' size-in-bits='5440' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='374' column='1' id='type-id-5290'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='desc' type-id='type-id-5291' visibility='default' filepath='include/linux/usb.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='string' type-id='type-id-2' visibility='default' filepath='include/linux/usb.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='intf_assoc' type-id='type-id-5253' visibility='default' filepath='include/linux/usb.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='interface' type-id='type-id-5251' visibility='default' filepath='include/linux/usb.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='intf_cache' type-id='type-id-5255' visibility='default' filepath='include/linux/usb.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='extra' type-id='type-id-256' visibility='default' filepath='include/linux/usb.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='extralen' type-id='type-id-17' visibility='default' filepath='include/linux/usb.h' line='392' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_config_descriptor' size-in-bits='72' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='345' column='1' id='type-id-5291'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='wTotalLength' type-id='type-id-5123' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bNumInterfaces' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='bConfigurationValue' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='iConfiguration' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='bmAttributes' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bMaxPower' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='354' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_interface_assoc_descriptor' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='776' column='1' id='type-id-5292'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='777' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='778' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bFirstInterface' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='780' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bInterfaceCount' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='781' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bFunctionClass' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='782' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='bFunctionSubClass' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='bFunctionProtocol' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='784' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='iFunction' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='785' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_interface' size-in-bits='6912' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='232' column='1' id='type-id-5293'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='altsetting' type-id='type-id-5294' visibility='default' filepath='include/linux/usb.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cur_altsetting' type-id='type-id-5294' visibility='default' filepath='include/linux/usb.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='num_altsetting' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='intf_assoc' type-id='type-id-5252' visibility='default' filepath='include/linux/usb.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='minor' type-id='type-id-17' visibility='default' filepath='include/linux/usb.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='condition' type-id='type-id-5295' visibility='default' filepath='include/linux/usb.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='sysfs_files_created' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='ep_devs_created' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='unregistering' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='needs_remote_wakeup' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='needs_altsetting0' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='needs_binding' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='resetting_device' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='authorized' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dev' type-id='type-id-388' visibility='default' filepath='include/linux/usb.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='usb_dev' type-id='type-id-240' visibility='default' filepath='include/linux/usb.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='reset_ws' type-id='type-id-255' visibility='default' filepath='include/linux/usb.h' line='259' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_host_interface' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='82' column='1' id='type-id-5248'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='desc' type-id='type-id-5296' visibility='default' filepath='include/linux/usb.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='extralen' type-id='type-id-17' visibility='default' filepath='include/linux/usb.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='extra' type-id='type-id-256' visibility='default' filepath='include/linux/usb.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='endpoint' type-id='type-id-5246' visibility='default' filepath='include/linux/usb.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='string' type-id='type-id-2' visibility='default' filepath='include/linux/usb.h' line='93' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_interface_descriptor' size-in-bits='72' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='382' column='1' id='type-id-5296'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bInterfaceNumber' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bAlternateSetting' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bNumEndpoints' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='bInterfaceClass' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='bInterfaceSubClass' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='bInterfaceProtocol' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='iInterface' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='392' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='usb_interface_condition' filepath='include/linux/usb.h' line='96' column='1' id='type-id-5295'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='USB_INTERFACE_UNBOUND' value='0'/>
+        <enumerator name='USB_INTERFACE_BINDING' value='1'/>
+        <enumerator name='USB_INTERFACE_BOUND' value='2'/>
+        <enumerator name='USB_INTERFACE_UNBINDING' value='3'/>
+      </enum-decl>
+      <class-decl name='usb_interface_cache' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='322' column='1' id='type-id-5297'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num_altsetting' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ref' type-id='type-id-239' visibility='default' filepath='include/linux/usb.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='altsetting' type-id='type-id-5249' visibility='default' filepath='include/linux/usb.h' line='328' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='usb_device_removable' filepath='include/linux/usb.h' line='477' column='1' id='type-id-5267'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='USB_DEVICE_REMOVABLE_UNKNOWN' value='0'/>
+        <enumerator name='USB_DEVICE_REMOVABLE' value='1'/>
+        <enumerator name='USB_DEVICE_FIXED' value='2'/>
+      </enum-decl>
+      <class-decl name='usb2_lpm_parameters' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='503' column='1' id='type-id-5268'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='besl' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='timeout' type-id='type-id-17' visibility='default' filepath='include/linux/usb.h' line='513' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb3_lpm_parameters' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='523' column='1' id='type-id-5269'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mel' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pel' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='536' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sel' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='timeout' type-id='type-id-17' visibility='default' filepath='include/linux/usb.h' line='552' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-2' size-in-bits='64' id='type-id-3458'/>
+      <pointer-type-def type-id='type-id-5244' size-in-bits='64' id='type-id-5276'/>
+      <pointer-type-def type-id='type-id-5284' size-in-bits='64' id='type-id-5278'/>
+      <pointer-type-def type-id='type-id-5271' size-in-bits='64' id='type-id-5261'/>
+      <pointer-type-def type-id='type-id-5256' size-in-bits='64' id='type-id-5260'/>
+      <pointer-type-def type-id='type-id-5285' size-in-bits='64' id='type-id-5279'/>
+      <pointer-type-def type-id='type-id-5277' size-in-bits='64' id='type-id-5264'/>
+      <pointer-type-def type-id='type-id-5290' size-in-bits='64' id='type-id-5265'/>
+      <pointer-type-def type-id='type-id-5262' size-in-bits='64' id='type-id-5246'/>
+      <pointer-type-def type-id='type-id-5248' size-in-bits='64' id='type-id-5294'/>
+      <pointer-type-def type-id='type-id-5293' size-in-bits='64' id='type-id-5250'/>
+      <pointer-type-def type-id='type-id-5292' size-in-bits='64' id='type-id-5252'/>
+      <pointer-type-def type-id='type-id-5297' size-in-bits='64' id='type-id-5254'/>
+      <pointer-type-def type-id='type-id-5289' size-in-bits='64' id='type-id-5283'/>
+      <pointer-type-def type-id='type-id-5286' size-in-bits='64' id='type-id-5280'/>
+      <pointer-type-def type-id='type-id-5288' size-in-bits='64' id='type-id-5282'/>
+      <pointer-type-def type-id='type-id-5287' size-in-bits='64' id='type-id-5281'/>
+      <pointer-type-def type-id='type-id-5270' size-in-bits='64' id='type-id-5259'/>
+      <pointer-type-def type-id='type-id-5245' size-in-bits='64' id='type-id-5266'/>
+      <function-decl name='usb_disabled' mangled-name='usb_disabled' filepath='drivers/usb/core/usb.c' line='61' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_disabled'>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='usb_get_dev' mangled-name='usb_get_dev' filepath='drivers/usb/core/usb.c' line='688' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_get_dev'>
+        <parameter type-id='type-id-5260' name='dev' filepath='drivers/usb/core/usb.c' line='688' column='1'/>
+        <return type-id='type-id-5260'/>
+      </function-decl>
+      <function-decl name='usb_put_dev' mangled-name='usb_put_dev' filepath='drivers/usb/core/usb.c' line='703' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_put_dev'>
+        <parameter type-id='type-id-5260' name='dev' filepath='drivers/usb/core/usb.c' line='703' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/core/hcd.c' language='LANG_C89'>
+      <class-decl name='dma_pool' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-5298'/>
+      <class-decl name='extcon_dev' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-5299'/>
+      <class-decl name='regulator' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-5300'/>
+      <class-decl name='usb_gadget' size-in-bits='7232' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-5301'/>
+      <class-decl name='usb_phy_roothub' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-5302'/>
+      <array-type-def dimensions='1' type-id='type-id-5303' size-in-bits='256' id='type-id-5304'>
+        <subrange length='4' type-id='type-id-9' id='type-id-107'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-5305' size-in-bits='infinite' id='type-id-5306'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <class-decl name='usb_hcd' size-in-bits='4352' is-struct='yes' visibility='default' filepath='include/linux/usb/hcd.h' line='75' column='1' id='type-id-5307'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='self' type-id='type-id-5271' visibility='default' filepath='include/linux/usb/hcd.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='kref' type-id='type-id-239' visibility='default' filepath='include/linux/usb/hcd.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='product_desc' type-id='type-id-4' visibility='default' filepath='include/linux/usb/hcd.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='speed' type-id='type-id-17' visibility='default' filepath='include/linux/usb/hcd.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='irq_descr' type-id='type-id-3435' visibility='default' filepath='include/linux/usb/hcd.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='rh_timer' type-id='type-id-417' visibility='default' filepath='include/linux/usb/hcd.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='status_urb' type-id='type-id-5308' visibility='default' filepath='include/linux/usb/hcd.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='wakeup_work' type-id='type-id-255' visibility='default' filepath='include/linux/usb/hcd.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='driver' type-id='type-id-5309' visibility='default' filepath='include/linux/usb/hcd.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='usb_phy' type-id='type-id-5310' visibility='default' filepath='include/linux/usb/hcd.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='phy_roothub' type-id='type-id-5311' visibility='default' filepath='include/linux/usb/hcd.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='include/linux/usb/hcd.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='rh_registered' type-id='type-id-5' visibility='default' filepath='include/linux/usb/hcd.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='rh_pollable' type-id='type-id-5' visibility='default' filepath='include/linux/usb/hcd.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='msix_enabled' type-id='type-id-5' visibility='default' filepath='include/linux/usb/hcd.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='msi_enabled' type-id='type-id-5' visibility='default' filepath='include/linux/usb/hcd.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='skip_phy_initialization' type-id='type-id-5' visibility='default' filepath='include/linux/usb/hcd.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='uses_new_polling' type-id='type-id-5' visibility='default' filepath='include/linux/usb/hcd.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='wireless' type-id='type-id-5' visibility='default' filepath='include/linux/usb/hcd.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='has_tt' type-id='type-id-5' visibility='default' filepath='include/linux/usb/hcd.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='amd_resume_bug' type-id='type-id-5' visibility='default' filepath='include/linux/usb/hcd.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='can_do_streams' type-id='type-id-5' visibility='default' filepath='include/linux/usb/hcd.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='tpl_support' type-id='type-id-5' visibility='default' filepath='include/linux/usb/hcd.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='cant_recv_wakeups' type-id='type-id-5' visibility='default' filepath='include/linux/usb/hcd.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2336'>
+          <var-decl name='irq' type-id='type-id-5' visibility='default' filepath='include/linux/usb/hcd.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='regs' type-id='type-id-15' visibility='default' filepath='include/linux/usb/hcd.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='rsrc_start' type-id='type-id-2155' visibility='default' filepath='include/linux/usb/hcd.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='rsrc_len' type-id='type-id-2155' visibility='default' filepath='include/linux/usb/hcd.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='power_budget' type-id='type-id-5' visibility='default' filepath='include/linux/usb/hcd.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='high_prio_bh' type-id='type-id-5312' visibility='default' filepath='include/linux/usb/hcd.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='low_prio_bh' type-id='type-id-5312' visibility='default' filepath='include/linux/usb/hcd.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='address0_mutex' type-id='type-id-3475' visibility='default' filepath='include/linux/usb/hcd.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='bandwidth_mutex' type-id='type-id-3475' visibility='default' filepath='include/linux/usb/hcd.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='shared_hcd' type-id='type-id-5313' visibility='default' filepath='include/linux/usb/hcd.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='primary_hcd' type-id='type-id-5313' visibility='default' filepath='include/linux/usb/hcd.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='pool' type-id='type-id-5304' visibility='default' filepath='include/linux/usb/hcd.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='state' type-id='type-id-17' visibility='default' filepath='include/linux/usb/hcd.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='hcd_priv' type-id='type-id-280' visibility='default' filepath='include/linux/usb/hcd.h' line='223' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='urb' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='1543' column='1' id='type-id-5314'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kref' type-id='type-id-239' visibility='default' filepath='include/linux/usb.h' line='1545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hcpriv' type-id='type-id-15' visibility='default' filepath='include/linux/usb.h' line='1546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='use_count' type-id='type-id-26' visibility='default' filepath='include/linux/usb.h' line='1547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='reject' type-id='type-id-26' visibility='default' filepath='include/linux/usb.h' line='1548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unlinked' type-id='type-id-17' visibility='default' filepath='include/linux/usb.h' line='1549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='urb_list' type-id='type-id-20' visibility='default' filepath='include/linux/usb.h' line='1552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='anchor_list' type-id='type-id-20' visibility='default' filepath='include/linux/usb.h' line='1554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='anchor' type-id='type-id-5315' visibility='default' filepath='include/linux/usb.h' line='1555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='dev' type-id='type-id-5260' visibility='default' filepath='include/linux/usb.h' line='1556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ep' type-id='type-id-5246' visibility='default' filepath='include/linux/usb.h' line='1557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='pipe' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='1558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='stream_id' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='1559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='status' type-id='type-id-17' visibility='default' filepath='include/linux/usb.h' line='1560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='transfer_flags' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='1561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='transfer_buffer' type-id='type-id-15' visibility='default' filepath='include/linux/usb.h' line='1562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='transfer_dma' type-id='type-id-2083' visibility='default' filepath='include/linux/usb.h' line='1563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='sg' type-id='type-id-920' visibility='default' filepath='include/linux/usb.h' line='1564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='num_mapped_sgs' type-id='type-id-17' visibility='default' filepath='include/linux/usb.h' line='1565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='num_sgs' type-id='type-id-17' visibility='default' filepath='include/linux/usb.h' line='1566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='transfer_buffer_length' type-id='type-id-7' visibility='default' filepath='include/linux/usb.h' line='1567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='actual_length' type-id='type-id-7' visibility='default' filepath='include/linux/usb.h' line='1568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='setup_packet' type-id='type-id-256' visibility='default' filepath='include/linux/usb.h' line='1569' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='setup_dma' type-id='type-id-2083' visibility='default' filepath='include/linux/usb.h' line='1570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='start_frame' type-id='type-id-17' visibility='default' filepath='include/linux/usb.h' line='1571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='number_of_packets' type-id='type-id-17' visibility='default' filepath='include/linux/usb.h' line='1572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='interval' type-id='type-id-17' visibility='default' filepath='include/linux/usb.h' line='1573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='error_count' type-id='type-id-17' visibility='default' filepath='include/linux/usb.h' line='1575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='context' type-id='type-id-15' visibility='default' filepath='include/linux/usb.h' line='1576' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='complete' type-id='type-id-5316' visibility='default' filepath='include/linux/usb.h' line='1577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='iso_frame_desc' type-id='type-id-5306' visibility='default' filepath='include/linux/usb.h' line='1578' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_anchor' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='1342' column='1' id='type-id-5317'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='urb_list' type-id='type-id-20' visibility='default' filepath='include/linux/usb.h' line='1343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='wait' type-id='type-id-225' visibility='default' filepath='include/linux/usb.h' line='1344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='include/linux/usb.h' line='1345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='suspend_wakeups' type-id='type-id-26' visibility='default' filepath='include/linux/usb.h' line='1346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='poisoned' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='1347' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='usb_complete_t' type-id='type-id-5318' filepath='include/linux/usb.h' line='1358' column='1' id='type-id-5316'/>
+      <class-decl name='usb_iso_packet_descriptor' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='1333' column='1' id='type-id-5305'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='offset' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='1334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='length' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='1335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='actual_length' type-id='type-id-5' visibility='default' filepath='include/linux/usb.h' line='1336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='status' type-id='type-id-17' visibility='default' filepath='include/linux/usb.h' line='1337' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hc_driver' size-in-bits='2880' is-struct='yes' visibility='default' filepath='include/linux/usb/hcd.h' line='246' column='1' id='type-id-5319'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='description' type-id='type-id-4' visibility='default' filepath='include/linux/usb/hcd.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='product_desc' type-id='type-id-4' visibility='default' filepath='include/linux/usb/hcd.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hcd_priv_size' type-id='type-id-84' visibility='default' filepath='include/linux/usb/hcd.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='irq' type-id='type-id-5320' visibility='default' filepath='include/linux/usb/hcd.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='type-id-17' visibility='default' filepath='include/linux/usb/hcd.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='reset' type-id='type-id-5321' visibility='default' filepath='include/linux/usb/hcd.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='start' type-id='type-id-5321' visibility='default' filepath='include/linux/usb/hcd.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pci_suspend' type-id='type-id-5322' visibility='default' filepath='include/linux/usb/hcd.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pci_resume' type-id='type-id-5322' visibility='default' filepath='include/linux/usb/hcd.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='stop' type-id='type-id-5323' visibility='default' filepath='include/linux/usb/hcd.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='shutdown' type-id='type-id-5323' visibility='default' filepath='include/linux/usb/hcd.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='get_frame_number' type-id='type-id-5321' visibility='default' filepath='include/linux/usb/hcd.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='urb_enqueue' type-id='type-id-5324' visibility='default' filepath='include/linux/usb/hcd.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='urb_dequeue' type-id='type-id-5325' visibility='default' filepath='include/linux/usb/hcd.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='map_urb_for_dma' type-id='type-id-5324' visibility='default' filepath='include/linux/usb/hcd.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='unmap_urb_for_dma' type-id='type-id-5326' visibility='default' filepath='include/linux/usb/hcd.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='endpoint_disable' type-id='type-id-5327' visibility='default' filepath='include/linux/usb/hcd.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='endpoint_reset' type-id='type-id-5327' visibility='default' filepath='include/linux/usb/hcd.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='hub_status_data' type-id='type-id-5328' visibility='default' filepath='include/linux/usb/hcd.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='hub_control' type-id='type-id-5329' visibility='default' filepath='include/linux/usb/hcd.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='bus_suspend' type-id='type-id-5321' visibility='default' filepath='include/linux/usb/hcd.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='bus_resume' type-id='type-id-5321' visibility='default' filepath='include/linux/usb/hcd.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='start_port_reset' type-id='type-id-5330' visibility='default' filepath='include/linux/usb/hcd.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='get_resuming_ports' type-id='type-id-5331' visibility='default' filepath='include/linux/usb/hcd.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='relinquish_port' type-id='type-id-5332' visibility='default' filepath='include/linux/usb/hcd.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='port_handed_over' type-id='type-id-5333' visibility='default' filepath='include/linux/usb/hcd.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='clear_tt_buffer_complete' type-id='type-id-5327' visibility='default' filepath='include/linux/usb/hcd.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='alloc_dev' type-id='type-id-5334' visibility='default' filepath='include/linux/usb/hcd.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='free_dev' type-id='type-id-5335' visibility='default' filepath='include/linux/usb/hcd.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='alloc_streams' type-id='type-id-5336' visibility='default' filepath='include/linux/usb/hcd.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='free_streams' type-id='type-id-5337' visibility='default' filepath='include/linux/usb/hcd.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='add_endpoint' type-id='type-id-5338' visibility='default' filepath='include/linux/usb/hcd.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='drop_endpoint' type-id='type-id-5338' visibility='default' filepath='include/linux/usb/hcd.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='check_bandwidth' type-id='type-id-5334' visibility='default' filepath='include/linux/usb/hcd.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='reset_bandwidth' type-id='type-id-5335' visibility='default' filepath='include/linux/usb/hcd.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='address_device' type-id='type-id-5334' visibility='default' filepath='include/linux/usb/hcd.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='enable_device' type-id='type-id-5334' visibility='default' filepath='include/linux/usb/hcd.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='update_hub_device' type-id='type-id-5339' visibility='default' filepath='include/linux/usb/hcd.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='reset_device' type-id='type-id-5334' visibility='default' filepath='include/linux/usb/hcd.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='update_device' type-id='type-id-5334' visibility='default' filepath='include/linux/usb/hcd.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='set_usb2_hw_lpm' type-id='type-id-5340' visibility='default' filepath='include/linux/usb/hcd.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='enable_usb3_lpm_timeout' type-id='type-id-5341' visibility='default' filepath='include/linux/usb/hcd.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='disable_usb3_lpm_timeout' type-id='type-id-5341' visibility='default' filepath='include/linux/usb/hcd.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='find_raw_port_number' type-id='type-id-5333' visibility='default' filepath='include/linux/usb/hcd.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='port_power' type-id='type-id-5342' visibility='default' filepath='include/linux/usb/hcd.h' line='408' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='usb3_link_state' filepath='include/uapi/linux/usb/ch9.h' line='1172' column='1' id='type-id-5343'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='USB3_LPM_U0' value='0'/>
+        <enumerator name='USB3_LPM_U1' value='1'/>
+        <enumerator name='USB3_LPM_U2' value='2'/>
+        <enumerator name='USB3_LPM_U3' value='3'/>
+      </enum-decl>
+      <class-decl name='usb_phy' size-in-bits='2688' is-struct='yes' visibility='default' filepath='include/linux/usb/phy.h' line='88' column='1' id='type-id-5344'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='type-id-240' visibility='default' filepath='include/linux/usb/phy.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='label' type-id='type-id-4' visibility='default' filepath='include/linux/usb/phy.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='type-id-5' visibility='default' filepath='include/linux/usb/phy.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='type' type-id='type-id-5345' visibility='default' filepath='include/linux/usb/phy.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='last_event' type-id='type-id-5346' visibility='default' filepath='include/linux/usb/phy.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='otg' type-id='type-id-5347' visibility='default' filepath='include/linux/usb/phy.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='io_dev' type-id='type-id-240' visibility='default' filepath='include/linux/usb/phy.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='io_ops' type-id='type-id-5348' visibility='default' filepath='include/linux/usb/phy.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='io_priv' type-id='type-id-15' visibility='default' filepath='include/linux/usb/phy.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='edev' type-id='type-id-5349' visibility='default' filepath='include/linux/usb/phy.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='id_edev' type-id='type-id-5349' visibility='default' filepath='include/linux/usb/phy.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='vbus_nb' type-id='type-id-3269' visibility='default' filepath='include/linux/usb/phy.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='id_nb' type-id='type-id-3269' visibility='default' filepath='include/linux/usb/phy.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='type_nb' type-id='type-id-3269' visibility='default' filepath='include/linux/usb/phy.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='chg_type' type-id='type-id-5350' visibility='default' filepath='include/linux/usb/phy.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='chg_state' type-id='type-id-5351' visibility='default' filepath='include/linux/usb/phy.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='chg_cur' type-id='type-id-5352' visibility='default' filepath='include/linux/usb/phy.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='chg_work' type-id='type-id-255' visibility='default' filepath='include/linux/usb/phy.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='notifier' type-id='type-id-5353' visibility='default' filepath='include/linux/usb/phy.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='port_status' type-id='type-id-688' visibility='default' filepath='include/linux/usb/phy.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1936'>
+          <var-decl name='port_change' type-id='type-id-688' visibility='default' filepath='include/linux/usb/phy.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='head' type-id='type-id-20' visibility='default' filepath='include/linux/usb/phy.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='init' type-id='type-id-5354' visibility='default' filepath='include/linux/usb/phy.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='shutdown' type-id='type-id-5355' visibility='default' filepath='include/linux/usb/phy.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='set_vbus' type-id='type-id-5356' visibility='default' filepath='include/linux/usb/phy.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='set_power' type-id='type-id-5357' visibility='default' filepath='include/linux/usb/phy.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='set_suspend' type-id='type-id-5356' visibility='default' filepath='include/linux/usb/phy.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='set_wakeup' type-id='type-id-5358' visibility='default' filepath='include/linux/usb/phy.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='notify_connect' type-id='type-id-5359' visibility='default' filepath='include/linux/usb/phy.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='notify_disconnect' type-id='type-id-5359' visibility='default' filepath='include/linux/usb/phy.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='charger_detect' type-id='type-id-5360' visibility='default' filepath='include/linux/usb/phy.h' line='157' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='usb_phy_type' filepath='include/linux/usb/phy.h' line='36' column='1' id='type-id-5345'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='USB_PHY_TYPE_UNDEFINED' value='0'/>
+        <enumerator name='USB_PHY_TYPE_USB2' value='1'/>
+        <enumerator name='USB_PHY_TYPE_USB3' value='2'/>
+      </enum-decl>
+      <enum-decl name='usb_phy_events' filepath='include/linux/usb/phy.h' line='27' column='1' id='type-id-5346'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='USB_EVENT_NONE' value='0'/>
+        <enumerator name='USB_EVENT_VBUS' value='1'/>
+        <enumerator name='USB_EVENT_ID' value='2'/>
+        <enumerator name='USB_EVENT_CHARGER' value='3'/>
+        <enumerator name='USB_EVENT_ENUMERATED' value='4'/>
+      </enum-decl>
+      <class-decl name='usb_otg' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/usb/otg.h' line='16' column='1' id='type-id-5361'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='default_a' type-id='type-id-214' visibility='default' filepath='include/linux/usb/otg.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='phy' type-id='type-id-5362' visibility='default' filepath='include/linux/usb/otg.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='usb_phy' type-id='type-id-5310' visibility='default' filepath='include/linux/usb/otg.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='host' type-id='type-id-5261' visibility='default' filepath='include/linux/usb/otg.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='gadget' type-id='type-id-5363' visibility='default' filepath='include/linux/usb/otg.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='state' type-id='type-id-5364' visibility='default' filepath='include/linux/usb/otg.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_host' type-id='type-id-5365' visibility='default' filepath='include/linux/usb/otg.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_peripheral' type-id='type-id-5366' visibility='default' filepath='include/linux/usb/otg.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_vbus' type-id='type-id-5367' visibility='default' filepath='include/linux/usb/otg.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='start_srp' type-id='type-id-5368' visibility='default' filepath='include/linux/usb/otg.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='start_hnp' type-id='type-id-5368' visibility='default' filepath='include/linux/usb/otg.h' line='41' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='phy' size-in-bits='6784' is-struct='yes' visibility='default' filepath='include/linux/phy/phy.h' line='88' column='1' id='type-id-5369'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='type-id-388' visibility='default' filepath='include/linux/phy/phy.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='id' type-id='type-id-17' visibility='default' filepath='include/linux/phy/phy.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='ops' type-id='type-id-5370' visibility='default' filepath='include/linux/phy/phy.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='mutex' type-id='type-id-245' visibility='default' filepath='include/linux/phy/phy.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='init_count' type-id='type-id-17' visibility='default' filepath='include/linux/phy/phy.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6624'>
+          <var-decl name='power_count' type-id='type-id-17' visibility='default' filepath='include/linux/phy/phy.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='attrs' type-id='type-id-5371' visibility='default' filepath='include/linux/phy/phy.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='pwr' type-id='type-id-5372' visibility='default' filepath='include/linux/phy/phy.h' line='96' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='phy_ops' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/phy/phy.h' line='56' column='1' id='type-id-5373'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='init' type-id='type-id-5374' visibility='default' filepath='include/linux/phy/phy.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='exit' type-id='type-id-5374' visibility='default' filepath='include/linux/phy/phy.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='power_on' type-id='type-id-5374' visibility='default' filepath='include/linux/phy/phy.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='power_off' type-id='type-id-5374' visibility='default' filepath='include/linux/phy/phy.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_mode' type-id='type-id-5375' visibility='default' filepath='include/linux/phy/phy.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='reset' type-id='type-id-5374' visibility='default' filepath='include/linux/phy/phy.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='calibrate' type-id='type-id-5374' visibility='default' filepath='include/linux/phy/phy.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='include/linux/phy/phy.h' line='64' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='phy_mode' filepath='include/linux/phy/phy.h' line='25' column='1' id='type-id-5376'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='PHY_MODE_INVALID' value='0'/>
+        <enumerator name='PHY_MODE_USB_HOST' value='1'/>
+        <enumerator name='PHY_MODE_USB_HOST_LS' value='2'/>
+        <enumerator name='PHY_MODE_USB_HOST_FS' value='3'/>
+        <enumerator name='PHY_MODE_USB_HOST_HS' value='4'/>
+        <enumerator name='PHY_MODE_USB_HOST_SS' value='5'/>
+        <enumerator name='PHY_MODE_USB_DEVICE' value='6'/>
+        <enumerator name='PHY_MODE_USB_DEVICE_LS' value='7'/>
+        <enumerator name='PHY_MODE_USB_DEVICE_FS' value='8'/>
+        <enumerator name='PHY_MODE_USB_DEVICE_HS' value='9'/>
+        <enumerator name='PHY_MODE_USB_DEVICE_SS' value='10'/>
+        <enumerator name='PHY_MODE_USB_OTG' value='11'/>
+        <enumerator name='PHY_MODE_SGMII' value='12'/>
+        <enumerator name='PHY_MODE_2500SGMII' value='13'/>
+        <enumerator name='PHY_MODE_10GKR' value='14'/>
+        <enumerator name='PHY_MODE_UFS_HS_A' value='15'/>
+        <enumerator name='PHY_MODE_UFS_HS_B' value='16'/>
+      </enum-decl>
+      <class-decl name='phy_attrs' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/phy/phy.h' line='71' column='1' id='type-id-5371'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bus_width' type-id='type-id-7' visibility='default' filepath='include/linux/phy/phy.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='mode' type-id='type-id-5376' visibility='default' filepath='include/linux/phy/phy.h' line='73' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='usb_otg_state' filepath='include/linux/usb/phy.h' line='43' column='1' id='type-id-5364'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='OTG_STATE_UNDEFINED' value='0'/>
+        <enumerator name='OTG_STATE_B_IDLE' value='1'/>
+        <enumerator name='OTG_STATE_B_SRP_INIT' value='2'/>
+        <enumerator name='OTG_STATE_B_PERIPHERAL' value='3'/>
+        <enumerator name='OTG_STATE_B_WAIT_ACON' value='4'/>
+        <enumerator name='OTG_STATE_B_HOST' value='5'/>
+        <enumerator name='OTG_STATE_A_IDLE' value='6'/>
+        <enumerator name='OTG_STATE_A_WAIT_VRISE' value='7'/>
+        <enumerator name='OTG_STATE_A_WAIT_BCON' value='8'/>
+        <enumerator name='OTG_STATE_A_HOST' value='9'/>
+        <enumerator name='OTG_STATE_A_SUSPEND' value='10'/>
+        <enumerator name='OTG_STATE_A_PERIPHERAL' value='11'/>
+        <enumerator name='OTG_STATE_A_WAIT_VFALL' value='12'/>
+        <enumerator name='OTG_STATE_A_VBUS_ERR' value='13'/>
+      </enum-decl>
+      <class-decl name='usb_phy_io_ops' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/usb/phy.h' line='72' column='1' id='type-id-5377'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='read' type-id='type-id-5378' visibility='default' filepath='include/linux/usb/phy.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='write' type-id='type-id-5379' visibility='default' filepath='include/linux/usb/phy.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='usb_charger_type' filepath='include/uapi/linux/usb/charger.h' line='16' column='1' id='type-id-5350'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='UNKNOWN_TYPE' value='0'/>
+        <enumerator name='SDP_TYPE' value='1'/>
+        <enumerator name='DCP_TYPE' value='2'/>
+        <enumerator name='CDP_TYPE' value='3'/>
+        <enumerator name='ACA_TYPE' value='4'/>
+      </enum-decl>
+      <enum-decl name='usb_charger_state' filepath='include/uapi/linux/usb/charger.h' line='25' column='1' id='type-id-5351'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='USB_CHARGER_DEFAULT' value='0'/>
+        <enumerator name='USB_CHARGER_PRESENT' value='1'/>
+        <enumerator name='USB_CHARGER_ABSENT' value='2'/>
+      </enum-decl>
+      <class-decl name='usb_charger_current' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/usb/phy.h' line='77' column='1' id='type-id-5352'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sdp_min' type-id='type-id-5' visibility='default' filepath='include/linux/usb/phy.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='sdp_max' type-id='type-id-5' visibility='default' filepath='include/linux/usb/phy.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dcp_min' type-id='type-id-5' visibility='default' filepath='include/linux/usb/phy.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dcp_max' type-id='type-id-5' visibility='default' filepath='include/linux/usb/phy.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cdp_min' type-id='type-id-5' visibility='default' filepath='include/linux/usb/phy.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='cdp_max' type-id='type-id-5' visibility='default' filepath='include/linux/usb/phy.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='aca_min' type-id='type-id-5' visibility='default' filepath='include/linux/usb/phy.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='aca_max' type-id='type-id-5' visibility='default' filepath='include/linux/usb/phy.h' line='85' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='atomic_notifier_head' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/notifier.h' line='60' column='1' id='type-id-5353'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='include/linux/notifier.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='head' type-id='type-id-3271' visibility='default' filepath='include/linux/notifier.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='giveback_urb_bh' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/usb/hcd.h' line='67' column='1' id='type-id-5312'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='running' type-id='type-id-33' visibility='default' filepath='include/linux/usb/hcd.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='include/linux/usb/hcd.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='head' type-id='type-id-20' visibility='default' filepath='include/linux/usb/hcd.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bh' type-id='type-id-3298' visibility='default' filepath='include/linux/usb/hcd.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='completing_ep' type-id='type-id-5246' visibility='default' filepath='include/linux/usb/hcd.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='type-id-5319' const='yes' id='type-id-5380'/>
+      <pointer-type-def type-id='type-id-5380' size-in-bits='64' id='type-id-5309'/>
+      <qualified-type-def type-id='type-id-5373' const='yes' id='type-id-5381'/>
+      <pointer-type-def type-id='type-id-5381' size-in-bits='64' id='type-id-5370'/>
+      <pointer-type-def type-id='type-id-5298' size-in-bits='64' id='type-id-5303'/>
+      <pointer-type-def type-id='type-id-5382' size-in-bits='64' id='type-id-5360'/>
+      <pointer-type-def type-id='type-id-5299' size-in-bits='64' id='type-id-5349'/>
+      <pointer-type-def type-id='type-id-5383' size-in-bits='64' id='type-id-5374'/>
+      <pointer-type-def type-id='type-id-5384' size-in-bits='64' id='type-id-5375'/>
+      <pointer-type-def type-id='type-id-5385' size-in-bits='64' id='type-id-5321'/>
+      <pointer-type-def type-id='type-id-5386' size-in-bits='64' id='type-id-5328'/>
+      <pointer-type-def type-id='type-id-5387' size-in-bits='64' id='type-id-5333'/>
+      <pointer-type-def type-id='type-id-5388' size-in-bits='64' id='type-id-5342'/>
+      <pointer-type-def type-id='type-id-5389' size-in-bits='64' id='type-id-5322'/>
+      <pointer-type-def type-id='type-id-5390' size-in-bits='64' id='type-id-5329'/>
+      <pointer-type-def type-id='type-id-5391' size-in-bits='64' id='type-id-5330'/>
+      <pointer-type-def type-id='type-id-5392' size-in-bits='64' id='type-id-5325'/>
+      <pointer-type-def type-id='type-id-5393' size-in-bits='64' id='type-id-5324'/>
+      <pointer-type-def type-id='type-id-5394' size-in-bits='64' id='type-id-5334'/>
+      <pointer-type-def type-id='type-id-5395' size-in-bits='64' id='type-id-5341'/>
+      <pointer-type-def type-id='type-id-5396' size-in-bits='64' id='type-id-5340'/>
+      <pointer-type-def type-id='type-id-5397' size-in-bits='64' id='type-id-5338'/>
+      <pointer-type-def type-id='type-id-5398' size-in-bits='64' id='type-id-5337'/>
+      <pointer-type-def type-id='type-id-5399' size-in-bits='64' id='type-id-5336'/>
+      <pointer-type-def type-id='type-id-5400' size-in-bits='64' id='type-id-5339'/>
+      <pointer-type-def type-id='type-id-5401' size-in-bits='64' id='type-id-5368'/>
+      <pointer-type-def type-id='type-id-5402' size-in-bits='64' id='type-id-5367'/>
+      <pointer-type-def type-id='type-id-5403' size-in-bits='64' id='type-id-5365'/>
+      <pointer-type-def type-id='type-id-5404' size-in-bits='64' id='type-id-5366'/>
+      <pointer-type-def type-id='type-id-5405' size-in-bits='64' id='type-id-5354'/>
+      <pointer-type-def type-id='type-id-5406' size-in-bits='64' id='type-id-5359'/>
+      <pointer-type-def type-id='type-id-5407' size-in-bits='64' id='type-id-5356'/>
+      <pointer-type-def type-id='type-id-5408' size-in-bits='64' id='type-id-5358'/>
+      <pointer-type-def type-id='type-id-5409' size-in-bits='64' id='type-id-5378'/>
+      <pointer-type-def type-id='type-id-5410' size-in-bits='64' id='type-id-5379'/>
+      <pointer-type-def type-id='type-id-5411' size-in-bits='64' id='type-id-5357'/>
+      <pointer-type-def type-id='type-id-5369' size-in-bits='64' id='type-id-5362'/>
+      <pointer-type-def type-id='type-id-5300' size-in-bits='64' id='type-id-5372'/>
+      <pointer-type-def type-id='type-id-5412' size-in-bits='64' id='type-id-5320'/>
+      <pointer-type-def type-id='type-id-5413' size-in-bits='64' id='type-id-5331'/>
+      <pointer-type-def type-id='type-id-5314' size-in-bits='64' id='type-id-5308'/>
+      <pointer-type-def type-id='type-id-5317' size-in-bits='64' id='type-id-5315'/>
+      <pointer-type-def type-id='type-id-5301' size-in-bits='64' id='type-id-5363'/>
+      <pointer-type-def type-id='type-id-5307' size-in-bits='64' id='type-id-5313'/>
+      <pointer-type-def type-id='type-id-5246' size-in-bits='64' id='type-id-5414'/>
+      <pointer-type-def type-id='type-id-5361' size-in-bits='64' id='type-id-5347'/>
+      <pointer-type-def type-id='type-id-5344' size-in-bits='64' id='type-id-5310'/>
+      <pointer-type-def type-id='type-id-5377' size-in-bits='64' id='type-id-5348'/>
+      <pointer-type-def type-id='type-id-5302' size-in-bits='64' id='type-id-5311'/>
+      <pointer-type-def type-id='type-id-5415' size-in-bits='64' id='type-id-5318'/>
+      <pointer-type-def type-id='type-id-5416' size-in-bits='64' id='type-id-5323'/>
+      <pointer-type-def type-id='type-id-5417' size-in-bits='64' id='type-id-5332'/>
+      <pointer-type-def type-id='type-id-5418' size-in-bits='64' id='type-id-5326'/>
+      <pointer-type-def type-id='type-id-5419' size-in-bits='64' id='type-id-5335'/>
+      <pointer-type-def type-id='type-id-5420' size-in-bits='64' id='type-id-5327'/>
+      <pointer-type-def type-id='type-id-5421' size-in-bits='64' id='type-id-5355'/>
+      <function-decl name='usb_hcd_poll_rh_status' mangled-name='usb_hcd_poll_rh_status' filepath='drivers/usb/core/hcd.c' line='749' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_poll_rh_status'>
+        <parameter type-id='type-id-5313' name='hcd' filepath='drivers/usb/core/hcd.c' line='749' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='usb_hcd_unlink_urb_from_ep' mangled-name='usb_hcd_unlink_urb_from_ep' filepath='drivers/usb/core/hcd.c' line='1332' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_unlink_urb_from_ep'>
+        <parameter type-id='type-id-5313' name='hcd' filepath='drivers/usb/core/hcd.c' line='1332' column='1'/>
+        <parameter type-id='type-id-5308' name='urb' filepath='drivers/usb/core/hcd.c' line='1332' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='usb_hcd_giveback_urb' mangled-name='usb_hcd_giveback_urb' filepath='drivers/usb/core/hcd.c' line='1826' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_giveback_urb'>
+        <parameter type-id='type-id-5313' name='hcd' filepath='drivers/usb/core/hcd.c' line='1826' column='1'/>
+        <parameter type-id='type-id-5308' name='urb' filepath='drivers/usb/core/hcd.c' line='1826' column='1'/>
+        <parameter type-id='type-id-17' name='status' filepath='drivers/usb/core/hcd.c' line='1826' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='usb_hcd_link_urb_to_ep' mangled-name='usb_hcd_link_urb_to_ep' filepath='drivers/usb/core/hcd.c' line='1241' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_link_urb_to_ep'>
+        <parameter type-id='type-id-5313' name='hcd' filepath='drivers/usb/core/hcd.c' line='1241' column='1'/>
+        <parameter type-id='type-id-5308' name='urb' filepath='drivers/usb/core/hcd.c' line='1241' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='usb_hcd_check_unlink_urb' mangled-name='usb_hcd_check_unlink_urb' filepath='drivers/usb/core/hcd.c' line='1299' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_check_unlink_urb'>
+        <parameter type-id='type-id-5313' name='hcd' filepath='drivers/usb/core/hcd.c' line='1299' column='1'/>
+        <parameter type-id='type-id-5308' name='urb' filepath='drivers/usb/core/hcd.c' line='1299' column='1'/>
+        <parameter type-id='type-id-17' name='status' filepath='drivers/usb/core/hcd.c' line='1300' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='usb_hcd_resume_root_hub' mangled-name='usb_hcd_resume_root_hub' filepath='drivers/usb/core/hcd.c' line='2377' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_resume_root_hub'>
+        <parameter type-id='type-id-5313' name='hcd' filepath='drivers/usb/core/hcd.c' line='2377' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='usb_hcd_is_primary_hcd' mangled-name='usb_hcd_is_primary_hcd' filepath='drivers/usb/core/hcd.c' line='2666' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_is_primary_hcd'>
+        <parameter type-id='type-id-5313' name='hcd' filepath='drivers/usb/core/hcd.c' line='2666' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='usb_create_shared_hcd' mangled-name='usb_create_shared_hcd' filepath='drivers/usb/core/hcd.c' line='2595' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_create_shared_hcd'>
+        <parameter type-id='type-id-5309' name='driver' filepath='drivers/usb/core/hcd.c' line='2595' column='1'/>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/usb/core/hcd.c' line='2596' column='1'/>
+        <parameter type-id='type-id-4' name='bus_name' filepath='drivers/usb/core/hcd.c' line='2596' column='1'/>
+        <parameter type-id='type-id-5313' name='primary_hcd' filepath='drivers/usb/core/hcd.c' line='2597' column='1'/>
+        <return type-id='type-id-5313'/>
+      </function-decl>
+      <function-decl name='usb_create_hcd' mangled-name='usb_create_hcd' filepath='drivers/usb/core/hcd.c' line='2617' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_create_hcd'>
+        <parameter type-id='type-id-5309' name='driver' filepath='drivers/usb/core/hcd.c' line='2617' column='1'/>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/usb/core/hcd.c' line='2618' column='1'/>
+        <parameter type-id='type-id-4' name='bus_name' filepath='drivers/usb/core/hcd.c' line='2618' column='1'/>
+        <return type-id='type-id-5313'/>
+      </function-decl>
+      <function-decl name='usb_put_hcd' mangled-name='usb_put_hcd' filepath='drivers/usb/core/hcd.c' line='2659' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_put_hcd'>
+        <parameter type-id='type-id-5313' name='hcd' filepath='drivers/usb/core/hcd.c' line='2659' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='usb_add_hcd' mangled-name='usb_add_hcd' filepath='drivers/usb/core/hcd.c' line='2740' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_add_hcd'>
+        <parameter type-id='type-id-5313' name='hcd' filepath='drivers/usb/core/hcd.c' line='2740' column='1'/>
+        <parameter type-id='type-id-5' name='irqnum' filepath='drivers/usb/core/hcd.c' line='2741' column='1'/>
+        <parameter type-id='type-id-16' name='irqflags' filepath='drivers/usb/core/hcd.c' line='2741' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='usb_remove_hcd' mangled-name='usb_remove_hcd' filepath='drivers/usb/core/hcd.c' line='2947' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_remove_hcd'>
+        <parameter type-id='type-id-5313' name='hcd' filepath='drivers/usb/core/hcd.c' line='2947' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-5382'>
+        <parameter type-id='type-id-5310'/>
+        <return type-id='type-id-5350'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5383'>
+        <parameter type-id='type-id-5362'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5384'>
+        <parameter type-id='type-id-5362'/>
+        <parameter type-id='type-id-5376'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5385'>
+        <parameter type-id='type-id-5313'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5386'>
+        <parameter type-id='type-id-5313'/>
+        <parameter type-id='type-id-2'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5387'>
+        <parameter type-id='type-id-5313'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5388'>
+        <parameter type-id='type-id-5313'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-33'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5389'>
+        <parameter type-id='type-id-5313'/>
+        <parameter type-id='type-id-33'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5390'>
+        <parameter type-id='type-id-5313'/>
+        <parameter type-id='type-id-688'/>
+        <parameter type-id='type-id-688'/>
+        <parameter type-id='type-id-688'/>
+        <parameter type-id='type-id-2'/>
+        <parameter type-id='type-id-688'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5391'>
+        <parameter type-id='type-id-5313'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5392'>
+        <parameter type-id='type-id-5313'/>
+        <parameter type-id='type-id-5308'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5393'>
+        <parameter type-id='type-id-5313'/>
+        <parameter type-id='type-id-5308'/>
+        <parameter type-id='type-id-485'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5394'>
+        <parameter type-id='type-id-5313'/>
+        <parameter type-id='type-id-5260'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5395'>
+        <parameter type-id='type-id-5313'/>
+        <parameter type-id='type-id-5260'/>
+        <parameter type-id='type-id-5343'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5396'>
+        <parameter type-id='type-id-5313'/>
+        <parameter type-id='type-id-5260'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5397'>
+        <parameter type-id='type-id-5313'/>
+        <parameter type-id='type-id-5260'/>
+        <parameter type-id='type-id-5246'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5398'>
+        <parameter type-id='type-id-5313'/>
+        <parameter type-id='type-id-5260'/>
+        <parameter type-id='type-id-5414'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-485'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5399'>
+        <parameter type-id='type-id-5313'/>
+        <parameter type-id='type-id-5260'/>
+        <parameter type-id='type-id-5414'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-485'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5400'>
+        <parameter type-id='type-id-5313'/>
+        <parameter type-id='type-id-5260'/>
+        <parameter type-id='type-id-5259'/>
+        <parameter type-id='type-id-485'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5401'>
+        <parameter type-id='type-id-5347'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5402'>
+        <parameter type-id='type-id-5347'/>
+        <parameter type-id='type-id-33'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5403'>
+        <parameter type-id='type-id-5347'/>
+        <parameter type-id='type-id-5261'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5404'>
+        <parameter type-id='type-id-5347'/>
+        <parameter type-id='type-id-5363'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5405'>
+        <parameter type-id='type-id-5310'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5406'>
+        <parameter type-id='type-id-5310'/>
+        <parameter type-id='type-id-5258'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5407'>
+        <parameter type-id='type-id-5310'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5408'>
+        <parameter type-id='type-id-5310'/>
+        <parameter type-id='type-id-33'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5409'>
+        <parameter type-id='type-id-5310'/>
+        <parameter type-id='type-id-7'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5410'>
+        <parameter type-id='type-id-5310'/>
+        <parameter type-id='type-id-7'/>
+        <parameter type-id='type-id-7'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5411'>
+        <parameter type-id='type-id-5310'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5412'>
+        <parameter type-id='type-id-5313'/>
+        <return type-id='type-id-3484'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5413'>
+        <parameter type-id='type-id-5313'/>
+        <return type-id='type-id-16'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5415'>
+        <parameter type-id='type-id-5308'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5416'>
+        <parameter type-id='type-id-5313' name='hcd'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5417'>
+        <parameter type-id='type-id-5313'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5418'>
+        <parameter type-id='type-id-5313'/>
+        <parameter type-id='type-id-5308'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5419'>
+        <parameter type-id='type-id-5313'/>
+        <parameter type-id='type-id-5260'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5420'>
+        <parameter type-id='type-id-5313'/>
+        <parameter type-id='type-id-5246'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5421'>
+        <parameter type-id='type-id-5310'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/gadget/udc/core.c' language='LANG_C89'>
+      <class-decl name='usb_otg_caps' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-5422'/>
+      <class-decl name='usb_ep' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='218' column='1' id='type-id-5423'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='driver_data' type-id='type-id-15' visibility='default' filepath='include/linux/usb/gadget.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/usb/gadget.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ops' type-id='type-id-5424' visibility='default' filepath='include/linux/usb/gadget.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ep_list' type-id='type-id-20' visibility='default' filepath='include/linux/usb/gadget.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='caps' type-id='type-id-5425' visibility='default' filepath='include/linux/usb/gadget.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='claimed' type-id='type-id-33' visibility='default' filepath='include/linux/usb/gadget.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='360'>
+          <var-decl name='enabled' type-id='type-id-33' visibility='default' filepath='include/linux/usb/gadget.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='maxpacket' type-id='type-id-5' visibility='default' filepath='include/linux/usb/gadget.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='maxpacket_limit' type-id='type-id-5' visibility='default' filepath='include/linux/usb/gadget.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='max_streams' type-id='type-id-5' visibility='default' filepath='include/linux/usb/gadget.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='mult' type-id='type-id-5' visibility='default' filepath='include/linux/usb/gadget.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='maxburst' type-id='type-id-5' visibility='default' filepath='include/linux/usb/gadget.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='424'>
+          <var-decl name='address' type-id='type-id-214' visibility='default' filepath='include/linux/usb/gadget.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='desc' type-id='type-id-5426' visibility='default' filepath='include/linux/usb/gadget.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='comp_desc' type-id='type-id-5427' visibility='default' filepath='include/linux/usb/gadget.h' line='234' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_ep_ops' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='128' column='1' id='type-id-5428'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enable' type-id='type-id-5429' visibility='default' filepath='include/linux/usb/gadget.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='disable' type-id='type-id-5430' visibility='default' filepath='include/linux/usb/gadget.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dispose' type-id='type-id-5431' visibility='default' filepath='include/linux/usb/gadget.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='alloc_request' type-id='type-id-5432' visibility='default' filepath='include/linux/usb/gadget.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='free_request' type-id='type-id-5433' visibility='default' filepath='include/linux/usb/gadget.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='queue' type-id='type-id-5434' visibility='default' filepath='include/linux/usb/gadget.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dequeue' type-id='type-id-5435' visibility='default' filepath='include/linux/usb/gadget.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_halt' type-id='type-id-5436' visibility='default' filepath='include/linux/usb/gadget.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_wedge' type-id='type-id-5430' visibility='default' filepath='include/linux/usb/gadget.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='fifo_status' type-id='type-id-5430' visibility='default' filepath='include/linux/usb/gadget.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fifo_flush' type-id='type-id-5431' visibility='default' filepath='include/linux/usb/gadget.h' line='146' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_request' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='95' column='1' id='type-id-5437'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buf' type-id='type-id-15' visibility='default' filepath='include/linux/usb/gadget.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='length' type-id='type-id-5' visibility='default' filepath='include/linux/usb/gadget.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dma' type-id='type-id-2083' visibility='default' filepath='include/linux/usb/gadget.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sg' type-id='type-id-920' visibility='default' filepath='include/linux/usb/gadget.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='num_sgs' type-id='type-id-5' visibility='default' filepath='include/linux/usb/gadget.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='num_mapped_sgs' type-id='type-id-5' visibility='default' filepath='include/linux/usb/gadget.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='stream_id' type-id='type-id-5' visibility='default' filepath='include/linux/usb/gadget.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='no_interrupt' type-id='type-id-5' visibility='default' filepath='include/linux/usb/gadget.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='zero' type-id='type-id-5' visibility='default' filepath='include/linux/usb/gadget.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='short_not_ok' type-id='type-id-5' visibility='default' filepath='include/linux/usb/gadget.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='dma_mapped' type-id='type-id-5' visibility='default' filepath='include/linux/usb/gadget.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='complete' type-id='type-id-5433' visibility='default' filepath='include/linux/usb/gadget.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='context' type-id='type-id-15' visibility='default' filepath='include/linux/usb/gadget.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/usb/gadget.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='status' type-id='type-id-17' visibility='default' filepath='include/linux/usb/gadget.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='actual' type-id='type-id-5' visibility='default' filepath='include/linux/usb/gadget.h' line='116' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_ep_caps' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='158' column='1' id='type-id-5425'>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='type_control' type-id='type-id-5' visibility='default' filepath='include/linux/usb/gadget.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='type_iso' type-id='type-id-5' visibility='default' filepath='include/linux/usb/gadget.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='type_bulk' type-id='type-id-5' visibility='default' filepath='include/linux/usb/gadget.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='type_int' type-id='type-id-5' visibility='default' filepath='include/linux/usb/gadget.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='dir_in' type-id='type-id-5' visibility='default' filepath='include/linux/usb/gadget.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='dir_out' type-id='type-id-5' visibility='default' filepath='include/linux/usb/gadget.h' line='164' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_udc' size-in-bits='6528' is-struct='yes' visibility='default' filepath='drivers/usb/gadget/udc/core.c' line='36' column='1' id='type-id-5438'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='driver' type-id='type-id-5439' visibility='default' filepath='drivers/usb/gadget/udc/core.c' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='gadget' type-id='type-id-5363' visibility='default' filepath='drivers/usb/gadget/udc/core.c' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='type-id-388' visibility='default' filepath='drivers/usb/gadget/udc/core.c' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='drivers/usb/gadget/udc/core.c' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='vbus' type-id='type-id-33' visibility='default' filepath='drivers/usb/gadget/udc/core.c' line='41' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_gadget_driver' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='664' column='1' id='type-id-5440'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='function' type-id='type-id-2' visibility='default' filepath='include/linux/usb/gadget.h' line='665' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_speed' type-id='type-id-5258' visibility='default' filepath='include/linux/usb/gadget.h' line='666' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bind' type-id='type-id-5441' visibility='default' filepath='include/linux/usb/gadget.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unbind' type-id='type-id-5442' visibility='default' filepath='include/linux/usb/gadget.h' line='669' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='setup' type-id='type-id-5443' visibility='default' filepath='include/linux/usb/gadget.h' line='670' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='disconnect' type-id='type-id-5442' visibility='default' filepath='include/linux/usb/gadget.h' line='672' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='suspend' type-id='type-id-5442' visibility='default' filepath='include/linux/usb/gadget.h' line='673' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='resume' type-id='type-id-5442' visibility='default' filepath='include/linux/usb/gadget.h' line='674' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='reset' type-id='type-id-5442' visibility='default' filepath='include/linux/usb/gadget.h' line='675' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='driver' type-id='type-id-2049' visibility='default' filepath='include/linux/usb/gadget.h' line='678' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='udc_name' type-id='type-id-2' visibility='default' filepath='include/linux/usb/gadget.h' line='680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='pending' type-id='type-id-20' visibility='default' filepath='include/linux/usb/gadget.h' line='681' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='match_existing_only' type-id='type-id-5' visibility='default' filepath='include/linux/usb/gadget.h' line='682' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_ctrlrequest' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='213' column='1' id='type-id-5444'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bRequestType' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bRequest' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='wValue' type-id='type-id-5123' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='wIndex' type-id='type-id-5123' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='wLength' type-id='type-id-5123' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='218' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_gadget_ops' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='300' column='1' id='type-id-5445'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_frame' type-id='type-id-5446' visibility='default' filepath='include/linux/usb/gadget.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wakeup' type-id='type-id-5446' visibility='default' filepath='include/linux/usb/gadget.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_selfpowered' type-id='type-id-5447' visibility='default' filepath='include/linux/usb/gadget.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vbus_session' type-id='type-id-5447' visibility='default' filepath='include/linux/usb/gadget.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='vbus_draw' type-id='type-id-5448' visibility='default' filepath='include/linux/usb/gadget.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pullup' type-id='type-id-5447' visibility='default' filepath='include/linux/usb/gadget.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ioctl' type-id='type-id-5449' visibility='default' filepath='include/linux/usb/gadget.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_config_params' type-id='type-id-5450' visibility='default' filepath='include/linux/usb/gadget.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='udc_start' type-id='type-id-5441' visibility='default' filepath='include/linux/usb/gadget.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='udc_stop' type-id='type-id-5446' visibility='default' filepath='include/linux/usb/gadget.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='udc_set_speed' type-id='type-id-5451' visibility='default' filepath='include/linux/usb/gadget.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='match_ep' type-id='type-id-5452' visibility='default' filepath='include/linux/usb/gadget.h' line='314' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_dcd_config_params' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='285' column='1' id='type-id-5453'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bU1devExitLat' type-id='type-id-895' visibility='default' filepath='include/linux/usb/gadget.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bU2DevExitLat' type-id='type-id-5123' visibility='default' filepath='include/linux/usb/gadget.h' line='288' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='type-id-5444' const='yes' id='type-id-5454'/>
+      <pointer-type-def type-id='type-id-5454' size-in-bits='64' id='type-id-5455'/>
+      <qualified-type-def type-id='type-id-5273' const='yes' id='type-id-5456'/>
+      <pointer-type-def type-id='type-id-5456' size-in-bits='64' id='type-id-5426'/>
+      <qualified-type-def type-id='type-id-5428' const='yes' id='type-id-5457'/>
+      <pointer-type-def type-id='type-id-5457' size-in-bits='64' id='type-id-5424'/>
+      <qualified-type-def type-id='type-id-5445' const='yes' id='type-id-5458'/>
+      <pointer-type-def type-id='type-id-5458' size-in-bits='64' id='type-id-5459'/>
+      <qualified-type-def type-id='type-id-5274' const='yes' id='type-id-5460'/>
+      <pointer-type-def type-id='type-id-5460' size-in-bits='64' id='type-id-5427'/>
+      <pointer-type-def type-id='type-id-5461' size-in-bits='64' id='type-id-5430'/>
+      <pointer-type-def type-id='type-id-5462' size-in-bits='64' id='type-id-5429'/>
+      <pointer-type-def type-id='type-id-5463' size-in-bits='64' id='type-id-5436'/>
+      <pointer-type-def type-id='type-id-5464' size-in-bits='64' id='type-id-5435'/>
+      <pointer-type-def type-id='type-id-5465' size-in-bits='64' id='type-id-5434'/>
+      <pointer-type-def type-id='type-id-5466' size-in-bits='64' id='type-id-5446'/>
+      <pointer-type-def type-id='type-id-5467' size-in-bits='64' id='type-id-5443'/>
+      <pointer-type-def type-id='type-id-5468' size-in-bits='64' id='type-id-5447'/>
+      <pointer-type-def type-id='type-id-5469' size-in-bits='64' id='type-id-5448'/>
+      <pointer-type-def type-id='type-id-5470' size-in-bits='64' id='type-id-5449'/>
+      <pointer-type-def type-id='type-id-5471' size-in-bits='64' id='type-id-5441'/>
+      <pointer-type-def type-id='type-id-5453' size-in-bits='64' id='type-id-5472'/>
+      <pointer-type-def type-id='type-id-5273' size-in-bits='64' id='type-id-5473'/>
+      <pointer-type-def type-id='type-id-5423' size-in-bits='64' id='type-id-5474'/>
+      <pointer-type-def type-id='type-id-5475' size-in-bits='64' id='type-id-5452'/>
+      <pointer-type-def type-id='type-id-5440' size-in-bits='64' id='type-id-5439'/>
+      <pointer-type-def type-id='type-id-5422' size-in-bits='64' id='type-id-5476'/>
+      <pointer-type-def type-id='type-id-5437' size-in-bits='64' id='type-id-5477'/>
+      <pointer-type-def type-id='type-id-5478' size-in-bits='64' id='type-id-5432'/>
+      <pointer-type-def type-id='type-id-5274' size-in-bits='64' id='type-id-5479'/>
+      <pointer-type-def type-id='type-id-5438' size-in-bits='64' id='type-id-5480'/>
+      <pointer-type-def type-id='type-id-5481' size-in-bits='64' id='type-id-5450'/>
+      <pointer-type-def type-id='type-id-5482' size-in-bits='64' id='type-id-5431'/>
+      <pointer-type-def type-id='type-id-5483' size-in-bits='64' id='type-id-5433'/>
+      <pointer-type-def type-id='type-id-5484' size-in-bits='64' id='type-id-5442'/>
+      <pointer-type-def type-id='type-id-5485' size-in-bits='64' id='type-id-5451'/>
+      <function-decl name='usb_ep_set_maxpacket_limit' mangled-name='usb_ep_set_maxpacket_limit' filepath='drivers/usb/gadget/udc/core.c' line='62' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_ep_set_maxpacket_limit'>
+        <parameter type-id='type-id-5474' name='ep' filepath='drivers/usb/gadget/udc/core.c' line='62' column='1'/>
+        <parameter type-id='type-id-5' name='maxpacket_limit' filepath='drivers/usb/gadget/udc/core.c' line='63' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='usb_gadget_giveback_request' mangled-name='usb_gadget_giveback_request' filepath='drivers/usb/gadget/udc/core.c' line='894' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_gadget_giveback_request'>
+        <parameter type-id='type-id-5474' name='ep' filepath='drivers/usb/gadget/udc/core.c' line='894' column='1'/>
+        <parameter type-id='type-id-5477' name='req' filepath='drivers/usb/gadget/udc/core.c' line='895' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='usb_gadget_udc_reset' mangled-name='usb_gadget_udc_reset' filepath='drivers/usb/gadget/udc/core.c' line='1054' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_gadget_udc_reset'>
+        <parameter type-id='type-id-5363' name='gadget' filepath='drivers/usb/gadget/udc/core.c' line='1054' column='1'/>
+        <parameter type-id='type-id-5439' name='driver' filepath='drivers/usb/gadget/udc/core.c' line='1055' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='usb_add_gadget_udc' mangled-name='usb_add_gadget_udc' filepath='drivers/usb/gadget/udc/core.c' line='1281' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_add_gadget_udc'>
+        <parameter type-id='type-id-240' name='parent' filepath='drivers/usb/gadget/udc/core.c' line='1281' column='1'/>
+        <parameter type-id='type-id-5363' name='gadget' filepath='drivers/usb/gadget/udc/core.c' line='1281' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='usb_del_gadget_udc' mangled-name='usb_del_gadget_udc' filepath='drivers/usb/gadget/udc/core.c' line='1311' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_del_gadget_udc'>
+        <parameter type-id='type-id-5363' name='gadget' filepath='drivers/usb/gadget/udc/core.c' line='1311' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-5461'>
+        <parameter type-id='type-id-5474'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5462'>
+        <parameter type-id='type-id-5474'/>
+        <parameter type-id='type-id-5426'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5463'>
+        <parameter type-id='type-id-5474'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5464'>
+        <parameter type-id='type-id-5474'/>
+        <parameter type-id='type-id-5477'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5465'>
+        <parameter type-id='type-id-5474'/>
+        <parameter type-id='type-id-5477'/>
+        <parameter type-id='type-id-485'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5466'>
+        <parameter type-id='type-id-5363'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5467'>
+        <parameter type-id='type-id-5363'/>
+        <parameter type-id='type-id-5455'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5468'>
+        <parameter type-id='type-id-5363'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5469'>
+        <parameter type-id='type-id-5363'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5470'>
+        <parameter type-id='type-id-5363'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5471'>
+        <parameter type-id='type-id-5363'/>
+        <parameter type-id='type-id-5439'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5475'>
+        <parameter type-id='type-id-5363'/>
+        <parameter type-id='type-id-5473'/>
+        <parameter type-id='type-id-5479'/>
+        <return type-id='type-id-5474'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5478'>
+        <parameter type-id='type-id-5474'/>
+        <parameter type-id='type-id-485'/>
+        <return type-id='type-id-5477'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5481'>
+        <parameter type-id='type-id-5472'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5482'>
+        <parameter type-id='type-id-5474'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5483'>
+        <parameter type-id='type-id-5474'/>
+        <parameter type-id='type-id-5477'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5484'>
+        <parameter type-id='type-id-5363'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5485'>
+        <parameter type-id='type-id-5363'/>
+        <parameter type-id='type-id-5258'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/input/input.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='type-id-5486' size-in-bits='192' id='type-id-5487'>
+        <subrange length='2' type-id='type-id-9' id='type-id-128'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-83' size-in-bits='infinite' id='type-id-5488'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-5489' size-in-bits='infinite' id='type-id-5490'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-17' size-in-bits='448' id='type-id-5491'>
+        <subrange length='14' type-id='type-id-9' id='type-id-117'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-3539' size-in-bits='768' id='type-id-5492'>
+        <subrange length='12' type-id='type-id-9' id='type-id-967'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-3539' size-in-bits='64' id='type-id-5493'>
+        <subrange length='1' type-id='type-id-9' id='type-id-180'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-3539' size-in-bits='128' id='type-id-5494'>
+        <subrange length='2' type-id='type-id-9' id='type-id-128'/>
+
+      </array-type-def>
+      <class-decl name='input_dev' size-in-bits='10944' is-struct='yes' visibility='default' filepath='include/linux/input.h' line='121' column='1' id='type-id-5495'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/input.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='phys' type-id='type-id-4' visibility='default' filepath='include/linux/input.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='uniq' type-id='type-id-4' visibility='default' filepath='include/linux/input.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='id' type-id='type-id-5496' visibility='default' filepath='include/linux/input.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='propbit' type-id='type-id-491' visibility='default' filepath='include/linux/input.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='evbit' type-id='type-id-491' visibility='default' filepath='include/linux/input.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='keybit' type-id='type-id-1197' visibility='default' filepath='include/linux/input.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='relbit' type-id='type-id-491' visibility='default' filepath='include/linux/input.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='absbit' type-id='type-id-491' visibility='default' filepath='include/linux/input.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='mscbit' type-id='type-id-491' visibility='default' filepath='include/linux/input.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='ledbit' type-id='type-id-491' visibility='default' filepath='include/linux/input.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='sndbit' type-id='type-id-491' visibility='default' filepath='include/linux/input.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='ffbit' type-id='type-id-219' visibility='default' filepath='include/linux/input.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='swbit' type-id='type-id-491' visibility='default' filepath='include/linux/input.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='hint_events_per_packet' type-id='type-id-5' visibility='default' filepath='include/linux/input.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='keycodemax' type-id='type-id-5' visibility='default' filepath='include/linux/input.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='keycodesize' type-id='type-id-5' visibility='default' filepath='include/linux/input.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='keycode' type-id='type-id-15' visibility='default' filepath='include/linux/input.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='setkeycode' type-id='type-id-5497' visibility='default' filepath='include/linux/input.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='getkeycode' type-id='type-id-5498' visibility='default' filepath='include/linux/input.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='ff' type-id='type-id-5499' visibility='default' filepath='include/linux/input.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='repeat_key' type-id='type-id-5' visibility='default' filepath='include/linux/input.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='timer' type-id='type-id-417' visibility='default' filepath='include/linux/input.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='rep' type-id='type-id-465' visibility='default' filepath='include/linux/input.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='mt' type-id='type-id-5500' visibility='default' filepath='include/linux/input.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='absinfo' type-id='type-id-5501' visibility='default' filepath='include/linux/input.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='key' type-id='type-id-1197' visibility='default' filepath='include/linux/input.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='led' type-id='type-id-491' visibility='default' filepath='include/linux/input.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='snd' type-id='type-id-491' visibility='default' filepath='include/linux/input.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='sw' type-id='type-id-491' visibility='default' filepath='include/linux/input.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='open' type-id='type-id-5502' visibility='default' filepath='include/linux/input.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='close' type-id='type-id-5503' visibility='default' filepath='include/linux/input.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='flush' type-id='type-id-5504' visibility='default' filepath='include/linux/input.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='event' type-id='type-id-5505' visibility='default' filepath='include/linux/input.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='grab' type-id='type-id-5506' visibility='default' filepath='include/linux/input.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='event_lock' type-id='type-id-247' visibility='default' filepath='include/linux/input.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='mutex' type-id='type-id-245' visibility='default' filepath='include/linux/input.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='users' type-id='type-id-5' visibility='default' filepath='include/linux/input.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4256'>
+          <var-decl name='going_away' type-id='type-id-33' visibility='default' filepath='include/linux/input.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='dev' type-id='type-id-388' visibility='default' filepath='include/linux/input.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='h_list' type-id='type-id-20' visibility='default' filepath='include/linux/input.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='node' type-id='type-id-20' visibility='default' filepath='include/linux/input.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='num_vals' type-id='type-id-5' visibility='default' filepath='include/linux/input.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10784'>
+          <var-decl name='max_vals' type-id='type-id-5' visibility='default' filepath='include/linux/input.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='vals' type-id='type-id-5507' visibility='default' filepath='include/linux/input.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='devres_managed' type-id='type-id-33' visibility='default' filepath='include/linux/input.h' line='189' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='input_id' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='58' column='1' id='type-id-5496'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bustype' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/input.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='vendor' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/input.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='product' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/input.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='version' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/input.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='input_keymap_entry' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='113' column='1' id='type-id-5508'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/input.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='len' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/input.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='index' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/input.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='keycode' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/input.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='scancode' type-id='type-id-940' visibility='default' filepath='include/uapi/linux/input.h' line='119' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ff_device' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/input.h' line='510' column='1' id='type-id-5509'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='upload' type-id='type-id-5510' visibility='default' filepath='include/linux/input.h' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='erase' type-id='type-id-5511' visibility='default' filepath='include/linux/input.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='playback' type-id='type-id-5512' visibility='default' filepath='include/linux/input.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='set_gain' type-id='type-id-5513' visibility='default' filepath='include/linux/input.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_autocenter' type-id='type-id-5513' visibility='default' filepath='include/linux/input.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='destroy' type-id='type-id-5514' visibility='default' filepath='include/linux/input.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='private' type-id='type-id-15' visibility='default' filepath='include/linux/input.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ffbit' type-id='type-id-219' visibility='default' filepath='include/linux/input.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mutex' type-id='type-id-245' visibility='default' filepath='include/linux/input.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='max_effects' type-id='type-id-17' visibility='default' filepath='include/linux/input.h' line='527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='effects' type-id='type-id-5515' visibility='default' filepath='include/linux/input.h' line='528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='effect_owners' type-id='type-id-5488' visibility='default' filepath='include/linux/input.h' line='529' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ff_effect' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='449' column='1' id='type-id-5516'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/input.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='id' type-id='type-id-2203' visibility='default' filepath='include/uapi/linux/input.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='direction' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/input.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='trigger' type-id='type-id-5517' visibility='default' filepath='include/uapi/linux/input.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='replay' type-id='type-id-5518' visibility='default' filepath='include/uapi/linux/input.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='u' type-id='type-id-5519' visibility='default' filepath='include/uapi/linux/input.h' line='462' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ff_trigger' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='315' column='1' id='type-id-5517'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='button' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/input.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='interval' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/input.h' line='317' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ff_replay' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='305' column='1' id='type-id-5518'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='length' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/input.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='delay' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/input.h' line='307' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/input.h' line='456' column='1' id='type-id-5519'>
+        <data-member access='private'>
+          <var-decl name='constant' type-id='type-id-5520' visibility='default' filepath='include/uapi/linux/input.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ramp' type-id='type-id-5521' visibility='default' filepath='include/uapi/linux/input.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='periodic' type-id='type-id-5522' visibility='default' filepath='include/uapi/linux/input.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='condition' type-id='type-id-5487' visibility='default' filepath='include/uapi/linux/input.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rumble' type-id='type-id-5523' visibility='default' filepath='include/uapi/linux/input.h' line='461' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='ff_constant_effect' size-in-bits='80' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='344' column='1' id='type-id-5520'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='level' type-id='type-id-2203' visibility='default' filepath='include/uapi/linux/input.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='envelope' type-id='type-id-5524' visibility='default' filepath='include/uapi/linux/input.h' line='346' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ff_envelope' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='332' column='1' id='type-id-5524'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attack_length' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/input.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='attack_level' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/input.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='fade_length' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/input.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='fade_level' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/input.h' line='336' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ff_ramp_effect' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='355' column='1' id='type-id-5521'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start_level' type-id='type-id-2203' visibility='default' filepath='include/uapi/linux/input.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='end_level' type-id='type-id-2203' visibility='default' filepath='include/uapi/linux/input.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='envelope' type-id='type-id-5524' visibility='default' filepath='include/uapi/linux/input.h' line='358' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ff_periodic_effect' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='400' column='1' id='type-id-5522'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='waveform' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/input.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='period' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/input.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='magnitude' type-id='type-id-2203' visibility='default' filepath='include/uapi/linux/input.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='offset' type-id='type-id-2203' visibility='default' filepath='include/uapi/linux/input.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='phase' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/input.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='envelope' type-id='type-id-5524' visibility='default' filepath='include/uapi/linux/input.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='custom_len' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/input.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='custom_data' type-id='type-id-5525' visibility='default' filepath='include/uapi/linux/input.h' line='410' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ff_condition_effect' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='371' column='1' id='type-id-5486'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='right_saturation' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/input.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='left_saturation' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/input.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='right_coeff' type-id='type-id-2203' visibility='default' filepath='include/uapi/linux/input.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='left_coeff' type-id='type-id-2203' visibility='default' filepath='include/uapi/linux/input.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='deadband' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/input.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='center' type-id='type-id-2203' visibility='default' filepath='include/uapi/linux/input.h' line='379' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ff_rumble_effect' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='421' column='1' id='type-id-5523'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='strong_magnitude' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/input.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='weak_magnitude' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/input.h' line='423' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='input_mt' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/input/mt.h' line='46' column='1' id='type-id-5526'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='trkid' type-id='type-id-17' visibility='default' filepath='include/linux/input/mt.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='num_slots' type-id='type-id-17' visibility='default' filepath='include/linux/input/mt.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='slot' type-id='type-id-17' visibility='default' filepath='include/linux/input/mt.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='type-id-5' visibility='default' filepath='include/linux/input/mt.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='frame' type-id='type-id-5' visibility='default' filepath='include/linux/input/mt.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='red' type-id='type-id-666' visibility='default' filepath='include/linux/input/mt.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='slots' type-id='type-id-5490' visibility='default' filepath='include/linux/input/mt.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='input_mt_slot' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/input/mt.h' line='30' column='1' id='type-id-5489'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='abs' type-id='type-id-5491' visibility='default' filepath='include/linux/input/mt.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='frame' type-id='type-id-5' visibility='default' filepath='include/linux/input/mt.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='key' type-id='type-id-5' visibility='default' filepath='include/linux/input/mt.h' line='33' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='input_absinfo' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='89' column='1' id='type-id-5527'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='value' type-id='type-id-653' visibility='default' filepath='include/uapi/linux/input.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='minimum' type-id='type-id-653' visibility='default' filepath='include/uapi/linux/input.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='maximum' type-id='type-id-653' visibility='default' filepath='include/uapi/linux/input.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='fuzz' type-id='type-id-653' visibility='default' filepath='include/uapi/linux/input.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flat' type-id='type-id-653' visibility='default' filepath='include/uapi/linux/input.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='resolution' type-id='type-id-653' visibility='default' filepath='include/uapi/linux/input.h' line='95' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='input_handle' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/input.h' line='323' column='1' id='type-id-5528'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='private' type-id='type-id-15' visibility='default' filepath='include/linux/input.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='open' type-id='type-id-17' visibility='default' filepath='include/linux/input.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/input.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='type-id-5529' visibility='default' filepath='include/linux/input.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='handler' type-id='type-id-5530' visibility='default' filepath='include/linux/input.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='d_node' type-id='type-id-20' visibility='default' filepath='include/linux/input.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='h_node' type-id='type-id-20' visibility='default' filepath='include/linux/input.h' line='334' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='input_handler' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/input.h' line='288' column='1' id='type-id-5531'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='private' type-id='type-id-15' visibility='default' filepath='include/linux/input.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='event' type-id='type-id-5532' visibility='default' filepath='include/linux/input.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='events' type-id='type-id-5533' visibility='default' filepath='include/linux/input.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='filter' type-id='type-id-5534' visibility='default' filepath='include/linux/input.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='match' type-id='type-id-5535' visibility='default' filepath='include/linux/input.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='connect' type-id='type-id-5536' visibility='default' filepath='include/linux/input.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='disconnect' type-id='type-id-5537' visibility='default' filepath='include/linux/input.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='start' type-id='type-id-5537' visibility='default' filepath='include/linux/input.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='legacy_minors' type-id='type-id-33' visibility='default' filepath='include/linux/input.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='minor' type-id='type-id-17' visibility='default' filepath='include/linux/input.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/input.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='id_table' type-id='type-id-5538' visibility='default' filepath='include/linux/input.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='h_list' type-id='type-id-20' visibility='default' filepath='include/linux/input.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='node' type-id='type-id-20' visibility='default' filepath='include/linux/input.h' line='308' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='input_value' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/input.h' line='33' column='1' id='type-id-5539'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='type-id-108' visibility='default' filepath='include/linux/input.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='code' type-id='type-id-108' visibility='default' filepath='include/linux/input.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='value' type-id='type-id-653' visibility='default' filepath='include/linux/input.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='input_device_id' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='321' column='1' id='type-id-5540'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='type-id-3539' visibility='default' filepath='include/linux/mod_devicetable.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bustype' type-id='type-id-108' visibility='default' filepath='include/linux/mod_devicetable.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='vendor' type-id='type-id-108' visibility='default' filepath='include/linux/mod_devicetable.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='product' type-id='type-id-108' visibility='default' filepath='include/linux/mod_devicetable.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='version' type-id='type-id-108' visibility='default' filepath='include/linux/mod_devicetable.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='evbit' type-id='type-id-5493' visibility='default' filepath='include/linux/mod_devicetable.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='keybit' type-id='type-id-5492' visibility='default' filepath='include/linux/mod_devicetable.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='relbit' type-id='type-id-5493' visibility='default' filepath='include/linux/mod_devicetable.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='absbit' type-id='type-id-5493' visibility='default' filepath='include/linux/mod_devicetable.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='mscbit' type-id='type-id-5493' visibility='default' filepath='include/linux/mod_devicetable.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ledbit' type-id='type-id-5493' visibility='default' filepath='include/linux/mod_devicetable.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='sndbit' type-id='type-id-5493' visibility='default' filepath='include/linux/mod_devicetable.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='ffbit' type-id='type-id-5494' visibility='default' filepath='include/linux/mod_devicetable.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='swbit' type-id='type-id-5493' visibility='default' filepath='include/linux/mod_devicetable.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='propbit' type-id='type-id-5493' visibility='default' filepath='include/linux/mod_devicetable.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='driver_info' type-id='type-id-3539' visibility='default' filepath='include/linux/mod_devicetable.h' line='341' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-2203' size-in-bits='64' id='type-id-5525'/>
+      <qualified-type-def type-id='type-id-5540' const='yes' id='type-id-5541'/>
+      <pointer-type-def type-id='type-id-5541' size-in-bits='64' id='type-id-5538'/>
+      <qualified-type-def type-id='type-id-5508' const='yes' id='type-id-5542'/>
+      <pointer-type-def type-id='type-id-5542' size-in-bits='64' id='type-id-5543'/>
+      <qualified-type-def type-id='type-id-5539' const='yes' id='type-id-5544'/>
+      <pointer-type-def type-id='type-id-5544' size-in-bits='64' id='type-id-5545'/>
+      <pointer-type-def type-id='type-id-5509' size-in-bits='64' id='type-id-5499'/>
+      <pointer-type-def type-id='type-id-5516' size-in-bits='64' id='type-id-5515'/>
+      <pointer-type-def type-id='type-id-5527' size-in-bits='64' id='type-id-5501'/>
+      <pointer-type-def type-id='type-id-5495' size-in-bits='64' id='type-id-5529'/>
+      <pointer-type-def type-id='type-id-5528' size-in-bits='64' id='type-id-5506'/>
+      <pointer-type-def type-id='type-id-5531' size-in-bits='64' id='type-id-5530'/>
+      <pointer-type-def type-id='type-id-5508' size-in-bits='64' id='type-id-5546'/>
+      <pointer-type-def type-id='type-id-5526' size-in-bits='64' id='type-id-5500'/>
+      <pointer-type-def type-id='type-id-5539' size-in-bits='64' id='type-id-5507'/>
+      <pointer-type-def type-id='type-id-5547' size-in-bits='64' id='type-id-5502'/>
+      <pointer-type-def type-id='type-id-5548' size-in-bits='64' id='type-id-5497'/>
+      <pointer-type-def type-id='type-id-5549' size-in-bits='64' id='type-id-5510'/>
+      <pointer-type-def type-id='type-id-5550' size-in-bits='64' id='type-id-5504'/>
+      <pointer-type-def type-id='type-id-5551' size-in-bits='64' id='type-id-5498'/>
+      <pointer-type-def type-id='type-id-5552' size-in-bits='64' id='type-id-5511'/>
+      <pointer-type-def type-id='type-id-5553' size-in-bits='64' id='type-id-5512'/>
+      <pointer-type-def type-id='type-id-5554' size-in-bits='64' id='type-id-5505'/>
+      <pointer-type-def type-id='type-id-5555' size-in-bits='64' id='type-id-5536'/>
+      <pointer-type-def type-id='type-id-5556' size-in-bits='64' id='type-id-5534'/>
+      <pointer-type-def type-id='type-id-5557' size-in-bits='64' id='type-id-5535'/>
+      <pointer-type-def type-id='type-id-5558' size-in-bits='64' id='type-id-5514'/>
+      <pointer-type-def type-id='type-id-5559' size-in-bits='64' id='type-id-5503'/>
+      <pointer-type-def type-id='type-id-5560' size-in-bits='64' id='type-id-5513'/>
+      <pointer-type-def type-id='type-id-5561' size-in-bits='64' id='type-id-5537'/>
+      <pointer-type-def type-id='type-id-5562' size-in-bits='64' id='type-id-5533'/>
+      <pointer-type-def type-id='type-id-5563' size-in-bits='64' id='type-id-5532'/>
+      <function-decl name='input_allocate_device' mangled-name='input_allocate_device' filepath='drivers/input/input.c' line='1783' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_allocate_device'>
+        <return type-id='type-id-5529'/>
+      </function-decl>
+      <function-decl name='input_event' mangled-name='input_event' filepath='drivers/input/input.c' line='428' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_event'>
+        <parameter type-id='type-id-5529' name='dev' filepath='drivers/input/input.c' line='428' column='1'/>
+        <parameter type-id='type-id-5' name='type' filepath='drivers/input/input.c' line='429' column='1'/>
+        <parameter type-id='type-id-5' name='code' filepath='drivers/input/input.c' line='429' column='1'/>
+        <parameter type-id='type-id-17' name='value' filepath='drivers/input/input.c' line='429' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='input_alloc_absinfo' mangled-name='input_alloc_absinfo' filepath='drivers/input/input.c' line='481' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_alloc_absinfo'>
+        <parameter type-id='type-id-5529' name='dev' filepath='drivers/input/input.c' line='481' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='input_set_abs_params' mangled-name='input_set_abs_params' filepath='drivers/input/input.c' line='499' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_set_abs_params'>
+        <parameter type-id='type-id-5529' name='dev' filepath='drivers/input/input.c' line='499' column='1'/>
+        <parameter type-id='type-id-5' name='axis' filepath='drivers/input/input.c' line='499' column='1'/>
+        <parameter type-id='type-id-17' name='min' filepath='drivers/input/input.c' line='500' column='1'/>
+        <parameter type-id='type-id-17' name='max' filepath='drivers/input/input.c' line='500' column='1'/>
+        <parameter type-id='type-id-17' name='fuzz' filepath='drivers/input/input.c' line='500' column='1'/>
+        <parameter type-id='type-id-17' name='flat' filepath='drivers/input/input.c' line='500' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='input_free_device' mangled-name='input_free_device' filepath='drivers/input/input.c' line='1888' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_free_device'>
+        <parameter type-id='type-id-5529' name='dev' filepath='drivers/input/input.c' line='1888' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='input_register_device' mangled-name='input_register_device' filepath='drivers/input/input.c' line='2086' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_register_device'>
+        <parameter type-id='type-id-5529' name='dev' filepath='drivers/input/input.c' line='2086' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='input_unregister_device' mangled-name='input_unregister_device' filepath='drivers/input/input.c' line='2190' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_unregister_device'>
+        <parameter type-id='type-id-5529' name='dev' filepath='drivers/input/input.c' line='2190' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-5547'>
+        <parameter type-id='type-id-5529'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5548'>
+        <parameter type-id='type-id-5529'/>
+        <parameter type-id='type-id-5543'/>
+        <parameter type-id='type-id-482'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5549'>
+        <parameter type-id='type-id-5529'/>
+        <parameter type-id='type-id-5515'/>
+        <parameter type-id='type-id-5515'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5550'>
+        <parameter type-id='type-id-5529'/>
+        <parameter type-id='type-id-83'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5551'>
+        <parameter type-id='type-id-5529'/>
+        <parameter type-id='type-id-5546'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5552'>
+        <parameter type-id='type-id-5529'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5553'>
+        <parameter type-id='type-id-5529'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5554'>
+        <parameter type-id='type-id-5529'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5555'>
+        <parameter type-id='type-id-5530'/>
+        <parameter type-id='type-id-5529'/>
+        <parameter type-id='type-id-5538'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5556'>
+        <parameter type-id='type-id-5506'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-33'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5557'>
+        <parameter type-id='type-id-5530'/>
+        <parameter type-id='type-id-5529'/>
+        <return type-id='type-id-33'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5558'>
+        <parameter type-id='type-id-5499'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5559'>
+        <parameter type-id='type-id-5529'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5560'>
+        <parameter type-id='type-id-5529'/>
+        <parameter type-id='type-id-688'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5561'>
+        <parameter type-id='type-id-5506'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5562'>
+        <parameter type-id='type-id-5506'/>
+        <parameter type-id='type-id-5545'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5563'>
+        <parameter type-id='type-id-5506'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/input/input-mt.c' language='LANG_C89'>
+      <function-decl name='input_mt_init_slots' mangled-name='input_mt_init_slots' filepath='drivers/input/input-mt.c' line='41' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_mt_init_slots'>
+        <parameter type-id='type-id-5529' name='dev' filepath='drivers/input/input-mt.c' line='41' column='1'/>
+        <parameter type-id='type-id-5' name='num_slots' filepath='drivers/input/input-mt.c' line='41' column='1'/>
+        <parameter type-id='type-id-5' name='flags' filepath='drivers/input/input-mt.c' line='42' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/rtc/rtc-lib.c' language='LANG_C89'>
+      <class-decl name='rtc_time' size-in-bits='288' is-struct='yes' visibility='default' filepath='include/uapi/linux/rtc.h' line='21' column='1' id='type-id-5564'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tm_sec' type-id='type-id-17' visibility='default' filepath='include/uapi/linux/rtc.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tm_min' type-id='type-id-17' visibility='default' filepath='include/uapi/linux/rtc.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tm_hour' type-id='type-id-17' visibility='default' filepath='include/uapi/linux/rtc.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='tm_mday' type-id='type-id-17' visibility='default' filepath='include/uapi/linux/rtc.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tm_mon' type-id='type-id-17' visibility='default' filepath='include/uapi/linux/rtc.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tm_year' type-id='type-id-17' visibility='default' filepath='include/uapi/linux/rtc.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tm_wday' type-id='type-id-17' visibility='default' filepath='include/uapi/linux/rtc.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='tm_yday' type-id='type-id-17' visibility='default' filepath='include/uapi/linux/rtc.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tm_isdst' type-id='type-id-17' visibility='default' filepath='include/uapi/linux/rtc.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-5564' size-in-bits='64' id='type-id-5565'/>
+      <function-decl name='rtc_time64_to_tm' mangled-name='rtc_time64_to_tm' filepath='drivers/rtc/rtc-lib.c' line='53' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtc_time64_to_tm'>
+        <parameter type-id='type-id-1341' name='time' filepath='drivers/rtc/rtc-lib.c' line='53' column='1'/>
+        <parameter type-id='type-id-5565' name='tm' filepath='drivers/rtc/rtc-lib.c' line='53' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='rtc_tm_to_time64' mangled-name='rtc_tm_to_time64' filepath='drivers/rtc/rtc-lib.c' line='117' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtc_tm_to_time64'>
+        <parameter type-id='type-id-5565' name='tm' filepath='drivers/rtc/rtc-lib.c' line='117' column='1'/>
+        <return type-id='type-id-1341'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/rtc/class.c' language='LANG_C89'>
+      <class-decl name='nvmem_device' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-5566'/>
+      <class-decl name='rtc_device' size-in-bits='10688' is-struct='yes' visibility='default' filepath='include/linux/rtc.h' line='102' column='1' id='type-id-5567'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='type-id-388' visibility='default' filepath='include/linux/rtc.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='include/linux/rtc.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='id' type-id='type-id-17' visibility='default' filepath='include/linux/rtc.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='ops' type-id='type-id-5568' visibility='default' filepath='include/linux/rtc.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='ops_lock' type-id='type-id-245' visibility='default' filepath='include/linux/rtc.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='char_dev' type-id='type-id-266' visibility='default' filepath='include/linux/rtc.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='include/linux/rtc.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='irq_data' type-id='type-id-16' visibility='default' filepath='include/linux/rtc.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='irq_lock' type-id='type-id-247' visibility='default' filepath='include/linux/rtc.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='irq_queue' type-id='type-id-225' visibility='default' filepath='include/linux/rtc.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='async_queue' type-id='type-id-254' visibility='default' filepath='include/linux/rtc.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='irq_freq' type-id='type-id-17' visibility='default' filepath='include/linux/rtc.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7968'>
+          <var-decl name='max_user_freq' type-id='type-id-17' visibility='default' filepath='include/linux/rtc.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='timerqueue' type-id='type-id-1559' visibility='default' filepath='include/linux/rtc.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='aie_timer' type-id='type-id-5569' visibility='default' filepath='include/linux/rtc.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='uie_rtctimer' type-id='type-id-5569' visibility='default' filepath='include/linux/rtc.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='pie_timer' type-id='type-id-681' visibility='default' filepath='include/linux/rtc.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='pie_enabled' type-id='type-id-17' visibility='default' filepath='include/linux/rtc.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='irqwork' type-id='type-id-255' visibility='default' filepath='include/linux/rtc.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='uie_unsupported' type-id='type-id-17' visibility='default' filepath='include/linux/rtc.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='set_offset_nsec' type-id='type-id-192' visibility='default' filepath='include/linux/rtc.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='registered' type-id='type-id-33' visibility='default' filepath='include/linux/rtc.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='nvmem' type-id='type-id-5570' visibility='default' filepath='include/linux/rtc.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='nvram_old_abi' type-id='type-id-33' visibility='default' filepath='include/linux/rtc.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10304'>
+          <var-decl name='nvram' type-id='type-id-2610' visibility='default' filepath='include/linux/rtc.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10368'>
+          <var-decl name='range_min' type-id='type-id-1341' visibility='default' filepath='include/linux/rtc.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10432'>
+          <var-decl name='range_max' type-id='type-id-5571' visibility='default' filepath='include/linux/rtc.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='start_secs' type-id='type-id-1341' visibility='default' filepath='include/linux/rtc.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='offset_secs' type-id='type-id-1341' visibility='default' filepath='include/linux/rtc.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='set_start_time' type-id='type-id-33' visibility='default' filepath='include/linux/rtc.h' line='150' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rtc_class_ops' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/rtc.h' line='75' column='1' id='type-id-5572'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ioctl' type-id='type-id-5573' visibility='default' filepath='include/linux/rtc.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='read_time' type-id='type-id-5574' visibility='default' filepath='include/linux/rtc.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_time' type-id='type-id-5574' visibility='default' filepath='include/linux/rtc.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='read_alarm' type-id='type-id-5575' visibility='default' filepath='include/linux/rtc.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_alarm' type-id='type-id-5575' visibility='default' filepath='include/linux/rtc.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='proc' type-id='type-id-5576' visibility='default' filepath='include/linux/rtc.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_mmss64' type-id='type-id-5577' visibility='default' filepath='include/linux/rtc.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_mmss' type-id='type-id-5578' visibility='default' filepath='include/linux/rtc.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='read_callback' type-id='type-id-5579' visibility='default' filepath='include/linux/rtc.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='alarm_irq_enable' type-id='type-id-5580' visibility='default' filepath='include/linux/rtc.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='read_offset' type-id='type-id-5581' visibility='default' filepath='include/linux/rtc.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='set_offset' type-id='type-id-5582' visibility='default' filepath='include/linux/rtc.h' line='87' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rtc_wkalrm' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/rtc.h' line='37' column='1' id='type-id-5583'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enabled' type-id='type-id-216' visibility='default' filepath='include/uapi/linux/rtc.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='pending' type-id='type-id-216' visibility='default' filepath='include/uapi/linux/rtc.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='time' type-id='type-id-5564' visibility='default' filepath='include/uapi/linux/rtc.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rtc_timer' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/rtc.h' line='90' column='1' id='type-id-5569'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='type-id-1552' visibility='default' filepath='include/linux/rtc.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='period' type-id='type-id-682' visibility='default' filepath='include/linux/rtc.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='func' type-id='type-id-517' visibility='default' filepath='include/linux/rtc.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='private_data' type-id='type-id-15' visibility='default' filepath='include/linux/rtc.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='enabled' type-id='type-id-17' visibility='default' filepath='include/linux/rtc.h' line='95' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='timeu64_t' type-id='type-id-100' filepath='include/linux/time64.h' line='8' column='1' id='type-id-5571'/>
+      <qualified-type-def type-id='type-id-5572' const='yes' id='type-id-5584'/>
+      <pointer-type-def type-id='type-id-5584' size-in-bits='64' id='type-id-5568'/>
+      <pointer-type-def type-id='type-id-5585' size-in-bits='64' id='type-id-5579'/>
+      <pointer-type-def type-id='type-id-5586' size-in-bits='64' id='type-id-5582'/>
+      <pointer-type-def type-id='type-id-5587' size-in-bits='64' id='type-id-5581'/>
+      <pointer-type-def type-id='type-id-5588' size-in-bits='64' id='type-id-5574'/>
+      <pointer-type-def type-id='type-id-5589' size-in-bits='64' id='type-id-5575'/>
+      <pointer-type-def type-id='type-id-5590' size-in-bits='64' id='type-id-5576'/>
+      <pointer-type-def type-id='type-id-5591' size-in-bits='64' id='type-id-5577'/>
+      <pointer-type-def type-id='type-id-5592' size-in-bits='64' id='type-id-5580'/>
+      <pointer-type-def type-id='type-id-5593' size-in-bits='64' id='type-id-5573'/>
+      <pointer-type-def type-id='type-id-5594' size-in-bits='64' id='type-id-5578'/>
+      <pointer-type-def type-id='type-id-192' size-in-bits='64' id='type-id-5595'/>
+      <pointer-type-def type-id='type-id-5566' size-in-bits='64' id='type-id-5570'/>
+      <pointer-type-def type-id='type-id-5567' size-in-bits='64' id='type-id-5596'/>
+      <pointer-type-def type-id='type-id-5583' size-in-bits='64' id='type-id-5597'/>
+      <function-decl name='devm_rtc_allocate_device' mangled-name='devm_rtc_allocate_device' filepath='drivers/rtc/class.c' line='460' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_rtc_allocate_device'>
+        <parameter type-id='type-id-240' name='dev' filepath='drivers/rtc/class.c' line='460' column='1'/>
+        <return type-id='type-id-5596'/>
+      </function-decl>
+      <function-decl name='__rtc_register_device' mangled-name='__rtc_register_device' filepath='drivers/rtc/class.c' line='498' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__rtc_register_device'>
+        <parameter type-id='type-id-260' name='owner' filepath='drivers/rtc/class.c' line='498' column='1'/>
+        <parameter type-id='type-id-5596' name='rtc' filepath='drivers/rtc/class.c' line='498' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-5585'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5586'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-192'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5587'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-5595'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5588'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-5565'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5589'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-5597'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5590'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-88'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5591'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-1341'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5592'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5593'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5594'>
+        <parameter type-id='type-id-240'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/rtc/interface.c' language='LANG_C89'>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/uio.h' line='35' column='1' id='type-id-5598'>
+        <data-member access='private'>
+          <var-decl name='iov' type-id='type-id-2117' visibility='default' filepath='include/linux/uio.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='kvec' type-id='type-id-2118' visibility='default' filepath='include/linux/uio.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='bvec' type-id='type-id-2119' visibility='default' filepath='include/linux/uio.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='pipe' type-id='type-id-3454' visibility='default' filepath='include/linux/uio.h' line='39' column='1'/>
+        </data-member>
+      </union-decl>
+      <function-decl name='rtc_update_irq' mangled-name='rtc_update_irq' filepath='drivers/rtc/interface.c' line='688' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtc_update_irq'>
+        <parameter type-id='type-id-5596' name='rtc' filepath='drivers/rtc/interface.c' line='688' column='1'/>
+        <parameter type-id='type-id-16' name='num' filepath='drivers/rtc/interface.c' line='689' column='1'/>
+        <parameter type-id='type-id-16' name='events' filepath='drivers/rtc/interface.c' line='689' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/cpufreq/cpufreq.c' language='LANG_C89'>
+      <class-decl name='cpufreq_stats' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-5599'/>
+      <class-decl name='cpufreq_driver' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/cpufreq.h' line='266' column='1' id='type-id-5600'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-43' visibility='default' filepath='include/linux/cpufreq.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='type-id-214' visibility='default' filepath='include/linux/cpufreq.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='driver_data' type-id='type-id-15' visibility='default' filepath='include/linux/cpufreq.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='init' type-id='type-id-5601' visibility='default' filepath='include/linux/cpufreq.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='verify' type-id='type-id-5601' visibility='default' filepath='include/linux/cpufreq.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='setpolicy' type-id='type-id-5601' visibility='default' filepath='include/linux/cpufreq.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='target' type-id='type-id-5602' visibility='default' filepath='include/linux/cpufreq.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='target_index' type-id='type-id-5603' visibility='default' filepath='include/linux/cpufreq.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='fast_switch' type-id='type-id-5604' visibility='default' filepath='include/linux/cpufreq.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='resolve_freq' type-id='type-id-5604' visibility='default' filepath='include/linux/cpufreq.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='get_intermediate' type-id='type-id-5604' visibility='default' filepath='include/linux/cpufreq.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='target_intermediate' type-id='type-id-5603' visibility='default' filepath='include/linux/cpufreq.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='get' type-id='type-id-4015' visibility='default' filepath='include/linux/cpufreq.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='bios_limit' type-id='type-id-5605' visibility='default' filepath='include/linux/cpufreq.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='exit' type-id='type-id-5601' visibility='default' filepath='include/linux/cpufreq.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='stop_cpu' type-id='type-id-5606' visibility='default' filepath='include/linux/cpufreq.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='suspend' type-id='type-id-5601' visibility='default' filepath='include/linux/cpufreq.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='resume' type-id='type-id-5601' visibility='default' filepath='include/linux/cpufreq.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='ready' type-id='type-id-5606' visibility='default' filepath='include/linux/cpufreq.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='attr' type-id='type-id-5607' visibility='default' filepath='include/linux/cpufreq.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='boost_enabled' type-id='type-id-33' visibility='default' filepath='include/linux/cpufreq.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='set_boost' type-id='type-id-2566' visibility='default' filepath='include/linux/cpufreq.h' line='337' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpufreq_policy' size-in-bits='3200' is-struct='yes' visibility='default' filepath='include/linux/cpufreq.h' line='65' column='1' id='type-id-5608'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cpus' type-id='type-id-38' visibility='default' filepath='include/linux/cpufreq.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='related_cpus' type-id='type-id-38' visibility='default' filepath='include/linux/cpufreq.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='real_cpus' type-id='type-id-38' visibility='default' filepath='include/linux/cpufreq.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='shared_type' type-id='type-id-5' visibility='default' filepath='include/linux/cpufreq.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='cpu' type-id='type-id-5' visibility='default' filepath='include/linux/cpufreq.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='clk' type-id='type-id-4190' visibility='default' filepath='include/linux/cpufreq.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cpuinfo' type-id='type-id-5609' visibility='default' filepath='include/linux/cpufreq.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='min' type-id='type-id-5' visibility='default' filepath='include/linux/cpufreq.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='max' type-id='type-id-5' visibility='default' filepath='include/linux/cpufreq.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='cur' type-id='type-id-5' visibility='default' filepath='include/linux/cpufreq.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='restore_freq' type-id='type-id-5' visibility='default' filepath='include/linux/cpufreq.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='suspend_freq' type-id='type-id-5' visibility='default' filepath='include/linux/cpufreq.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='policy' type-id='type-id-5' visibility='default' filepath='include/linux/cpufreq.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='last_policy' type-id='type-id-5' visibility='default' filepath='include/linux/cpufreq.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='governor' type-id='type-id-5610' visibility='default' filepath='include/linux/cpufreq.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='governor_data' type-id='type-id-15' visibility='default' filepath='include/linux/cpufreq.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='last_governor' type-id='type-id-43' visibility='default' filepath='include/linux/cpufreq.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='update' type-id='type-id-255' visibility='default' filepath='include/linux/cpufreq.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='user_policy' type-id='type-id-5611' visibility='default' filepath='include/linux/cpufreq.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='freq_table' type-id='type-id-5612' visibility='default' filepath='include/linux/cpufreq.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='freq_table_sorted' type-id='type-id-5613' visibility='default' filepath='include/linux/cpufreq.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='policy_list' type-id='type-id-20' visibility='default' filepath='include/linux/cpufreq.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='kobj' type-id='type-id-267' visibility='default' filepath='include/linux/cpufreq.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='kobj_unregister' type-id='type-id-1608' visibility='default' filepath='include/linux/cpufreq.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='rwsem' type-id='type-id-246' visibility='default' filepath='include/linux/cpufreq.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='fast_switch_possible' type-id='type-id-33' visibility='default' filepath='include/linux/cpufreq.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2568'>
+          <var-decl name='fast_switch_enabled' type-id='type-id-33' visibility='default' filepath='include/linux/cpufreq.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2592'>
+          <var-decl name='transition_delay_us' type-id='type-id-5' visibility='default' filepath='include/linux/cpufreq.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='dvfs_possible_from_any_cpu' type-id='type-id-33' visibility='default' filepath='include/linux/cpufreq.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2656'>
+          <var-decl name='cached_target_freq' type-id='type-id-5' visibility='default' filepath='include/linux/cpufreq.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='cached_resolved_idx' type-id='type-id-17' visibility='default' filepath='include/linux/cpufreq.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2720'>
+          <var-decl name='transition_ongoing' type-id='type-id-33' visibility='default' filepath='include/linux/cpufreq.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='transition_lock' type-id='type-id-247' visibility='default' filepath='include/linux/cpufreq.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='transition_wait' type-id='type-id-225' visibility='default' filepath='include/linux/cpufreq.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='transition_task' type-id='type-id-431' visibility='default' filepath='include/linux/cpufreq.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='stats' type-id='type-id-5614' visibility='default' filepath='include/linux/cpufreq.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='driver_data' type-id='type-id-15' visibility='default' filepath='include/linux/cpufreq.h' line='153' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpufreq_cpuinfo' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/cpufreq.h' line='52' column='1' id='type-id-5609'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max_freq' type-id='type-id-5' visibility='default' filepath='include/linux/cpufreq.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='min_freq' type-id='type-id-5' visibility='default' filepath='include/linux/cpufreq.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='transition_latency' type-id='type-id-5' visibility='default' filepath='include/linux/cpufreq.h' line='57' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpufreq_governor' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/cpufreq.h' line='500' column='1' id='type-id-5615'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-43' visibility='default' filepath='include/linux/cpufreq.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init' type-id='type-id-5601' visibility='default' filepath='include/linux/cpufreq.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='exit' type-id='type-id-5606' visibility='default' filepath='include/linux/cpufreq.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='start' type-id='type-id-5601' visibility='default' filepath='include/linux/cpufreq.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='stop' type-id='type-id-5606' visibility='default' filepath='include/linux/cpufreq.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='limits' type-id='type-id-5606' visibility='default' filepath='include/linux/cpufreq.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='show_setspeed' type-id='type-id-5616' visibility='default' filepath='include/linux/cpufreq.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='store_setspeed' type-id='type-id-5603' visibility='default' filepath='include/linux/cpufreq.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='dynamic_switching' type-id='type-id-33' visibility='default' filepath='include/linux/cpufreq.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='governor_list' type-id='type-id-20' visibility='default' filepath='include/linux/cpufreq.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='include/linux/cpufreq.h' line='514' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpufreq_user_policy' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/cpufreq.h' line='60' column='1' id='type-id-5611'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min' type-id='type-id-5' visibility='default' filepath='include/linux/cpufreq.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max' type-id='type-id-5' visibility='default' filepath='include/linux/cpufreq.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpufreq_frequency_table' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/cpufreq.h' line='576' column='1' id='type-id-5617'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='type-id-5' visibility='default' filepath='include/linux/cpufreq.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='driver_data' type-id='type-id-5' visibility='default' filepath='include/linux/cpufreq.h' line='578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='frequency' type-id='type-id-5' visibility='default' filepath='include/linux/cpufreq.h' line='579' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='cpufreq_table_sorting' filepath='include/linux/cpufreq.h' line='39' column='1' id='type-id-5613'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='CPUFREQ_TABLE_UNSORTED' value='0'/>
+        <enumerator name='CPUFREQ_TABLE_SORTED_ASCENDING' value='1'/>
+        <enumerator name='CPUFREQ_TABLE_SORTED_DESCENDING' value='2'/>
+      </enum-decl>
+      <class-decl name='freq_attr' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/cpufreq.h' line='235' column='1' id='type-id-5618'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attr' type-id='type-id-619' visibility='default' filepath='include/linux/cpufreq.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='show' type-id='type-id-5616' visibility='default' filepath='include/linux/cpufreq.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='store' type-id='type-id-5619' visibility='default' filepath='include/linux/cpufreq.h' line='238' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-5600' size-in-bits='64' id='type-id-5620'/>
+      <pointer-type-def type-id='type-id-5617' size-in-bits='64' id='type-id-5612'/>
+      <pointer-type-def type-id='type-id-5615' size-in-bits='64' id='type-id-5610'/>
+      <pointer-type-def type-id='type-id-5608' size-in-bits='64' id='type-id-5621'/>
+      <pointer-type-def type-id='type-id-5599' size-in-bits='64' id='type-id-5614'/>
+      <pointer-type-def type-id='type-id-5618' size-in-bits='64' id='type-id-5622'/>
+      <pointer-type-def type-id='type-id-5622' size-in-bits='64' id='type-id-5607'/>
+      <pointer-type-def type-id='type-id-5623' size-in-bits='64' id='type-id-5601'/>
+      <pointer-type-def type-id='type-id-5624' size-in-bits='64' id='type-id-5603'/>
+      <pointer-type-def type-id='type-id-5625' size-in-bits='64' id='type-id-5602'/>
+      <pointer-type-def type-id='type-id-5626' size-in-bits='64' id='type-id-5605'/>
+      <pointer-type-def type-id='type-id-5627' size-in-bits='64' id='type-id-5616'/>
+      <pointer-type-def type-id='type-id-5628' size-in-bits='64' id='type-id-5619'/>
+      <pointer-type-def type-id='type-id-5629' size-in-bits='64' id='type-id-5604'/>
+      <pointer-type-def type-id='type-id-5630' size-in-bits='64' id='type-id-5606'/>
+      <function-decl name='cpufreq_register_driver' mangled-name='cpufreq_register_driver' filepath='drivers/cpufreq/cpufreq.c' line='2493' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_register_driver'>
+        <parameter type-id='type-id-5620' name='driver_data' filepath='drivers/cpufreq/cpufreq.c' line='2493' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='cpufreq_unregister_driver' mangled-name='cpufreq_unregister_driver' filepath='drivers/cpufreq/cpufreq.c' line='2586' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_unregister_driver'>
+        <parameter type-id='type-id-5620' name='driver' filepath='drivers/cpufreq/cpufreq.c' line='2586' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-5623'>
+        <parameter type-id='type-id-5621'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5624'>
+        <parameter type-id='type-id-5621'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5625'>
+        <parameter type-id='type-id-5621'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5626'>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-482'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5627'>
+        <parameter type-id='type-id-5621'/>
+        <parameter type-id='type-id-2'/>
+        <return type-id='type-id-86'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5628'>
+        <parameter type-id='type-id-5621'/>
+        <parameter type-id='type-id-4'/>
+        <parameter type-id='type-id-84'/>
+        <return type-id='type-id-86'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5629'>
+        <parameter type-id='type-id-5621'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-5'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5630'>
+        <parameter type-id='type-id-5621'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/leds/led-class.c' language='LANG_C89'>
+      <class-decl name='led_classdev' size-in-bits='2624' is-struct='yes' visibility='default' filepath='include/linux/leds.h' line='36' column='1' id='type-id-5631'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/leds.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='brightness' type-id='type-id-5632' visibility='default' filepath='include/linux/leds.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_brightness' type-id='type-id-5632' visibility='default' filepath='include/linux/leds.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='type-id-17' visibility='default' filepath='include/linux/leds.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='work_flags' type-id='type-id-16' visibility='default' filepath='include/linux/leds.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='brightness_set' type-id='type-id-5633' visibility='default' filepath='include/linux/leds.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='brightness_set_blocking' type-id='type-id-5634' visibility='default' filepath='include/linux/leds.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='brightness_get' type-id='type-id-5635' visibility='default' filepath='include/linux/leds.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='blink_set' type-id='type-id-5636' visibility='default' filepath='include/linux/leds.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dev' type-id='type-id-240' visibility='default' filepath='include/linux/leds.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='groups' type-id='type-id-665' visibility='default' filepath='include/linux/leds.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='node' type-id='type-id-20' visibility='default' filepath='include/linux/leds.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='default_trigger' type-id='type-id-4' visibility='default' filepath='include/linux/leds.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='blink_delay_on' type-id='type-id-16' visibility='default' filepath='include/linux/leds.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='blink_delay_off' type-id='type-id-16' visibility='default' filepath='include/linux/leds.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='blink_timer' type-id='type-id-417' visibility='default' filepath='include/linux/leds.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='blink_brightness' type-id='type-id-17' visibility='default' filepath='include/linux/leds.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='new_blink_brightness' type-id='type-id-17' visibility='default' filepath='include/linux/leds.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='flash_resume' type-id='type-id-5637' visibility='default' filepath='include/linux/leds.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='set_brightness_work' type-id='type-id-255' visibility='default' filepath='include/linux/leds.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='delayed_set_value' type-id='type-id-17' visibility='default' filepath='include/linux/leds.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='trigger_lock' type-id='type-id-246' visibility='default' filepath='include/linux/leds.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='trigger' type-id='type-id-5638' visibility='default' filepath='include/linux/leds.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='trig_list' type-id='type-id-20' visibility='default' filepath='include/linux/leds.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='trigger_data' type-id='type-id-15' visibility='default' filepath='include/linux/leds.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='activated' type-id='type-id-33' visibility='default' filepath='include/linux/leds.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='led_access' type-id='type-id-245' visibility='default' filepath='include/linux/leds.h' line='123' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='led_brightness' filepath='include/linux/leds.h' line='29' column='1' id='type-id-5632'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='LED_OFF' value='0'/>
+        <enumerator name='LED_ON' value='1'/>
+        <enumerator name='LED_HALF' value='127'/>
+        <enumerator name='LED_FULL' value='255'/>
+      </enum-decl>
+      <class-decl name='led_trigger' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/leds.h' line='253' column='1' id='type-id-5639'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='type-id-4' visibility='default' filepath='include/linux/leds.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='activate' type-id='type-id-5640' visibility='default' filepath='include/linux/leds.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='deactivate' type-id='type-id-5637' visibility='default' filepath='include/linux/leds.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='leddev_list_lock' type-id='type-id-885' visibility='default' filepath='include/linux/leds.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='led_cdevs' type-id='type-id-20' visibility='default' filepath='include/linux/leds.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='next_trig' type-id='type-id-20' visibility='default' filepath='include/linux/leds.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='groups' type-id='type-id-665' visibility='default' filepath='include/linux/leds.h' line='266' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-5641' size-in-bits='64' id='type-id-5635'/>
+      <pointer-type-def type-id='type-id-5642' size-in-bits='64' id='type-id-5640'/>
+      <pointer-type-def type-id='type-id-5643' size-in-bits='64' id='type-id-5634'/>
+      <pointer-type-def type-id='type-id-5644' size-in-bits='64' id='type-id-5636'/>
+      <pointer-type-def type-id='type-id-5631' size-in-bits='64' id='type-id-5645'/>
+      <pointer-type-def type-id='type-id-5639' size-in-bits='64' id='type-id-5638'/>
+      <pointer-type-def type-id='type-id-5646' size-in-bits='64' id='type-id-5637'/>
+      <pointer-type-def type-id='type-id-5647' size-in-bits='64' id='type-id-5633'/>
+      <function-decl name='of_led_classdev_register' mangled-name='of_led_classdev_register' filepath='drivers/leds/led-class.c' line='253' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_led_classdev_register'>
+        <parameter type-id='type-id-240' name='parent' filepath='drivers/leds/led-class.c' line='253' column='1'/>
+        <parameter type-id='type-id-2024' name='np' filepath='drivers/leds/led-class.c' line='253' column='1'/>
+        <parameter type-id='type-id-5645' name='led_cdev' filepath='drivers/leds/led-class.c' line='254' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='led_classdev_unregister' mangled-name='led_classdev_unregister' filepath='drivers/leds/led-class.c' line='324' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='led_classdev_unregister'>
+        <parameter type-id='type-id-5645' name='led_cdev' filepath='drivers/leds/led-class.c' line='324' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-5641'>
+        <parameter type-id='type-id-5645'/>
+        <return type-id='type-id-5632'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5642'>
+        <parameter type-id='type-id-5645'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5643'>
+        <parameter type-id='type-id-5645'/>
+        <parameter type-id='type-id-5632'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5644'>
+        <parameter type-id='type-id-5645'/>
+        <parameter type-id='type-id-45'/>
+        <parameter type-id='type-id-45'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5646'>
+        <parameter type-id='type-id-5645'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5647'>
+        <parameter type-id='type-id-5645'/>
+        <parameter type-id='type-id-5632'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/leds/led-triggers.c' language='LANG_C89'>
+      <pointer-type-def type-id='type-id-5638' size-in-bits='64' id='type-id-5648'/>
+      <function-decl name='led_trigger_event' mangled-name='led_trigger_event' filepath='drivers/leds/led-triggers.c' line='316' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='led_trigger_event'>
+        <parameter type-id='type-id-5638' name='trig' filepath='drivers/leds/led-triggers.c' line='316' column='1'/>
+        <parameter type-id='type-id-5632' name='brightness' filepath='drivers/leds/led-triggers.c' line='317' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='led_trigger_register_simple' mangled-name='led_trigger_register_simple' filepath='drivers/leds/led-triggers.c' line='370' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='led_trigger_register_simple'>
+        <parameter type-id='type-id-4' name='name' filepath='drivers/leds/led-triggers.c' line='370' column='1'/>
+        <parameter type-id='type-id-5648' name='tp' filepath='drivers/leds/led-triggers.c' line='370' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='led_trigger_unregister_simple' mangled-name='led_trigger_unregister_simple' filepath='drivers/leds/led-triggers.c' line='394' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='led_trigger_unregister_simple'>
+        <parameter type-id='type-id-5638' name='trig' filepath='drivers/leds/led-triggers.c' line='394' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/of/property.c' language='LANG_C89'>
+      <function-decl name='of_property_read_variable_u32_array' mangled-name='of_property_read_variable_u32_array' filepath='drivers/of/property.c' line='277' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_property_read_variable_u32_array'>
+        <parameter type-id='type-id-3993' name='np' filepath='drivers/of/property.c' line='277' column='1'/>
+        <parameter type-id='type-id-4' name='propname' filepath='drivers/of/property.c' line='278' column='1'/>
+        <parameter type-id='type-id-1567' name='out_values' filepath='drivers/of/property.c' line='278' column='1'/>
+        <parameter type-id='type-id-84' name='sz_min' filepath='drivers/of/property.c' line='279' column='1'/>
+        <parameter type-id='type-id-84' name='sz_max' filepath='drivers/of/property.c' line='279' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='of_property_read_u64' mangled-name='of_property_read_u64' filepath='drivers/of/property.c' line='316' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_property_read_u64'>
+        <parameter type-id='type-id-3993' name='np' filepath='drivers/of/property.c' line='316' column='1'/>
+        <parameter type-id='type-id-4' name='propname' filepath='drivers/of/property.c' line='316' column='1'/>
+        <parameter type-id='type-id-1510' name='out_value' filepath='drivers/of/property.c' line='317' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/of/address.c' language='LANG_C89'>
+      <function-decl name='of_address_to_resource' mangled-name='of_address_to_resource' filepath='drivers/of/address.c' line='788' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_address_to_resource'>
+        <parameter type-id='type-id-3543' name='dev' filepath='drivers/of/address.c' line='788' column='1'/>
+        <parameter type-id='type-id-17' name='index' filepath='drivers/of/address.c' line='788' column='1'/>
+        <parameter type-id='type-id-2156' name='r' filepath='drivers/of/address.c' line='789' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/of/irq.c' language='LANG_C89'>
+      <function-decl name='of_irq_get' mangled-name='of_irq_get' filepath='drivers/of/irq.c' line='388' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_irq_get'>
+        <parameter type-id='type-id-3543' name='dev' filepath='drivers/of/irq.c' line='388' column='1'/>
+        <parameter type-id='type-id-17' name='index' filepath='drivers/of/irq.c' line='388' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/socket.c' language='LANG_C89'>
+      <class-decl name='bpf_prog_aux' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-5649'/>
+      <class-decl name='lwtunnel_state' size-in-bits='384' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-5650'/>
+      <class-decl name='raw_hashinfo' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-5651'/>
+      <class-decl name='sock_reuseport' size-in-bits='320' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-5652'/>
+      <class-decl name='udp_table' size-in-bits='192' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-5653'/>
+      <class-decl name='xfrm_policy' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-5654'/>
+      <class-decl name='xfrm_state' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-5655'/>
+      <array-type-def dimensions='1' type-id='type-id-5656' size-in-bits='128' id='type-id-5657'>
+        <subrange length='2' type-id='type-id-9' id='type-id-128'/>
+
+      </array-type-def>
+      <class-decl name='msghdr' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/socket.h' line='48' column='1' id='type-id-5658'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='msg_name' type-id='type-id-15' visibility='default' filepath='include/linux/socket.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='msg_namelen' type-id='type-id-17' visibility='default' filepath='include/linux/socket.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='msg_iter' type-id='type-id-2113' visibility='default' filepath='include/linux/socket.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='msg_control' type-id='type-id-15' visibility='default' filepath='include/linux/socket.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='msg_controllen' type-id='type-id-887' visibility='default' filepath='include/linux/socket.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='msg_flags' type-id='type-id-5' visibility='default' filepath='include/linux/socket.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='msg_iocb' type-id='type-id-3011' visibility='default' filepath='include/linux/socket.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='1064' column='1' id='type-id-5659'>
+        <data-member access='private'>
+          <var-decl name='nfs_fl' type-id='type-id-2595' visibility='default' filepath='include/linux/fs.h' line='1065' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='nfs4_fl' type-id='type-id-2597' visibility='default' filepath='include/linux/fs.h' line='1066' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='afs' type-id='type-id-2599' visibility='default' filepath='include/linux/fs.h' line='1070' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='sock' size-in-bits='5696' is-struct='yes' visibility='default' filepath='include/net/sock.h' line='327' column='1' id='type-id-5660'>
+        <member-type access='public'>
+          <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='413' column='1' id='type-id-5661'>
+            <data-member access='private'>
+              <var-decl name='sk_send_head' type-id='type-id-1768' visibility='default' filepath='include/net/sock.h' line='414' column='1'/>
+            </data-member>
+            <data-member access='private'>
+              <var-decl name='tcp_rtx_queue' type-id='type-id-416' visibility='default' filepath='include/net/sock.h' line='415' column='1'/>
+            </data-member>
+          </union-decl>
+        </member-type>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__sk_common' type-id='type-id-5662' visibility='default' filepath='include/net/sock.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='sk_lock' type-id='type-id-5663' visibility='default' filepath='include/net/sock.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='sk_drops' type-id='type-id-26' visibility='default' filepath='include/net/sock.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='sk_rcvlowat' type-id='type-id-17' visibility='default' filepath='include/net/sock.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='sk_error_queue' type-id='type-id-1661' visibility='default' filepath='include/net/sock.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='sk_receive_queue' type-id='type-id-1661' visibility='default' filepath='include/net/sock.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='sk_backlog' type-id='type-id-5664' visibility='default' filepath='include/net/sock.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='sk_forward_alloc' type-id='type-id-17' visibility='default' filepath='include/net/sock.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='sk_ll_usec' type-id='type-id-5' visibility='default' filepath='include/net/sock.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='sk_napi_id' type-id='type-id-5' visibility='default' filepath='include/net/sock.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2016'>
+          <var-decl name='sk_rcvbuf' type-id='type-id-17' visibility='default' filepath='include/net/sock.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='sk_filter' type-id='type-id-5665' visibility='default' filepath='include/net/sock.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='' type-id='type-id-5666' visibility='default' filepath='include/net/sock.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='sk_policy' type-id='type-id-5657' visibility='default' filepath='include/net/sock.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='sk_rx_dst' type-id='type-id-5667' visibility='default' filepath='include/net/sock.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='sk_dst_cache' type-id='type-id-5667' visibility='default' filepath='include/net/sock.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='sk_omem_alloc' type-id='type-id-26' visibility='default' filepath='include/net/sock.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2464'>
+          <var-decl name='sk_sndbuf' type-id='type-id-17' visibility='default' filepath='include/net/sock.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='sk_wmem_queued' type-id='type-id-17' visibility='default' filepath='include/net/sock.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2528'>
+          <var-decl name='sk_wmem_alloc' type-id='type-id-421' visibility='default' filepath='include/net/sock.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='sk_tsq_flags' type-id='type-id-16' visibility='default' filepath='include/net/sock.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='sk_write_queue' type-id='type-id-1661' visibility='default' filepath='include/net/sock.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='sk_peek_off' type-id='type-id-653' visibility='default' filepath='include/net/sock.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2912'>
+          <var-decl name='sk_write_pending' type-id='type-id-17' visibility='default' filepath='include/net/sock.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='sk_dst_pending_confirm' type-id='type-id-511' visibility='default' filepath='include/net/sock.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2976'>
+          <var-decl name='sk_pacing_status' type-id='type-id-7' visibility='default' filepath='include/net/sock.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='sk_sndtimeo' type-id='type-id-192' visibility='default' filepath='include/net/sock.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='sk_timer' type-id='type-id-417' visibility='default' filepath='include/net/sock.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='sk_priority' type-id='type-id-511' visibility='default' filepath='include/net/sock.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3424'>
+          <var-decl name='sk_mark' type-id='type-id-511' visibility='default' filepath='include/net/sock.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='sk_pacing_rate' type-id='type-id-7' visibility='default' filepath='include/net/sock.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3488'>
+          <var-decl name='sk_max_pacing_rate' type-id='type-id-7' visibility='default' filepath='include/net/sock.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='sk_frag' type-id='type-id-1536' visibility='default' filepath='include/net/sock.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='sk_route_caps' type-id='type-id-1668' visibility='default' filepath='include/net/sock.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='sk_route_nocaps' type-id='type-id-1668' visibility='default' filepath='include/net/sock.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='sk_route_forced_caps' type-id='type-id-1668' visibility='default' filepath='include/net/sock.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='sk_gso_type' type-id='type-id-17' visibility='default' filepath='include/net/sock.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3872'>
+          <var-decl name='sk_gso_max_size' type-id='type-id-5' visibility='default' filepath='include/net/sock.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='sk_allocation' type-id='type-id-485' visibility='default' filepath='include/net/sock.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3936'>
+          <var-decl name='sk_txhash' type-id='type-id-511' visibility='default' filepath='include/net/sock.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='__sk_flags_offset' type-id='type-id-4073' visibility='default' filepath='include/net/sock.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='sk_padding' type-id='type-id-5' visibility='default' filepath='include/net/sock.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='sk_kern_sock' type-id='type-id-5' visibility='default' filepath='include/net/sock.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='sk_no_check_tx' type-id='type-id-5' visibility='default' filepath='include/net/sock.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='sk_no_check_rx' type-id='type-id-5' visibility='default' filepath='include/net/sock.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='sk_userlocks' type-id='type-id-5' visibility='default' filepath='include/net/sock.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='sk_protocol' type-id='type-id-5' visibility='default' filepath='include/net/sock.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='sk_type' type-id='type-id-5' visibility='default' filepath='include/net/sock.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4000'>
+          <var-decl name='sk_gso_max_segs' type-id='type-id-688' visibility='default' filepath='include/net/sock.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4016'>
+          <var-decl name='sk_pacing_shift' type-id='type-id-214' visibility='default' filepath='include/net/sock.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='sk_lingertime' type-id='type-id-16' visibility='default' filepath='include/net/sock.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='sk_prot_creator' type-id='type-id-5668' visibility='default' filepath='include/net/sock.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='sk_callback_lock' type-id='type-id-885' visibility='default' filepath='include/net/sock.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='sk_err' type-id='type-id-17' visibility='default' filepath='include/net/sock.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4256'>
+          <var-decl name='sk_err_soft' type-id='type-id-17' visibility='default' filepath='include/net/sock.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='sk_ack_backlog' type-id='type-id-7' visibility='default' filepath='include/net/sock.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4320'>
+          <var-decl name='sk_max_ack_backlog' type-id='type-id-7' visibility='default' filepath='include/net/sock.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='sk_uid' type-id='type-id-42' visibility='default' filepath='include/net/sock.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='sk_peer_pid' type-id='type-id-251' visibility='default' filepath='include/net/sock.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='sk_peer_cred' type-id='type-id-1279' visibility='default' filepath='include/net/sock.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='sk_rcvtimeo' type-id='type-id-192' visibility='default' filepath='include/net/sock.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='sk_stamp' type-id='type-id-682' visibility='default' filepath='include/net/sock.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='sk_tsflags' type-id='type-id-688' visibility='default' filepath='include/net/sock.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4688'>
+          <var-decl name='sk_shutdown' type-id='type-id-214' visibility='default' filepath='include/net/sock.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4704'>
+          <var-decl name='sk_tskey' type-id='type-id-7' visibility='default' filepath='include/net/sock.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='sk_zckey' type-id='type-id-26' visibility='default' filepath='include/net/sock.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4768'>
+          <var-decl name='sk_clockid' type-id='type-id-214' visibility='default' filepath='include/net/sock.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='sk_txtime_deadline_mode' type-id='type-id-214' visibility='default' filepath='include/net/sock.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='sk_txtime_report_errors' type-id='type-id-214' visibility='default' filepath='include/net/sock.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4776'>
+          <var-decl name='sk_txtime_unused' type-id='type-id-214' visibility='default' filepath='include/net/sock.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='sk_socket' type-id='type-id-5669' visibility='default' filepath='include/net/sock.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='sk_user_data' type-id='type-id-15' visibility='default' filepath='include/net/sock.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='sk_security' type-id='type-id-15' visibility='default' filepath='include/net/sock.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='sk_cgrp_data' type-id='type-id-5670' visibility='default' filepath='include/net/sock.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='sk_memcg' type-id='type-id-447' visibility='default' filepath='include/net/sock.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='sk_state_change' type-id='type-id-5671' visibility='default' filepath='include/net/sock.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='sk_data_ready' type-id='type-id-5671' visibility='default' filepath='include/net/sock.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='sk_write_space' type-id='type-id-5671' visibility='default' filepath='include/net/sock.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='sk_error_report' type-id='type-id-5671' visibility='default' filepath='include/net/sock.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='sk_backlog_rcv' type-id='type-id-5672' visibility='default' filepath='include/net/sock.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='sk_destruct' type-id='type-id-5671' visibility='default' filepath='include/net/sock.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='sk_reuseport_cb' type-id='type-id-5673' visibility='default' filepath='include/net/sock.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='sk_rcu' type-id='type-id-385' visibility='default' filepath='include/net/sock.h' line='511' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sock_common' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/net/sock.h' line='152' column='1' id='type-id-5662'>
+
+          <member-type access='public'>
+            <union-decl name='__anonymous_union__' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='163' column='1' id='type-id-5674'>
+              <data-member access='private'>
+                <var-decl name='skc_hash' type-id='type-id-5' visibility='default' filepath='include/net/sock.h' line='164' column='1'/>
+              </data-member>
+              <data-member access='private'>
+                <var-decl name='skc_u16hashes' type-id='type-id-4447' visibility='default' filepath='include/net/sock.h' line='165' column='1'/>
+              </data-member>
+            </union-decl>
+          </member-type>
+
+          <member-type access='public'>
+            <union-decl name='__anonymous_union__1' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='168' column='1' id='type-id-5675'>
+              <data-member access='private'>
+                <var-decl name='skc_portpair' type-id='type-id-5676' visibility='default' filepath='include/net/sock.h' line='169' column='1'/>
+              </data-member>
+              <data-member access='private'>
+                <var-decl name='' type-id='type-id-5677' visibility='default' filepath='include/net/sock.h' line='170' column='1'/>
+              </data-member>
+            </union-decl>
+          </member-type>
+
+          <member-type access='public'>
+            <union-decl name='__anonymous_union__2' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='183' column='1' id='type-id-5678'>
+              <data-member access='private'>
+                <var-decl name='skc_bind_node' type-id='type-id-520' visibility='default' filepath='include/net/sock.h' line='184' column='1'/>
+              </data-member>
+              <data-member access='private'>
+                <var-decl name='skc_portaddr_node' type-id='type-id-520' visibility='default' filepath='include/net/sock.h' line='185' column='1'/>
+              </data-member>
+            </union-decl>
+          </member-type>
+
+          <member-type access='public'>
+            <union-decl name='__anonymous_union__3' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='202' column='1' id='type-id-5679'>
+              <data-member access='private'>
+                <var-decl name='skc_flags' type-id='type-id-16' visibility='default' filepath='include/net/sock.h' line='203' column='1'/>
+              </data-member>
+              <data-member access='private'>
+                <var-decl name='skc_listener' type-id='type-id-3666' visibility='default' filepath='include/net/sock.h' line='204' column='1'/>
+              </data-member>
+              <data-member access='private'>
+                <var-decl name='skc_tw_dr' type-id='type-id-5680' visibility='default' filepath='include/net/sock.h' line='205' column='1'/>
+              </data-member>
+            </union-decl>
+          </member-type>
+
+          <member-type access='public'>
+            <union-decl name='__anonymous_union__4' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='214' column='1' id='type-id-5681'>
+              <data-member access='private'>
+                <var-decl name='skc_node' type-id='type-id-520' visibility='default' filepath='include/net/sock.h' line='215' column='1'/>
+              </data-member>
+              <data-member access='private'>
+                <var-decl name='skc_nulls_node' type-id='type-id-2294' visibility='default' filepath='include/net/sock.h' line='216' column='1'/>
+              </data-member>
+            </union-decl>
+          </member-type>
+
+          <member-type access='public'>
+            <union-decl name='__anonymous_union__5' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='222' column='1' id='type-id-5682'>
+              <data-member access='private'>
+                <var-decl name='skc_incoming_cpu' type-id='type-id-17' visibility='default' filepath='include/net/sock.h' line='223' column='1'/>
+              </data-member>
+              <data-member access='private'>
+                <var-decl name='skc_rcv_wnd' type-id='type-id-7' visibility='default' filepath='include/net/sock.h' line='224' column='1'/>
+              </data-member>
+              <data-member access='private'>
+                <var-decl name='skc_tw_rcv_nxt' type-id='type-id-7' visibility='default' filepath='include/net/sock.h' line='225' column='1'/>
+              </data-member>
+            </union-decl>
+          </member-type>
+        <member-type access='public'>
+          <union-decl name='__anonymous_union__6' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='231' column='1' id='type-id-5683'>
+            <data-member access='private'>
+              <var-decl name='skc_rxhash' type-id='type-id-7' visibility='default' filepath='include/net/sock.h' line='232' column='1'/>
+            </data-member>
+            <data-member access='private'>
+              <var-decl name='skc_window_clamp' type-id='type-id-7' visibility='default' filepath='include/net/sock.h' line='233' column='1'/>
+            </data-member>
+            <data-member access='private'>
+              <var-decl name='skc_tw_snd_nxt' type-id='type-id-7' visibility='default' filepath='include/net/sock.h' line='234' column='1'/>
+            </data-member>
+          </union-decl>
+        </member-type>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='type-id-5684' visibility='default' filepath='include/net/sock.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='skc_family' type-id='type-id-312' visibility='default' filepath='include/net/sock.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='skc_state' type-id='type-id-5685' visibility='default' filepath='include/net/sock.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='skc_reuse' type-id='type-id-216' visibility='default' filepath='include/net/sock.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='skc_reuseport' type-id='type-id-216' visibility='default' filepath='include/net/sock.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='skc_ipv6only' type-id='type-id-216' visibility='default' filepath='include/net/sock.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='skc_net_refcnt' type-id='type-id-216' visibility='default' filepath='include/net/sock.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='skc_bound_dev_if' type-id='type-id-17' visibility='default' filepath='include/net/sock.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='skc_prot' type-id='type-id-5668' visibility='default' filepath='include/net/sock.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='skc_net' type-id='type-id-1692' visibility='default' filepath='include/net/sock.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='skc_v6_daddr' type-id='type-id-2251' visibility='default' filepath='include/net/sock.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='skc_v6_rcv_saddr' type-id='type-id-2251' visibility='default' filepath='include/net/sock.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='skc_cookie' type-id='type-id-113' visibility='default' filepath='include/net/sock.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='skc_dontcopy_begin' type-id='type-id-1136' visibility='default' filepath='include/net/sock.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='skc_tx_queue_mapping' type-id='type-id-312' visibility='default' filepath='include/net/sock.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='912'>
+          <var-decl name='skc_rx_queue_mapping' type-id='type-id-312' visibility='default' filepath='include/net/sock.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='skc_refcnt' type-id='type-id-421' visibility='default' filepath='include/net/sock.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='skc_dontcopy_end' type-id='type-id-1136' visibility='default' filepath='include/net/sock.h' line='230' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__addrpair' type-id='type-id-100' filepath='include/net/sock.h' line='120' column='1' id='type-id-5686'/>
+      <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='158' column='1' id='type-id-5687'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='skc_daddr' type-id='type-id-929' visibility='default' filepath='include/net/sock.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='skc_rcv_saddr' type-id='type-id-929' visibility='default' filepath='include/net/sock.h' line='160' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__portpair' type-id='type-id-511' filepath='include/net/sock.h' line='119' column='1' id='type-id-5676'/>
+      <class-decl name='__anonymous_struct__1' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='170' column='1' id='type-id-5677'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='skc_dport' type-id='type-id-926' visibility='default' filepath='include/net/sock.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='skc_num' type-id='type-id-108' visibility='default' filepath='include/net/sock.h' line='172' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='proto' size-in-bits='3392' is-struct='yes' visibility='default' filepath='include/net/sock.h' line='1063' column='1' id='type-id-5688'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='close' type-id='type-id-5689' visibility='default' filepath='include/net/sock.h' line='1064' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pre_connect' type-id='type-id-5690' visibility='default' filepath='include/net/sock.h' line='1066' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='connect' type-id='type-id-5690' visibility='default' filepath='include/net/sock.h' line='1069' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='disconnect' type-id='type-id-5691' visibility='default' filepath='include/net/sock.h' line='1072' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='accept' type-id='type-id-5692' visibility='default' filepath='include/net/sock.h' line='1074' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ioctl' type-id='type-id-5693' visibility='default' filepath='include/net/sock.h' line='1077' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='init' type-id='type-id-5694' visibility='default' filepath='include/net/sock.h' line='1079' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='destroy' type-id='type-id-5671' visibility='default' filepath='include/net/sock.h' line='1080' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='shutdown' type-id='type-id-5695' visibility='default' filepath='include/net/sock.h' line='1081' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='setsockopt' type-id='type-id-5696' visibility='default' filepath='include/net/sock.h' line='1082' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='getsockopt' type-id='type-id-5697' visibility='default' filepath='include/net/sock.h' line='1085' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='keepalive' type-id='type-id-5695' visibility='default' filepath='include/net/sock.h' line='1088' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='compat_setsockopt' type-id='type-id-5696' visibility='default' filepath='include/net/sock.h' line='1090' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='compat_getsockopt' type-id='type-id-5697' visibility='default' filepath='include/net/sock.h' line='1094' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='compat_ioctl' type-id='type-id-5698' visibility='default' filepath='include/net/sock.h' line='1098' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='sendmsg' type-id='type-id-5699' visibility='default' filepath='include/net/sock.h' line='1101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='recvmsg' type-id='type-id-5700' visibility='default' filepath='include/net/sock.h' line='1103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='sendpage' type-id='type-id-5701' visibility='default' filepath='include/net/sock.h' line='1106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='bind' type-id='type-id-5690' visibility='default' filepath='include/net/sock.h' line='1108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='backlog_rcv' type-id='type-id-5672' visibility='default' filepath='include/net/sock.h' line='1111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='release_cb' type-id='type-id-5671' visibility='default' filepath='include/net/sock.h' line='1114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='hash' type-id='type-id-5694' visibility='default' filepath='include/net/sock.h' line='1117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='unhash' type-id='type-id-5671' visibility='default' filepath='include/net/sock.h' line='1118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='rehash' type-id='type-id-5671' visibility='default' filepath='include/net/sock.h' line='1119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='get_port' type-id='type-id-5702' visibility='default' filepath='include/net/sock.h' line='1120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='inuse_idx' type-id='type-id-5' visibility='default' filepath='include/net/sock.h' line='1124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='stream_memory_free' type-id='type-id-5703' visibility='default' filepath='include/net/sock.h' line='1127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='stream_memory_read' type-id='type-id-5703' visibility='default' filepath='include/net/sock.h' line='1128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='enter_memory_pressure' type-id='type-id-5671' visibility='default' filepath='include/net/sock.h' line='1130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='leave_memory_pressure' type-id='type-id-5671' visibility='default' filepath='include/net/sock.h' line='1131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='memory_allocated' type-id='type-id-2546' visibility='default' filepath='include/net/sock.h' line='1132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='sockets_allocated' type-id='type-id-5704' visibility='default' filepath='include/net/sock.h' line='1133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='memory_pressure' type-id='type-id-45' visibility='default' filepath='include/net/sock.h' line='1140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='sysctl_mem' type-id='type-id-5595' visibility='default' filepath='include/net/sock.h' line='1141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='sysctl_wmem' type-id='type-id-666' visibility='default' filepath='include/net/sock.h' line='1143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='sysctl_rmem' type-id='type-id-666' visibility='default' filepath='include/net/sock.h' line='1144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='sysctl_wmem_offset' type-id='type-id-7' visibility='default' filepath='include/net/sock.h' line='1145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2336'>
+          <var-decl name='sysctl_rmem_offset' type-id='type-id-7' visibility='default' filepath='include/net/sock.h' line='1146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='max_header' type-id='type-id-17' visibility='default' filepath='include/net/sock.h' line='1148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2400'>
+          <var-decl name='no_autobind' type-id='type-id-33' visibility='default' filepath='include/net/sock.h' line='1149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='slab' type-id='type-id-538' visibility='default' filepath='include/net/sock.h' line='1151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='obj_size' type-id='type-id-5' visibility='default' filepath='include/net/sock.h' line='1152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2528'>
+          <var-decl name='slab_flags' type-id='type-id-3256' visibility='default' filepath='include/net/sock.h' line='1153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='useroffset' type-id='type-id-5' visibility='default' filepath='include/net/sock.h' line='1154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2592'>
+          <var-decl name='usersize' type-id='type-id-5' visibility='default' filepath='include/net/sock.h' line='1155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='orphan_count' type-id='type-id-5704' visibility='default' filepath='include/net/sock.h' line='1157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='rsk_prot' type-id='type-id-5705' visibility='default' filepath='include/net/sock.h' line='1159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='twsk_prot' type-id='type-id-5706' visibility='default' filepath='include/net/sock.h' line='1160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='h' type-id='type-id-5707' visibility='default' filepath='include/net/sock.h' line='1167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='include/net/sock.h' line='1169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='name' type-id='type-id-373' visibility='default' filepath='include/net/sock.h' line='1171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='node' type-id='type-id-20' visibility='default' filepath='include/net/sock.h' line='1173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='diag_destroy' type-id='type-id-5691' visibility='default' filepath='include/net/sock.h' line='1177' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='request_sock_ops' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/request_sock.h' line='31' column='1' id='type-id-5708'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='type-id-17' visibility='default' filepath='include/net/request_sock.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='obj_size' type-id='type-id-5' visibility='default' filepath='include/net/request_sock.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='slab' type-id='type-id-538' visibility='default' filepath='include/net/request_sock.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='slab_name' type-id='type-id-2' visibility='default' filepath='include/net/request_sock.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rtx_syn_ack' type-id='type-id-5709' visibility='default' filepath='include/net/request_sock.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='send_ack' type-id='type-id-5710' visibility='default' filepath='include/net/request_sock.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='send_reset' type-id='type-id-5711' visibility='default' filepath='include/net/request_sock.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='destructor' type-id='type-id-5712' visibility='default' filepath='include/net/request_sock.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='syn_ack_timeout' type-id='type-id-5713' visibility='default' filepath='include/net/request_sock.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='request_sock' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/net/request_sock.h' line='50' column='1' id='type-id-5714'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__req_common' type-id='type-id-5662' visibility='default' filepath='include/net/request_sock.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='dl_next' type-id='type-id-5715' visibility='default' filepath='include/net/request_sock.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='mss' type-id='type-id-688' visibility='default' filepath='include/net/request_sock.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1104'>
+          <var-decl name='num_retrans' type-id='type-id-214' visibility='default' filepath='include/net/request_sock.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='cookie_ts' type-id='type-id-214' visibility='default' filepath='include/net/request_sock.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1112'>
+          <var-decl name='num_timeout' type-id='type-id-214' visibility='default' filepath='include/net/request_sock.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='ts_recent' type-id='type-id-7' visibility='default' filepath='include/net/request_sock.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='rsk_timer' type-id='type-id-417' visibility='default' filepath='include/net/request_sock.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='rsk_ops' type-id='type-id-5716' visibility='default' filepath='include/net/request_sock.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='sk' type-id='type-id-3666' visibility='default' filepath='include/net/request_sock.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='saved_syn' type-id='type-id-1567' visibility='default' filepath='include/net/request_sock.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='secid' type-id='type-id-7' visibility='default' filepath='include/net/request_sock.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='peer_secid' type-id='type-id-7' visibility='default' filepath='include/net/request_sock.h' line='69' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='timewait_sock_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/timewait_sock.h' line='18' column='1' id='type-id-5717'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='twsk_slab' type-id='type-id-538' visibility='default' filepath='include/net/timewait_sock.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='twsk_slab_name' type-id='type-id-2' visibility='default' filepath='include/net/timewait_sock.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='twsk_obj_size' type-id='type-id-5' visibility='default' filepath='include/net/timewait_sock.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='twsk_unique' type-id='type-id-5718' visibility='default' filepath='include/net/timewait_sock.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='twsk_destructor' type-id='type-id-5671' visibility='default' filepath='include/net/timewait_sock.h' line='24' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='smc_hashinfo' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/smc.h' line='16' column='1' id='type-id-5719'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='type-id-885' visibility='default' filepath='include/net/smc.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ht' type-id='type-id-186' visibility='default' filepath='include/net/smc.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='socket_lock_t' type-id='type-id-5720' filepath='include/net/sock.h' line='113' column='1' id='type-id-5663'/>
+      <class-decl name='__anonymous_struct__2' size-in-bits='256' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-5663' visibility='default' filepath='include/net/sock.h' line='100' column='1' id='type-id-5720'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='slock' type-id='type-id-247' visibility='default' filepath='include/net/sock.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='owned' type-id='type-id-17' visibility='default' filepath='include/net/sock.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wq' type-id='type-id-225' visibility='default' filepath='include/net/sock.h' line='103' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__3' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='380' column='1' id='type-id-5664'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rmem_alloc' type-id='type-id-26' visibility='default' filepath='include/net/sock.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='len' type-id='type-id-17' visibility='default' filepath='include/net/sock.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='head' type-id='type-id-1768' visibility='default' filepath='include/net/sock.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tail' type-id='type-id-1768' visibility='default' filepath='include/net/sock.h' line='384' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sk_filter' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/filter.h' line='508' column='1' id='type-id-5721'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcnt' type-id='type-id-421' visibility='default' filepath='include/linux/filter.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/linux/filter.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='prog' type-id='type-id-1230' visibility='default' filepath='include/linux/filter.h' line='511' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='socket_wq' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/net.h' line='92' column='1' id='type-id-5722'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wait' type-id='type-id-225' visibility='default' filepath='include/linux/net.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fasync_list' type-id='type-id-254' visibility='default' filepath='include/linux/net.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='include/linux/net.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/linux/net.h' line='97' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dst_entry' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/net/dst.h' line='35' column='1' id='type-id-5723'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='type-id-1650' visibility='default' filepath='include/net/dst.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='type-id-2749' visibility='default' filepath='include/net/dst.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='_metrics' type-id='type-id-16' visibility='default' filepath='include/net/dst.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='expires' type-id='type-id-16' visibility='default' filepath='include/net/dst.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='xfrm' type-id='type-id-5724' visibility='default' filepath='include/net/dst.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='input' type-id='type-id-5725' visibility='default' filepath='include/net/dst.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='output' type-id='type-id-2281' visibility='default' filepath='include/net/dst.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='flags' type-id='type-id-312' visibility='default' filepath='include/net/dst.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='obsolete' type-id='type-id-261' visibility='default' filepath='include/net/dst.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='header_len' type-id='type-id-312' visibility='default' filepath='include/net/dst.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='496'>
+          <var-decl name='trailer_len' type-id='type-id-312' visibility='default' filepath='include/net/dst.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='__refcnt' type-id='type-id-26' visibility='default' filepath='include/net/dst.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='__use' type-id='type-id-17' visibility='default' filepath='include/net/dst.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='lastuse' type-id='type-id-16' visibility='default' filepath='include/net/dst.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='lwtstate' type-id='type-id-5726' visibility='default' filepath='include/net/dst.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='callback_head' type-id='type-id-385' visibility='default' filepath='include/net/dst.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='error' type-id='type-id-261' visibility='default' filepath='include/net/dst.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='848'>
+          <var-decl name='__pad' type-id='type-id-261' visibility='default' filepath='include/net/dst.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='tclassid' type-id='type-id-511' visibility='default' filepath='include/net/dst.h' line='87' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ip_ra_chain' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/ip.h' line='120' column='1' id='type-id-5727'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='type-id-5728' visibility='default' filepath='include/net/ip.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sk' type-id='type-id-3666' visibility='default' filepath='include/net/ip.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='type-id-5729' visibility='default' filepath='include/net/ip.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/net/ip.h' line='127' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__9' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/ip.h' line='123' column='1' id='type-id-5729'>
+        <data-member access='private'>
+          <var-decl name='destructor' type-id='type-id-5671' visibility='default' filepath='include/net/ip.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='saved_sk' type-id='type-id-3666' visibility='default' filepath='include/net/ip.h' line='125' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='fib_rules_ops' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/net/fib_rules.h' line='59' column='1' id='type-id-5730'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='type-id-17' visibility='default' filepath='include/net/fib_rules.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/net/fib_rules.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rule_size' type-id='type-id-17' visibility='default' filepath='include/net/fib_rules.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='addr_size' type-id='type-id-17' visibility='default' filepath='include/net/fib_rules.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='unresolved_rules' type-id='type-id-17' visibility='default' filepath='include/net/fib_rules.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='nr_goto_rules' type-id='type-id-17' visibility='default' filepath='include/net/fib_rules.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fib_rules_seq' type-id='type-id-5' visibility='default' filepath='include/net/fib_rules.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='action' type-id='type-id-5731' visibility='default' filepath='include/net/fib_rules.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='suppress' type-id='type-id-5732' visibility='default' filepath='include/net/fib_rules.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='match' type-id='type-id-5733' visibility='default' filepath='include/net/fib_rules.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='configure' type-id='type-id-5734' visibility='default' filepath='include/net/fib_rules.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='delete' type-id='type-id-5735' visibility='default' filepath='include/net/fib_rules.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='compare' type-id='type-id-5736' visibility='default' filepath='include/net/fib_rules.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='fill' type-id='type-id-5737' visibility='default' filepath='include/net/fib_rules.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='nlmsg_payload' type-id='type-id-5738' visibility='default' filepath='include/net/fib_rules.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='flush_cache' type-id='type-id-5739' visibility='default' filepath='include/net/fib_rules.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='nlgroup' type-id='type-id-17' visibility='default' filepath='include/net/fib_rules.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='policy' type-id='type-id-2188' visibility='default' filepath='include/net/fib_rules.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rules_list' type-id='type-id-20' visibility='default' filepath='include/net/fib_rules.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='include/net/fib_rules.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='fro_net' type-id='type-id-1645' visibility='default' filepath='include/net/fib_rules.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/net/fib_rules.h' line='97' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib_rule' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/net/fib_rules.h' line='19' column='1' id='type-id-5740'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/net/fib_rules.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='iifindex' type-id='type-id-17' visibility='default' filepath='include/net/fib_rules.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='oifindex' type-id='type-id-17' visibility='default' filepath='include/net/fib_rules.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mark' type-id='type-id-7' visibility='default' filepath='include/net/fib_rules.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='mark_mask' type-id='type-id-7' visibility='default' filepath='include/net/fib_rules.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='type-id-7' visibility='default' filepath='include/net/fib_rules.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='table' type-id='type-id-7' visibility='default' filepath='include/net/fib_rules.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='action' type-id='type-id-214' visibility='default' filepath='include/net/fib_rules.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='328'>
+          <var-decl name='l3mdev' type-id='type-id-214' visibility='default' filepath='include/net/fib_rules.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='proto' type-id='type-id-214' visibility='default' filepath='include/net/fib_rules.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='344'>
+          <var-decl name='ip_proto' type-id='type-id-214' visibility='default' filepath='include/net/fib_rules.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='target' type-id='type-id-7' visibility='default' filepath='include/net/fib_rules.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='tun_id' type-id='type-id-5741' visibility='default' filepath='include/net/fib_rules.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ctarget' type-id='type-id-5742' visibility='default' filepath='include/net/fib_rules.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='fr_net' type-id='type-id-1645' visibility='default' filepath='include/net/fib_rules.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='refcnt' type-id='type-id-421' visibility='default' filepath='include/net/fib_rules.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='pref' type-id='type-id-7' visibility='default' filepath='include/net/fib_rules.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='suppress_ifgroup' type-id='type-id-17' visibility='default' filepath='include/net/fib_rules.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='suppress_prefixlen' type-id='type-id-17' visibility='default' filepath='include/net/fib_rules.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='iifname' type-id='type-id-43' visibility='default' filepath='include/net/fib_rules.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='oifname' type-id='type-id-43' visibility='default' filepath='include/net/fib_rules.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='uid_range' type-id='type-id-5743' visibility='default' filepath='include/net/fib_rules.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='sport_range' type-id='type-id-5744' visibility='default' filepath='include/net/fib_rules.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='dport_range' type-id='type-id-5744' visibility='default' filepath='include/net/fib_rules.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/net/fib_rules.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__be64' type-id='type-id-100' filepath='include/uapi/linux/types.h' line='34' column='1' id='type-id-5741'/>
+      <class-decl name='fib_kuid_range' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/fib_rules.h' line='14' column='1' id='type-id-5743'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='type-id-42' visibility='default' filepath='include/net/fib_rules.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='end' type-id='type-id-42' visibility='default' filepath='include/net/fib_rules.h' line='16' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib_rule_port_range' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/fib_rules.h' line='38' column='1' id='type-id-5744'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/fib_rules.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='end' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/fib_rules.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='flowi' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/net/flow.h' line='171' column='1' id='type-id-5745'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='u' type-id='type-id-5746' visibility='default' filepath='include/net/flow.h' line='177' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__10' size-in-bits='704' is-anonymous='yes' visibility='default' filepath='include/net/flow.h' line='172' column='1' id='type-id-5746'>
+        <data-member access='private'>
+          <var-decl name='__fl_common' type-id='type-id-5747' visibility='default' filepath='include/net/flow.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ip4' type-id='type-id-5748' visibility='default' filepath='include/net/flow.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ip6' type-id='type-id-5749' visibility='default' filepath='include/net/flow.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='dn' type-id='type-id-5750' visibility='default' filepath='include/net/flow.h' line='176' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='flowi_common' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/flow.h' line='29' column='1' id='type-id-5747'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flowic_oif' type-id='type-id-17' visibility='default' filepath='include/net/flow.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flowic_iif' type-id='type-id-17' visibility='default' filepath='include/net/flow.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flowic_mark' type-id='type-id-511' visibility='default' filepath='include/net/flow.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flowic_tos' type-id='type-id-895' visibility='default' filepath='include/net/flow.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='flowic_scope' type-id='type-id-895' visibility='default' filepath='include/net/flow.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='flowic_proto' type-id='type-id-895' visibility='default' filepath='include/net/flow.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='flowic_flags' type-id='type-id-895' visibility='default' filepath='include/net/flow.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flowic_secid' type-id='type-id-511' visibility='default' filepath='include/net/flow.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flowic_tun_key' type-id='type-id-5751' visibility='default' filepath='include/net/flow.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flowic_uid' type-id='type-id-42' visibility='default' filepath='include/net/flow.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='flowi_tunnel' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/flow.h' line='25' column='1' id='type-id-5751'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tun_id' type-id='type-id-5741' visibility='default' filepath='include/net/flow.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='flowi4' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/net/flow.h' line='69' column='1' id='type-id-5748'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__fl_common' type-id='type-id-5747' visibility='default' filepath='include/net/flow.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='saddr' type-id='type-id-929' visibility='default' filepath='include/net/flow.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='daddr' type-id='type-id-929' visibility='default' filepath='include/net/flow.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='uli' type-id='type-id-5752' visibility='default' filepath='include/net/flow.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='flowi_uli' size-in-bits='32' visibility='default' filepath='include/net/flow.h' line='45' column='1' id='type-id-5752'>
+        <data-member access='private'>
+          <var-decl name='ports' type-id='type-id-5753' visibility='default' filepath='include/net/flow.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='icmpt' type-id='type-id-5754' visibility='default' filepath='include/net/flow.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='dnports' type-id='type-id-5755' visibility='default' filepath='include/net/flow.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='spi' type-id='type-id-929' visibility='default' filepath='include/net/flow.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='gre_key' type-id='type-id-929' visibility='default' filepath='include/net/flow.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='mht' type-id='type-id-5756' visibility='default' filepath='include/net/flow.h' line='66' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__4' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/flow.h' line='46' column='1' id='type-id-5753'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dport' type-id='type-id-926' visibility='default' filepath='include/net/flow.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='sport' type-id='type-id-926' visibility='default' filepath='include/net/flow.h' line='48' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__5' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/flow.h' line='51' column='1' id='type-id-5754'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='type-id-895' visibility='default' filepath='include/net/flow.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='code' type-id='type-id-895' visibility='default' filepath='include/net/flow.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__6' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/flow.h' line='56' column='1' id='type-id-5755'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dport' type-id='type-id-5123' visibility='default' filepath='include/net/flow.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='sport' type-id='type-id-5123' visibility='default' filepath='include/net/flow.h' line='58' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__7' size-in-bits='8' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/flow.h' line='64' column='1' id='type-id-5756'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='type-id-895' visibility='default' filepath='include/net/flow.h' line='65' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='flowi6' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/net/flow.h' line='130' column='1' id='type-id-5749'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__fl_common' type-id='type-id-5747' visibility='default' filepath='include/net/flow.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='daddr' type-id='type-id-2251' visibility='default' filepath='include/net/flow.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='saddr' type-id='type-id-2251' visibility='default' filepath='include/net/flow.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='flowlabel' type-id='type-id-929' visibility='default' filepath='include/net/flow.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='uli' type-id='type-id-5752' visibility='default' filepath='include/net/flow.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mp_hash' type-id='type-id-511' visibility='default' filepath='include/net/flow.h' line='153' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='flowidn' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/flow.h' line='156' column='1' id='type-id-5750'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__fl_common' type-id='type-id-5747' visibility='default' filepath='include/net/flow.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='daddr' type-id='type-id-5123' visibility='default' filepath='include/net/flow.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='saddr' type-id='type-id-5123' visibility='default' filepath='include/net/flow.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='uli' type-id='type-id-5752' visibility='default' filepath='include/net/flow.h' line='166' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib_lookup_arg' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/fib_rules.h' line='48' column='1' id='type-id-5757'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lookup_ptr' type-id='type-id-15' visibility='default' filepath='include/net/fib_rules.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lookup_data' type-id='type-id-15' visibility='default' filepath='include/net/fib_rules.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='result' type-id='type-id-15' visibility='default' filepath='include/net/fib_rules.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rule' type-id='type-id-5742' visibility='default' filepath='include/net/fib_rules.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='table' type-id='type-id-7' visibility='default' filepath='include/net/fib_rules.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='flags' type-id='type-id-17' visibility='default' filepath='include/net/fib_rules.h' line='54' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib_rule_hdr' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/fib_rules.h' line='19' column='1' id='type-id-5758'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/fib_rules.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='dst_len' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/fib_rules.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='src_len' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/fib_rules.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='tos' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/fib_rules.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='table' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/fib_rules.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='res1' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/fib_rules.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='res2' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/fib_rules.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='action' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/fib_rules.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/fib_rules.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib_notifier_ops' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/fib_notifier.h' line='28' column='1' id='type-id-5759'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='type-id-17' visibility='default' filepath='include/net/fib_notifier.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/net/fib_notifier.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fib_seq_read' type-id='type-id-5760' visibility='default' filepath='include/net/fib_notifier.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fib_dump' type-id='type-id-5761' visibility='default' filepath='include/net/fib_notifier.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='include/net/fib_notifier.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/net/fib_notifier.h' line='34' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ipv6_stable_secret' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/linux/ipv6.h' line='64' column='1' id='type-id-5762'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='initialized' type-id='type-id-33' visibility='default' filepath='include/linux/ipv6.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='secret' type-id='type-id-2251' visibility='default' filepath='include/linux/ipv6.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='socket' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/net.h' line='110' column='1' id='type-id-5763'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='type-id-5764' visibility='default' filepath='include/linux/net.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='type-id-261' visibility='default' filepath='include/linux/net.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='include/linux/net.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='wq' type-id='type-id-3663' visibility='default' filepath='include/linux/net.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='file' type-id='type-id-83' visibility='default' filepath='include/linux/net.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sk' type-id='type-id-3666' visibility='default' filepath='include/linux/net.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ops' type-id='type-id-5765' visibility='default' filepath='include/linux/net.h' line='121' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='socket_state' type-id='type-id-5766' filepath='include/uapi/linux/net.h' line='54' column='1' id='type-id-5764'/>
+      <enum-decl name='__anonymous_enum__' is-anonymous='yes' filepath='include/uapi/linux/net.h' line='48' column='1' id='type-id-5766'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='SS_FREE' value='0'/>
+        <enumerator name='SS_UNCONNECTED' value='1'/>
+        <enumerator name='SS_CONNECTING' value='2'/>
+        <enumerator name='SS_CONNECTED' value='3'/>
+        <enumerator name='SS_DISCONNECTING' value='4'/>
+      </enum-decl>
+      <class-decl name='proto_ops' size-in-bits='1792' is-struct='yes' visibility='default' filepath='include/linux/net.h' line='133' column='1' id='type-id-5767'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='type-id-17' visibility='default' filepath='include/linux/net.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='include/linux/net.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='release' type-id='type-id-5768' visibility='default' filepath='include/linux/net.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bind' type-id='type-id-5769' visibility='default' filepath='include/linux/net.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='connect' type-id='type-id-5770' visibility='default' filepath='include/linux/net.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='socketpair' type-id='type-id-5771' visibility='default' filepath='include/linux/net.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='accept' type-id='type-id-5772' visibility='default' filepath='include/linux/net.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='getname' type-id='type-id-5769' visibility='default' filepath='include/linux/net.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='poll' type-id='type-id-5773' visibility='default' filepath='include/linux/net.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ioctl' type-id='type-id-5774' visibility='default' filepath='include/linux/net.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='compat_ioctl' type-id='type-id-5774' visibility='default' filepath='include/linux/net.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='listen' type-id='type-id-5775' visibility='default' filepath='include/linux/net.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='shutdown' type-id='type-id-5775' visibility='default' filepath='include/linux/net.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='setsockopt' type-id='type-id-5776' visibility='default' filepath='include/linux/net.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='getsockopt' type-id='type-id-5777' visibility='default' filepath='include/linux/net.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='compat_setsockopt' type-id='type-id-5776' visibility='default' filepath='include/linux/net.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='compat_getsockopt' type-id='type-id-5777' visibility='default' filepath='include/linux/net.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='sendmsg' type-id='type-id-5778' visibility='default' filepath='include/linux/net.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='recvmsg' type-id='type-id-5779' visibility='default' filepath='include/linux/net.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='mmap' type-id='type-id-5780' visibility='default' filepath='include/linux/net.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='sendpage' type-id='type-id-5781' visibility='default' filepath='include/linux/net.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='splice_read' type-id='type-id-5782' visibility='default' filepath='include/linux/net.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='set_peek_off' type-id='type-id-5691' visibility='default' filepath='include/linux/net.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='peek_len' type-id='type-id-5768' visibility='default' filepath='include/linux/net.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='read_sock' type-id='type-id-5783' visibility='default' filepath='include/linux/net.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='sendpage_locked' type-id='type-id-5701' visibility='default' filepath='include/linux/net.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='sendmsg_locked' type-id='type-id-5699' visibility='default' filepath='include/linux/net.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='set_rcvlowat' type-id='type-id-5691' visibility='default' filepath='include/linux/net.h' line='200' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='read_descriptor_t' type-id='type-id-5784' filepath='include/linux/fs.h' line='348' column='1' id='type-id-5785'/>
+      <class-decl name='__anonymous_struct__8' size-in-bits='256' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-5785' visibility='default' filepath='include/linux/fs.h' line='340' column='1' id='type-id-5784'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='written' type-id='type-id-84' visibility='default' filepath='include/linux/fs.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='type-id-84' visibility='default' filepath='include/linux/fs.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='arg' type-id='type-id-5786' visibility='default' filepath='include/linux/fs.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='error' type-id='type-id-17' visibility='default' filepath='include/linux/fs.h' line='347' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__11' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='343' column='1' id='type-id-5786'>
+        <data-member access='private'>
+          <var-decl name='buf' type-id='type-id-2' visibility='default' filepath='include/linux/fs.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='data' type-id='type-id-15' visibility='default' filepath='include/linux/fs.h' line='345' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='sk_read_actor_t' type-id='type-id-5787' filepath='include/linux/net.h' line='130' column='1' id='type-id-5788'/>
+      <class-decl name='sock_cgroup_data' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='762' column='1' id='type-id-5670'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='type-id-5789' visibility='default' filepath='include/linux/cgroup-defs.h' line='763' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__12' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='763' column='1' id='type-id-5789'>
+        <data-member access='private'>
+          <var-decl name='' type-id='type-id-5790' visibility='default' filepath='include/linux/cgroup-defs.h' line='765' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='val' type-id='type-id-40' visibility='default' filepath='include/linux/cgroup-defs.h' line='779' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__9' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='765' column='1' id='type-id-5790'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_data' type-id='type-id-214' visibility='default' filepath='include/linux/cgroup-defs.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='padding' type-id='type-id-214' visibility='default' filepath='include/linux/cgroup-defs.h' line='767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='prioidx' type-id='type-id-688' visibility='default' filepath='include/linux/cgroup-defs.h' line='768' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='classid' type-id='type-id-7' visibility='default' filepath='include/linux/cgroup-defs.h' line='769' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='net_proto_family' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/net.h' line='206' column='1' id='type-id-5791'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='type-id-17' visibility='default' filepath='include/linux/net.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='create' type-id='type-id-5792' visibility='default' filepath='include/linux/net.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='include/linux/net.h' line='210' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-895' size-in-bits='64' id='type-id-5793'/>
+      <pointer-type-def type-id='type-id-5649' size-in-bits='64' id='type-id-5794'/>
+      <qualified-type-def type-id='type-id-5791' const='yes' id='type-id-5795'/>
+      <pointer-type-def type-id='type-id-5795' size-in-bits='64' id='type-id-5796'/>
+      <qualified-type-def type-id='type-id-5767' const='yes' id='type-id-5797'/>
+      <pointer-type-def type-id='type-id-5797' size-in-bits='64' id='type-id-5765'/>
+      <qualified-type-def type-id='type-id-5714' const='yes' id='type-id-5798'/>
+      <pointer-type-def type-id='type-id-5798' size-in-bits='64' id='type-id-5799'/>
+      <qualified-type-def type-id='type-id-5708' const='yes' id='type-id-5800'/>
+      <pointer-type-def type-id='type-id-5800' size-in-bits='64' id='type-id-5716'/>
+      <qualified-type-def type-id='type-id-5660' const='yes' id='type-id-5801'/>
+      <pointer-type-def type-id='type-id-5801' size-in-bits='64' id='type-id-5802'/>
+      <pointer-type-def type-id='type-id-5723' size-in-bits='64' id='type-id-5667'/>
+      <pointer-type-def type-id='type-id-5757' size-in-bits='64' id='type-id-5803'/>
+      <pointer-type-def type-id='type-id-5759' size-in-bits='64' id='type-id-5804'/>
+      <pointer-type-def type-id='type-id-5740' size-in-bits='64' id='type-id-5742'/>
+      <pointer-type-def type-id='type-id-5758' size-in-bits='64' id='type-id-5805'/>
+      <pointer-type-def type-id='type-id-5730' size-in-bits='64' id='type-id-5806'/>
+      <pointer-type-def type-id='type-id-5745' size-in-bits='64' id='type-id-5807'/>
+      <pointer-type-def type-id='type-id-2232' size-in-bits='64' id='type-id-5680'/>
+      <pointer-type-def type-id='type-id-5808' size-in-bits='64' id='type-id-5709'/>
+      <pointer-type-def type-id='type-id-5809' size-in-bits='64' id='type-id-5735'/>
+      <pointer-type-def type-id='type-id-5810' size-in-bits='64' id='type-id-5736'/>
+      <pointer-type-def type-id='type-id-5811' size-in-bits='64' id='type-id-5733'/>
+      <pointer-type-def type-id='type-id-5812' size-in-bits='64' id='type-id-5731'/>
+      <pointer-type-def type-id='type-id-5813' size-in-bits='64' id='type-id-5737'/>
+      <pointer-type-def type-id='type-id-5814' size-in-bits='64' id='type-id-5734'/>
+      <pointer-type-def type-id='type-id-5815' size-in-bits='64' id='type-id-5780'/>
+      <pointer-type-def type-id='type-id-5816' size-in-bits='64' id='type-id-5761'/>
+      <pointer-type-def type-id='type-id-5817' size-in-bits='64' id='type-id-5792'/>
+      <pointer-type-def type-id='type-id-5818' size-in-bits='64' id='type-id-5787'/>
+      <pointer-type-def type-id='type-id-5819' size-in-bits='64' id='type-id-5725'/>
+      <pointer-type-def type-id='type-id-5820' size-in-bits='64' id='type-id-5694'/>
+      <pointer-type-def type-id='type-id-5821' size-in-bits='64' id='type-id-5691'/>
+      <pointer-type-def type-id='type-id-5822' size-in-bits='64' id='type-id-5697'/>
+      <pointer-type-def type-id='type-id-5823' size-in-bits='64' id='type-id-5696'/>
+      <pointer-type-def type-id='type-id-5824' size-in-bits='64' id='type-id-5693'/>
+      <pointer-type-def type-id='type-id-5825' size-in-bits='64' id='type-id-5699'/>
+      <pointer-type-def type-id='type-id-5826' size-in-bits='64' id='type-id-5700'/>
+      <pointer-type-def type-id='type-id-5827' size-in-bits='64' id='type-id-5701'/>
+      <pointer-type-def type-id='type-id-5828' size-in-bits='64' id='type-id-5783'/>
+      <pointer-type-def type-id='type-id-5829' size-in-bits='64' id='type-id-5672'/>
+      <pointer-type-def type-id='type-id-5830' size-in-bits='64' id='type-id-5718'/>
+      <pointer-type-def type-id='type-id-5831' size-in-bits='64' id='type-id-5690'/>
+      <pointer-type-def type-id='type-id-5832' size-in-bits='64' id='type-id-5698'/>
+      <pointer-type-def type-id='type-id-5833' size-in-bits='64' id='type-id-5702'/>
+      <pointer-type-def type-id='type-id-5834' size-in-bits='64' id='type-id-5768'/>
+      <pointer-type-def type-id='type-id-5835' size-in-bits='64' id='type-id-5775'/>
+      <pointer-type-def type-id='type-id-5836' size-in-bits='64' id='type-id-5777'/>
+      <pointer-type-def type-id='type-id-5837' size-in-bits='64' id='type-id-5776'/>
+      <pointer-type-def type-id='type-id-5838' size-in-bits='64' id='type-id-5778'/>
+      <pointer-type-def type-id='type-id-5839' size-in-bits='64' id='type-id-5779'/>
+      <pointer-type-def type-id='type-id-5840' size-in-bits='64' id='type-id-5769'/>
+      <pointer-type-def type-id='type-id-5841' size-in-bits='64' id='type-id-5770'/>
+      <pointer-type-def type-id='type-id-5842' size-in-bits='64' id='type-id-5771'/>
+      <pointer-type-def type-id='type-id-5843' size-in-bits='64' id='type-id-5772'/>
+      <pointer-type-def type-id='type-id-5844' size-in-bits='64' id='type-id-5774'/>
+      <pointer-type-def type-id='type-id-5727' size-in-bits='64' id='type-id-5728'/>
+      <pointer-type-def type-id='type-id-5650' size-in-bits='64' id='type-id-5726'/>
+      <pointer-type-def type-id='type-id-5658' size-in-bits='64' id='type-id-5845'/>
+      <pointer-type-def type-id='type-id-204' size-in-bits='64' id='type-id-5704'/>
+      <pointer-type-def type-id='type-id-5688' size-in-bits='64' id='type-id-5668'/>
+      <pointer-type-def type-id='type-id-5651' size-in-bits='64' id='type-id-5846'/>
+      <pointer-type-def type-id='type-id-5785' size-in-bits='64' id='type-id-5847'/>
+      <pointer-type-def type-id='type-id-5714' size-in-bits='64' id='type-id-5715'/>
+      <pointer-type-def type-id='type-id-5708' size-in-bits='64' id='type-id-5705'/>
+      <pointer-type-def type-id='type-id-5721' size-in-bits='64' id='type-id-5665'/>
+      <pointer-type-def type-id='type-id-5719' size-in-bits='64' id='type-id-5848'/>
+      <pointer-type-def type-id='type-id-5660' size-in-bits='64' id='type-id-3666'/>
+      <pointer-type-def type-id='type-id-5849' size-in-bits='64' id='type-id-5692'/>
+      <pointer-type-def type-id='type-id-3666' size-in-bits='64' id='type-id-5850'/>
+      <pointer-type-def type-id='type-id-5652' size-in-bits='64' id='type-id-5673'/>
+      <pointer-type-def type-id='type-id-1776' size-in-bits='64' id='type-id-5851'/>
+      <pointer-type-def type-id='type-id-5763' size-in-bits='64' id='type-id-5669'/>
+      <pointer-type-def type-id='type-id-5722' size-in-bits='64' id='type-id-3663'/>
+      <pointer-type-def type-id='type-id-5717' size-in-bits='64' id='type-id-5706'/>
+      <pointer-type-def type-id='type-id-5852' size-in-bits='64' id='type-id-5773'/>
+      <pointer-type-def type-id='type-id-5853' size-in-bits='64' id='type-id-5703'/>
+      <pointer-type-def type-id='type-id-5854' size-in-bits='64' id='type-id-5732'/>
+      <pointer-type-def type-id='type-id-5855' size-in-bits='64' id='type-id-5738'/>
+      <pointer-type-def type-id='type-id-5856' size-in-bits='64' id='type-id-5782'/>
+      <pointer-type-def type-id='type-id-5857' size-in-bits='64' id='type-id-5781'/>
+      <pointer-type-def type-id='type-id-5653' size-in-bits='64' id='type-id-5858'/>
+      <pointer-type-def type-id='type-id-5859' size-in-bits='64' id='type-id-5760'/>
+      <pointer-type-def type-id='type-id-5860' size-in-bits='64' id='type-id-5713'/>
+      <pointer-type-def type-id='type-id-5861' size-in-bits='64' id='type-id-5711'/>
+      <pointer-type-def type-id='type-id-5862' size-in-bits='64' id='type-id-5710'/>
+      <pointer-type-def type-id='type-id-5863' size-in-bits='64' id='type-id-5739'/>
+      <pointer-type-def type-id='type-id-5864' size-in-bits='64' id='type-id-5712'/>
+      <pointer-type-def type-id='type-id-5865' size-in-bits='64' id='type-id-5671'/>
+      <pointer-type-def type-id='type-id-5866' size-in-bits='64' id='type-id-5695'/>
+      <pointer-type-def type-id='type-id-5867' size-in-bits='64' id='type-id-5689'/>
+      <qualified-type-def type-id='type-id-216' volatile='yes' id='type-id-5685'/>
+      <pointer-type-def type-id='type-id-5654' size-in-bits='64' id='type-id-5656'/>
+      <pointer-type-def type-id='type-id-5655' size-in-bits='64' id='type-id-5724'/>
+      <function-decl name='__sock_tx_timestamp' mangled-name='__sock_tx_timestamp' filepath='net/socket.c' line='603' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__sock_tx_timestamp'>
+        <parameter type-id='type-id-108' name='tsflags' filepath='net/socket.c' line='603' column='1'/>
+        <parameter type-id='type-id-5793' name='tx_flags' filepath='net/socket.c' line='603' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='__sock_recv_ts_and_drops' mangled-name='__sock_recv_ts_and_drops' filepath='net/socket.c' line='784' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__sock_recv_ts_and_drops'>
+        <parameter type-id='type-id-5845' name='msg' filepath='net/socket.c' line='784' column='1'/>
+        <parameter type-id='type-id-3666' name='sk' filepath='net/socket.c' line='784' column='1'/>
+        <parameter type-id='type-id-1768' name='skb' filepath='net/socket.c' line='785' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='sock_register' mangled-name='sock_register' filepath='net/socket.c' line='2629' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_register'>
+        <parameter type-id='type-id-5796' name='ops' filepath='net/socket.c' line='2629' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='sock_unregister' mangled-name='sock_unregister' filepath='net/socket.c' line='2666' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_unregister'>
+        <parameter type-id='type-id-17' name='family' filepath='net/socket.c' line='2666' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-5808'>
+        <parameter type-id='type-id-5802'/>
+        <parameter type-id='type-id-5715'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5809'>
+        <parameter type-id='type-id-5742'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5810'>
+        <parameter type-id='type-id-5742'/>
+        <parameter type-id='type-id-5805'/>
+        <parameter type-id='type-id-3034'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5811'>
+        <parameter type-id='type-id-5742'/>
+        <parameter type-id='type-id-5807'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5812'>
+        <parameter type-id='type-id-5742'/>
+        <parameter type-id='type-id-5807'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-5803'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5813'>
+        <parameter type-id='type-id-5742'/>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-5805'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5814'>
+        <parameter type-id='type-id-5742'/>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-5805'/>
+        <parameter type-id='type-id-3034'/>
+        <parameter type-id='type-id-1826'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5815'>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-5669'/>
+        <parameter type-id='type-id-1209'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5816'>
+        <parameter type-id='type-id-1645'/>
+        <parameter type-id='type-id-3271'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5817'>
+        <parameter type-id='type-id-1645'/>
+        <parameter type-id='type-id-5669'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5818'>
+        <parameter type-id='type-id-5847'/>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-84'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5819'>
+        <parameter type-id='type-id-1768'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5820'>
+        <parameter type-id='type-id-3666'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5821'>
+        <parameter type-id='type-id-3666'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5822'>
+        <parameter type-id='type-id-3666'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-2'/>
+        <parameter type-id='type-id-666'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5823'>
+        <parameter type-id='type-id-3666'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-2'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5824'>
+        <parameter type-id='type-id-3666'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5825'>
+        <parameter type-id='type-id-3666'/>
+        <parameter type-id='type-id-5845'/>
+        <parameter type-id='type-id-84'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5826'>
+        <parameter type-id='type-id-3666'/>
+        <parameter type-id='type-id-5845'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-666'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5827'>
+        <parameter type-id='type-id-3666'/>
+        <parameter type-id='type-id-512'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5828'>
+        <parameter type-id='type-id-3666'/>
+        <parameter type-id='type-id-5847'/>
+        <parameter type-id='type-id-5788'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5829'>
+        <parameter type-id='type-id-3666'/>
+        <parameter type-id='type-id-1768'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5830'>
+        <parameter type-id='type-id-3666'/>
+        <parameter type-id='type-id-3666'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5831'>
+        <parameter type-id='type-id-3666'/>
+        <parameter type-id='type-id-5851'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5832'>
+        <parameter type-id='type-id-3666'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5833'>
+        <parameter type-id='type-id-3666'/>
+        <parameter type-id='type-id-312'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5834'>
+        <parameter type-id='type-id-5669'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5835'>
+        <parameter type-id='type-id-5669'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5836'>
+        <parameter type-id='type-id-5669'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-2'/>
+        <parameter type-id='type-id-666'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5837'>
+        <parameter type-id='type-id-5669'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-2'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5838'>
+        <parameter type-id='type-id-5669'/>
+        <parameter type-id='type-id-5845'/>
+        <parameter type-id='type-id-84'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5839'>
+        <parameter type-id='type-id-5669'/>
+        <parameter type-id='type-id-5845'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5840'>
+        <parameter type-id='type-id-5669'/>
+        <parameter type-id='type-id-5851'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5841'>
+        <parameter type-id='type-id-5669'/>
+        <parameter type-id='type-id-5851'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5842'>
+        <parameter type-id='type-id-5669'/>
+        <parameter type-id='type-id-5669'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5843'>
+        <parameter type-id='type-id-5669'/>
+        <parameter type-id='type-id-5669'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-33'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5844'>
+        <parameter type-id='type-id-5669'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-16'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5849'>
+        <parameter type-id='type-id-3666'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-666'/>
+        <parameter type-id='type-id-33'/>
+        <return type-id='type-id-3666'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5852'>
+        <parameter type-id='type-id-83'/>
+        <parameter type-id='type-id-5669'/>
+        <parameter type-id='type-id-879'/>
+        <return type-id='type-id-880'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5853'>
+        <parameter type-id='type-id-5802'/>
+        <return type-id='type-id-33'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5854'>
+        <parameter type-id='type-id-5742'/>
+        <parameter type-id='type-id-5803'/>
+        <return type-id='type-id-33'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5855'>
+        <parameter type-id='type-id-5742'/>
+        <return type-id='type-id-84'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5856'>
+        <parameter type-id='type-id-5669'/>
+        <parameter type-id='type-id-85'/>
+        <parameter type-id='type-id-87'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-5'/>
+        <return type-id='type-id-86'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5857'>
+        <parameter type-id='type-id-5669'/>
+        <parameter type-id='type-id-512'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-86'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5859'>
+        <parameter type-id='type-id-1645'/>
+        <return type-id='type-id-5'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5860'>
+        <parameter type-id='type-id-5799'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5861'>
+        <parameter type-id='type-id-5802'/>
+        <parameter type-id='type-id-1768'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5862'>
+        <parameter type-id='type-id-5802'/>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-5715'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5863'>
+        <parameter type-id='type-id-5806'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5864'>
+        <parameter type-id='type-id-5715'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5865'>
+        <parameter type-id='type-id-3666'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5866'>
+        <parameter type-id='type-id-3666'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-5867'>
+        <parameter type-id='type-id-3666'/>
+        <parameter type-id='type-id-192'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <union-decl name='__anonymous_union__4' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='156' column='1' id='type-id-5684'>
+        <data-member access='private'>
+          <var-decl name='skc_addrpair' type-id='type-id-5686' visibility='default' filepath='include/net/sock.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='type-id-5687' visibility='default' filepath='include/net/sock.h' line='158' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__6' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='1162' column='1' id='type-id-5707'>
+        <data-member access='private'>
+          <var-decl name='hashinfo' type-id='type-id-2261' visibility='default' filepath='include/net/sock.h' line='1163' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='udp_table' type-id='type-id-5858' visibility='default' filepath='include/net/sock.h' line='1164' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='raw_hash' type-id='type-id-5846' visibility='default' filepath='include/net/sock.h' line='1165' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='smc_hash' type-id='type-id-5848' visibility='default' filepath='include/net/sock.h' line='1166' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__8' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='397' column='1' id='type-id-5666'>
+        <data-member access='private'>
+          <var-decl name='sk_wq' type-id='type-id-3663' visibility='default' filepath='include/net/sock.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sk_wq_raw' type-id='type-id-3663' visibility='default' filepath='include/net/sock.h' line='399' column='1'/>
+        </data-member>
+      </union-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/core/sock.c' language='LANG_C89'>
+
+      <array-type-def dimensions='1' type-id='type-id-115' size-in-bits='384' id='type-id-5868'>
+        <subrange length='6' type-id='type-id-9' id='type-id-191'/>
+
+      </array-type-def>
+      <class-decl name='crypto_cipher' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-5869'/>
+      <class-decl name='prefix_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-5870'/>
+      <class-decl name='uncached_list' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-5871'/>
+      <array-type-def dimensions='1' type-id='type-id-5872' size-in-bits='16384' id='type-id-5873'>
+        <subrange length='256' type-id='type-id-9' id='type-id-5874'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-5875' size-in-bits='16384' id='type-id-5876'>
+        <subrange length='256' type-id='type-id-9' id='type-id-5874'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-5877' size-in-bits='4096' id='type-id-5878'>
+        <subrange length='32' type-id='type-id-9' id='type-id-941'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-17' size-in-bits='416' id='type-id-5879'>
+        <subrange length='13' type-id='type-id-9' id='type-id-201'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-17' size-in-bits='2048' id='type-id-5880'>
+        <subrange length='64' type-id='type-id-9' id='type-id-188'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-5881' size-in-bits='960' id='type-id-5882'>
+        <subrange length='15' type-id='type-id-9' id='type-id-3439'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-3666' size-in-bits='infinite' id='type-id-5883'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-214' size-in-bits='infinite' id='type-id-5884'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <union-decl name='tcp_cc_info' visibility='default' is-declaration-only='yes' id='type-id-5885'/>
+      <array-type-def dimensions='1' type-id='type-id-5886' size-in-bits='320' id='type-id-5887'>
+        <subrange length='5' type-id='type-id-9' id='type-id-110'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-5888' size-in-bits='3072' id='type-id-5889'>
+        <subrange length='6' type-id='type-id-9' id='type-id-191'/>
+
+      </array-type-def>
+      <union-decl name='__anonymous_union__1' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='898' column='1' id='type-id-5890'>
+        <data-member access='private'>
+          <var-decl name='fu_llist' type-id='type-id-281' visibility='default' filepath='include/linux/fs.h' line='899' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='fu_rcuhead' type-id='type-id-385' visibility='default' filepath='include/linux/fs.h' line='900' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/cred.h' line='154' column='1' id='type-id-5891'>
+        <data-member access='private'>
+          <var-decl name='non_rcu' type-id='type-id-17' visibility='default' filepath='include/linux/cred.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/linux/cred.h' line='156' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='1162' column='1' id='type-id-5892'>
+        <data-member access='private'>
+          <var-decl name='hashinfo' type-id='type-id-2261' visibility='default' filepath='include/net/sock.h' line='1163' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='udp_table' type-id='type-id-5858' visibility='default' filepath='include/net/sock.h' line='1164' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='raw_hash' type-id='type-id-5846' visibility='default' filepath='include/net/sock.h' line='1165' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='smc_hash' type-id='type-id-5848' visibility='default' filepath='include/net/sock.h' line='1166' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='inet_ehash_bucket' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/inet_hashtables.h' line='42' column='1' id='type-id-5893'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chain' type-id='type-id-2292' visibility='default' filepath='include/net/inet_hashtables.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_bind_hashbucket' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/inet_hashtables.h' line='104' column='1' id='type-id-5894'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='include/net/inet_hashtables.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='chain' type-id='type-id-186' visibility='default' filepath='include/net/inet_hashtables.h' line='106' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_listen_hashbucket' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/inet_hashtables.h' line='115' column='1' id='type-id-5877'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='include/net/inet_hashtables.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='type-id-5' visibility='default' filepath='include/net/inet_hashtables.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='type-id-5895' visibility='default' filepath='include/net/inet_hashtables.h' line='118' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__4' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/inet_hashtables.h' line='118' column='1' id='type-id-5895'>
+        <data-member access='private'>
+          <var-decl name='head' type-id='type-id-186' visibility='default' filepath='include/net/inet_hashtables.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='nulls_head' type-id='type-id-2292' visibility='default' filepath='include/net/inet_hashtables.h' line='120' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='xfrm_policy' size-in-bits='6208' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='573' column='1' id='type-id-5896'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='xp_net' type-id='type-id-1692' visibility='default' filepath='include/net/xfrm.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bydst' type-id='type-id-520' visibility='default' filepath='include/net/xfrm.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='byidx' type-id='type-id-520' visibility='default' filepath='include/net/xfrm.h' line='576' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock' type-id='type-id-885' visibility='default' filepath='include/net/xfrm.h' line='579' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='refcnt' type-id='type-id-421' visibility='default' filepath='include/net/xfrm.h' line='580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='timer' type-id='type-id-417' visibility='default' filepath='include/net/xfrm.h' line='581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='genid' type-id='type-id-26' visibility='default' filepath='include/net/xfrm.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='priority' type-id='type-id-7' visibility='default' filepath='include/net/xfrm.h' line='584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='index' type-id='type-id-7' visibility='default' filepath='include/net/xfrm.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='if_id' type-id='type-id-7' visibility='default' filepath='include/net/xfrm.h' line='586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='mark' type-id='type-id-5897' visibility='default' filepath='include/net/xfrm.h' line='587' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='selector' type-id='type-id-5898' visibility='default' filepath='include/net/xfrm.h' line='588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='lft' type-id='type-id-5899' visibility='default' filepath='include/net/xfrm.h' line='589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='curlft' type-id='type-id-5900' visibility='default' filepath='include/net/xfrm.h' line='590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='walk' type-id='type-id-5901' visibility='default' filepath='include/net/xfrm.h' line='591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='polq' type-id='type-id-5902' visibility='default' filepath='include/net/xfrm.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='type' type-id='type-id-214' visibility='default' filepath='include/net/xfrm.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2888'>
+          <var-decl name='action' type-id='type-id-214' visibility='default' filepath='include/net/xfrm.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2896'>
+          <var-decl name='flags' type-id='type-id-214' visibility='default' filepath='include/net/xfrm.h' line='595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2904'>
+          <var-decl name='xfrm_nr' type-id='type-id-214' visibility='default' filepath='include/net/xfrm.h' line='596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2912'>
+          <var-decl name='family' type-id='type-id-688' visibility='default' filepath='include/net/xfrm.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='security' type-id='type-id-5903' visibility='default' filepath='include/net/xfrm.h' line='598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='xfrm_vec' type-id='type-id-5889' visibility='default' filepath='include/net/xfrm.h' line='599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/net/xfrm.h' line='600' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_mark' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='317' column='1' id='type-id-5897'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='v' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/xfrm.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='m' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/xfrm.h' line='319' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_selector' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='49' column='1' id='type-id-5898'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='daddr' type-id='type-id-5904' visibility='default' filepath='include/uapi/linux/xfrm.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='saddr' type-id='type-id-5904' visibility='default' filepath='include/uapi/linux/xfrm.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dport' type-id='type-id-926' visibility='default' filepath='include/uapi/linux/xfrm.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='dport_mask' type-id='type-id-926' visibility='default' filepath='include/uapi/linux/xfrm.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='sport' type-id='type-id-926' visibility='default' filepath='include/uapi/linux/xfrm.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='304'>
+          <var-decl name='sport_mask' type-id='type-id-926' visibility='default' filepath='include/uapi/linux/xfrm.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='family' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/xfrm.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='prefixlen_d' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/xfrm.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='344'>
+          <var-decl name='prefixlen_s' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/xfrm.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='proto' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/xfrm.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ifindex' type-id='type-id-17' visibility='default' filepath='include/uapi/linux/xfrm.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='user' type-id='type-id-1312' visibility='default' filepath='include/uapi/linux/xfrm.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='xfrm_address_t' type-id='type-id-5905' filepath='include/uapi/linux/xfrm.h' line='19' column='1' id='type-id-5904'/>
+      <union-decl name='__anonymous_union__6' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='15' column='1' id='type-id-5905'>
+        <data-member access='private'>
+          <var-decl name='a4' type-id='type-id-929' visibility='default' filepath='include/uapi/linux/xfrm.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='a6' type-id='type-id-931' visibility='default' filepath='include/uapi/linux/xfrm.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='in6' type-id='type-id-2251' visibility='default' filepath='include/uapi/linux/xfrm.h' line='18' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='xfrm_lifetime_cfg' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='66' column='1' id='type-id-5899'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='soft_byte_limit' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/xfrm.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hard_byte_limit' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/xfrm.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='soft_packet_limit' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/xfrm.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hard_packet_limit' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/xfrm.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='soft_add_expires_seconds' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/xfrm.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hard_add_expires_seconds' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/xfrm.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='soft_use_expires_seconds' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/xfrm.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='hard_use_expires_seconds' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/xfrm.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_lifetime_cur' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='77' column='1' id='type-id-5900'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bytes' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/xfrm.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='packets' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/xfrm.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='add_time' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/xfrm.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='use_time' type-id='type-id-100' visibility='default' filepath='include/uapi/linux/xfrm.h' line='81' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_policy_walk_entry' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='556' column='1' id='type-id-5901'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='all' type-id='type-id-20' visibility='default' filepath='include/net/xfrm.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dead' type-id='type-id-214' visibility='default' filepath='include/net/xfrm.h' line='558' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_policy_queue' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='567' column='1' id='type-id-5902'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hold_queue' type-id='type-id-1661' visibility='default' filepath='include/net/xfrm.h' line='568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hold_timer' type-id='type-id-417' visibility='default' filepath='include/net/xfrm.h' line='569' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='timeout' type-id='type-id-16' visibility='default' filepath='include/net/xfrm.h' line='570' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_sec_ctx' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='31' column='1' id='type-id-5906'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ctx_doi' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/xfrm.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='ctx_alg' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/xfrm.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='ctx_len' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/xfrm.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ctx_sid' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/xfrm.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ctx_str' type-id='type-id-440' visibility='default' filepath='include/uapi/linux/xfrm.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_tmpl' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='519' column='1' id='type-id-5888'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='type-id-5907' visibility='default' filepath='include/net/xfrm.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='saddr' type-id='type-id-5904' visibility='default' filepath='include/net/xfrm.h' line='529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='encap_family' type-id='type-id-312' visibility='default' filepath='include/net/xfrm.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='reqid' type-id='type-id-7' visibility='default' filepath='include/net/xfrm.h' line='533' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mode' type-id='type-id-214' visibility='default' filepath='include/net/xfrm.h' line='536' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='392'>
+          <var-decl name='share' type-id='type-id-214' visibility='default' filepath='include/net/xfrm.h' line='539' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='400'>
+          <var-decl name='optional' type-id='type-id-214' visibility='default' filepath='include/net/xfrm.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='408'>
+          <var-decl name='allalgs' type-id='type-id-214' visibility='default' filepath='include/net/xfrm.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='aalgos' type-id='type-id-7' visibility='default' filepath='include/net/xfrm.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ealgos' type-id='type-id-7' visibility='default' filepath='include/net/xfrm.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='calgos' type-id='type-id-7' visibility='default' filepath='include/net/xfrm.h' line='550' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_id' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='25' column='1' id='type-id-5907'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='daddr' type-id='type-id-5904' visibility='default' filepath='include/uapi/linux/xfrm.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='spi' type-id='type-id-929' visibility='default' filepath='include/uapi/linux/xfrm.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='proto' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/xfrm.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nd_opt_hdr' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/net/ndisc.h' line='102' column='1' id='type-id-5908'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nd_opt_type' type-id='type-id-895' visibility='default' filepath='include/net/ndisc.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='nd_opt_len' type-id='type-id-895' visibility='default' filepath='include/net/ndisc.h' line='104' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ndisc_options' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/net/ndisc.h' line='108' column='1' id='type-id-5909'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nd_opt_array' type-id='type-id-5882' visibility='default' filepath='include/net/ndisc.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='nd_opts_ri' type-id='type-id-5881' visibility='default' filepath='include/net/ndisc.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='nd_opts_ri_end' type-id='type-id-5881' visibility='default' filepath='include/net/ndisc.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='nd_useropts' type-id='type-id-5881' visibility='default' filepath='include/net/ndisc.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='nd_useropts_end' type-id='type-id-5881' visibility='default' filepath='include/net/ndisc.h' line='115' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='neighbour' size-in-bits='2688' is-struct='yes' visibility='default' filepath='include/net/neighbour.h' line='135' column='1' id='type-id-5910'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='type-id-5911' visibility='default' filepath='include/net/neighbour.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tbl' type-id='type-id-5912' visibility='default' filepath='include/net/neighbour.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='parms' type-id='type-id-5913' visibility='default' filepath='include/net/neighbour.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='confirmed' type-id='type-id-16' visibility='default' filepath='include/net/neighbour.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='updated' type-id='type-id-16' visibility='default' filepath='include/net/neighbour.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='lock' type-id='type-id-885' visibility='default' filepath='include/net/neighbour.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='refcnt' type-id='type-id-421' visibility='default' filepath='include/net/neighbour.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='arp_queue' type-id='type-id-1661' visibility='default' filepath='include/net/neighbour.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='arp_queue_len_bytes' type-id='type-id-5' visibility='default' filepath='include/net/neighbour.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='timer' type-id='type-id-417' visibility='default' filepath='include/net/neighbour.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='used' type-id='type-id-16' visibility='default' filepath='include/net/neighbour.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='probes' type-id='type-id-26' visibility='default' filepath='include/net/neighbour.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='flags' type-id='type-id-895' visibility='default' filepath='include/net/neighbour.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1128'>
+          <var-decl name='nud_state' type-id='type-id-895' visibility='default' filepath='include/net/neighbour.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1136'>
+          <var-decl name='type' type-id='type-id-895' visibility='default' filepath='include/net/neighbour.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1144'>
+          <var-decl name='dead' type-id='type-id-895' visibility='default' filepath='include/net/neighbour.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ha_lock' type-id='type-id-1919' visibility='default' filepath='include/net/neighbour.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='ha' type-id='type-id-35' visibility='default' filepath='include/net/neighbour.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='hh' type-id='type-id-1918' visibility='default' filepath='include/net/neighbour.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='output' type-id='type-id-5914' visibility='default' filepath='include/net/neighbour.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='ops' type-id='type-id-5915' visibility='default' filepath='include/net/neighbour.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/net/neighbour.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='dev' type-id='type-id-1650' visibility='default' filepath='include/net/neighbour.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='primary_key' type-id='type-id-5884' visibility='default' filepath='include/net/neighbour.h' line='159' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='neigh_table' size-in-bits='3648' is-struct='yes' visibility='default' filepath='include/net/neighbour.h' line='192' column='1' id='type-id-5916'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='type-id-17' visibility='default' filepath='include/net/neighbour.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='entry_size' type-id='type-id-5' visibility='default' filepath='include/net/neighbour.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='key_len' type-id='type-id-5' visibility='default' filepath='include/net/neighbour.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='protocol' type-id='type-id-926' visibility='default' filepath='include/net/neighbour.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hash' type-id='type-id-5917' visibility='default' filepath='include/net/neighbour.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='key_eq' type-id='type-id-5918' visibility='default' filepath='include/net/neighbour.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='constructor' type-id='type-id-5919' visibility='default' filepath='include/net/neighbour.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pconstructor' type-id='type-id-5920' visibility='default' filepath='include/net/neighbour.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pdestructor' type-id='type-id-5921' visibility='default' filepath='include/net/neighbour.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='proxy_redo' type-id='type-id-1770' visibility='default' filepath='include/net/neighbour.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='id' type-id='type-id-2' visibility='default' filepath='include/net/neighbour.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='parms' type-id='type-id-5922' visibility='default' filepath='include/net/neighbour.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='parms_list' type-id='type-id-20' visibility='default' filepath='include/net/neighbour.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='gc_interval' type-id='type-id-17' visibility='default' filepath='include/net/neighbour.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='gc_thresh1' type-id='type-id-17' visibility='default' filepath='include/net/neighbour.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='gc_thresh2' type-id='type-id-17' visibility='default' filepath='include/net/neighbour.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='gc_thresh3' type-id='type-id-17' visibility='default' filepath='include/net/neighbour.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='last_flush' type-id='type-id-16' visibility='default' filepath='include/net/neighbour.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='gc_work' type-id='type-id-411' visibility='default' filepath='include/net/neighbour.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='proxy_timer' type-id='type-id-417' visibility='default' filepath='include/net/neighbour.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='proxy_queue' type-id='type-id-1661' visibility='default' filepath='include/net/neighbour.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='entries' type-id='type-id-26' visibility='default' filepath='include/net/neighbour.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3296'>
+          <var-decl name='lock' type-id='type-id-885' visibility='default' filepath='include/net/neighbour.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='last_rand' type-id='type-id-16' visibility='default' filepath='include/net/neighbour.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='stats' type-id='type-id-5923' visibility='default' filepath='include/net/neighbour.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='nht' type-id='type-id-5924' visibility='default' filepath='include/net/neighbour.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='phash_buckets' type-id='type-id-5925' visibility='default' filepath='include/net/neighbour.h' line='221' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pneigh_entry' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/neighbour.h' line='170' column='1' id='type-id-5926'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='type-id-5927' visibility='default' filepath='include/net/neighbour.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='net' type-id='type-id-1692' visibility='default' filepath='include/net/neighbour.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='type-id-1650' visibility='default' filepath='include/net/neighbour.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='type-id-214' visibility='default' filepath='include/net/neighbour.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='key' type-id='type-id-5884' visibility='default' filepath='include/net/neighbour.h' line='175' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='neigh_parms' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/net/neighbour.h' line='70' column='1' id='type-id-5922'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='net' type-id='type-id-1692' visibility='default' filepath='include/net/neighbour.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='type-id-1650' visibility='default' filepath='include/net/neighbour.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/net/neighbour.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='neigh_setup' type-id='type-id-5919' visibility='default' filepath='include/net/neighbour.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='neigh_cleanup' type-id='type-id-5928' visibility='default' filepath='include/net/neighbour.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tbl' type-id='type-id-5912' visibility='default' filepath='include/net/neighbour.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sysctl_table' type-id='type-id-15' visibility='default' filepath='include/net/neighbour.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dead' type-id='type-id-17' visibility='default' filepath='include/net/neighbour.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='refcnt' type-id='type-id-421' visibility='default' filepath='include/net/neighbour.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='callback_head' type-id='type-id-385' visibility='default' filepath='include/net/neighbour.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='reachable_time' type-id='type-id-17' visibility='default' filepath='include/net/neighbour.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='data' type-id='type-id-5879' visibility='default' filepath='include/net/neighbour.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='data_state' type-id='type-id-491' visibility='default' filepath='include/net/neighbour.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='neigh_statistics' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/net/neighbour.h' line='113' column='1' id='type-id-5929'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='allocs' type-id='type-id-16' visibility='default' filepath='include/net/neighbour.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='destroys' type-id='type-id-16' visibility='default' filepath='include/net/neighbour.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hash_grows' type-id='type-id-16' visibility='default' filepath='include/net/neighbour.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='res_failed' type-id='type-id-16' visibility='default' filepath='include/net/neighbour.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lookups' type-id='type-id-16' visibility='default' filepath='include/net/neighbour.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hits' type-id='type-id-16' visibility='default' filepath='include/net/neighbour.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rcv_probes_mcast' type-id='type-id-16' visibility='default' filepath='include/net/neighbour.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rcv_probes_ucast' type-id='type-id-16' visibility='default' filepath='include/net/neighbour.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='periodic_gc_runs' type-id='type-id-16' visibility='default' filepath='include/net/neighbour.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='forced_gc_runs' type-id='type-id-16' visibility='default' filepath='include/net/neighbour.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='unres_discards' type-id='type-id-16' visibility='default' filepath='include/net/neighbour.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='table_fulls' type-id='type-id-16' visibility='default' filepath='include/net/neighbour.h' line='130' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='neigh_hash_table' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/neighbour.h' line='184' column='1' id='type-id-5930'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hash_buckets' type-id='type-id-5931' visibility='default' filepath='include/net/neighbour.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hash_shift' type-id='type-id-5' visibility='default' filepath='include/net/neighbour.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='hash_rnd' type-id='type-id-4448' visibility='default' filepath='include/net/neighbour.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/net/neighbour.h' line='188' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='neigh_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/neighbour.h' line='162' column='1' id='type-id-5932'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='type-id-17' visibility='default' filepath='include/net/neighbour.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='solicit' type-id='type-id-5933' visibility='default' filepath='include/net/neighbour.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='error_report' type-id='type-id-5933' visibility='default' filepath='include/net/neighbour.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='output' type-id='type-id-5914' visibility='default' filepath='include/net/neighbour.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='connected_output' type-id='type-id-5914' visibility='default' filepath='include/net/neighbour.h' line='167' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='tcp_ca_event' filepath='include/net/tcp.h' line='955' column='1' id='type-id-5934'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='CA_EVENT_TX_START' value='0'/>
+        <enumerator name='CA_EVENT_CWND_RESTART' value='1'/>
+        <enumerator name='CA_EVENT_COMPLETE_CWR' value='2'/>
+        <enumerator name='CA_EVENT_LOSS' value='3'/>
+        <enumerator name='CA_EVENT_ECN_NO_CE' value='4'/>
+        <enumerator name='CA_EVENT_ECN_IS_CE' value='5'/>
+      </enum-decl>
+      <class-decl name='ack_sample' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/net/tcp.h' line='987' column='1' id='type-id-5935'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pkts_acked' type-id='type-id-7' visibility='default' filepath='include/net/tcp.h' line='988' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='rtt_us' type-id='type-id-738' visibility='default' filepath='include/net/tcp.h' line='989' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='in_flight' type-id='type-id-7' visibility='default' filepath='include/net/tcp.h' line='990' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rate_sample' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/net/tcp.h' line='1001' column='1' id='type-id-5936'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prior_mstamp' type-id='type-id-40' visibility='default' filepath='include/net/tcp.h' line='1002' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prior_delivered' type-id='type-id-7' visibility='default' filepath='include/net/tcp.h' line='1003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='delivered' type-id='type-id-738' visibility='default' filepath='include/net/tcp.h' line='1004' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='interval_us' type-id='type-id-192' visibility='default' filepath='include/net/tcp.h' line='1005' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='snd_interval_us' type-id='type-id-7' visibility='default' filepath='include/net/tcp.h' line='1006' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='rcv_interval_us' type-id='type-id-7' visibility='default' filepath='include/net/tcp.h' line='1007' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rtt_us' type-id='type-id-192' visibility='default' filepath='include/net/tcp.h' line='1008' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='losses' type-id='type-id-17' visibility='default' filepath='include/net/tcp.h' line='1009' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='acked_sacked' type-id='type-id-7' visibility='default' filepath='include/net/tcp.h' line='1010' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='prior_in_flight' type-id='type-id-7' visibility='default' filepath='include/net/tcp.h' line='1011' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='is_app_limited' type-id='type-id-33' visibility='default' filepath='include/net/tcp.h' line='1012' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='424'>
+          <var-decl name='is_retrans' type-id='type-id-33' visibility='default' filepath='include/net/tcp.h' line='1013' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='432'>
+          <var-decl name='is_ack_delayed' type-id='type-id-33' visibility='default' filepath='include/net/tcp.h' line='1014' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib6_node' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/ip6_fib.h' line='71' column='1' id='type-id-5937'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='parent' type-id='type-id-5938' visibility='default' filepath='include/net/ip6_fib.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='left' type-id='type-id-5938' visibility='default' filepath='include/net/ip6_fib.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='right' type-id='type-id-5938' visibility='default' filepath='include/net/ip6_fib.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='leaf' type-id='type-id-2265' visibility='default' filepath='include/net/ip6_fib.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fn_bit' type-id='type-id-108' visibility='default' filepath='include/net/ip6_fib.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='fn_flags' type-id='type-id-108' visibility='default' filepath='include/net/ip6_fib.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='fn_sernum' type-id='type-id-17' visibility='default' filepath='include/net/ip6_fib.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rr_ptr' type-id='type-id-2265' visibility='default' filepath='include/net/ip6_fib.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/net/ip6_fib.h' line='84' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dst_metrics' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/dst.h' line='93' column='1' id='type-id-5939'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='metrics' type-id='type-id-4472' visibility='default' filepath='include/net/dst.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='refcnt' type-id='type-id-421' visibility='default' filepath='include/net/dst.h' line='95' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rt6key' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/net/ip6_fib.h' line='103' column='1' id='type-id-5940'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='type-id-2251' visibility='default' filepath='include/net/ip6_fib.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='plen' type-id='type-id-17' visibility='default' filepath='include/net/ip6_fib.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rt6_info' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/net/ip6_fib.h' line='181' column='1' id='type-id-5941'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dst' type-id='type-id-5723' visibility='default' filepath='include/net/ip6_fib.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='from' type-id='type-id-2265' visibility='default' filepath='include/net/ip6_fib.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='rt6i_dst' type-id='type-id-5940' visibility='default' filepath='include/net/ip6_fib.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='rt6i_src' type-id='type-id-5940' visibility='default' filepath='include/net/ip6_fib.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='rt6i_gateway' type-id='type-id-2251' visibility='default' filepath='include/net/ip6_fib.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='rt6i_idev' type-id='type-id-5942' visibility='default' filepath='include/net/ip6_fib.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='rt6i_flags' type-id='type-id-7' visibility='default' filepath='include/net/ip6_fib.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='rt6i_prefsrc' type-id='type-id-5940' visibility='default' filepath='include/net/ip6_fib.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='rt6i_uncached' type-id='type-id-20' visibility='default' filepath='include/net/ip6_fib.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='rt6i_uncached_list' type-id='type-id-5943' visibility='default' filepath='include/net/ip6_fib.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='rt6i_nfheader_len' type-id='type-id-312' visibility='default' filepath='include/net/ip6_fib.h' line='196' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet6_dev' size-in-bits='4864' is-struct='yes' visibility='default' filepath='include/net/if_inet6.h' line='166' column='1' id='type-id-5944'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='type-id-1650' visibility='default' filepath='include/net/if_inet6.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='addr_list' type-id='type-id-20' visibility='default' filepath='include/net/if_inet6.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mc_list' type-id='type-id-5945' visibility='default' filepath='include/net/if_inet6.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mc_tomb' type-id='type-id-5945' visibility='default' filepath='include/net/if_inet6.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mc_lock' type-id='type-id-247' visibility='default' filepath='include/net/if_inet6.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='mc_qrv' type-id='type-id-216' visibility='default' filepath='include/net/if_inet6.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='360'>
+          <var-decl name='mc_gq_running' type-id='type-id-216' visibility='default' filepath='include/net/if_inet6.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='368'>
+          <var-decl name='mc_ifc_count' type-id='type-id-216' visibility='default' filepath='include/net/if_inet6.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='376'>
+          <var-decl name='mc_dad_count' type-id='type-id-216' visibility='default' filepath='include/net/if_inet6.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mc_v1_seen' type-id='type-id-16' visibility='default' filepath='include/net/if_inet6.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mc_qi' type-id='type-id-16' visibility='default' filepath='include/net/if_inet6.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='mc_qri' type-id='type-id-16' visibility='default' filepath='include/net/if_inet6.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mc_maxdelay' type-id='type-id-16' visibility='default' filepath='include/net/if_inet6.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mc_gq_timer' type-id='type-id-417' visibility='default' filepath='include/net/if_inet6.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='mc_ifc_timer' type-id='type-id-417' visibility='default' filepath='include/net/if_inet6.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='mc_dad_timer' type-id='type-id-417' visibility='default' filepath='include/net/if_inet6.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='ac_list' type-id='type-id-5946' visibility='default' filepath='include/net/if_inet6.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='lock' type-id='type-id-885' visibility='default' filepath='include/net/if_inet6.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='refcnt' type-id='type-id-421' visibility='default' filepath='include/net/if_inet6.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1760'>
+          <var-decl name='if_flags' type-id='type-id-511' visibility='default' filepath='include/net/if_inet6.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='dead' type-id='type-id-17' visibility='default' filepath='include/net/if_inet6.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='desync_factor' type-id='type-id-7' visibility='default' filepath='include/net/if_inet6.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='rndid' type-id='type-id-1186' visibility='default' filepath='include/net/if_inet6.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='tempaddr_list' type-id='type-id-20' visibility='default' filepath='include/net/if_inet6.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='token' type-id='type-id-2251' visibility='default' filepath='include/net/if_inet6.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='nd_parms' type-id='type-id-5913' visibility='default' filepath='include/net/if_inet6.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='cnf' type-id='type-id-1030' visibility='default' filepath='include/net/if_inet6.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='stats' type-id='type-id-5947' visibility='default' filepath='include/net/if_inet6.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='rs_timer' type-id='type-id-417' visibility='default' filepath='include/net/if_inet6.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='rs_interval' type-id='type-id-653' visibility='default' filepath='include/net/if_inet6.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4640'>
+          <var-decl name='rs_probes' type-id='type-id-895' visibility='default' filepath='include/net/if_inet6.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='tstamp' type-id='type-id-16' visibility='default' filepath='include/net/if_inet6.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/net/if_inet6.h' line='210' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ifmcaddr6' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/net/if_inet6.h' line='119' column='1' id='type-id-5948'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mca_addr' type-id='type-id-2251' visibility='default' filepath='include/net/if_inet6.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='idev' type-id='type-id-5942' visibility='default' filepath='include/net/if_inet6.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='next' type-id='type-id-5945' visibility='default' filepath='include/net/if_inet6.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mca_sources' type-id='type-id-5949' visibility='default' filepath='include/net/if_inet6.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mca_tomb' type-id='type-id-5949' visibility='default' filepath='include/net/if_inet6.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mca_sfmode' type-id='type-id-5' visibility='default' filepath='include/net/if_inet6.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='mca_crcount' type-id='type-id-216' visibility='default' filepath='include/net/if_inet6.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mca_sfcount' type-id='type-id-219' visibility='default' filepath='include/net/if_inet6.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mca_timer' type-id='type-id-417' visibility='default' filepath='include/net/if_inet6.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='mca_flags' type-id='type-id-5' visibility='default' filepath='include/net/if_inet6.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='mca_users' type-id='type-id-17' visibility='default' filepath='include/net/if_inet6.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='mca_refcnt' type-id='type-id-421' visibility='default' filepath='include/net/if_inet6.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='mca_lock' type-id='type-id-247' visibility='default' filepath='include/net/if_inet6.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='mca_cstamp' type-id='type-id-16' visibility='default' filepath='include/net/if_inet6.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='mca_tstamp' type-id='type-id-16' visibility='default' filepath='include/net/if_inet6.h' line='134' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ip6_sf_list' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/if_inet6.h' line='104' column='1' id='type-id-5950'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sf_next' type-id='type-id-5949' visibility='default' filepath='include/net/if_inet6.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sf_addr' type-id='type-id-2251' visibility='default' filepath='include/net/if_inet6.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sf_count' type-id='type-id-219' visibility='default' filepath='include/net/if_inet6.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sf_gsresp' type-id='type-id-216' visibility='default' filepath='include/net/if_inet6.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='328'>
+          <var-decl name='sf_oldin' type-id='type-id-216' visibility='default' filepath='include/net/if_inet6.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='sf_crcount' type-id='type-id-216' visibility='default' filepath='include/net/if_inet6.h' line='110' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ifacaddr6' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/net/if_inet6.h' line='145' column='1' id='type-id-5951'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='aca_addr' type-id='type-id-2251' visibility='default' filepath='include/net/if_inet6.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='aca_rt' type-id='type-id-2265' visibility='default' filepath='include/net/if_inet6.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='aca_next' type-id='type-id-5946' visibility='default' filepath='include/net/if_inet6.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='aca_users' type-id='type-id-17' visibility='default' filepath='include/net/if_inet6.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='aca_refcnt' type-id='type-id-421' visibility='default' filepath='include/net/if_inet6.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='aca_cstamp' type-id='type-id-16' visibility='default' filepath='include/net/if_inet6.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='aca_tstamp' type-id='type-id-16' visibility='default' filepath='include/net/if_inet6.h' line='152' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ipv6_devstat' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/if_inet6.h' line='159' column='1' id='type-id-5947'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='proc_dir_entry' type-id='type-id-262' visibility='default' filepath='include/net/if_inet6.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ipv6' type-id='type-id-2206' visibility='default' filepath='include/net/if_inet6.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='icmpv6dev' type-id='type-id-5952' visibility='default' filepath='include/net/if_inet6.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='icmpv6msgdev' type-id='type-id-5953' visibility='default' filepath='include/net/if_inet6.h' line='163' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='icmpv6_mib_device' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/snmp.h' line='80' column='1' id='type-id-5954'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='type-id-5868' visibility='default' filepath='include/net/snmp.h' line='81' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='icmpv6msg_mib_device' size-in-bits='32768' is-struct='yes' visibility='default' filepath='include/net/snmp.h' line='90' column='1' id='type-id-5955'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='type-id-950' visibility='default' filepath='include/net/snmp.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rt6_exception_bucket' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/ip6_fib.h' line='110' column='1' id='type-id-5956'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chain' type-id='type-id-186' visibility='default' filepath='include/net/ip6_fib.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='depth' type-id='type-id-17' visibility='default' filepath='include/net/ip6_fib.h' line='112' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib6_nh' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/ip6_fib.h' line='126' column='1' id='type-id-5957'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nh_gw' type-id='type-id-2251' visibility='default' filepath='include/net/ip6_fib.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nh_dev' type-id='type-id-1650' visibility='default' filepath='include/net/ip6_fib.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nh_lwtstate' type-id='type-id-5726' visibility='default' filepath='include/net/ip6_fib.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='nh_flags' type-id='type-id-5' visibility='default' filepath='include/net/ip6_fib.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='nh_upper_bound' type-id='type-id-26' visibility='default' filepath='include/net/ip6_fib.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='nh_weight' type-id='type-id-17' visibility='default' filepath='include/net/ip6_fib.h' line='133' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_state' size-in-bits='6016' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='136' column='1' id='type-id-5958'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='xs_net' type-id='type-id-1692' visibility='default' filepath='include/net/xfrm.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='type-id-5959' visibility='default' filepath='include/net/xfrm.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bysrc' type-id='type-id-520' visibility='default' filepath='include/net/xfrm.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='byspi' type-id='type-id-520' visibility='default' filepath='include/net/xfrm.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='refcnt' type-id='type-id-421' visibility='default' filepath='include/net/xfrm.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='include/net/xfrm.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='id' type-id='type-id-5907' visibility='default' filepath='include/net/xfrm.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sel' type-id='type-id-5898' visibility='default' filepath='include/net/xfrm.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='mark' type-id='type-id-5897' visibility='default' filepath='include/net/xfrm.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='if_id' type-id='type-id-7' visibility='default' filepath='include/net/xfrm.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='tfcpad' type-id='type-id-7' visibility='default' filepath='include/net/xfrm.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='genid' type-id='type-id-7' visibility='default' filepath='include/net/xfrm.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='km' type-id='type-id-5960' visibility='default' filepath='include/net/xfrm.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='props' type-id='type-id-5961' visibility='default' filepath='include/net/xfrm.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='lft' type-id='type-id-5899' visibility='default' filepath='include/net/xfrm.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='aalg' type-id='type-id-5962' visibility='default' filepath='include/net/xfrm.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='ealg' type-id='type-id-5963' visibility='default' filepath='include/net/xfrm.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='calg' type-id='type-id-5963' visibility='default' filepath='include/net/xfrm.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='aead' type-id='type-id-5964' visibility='default' filepath='include/net/xfrm.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='geniv' type-id='type-id-4' visibility='default' filepath='include/net/xfrm.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='encap' type-id='type-id-5965' visibility='default' filepath='include/net/xfrm.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='coaddr' type-id='type-id-5966' visibility='default' filepath='include/net/xfrm.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='tunnel' type-id='type-id-5233' visibility='default' filepath='include/net/xfrm.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='tunnel_users' type-id='type-id-26' visibility='default' filepath='include/net/xfrm.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2976'>
+          <var-decl name='replay' type-id='type-id-5967' visibility='default' filepath='include/net/xfrm.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='replay_esn' type-id='type-id-5968' visibility='default' filepath='include/net/xfrm.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='preplay' type-id='type-id-5967' visibility='default' filepath='include/net/xfrm.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='preplay_esn' type-id='type-id-5968' visibility='default' filepath='include/net/xfrm.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='repl' type-id='type-id-5969' visibility='default' filepath='include/net/xfrm.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='xflags' type-id='type-id-7' visibility='default' filepath='include/net/xfrm.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3424'>
+          <var-decl name='replay_maxage' type-id='type-id-7' visibility='default' filepath='include/net/xfrm.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='replay_maxdiff' type-id='type-id-7' visibility='default' filepath='include/net/xfrm.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='rtimer' type-id='type-id-417' visibility='default' filepath='include/net/xfrm.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='stats' type-id='type-id-5970' visibility='default' filepath='include/net/xfrm.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='curlft' type-id='type-id-5900' visibility='default' filepath='include/net/xfrm.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='mtimer' type-id='type-id-5971' visibility='default' filepath='include/net/xfrm.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='xso' type-id='type-id-5972' visibility='default' filepath='include/net/xfrm.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='saved_tmo' type-id='type-id-192' visibility='default' filepath='include/net/xfrm.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='lastused' type-id='type-id-1341' visibility='default' filepath='include/net/xfrm.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='xfrag' type-id='type-id-1536' visibility='default' filepath='include/net/xfrm.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='type' type-id='type-id-5872' visibility='default' filepath='include/net/xfrm.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='inner_mode' type-id='type-id-5886' visibility='default' filepath='include/net/xfrm.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='inner_mode_iaf' type-id='type-id-5886' visibility='default' filepath='include/net/xfrm.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='outer_mode' type-id='type-id-5886' visibility='default' filepath='include/net/xfrm.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='type_offload' type-id='type-id-5875' visibility='default' filepath='include/net/xfrm.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='security' type-id='type-id-5903' visibility='default' filepath='include/net/xfrm.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='data' type-id='type-id-15' visibility='default' filepath='include/net/xfrm.h' line='248' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_state_walk' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='119' column='1' id='type-id-5960'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='all' type-id='type-id-20' visibility='default' filepath='include/net/xfrm.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='state' type-id='type-id-214' visibility='default' filepath='include/net/xfrm.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='dying' type-id='type-id-214' visibility='default' filepath='include/net/xfrm.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='proto' type-id='type-id-214' visibility='default' filepath='include/net/xfrm.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='seq' type-id='type-id-7' visibility='default' filepath='include/net/xfrm.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='filter' type-id='type-id-5973' visibility='default' filepath='include/net/xfrm.h' line='125' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_address_filter' size-in-bits='288' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='495' column='1' id='type-id-5974'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='saddr' type-id='type-id-5904' visibility='default' filepath='include/uapi/linux/xfrm.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='daddr' type-id='type-id-5904' visibility='default' filepath='include/uapi/linux/xfrm.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='family' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/xfrm.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='splen' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/xfrm.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='280'>
+          <var-decl name='dplen' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/xfrm.h' line='500' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='384' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/xfrm.h' line='160' column='1' id='type-id-5961'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reqid' type-id='type-id-7' visibility='default' filepath='include/net/xfrm.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='mode' type-id='type-id-214' visibility='default' filepath='include/net/xfrm.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='replay_window' type-id='type-id-214' visibility='default' filepath='include/net/xfrm.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='aalgo' type-id='type-id-214' visibility='default' filepath='include/net/xfrm.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='ealgo' type-id='type-id-214' visibility='default' filepath='include/net/xfrm.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='calgo' type-id='type-id-214' visibility='default' filepath='include/net/xfrm.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='flags' type-id='type-id-214' visibility='default' filepath='include/net/xfrm.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='family' type-id='type-id-688' visibility='default' filepath='include/net/xfrm.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='saddr' type-id='type-id-5904' visibility='default' filepath='include/net/xfrm.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='header_len' type-id='type-id-17' visibility='default' filepath='include/net/xfrm.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='trailer_len' type-id='type-id-17' visibility='default' filepath='include/net/xfrm.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='extra_flags' type-id='type-id-7' visibility='default' filepath='include/net/xfrm.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='smark' type-id='type-id-5897' visibility='default' filepath='include/net/xfrm.h' line='171' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_algo_auth' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='108' column='1' id='type-id-5975'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alg_name' type-id='type-id-250' visibility='default' filepath='include/uapi/linux/xfrm.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='alg_key_len' type-id='type-id-5' visibility='default' filepath='include/uapi/linux/xfrm.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='alg_trunc_len' type-id='type-id-5' visibility='default' filepath='include/uapi/linux/xfrm.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='alg_key' type-id='type-id-440' visibility='default' filepath='include/uapi/linux/xfrm.h' line='112' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_algo' size-in-bits='544' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='102' column='1' id='type-id-5976'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alg_name' type-id='type-id-250' visibility='default' filepath='include/uapi/linux/xfrm.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='alg_key_len' type-id='type-id-5' visibility='default' filepath='include/uapi/linux/xfrm.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='alg_key' type-id='type-id-440' visibility='default' filepath='include/uapi/linux/xfrm.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_algo_aead' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='115' column='1' id='type-id-5977'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alg_name' type-id='type-id-250' visibility='default' filepath='include/uapi/linux/xfrm.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='alg_key_len' type-id='type-id-5' visibility='default' filepath='include/uapi/linux/xfrm.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='alg_icv_len' type-id='type-id-5' visibility='default' filepath='include/uapi/linux/xfrm.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='alg_key' type-id='type-id-440' visibility='default' filepath='include/uapi/linux/xfrm.h' line='119' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_encap_tmpl' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='249' column='1' id='type-id-5978'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='encap_type' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/xfrm.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='encap_sport' type-id='type-id-926' visibility='default' filepath='include/uapi/linux/xfrm.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='encap_dport' type-id='type-id-926' visibility='default' filepath='include/uapi/linux/xfrm.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='encap_oa' type-id='type-id-5904' visibility='default' filepath='include/uapi/linux/xfrm.h' line='253' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_replay_state' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='84' column='1' id='type-id-5967'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='oseq' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/xfrm.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='seq' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/xfrm.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bitmap' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/xfrm.h' line='87' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_replay_state_esn' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='92' column='1' id='type-id-5979'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bmp_len' type-id='type-id-5' visibility='default' filepath='include/uapi/linux/xfrm.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='oseq' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/xfrm.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='seq' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/xfrm.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='oseq_hi' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/xfrm.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='seq_hi' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/xfrm.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='replay_window' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/xfrm.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bmp' type-id='type-id-936' visibility='default' filepath='include/uapi/linux/xfrm.h' line='99' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_replay' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='285' column='1' id='type-id-5980'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='advance' type-id='type-id-5981' visibility='default' filepath='include/net/xfrm.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='check' type-id='type-id-5982' visibility='default' filepath='include/net/xfrm.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='recheck' type-id='type-id-5982' visibility='default' filepath='include/net/xfrm.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='notify' type-id='type-id-5983' visibility='default' filepath='include/net/xfrm.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='overflow' type-id='type-id-5984' visibility='default' filepath='include/net/xfrm.h' line='294' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_stats' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='122' column='1' id='type-id-5970'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='replay_window' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/xfrm.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='replay' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/xfrm.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='integrity_failed' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/xfrm.h' line='125' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tasklet_hrtimer' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/linux/interrupt.h' line='626' column='1' id='type-id-5971'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timer' type-id='type-id-681' visibility='default' filepath='include/linux/interrupt.h' line='627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='tasklet' type-id='type-id-3298' visibility='default' filepath='include/linux/interrupt.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='function' type-id='type-id-1553' visibility='default' filepath='include/linux/interrupt.h' line='629' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_state_offload' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='128' column='1' id='type-id-5972'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='type-id-1650' visibility='default' filepath='include/net/xfrm.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='offload_handle' type-id='type-id-16' visibility='default' filepath='include/net/xfrm.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='num_exthdrs' type-id='type-id-5' visibility='default' filepath='include/net/xfrm.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flags' type-id='type-id-214' visibility='default' filepath='include/net/xfrm.h' line='132' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_type' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='390' column='1' id='type-id-5985'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='description' type-id='type-id-2' visibility='default' filepath='include/net/xfrm.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='include/net/xfrm.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='proto' type-id='type-id-214' visibility='default' filepath='include/net/xfrm.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='flags' type-id='type-id-214' visibility='default' filepath='include/net/xfrm.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='init_state' type-id='type-id-5986' visibility='default' filepath='include/net/xfrm.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='destructor' type-id='type-id-5987' visibility='default' filepath='include/net/xfrm.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='input' type-id='type-id-5984' visibility='default' filepath='include/net/xfrm.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='output' type-id='type-id-5984' visibility='default' filepath='include/net/xfrm.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='reject' type-id='type-id-5988' visibility='default' filepath='include/net/xfrm.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='hdr_offset' type-id='type-id-5989' visibility='default' filepath='include/net/xfrm.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_mtu' type-id='type-id-5990' visibility='default' filepath='include/net/xfrm.h' line='408' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_mode' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='426' column='1' id='type-id-5991'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='input2' type-id='type-id-5984' visibility='default' filepath='include/net/xfrm.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='input' type-id='type-id-5984' visibility='default' filepath='include/net/xfrm.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='output2' type-id='type-id-5984' visibility='default' filepath='include/net/xfrm.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='output' type-id='type-id-5984' visibility='default' filepath='include/net/xfrm.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='gso_segment' type-id='type-id-5992' visibility='default' filepath='include/net/xfrm.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='xmit' type-id='type-id-5993' visibility='default' filepath='include/net/xfrm.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='afinfo' type-id='type-id-5994' visibility='default' filepath='include/net/xfrm.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='include/net/xfrm.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='encap' type-id='type-id-5' visibility='default' filepath='include/net/xfrm.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='flags' type-id='type-id-17' visibility='default' filepath='include/net/xfrm.h' line='487' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_state_afinfo' size-in-bits='33984' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='344' column='1' id='type-id-5995'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='type-id-5' visibility='default' filepath='include/net/xfrm.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='proto' type-id='type-id-5' visibility='default' filepath='include/net/xfrm.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='eth_proto' type-id='type-id-926' visibility='default' filepath='include/net/xfrm.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='include/net/xfrm.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='type_map' type-id='type-id-5873' visibility='default' filepath='include/net/xfrm.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16576'>
+          <var-decl name='type_offload_map' type-id='type-id-5876' visibility='default' filepath='include/net/xfrm.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32960'>
+          <var-decl name='mode_map' type-id='type-id-5887' visibility='default' filepath='include/net/xfrm.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33280'>
+          <var-decl name='init_flags' type-id='type-id-5986' visibility='default' filepath='include/net/xfrm.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33344'>
+          <var-decl name='init_tempsel' type-id='type-id-5996' visibility='default' filepath='include/net/xfrm.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33408'>
+          <var-decl name='init_temprop' type-id='type-id-5997' visibility='default' filepath='include/net/xfrm.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33472'>
+          <var-decl name='tmpl_sort' type-id='type-id-5998' visibility='default' filepath='include/net/xfrm.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33536'>
+          <var-decl name='state_sort' type-id='type-id-5999' visibility='default' filepath='include/net/xfrm.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33600'>
+          <var-decl name='output' type-id='type-id-2281' visibility='default' filepath='include/net/xfrm.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33664'>
+          <var-decl name='output_finish' type-id='type-id-5672' visibility='default' filepath='include/net/xfrm.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33728'>
+          <var-decl name='extract_input' type-id='type-id-5984' visibility='default' filepath='include/net/xfrm.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33792'>
+          <var-decl name='extract_output' type-id='type-id-5984' visibility='default' filepath='include/net/xfrm.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33856'>
+          <var-decl name='transport_finish' type-id='type-id-6000' visibility='default' filepath='include/net/xfrm.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33920'>
+          <var-decl name='local_error' type-id='type-id-6001' visibility='default' filepath='include/net/xfrm.h' line='370' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_type_offload' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='414' column='1' id='type-id-6002'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='description' type-id='type-id-2' visibility='default' filepath='include/net/xfrm.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='type-id-260' visibility='default' filepath='include/net/xfrm.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='proto' type-id='type-id-214' visibility='default' filepath='include/net/xfrm.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='encap' type-id='type-id-5993' visibility='default' filepath='include/net/xfrm.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='input_tail' type-id='type-id-5984' visibility='default' filepath='include/net/xfrm.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='xmit' type-id='type-id-6003' visibility='default' filepath='include/net/xfrm.h' line='420' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='timeval' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/time.h' line='16' column='1' id='type-id-6004'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tv_sec' type-id='type-id-1573' visibility='default' filepath='include/uapi/linux/time.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tv_usec' type-id='type-id-6005' visibility='default' filepath='include/uapi/linux/time.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__kernel_suseconds_t' type-id='type-id-105' filepath='include/uapi/asm-generic/posix_types.h' line='41' column='1' id='type-id-6005'/>
+      <qualified-type-def type-id='type-id-5935' const='yes' id='type-id-6006'/>
+      <pointer-type-def type-id='type-id-6006' size-in-bits='64' id='type-id-6007'/>
+      <qualified-type-def type-id='type-id-5745' const='yes' id='type-id-6008'/>
+      <pointer-type-def type-id='type-id-6008' size-in-bits='64' id='type-id-6009'/>
+      <qualified-type-def type-id='type-id-5909' const='yes' id='type-id-6010'/>
+      <pointer-type-def type-id='type-id-6010' size-in-bits='64' id='type-id-6011'/>
+      <qualified-type-def type-id='type-id-5932' const='yes' id='type-id-6012'/>
+      <pointer-type-def type-id='type-id-6012' size-in-bits='64' id='type-id-5915'/>
+      <qualified-type-def type-id='type-id-5910' const='yes' id='type-id-6013'/>
+      <pointer-type-def type-id='type-id-6013' size-in-bits='64' id='type-id-6014'/>
+      <qualified-type-def type-id='type-id-5870' const='yes' id='type-id-6015'/>
+      <pointer-type-def type-id='type-id-6015' size-in-bits='64' id='type-id-6016'/>
+      <qualified-type-def type-id='type-id-5936' const='yes' id='type-id-6017'/>
+      <pointer-type-def type-id='type-id-6017' size-in-bits='64' id='type-id-6018'/>
+      <qualified-type-def type-id='type-id-5904' const='yes' id='type-id-6019'/>
+      <pointer-type-def type-id='type-id-6019' size-in-bits='64' id='type-id-6020'/>
+      <qualified-type-def type-id='type-id-5980' const='yes' id='type-id-6021'/>
+      <pointer-type-def type-id='type-id-6021' size-in-bits='64' id='type-id-5969'/>
+      <qualified-type-def type-id='type-id-5888' const='yes' id='type-id-6022'/>
+      <pointer-type-def type-id='type-id-6022' size-in-bits='64' id='type-id-6023'/>
+      <qualified-type-def type-id='type-id-5985' const='yes' id='type-id-6024'/>
+      <pointer-type-def type-id='type-id-6024' size-in-bits='64' id='type-id-5872'/>
+      <qualified-type-def type-id='type-id-6002' const='yes' id='type-id-6025'/>
+      <pointer-type-def type-id='type-id-6025' size-in-bits='64' id='type-id-5875'/>
+      <pointer-type-def type-id='type-id-5869' size-in-bits='64' id='type-id-6026'/>
+      <pointer-type-def type-id='type-id-5939' size-in-bits='64' id='type-id-6027'/>
+      <pointer-type-def type-id='type-id-5937' size-in-bits='64' id='type-id-5938'/>
+      <pointer-type-def type-id='type-id-5954' size-in-bits='64' id='type-id-5952'/>
+      <pointer-type-def type-id='type-id-5955' size-in-bits='64' id='type-id-5953'/>
+      <pointer-type-def type-id='type-id-5951' size-in-bits='64' id='type-id-5946'/>
+      <pointer-type-def type-id='type-id-5948' size-in-bits='64' id='type-id-5945'/>
+      <pointer-type-def type-id='type-id-2251' size-in-bits='64' id='type-id-6028'/>
+      <pointer-type-def type-id='type-id-5944' size-in-bits='64' id='type-id-5942'/>
+      <pointer-type-def type-id='type-id-5894' size-in-bits='64' id='type-id-6029'/>
+      <pointer-type-def type-id='type-id-5893' size-in-bits='64' id='type-id-6030'/>
+      <pointer-type-def type-id='type-id-5877' size-in-bits='64' id='type-id-6031'/>
+      <pointer-type-def type-id='type-id-6032' size-in-bits='64' id='type-id-6033'/>
+      <pointer-type-def type-id='type-id-6034' size-in-bits='64' id='type-id-6035'/>
+      <pointer-type-def type-id='type-id-6036' size-in-bits='64' id='type-id-5919'/>
+      <pointer-type-def type-id='type-id-6037' size-in-bits='64' id='type-id-5914'/>
+      <pointer-type-def type-id='type-id-6038' size-in-bits='64' id='type-id-5920'/>
+      <pointer-type-def type-id='type-id-6039' size-in-bits='64' id='type-id-6000'/>
+      <pointer-type-def type-id='type-id-6040' size-in-bits='64' id='type-id-6041'/>
+      <pointer-type-def type-id='type-id-6042' size-in-bits='64' id='type-id-5986'/>
+      <pointer-type-def type-id='type-id-6043' size-in-bits='64' id='type-id-5999'/>
+      <pointer-type-def type-id='type-id-6044' size-in-bits='64' id='type-id-5984'/>
+      <pointer-type-def type-id='type-id-6045' size-in-bits='64' id='type-id-5988'/>
+      <pointer-type-def type-id='type-id-6046' size-in-bits='64' id='type-id-5982'/>
+      <pointer-type-def type-id='type-id-6047' size-in-bits='64' id='type-id-6003'/>
+      <pointer-type-def type-id='type-id-6048' size-in-bits='64' id='type-id-5989'/>
+      <pointer-type-def type-id='type-id-6049' size-in-bits='64' id='type-id-5998'/>
+      <pointer-type-def type-id='type-id-5950' size-in-bits='64' id='type-id-5949'/>
+      <pointer-type-def type-id='type-id-5908' size-in-bits='64' id='type-id-5881'/>
+      <pointer-type-def type-id='type-id-5909' size-in-bits='64' id='type-id-6050'/>
+      <pointer-type-def type-id='type-id-5930' size-in-bits='64' id='type-id-5924'/>
+      <pointer-type-def type-id='type-id-5922' size-in-bits='64' id='type-id-5913'/>
+      <pointer-type-def type-id='type-id-5929' size-in-bits='64' id='type-id-5923'/>
+      <pointer-type-def type-id='type-id-5916' size-in-bits='64' id='type-id-5912'/>
+      <pointer-type-def type-id='type-id-5910' size-in-bits='64' id='type-id-5911'/>
+      <pointer-type-def type-id='type-id-5911' size-in-bits='64' id='type-id-5931'/>
+      <pointer-type-def type-id='type-id-1536' size-in-bits='64' id='type-id-6051'/>
+      <pointer-type-def type-id='type-id-5926' size-in-bits='64' id='type-id-5927'/>
+      <pointer-type-def type-id='type-id-5927' size-in-bits='64' id='type-id-5925'/>
+      <pointer-type-def type-id='type-id-5956' size-in-bits='64' id='type-id-6052'/>
+      <pointer-type-def type-id='type-id-5941' size-in-bits='64' id='type-id-6053'/>
+      <pointer-type-def type-id='type-id-6053' size-in-bits='64' id='type-id-6054'/>
+      <pointer-type-def type-id='type-id-6055' size-in-bits='64' id='type-id-5992'/>
+      <pointer-type-def type-id='type-id-5885' size-in-bits='64' id='type-id-6056'/>
+      <pointer-type-def type-id='type-id-6004' size-in-bits='64' id='type-id-6057'/>
+      <pointer-type-def type-id='type-id-6058' size-in-bits='64' id='type-id-5917'/>
+      <pointer-type-def type-id='type-id-6059' size-in-bits='64' id='type-id-5918'/>
+      <pointer-type-def type-id='type-id-6060' size-in-bits='64' id='type-id-6061'/>
+      <pointer-type-def type-id='type-id-6062' size-in-bits='64' id='type-id-6063'/>
+      <pointer-type-def type-id='type-id-6064' size-in-bits='64' id='type-id-5990'/>
+      <pointer-type-def type-id='type-id-3121' size-in-bits='64' id='type-id-6065'/>
+      <pointer-type-def type-id='type-id-5871' size-in-bits='64' id='type-id-5943'/>
+      <pointer-type-def type-id='type-id-6066' size-in-bits='64' id='type-id-6067'/>
+      <pointer-type-def type-id='type-id-6068' size-in-bits='64' id='type-id-6069'/>
+      <pointer-type-def type-id='type-id-6070' size-in-bits='64' id='type-id-5928'/>
+      <pointer-type-def type-id='type-id-6071' size-in-bits='64' id='type-id-5933'/>
+      <pointer-type-def type-id='type-id-6072' size-in-bits='64' id='type-id-6073'/>
+      <pointer-type-def type-id='type-id-6074' size-in-bits='64' id='type-id-5921'/>
+      <pointer-type-def type-id='type-id-6075' size-in-bits='64' id='type-id-6001'/>
+      <pointer-type-def type-id='type-id-6076' size-in-bits='64' id='type-id-6077'/>
+      <pointer-type-def type-id='type-id-6078' size-in-bits='64' id='type-id-6079'/>
+      <pointer-type-def type-id='type-id-6080' size-in-bits='64' id='type-id-6081'/>
+      <pointer-type-def type-id='type-id-6082' size-in-bits='64' id='type-id-6083'/>
+      <pointer-type-def type-id='type-id-6084' size-in-bits='64' id='type-id-6085'/>
+      <pointer-type-def type-id='type-id-6086' size-in-bits='64' id='type-id-6087'/>
+      <pointer-type-def type-id='type-id-6088' size-in-bits='64' id='type-id-5996'/>
+      <pointer-type-def type-id='type-id-6089' size-in-bits='64' id='type-id-5987'/>
+      <pointer-type-def type-id='type-id-6090' size-in-bits='64' id='type-id-5997'/>
+      <pointer-type-def type-id='type-id-6091' size-in-bits='64' id='type-id-5983'/>
+      <pointer-type-def type-id='type-id-6092' size-in-bits='64' id='type-id-5993'/>
+      <pointer-type-def type-id='type-id-6093' size-in-bits='64' id='type-id-5981'/>
+      <pointer-type-def type-id='type-id-5974' size-in-bits='64' id='type-id-5973'/>
+      <pointer-type-def type-id='type-id-5904' size-in-bits='64' id='type-id-5966'/>
+      <pointer-type-def type-id='type-id-5976' size-in-bits='64' id='type-id-5963'/>
+      <pointer-type-def type-id='type-id-5977' size-in-bits='64' id='type-id-5964'/>
+      <pointer-type-def type-id='type-id-5975' size-in-bits='64' id='type-id-5962'/>
+      <pointer-type-def type-id='type-id-5978' size-in-bits='64' id='type-id-5965'/>
+      <pointer-type-def type-id='type-id-5991' size-in-bits='64' id='type-id-5886'/>
+      <pointer-type-def type-id='type-id-5896' size-in-bits='64' id='type-id-6094'/>
+      <pointer-type-def type-id='type-id-5979' size-in-bits='64' id='type-id-5968'/>
+      <pointer-type-def type-id='type-id-5906' size-in-bits='64' id='type-id-5903'/>
+      <pointer-type-def type-id='type-id-5898' size-in-bits='64' id='type-id-6095'/>
+      <pointer-type-def type-id='type-id-5958' size-in-bits='64' id='type-id-5233'/>
+      <pointer-type-def type-id='type-id-5233' size-in-bits='64' id='type-id-6096'/>
+      <pointer-type-def type-id='type-id-5995' size-in-bits='64' id='type-id-5994'/>
+      <pointer-type-def type-id='type-id-5888' size-in-bits='64' id='type-id-6097'/>
+      <pointer-type-def type-id='type-id-6097' size-in-bits='64' id='type-id-6098'/>
+      <function-decl name='sock_queue_rcv_skb' mangled-name='sock_queue_rcv_skb' filepath='net/core/sock.c' line='437' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_queue_rcv_skb'>
+        <parameter type-id='type-id-3666' name='sk' filepath='net/core/sock.c' line='437' column='1'/>
+        <parameter type-id='type-id-1768' name='skb' filepath='net/core/sock.c' line='437' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='release_sock' mangled-name='release_sock' filepath='net/core/sock.c' line='2851' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='release_sock'>
+        <parameter type-id='type-id-3666' name='sk' filepath='net/core/sock.c' line='2851' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='sk_alloc' mangled-name='sk_alloc' filepath='net/core/sock.c' line='1515' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sk_alloc'>
+        <parameter type-id='type-id-1645' name='net' filepath='net/core/sock.c' line='1515' column='1'/>
+        <parameter type-id='type-id-17' name='family' filepath='net/core/sock.c' line='1515' column='1'/>
+        <parameter type-id='type-id-485' name='priority' filepath='net/core/sock.c' line='1515' column='1'/>
+        <parameter type-id='type-id-5668' name='prot' filepath='net/core/sock.c' line='1516' column='1'/>
+        <parameter type-id='type-id-17' name='kern' filepath='net/core/sock.c' line='1516' column='1'/>
+        <return type-id='type-id-3666'/>
+      </function-decl>
+      <function-decl name='sk_free' mangled-name='sk_free' filepath='net/core/sock.c' line='1612' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sk_free'>
+        <parameter type-id='type-id-3666' name='sk' filepath='net/core/sock.c' line='1612' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='sock_efree' mangled-name='sock_efree' filepath='net/core/sock.c' line='1902' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_efree'>
+        <parameter type-id='type-id-1768' name='skb' filepath='net/core/sock.c' line='1902' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='sock_i_ino' mangled-name='sock_i_ino' filepath='net/core/sock.c' line='1919' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_i_ino'>
+        <parameter type-id='type-id-3666' name='sk' filepath='net/core/sock.c' line='1919' column='1'/>
+        <return type-id='type-id-16'/>
+      </function-decl>
+      <function-decl name='sock_alloc_send_skb' mangled-name='sock_alloc_send_skb' filepath='net/core/sock.c' line='2099' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_alloc_send_skb'>
+        <parameter type-id='type-id-3666' name='sk' filepath='net/core/sock.c' line='2099' column='1'/>
+        <parameter type-id='type-id-16' name='size' filepath='net/core/sock.c' line='2099' column='1'/>
+        <parameter type-id='type-id-17' name='noblock' filepath='net/core/sock.c' line='2100' column='1'/>
+        <parameter type-id='type-id-666' name='errcode' filepath='net/core/sock.c' line='2100' column='1'/>
+        <return type-id='type-id-1768'/>
+      </function-decl>
+      <function-decl name='skb_page_frag_refill' mangled-name='skb_page_frag_refill' filepath='net/core/sock.c' line='2200' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_page_frag_refill'>
+        <parameter type-id='type-id-5' name='sz' filepath='net/core/sock.c' line='2200' column='1'/>
+        <parameter type-id='type-id-6051' name='pfrag' filepath='net/core/sock.c' line='2200' column='1'/>
+        <parameter type-id='type-id-485' name='gfp' filepath='net/core/sock.c' line='2200' column='1'/>
+        <return type-id='type-id-33'/>
+      </function-decl>
+      <function-decl name='sock_no_bind' mangled-name='sock_no_bind' filepath='net/core/sock.c' line='2543' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_bind'>
+        <parameter type-id='type-id-5669' name='sock' filepath='net/core/sock.c' line='2543' column='1'/>
+        <parameter type-id='type-id-5851' name='saddr' filepath='net/core/sock.c' line='2543' column='1'/>
+        <parameter type-id='type-id-17' name='len' filepath='net/core/sock.c' line='2543' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='sock_no_connect' mangled-name='sock_no_connect' filepath='net/core/sock.c' line='2549' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_connect'>
+        <parameter type-id='type-id-5669' name='sock' filepath='net/core/sock.c' line='2549' column='1'/>
+        <parameter type-id='type-id-5851' name='saddr' filepath='net/core/sock.c' line='2549' column='1'/>
+        <parameter type-id='type-id-17' name='len' filepath='net/core/sock.c' line='2550' column='1'/>
+        <parameter type-id='type-id-17' name='flags' filepath='net/core/sock.c' line='2550' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='sock_no_socketpair' mangled-name='sock_no_socketpair' filepath='net/core/sock.c' line='2556' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_socketpair'>
+        <parameter type-id='type-id-5669' name='sock1' filepath='net/core/sock.c' line='2556' column='1'/>
+        <parameter type-id='type-id-5669' name='sock2' filepath='net/core/sock.c' line='2556' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='sock_no_accept' mangled-name='sock_no_accept' filepath='net/core/sock.c' line='2562' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_accept'>
+        <parameter type-id='type-id-5669' name='sock' filepath='net/core/sock.c' line='2562' column='1'/>
+        <parameter type-id='type-id-5669' name='newsock' filepath='net/core/sock.c' line='2562' column='1'/>
+        <parameter type-id='type-id-17' name='flags' filepath='net/core/sock.c' line='2562' column='1'/>
+        <parameter type-id='type-id-33' name='kern' filepath='net/core/sock.c' line='2563' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='sock_no_getname' mangled-name='sock_no_getname' filepath='net/core/sock.c' line='2569' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_getname'>
+        <parameter type-id='type-id-5669' name='sock' filepath='net/core/sock.c' line='2569' column='1'/>
+        <parameter type-id='type-id-5851' name='saddr' filepath='net/core/sock.c' line='2569' column='1'/>
+        <parameter type-id='type-id-17' name='peer' filepath='net/core/sock.c' line='2570' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='sock_no_ioctl' mangled-name='sock_no_ioctl' filepath='net/core/sock.c' line='2576' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_ioctl'>
+        <parameter type-id='type-id-5669' name='sock' filepath='net/core/sock.c' line='2576' column='1'/>
+        <parameter type-id='type-id-5' name='cmd' filepath='net/core/sock.c' line='2576' column='1'/>
+        <parameter type-id='type-id-16' name='arg' filepath='net/core/sock.c' line='2576' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='sock_no_listen' mangled-name='sock_no_listen' filepath='net/core/sock.c' line='2582' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_listen'>
+        <parameter type-id='type-id-5669' name='sock' filepath='net/core/sock.c' line='2582' column='1'/>
+        <parameter type-id='type-id-17' name='backlog' filepath='net/core/sock.c' line='2582' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='sock_no_shutdown' mangled-name='sock_no_shutdown' filepath='net/core/sock.c' line='2588' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_shutdown'>
+        <parameter type-id='type-id-5669' name='sock' filepath='net/core/sock.c' line='2588' column='1'/>
+        <parameter type-id='type-id-17' name='how' filepath='net/core/sock.c' line='2588' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='sock_no_setsockopt' mangled-name='sock_no_setsockopt' filepath='net/core/sock.c' line='2594' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_setsockopt'>
+        <parameter type-id='type-id-5669' name='sock' filepath='net/core/sock.c' line='2594' column='1'/>
+        <parameter type-id='type-id-17' name='level' filepath='net/core/sock.c' line='2594' column='1'/>
+        <parameter type-id='type-id-17' name='optname' filepath='net/core/sock.c' line='2594' column='1'/>
+        <parameter type-id='type-id-2' name='optval' filepath='net/core/sock.c' line='2595' column='1'/>
+        <parameter type-id='type-id-5' name='optlen' filepath='net/core/sock.c' line='2595' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='sock_no_getsockopt' mangled-name='sock_no_getsockopt' filepath='net/core/sock.c' line='2601' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_getsockopt'>
+        <parameter type-id='type-id-5669' name='sock' filepath='net/core/sock.c' line='2601' column='1'/>
+        <parameter type-id='type-id-17' name='level' filepath='net/core/sock.c' line='2601' column='1'/>
+        <parameter type-id='type-id-17' name='optname' filepath='net/core/sock.c' line='2601' column='1'/>
+        <parameter type-id='type-id-2' name='optval' filepath='net/core/sock.c' line='2602' column='1'/>
+        <parameter type-id='type-id-666' name='optlen' filepath='net/core/sock.c' line='2602' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='sock_no_mmap' mangled-name='sock_no_mmap' filepath='net/core/sock.c' line='2627' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_mmap'>
+        <parameter type-id='type-id-83' name='file' filepath='net/core/sock.c' line='2627' column='1'/>
+        <parameter type-id='type-id-5669' name='sock' filepath='net/core/sock.c' line='2627' column='1'/>
+        <parameter type-id='type-id-1209' name='vma' filepath='net/core/sock.c' line='2627' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='sock_no_sendpage' mangled-name='sock_no_sendpage' filepath='net/core/sock.c' line='2634' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_sendpage'>
+        <parameter type-id='type-id-5669' name='sock' filepath='net/core/sock.c' line='2634' column='1'/>
+        <parameter type-id='type-id-512' name='page' filepath='net/core/sock.c' line='2634' column='1'/>
+        <parameter type-id='type-id-17' name='offset' filepath='net/core/sock.c' line='2634' column='1'/>
+        <parameter type-id='type-id-84' name='size' filepath='net/core/sock.c' line='2634' column='1'/>
+        <parameter type-id='type-id-17' name='flags' filepath='net/core/sock.c' line='2634' column='1'/>
+        <return type-id='type-id-86'/>
+      </function-decl>
+      <function-decl name='sock_init_data' mangled-name='sock_init_data' filepath='net/core/sock.c' line='2754' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_init_data'>
+        <parameter type-id='type-id-5669' name='sock' filepath='net/core/sock.c' line='2754' column='1'/>
+        <parameter type-id='type-id-3666' name='sk' filepath='net/core/sock.c' line='2754' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='lock_sock_nested' mangled-name='lock_sock_nested' filepath='net/core/sock.c' line='2835' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lock_sock_nested'>
+        <parameter type-id='type-id-3666' name='sk' filepath='net/core/sock.c' line='2835' column='1'/>
+        <parameter type-id='type-id-17' name='subclass' filepath='net/core/sock.c' line='2835' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='sock_get_timestamp' mangled-name='sock_get_timestamp' filepath='net/core/sock.c' line='2906' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_get_timestamp'>
+        <parameter type-id='type-id-3666' name='sk' filepath='net/core/sock.c' line='2906' column='1'/>
+        <parameter type-id='type-id-6057' name='userstamp' filepath='net/core/sock.c' line='2906' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='proto_register' mangled-name='proto_register' filepath='net/core/sock.c' line='3263' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='proto_register'>
+        <parameter type-id='type-id-5668' name='prot' filepath='net/core/sock.c' line='3263' column='1'/>
+        <parameter type-id='type-id-17' name='alloc_slab' filepath='net/core/sock.c' line='3263' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='proto_unregister' mangled-name='proto_unregister' filepath='net/core/sock.c' line='3318' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='proto_unregister'>
+        <parameter type-id='type-id-5668' name='prot' filepath='net/core/sock.c' line='3318' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-6032'>
+        <parameter type-id='type-id-2697'/>
+        <parameter type-id='type-id-5881'/>
+        <parameter type-id='type-id-6050'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6034'>
+        <parameter type-id='type-id-2697'/>
+        <parameter type-id='type-id-214'/>
+        <parameter type-id='type-id-5911'/>
+        <parameter type-id='type-id-3121'/>
+        <parameter type-id='type-id-6065'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6036'>
+        <parameter type-id='type-id-5911'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6037'>
+        <parameter type-id='type-id-5911'/>
+        <parameter type-id='type-id-1768'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6038'>
+        <parameter type-id='type-id-5927'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6039'>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6040'>
+        <parameter type-id='type-id-214'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6042'>
+        <parameter type-id='type-id-5233'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6043'>
+        <parameter type-id='type-id-6096'/>
+        <parameter type-id='type-id-6096'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6044'>
+        <parameter type-id='type-id-5233'/>
+        <parameter type-id='type-id-1768'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6045'>
+        <parameter type-id='type-id-5233'/>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-6009'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6046'>
+        <parameter type-id='type-id-5233'/>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-929'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6047'>
+        <parameter type-id='type-id-5233'/>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-1668'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6048'>
+        <parameter type-id='type-id-5233'/>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-6065'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6049'>
+        <parameter type-id='type-id-6098'/>
+        <parameter type-id='type-id-6098'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6055'>
+        <parameter type-id='type-id-5233'/>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-1668'/>
+        <return type-id='type-id-1768'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6058'>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-2697'/>
+        <parameter type-id='type-id-3629'/>
+        <return type-id='type-id-511'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6059'>
+        <parameter type-id='type-id-6014'/>
+        <parameter type-id='type-id-15'/>
+        <return type-id='type-id-33'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6060'>
+        <parameter type-id='type-id-3666'/>
+        <parameter type-id='type-id-7'/>
+        <parameter type-id='type-id-666'/>
+        <parameter type-id='type-id-6056'/>
+        <return type-id='type-id-84'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6062'>
+        <parameter type-id='type-id-3666'/>
+        <return type-id='type-id-7'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6064'>
+        <parameter type-id='type-id-5233'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-7'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6066'>
+        <parameter type-id='type-id-2697'/>
+        <parameter type-id='type-id-5911'/>
+        <parameter type-id='type-id-7'/>
+        <parameter type-id='type-id-214'/>
+        <parameter type-id='type-id-6011'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6068'>
+        <parameter type-id='type-id-2697'/>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-214'/>
+        <parameter type-id='type-id-658'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6070'>
+        <parameter type-id='type-id-5911'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6071'>
+        <parameter type-id='type-id-5911'/>
+        <parameter type-id='type-id-1768'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6072'>
+        <parameter type-id='type-id-1645'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-6016'/>
+        <parameter type-id='type-id-5942'/>
+        <parameter type-id='type-id-6028'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-7'/>
+        <parameter type-id='type-id-33'/>
+        <parameter type-id='type-id-33'/>
+        <parameter type-id='type-id-511'/>
+        <parameter type-id='type-id-7'/>
+        <parameter type-id='type-id-33'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6074'>
+        <parameter type-id='type-id-5927'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6075'>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-7'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6076'>
+        <parameter type-id='type-id-3666'/>
+        <parameter type-id='type-id-6007'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6078'>
+        <parameter type-id='type-id-3666'/>
+        <parameter type-id='type-id-6018'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6080'>
+        <parameter type-id='type-id-3666'/>
+        <parameter type-id='type-id-5934'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6082'>
+        <parameter type-id='type-id-3666'/>
+        <parameter type-id='type-id-7'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6084'>
+        <parameter type-id='type-id-3666'/>
+        <parameter type-id='type-id-7'/>
+        <parameter type-id='type-id-7'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6086'>
+        <parameter type-id='type-id-3666'/>
+        <parameter type-id='type-id-214'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6088'>
+        <parameter type-id='type-id-6095'/>
+        <parameter type-id='type-id-6009'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6089'>
+        <parameter type-id='type-id-5233'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6090'>
+        <parameter type-id='type-id-5233'/>
+        <parameter type-id='type-id-6023'/>
+        <parameter type-id='type-id-6020'/>
+        <parameter type-id='type-id-6020'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6091'>
+        <parameter type-id='type-id-5233'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6092'>
+        <parameter type-id='type-id-5233'/>
+        <parameter type-id='type-id-1768'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6093'>
+        <parameter type-id='type-id-5233'/>
+        <parameter type-id='type-id-929'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <union-decl name='__anonymous_union__8' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/xfrm.h' line='138' column='1' id='type-id-5959'>
+        <data-member access='private'>
+          <var-decl name='gclist' type-id='type-id-520' visibility='default' filepath='include/net/xfrm.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='bydst' type-id='type-id-520' visibility='default' filepath='include/net/xfrm.h' line='140' column='1'/>
+        </data-member>
+      </union-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/core/datagram.c' language='LANG_C89'>
+      <typedef-decl name='poll_table' type-id='type-id-1068' filepath='include/linux/poll.h' line='42' column='1' id='type-id-6099'/>
+      <pointer-type-def type-id='type-id-6099' size-in-bits='64' id='type-id-6100'/>
+      <function-decl name='skb_recv_datagram' mangled-name='skb_recv_datagram' filepath='net/core/datagram.c' line='317' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_recv_datagram'>
+        <parameter type-id='type-id-3666' name='sk' filepath='net/core/datagram.c' line='317' column='1'/>
+        <parameter type-id='type-id-5' name='flags' filepath='net/core/datagram.c' line='317' column='1'/>
+        <parameter type-id='type-id-17' name='noblock' filepath='net/core/datagram.c' line='318' column='1'/>
+        <parameter type-id='type-id-666' name='err' filepath='net/core/datagram.c' line='318' column='1'/>
+        <return type-id='type-id-1768'/>
+      </function-decl>
+      <function-decl name='skb_free_datagram' mangled-name='skb_free_datagram' filepath='net/core/datagram.c' line='327' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_free_datagram'>
+        <parameter type-id='type-id-3666' name='sk' filepath='net/core/datagram.c' line='327' column='1'/>
+        <parameter type-id='type-id-1768' name='skb' filepath='net/core/datagram.c' line='327' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='datagram_poll' mangled-name='datagram_poll' filepath='net/core/datagram.c' line='835' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='datagram_poll'>
+        <parameter type-id='type-id-83' name='file' filepath='net/core/datagram.c' line='835' column='1'/>
+        <parameter type-id='type-id-5669' name='sock' filepath='net/core/datagram.c' line='835' column='1'/>
+        <parameter type-id='type-id-6100' name='wait' filepath='net/core/datagram.c' line='836' column='1'/>
+        <return type-id='type-id-880'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/core/net_namespace.c' language='LANG_C89'>
+      <class-decl name='pernet_operations' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/net/net_namespace.h' line='330' column='1' id='type-id-6101'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/net/net_namespace.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init' type-id='type-id-6102' visibility='default' filepath='include/net/net_namespace.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='exit' type-id='type-id-6103' visibility='default' filepath='include/net/net_namespace.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='exit_batch' type-id='type-id-6104' visibility='default' filepath='include/net/net_namespace.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='id' type-id='type-id-482' visibility='default' filepath='include/net/net_namespace.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='size' type-id='type-id-84' visibility='default' filepath='include/net/net_namespace.h' line='354' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__4' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/net/netns/generic.h' line='29' column='1' id='type-id-6105'>
+        <data-member access='private'>
+          <var-decl name='s' type-id='type-id-6106' visibility='default' filepath='include/net/netns/generic.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ptr' type-id='type-id-1213' visibility='default' filepath='include/net/netns/generic.h' line='35' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/netns/generic.h' line='30' column='1' id='type-id-6106'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='len' type-id='type-id-5' visibility='default' filepath='include/net/netns/generic.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/net/netns/generic.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-6107' size-in-bits='64' id='type-id-6102'/>
+      <pointer-type-def type-id='type-id-6101' size-in-bits='64' id='type-id-6108'/>
+      <pointer-type-def type-id='type-id-6109' size-in-bits='64' id='type-id-6104'/>
+      <pointer-type-def type-id='type-id-6110' size-in-bits='64' id='type-id-6103'/>
+      <function-decl name='register_pernet_subsys' mangled-name='register_pernet_subsys' filepath='net/core/net_namespace.c' line='1051' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_pernet_subsys'>
+        <parameter type-id='type-id-6108' name='ops' filepath='net/core/net_namespace.c' line='1051' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='unregister_pernet_subsys' mangled-name='unregister_pernet_subsys' filepath='net/core/net_namespace.c' line='1070' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_pernet_subsys'>
+        <parameter type-id='type-id-6108' name='ops' filepath='net/core/net_namespace.c' line='1070' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-6107'>
+        <parameter type-id='type-id-1645'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6109'>
+        <parameter type-id='type-id-877'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6110'>
+        <parameter type-id='type-id-1645'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/core/flow_dissector.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='type-id-312' size-in-bits='384' id='type-id-6111'>
+        <subrange length='24' type-id='type-id-9' id='type-id-3436'/>
+
+      </array-type-def>
+      <class-decl name='flow_dissector' size-in-bits='416' is-struct='yes' visibility='default' filepath='include/net/flow_dissector.h' line='243' column='1' id='type-id-6112'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='used_keys' type-id='type-id-5' visibility='default' filepath='include/net/flow_dissector.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='offset' type-id='type-id-6111' visibility='default' filepath='include/net/flow_dissector.h' line='245' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-6112' size-in-bits='64' id='type-id-6113'/>
+      <function-decl name='__skb_flow_dissect' mangled-name='__skb_flow_dissect' filepath='net/core/flow_dissector.c' line='607' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__skb_flow_dissect'>
+        <parameter type-id='type-id-2720' name='skb' filepath='net/core/flow_dissector.c' line='607' column='1'/>
+        <parameter type-id='type-id-6113' name='flow_dissector' filepath='net/core/flow_dissector.c' line='608' column='1'/>
+        <parameter type-id='type-id-15' name='target_container' filepath='net/core/flow_dissector.c' line='609' column='1'/>
+        <parameter type-id='type-id-15' name='data' filepath='net/core/flow_dissector.c' line='610' column='1'/>
+        <parameter type-id='type-id-926' name='proto' filepath='net/core/flow_dissector.c' line='610' column='1'/>
+        <parameter type-id='type-id-17' name='nhoff' filepath='net/core/flow_dissector.c' line='610' column='1'/>
+        <parameter type-id='type-id-17' name='hlen' filepath='net/core/flow_dissector.c' line='610' column='1'/>
+        <parameter type-id='type-id-5' name='flags' filepath='net/core/flow_dissector.c' line='611' column='1'/>
+        <return type-id='type-id-33'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/core/dev.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='type-id-6114' size-in-bits='infinite' id='type-id-6115'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <class-decl name='ip_mc_list' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-6116'/>
+      <class-decl name='libipw_device' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-6117'/>
+      <array-type-def dimensions='1' type-id='type-id-17' size-in-bits='1024' id='type-id-5177'>
+        <subrange length='32' type-id='type-id-9' id='type-id-941'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-6118' size-in-bits='256' id='type-id-6119'>
+        <subrange length='8' type-id='type-id-9' id='type-id-928'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-6120' size-in-bits='infinite' id='type-id-6121'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-6122' size-in-bits='64' id='type-id-6123'>
+        <subrange length='8' type-id='type-id-9' id='type-id-928'/>
+
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='type-id-6122' size-in-bits='112' id='type-id-6124'>
+        <subrange length='8' type-id='type-id-9' id='type-id-928'/>
+
+        <subrange length='6' type-id='type-id-9' id='type-id-191'/>
+
+      </array-type-def>
+      <typedef-decl name='iw_handler' type-id='type-id-6125' filepath='include/net/iw_handler.h' line='315' column='1' id='type-id-6126'/>
+      <class-decl name='iw_request_info' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/net/iw_handler.h' line='304' column='1' id='type-id-6127'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='type-id-108' visibility='default' filepath='include/net/iw_handler.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='flags' type-id='type-id-108' visibility='default' filepath='include/net/iw_handler.h' line='306' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='iwreq_data' size-in-bits='128' visibility='default' filepath='include/uapi/linux/wireless.h' line='896' column='1' id='type-id-6128'>
+        <data-member access='private'>
+          <var-decl name='name' type-id='type-id-43' visibility='default' filepath='include/uapi/linux/wireless.h' line='898' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='essid' type-id='type-id-6129' visibility='default' filepath='include/uapi/linux/wireless.h' line='902' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='nwid' type-id='type-id-6130' visibility='default' filepath='include/uapi/linux/wireless.h' line='903' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='freq' type-id='type-id-6131' visibility='default' filepath='include/uapi/linux/wireless.h' line='904' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sens' type-id='type-id-6130' visibility='default' filepath='include/uapi/linux/wireless.h' line='908' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='bitrate' type-id='type-id-6130' visibility='default' filepath='include/uapi/linux/wireless.h' line='909' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='txpower' type-id='type-id-6130' visibility='default' filepath='include/uapi/linux/wireless.h' line='910' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rts' type-id='type-id-6130' visibility='default' filepath='include/uapi/linux/wireless.h' line='911' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='frag' type-id='type-id-6130' visibility='default' filepath='include/uapi/linux/wireless.h' line='912' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='mode' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/wireless.h' line='913' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='retry' type-id='type-id-6130' visibility='default' filepath='include/uapi/linux/wireless.h' line='914' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='encoding' type-id='type-id-6129' visibility='default' filepath='include/uapi/linux/wireless.h' line='916' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='power' type-id='type-id-6130' visibility='default' filepath='include/uapi/linux/wireless.h' line='917' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='qual' type-id='type-id-6118' visibility='default' filepath='include/uapi/linux/wireless.h' line='918' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ap_addr' type-id='type-id-1776' visibility='default' filepath='include/uapi/linux/wireless.h' line='920' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='addr' type-id='type-id-1776' visibility='default' filepath='include/uapi/linux/wireless.h' line='921' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='param' type-id='type-id-6130' visibility='default' filepath='include/uapi/linux/wireless.h' line='923' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='data' type-id='type-id-6129' visibility='default' filepath='include/uapi/linux/wireless.h' line='924' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='iw_point' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/wireless.h' line='685' column='1' id='type-id-6129'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pointer' type-id='type-id-15' visibility='default' filepath='include/uapi/linux/wireless.h' line='686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='length' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/wireless.h' line='687' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='flags' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/wireless.h' line='688' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iw_param' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/wireless.h' line='674' column='1' id='type-id-6130'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='value' type-id='type-id-653' visibility='default' filepath='include/uapi/linux/wireless.h' line='675' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='fixed' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/wireless.h' line='676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='disabled' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/wireless.h' line='677' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='flags' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/wireless.h' line='678' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iw_freq' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/wireless.h' line='700' column='1' id='type-id-6131'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='m' type-id='type-id-653' visibility='default' filepath='include/uapi/linux/wireless.h' line='701' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='e' type-id='type-id-2203' visibility='default' filepath='include/uapi/linux/wireless.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='i' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/wireless.h' line='703' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='flags' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/wireless.h' line='704' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iw_quality' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/wireless.h' line='710' column='1' id='type-id-6118'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='qual' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/wireless.h' line='711' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='level' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/wireless.h' line='713' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='noise' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/wireless.h' line='714' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='updated' type-id='type-id-895' visibility='default' filepath='include/uapi/linux/wireless.h' line='715' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iw_priv_args' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/wireless.h' line='1057' column='1' id='type-id-6132'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/wireless.h' line='1058' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='set_args' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/wireless.h' line='1059' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='get_args' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/wireless.h' line='1060' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='type-id-43' visibility='default' filepath='include/uapi/linux/wireless.h' line='1061' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iw_statistics' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/linux/wireless.h' line='875' column='1' id='type-id-6133'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='status' type-id='type-id-108' visibility='default' filepath='include/uapi/linux/wireless.h' line='876' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='qual' type-id='type-id-6118' visibility='default' filepath='include/uapi/linux/wireless.h' line='879' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='discard' type-id='type-id-6134' visibility='default' filepath='include/uapi/linux/wireless.h' line='881' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='miss' type-id='type-id-6135' visibility='default' filepath='include/uapi/linux/wireless.h' line='882' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iw_discarded' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/linux/wireless.h' line='725' column='1' id='type-id-6134'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nwid' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/wireless.h' line='726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='code' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/wireless.h' line='727' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fragment' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/wireless.h' line='728' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='retries' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/wireless.h' line='729' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='misc' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/wireless.h' line='730' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iw_missed' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/wireless.h' line='737' column='1' id='type-id-6135'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='beacon' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/wireless.h' line='738' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iw_spy_data' size-in-bits='800' is-struct='yes' visibility='default' filepath='include/net/iw_handler.h' line='396' column='1' id='type-id-6136'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='spy_number' type-id='type-id-17' visibility='default' filepath='include/net/iw_handler.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='spy_address' type-id='type-id-6124' visibility='default' filepath='include/net/iw_handler.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='spy_stat' type-id='type-id-6119' visibility='default' filepath='include/net/iw_handler.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='spy_thr_low' type-id='type-id-6118' visibility='default' filepath='include/net/iw_handler.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='spy_thr_high' type-id='type-id-6118' visibility='default' filepath='include/net/iw_handler.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='spy_thr_under' type-id='type-id-6123' visibility='default' filepath='include/net/iw_handler.h' line='404' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='u_char' type-id='type-id-216' filepath='include/linux/types.h' line='84' column='1' id='type-id-6122'/>
+      <class-decl name='in_device' size-in-bits='2816' is-struct='yes' visibility='default' filepath='include/linux/inetdevice.h' line='25' column='1' id='type-id-6137'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='type-id-1650' visibility='default' filepath='include/linux/inetdevice.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='refcnt' type-id='type-id-421' visibility='default' filepath='include/linux/inetdevice.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dead' type-id='type-id-17' visibility='default' filepath='include/linux/inetdevice.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ifa_list' type-id='type-id-6138' visibility='default' filepath='include/linux/inetdevice.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mc_list' type-id='type-id-6139' visibility='default' filepath='include/linux/inetdevice.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mc_hash' type-id='type-id-6140' visibility='default' filepath='include/linux/inetdevice.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mc_count' type-id='type-id-17' visibility='default' filepath='include/linux/inetdevice.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='mc_tomb_lock' type-id='type-id-247' visibility='default' filepath='include/linux/inetdevice.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mc_tomb' type-id='type-id-6139' visibility='default' filepath='include/linux/inetdevice.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mr_v1_seen' type-id='type-id-16' visibility='default' filepath='include/linux/inetdevice.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='mr_v2_seen' type-id='type-id-16' visibility='default' filepath='include/linux/inetdevice.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mr_maxdelay' type-id='type-id-16' visibility='default' filepath='include/linux/inetdevice.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mr_qi' type-id='type-id-16' visibility='default' filepath='include/linux/inetdevice.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='mr_qri' type-id='type-id-16' visibility='default' filepath='include/linux/inetdevice.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mr_qrv' type-id='type-id-216' visibility='default' filepath='include/linux/inetdevice.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='776'>
+          <var-decl name='mr_gq_running' type-id='type-id-216' visibility='default' filepath='include/linux/inetdevice.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='784'>
+          <var-decl name='mr_ifc_count' type-id='type-id-216' visibility='default' filepath='include/linux/inetdevice.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='mr_gq_timer' type-id='type-id-417' visibility='default' filepath='include/linux/inetdevice.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='mr_ifc_timer' type-id='type-id-417' visibility='default' filepath='include/linux/inetdevice.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='arp_parms' type-id='type-id-5913' visibility='default' filepath='include/linux/inetdevice.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='cnf' type-id='type-id-1029' visibility='default' filepath='include/linux/inetdevice.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='callback_head' type-id='type-id-385' visibility='default' filepath='include/linux/inetdevice.h' line='50' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='in_ifaddr' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/inetdevice.h' line='137' column='1' id='type-id-6141'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hash' type-id='type-id-520' visibility='default' filepath='include/linux/inetdevice.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ifa_next' type-id='type-id-6138' visibility='default' filepath='include/linux/inetdevice.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ifa_dev' type-id='type-id-6142' visibility='default' filepath='include/linux/inetdevice.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='callback_head' type-id='type-id-385' visibility='default' filepath='include/linux/inetdevice.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ifa_local' type-id='type-id-929' visibility='default' filepath='include/linux/inetdevice.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='ifa_address' type-id='type-id-929' visibility='default' filepath='include/linux/inetdevice.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ifa_mask' type-id='type-id-929' visibility='default' filepath='include/linux/inetdevice.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='ifa_rt_priority' type-id='type-id-511' visibility='default' filepath='include/linux/inetdevice.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ifa_broadcast' type-id='type-id-929' visibility='default' filepath='include/linux/inetdevice.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='ifa_scope' type-id='type-id-216' visibility='default' filepath='include/linux/inetdevice.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='552'>
+          <var-decl name='ifa_prefixlen' type-id='type-id-216' visibility='default' filepath='include/linux/inetdevice.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ifa_flags' type-id='type-id-511' visibility='default' filepath='include/linux/inetdevice.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='ifa_label' type-id='type-id-43' visibility='default' filepath='include/linux/inetdevice.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='ifa_valid_lft' type-id='type-id-511' visibility='default' filepath='include/linux/inetdevice.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='ifa_preferred_lft' type-id='type-id-511' visibility='default' filepath='include/linux/inetdevice.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='ifa_cstamp' type-id='type-id-16' visibility='default' filepath='include/linux/inetdevice.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='ifa_tstamp' type-id='type-id-16' visibility='default' filepath='include/linux/inetdevice.h' line='156' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='666' column='1' id='type-id-6143'>
+        <data-member access='private'>
+          <var-decl name='' type-id='type-id-6144' visibility='default' filepath='include/linux/skbuff.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rbnode' type-id='type-id-422' visibility='default' filepath='include/linux/skbuff.h' line='681' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/skbuff.h' line='682' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='667' column='1' id='type-id-6144'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='type-id-1768' visibility='default' filepath='include/linux/skbuff.h' line='669' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prev' type-id='type-id-1768' visibility='default' filepath='include/linux/skbuff.h' line='670' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='type-id-6145' visibility='default' filepath='include/linux/skbuff.h' line='672' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='672' column='1' id='type-id-6145'>
+        <data-member access='private'>
+          <var-decl name='dev' type-id='type-id-1650' visibility='default' filepath='include/linux/skbuff.h' line='673' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='dev_scratch' type-id='type-id-16' visibility='default' filepath='include/linux/skbuff.h' line='678' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='nf_hook_entry' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/netfilter.h' line='75' column='1' id='type-id-6120'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hook' type-id='type-id-6146' visibility='default' filepath='include/linux/netfilter.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='priv' type-id='type-id-15' visibility='default' filepath='include/linux/netfilter.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='nf_hookfn' type-id='type-id-6147' filepath='include/linux/netfilter.h' line='61' column='1' id='type-id-6148'/>
+      <class-decl name='nf_hook_state' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/netfilter.h' line='51' column='1' id='type-id-6149'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hook' type-id='type-id-5' visibility='default' filepath='include/linux/netfilter.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pf' type-id='type-id-6150' visibility='default' filepath='include/linux/netfilter.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='in' type-id='type-id-1650' visibility='default' filepath='include/linux/netfilter.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='out' type-id='type-id-1650' visibility='default' filepath='include/linux/netfilter.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sk' type-id='type-id-3666' visibility='default' filepath='include/linux/netfilter.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='net' type-id='type-id-1645' visibility='default' filepath='include/linux/netfilter.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='okfn' type-id='type-id-2281' visibility='default' filepath='include/linux/netfilter.h' line='58' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='u_int8_t' type-id='type-id-214' filepath='include/linux/types.h' line='98' column='1' id='type-id-6150'/>
+      <union-decl name='__anonymous_union__5' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='1162' column='1' id='type-id-6151'>
+        <data-member access='private'>
+          <var-decl name='hashinfo' type-id='type-id-2261' visibility='default' filepath='include/net/sock.h' line='1163' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='udp_table' type-id='type-id-5858' visibility='default' filepath='include/net/sock.h' line='1164' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='raw_hash' type-id='type-id-5846' visibility='default' filepath='include/net/sock.h' line='1165' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='smc_hash' type-id='type-id-5848' visibility='default' filepath='include/net/sock.h' line='1166' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='udp_hslot' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/udp.h' line='61' column='1' id='type-id-6152'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='type-id-186' visibility='default' filepath='include/net/udp.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='type-id-17' visibility='default' filepath='include/net/udp.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='lock' type-id='type-id-247' visibility='default' filepath='include/net/udp.h' line='64' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__7' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/xfrm.h' line='138' column='1' id='type-id-6153'>
+        <data-member access='private'>
+          <var-decl name='gclist' type-id='type-id-520' visibility='default' filepath='include/net/xfrm.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='bydst' type-id='type-id-520' visibility='default' filepath='include/net/xfrm.h' line='140' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__8' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/ip.h' line='123' column='1' id='type-id-6154'>
+        <data-member access='private'>
+          <var-decl name='destructor' type-id='type-id-5671' visibility='default' filepath='include/net/ip.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='saved_sk' type-id='type-id-3666' visibility='default' filepath='include/net/ip.h' line='125' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/cpu_rmap.h' line='31' column='1' id='type-id-6114'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='type-id-688' visibility='default' filepath='include/linux/cpu_rmap.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='dist' type-id='type-id-688' visibility='default' filepath='include/linux/cpu_rmap.h' line='33' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='packet_type' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='2336' column='1' id='type-id-6155'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='type-id-926' visibility='default' filepath='include/linux/netdevice.h' line='2337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='type-id-1650' visibility='default' filepath='include/linux/netdevice.h' line='2338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='func' type-id='type-id-6156' visibility='default' filepath='include/linux/netdevice.h' line='2339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list_func' type-id='type-id-6157' visibility='default' filepath='include/linux/netdevice.h' line='2343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='id_match' type-id='type-id-6158' visibility='default' filepath='include/linux/netdevice.h' line='2346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='af_packet_priv' type-id='type-id-15' visibility='default' filepath='include/linux/netdevice.h' line='2348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/netdevice.h' line='2349' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='skb_free_reason' filepath='include/linux/netdevice.h' line='3494' column='1' id='type-id-6159'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='SKB_REASON_CONSUMED' value='0'/>
+        <enumerator name='SKB_REASON_DROPPED' value='1'/>
+      </enum-decl>
+      <typedef-decl name='gro_result_t' type-id='type-id-6160' filepath='include/linux/netdevice.h' line='372' column='1' id='type-id-6161'/>
+      <enum-decl name='gro_result' filepath='include/linux/netdevice.h' line='364' column='1' id='type-id-6160'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='GRO_MERGED' value='0'/>
+        <enumerator name='GRO_MERGED_FREE' value='1'/>
+        <enumerator name='GRO_HELD' value='2'/>
+        <enumerator name='GRO_NORMAL' value='3'/>
+        <enumerator name='GRO_DROP' value='4'/>
+        <enumerator name='GRO_CONSUMED' value='5'/>
+      </enum-decl>
+      <qualified-type-def type-id='type-id-6126' const='yes' id='type-id-6162'/>
+      <pointer-type-def type-id='type-id-6162' size-in-bits='64' id='type-id-6163'/>
+      <qualified-type-def type-id='type-id-6132' const='yes' id='type-id-6164'/>
+      <pointer-type-def type-id='type-id-6164' size-in-bits='64' id='type-id-6165'/>
+      <qualified-type-def type-id='type-id-6149' const='yes' id='type-id-6166'/>
+      <pointer-type-def type-id='type-id-6166' size-in-bits='64' id='type-id-6167'/>
+      <pointer-type-def type-id='type-id-892' size-in-bits='64' id='type-id-6168'/>
+      <pointer-type-def type-id='type-id-6137' size-in-bits='64' id='type-id-6142'/>
+      <pointer-type-def type-id='type-id-6141' size-in-bits='64' id='type-id-6138'/>
+      <pointer-type-def type-id='type-id-6169' size-in-bits='64' id='type-id-6125'/>
+      <pointer-type-def type-id='type-id-6170' size-in-bits='64' id='type-id-6156'/>
+      <pointer-type-def type-id='type-id-6116' size-in-bits='64' id='type-id-6139'/>
+      <pointer-type-def type-id='type-id-6139' size-in-bits='64' id='type-id-6140'/>
+      <pointer-type-def type-id='type-id-6127' size-in-bits='64' id='type-id-6171'/>
+      <pointer-type-def type-id='type-id-6136' size-in-bits='64' id='type-id-6172'/>
+      <pointer-type-def type-id='type-id-6133' size-in-bits='64' id='type-id-6173'/>
+      <pointer-type-def type-id='type-id-6174' size-in-bits='64' id='type-id-6175'/>
+      <pointer-type-def type-id='type-id-6128' size-in-bits='64' id='type-id-6176'/>
+      <pointer-type-def type-id='type-id-6117' size-in-bits='64' id='type-id-6177'/>
+      <pointer-type-def type-id='type-id-6148' size-in-bits='64' id='type-id-6146'/>
+      <pointer-type-def type-id='type-id-6155' size-in-bits='64' id='type-id-6178'/>
+      <pointer-type-def type-id='type-id-6179' size-in-bits='64' id='type-id-6158'/>
+      <pointer-type-def type-id='type-id-6152' size-in-bits='64' id='type-id-6180'/>
+      <pointer-type-def type-id='type-id-6181' size-in-bits='64' id='type-id-6157'/>
+      <function-decl name='netif_set_real_num_tx_queues' mangled-name='netif_set_real_num_tx_queues' filepath='net/core/dev.c' line='2633' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_set_real_num_tx_queues'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/core/dev.c' line='2633' column='1'/>
+        <parameter type-id='type-id-5' name='txq' filepath='net/core/dev.c' line='2633' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='netif_set_real_num_rx_queues' mangled-name='netif_set_real_num_rx_queues' filepath='net/core/dev.c' line='2683' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_set_real_num_rx_queues'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/core/dev.c' line='2683' column='1'/>
+        <parameter type-id='type-id-5' name='rxq' filepath='net/core/dev.c' line='2683' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='netdev_rx_handler_unregister' mangled-name='netdev_rx_handler_unregister' filepath='net/core/dev.c' line='4737' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_rx_handler_unregister'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/core/dev.c' line='4737' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='netif_napi_add' mangled-name='netif_napi_add' filepath='net/core/dev.c' line='6208' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_napi_add'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/core/dev.c' line='6208' column='1'/>
+        <parameter type-id='type-id-5240' name='napi' filepath='net/core/dev.c' line='6208' column='1'/>
+        <parameter type-id='type-id-5237' name='poll' filepath='net/core/dev.c' line='6209' column='1'/>
+        <parameter type-id='type-id-17' name='weight' filepath='net/core/dev.c' line='6209' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='netdev_upper_dev_unlink' mangled-name='netdev_upper_dev_unlink' filepath='net/core/dev.c' line='7266' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_upper_dev_unlink'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/core/dev.c' line='7266' column='1'/>
+        <parameter type-id='type-id-1650' name='upper_dev' filepath='net/core/dev.c' line='7267' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='netdev_lower_state_changed' mangled-name='netdev_lower_state_changed' filepath='net/core/dev.c' line='7437' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_lower_state_changed'>
+        <parameter type-id='type-id-1650' name='lower_dev' filepath='net/core/dev.c' line='7437' column='1'/>
+        <parameter type-id='type-id-15' name='lower_state_info' filepath='net/core/dev.c' line='7438' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='register_netdevice' mangled-name='register_netdevice' filepath='net/core/dev.c' line='8632' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_netdevice'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/core/dev.c' line='8632' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='unregister_netdevice_queue' mangled-name='unregister_netdevice_queue' filepath='net/core/dev.c' line='9286' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_netdevice_queue'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/core/dev.c' line='9286' column='1'/>
+        <parameter type-id='type-id-877' name='head' filepath='net/core/dev.c' line='9286' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='dev_add_pack' mangled-name='dev_add_pack' filepath='net/core/dev.c' line='407' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_add_pack'>
+        <parameter type-id='type-id-6178' name='pt' filepath='net/core/dev.c' line='407' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='dev_remove_pack' mangled-name='dev_remove_pack' filepath='net/core/dev.c' line='462' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_remove_pack'>
+        <parameter type-id='type-id-6178' name='pt' filepath='net/core/dev.c' line='462' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='synchronize_net' mangled-name='synchronize_net' filepath='net/core/dev.c' line='9263' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='synchronize_net'>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='__dev_get_by_index' mangled-name='__dev_get_by_index' filepath='net/core/dev.c' line='810' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__dev_get_by_index'>
+        <parameter type-id='type-id-1645' name='net' filepath='net/core/dev.c' line='810' column='1'/>
+        <parameter type-id='type-id-17' name='ifindex' filepath='net/core/dev.c' line='810' column='1'/>
+        <return type-id='type-id-1650'/>
+      </function-decl>
+      <function-decl name='dev_get_by_index_rcu' mangled-name='dev_get_by_index_rcu' filepath='net/core/dev.c' line='834' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_get_by_index_rcu'>
+        <parameter type-id='type-id-1645' name='net' filepath='net/core/dev.c' line='834' column='1'/>
+        <parameter type-id='type-id-17' name='ifindex' filepath='net/core/dev.c' line='834' column='1'/>
+        <return type-id='type-id-1650'/>
+      </function-decl>
+      <function-decl name='dev_get_by_index' mangled-name='dev_get_by_index' filepath='net/core/dev.c' line='859' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_get_by_index'>
+        <parameter type-id='type-id-1645' name='net' filepath='net/core/dev.c' line='859' column='1'/>
+        <parameter type-id='type-id-17' name='ifindex' filepath='net/core/dev.c' line='859' column='1'/>
+        <return type-id='type-id-1650'/>
+      </function-decl>
+      <function-decl name='netdev_info' mangled-name='netdev_info' filepath='net/core/dev.c' line='9675' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_info'>
+        <parameter type-id='type-id-2697' name='dev' filepath='net/core/dev.c' line='9675' column='1'/>
+        <parameter type-id='type-id-4' name='fmt' filepath='net/core/dev.c' line='9675' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='call_netdevice_notifiers' mangled-name='call_netdevice_notifiers' filepath='net/core/dev.c' line='1760' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='call_netdevice_notifiers'>
+        <parameter type-id='type-id-16' name='val' filepath='net/core/dev.c' line='1760' column='1'/>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/core/dev.c' line='1760' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='netdev_notify_peers' mangled-name='netdev_notify_peers' filepath='net/core/dev.c' line='1370' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_notify_peers'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/core/dev.c' line='1370' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='dev_open' mangled-name='dev_open' filepath='net/core/dev.c' line='1434' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_open'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/core/dev.c' line='1434' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='dev_close' mangled-name='dev_close' filepath='net/core/dev.c' line='1534' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_close'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/core/dev.c' line='1534' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='register_netdevice_notifier' mangled-name='register_netdevice_notifier' filepath='net/core/dev.c' line='1635' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_netdevice_notifier'>
+        <parameter type-id='type-id-3271' name='nb' filepath='net/core/dev.c' line='1635' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='unregister_netdevice_notifier' mangled-name='unregister_netdevice_notifier' filepath='net/core/dev.c' line='1705' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_netdevice_notifier'>
+        <parameter type-id='type-id-3271' name='nb' filepath='net/core/dev.c' line='1705' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='__netif_set_xps_queue' mangled-name='__netif_set_xps_queue' filepath='net/core/dev.c' line='2299' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__netif_set_xps_queue'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/core/dev.c' line='2299' column='1'/>
+        <parameter type-id='type-id-6168' name='mask' filepath='net/core/dev.c' line='2299' column='1'/>
+        <parameter type-id='type-id-688' name='index' filepath='net/core/dev.c' line='2300' column='1'/>
+        <parameter type-id='type-id-33' name='is_rxqs_map' filepath='net/core/dev.c' line='2300' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='netif_schedule_queue' mangled-name='netif_schedule_queue' filepath='net/core/dev.c' line='2748' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_schedule_queue'>
+        <parameter type-id='type-id-1685' name='txq' filepath='net/core/dev.c' line='2748' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='netif_tx_wake_queue' mangled-name='netif_tx_wake_queue' filepath='net/core/dev.c' line='2760' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_tx_wake_queue'>
+        <parameter type-id='type-id-1685' name='dev_queue' filepath='net/core/dev.c' line='2760' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='__dev_kfree_skb_any' mangled-name='__dev_kfree_skb_any' filepath='net/core/dev.c' line='2795' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__dev_kfree_skb_any'>
+        <parameter type-id='type-id-1768' name='skb' filepath='net/core/dev.c' line='2795' column='1'/>
+        <parameter type-id='type-id-6159' name='reason' filepath='net/core/dev.c' line='2795' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='netif_device_detach' mangled-name='netif_device_detach' filepath='net/core/dev.c' line='2811' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_device_detach'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/core/dev.c' line='2811' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='netif_tx_stop_all_queues' mangled-name='netif_tx_stop_all_queues' filepath='net/core/dev.c' line='8603' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_tx_stop_all_queues'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/core/dev.c' line='8603' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='netif_device_attach' mangled-name='netif_device_attach' filepath='net/core/dev.c' line='2826' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_device_attach'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/core/dev.c' line='2826' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='passthru_features_check' mangled-name='passthru_features_check' filepath='net/core/dev.c' line='3169' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='passthru_features_check'>
+        <parameter type-id='type-id-1768' name='skb' filepath='net/core/dev.c' line='3169' column='1'/>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/core/dev.c' line='3170' column='1'/>
+        <parameter type-id='type-id-1668' name='features' filepath='net/core/dev.c' line='3171' column='1'/>
+        <return type-id='type-id-1668'/>
+      </function-decl>
+      <function-decl name='netif_rx_ni' mangled-name='netif_rx_ni' filepath='net/core/dev.c' line='4535' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_rx_ni'>
+        <parameter type-id='type-id-1768' name='skb' filepath='net/core/dev.c' line='4535' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='dev_queue_xmit' mangled-name='dev_queue_xmit' filepath='net/core/dev.c' line='3875' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_queue_xmit'>
+        <parameter type-id='type-id-1768' name='skb' filepath='net/core/dev.c' line='3875' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='netif_rx' mangled-name='netif_rx' filepath='net/core/dev.c' line='4527' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_rx'>
+        <parameter type-id='type-id-1768' name='skb' filepath='net/core/dev.c' line='4527' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='netdev_rx_handler_register' mangled-name='netdev_rx_handler_register' filepath='net/core/dev.c' line='4711' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_rx_handler_register'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/core/dev.c' line='4711' column='1'/>
+        <parameter type-id='type-id-1683' name='rx_handler' filepath='net/core/dev.c' line='4712' column='1'/>
+        <parameter type-id='type-id-15' name='rx_handler_data' filepath='net/core/dev.c' line='4713' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='netif_receive_skb' mangled-name='netif_receive_skb' filepath='net/core/dev.c' line='5231' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_receive_skb'>
+        <parameter type-id='type-id-1768' name='skb' filepath='net/core/dev.c' line='5231' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='napi_gro_receive' mangled-name='napi_gro_receive' filepath='net/core/dev.c' line='5646' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='napi_gro_receive'>
+        <parameter type-id='type-id-5240' name='napi' filepath='net/core/dev.c' line='5646' column='1'/>
+        <parameter type-id='type-id-1768' name='skb' filepath='net/core/dev.c' line='5646' column='1'/>
+        <return type-id='type-id-6161'/>
+      </function-decl>
+      <function-decl name='__napi_schedule' mangled-name='__napi_schedule' filepath='net/core/dev.c' line='5909' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__napi_schedule'>
+        <parameter type-id='type-id-5240' name='n' filepath='net/core/dev.c' line='5909' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='napi_schedule_prep' mangled-name='napi_schedule_prep' filepath='net/core/dev.c' line='5928' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='napi_schedule_prep'>
+        <parameter type-id='type-id-5240' name='n' filepath='net/core/dev.c' line='5928' column='1'/>
+        <return type-id='type-id-33'/>
+      </function-decl>
+      <function-decl name='napi_complete_done' mangled-name='napi_complete_done' filepath='net/core/dev.c' line='5964' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='napi_complete_done'>
+        <parameter type-id='type-id-5240' name='n' filepath='net/core/dev.c' line='5964' column='1'/>
+        <parameter type-id='type-id-17' name='work_done' filepath='net/core/dev.c' line='5964' column='1'/>
+        <return type-id='type-id-33'/>
+      </function-decl>
+      <function-decl name='napi_hash_del' mangled-name='napi_hash_del' filepath='net/core/dev.c' line='6166' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='napi_hash_del'>
+        <parameter type-id='type-id-5240' name='napi' filepath='net/core/dev.c' line='6166' column='1'/>
+        <return type-id='type-id-33'/>
+      </function-decl>
+      <function-decl name='napi_disable' mangled-name='napi_disable' filepath='net/core/dev.c' line='6231' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='napi_disable'>
+        <parameter type-id='type-id-5240' name='n' filepath='net/core/dev.c' line='6231' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='netif_napi_del' mangled-name='netif_napi_del' filepath='net/core/dev.c' line='6261' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_napi_del'>
+        <parameter type-id='type-id-5240' name='napi' filepath='net/core/dev.c' line='6261' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='netdev_upper_dev_link' mangled-name='netdev_upper_dev_link' filepath='net/core/dev.c' line='7225' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_upper_dev_link'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/core/dev.c' line='7225' column='1'/>
+        <parameter type-id='type-id-1650' name='upper_dev' filepath='net/core/dev.c' line='7226' column='1'/>
+        <parameter type-id='type-id-1826' name='extack' filepath='net/core/dev.c' line='7227' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='netdev_master_upper_dev_link' mangled-name='netdev_master_upper_dev_link' filepath='net/core/dev.c' line='7248' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_master_upper_dev_link'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/core/dev.c' line='7248' column='1'/>
+        <parameter type-id='type-id-1650' name='upper_dev' filepath='net/core/dev.c' line='7249' column='1'/>
+        <parameter type-id='type-id-15' name='upper_priv' filepath='net/core/dev.c' line='7250' column='1'/>
+        <parameter type-id='type-id-15' name='upper_info' filepath='net/core/dev.c' line='7250' column='1'/>
+        <parameter type-id='type-id-1826' name='extack' filepath='net/core/dev.c' line='7251' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='dev_set_mtu' mangled-name='dev_set_mtu' filepath='net/core/dev.c' line='7838' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_set_mtu'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/core/dev.c' line='7838' column='1'/>
+        <parameter type-id='type-id-17' name='new_mtu' filepath='net/core/dev.c' line='7838' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='netdev_err' mangled-name='netdev_err' filepath='net/core/dev.c' line='9672' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_err'>
+        <parameter type-id='type-id-2697' name='dev' filepath='net/core/dev.c' line='9672' column='1'/>
+        <parameter type-id='type-id-4' name='fmt' filepath='net/core/dev.c' line='9672' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='netdev_change_features' mangled-name='netdev_change_features' filepath='net/core/dev.c' line='8484' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_change_features'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/core/dev.c' line='8484' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='netif_stacked_transfer_operstate' mangled-name='netif_stacked_transfer_operstate' filepath='net/core/dev.c' line='8500' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_stacked_transfer_operstate'>
+        <parameter type-id='type-id-2697' name='rootdev' filepath='net/core/dev.c' line='8500' column='1'/>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/core/dev.c' line='8501' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='register_netdev' mangled-name='register_netdev' filepath='net/core/dev.c' line='8841' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_netdev'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/core/dev.c' line='8841' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='free_netdev' mangled-name='free_netdev' filepath='net/core/dev.c' line='9224' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='free_netdev'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/core/dev.c' line='9224' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='dev_get_stats' mangled-name='dev_get_stats' filepath='net/core/dev.c' line='9042' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_get_stats'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/core/dev.c' line='9042' column='1'/>
+        <parameter type-id='type-id-3052' name='storage' filepath='net/core/dev.c' line='9043' column='1'/>
+        <return type-id='type-id-3052'/>
+      </function-decl>
+      <function-decl name='alloc_netdev_mqs' mangled-name='alloc_netdev_mqs' filepath='net/core/dev.c' line='9110' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='alloc_netdev_mqs'>
+        <parameter type-id='type-id-17' name='sizeof_priv' filepath='net/core/dev.c' line='9110' column='1'/>
+        <parameter type-id='type-id-4' name='name' filepath='net/core/dev.c' line='9110' column='1'/>
+        <parameter type-id='type-id-216' name='name_assign_type' filepath='net/core/dev.c' line='9111' column='1'/>
+        <parameter type-id='type-id-1691' name='setup' filepath='net/core/dev.c' line='9112' column='1'/>
+        <parameter type-id='type-id-5' name='txqs' filepath='net/core/dev.c' line='9113' column='1'/>
+        <parameter type-id='type-id-5' name='rxqs' filepath='net/core/dev.c' line='9113' column='1'/>
+        <return type-id='type-id-1650'/>
+      </function-decl>
+      <function-decl name='unregister_netdev' mangled-name='unregister_netdev' filepath='net/core/dev.c' line='9331' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_netdev'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/core/dev.c' line='9331' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='netdev_increment_features' mangled-name='netdev_increment_features' filepath='net/core/dev.c' line='9538' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_increment_features'>
+        <parameter type-id='type-id-1668' name='all' filepath='net/core/dev.c' line='9538' column='1'/>
+        <parameter type-id='type-id-1668' name='one' filepath='net/core/dev.c' line='9539' column='1'/>
+        <parameter type-id='type-id-1668' name='mask' filepath='net/core/dev.c' line='9539' column='1'/>
+        <return type-id='type-id-1668'/>
+      </function-decl>
+      <function-decl name='netdev_warn' mangled-name='netdev_warn' filepath='net/core/dev.c' line='9673' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_warn'>
+        <parameter type-id='type-id-2697' name='dev' filepath='net/core/dev.c' line='9673' column='1'/>
+        <parameter type-id='type-id-4' name='fmt' filepath='net/core/dev.c' line='9673' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-6169'>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-6171'/>
+        <parameter type-id='type-id-6176'/>
+        <parameter type-id='type-id-2'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6170'>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-6178'/>
+        <parameter type-id='type-id-1650'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6174'>
+        <parameter type-id='type-id-1650'/>
+        <return type-id='type-id-6173'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6179'>
+        <parameter type-id='type-id-6178'/>
+        <parameter type-id='type-id-3666'/>
+        <return type-id='type-id-33'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6147'>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-6167'/>
+        <return type-id='type-id-5'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6181'>
+        <parameter type-id='type-id-877'/>
+        <parameter type-id='type-id-6178'/>
+        <parameter type-id='type-id-1650'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/core/dev_addr_lists.c' language='LANG_C89'>
+      <function-decl name='dev_uc_sync_multiple' mangled-name='dev_uc_sync_multiple' filepath='net/core/dev_addr_lists.c' line='567' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_uc_sync_multiple'>
+        <parameter type-id='type-id-1650' name='to' filepath='net/core/dev_addr_lists.c' line='567' column='1'/>
+        <parameter type-id='type-id-1650' name='from' filepath='net/core/dev_addr_lists.c' line='567' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='dev_uc_unsync' mangled-name='dev_uc_unsync' filepath='net/core/dev_addr_lists.c' line='592' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_uc_unsync'>
+        <parameter type-id='type-id-1650' name='to' filepath='net/core/dev_addr_lists.c' line='592' column='1'/>
+        <parameter type-id='type-id-1650' name='from' filepath='net/core/dev_addr_lists.c' line='592' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='dev_mc_sync_multiple' mangled-name='dev_mc_sync_multiple' filepath='net/core/dev_addr_lists.c' line='788' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_mc_sync_multiple'>
+        <parameter type-id='type-id-1650' name='to' filepath='net/core/dev_addr_lists.c' line='788' column='1'/>
+        <parameter type-id='type-id-1650' name='from' filepath='net/core/dev_addr_lists.c' line='788' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='dev_mc_unsync' mangled-name='dev_mc_unsync' filepath='net/core/dev_addr_lists.c' line='813' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_mc_unsync'>
+        <parameter type-id='type-id-1650' name='to' filepath='net/core/dev_addr_lists.c' line='813' column='1'/>
+        <parameter type-id='type-id-1650' name='from' filepath='net/core/dev_addr_lists.c' line='813' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/core/filter.c' language='LANG_C89'>
+      <union-decl name='__anonymous_union__2' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/bpf.h' line='298' column='1' id='type-id-6182'>
+        <data-member access='private'>
+          <var-decl name='work' type-id='type-id-255' visibility='default' filepath='include/linux/bpf.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rcu' type-id='type-id-385' visibility='default' filepath='include/linux/bpf.h' line='300' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__3' is-anonymous='yes' visibility='default' filepath='include/linux/filter.h' line='502' column='1' id='type-id-6183'>
+        <data-member access='private'>
+          <var-decl name='insns' type-id='type-id-1172' visibility='default' filepath='include/linux/filter.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='insnsi' type-id='type-id-956' visibility='default' filepath='include/linux/filter.h' line='504' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='xdp_buff' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/xdp.h' line='66' column='1' id='type-id-6184'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='data' type-id='type-id-15' visibility='default' filepath='include/net/xdp.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data_end' type-id='type-id-15' visibility='default' filepath='include/net/xdp.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data_meta' type-id='type-id-15' visibility='default' filepath='include/net/xdp.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='data_hard_start' type-id='type-id-15' visibility='default' filepath='include/net/xdp.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='handle' type-id='type-id-16' visibility='default' filepath='include/net/xdp.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rxq' type-id='type-id-3594' visibility='default' filepath='include/net/xdp.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-6184' size-in-bits='64' id='type-id-6185'/>
+      <pointer-type-def type-id='type-id-1924' size-in-bits='64' id='type-id-3594'/>
+      <function-decl name='bpf_warn_invalid_xdp_action' mangled-name='bpf_warn_invalid_xdp_action' filepath='net/core/filter.c' line='5530' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_warn_invalid_xdp_action'>
+        <parameter type-id='type-id-7' name='act' filepath='net/core/filter.c' line='5530' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='xdp_do_flush_map' mangled-name='xdp_do_flush_map' filepath='net/core/filter.c' line='3214' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xdp_do_flush_map'>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='xdp_do_redirect' mangled-name='xdp_do_redirect' filepath='net/core/filter.c' line='3300' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xdp_do_redirect'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/core/filter.c' line='3300' column='1'/>
+        <parameter type-id='type-id-6185' name='xdp' filepath='net/core/filter.c' line='3300' column='1'/>
+        <parameter type-id='type-id-1230' name='xdp_prog' filepath='net/core/filter.c' line='3301' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/core/sock_diag.c' language='LANG_C89'>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='156' column='1' id='type-id-6186'>
+        <data-member access='private'>
+          <var-decl name='skc_addrpair' type-id='type-id-5686' visibility='default' filepath='include/net/sock.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='type-id-5687' visibility='default' filepath='include/net/sock.h' line='158' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='1162' column='1' id='type-id-6187'>
+        <data-member access='private'>
+          <var-decl name='hashinfo' type-id='type-id-2261' visibility='default' filepath='include/net/sock.h' line='1163' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='udp_table' type-id='type-id-5858' visibility='default' filepath='include/net/sock.h' line='1164' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='raw_hash' type-id='type-id-5846' visibility='default' filepath='include/net/sock.h' line='1165' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='smc_hash' type-id='type-id-5848' visibility='default' filepath='include/net/sock.h' line='1166' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='sock_diag_handler' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/sock_diag.h' line='15' column='1' id='type-id-6188'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='type-id-895' visibility='default' filepath='include/linux/sock_diag.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dump' type-id='type-id-6189' visibility='default' filepath='include/linux/sock_diag.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_info' type-id='type-id-6190' visibility='default' filepath='include/linux/sock_diag.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='destroy' type-id='type-id-6189' visibility='default' filepath='include/linux/sock_diag.h' line='19' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='type-id-6188' const='yes' id='type-id-6191'/>
+      <pointer-type-def type-id='type-id-6191' size-in-bits='64' id='type-id-6192'/>
+      <pointer-type-def type-id='type-id-6193' size-in-bits='64' id='type-id-6189'/>
+      <pointer-type-def type-id='type-id-6194' size-in-bits='64' id='type-id-6190'/>
+      <function-decl name='sock_diag_save_cookie' mangled-name='sock_diag_save_cookie' filepath='net/core/sock_diag.c' line='50' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_diag_save_cookie'>
+        <parameter type-id='type-id-3666' name='sk' filepath='net/core/sock_diag.c' line='50' column='1'/>
+        <parameter type-id='type-id-3629' name='cookie' filepath='net/core/sock_diag.c' line='50' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='sock_diag_register' mangled-name='sock_diag_register' filepath='net/core/sock_diag.c' line='179' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_diag_register'>
+        <parameter type-id='type-id-6192' name='hndl' filepath='net/core/sock_diag.c' line='179' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='sock_diag_unregister' mangled-name='sock_diag_unregister' filepath='net/core/sock_diag.c' line='197' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_diag_unregister'>
+        <parameter type-id='type-id-6192' name='hnld' filepath='net/core/sock_diag.c' line='197' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-6193'>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-3035'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6194'>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-3666'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/ethernet/eth.c' language='LANG_C89'>
+      <function-decl name='eth_type_trans' mangled-name='eth_type_trans' filepath='net/ethernet/eth.c' line='156' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='eth_type_trans'>
+        <parameter type-id='type-id-1768' name='skb' filepath='net/ethernet/eth.c' line='156' column='1'/>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/ethernet/eth.c' line='156' column='1'/>
+        <return type-id='type-id-926'/>
+      </function-decl>
+      <function-decl name='eth_prepare_mac_addr_change' mangled-name='eth_prepare_mac_addr_change' filepath='net/ethernet/eth.c' line='274' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='eth_prepare_mac_addr_change'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/ethernet/eth.c' line='274' column='1'/>
+        <parameter type-id='type-id-15' name='p' filepath='net/ethernet/eth.c' line='274' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='eth_commit_mac_addr_change' mangled-name='eth_commit_mac_addr_change' filepath='net/ethernet/eth.c' line='291' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='eth_commit_mac_addr_change'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/ethernet/eth.c' line='291' column='1'/>
+        <parameter type-id='type-id-15' name='p' filepath='net/ethernet/eth.c' line='291' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='eth_validate_addr' mangled-name='eth_validate_addr' filepath='net/ethernet/eth.c' line='337' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='eth_validate_addr'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/ethernet/eth.c' line='337' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='ether_setup' mangled-name='ether_setup' filepath='net/ethernet/eth.c' line='359' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ether_setup'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/ethernet/eth.c' line='359' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='alloc_etherdev_mqs' mangled-name='alloc_etherdev_mqs' filepath='net/ethernet/eth.c' line='393' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='alloc_etherdev_mqs'>
+        <parameter type-id='type-id-17' name='sizeof_priv' filepath='net/ethernet/eth.c' line='393' column='1'/>
+        <parameter type-id='type-id-5' name='txqs' filepath='net/ethernet/eth.c' line='393' column='1'/>
+        <parameter type-id='type-id-5' name='rxqs' filepath='net/ethernet/eth.c' line='394' column='1'/>
+        <return type-id='type-id-1650'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/sched/sch_generic.c' language='LANG_C89'>
+      <function-decl name='netif_carrier_on' mangled-name='netif_carrier_on' filepath='net/sched/sch_generic.c' line='510' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_carrier_on'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/sched/sch_generic.c' line='510' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='netif_carrier_off' mangled-name='netif_carrier_off' filepath='net/sched/sch_generic.c' line='529' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_carrier_off'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/sched/sch_generic.c' line='529' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/netfilter/core.c' language='LANG_C89'>
+      <class-decl name='nf_conntrack' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/skbuff.h' line='248' column='1' id='type-id-6195'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='use' type-id='type-id-26' visibility='default' filepath='include/linux/skbuff.h' line='249' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='type-id-6195' size-in-bits='64' id='type-id-6196'/>
+      <function-decl name='nf_conntrack_destroy' mangled-name='nf_conntrack_destroy' filepath='net/netfilter/core.c' line='594' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nf_conntrack_destroy'>
+        <parameter type-id='type-id-6196' name='nfct' filepath='net/netfilter/core.c' line='594' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/wireless/core.c' language='LANG_C89'>
+
+      <array-type-def dimensions='1' type-id='type-id-6197' size-in-bits='864' id='type-id-6198'>
+        <subrange length='3' type-id='type-id-9' id='type-id-196'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-6199' size-in-bits='336' id='type-id-6200'>
+        <subrange length='21' type-id='type-id-9' id='type-id-958'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-6201' size-in-bits='128' id='type-id-6202'>
+        <subrange length='8' type-id='type-id-9' id='type-id-928'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-1' size-in-bits='24' id='type-id-6203'>
+        <subrange length='3' type-id='type-id-9' id='type-id-196'/>
+
+      </array-type-def>
+      <class-decl name='cfg80211_conn' size-in-bits='3072' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-6204'/>
+      <array-type-def dimensions='1' type-id='type-id-6205' size-in-bits='infinite' id='type-id-6206'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-6207' size-in-bits='infinite' id='type-id-6208'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-6209' size-in-bits='192' id='type-id-6210'>
+        <subrange length='3' type-id='type-id-9' id='type-id-196'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-6211' size-in-bits='256' id='type-id-6212'>
+        <subrange length='4' type-id='type-id-9' id='type-id-107'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-6213' size-in-bits='1024' id='type-id-6214'>
+        <subrange length='4' type-id='type-id-9' id='type-id-107'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-6215' size-in-bits='infinite' id='type-id-6216'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-738' size-in-bits='infinite' id='type-id-6217'>
+        <subrange length='infinite' type-id='type-id-9' id='type-id-10'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-209' size-in-bits='32' id='type-id-6218'>
+        <subrange length='4' type-id='type-id-9' id='type-id-107'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-688' size-in-bits='128' id='type-id-6219'>
+        <subrange length='8' type-id='type-id-9' id='type-id-928'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-7' size-in-bits='64' id='type-id-6220'>
+        <subrange length='2' type-id='type-id-9' id='type-id-128'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-7' size-in-bits='96' id='type-id-6221'>
+        <subrange length='3' type-id='type-id-9' id='type-id-196'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-214' size-in-bits='80' id='type-id-6222'>
+        <subrange length='10' type-id='type-id-9' id='type-id-1191'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-214' size-in-bits='200' id='type-id-6223'>
+        <subrange length='25' type-id='type-id-9' id='type-id-6224'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-214' size-in-bits='256' id='type-id-6225'>
+        <subrange length='32' type-id='type-id-9' id='type-id-941'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-214' size-in-bits='32' id='type-id-6226'>
+        <subrange length='4' type-id='type-id-9' id='type-id-107'/>
+
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='type-id-214' size-in-bits='136' id='type-id-6227'>
+        <subrange length='4' type-id='type-id-9' id='type-id-107'/>
+
+        <subrange length='13' type-id='type-id-9' id='type-id-201'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-214' size-in-bits='40' id='type-id-6228'>
+        <subrange length='5' type-id='type-id-9' id='type-id-110'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-214' size-in-bits='48' id='type-id-6229'>
+        <subrange length='6' type-id='type-id-9' id='type-id-191'/>
+
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='type-id-214' size-in-bits='72' id='type-id-6230'>
+        <subrange length='9' type-id='type-id-9' id='type-id-953'/>
+
+      </array-type-def>
+      <class-decl name='wiphy' size-in-bits='9472' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='3972' column='1' id='type-id-6231'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='perm_addr' type-id='type-id-6229' visibility='default' filepath='include/net/cfg80211.h' line='3976' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='addr_mask' type-id='type-id-6229' visibility='default' filepath='include/net/cfg80211.h' line='3977' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='addresses' type-id='type-id-6232' visibility='default' filepath='include/net/cfg80211.h' line='3979' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mgmt_stypes' type-id='type-id-6233' visibility='default' filepath='include/net/cfg80211.h' line='3981' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='iface_combinations' type-id='type-id-6234' visibility='default' filepath='include/net/cfg80211.h' line='3983' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='n_iface_combinations' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='3984' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='software_iftypes' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='3985' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='368'>
+          <var-decl name='n_addresses' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='3987' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='interface_modes' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='3990' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='400'>
+          <var-decl name='max_acl_mac_addrs' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='3992' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='flags' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='3994' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='regulatory_flags' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='3994' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='features' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='3994' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ext_features' type-id='type-id-6226' visibility='default' filepath='include/net/cfg80211.h' line='3995' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='ap_sme_capa' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='3997' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='signal_type' type-id='type-id-6235' visibility='default' filepath='include/net/cfg80211.h' line='3999' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='bss_priv_size' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='4001' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='max_scan_ssids' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='4002' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='648'>
+          <var-decl name='max_sched_scan_reqs' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='4003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='656'>
+          <var-decl name='max_sched_scan_ssids' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='4004' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='664'>
+          <var-decl name='max_match_sets' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='4005' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='max_scan_ie_len' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='4006' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='688'>
+          <var-decl name='max_sched_scan_ie_len' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='4007' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='max_sched_scan_plans' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='4008' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='max_sched_scan_plan_interval' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='4009' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='max_sched_scan_plan_iterations' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='4010' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='n_cipher_suites' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='4012' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='cipher_suites' type-id='type-id-2727' visibility='default' filepath='include/net/cfg80211.h' line='4013' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='retry_short' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='4015' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='904'>
+          <var-decl name='retry_long' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='4016' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='frag_threshold' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='4017' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='rts_threshold' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='4018' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='coverage_class' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='4019' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1000'>
+          <var-decl name='fw_version' type-id='type-id-373' visibility='default' filepath='include/net/cfg80211.h' line='4021' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='hw_version' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='4022' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='wowlan' type-id='type-id-6236' visibility='default' filepath='include/net/cfg80211.h' line='4025' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='wowlan_config' type-id='type-id-6237' visibility='default' filepath='include/net/cfg80211.h' line='4026' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='max_remain_on_channel_duration' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='4029' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1488'>
+          <var-decl name='max_num_pmkids' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='4031' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='available_antennas_tx' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='4033' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='available_antennas_rx' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='4034' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='probe_resp_offload' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='4041' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='extended_capabilities' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='4043' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='extended_capabilities_mask' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='4043' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='extended_capabilities_len' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='4044' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='iftype_ext_capab' type-id='type-id-6238' visibility='default' filepath='include/net/cfg80211.h' line='4046' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='num_iftype_ext_capab' type-id='type-id-5' visibility='default' filepath='include/net/cfg80211.h' line='4047' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='privid' type-id='type-id-15' visibility='default' filepath='include/net/cfg80211.h' line='4054' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='bands' type-id='type-id-6210' visibility='default' filepath='include/net/cfg80211.h' line='4056' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='reg_notifier' type-id='type-id-6239' visibility='default' filepath='include/net/cfg80211.h' line='4059' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='regd' type-id='type-id-6240' visibility='default' filepath='include/net/cfg80211.h' line='4064' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='dev' type-id='type-id-388' visibility='default' filepath='include/net/cfg80211.h' line='4068' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='registered' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='4071' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='debugfsdir' type-id='type-id-23' visibility='default' filepath='include/net/cfg80211.h' line='4074' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='ht_capa_mod_mask' type-id='type-id-6241' visibility='default' filepath='include/net/cfg80211.h' line='4076' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='vht_capa_mod_mask' type-id='type-id-6242' visibility='default' filepath='include/net/cfg80211.h' line='4077' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='wdev_list' type-id='type-id-20' visibility='default' filepath='include/net/cfg80211.h' line='4079' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='_net' type-id='type-id-1692' visibility='default' filepath='include/net/cfg80211.h' line='4082' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='coalesce' type-id='type-id-6243' visibility='default' filepath='include/net/cfg80211.h' line='4088' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='vendor_commands' type-id='type-id-6244' visibility='default' filepath='include/net/cfg80211.h' line='4090' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='vendor_events' type-id='type-id-6245' visibility='default' filepath='include/net/cfg80211.h' line='4091' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='n_vendor_commands' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='4092' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9120'>
+          <var-decl name='n_vendor_events' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='4092' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='max_ap_assoc_sta' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='4094' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9168'>
+          <var-decl name='max_num_csa_counters' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='4096' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9176'>
+          <var-decl name='max_adj_channel_rssi_comp' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='4097' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9184'>
+          <var-decl name='bss_select_support' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='4099' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='cookie_counter' type-id='type-id-40' visibility='default' filepath='include/net/cfg80211.h' line='4101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='nan_supported_bands' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='4103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9312'>
+          <var-decl name='txq_limit' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='4105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='txq_memory_limit' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='4106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9376'>
+          <var-decl name='txq_quantum' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='4107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='priv' type-id='type-id-440' visibility='default' filepath='include/net/cfg80211.h' line='4109' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mac_address' size-in-bits='48' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='793' column='1' id='type-id-6215'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='type-id-6229' visibility='default' filepath='include/net/cfg80211.h' line='794' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_txrx_stypes' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='3637' column='1' id='type-id-6246'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tx' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='3638' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='rx' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='3638' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_iface_combination' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='3579' column='1' id='type-id-6247'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='limits' type-id='type-id-6248' visibility='default' filepath='include/net/cfg80211.h' line='3584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num_different_channels' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='3590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_interfaces' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='3596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='n_limits' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='3602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='beacon_int_infra_match' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='3609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='radar_detect_widths' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='3615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='radar_detect_regions' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='3621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='beacon_int_min_gcd' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='3634' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_iface_limit' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='3515' column='1' id='type-id-6249'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='3516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='types' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='3517' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='cfg80211_signal_type' filepath='include/net/cfg80211.h' line='1903' column='1' id='type-id-6235'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='CFG80211_SIGNAL_TYPE_NONE' value='0'/>
+        <enumerator name='CFG80211_SIGNAL_TYPE_MBM' value='1'/>
+        <enumerator name='CFG80211_SIGNAL_TYPE_UNSPEC' value='2'/>
+      </enum-decl>
+      <class-decl name='wiphy_wowlan_support' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='3693' column='1' id='type-id-6250'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='3694' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='n_patterns' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='3695' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pattern_max_len' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='3696' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pattern_min_len' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='3697' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max_pkt_offset' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='3698' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='max_nd_match_sets' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='3699' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tcp' type-id='type-id-6251' visibility='default' filepath='include/net/cfg80211.h' line='3700' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wiphy_wowlan_tcp_support' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='3670' column='1' id='type-id-6252'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tok' type-id='type-id-6253' visibility='default' filepath='include/net/cfg80211.h' line='3671' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data_payload_max' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='3672' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='data_interval_max' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='3673' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='wake_payload_max' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='3674' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='seq' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='3675' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nl80211_wowlan_tcp_data_token_feature' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4671' column='1' id='type-id-6254'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min_len' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4672' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max_len' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4672' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bufsize' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4672' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_wowlan' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2463' column='1' id='type-id-6255'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='any' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='2464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='disconnect' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='2464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='magic_pkt' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='2464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='gtk_rekey_failure' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='2464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='eap_identity_req' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='2465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='four_way_handshake' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='2465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='rfkill_release' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='2466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='patterns' type-id='type-id-6256' visibility='default' filepath='include/net/cfg80211.h' line='2467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tcp' type-id='type-id-6257' visibility='default' filepath='include/net/cfg80211.h' line='2468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='n_patterns' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='2469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='nd_config' type-id='type-id-6258' visibility='default' filepath='include/net/cfg80211.h' line='2470' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_pkt_pattern' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2404' column='1' id='type-id-6259'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mask' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pattern' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pattern_len' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='2406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='pkt_offset' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='2407' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_wowlan_tcp' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2429' column='1' id='type-id-6260'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sock' type-id='type-id-5669' visibility='default' filepath='include/net/cfg80211.h' line='2430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='src' type-id='type-id-929' visibility='default' filepath='include/net/cfg80211.h' line='2431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dst' type-id='type-id-929' visibility='default' filepath='include/net/cfg80211.h' line='2431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='src_port' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='2432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='dst_port' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='2432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='dst_mac' type-id='type-id-6229' visibility='default' filepath='include/net/cfg80211.h' line='2433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='payload_len' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='2434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='payload' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='payload_seq' type-id='type-id-6261' visibility='default' filepath='include/net/cfg80211.h' line='2436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='data_interval' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='2437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='wake_len' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='2438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wake_data' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='wake_mask' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='tokens_size' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='2440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='payload_tok' type-id='type-id-6262' visibility='default' filepath='include/net/cfg80211.h' line='2442' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='6848' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='353' column='1' id='type-id-6263'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mmap' type-id='type-id-1209' visibility='default' filepath='include/linux/mm_types.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mm_rb' type-id='type-id-416' visibility='default' filepath='include/linux/mm_types.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vmacache_seqnum' type-id='type-id-40' visibility='default' filepath='include/linux/mm_types.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_unmapped_area' type-id='type-id-1484' visibility='default' filepath='include/linux/mm_types.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mmap_base' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mmap_legacy_base' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='task_size' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='highest_vm_end' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pgd' type-id='type-id-1485' visibility='default' filepath='include/linux/mm_types.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mm_users' type-id='type-id-26' visibility='default' filepath='include/linux/mm_types.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='mm_count' type-id='type-id-26' visibility='default' filepath='include/linux/mm_types.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='pgtables_bytes' type-id='type-id-115' visibility='default' filepath='include/linux/mm_types.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='map_count' type-id='type-id-17' visibility='default' filepath='include/linux/mm_types.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='page_table_lock' type-id='type-id-247' visibility='default' filepath='include/linux/mm_types.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mmap_sem' type-id='type-id-246' visibility='default' filepath='include/linux/mm_types.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='mmlist' type-id='type-id-20' visibility='default' filepath='include/linux/mm_types.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='hiwater_rss' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='hiwater_vm' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='total_vm' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='locked_vm' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='pinned_vm' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='data_vm' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='exec_vm' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='stack_vm' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='def_flags' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='arg_lock' type-id='type-id-247' visibility='default' filepath='include/linux/mm_types.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='start_code' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='end_code' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='start_data' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='end_data' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='start_brk' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='brk' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='start_stack' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='arg_start' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='arg_end' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='env_start' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='env_end' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='saved_auxv' type-id='type-id-1202' visibility='default' filepath='include/linux/mm_types.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='rss_stat' type-id='type-id-1486' visibility='default' filepath='include/linux/mm_types.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='binfmt' type-id='type-id-1487' visibility='default' filepath='include/linux/mm_types.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='context' type-id='type-id-1488' visibility='default' filepath='include/linux/mm_types.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='flags' type-id='type-id-16' visibility='default' filepath='include/linux/mm_types.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='core_state' type-id='type-id-1489' visibility='default' filepath='include/linux/mm_types.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='membarrier_state' type-id='type-id-26' visibility='default' filepath='include/linux/mm_types.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6176'>
+          <var-decl name='ioctx_lock' type-id='type-id-247' visibility='default' filepath='include/linux/mm_types.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='ioctx_table' type-id='type-id-1490' visibility='default' filepath='include/linux/mm_types.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='owner' type-id='type-id-431' visibility='default' filepath='include/linux/mm_types.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='user_ns' type-id='type-id-917' visibility='default' filepath='include/linux/mm_types.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='exe_file' type-id='type-id-83' visibility='default' filepath='include/linux/mm_types.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='tlb_flush_pending' type-id='type-id-26' visibility='default' filepath='include/linux/mm_types.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='uprobes_state' type-id='type-id-1491' visibility='default' filepath='include/linux/mm_types.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='async_put_work' type-id='type-id-255' visibility='default' filepath='include/linux/mm_types.h' line='500' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='303' column='1' id='type-id-6264'>
+        <data-member access='private'>
+          <var-decl name='shared' type-id='type-id-2419' visibility='default' filepath='include/linux/mm_types.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='anon_name' type-id='type-id-4' visibility='default' filepath='include/linux/mm_types.h' line='308' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='nl80211_wowlan_tcp_data_seq' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4649' column='1' id='type-id-6261'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4650' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='offset' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4650' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='len' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4650' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nl80211_wowlan_tcp_data_token' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4660' column='1' id='type-id-6262'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='offset' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='len' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='token_stream' type-id='type-id-946' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4662' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_sched_scan_request' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1859' column='1' id='type-id-6265'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reqid' type-id='type-id-40' visibility='default' filepath='include/net/cfg80211.h' line='1860' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ssids' type-id='type-id-6266' visibility='default' filepath='include/net/cfg80211.h' line='1861' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='n_ssids' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='1862' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='n_channels' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1863' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='scan_width' type-id='type-id-6267' visibility='default' filepath='include/net/cfg80211.h' line='1864' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ie' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='1865' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ie_len' type-id='type-id-84' visibility='default' filepath='include/net/cfg80211.h' line='1866' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1867' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='match_sets' type-id='type-id-6268' visibility='default' filepath='include/net/cfg80211.h' line='1868' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='n_match_sets' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='1869' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='min_rssi_thold' type-id='type-id-738' visibility='default' filepath='include/net/cfg80211.h' line='1870' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='delay' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1871' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='scan_plans' type-id='type-id-6269' visibility='default' filepath='include/net/cfg80211.h' line='1872' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='n_scan_plans' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='1873' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='mac_addr' type-id='type-id-6229' visibility='default' filepath='include/net/cfg80211.h' line='1875' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='784'>
+          <var-decl name='mac_addr_mask' type-id='type-id-6229' visibility='default' filepath='include/net/cfg80211.h' line='1876' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='relative_rssi_set' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='1878' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='840'>
+          <var-decl name='relative_rssi' type-id='type-id-209' visibility='default' filepath='include/net/cfg80211.h' line='1879' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='rssi_adjust' type-id='type-id-6270' visibility='default' filepath='include/net/cfg80211.h' line='1880' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='wiphy' type-id='type-id-6271' visibility='default' filepath='include/net/cfg80211.h' line='1883' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='dev' type-id='type-id-1650' visibility='default' filepath='include/net/cfg80211.h' line='1884' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='scan_start' type-id='type-id-16' visibility='default' filepath='include/net/cfg80211.h' line='1885' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='report_results' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='1886' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='callback_head' type-id='type-id-385' visibility='default' filepath='include/net/cfg80211.h' line='1887' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='owner_nlportid' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1888' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='nl_owner_dead' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='1889' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/net/cfg80211.h' line='1890' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='channels' type-id='type-id-6206' visibility='default' filepath='include/net/cfg80211.h' line='1893' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_ssid' size-in-bits='264' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1679' column='1' id='type-id-6272'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ssid' type-id='type-id-6225' visibility='default' filepath='include/net/cfg80211.h' line='1680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ssid_len' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1681' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_bss_scan_width' filepath='include/uapi/linux/nl80211.h' line='4070' column='1' id='type-id-6267'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='NL80211_BSS_CHAN_WIDTH_20' value='0'/>
+        <enumerator name='NL80211_BSS_CHAN_WIDTH_10' value='1'/>
+        <enumerator name='NL80211_BSS_CHAN_WIDTH_5' value='2'/>
+      </enum-decl>
+      <class-decl name='cfg80211_match_set' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1778' column='1' id='type-id-6273'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ssid' type-id='type-id-6272' visibility='default' filepath='include/net/cfg80211.h' line='1779' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='bssid' type-id='type-id-6229' visibility='default' filepath='include/net/cfg80211.h' line='1780' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rssi_thold' type-id='type-id-738' visibility='default' filepath='include/net/cfg80211.h' line='1781' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_sched_scan_plan' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1793' column='1' id='type-id-6274'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='interval' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1794' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='iterations' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1795' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_bss_select_adjust' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1804' column='1' id='type-id-6270'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='band' type-id='type-id-6275' visibility='default' filepath='include/net/cfg80211.h' line='1805' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='delta' type-id='type-id-209' visibility='default' filepath='include/net/cfg80211.h' line='1806' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_band' filepath='include/uapi/linux/nl80211.h' line='4345' column='1' id='type-id-6275'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='NL80211_BAND_2GHZ' value='0'/>
+        <enumerator name='NL80211_BAND_5GHZ' value='1'/>
+        <enumerator name='NL80211_BAND_60GHZ' value='2'/>
+        <enumerator name='NUM_NL80211_BANDS' value='3'/>
+      </enum-decl>
+      <class-decl name='wireless_dev' size-in-bits='2752' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='4312' column='1' id='type-id-6276'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wiphy' type-id='type-id-6271' visibility='default' filepath='include/net/cfg80211.h' line='4313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='iftype' type-id='type-id-6277' visibility='default' filepath='include/net/cfg80211.h' line='4314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/net/cfg80211.h' line='4317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='netdev' type-id='type-id-1650' visibility='default' filepath='include/net/cfg80211.h' line='4318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='identifier' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='4320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mgmt_registrations' type-id='type-id-20' visibility='default' filepath='include/net/cfg80211.h' line='4322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='mgmt_registrations_lock' type-id='type-id-247' visibility='default' filepath='include/net/cfg80211.h' line='4323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mtx' type-id='type-id-245' visibility='default' filepath='include/net/cfg80211.h' line='4325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='use_4addr' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='4327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='840'>
+          <var-decl name='is_running' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='4327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='848'>
+          <var-decl name='address' type-id='type-id-6229' visibility='default' filepath='include/net/cfg80211.h' line='4329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='ssid' type-id='type-id-6225' visibility='default' filepath='include/net/cfg80211.h' line='4332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ssid_len' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='4333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1160'>
+          <var-decl name='mesh_id_len' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='4333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1168'>
+          <var-decl name='mesh_id_up_len' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='4333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='conn' type-id='type-id-6278' visibility='default' filepath='include/net/cfg80211.h' line='4334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='connect_keys' type-id='type-id-6279' visibility='default' filepath='include/net/cfg80211.h' line='4335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='conn_bss_type' type-id='type-id-6280' visibility='default' filepath='include/net/cfg80211.h' line='4336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='conn_owner_nlportid' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='4337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='disconnect_wk' type-id='type-id-255' visibility='default' filepath='include/net/cfg80211.h' line='4339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='disconnect_bssid' type-id='type-id-6229' visibility='default' filepath='include/net/cfg80211.h' line='4340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='event_list' type-id='type-id-20' visibility='default' filepath='include/net/cfg80211.h' line='4342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='event_lock' type-id='type-id-247' visibility='default' filepath='include/net/cfg80211.h' line='4343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='current_bss' type-id='type-id-6281' visibility='default' filepath='include/net/cfg80211.h' line='4345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='preset_chandef' type-id='type-id-6282' visibility='default' filepath='include/net/cfg80211.h' line='4346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='chandef' type-id='type-id-6282' visibility='default' filepath='include/net/cfg80211.h' line='4347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='ibss_fixed' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='4349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2376'>
+          <var-decl name='ibss_dfs_possible' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='4350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2384'>
+          <var-decl name='ps' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='4352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2400'>
+          <var-decl name='ps_timeout' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='4353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='beacon_interval' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='4355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2464'>
+          <var-decl name='ap_unexpected_nlportid' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='4357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='owner_nlportid' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='4359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2528'>
+          <var-decl name='nl_owner_dead' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='4360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2536'>
+          <var-decl name='cac_started' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='4362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='cac_start_time' type-id='type-id-16' visibility='default' filepath='include/net/cfg80211.h' line='4363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='cac_time_ms' type-id='type-id-5' visibility='default' filepath='include/net/cfg80211.h' line='4364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='cqm_config' type-id='type-id-6283' visibility='default' filepath='include/net/cfg80211.h' line='4381' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_iftype' filepath='include/uapi/linux/nl80211.h' line='2775' column='1' id='type-id-6277'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='NL80211_IFTYPE_UNSPECIFIED' value='0'/>
+        <enumerator name='NL80211_IFTYPE_ADHOC' value='1'/>
+        <enumerator name='NL80211_IFTYPE_STATION' value='2'/>
+        <enumerator name='NL80211_IFTYPE_AP' value='3'/>
+        <enumerator name='NL80211_IFTYPE_AP_VLAN' value='4'/>
+        <enumerator name='NL80211_IFTYPE_WDS' value='5'/>
+        <enumerator name='NL80211_IFTYPE_MONITOR' value='6'/>
+        <enumerator name='NL80211_IFTYPE_MESH_POINT' value='7'/>
+        <enumerator name='NL80211_IFTYPE_P2P_CLIENT' value='8'/>
+        <enumerator name='NL80211_IFTYPE_P2P_GO' value='9'/>
+        <enumerator name='NL80211_IFTYPE_P2P_DEVICE' value='10'/>
+        <enumerator name='NL80211_IFTYPE_OCB' value='11'/>
+        <enumerator name='NL80211_IFTYPE_NAN' value='12'/>
+        <enumerator name='NUM_NL80211_IFTYPES' value='13'/>
+        <enumerator name='NL80211_IFTYPE_MAX' value='12'/>
+      </enum-decl>
+      <class-decl name='cfg80211_cached_keys' size-in-bits='1472' is-struct='yes' visibility='default' filepath='net/wireless/core.h' line='246' column='1' id='type-id-6284'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='params' type-id='type-id-6214' visibility='default' filepath='net/wireless/core.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='data' type-id='type-id-6227' visibility='default' filepath='net/wireless/core.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='def' type-id='type-id-17' visibility='default' filepath='net/wireless/core.h' line='249' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='key_params' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='489' column='1' id='type-id-6213'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='key' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='seq' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='key_len' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='seq_len' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cipher' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='494' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ieee80211_bss_type' filepath='include/net/cfg80211.h' line='208' column='1' id='type-id-6280'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='IEEE80211_BSS_TYPE_ESS' value='0'/>
+        <enumerator name='IEEE80211_BSS_TYPE_PBSS' value='1'/>
+        <enumerator name='IEEE80211_BSS_TYPE_IBSS' value='2'/>
+        <enumerator name='IEEE80211_BSS_TYPE_MBSS' value='3'/>
+        <enumerator name='IEEE80211_BSS_TYPE_ANY' value='4'/>
+      </enum-decl>
+      <class-decl name='cfg80211_internal_bss' size-in-bits='1408' is-struct='yes' visibility='default' filepath='net/wireless/core.h' line='140' column='1' id='type-id-6285'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='net/wireless/core.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hidden_list' type-id='type-id-20' visibility='default' filepath='net/wireless/core.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rbn' type-id='type-id-422' visibility='default' filepath='net/wireless/core.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ts_boottime' type-id='type-id-40' visibility='default' filepath='net/wireless/core.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ts' type-id='type-id-16' visibility='default' filepath='net/wireless/core.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='refcount' type-id='type-id-16' visibility='default' filepath='net/wireless/core.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='hold' type-id='type-id-26' visibility='default' filepath='net/wireless/core.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='parent_tsf' type-id='type-id-40' visibility='default' filepath='net/wireless/core.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='parent_bssid' type-id='type-id-6229' visibility='default' filepath='net/wireless/core.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='pub' type-id='type-id-6286' visibility='default' filepath='net/wireless/core.h' line='162' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_bss' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1985' column='1' id='type-id-6286'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='channel' type-id='type-id-6205' visibility='default' filepath='include/net/cfg80211.h' line='1986' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='scan_width' type-id='type-id-6267' visibility='default' filepath='include/net/cfg80211.h' line='1987' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ies' type-id='type-id-6287' visibility='default' filepath='include/net/cfg80211.h' line='1989' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='beacon_ies' type-id='type-id-6287' visibility='default' filepath='include/net/cfg80211.h' line='1990' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='proberesp_ies' type-id='type-id-6287' visibility='default' filepath='include/net/cfg80211.h' line='1991' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hidden_beacon_bss' type-id='type-id-6288' visibility='default' filepath='include/net/cfg80211.h' line='1993' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='signal' type-id='type-id-738' visibility='default' filepath='include/net/cfg80211.h' line='1995' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='beacon_interval' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='1997' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='432'>
+          <var-decl name='capability' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='1998' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='bssid' type-id='type-id-6229' visibility='default' filepath='include/net/cfg80211.h' line='2000' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='496'>
+          <var-decl name='chains' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='2001' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='504'>
+          <var-decl name='chain_signal' type-id='type-id-6218' visibility='default' filepath='include/net/cfg80211.h' line='2002' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='priv' type-id='type-id-5884' visibility='default' filepath='include/net/cfg80211.h' line='2004' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_channel' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='150' column='1' id='type-id-6289'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='band' type-id='type-id-6275' visibility='default' filepath='include/net/cfg80211.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='center_freq' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='hw_value' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_antenna_gain' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max_power' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='max_reg_power' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='beacon_found' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='orig_flags' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='orig_mag' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='orig_mpwr' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dfs_state' type-id='type-id-6290' visibility='default' filepath='include/net/cfg80211.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dfs_state_entered' type-id='type-id-16' visibility='default' filepath='include/net/cfg80211.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dfs_cac_ms' type-id='type-id-5' visibility='default' filepath='include/net/cfg80211.h' line='163' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_dfs_state' filepath='include/uapi/linux/nl80211.h' line='5468' column='1' id='type-id-6290'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='NL80211_DFS_USABLE' value='0'/>
+        <enumerator name='NL80211_DFS_UNAVAILABLE' value='1'/>
+        <enumerator name='NL80211_DFS_AVAILABLE' value='2'/>
+      </enum-decl>
+      <class-decl name='cfg80211_bss_ies' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1948' column='1' id='type-id-6291'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tsf' type-id='type-id-40' visibility='default' filepath='include/net/cfg80211.h' line='1949' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='callback_head' type-id='type-id-385' visibility='default' filepath='include/net/cfg80211.h' line='1950' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='len' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='1951' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='from_beacon' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='1952' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='232'>
+          <var-decl name='data' type-id='type-id-5884' visibility='default' filepath='include/net/cfg80211.h' line='1953' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_chan_def' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='505' column='1' id='type-id-6282'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chan' type-id='type-id-6205' visibility='default' filepath='include/net/cfg80211.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='width' type-id='type-id-6292' visibility='default' filepath='include/net/cfg80211.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='center_freq1' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='center_freq2' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='509' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_chan_width' filepath='include/uapi/linux/nl80211.h' line='4050' column='1' id='type-id-6292'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='NL80211_CHAN_WIDTH_20_NOHT' value='0'/>
+        <enumerator name='NL80211_CHAN_WIDTH_20' value='1'/>
+        <enumerator name='NL80211_CHAN_WIDTH_40' value='2'/>
+        <enumerator name='NL80211_CHAN_WIDTH_80' value='3'/>
+        <enumerator name='NL80211_CHAN_WIDTH_80P80' value='4'/>
+        <enumerator name='NL80211_CHAN_WIDTH_160' value='5'/>
+        <enumerator name='NL80211_CHAN_WIDTH_5' value='6'/>
+        <enumerator name='NL80211_CHAN_WIDTH_10' value='7'/>
+      </enum-decl>
+      <class-decl name='cfg80211_cqm_config' size-in-bits='96' is-struct='yes' visibility='default' filepath='net/wireless/core.h' line='263' column='1' id='type-id-6293'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rssi_hyst' type-id='type-id-7' visibility='default' filepath='net/wireless/core.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='last_rssi_event_value' type-id='type-id-738' visibility='default' filepath='net/wireless/core.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n_rssi_thresholds' type-id='type-id-17' visibility='default' filepath='net/wireless/core.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='rssi_thresholds' type-id='type-id-6217' visibility='default' filepath='net/wireless/core.h' line='267' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wiphy_iftype_ext_capab' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='3799' column='1' id='type-id-6294'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='iftype' type-id='type-id-6277' visibility='default' filepath='include/net/cfg80211.h' line='3800' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='extended_capabilities' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='3801' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='extended_capabilities_mask' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='3802' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='extended_capabilities_len' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='3803' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_supported_band' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='345' column='1' id='type-id-6295'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='channels' type-id='type-id-6205' visibility='default' filepath='include/net/cfg80211.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bitrates' type-id='type-id-6296' visibility='default' filepath='include/net/cfg80211.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='band' type-id='type-id-6275' visibility='default' filepath='include/net/cfg80211.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='n_channels' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='n_bitrates' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='ht_cap' type-id='type-id-6297' visibility='default' filepath='include/net/cfg80211.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='vht_cap' type-id='type-id-6298' visibility='default' filepath='include/net/cfg80211.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='n_iftype_data' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='iftype_data' type-id='type-id-6299' visibility='default' filepath='include/net/cfg80211.h' line='354' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_rate' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='246' column='1' id='type-id-6300'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bitrate' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='hw_value' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hw_value_short' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='249' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_sta_ht_cap' size-in-bits='176' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='264' column='1' id='type-id-6297'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cap' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='ht_supported' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='ampdu_factor' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ampdu_density' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='mcs' type-id='type-id-6301' visibility='default' filepath='include/net/cfg80211.h' line='269' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_mcs_info' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1267' column='1' id='type-id-6301'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rx_mask' type-id='type-id-6222' visibility='default' filepath='include/linux/ieee80211.h' line='1268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='rx_highest' type-id='type-id-5123' visibility='default' filepath='include/linux/ieee80211.h' line='1269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='tx_params' type-id='type-id-214' visibility='default' filepath='include/linux/ieee80211.h' line='1270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='reserved' type-id='type-id-1185' visibility='default' filepath='include/linux/ieee80211.h' line='1271' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_sta_vht_cap' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='282' column='1' id='type-id-6298'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vht_supported' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cap' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vht_mcs' type-id='type-id-6302' visibility='default' filepath='include/net/cfg80211.h' line='285' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_vht_mcs_info' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1471' column='1' id='type-id-6302'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rx_mcs_map' type-id='type-id-5123' visibility='default' filepath='include/linux/ieee80211.h' line='1472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='rx_highest' type-id='type-id-5123' visibility='default' filepath='include/linux/ieee80211.h' line='1473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tx_mcs_map' type-id='type-id-5123' visibility='default' filepath='include/linux/ieee80211.h' line='1474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='tx_highest' type-id='type-id-5123' visibility='default' filepath='include/linux/ieee80211.h' line='1475' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_sband_iftype_data' size-in-bits='432' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='318' column='1' id='type-id-6303'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='types_mask' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='he_cap' type-id='type-id-6304' visibility='default' filepath='include/net/cfg80211.h' line='320' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_sta_he_cap' size-in-bits='416' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='301' column='1' id='type-id-6304'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='has_he' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='he_cap_elem' type-id='type-id-6305' visibility='default' filepath='include/net/cfg80211.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='he_mcs_nss_supp' type-id='type-id-6306' visibility='default' filepath='include/net/cfg80211.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='216'>
+          <var-decl name='ppe_thres' type-id='type-id-6223' visibility='default' filepath='include/net/cfg80211.h' line='305' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_he_cap_elem' size-in-bits='112' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1550' column='1' id='type-id-6305'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mac_cap_info' type-id='type-id-6228' visibility='default' filepath='include/linux/ieee80211.h' line='1551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='phy_cap_info' type-id='type-id-6230' visibility='default' filepath='include/linux/ieee80211.h' line='1552' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_he_mcs_nss_supp' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1597' column='1' id='type-id-6306'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rx_mcs_80' type-id='type-id-5123' visibility='default' filepath='include/linux/ieee80211.h' line='1598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='tx_mcs_80' type-id='type-id-5123' visibility='default' filepath='include/linux/ieee80211.h' line='1599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='rx_mcs_160' type-id='type-id-5123' visibility='default' filepath='include/linux/ieee80211.h' line='1600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='tx_mcs_160' type-id='type-id-5123' visibility='default' filepath='include/linux/ieee80211.h' line='1601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_mcs_80p80' type-id='type-id-5123' visibility='default' filepath='include/linux/ieee80211.h' line='1602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='tx_mcs_80p80' type-id='type-id-5123' visibility='default' filepath='include/linux/ieee80211.h' line='1603' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulatory_request' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/regulatory.h' line='77' column='1' id='type-id-6307'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='callback_head' type-id='type-id-385' visibility='default' filepath='include/net/regulatory.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='wiphy_idx' type-id='type-id-17' visibility='default' filepath='include/net/regulatory.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='initiator' type-id='type-id-6308' visibility='default' filepath='include/net/regulatory.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='user_reg_hint_type' type-id='type-id-6309' visibility='default' filepath='include/net/regulatory.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='alpha2' type-id='type-id-6203' visibility='default' filepath='include/net/regulatory.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dfs_region' type-id='type-id-6310' visibility='default' filepath='include/net/regulatory.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='intersect' type-id='type-id-33' visibility='default' filepath='include/net/regulatory.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='296'>
+          <var-decl name='processed' type-id='type-id-33' visibility='default' filepath='include/net/regulatory.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='country_ie_env' type-id='type-id-6311' visibility='default' filepath='include/net/regulatory.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/net/regulatory.h' line='87' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_reg_initiator' filepath='include/uapi/linux/nl80211.h' line='3445' column='1' id='type-id-6308'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='NL80211_REGDOM_SET_BY_CORE' value='0'/>
+        <enumerator name='NL80211_REGDOM_SET_BY_USER' value='1'/>
+        <enumerator name='NL80211_REGDOM_SET_BY_DRIVER' value='2'/>
+        <enumerator name='NL80211_REGDOM_SET_BY_COUNTRY_IE' value='3'/>
+      </enum-decl>
+      <enum-decl name='nl80211_user_reg_hint_type' filepath='include/uapi/linux/nl80211.h' line='3645' column='1' id='type-id-6309'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='NL80211_USER_REG_HINT_USER' value='0'/>
+        <enumerator name='NL80211_USER_REG_HINT_CELL_BASE' value='1'/>
+        <enumerator name='NL80211_USER_REG_HINT_INDOOR' value='2'/>
+      </enum-decl>
+      <enum-decl name='nl80211_dfs_regions' filepath='include/uapi/linux/nl80211.h' line='3621' column='1' id='type-id-6310'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='NL80211_DFS_UNSET' value='0'/>
+        <enumerator name='NL80211_DFS_FCC' value='1'/>
+        <enumerator name='NL80211_DFS_ETSI' value='2'/>
+        <enumerator name='NL80211_DFS_JP' value='3'/>
+      </enum-decl>
+      <enum-decl name='environment_cap' filepath='include/net/regulatory.h' line='31' column='1' id='type-id-6311'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='ENVIRON_ANY' value='0'/>
+        <enumerator name='ENVIRON_INDOOR' value='1'/>
+        <enumerator name='ENVIRON_OUTDOOR' value='2'/>
+      </enum-decl>
+      <class-decl name='ieee80211_regdomain' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/regulatory.h' line='226' column='1' id='type-id-6312'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='callback_head' type-id='type-id-385' visibility='default' filepath='include/net/regulatory.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='n_reg_rules' type-id='type-id-7' visibility='default' filepath='include/net/regulatory.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='alpha2' type-id='type-id-6203' visibility='default' filepath='include/net/regulatory.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dfs_region' type-id='type-id-6310' visibility='default' filepath='include/net/regulatory.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='reg_rules' type-id='type-id-6208' visibility='default' filepath='include/net/regulatory.h' line='231' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_reg_rule' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/net/regulatory.h' line='217' column='1' id='type-id-6207'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='freq_range' type-id='type-id-6313' visibility='default' filepath='include/net/regulatory.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='power_rule' type-id='type-id-6314' visibility='default' filepath='include/net/regulatory.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='wmm_rule' type-id='type-id-6315' visibility='default' filepath='include/net/regulatory.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='flags' type-id='type-id-7' visibility='default' filepath='include/net/regulatory.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dfs_cac_ms' type-id='type-id-7' visibility='default' filepath='include/net/regulatory.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='has_wmm' type-id='type-id-33' visibility='default' filepath='include/net/regulatory.h' line='223' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_freq_range' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/net/regulatory.h' line='181' column='1' id='type-id-6313'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start_freq_khz' type-id='type-id-7' visibility='default' filepath='include/net/regulatory.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='end_freq_khz' type-id='type-id-7' visibility='default' filepath='include/net/regulatory.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_bandwidth_khz' type-id='type-id-7' visibility='default' filepath='include/net/regulatory.h' line='184' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_power_rule' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/regulatory.h' line='187' column='1' id='type-id-6314'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max_antenna_gain' type-id='type-id-7' visibility='default' filepath='include/net/regulatory.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max_eirp' type-id='type-id-7' visibility='default' filepath='include/net/regulatory.h' line='189' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_wmm_rule' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/regulatory.h' line='212' column='1' id='type-id-6315'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='client' type-id='type-id-6212' visibility='default' filepath='include/net/regulatory.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ap' type-id='type-id-6212' visibility='default' filepath='include/net/regulatory.h' line='214' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_wmm_ac' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/regulatory.h' line='205' column='1' id='type-id-6211'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cw_min' type-id='type-id-688' visibility='default' filepath='include/net/regulatory.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='cw_max' type-id='type-id-688' visibility='default' filepath='include/net/regulatory.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cot' type-id='type-id-688' visibility='default' filepath='include/net/regulatory.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='aifsn' type-id='type-id-214' visibility='default' filepath='include/net/regulatory.h' line='209' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/dcache.h' line='106' column='1' id='type-id-6316'>
+        <data-member access='private'>
+          <var-decl name='d_lru' type-id='type-id-20' visibility='default' filepath='include/linux/dcache.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='d_wait' type-id='type-id-881' visibility='default' filepath='include/linux/dcache.h' line='108' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/dcache.h' line='115' column='1' id='type-id-6317'>
+        <data-member access='private'>
+          <var-decl name='d_alias' type-id='type-id-520' visibility='default' filepath='include/linux/dcache.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='d_in_lookup_hash' type-id='type-id-1286' visibility='default' filepath='include/linux/dcache.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='d_rcu' type-id='type-id-385' visibility='default' filepath='include/linux/dcache.h' line='118' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='ieee80211_ht_cap' size-in-bits='208' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1301' column='1' id='type-id-6318'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cap_info' type-id='type-id-5123' visibility='default' filepath='include/linux/ieee80211.h' line='1302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='ampdu_params_info' type-id='type-id-214' visibility='default' filepath='include/linux/ieee80211.h' line='1303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='mcs' type-id='type-id-6301' visibility='default' filepath='include/linux/ieee80211.h' line='1306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='extended_ht_cap_info' type-id='type-id-5123' visibility='default' filepath='include/linux/ieee80211.h' line='1308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='tx_BF_cap_info' type-id='type-id-2462' visibility='default' filepath='include/linux/ieee80211.h' line='1309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='antenna_selection_info' type-id='type-id-214' visibility='default' filepath='include/linux/ieee80211.h' line='1310' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_vht_cap' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1507' column='1' id='type-id-6319'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vht_cap_info' type-id='type-id-2462' visibility='default' filepath='include/linux/ieee80211.h' line='1508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='supp_mcs' type-id='type-id-6302' visibility='default' filepath='include/linux/ieee80211.h' line='1509' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wiphy_coalesce_support' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='3713' column='1' id='type-id-6320'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='n_rules' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='3714' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max_delay' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='3715' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n_patterns' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='3716' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pattern_max_len' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='3717' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pattern_min_len' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='3718' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='max_pkt_offset' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='3719' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wiphy_vendor_command' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='3778' column='1' id='type-id-6321'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='info' type-id='type-id-6322' visibility='default' filepath='include/net/cfg80211.h' line='3779' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='3780' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='doit' type-id='type-id-6323' visibility='default' filepath='include/net/cfg80211.h' line='3781' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dumpit' type-id='type-id-6324' visibility='default' filepath='include/net/cfg80211.h' line='3783' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nl80211_vendor_cmd_info' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/nl80211.h' line='5533' column='1' id='type-id-6322'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vendor_id' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/nl80211.h' line='5534' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='subcmd' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/nl80211.h' line='5535' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__4' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='666' column='1' id='type-id-6325'>
+        <data-member access='private'>
+          <var-decl name='' type-id='type-id-6326' visibility='default' filepath='include/linux/skbuff.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rbnode' type-id='type-id-422' visibility='default' filepath='include/linux/skbuff.h' line='681' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='list' type-id='type-id-20' visibility='default' filepath='include/linux/skbuff.h' line='682' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='667' column='1' id='type-id-6326'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='type-id-1768' visibility='default' filepath='include/linux/skbuff.h' line='669' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prev' type-id='type-id-1768' visibility='default' filepath='include/linux/skbuff.h' line='670' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='type-id-6327' visibility='default' filepath='include/linux/skbuff.h' line='672' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__5' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='672' column='1' id='type-id-6327'>
+        <data-member access='private'>
+          <var-decl name='dev' type-id='type-id-1650' visibility='default' filepath='include/linux/skbuff.h' line='673' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='dev_scratch' type-id='type-id-16' visibility='default' filepath='include/linux/skbuff.h' line='678' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='cfg80211_ops' size-in-bits='6592' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='3130' column='1' id='type-id-6328'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='suspend' type-id='type-id-6329' visibility='default' filepath='include/net/cfg80211.h' line='3131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='resume' type-id='type-id-6330' visibility='default' filepath='include/net/cfg80211.h' line='3132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_wakeup' type-id='type-id-6331' visibility='default' filepath='include/net/cfg80211.h' line='3133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='add_virtual_intf' type-id='type-id-6332' visibility='default' filepath='include/net/cfg80211.h' line='3135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='del_virtual_intf' type-id='type-id-6333' visibility='default' filepath='include/net/cfg80211.h' line='3140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='change_virtual_intf' type-id='type-id-6334' visibility='default' filepath='include/net/cfg80211.h' line='3142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='add_key' type-id='type-id-6335' visibility='default' filepath='include/net/cfg80211.h' line='3147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_key' type-id='type-id-6336' visibility='default' filepath='include/net/cfg80211.h' line='3150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='del_key' type-id='type-id-6337' visibility='default' filepath='include/net/cfg80211.h' line='3154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_default_key' type-id='type-id-6338' visibility='default' filepath='include/net/cfg80211.h' line='3156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_default_mgmt_key' type-id='type-id-6339' visibility='default' filepath='include/net/cfg80211.h' line='3159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='start_ap' type-id='type-id-6340' visibility='default' filepath='include/net/cfg80211.h' line='3163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='change_beacon' type-id='type-id-6341' visibility='default' filepath='include/net/cfg80211.h' line='3165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='stop_ap' type-id='type-id-6342' visibility='default' filepath='include/net/cfg80211.h' line='3167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='add_station' type-id='type-id-6343' visibility='default' filepath='include/net/cfg80211.h' line='3170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='del_station' type-id='type-id-6344' visibility='default' filepath='include/net/cfg80211.h' line='3173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='change_station' type-id='type-id-6343' visibility='default' filepath='include/net/cfg80211.h' line='3175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='get_station' type-id='type-id-6345' visibility='default' filepath='include/net/cfg80211.h' line='3178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='dump_station' type-id='type-id-6346' visibility='default' filepath='include/net/cfg80211.h' line='3180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='add_mpath' type-id='type-id-6347' visibility='default' filepath='include/net/cfg80211.h' line='3183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='del_mpath' type-id='type-id-6348' visibility='default' filepath='include/net/cfg80211.h' line='3185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='change_mpath' type-id='type-id-6347' visibility='default' filepath='include/net/cfg80211.h' line='3187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='get_mpath' type-id='type-id-6349' visibility='default' filepath='include/net/cfg80211.h' line='3189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='dump_mpath' type-id='type-id-6350' visibility='default' filepath='include/net/cfg80211.h' line='3191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='get_mpp' type-id='type-id-6349' visibility='default' filepath='include/net/cfg80211.h' line='3194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='dump_mpp' type-id='type-id-6350' visibility='default' filepath='include/net/cfg80211.h' line='3196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='get_mesh_config' type-id='type-id-6351' visibility='default' filepath='include/net/cfg80211.h' line='3199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='update_mesh_config' type-id='type-id-6352' visibility='default' filepath='include/net/cfg80211.h' line='3202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='join_mesh' type-id='type-id-6353' visibility='default' filepath='include/net/cfg80211.h' line='3205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='leave_mesh' type-id='type-id-6342' visibility='default' filepath='include/net/cfg80211.h' line='3208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='join_ocb' type-id='type-id-6354' visibility='default' filepath='include/net/cfg80211.h' line='3210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='leave_ocb' type-id='type-id-6342' visibility='default' filepath='include/net/cfg80211.h' line='3212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='change_bss' type-id='type-id-6355' visibility='default' filepath='include/net/cfg80211.h' line='3214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='set_txq_params' type-id='type-id-6356' visibility='default' filepath='include/net/cfg80211.h' line='3217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='libertas_set_mesh_channel' type-id='type-id-6357' visibility='default' filepath='include/net/cfg80211.h' line='3220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='set_monitor_channel' type-id='type-id-6358' visibility='default' filepath='include/net/cfg80211.h' line='3224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='scan' type-id='type-id-6359' visibility='default' filepath='include/net/cfg80211.h' line='3227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='abort_scan' type-id='type-id-6360' visibility='default' filepath='include/net/cfg80211.h' line='3229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='auth' type-id='type-id-6361' visibility='default' filepath='include/net/cfg80211.h' line='3231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='assoc' type-id='type-id-6362' visibility='default' filepath='include/net/cfg80211.h' line='3233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='deauth' type-id='type-id-6363' visibility='default' filepath='include/net/cfg80211.h' line='3235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='disassoc' type-id='type-id-6364' visibility='default' filepath='include/net/cfg80211.h' line='3237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='connect' type-id='type-id-6365' visibility='default' filepath='include/net/cfg80211.h' line='3240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='update_connect_params' type-id='type-id-6366' visibility='default' filepath='include/net/cfg80211.h' line='3242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='disconnect' type-id='type-id-6367' visibility='default' filepath='include/net/cfg80211.h' line='3246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='join_ibss' type-id='type-id-6368' visibility='default' filepath='include/net/cfg80211.h' line='3249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='leave_ibss' type-id='type-id-6342' visibility='default' filepath='include/net/cfg80211.h' line='3251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='set_mcast_rate' type-id='type-id-6369' visibility='default' filepath='include/net/cfg80211.h' line='3253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='set_wiphy_params' type-id='type-id-6370' visibility='default' filepath='include/net/cfg80211.h' line='3256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='set_tx_power' type-id='type-id-6371' visibility='default' filepath='include/net/cfg80211.h' line='3258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='get_tx_power' type-id='type-id-6372' visibility='default' filepath='include/net/cfg80211.h' line='3260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='set_wds_peer' type-id='type-id-6348' visibility='default' filepath='include/net/cfg80211.h' line='3263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='rfkill_poll' type-id='type-id-6373' visibility='default' filepath='include/net/cfg80211.h' line='3266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='set_bitrate_mask' type-id='type-id-6374' visibility='default' filepath='include/net/cfg80211.h' line='3276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='dump_survey' type-id='type-id-6375' visibility='default' filepath='include/net/cfg80211.h' line='3281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='set_pmksa' type-id='type-id-6376' visibility='default' filepath='include/net/cfg80211.h' line='3284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='del_pmksa' type-id='type-id-6376' visibility='default' filepath='include/net/cfg80211.h' line='3286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='flush_pmksa' type-id='type-id-6342' visibility='default' filepath='include/net/cfg80211.h' line='3288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='remain_on_channel' type-id='type-id-6377' visibility='default' filepath='include/net/cfg80211.h' line='3290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='cancel_remain_on_channel' type-id='type-id-6378' visibility='default' filepath='include/net/cfg80211.h' line='3295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='mgmt_tx' type-id='type-id-6379' visibility='default' filepath='include/net/cfg80211.h' line='3299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='mgmt_tx_cancel_wait' type-id='type-id-6378' visibility='default' filepath='include/net/cfg80211.h' line='3302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='set_power_mgmt' type-id='type-id-6380' visibility='default' filepath='include/net/cfg80211.h' line='3306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='set_cqm_rssi_config' type-id='type-id-6381' visibility='default' filepath='include/net/cfg80211.h' line='3309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='set_cqm_rssi_range_config' type-id='type-id-6382' visibility='default' filepath='include/net/cfg80211.h' line='3313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='set_cqm_txe_config' type-id='type-id-6383' visibility='default' filepath='include/net/cfg80211.h' line='3317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='mgmt_frame_register' type-id='type-id-6384' visibility='default' filepath='include/net/cfg80211.h' line='3321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='set_antenna' type-id='type-id-6385' visibility='default' filepath='include/net/cfg80211.h' line='3325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='get_antenna' type-id='type-id-6386' visibility='default' filepath='include/net/cfg80211.h' line='3326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='sched_scan_start' type-id='type-id-6387' visibility='default' filepath='include/net/cfg80211.h' line='3328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='sched_scan_stop' type-id='type-id-6388' visibility='default' filepath='include/net/cfg80211.h' line='3331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='set_rekey_data' type-id='type-id-6389' visibility='default' filepath='include/net/cfg80211.h' line='3334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='tdls_mgmt' type-id='type-id-6390' visibility='default' filepath='include/net/cfg80211.h' line='3337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='tdls_oper' type-id='type-id-6391' visibility='default' filepath='include/net/cfg80211.h' line='3341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='probe_client' type-id='type-id-6392' visibility='default' filepath='include/net/cfg80211.h' line='3344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='set_noack_map' type-id='type-id-6367' visibility='default' filepath='include/net/cfg80211.h' line='3347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='get_channel' type-id='type-id-6393' visibility='default' filepath='include/net/cfg80211.h' line='3351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='start_p2p_device' type-id='type-id-6333' visibility='default' filepath='include/net/cfg80211.h' line='3355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='stop_p2p_device' type-id='type-id-6360' visibility='default' filepath='include/net/cfg80211.h' line='3357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='set_mac_acl' type-id='type-id-6394' visibility='default' filepath='include/net/cfg80211.h' line='3360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='start_radar_detection' type-id='type-id-6395' visibility='default' filepath='include/net/cfg80211.h' line='3363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='update_ft_ies' type-id='type-id-6396' visibility='default' filepath='include/net/cfg80211.h' line='3367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='crit_proto_start' type-id='type-id-6397' visibility='default' filepath='include/net/cfg80211.h' line='3369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='crit_proto_stop' type-id='type-id-6360' visibility='default' filepath='include/net/cfg80211.h' line='3373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='set_coalesce' type-id='type-id-6398' visibility='default' filepath='include/net/cfg80211.h' line='3375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='channel_switch' type-id='type-id-6399' visibility='default' filepath='include/net/cfg80211.h' line='3378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='set_qos_map' type-id='type-id-6400' visibility='default' filepath='include/net/cfg80211.h' line='3382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='set_ap_chanwidth' type-id='type-id-6401' visibility='default' filepath='include/net/cfg80211.h' line='3386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='add_tx_ts' type-id='type-id-6402' visibility='default' filepath='include/net/cfg80211.h' line='3389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='del_tx_ts' type-id='type-id-6403' visibility='default' filepath='include/net/cfg80211.h' line='3392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='tdls_channel_switch' type-id='type-id-6404' visibility='default' filepath='include/net/cfg80211.h' line='3395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='tdls_cancel_channel_switch' type-id='type-id-6405' visibility='default' filepath='include/net/cfg80211.h' line='3399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='start_nan' type-id='type-id-6406' visibility='default' filepath='include/net/cfg80211.h' line='3402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='stop_nan' type-id='type-id-6360' visibility='default' filepath='include/net/cfg80211.h' line='3404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='add_nan_func' type-id='type-id-6407' visibility='default' filepath='include/net/cfg80211.h' line='3405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='del_nan_func' type-id='type-id-6408' visibility='default' filepath='include/net/cfg80211.h' line='3407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='nan_change_conf' type-id='type-id-6409' visibility='default' filepath='include/net/cfg80211.h' line='3409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='set_multicast_to_unicast' type-id='type-id-6410' visibility='default' filepath='include/net/cfg80211.h' line='3414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='get_txq_stats' type-id='type-id-6411' visibility='default' filepath='include/net/cfg80211.h' line='3418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='set_pmk' type-id='type-id-6412' visibility='default' filepath='include/net/cfg80211.h' line='3422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='del_pmk' type-id='type-id-6348' visibility='default' filepath='include/net/cfg80211.h' line='3424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='external_auth' type-id='type-id-6413' visibility='default' filepath='include/net/cfg80211.h' line='3426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='tx_control_port' type-id='type-id-6414' visibility='default' filepath='include/net/cfg80211.h' line='3429' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vif_params' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='468' column='1' id='type-id-6415'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='use_4addr' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='macaddr' type-id='type-id-6229' visibility='default' filepath='include/net/cfg80211.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vht_mumimo_groups' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vht_mumimo_follow_addr' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='473' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_ap_settings' size-in-bits='3200' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='855' column='1' id='type-id-6416'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chandef' type-id='type-id-6282' visibility='default' filepath='include/net/cfg80211.h' line='856' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='beacon' type-id='type-id-6417' visibility='default' filepath='include/net/cfg80211.h' line='858' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='beacon_interval' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='860' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='dtim_period' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='860' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='ssid' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='861' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='ssid_len' type-id='type-id-84' visibility='default' filepath='include/net/cfg80211.h' line='862' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='hidden_ssid' type-id='type-id-6418' visibility='default' filepath='include/net/cfg80211.h' line='863' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='crypto' type-id='type-id-6419' visibility='default' filepath='include/net/cfg80211.h' line='864' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='privacy' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='865' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='auth_type' type-id='type-id-6420' visibility='default' filepath='include/net/cfg80211.h' line='866' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='smps_mode' type-id='type-id-6421' visibility='default' filepath='include/net/cfg80211.h' line='867' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='inactivity_timeout' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='868' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='p2p_ctwindow' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='869' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1992'>
+          <var-decl name='p2p_opp_ps' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='870' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='acl' type-id='type-id-6422' visibility='default' filepath='include/net/cfg80211.h' line='871' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='pbss' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='872' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='beacon_rate' type-id='type-id-6423' visibility='default' filepath='include/net/cfg80211.h' line='873' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='ht_cap' type-id='type-id-6241' visibility='default' filepath='include/net/cfg80211.h' line='875' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='vht_cap' type-id='type-id-6242' visibility='default' filepath='include/net/cfg80211.h' line='876' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='ht_required' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='877' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3144'>
+          <var-decl name='vht_required' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='877' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_beacon_data' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='779' column='1' id='type-id-6417'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='780' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tail' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='780' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='beacon_ies' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='781' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='proberesp_ies' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='782' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='assocresp_ies' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='probe_resp' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='784' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='head_len' type-id='type-id-84' visibility='default' filepath='include/net/cfg80211.h' line='786' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='tail_len' type-id='type-id-84' visibility='default' filepath='include/net/cfg80211.h' line='786' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='beacon_ies_len' type-id='type-id-84' visibility='default' filepath='include/net/cfg80211.h' line='787' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='proberesp_ies_len' type-id='type-id-84' visibility='default' filepath='include/net/cfg80211.h' line='788' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='assocresp_ies_len' type-id='type-id-84' visibility='default' filepath='include/net/cfg80211.h' line='789' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='probe_resp_len' type-id='type-id-84' visibility='default' filepath='include/net/cfg80211.h' line='790' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_hidden_ssid' filepath='include/uapi/linux/nl80211.h' line='4942' column='1' id='type-id-6418'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='NL80211_HIDDEN_SSID_NOT_IN_USE' value='0'/>
+        <enumerator name='NL80211_HIDDEN_SSID_ZERO_LEN' value='1'/>
+        <enumerator name='NL80211_HIDDEN_SSID_ZERO_CONTENTS' value='2'/>
+      </enum-decl>
+      <class-decl name='cfg80211_crypto_settings' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='744' column='1' id='type-id-6419'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wpa_versions' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cipher_group' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n_ciphers_pairwise' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='747' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='ciphers_pairwise' type-id='type-id-1177' visibility='default' filepath='include/net/cfg80211.h' line='748' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='n_akm_suites' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='749' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='akm_suites' type-id='type-id-6220' visibility='default' filepath='include/net/cfg80211.h' line='750' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='control_port' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='751' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='368'>
+          <var-decl name='control_port_ethertype' type-id='type-id-926' visibility='default' filepath='include/net/cfg80211.h' line='752' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='control_port_no_encrypt' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='753' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='392'>
+          <var-decl name='control_port_over_nl80211' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='754' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='wep_keys' type-id='type-id-6424' visibility='default' filepath='include/net/cfg80211.h' line='755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wep_tx_key' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='756' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='psk' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='757' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_auth_type' filepath='include/uapi/linux/nl80211.h' line='4190' column='1' id='type-id-6420'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='NL80211_AUTHTYPE_OPEN_SYSTEM' value='0'/>
+        <enumerator name='NL80211_AUTHTYPE_SHARED_KEY' value='1'/>
+        <enumerator name='NL80211_AUTHTYPE_FT' value='2'/>
+        <enumerator name='NL80211_AUTHTYPE_NETWORK_EAP' value='3'/>
+        <enumerator name='NL80211_AUTHTYPE_SAE' value='4'/>
+        <enumerator name='NL80211_AUTHTYPE_FILS_SK' value='5'/>
+        <enumerator name='NL80211_AUTHTYPE_FILS_SK_PFS' value='6'/>
+        <enumerator name='NL80211_AUTHTYPE_FILS_PK' value='7'/>
+        <enumerator name='__NL80211_AUTHTYPE_NUM' value='8'/>
+        <enumerator name='NL80211_AUTHTYPE_MAX' value='7'/>
+        <enumerator name='NL80211_AUTHTYPE_AUTOMATIC' value='8'/>
+      </enum-decl>
+      <enum-decl name='nl80211_smps_mode' filepath='include/uapi/linux/nl80211.h' line='5418' column='1' id='type-id-6421'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='NL80211_SMPS_OFF' value='0'/>
+        <enumerator name='NL80211_SMPS_STATIC' value='1'/>
+        <enumerator name='NL80211_SMPS_DYNAMIC' value='2'/>
+        <enumerator name='__NL80211_SMPS_AFTER_LAST' value='3'/>
+        <enumerator name='NL80211_SMPS_MAX' value='2'/>
+      </enum-decl>
+      <class-decl name='cfg80211_acl_data' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='805' column='1' id='type-id-6425'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='acl_policy' type-id='type-id-6426' visibility='default' filepath='include/net/cfg80211.h' line='806' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='n_acl_entries' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='807' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mac_addrs' type-id='type-id-6216' visibility='default' filepath='include/net/cfg80211.h' line='810' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_acl_policy' filepath='include/uapi/linux/nl80211.h' line='5403' column='1' id='type-id-6426'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='NL80211_ACL_POLICY_ACCEPT_UNLESS_LISTED' value='0'/>
+        <enumerator name='NL80211_ACL_POLICY_DENY_UNLESS_LISTED' value='1'/>
+      </enum-decl>
+      <class-decl name='cfg80211_bitrate_mask' size-in-bits='864' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='816' column='1' id='type-id-6423'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='control' type-id='type-id-6198' visibility='default' filepath='include/net/cfg80211.h' line='822' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='288' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/cfg80211.h' line='817' column='1' id='type-id-6197'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='legacy' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='818' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ht_mcs' type-id='type-id-6222' visibility='default' filepath='include/net/cfg80211.h' line='819' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='vht_mcs' type-id='type-id-6219' visibility='default' filepath='include/net/cfg80211.h' line='820' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='gi' type-id='type-id-6427' visibility='default' filepath='include/net/cfg80211.h' line='821' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_txrate_gi' filepath='include/uapi/linux/nl80211.h' line='4331' column='1' id='type-id-6427'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='NL80211_TXRATE_DEFAULT_GI' value='0'/>
+        <enumerator name='NL80211_TXRATE_FORCE_SGI' value='1'/>
+        <enumerator name='NL80211_TXRATE_FORCE_LGI' value='2'/>
+      </enum-decl>
+      <class-decl name='station_parameters' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='992' column='1' id='type-id-6428'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='supported_rates' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='993' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vlan' type-id='type-id-1650' visibility='default' filepath='include/net/cfg80211.h' line='994' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sta_flags_mask' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='995' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='sta_flags_set' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='995' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sta_modify_mask' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='996' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='listen_interval' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='997' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='aid' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='998' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='peer_aid' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='999' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='supported_rates_len' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1000' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='296'>
+          <var-decl name='plink_action' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1001' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='304'>
+          <var-decl name='plink_state' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1002' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ht_capa' type-id='type-id-6241' visibility='default' filepath='include/net/cfg80211.h' line='1003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='vht_capa' type-id='type-id-6242' visibility='default' filepath='include/net/cfg80211.h' line='1004' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='uapsd_queues' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1005' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='456'>
+          <var-decl name='max_sp' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1006' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='local_pm' type-id='type-id-6429' visibility='default' filepath='include/net/cfg80211.h' line='1007' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='capability' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='1008' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ext_capab' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='1009' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ext_capab_len' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1010' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='supported_channels' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='1011' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='supported_channels_len' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1012' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='supported_oper_classes' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='1013' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='supported_oper_classes_len' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1014' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='904'>
+          <var-decl name='opmode_notif' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1015' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='912'>
+          <var-decl name='opmode_notif_used' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='1016' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='support_p2p_ps' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='1017' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='he_capa' type-id='type-id-6430' visibility='default' filepath='include/net/cfg80211.h' line='1018' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='he_capa_len' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1019' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_mesh_power_mode' filepath='include/uapi/linux/nl80211.h' line='3754' column='1' id='type-id-6429'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='NL80211_MESH_POWER_UNKNOWN' value='0'/>
+        <enumerator name='NL80211_MESH_POWER_ACTIVE' value='1'/>
+        <enumerator name='NL80211_MESH_POWER_LIGHT_SLEEP' value='2'/>
+        <enumerator name='NL80211_MESH_POWER_DEEP_SLEEP' value='3'/>
+        <enumerator name='__NL80211_MESH_POWER_AFTER_LAST' value='4'/>
+        <enumerator name='NL80211_MESH_POWER_MAX' value='3'/>
+      </enum-decl>
+      <class-decl name='station_del_parameters' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1032' column='1' id='type-id-6431'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mac' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='1033' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='subtype' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1034' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='reason_code' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='1035' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='station_info' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1294' column='1' id='type-id-6432'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filled' type-id='type-id-40' visibility='default' filepath='include/net/cfg80211.h' line='1295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='connected_time' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='inactive_time' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rx_bytes' type-id='type-id-40' visibility='default' filepath='include/net/cfg80211.h' line='1298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_bytes' type-id='type-id-40' visibility='default' filepath='include/net/cfg80211.h' line='1299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='llid' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='1300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='plid' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='1301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='plink_state' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='296'>
+          <var-decl name='signal' type-id='type-id-209' visibility='default' filepath='include/net/cfg80211.h' line='1303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='304'>
+          <var-decl name='signal_avg' type-id='type-id-209' visibility='default' filepath='include/net/cfg80211.h' line='1304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='312'>
+          <var-decl name='chains' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='chain_signal' type-id='type-id-6218' visibility='default' filepath='include/net/cfg80211.h' line='1307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='chain_signal_avg' type-id='type-id-6218' visibility='default' filepath='include/net/cfg80211.h' line='1308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='txrate' type-id='type-id-6433' visibility='default' filepath='include/net/cfg80211.h' line='1310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='rxrate' type-id='type-id-6433' visibility='default' filepath='include/net/cfg80211.h' line='1311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='rx_packets' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='tx_packets' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='tx_retries' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='tx_failed' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='rx_dropped_misc' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='bss_param' type-id='type-id-6434' visibility='default' filepath='include/net/cfg80211.h' line='1317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='sta_flags' type-id='type-id-6435' visibility='default' filepath='include/net/cfg80211.h' line='1318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='generation' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='1320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='assoc_req_ies' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='1322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='assoc_req_ies_len' type-id='type-id-84' visibility='default' filepath='include/net/cfg80211.h' line='1323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='beacon_loss_count' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='t_offset' type-id='type-id-1548' visibility='default' filepath='include/net/cfg80211.h' line='1326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='local_pm' type-id='type-id-6429' visibility='default' filepath='include/net/cfg80211.h' line='1327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='peer_pm' type-id='type-id-6429' visibility='default' filepath='include/net/cfg80211.h' line='1328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='nonpeer_pm' type-id='type-id-6429' visibility='default' filepath='include/net/cfg80211.h' line='1329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='expected_throughput' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='rx_beacon' type-id='type-id-40' visibility='default' filepath='include/net/cfg80211.h' line='1333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='rx_duration' type-id='type-id-40' visibility='default' filepath='include/net/cfg80211.h' line='1334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rx_beacon_signal_avg' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='pertid' type-id='type-id-6436' visibility='default' filepath='include/net/cfg80211.h' line='1336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='ack_signal' type-id='type-id-209' visibility='default' filepath='include/net/cfg80211.h' line='1337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1480'>
+          <var-decl name='avg_ack_signal' type-id='type-id-209' visibility='default' filepath='include/net/cfg80211.h' line='1338' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rate_info' size-in-bits='80' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1142' column='1' id='type-id-6433'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='mcs' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='legacy' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='1145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nss' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='bw' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='he_gi' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='he_dcm' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='he_ru_alloc' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1150' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sta_bss_parameters' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1178' column='1' id='type-id-6434'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='dtim_period' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='beacon_interval' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='1181' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nl80211_sta_flag_update' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/nl80211.h' line='2857' column='1' id='type-id-6435'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mask' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/nl80211.h' line='2858' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='set' type-id='type-id-511' visibility='default' filepath='include/uapi/linux/nl80211.h' line='2859' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_tid_stats' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1226' column='1' id='type-id-6437'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filled' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_msdu' type-id='type-id-40' visibility='default' filepath='include/net/cfg80211.h' line='1228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tx_msdu' type-id='type-id-40' visibility='default' filepath='include/net/cfg80211.h' line='1229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_msdu_retries' type-id='type-id-40' visibility='default' filepath='include/net/cfg80211.h' line='1230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tx_msdu_failed' type-id='type-id-40' visibility='default' filepath='include/net/cfg80211.h' line='1231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='txq_stats' type-id='type-id-6438' visibility='default' filepath='include/net/cfg80211.h' line='1232' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_txq_stats' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1200' column='1' id='type-id-6438'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filled' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='backlog_bytes' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='backlog_packets' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flows' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='drops' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ecn_marks' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='overlimit' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='overmemory' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='collisions' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='tx_bytes' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tx_packets' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='max_flows' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1212' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mpath_info' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1429' column='1' id='type-id-6439'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filled' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='frame_qlen' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sn' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='metric' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='exptime' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='discovery_timeout' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='discovery_retries' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='flags' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='generation' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='1439' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mesh_config' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1543' column='1' id='type-id-6440'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dot11MeshRetryTimeout' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='1544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='dot11MeshConfirmTimeout' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='1545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dot11MeshHoldingTimeout' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='1546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='dot11MeshMaxPeerLinks' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='1547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dot11MeshMaxRetries' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='dot11MeshTTL' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='element_ttl' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='auto_open_plinks' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='1551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dot11MeshNbrOffsetMaxNeighbor' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dot11MeshHWMPmaxPREQretries' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1553' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='path_refresh_time' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='min_discovery_timeout' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='1555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='dot11MeshHWMPactivePathTimeout' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dot11MeshHWMPpreqMinInterval' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='1557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='dot11MeshHWMPperrMinInterval' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='1558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='dot11MeshHWMPnetDiameterTraversalTime' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='1559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='304'>
+          <var-decl name='dot11MeshHWMPRootMode' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dot11MeshHWMPRannInterval' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='1561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='dot11MeshGateAnnouncementProtocol' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='1562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='344'>
+          <var-decl name='dot11MeshForwarding' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='1563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='rssi_threshold' type-id='type-id-738' visibility='default' filepath='include/net/cfg80211.h' line='1564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ht_opmode' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='1565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='dot11MeshHWMPactivePathToRootTimeout' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dot11MeshHWMProotInterval' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='1567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='dot11MeshHWMPconfirmationInterval' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='1568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='power_mode' type-id='type-id-6429' visibility='default' filepath='include/net/cfg80211.h' line='1569' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dot11MeshAwakeWindowDuration' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='1570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='plink_timeout' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1571' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mesh_setup' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1601' column='1' id='type-id-6441'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chandef' type-id='type-id-6282' visibility='default' filepath='include/net/cfg80211.h' line='1602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mesh_id' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='1603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mesh_id_len' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='sync_method' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='path_sel_proto' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='280'>
+          <var-decl name='path_metric' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='auth_id' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ie' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='1609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ie_len' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='392'>
+          <var-decl name='is_authenticated' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='1611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='400'>
+          <var-decl name='is_secure' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='1612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='408'>
+          <var-decl name='user_mpm' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='1613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='dtim_period' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='432'>
+          <var-decl name='beacon_interval' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='1615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mcast_rate' type-id='type-id-1133' visibility='default' filepath='include/net/cfg80211.h' line='1616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='basic_rates' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='beacon_rate' type-id='type-id-6423' visibility='default' filepath='include/net/cfg80211.h' line='1618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='userspace_handles_dfs' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='1619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1448'>
+          <var-decl name='control_port_over_nl80211' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='1620' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ocb_setup' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1629' column='1' id='type-id-6442'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chandef' type-id='type-id-6282' visibility='default' filepath='include/net/cfg80211.h' line='1630' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bss_parameters' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1462' column='1' id='type-id-6443'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='use_cts_prot' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='1463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='use_short_preamble' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='1464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='use_short_slot_time' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='1465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='basic_rates' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='1466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='basic_rates_len' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='ap_isolate' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='1468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ht_opmode' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='1469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='p2p_ctwindow' type-id='type-id-209' visibility='default' filepath='include/net/cfg80211.h' line='1470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='296'>
+          <var-decl name='p2p_opp_ps' type-id='type-id-209' visibility='default' filepath='include/net/cfg80211.h' line='1470' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_txq_params' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1643' column='1' id='type-id-6444'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ac' type-id='type-id-6445' visibility='default' filepath='include/net/cfg80211.h' line='1644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='txop' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='1645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='cwmin' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='1646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cwmax' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='1647' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='aifs' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1648' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_ac' filepath='include/uapi/linux/nl80211.h' line='4000' column='1' id='type-id-6445'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='NL80211_AC_VO' value='0'/>
+        <enumerator name='NL80211_AC_VI' value='1'/>
+        <enumerator name='NL80211_AC_BE' value='2'/>
+        <enumerator name='NL80211_AC_BK' value='3'/>
+        <enumerator name='NL80211_NUM_ACS' value='4'/>
+      </enum-decl>
+      <class-decl name='cfg80211_scan_request' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1728' column='1' id='type-id-6446'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ssids' type-id='type-id-6266' visibility='default' filepath='include/net/cfg80211.h' line='1729' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n_ssids' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='1730' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='n_channels' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1731' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='scan_width' type-id='type-id-6267' visibility='default' filepath='include/net/cfg80211.h' line='1732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ie' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='1733' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ie_len' type-id='type-id-84' visibility='default' filepath='include/net/cfg80211.h' line='1734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='duration' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='1735' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='duration_mandatory' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='1736' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='flags' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='1737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rates' type-id='type-id-6221' visibility='default' filepath='include/net/cfg80211.h' line='1739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wdev' type-id='type-id-6447' visibility='default' filepath='include/net/cfg80211.h' line='1741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mac_addr' type-id='type-id-6229' visibility='default' filepath='include/net/cfg80211.h' line='1743' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='624'>
+          <var-decl name='mac_addr_mask' type-id='type-id-6229' visibility='default' filepath='include/net/cfg80211.h' line='1744' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='bssid' type-id='type-id-6229' visibility='default' filepath='include/net/cfg80211.h' line='1745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='wiphy' type-id='type-id-6271' visibility='default' filepath='include/net/cfg80211.h' line='1748' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='scan_start' type-id='type-id-16' visibility='default' filepath='include/net/cfg80211.h' line='1749' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='info' type-id='type-id-6448' visibility='default' filepath='include/net/cfg80211.h' line='1750' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='notified' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='1751' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1032'>
+          <var-decl name='no_cck' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='1752' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='channels' type-id='type-id-6206' visibility='default' filepath='include/net/cfg80211.h' line='1755' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_scan_info' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1693' column='1' id='type-id-6448'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='scan_start_tsf' type-id='type-id-40' visibility='default' filepath='include/net/cfg80211.h' line='1694' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tsf_bssid' type-id='type-id-6229' visibility='default' filepath='include/net/cfg80211.h' line='1695' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='aborted' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='1696' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_auth_request' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2039' column='1' id='type-id-6449'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bss' type-id='type-id-6288' visibility='default' filepath='include/net/cfg80211.h' line='2040' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ie' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2041' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ie_len' type-id='type-id-84' visibility='default' filepath='include/net/cfg80211.h' line='2042' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='auth_type' type-id='type-id-6420' visibility='default' filepath='include/net/cfg80211.h' line='2043' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='key' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2044' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='key_len' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='2045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='328'>
+          <var-decl name='key_idx' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='2045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='auth_data' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2046' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='auth_data_len' type-id='type-id-84' visibility='default' filepath='include/net/cfg80211.h' line='2047' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_assoc_request' size-in-bits='1792' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2100' column='1' id='type-id-6450'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bss' type-id='type-id-6288' visibility='default' filepath='include/net/cfg80211.h' line='2101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ie' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='prev_bssid' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ie_len' type-id='type-id-84' visibility='default' filepath='include/net/cfg80211.h' line='2103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='crypto' type-id='type-id-6419' visibility='default' filepath='include/net/cfg80211.h' line='2104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='use_mfp' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='2105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='flags' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='2106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='ht_capa' type-id='type-id-6318' visibility='default' filepath='include/net/cfg80211.h' line='2107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1168'>
+          <var-decl name='ht_capa_mask' type-id='type-id-6318' visibility='default' filepath='include/net/cfg80211.h' line='2108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='vht_capa' type-id='type-id-6319' visibility='default' filepath='include/net/cfg80211.h' line='2109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='vht_capa_mask' type-id='type-id-6319' visibility='default' filepath='include/net/cfg80211.h' line='2109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='fils_kek' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='fils_kek_len' type-id='type-id-84' visibility='default' filepath='include/net/cfg80211.h' line='2111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='fils_nonces' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2112' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_deauth_request' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2128' column='1' id='type-id-6451'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bssid' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ie' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ie_len' type-id='type-id-84' visibility='default' filepath='include/net/cfg80211.h' line='2131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reason_code' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='2132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='local_state_change' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='2133' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_disassoc_request' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2149' column='1' id='type-id-6452'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bss' type-id='type-id-6288' visibility='default' filepath='include/net/cfg80211.h' line='2150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ie' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ie_len' type-id='type-id-84' visibility='default' filepath='include/net/cfg80211.h' line='2152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reason_code' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='2153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='local_state_change' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='2154' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_connect_params' size-in-bits='2752' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2289' column='1' id='type-id-6453'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='channel' type-id='type-id-6205' visibility='default' filepath='include/net/cfg80211.h' line='2290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='channel_hint' type-id='type-id-6205' visibility='default' filepath='include/net/cfg80211.h' line='2291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bssid' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bssid_hint' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ssid' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ssid_len' type-id='type-id-84' visibility='default' filepath='include/net/cfg80211.h' line='2295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='auth_type' type-id='type-id-6420' visibility='default' filepath='include/net/cfg80211.h' line='2296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ie' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ie_len' type-id='type-id-84' visibility='default' filepath='include/net/cfg80211.h' line='2298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='privacy' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='2299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='mfp' type-id='type-id-6454' visibility='default' filepath='include/net/cfg80211.h' line='2300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='crypto' type-id='type-id-6419' visibility='default' filepath='include/net/cfg80211.h' line='2301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='key' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='key_len' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='2303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1352'>
+          <var-decl name='key_idx' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='2303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='flags' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='2304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='bg_scan_period' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='2305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='ht_capa' type-id='type-id-6318' visibility='default' filepath='include/net/cfg80211.h' line='2306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1648'>
+          <var-decl name='ht_capa_mask' type-id='type-id-6318' visibility='default' filepath='include/net/cfg80211.h' line='2307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='vht_capa' type-id='type-id-6319' visibility='default' filepath='include/net/cfg80211.h' line='2308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='vht_capa_mask' type-id='type-id-6319' visibility='default' filepath='include/net/cfg80211.h' line='2309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='pbss' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='2310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='bss_select' type-id='type-id-6455' visibility='default' filepath='include/net/cfg80211.h' line='2311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='prev_bssid' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='fils_erp_username' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='fils_erp_username_len' type-id='type-id-84' visibility='default' filepath='include/net/cfg80211.h' line='2314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='fils_erp_realm' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='fils_erp_realm_len' type-id='type-id-84' visibility='default' filepath='include/net/cfg80211.h' line='2316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='fils_erp_next_seq_num' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='2317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='fils_erp_rrk' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='fils_erp_rrk_len' type-id='type-id-84' visibility='default' filepath='include/net/cfg80211.h' line='2319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='want_1x' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='2320' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_mfp' filepath='include/uapi/linux/nl80211.h' line='4227' column='1' id='type-id-6454'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='NL80211_MFP_NO' value='0'/>
+        <enumerator name='NL80211_MFP_REQUIRED' value='1'/>
+        <enumerator name='NL80211_MFP_OPTIONAL' value='2'/>
+      </enum-decl>
+      <class-decl name='cfg80211_bss_selection' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2221' column='1' id='type-id-6455'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='behaviour' type-id='type-id-6456' visibility='default' filepath='include/net/cfg80211.h' line='2222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='param' type-id='type-id-6457' visibility='default' filepath='include/net/cfg80211.h' line='2226' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_bss_select_attr' filepath='include/uapi/linux/nl80211.h' line='5612' column='1' id='type-id-6456'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='__NL80211_BSS_SELECT_ATTR_INVALID' value='0'/>
+        <enumerator name='NL80211_BSS_SELECT_ATTR_RSSI' value='1'/>
+        <enumerator name='NL80211_BSS_SELECT_ATTR_BAND_PREF' value='2'/>
+        <enumerator name='NL80211_BSS_SELECT_ATTR_RSSI_ADJUST' value='3'/>
+        <enumerator name='__NL80211_BSS_SELECT_ATTR_AFTER_LAST' value='4'/>
+        <enumerator name='NL80211_BSS_SELECT_ATTR_MAX' value='3'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__6' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/cfg80211.h' line='2223' column='1' id='type-id-6457'>
+        <data-member access='private'>
+          <var-decl name='band_pref' type-id='type-id-6275' visibility='default' filepath='include/net/cfg80211.h' line='2224' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='adjust' type-id='type-id-6270' visibility='default' filepath='include/net/cfg80211.h' line='2225' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='cfg80211_ibss_params' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2193' column='1' id='type-id-6458'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ssid' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bssid' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='chandef' type-id='type-id-6282' visibility='default' filepath='include/net/cfg80211.h' line='2196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ie' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ssid_len' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='2198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='392'>
+          <var-decl name='ie_len' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='2198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='400'>
+          <var-decl name='beacon_interval' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='2199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='basic_rates' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='2200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='channel_fixed' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='2201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='456'>
+          <var-decl name='privacy' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='2202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='control_port' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='2203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='472'>
+          <var-decl name='control_port_over_nl80211' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='2204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='userspace_handles_dfs' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='2205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='mcast_rate' type-id='type-id-1133' visibility='default' filepath='include/net/cfg80211.h' line='2206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='ht_capa' type-id='type-id-6318' visibility='default' filepath='include/net/cfg80211.h' line='2207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='816'>
+          <var-decl name='ht_capa_mask' type-id='type-id-6318' visibility='default' filepath='include/net/cfg80211.h' line='2208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='wep_keys' type-id='type-id-6424' visibility='default' filepath='include/net/cfg80211.h' line='2209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='wep_tx_key' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='2210' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_tx_power_setting' filepath='include/uapi/linux/nl80211.h' line='4434' column='1' id='type-id-6459'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='NL80211_TX_POWER_AUTOMATIC' value='0'/>
+        <enumerator name='NL80211_TX_POWER_LIMITED' value='1'/>
+        <enumerator name='NL80211_TX_POWER_FIXED' value='2'/>
+      </enum-decl>
+      <class-decl name='survey_info' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='706' column='1' id='type-id-6460'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='channel' type-id='type-id-6205' visibility='default' filepath='include/net/cfg80211.h' line='707' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='time' type-id='type-id-40' visibility='default' filepath='include/net/cfg80211.h' line='708' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='time_busy' type-id='type-id-40' visibility='default' filepath='include/net/cfg80211.h' line='709' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='time_ext_busy' type-id='type-id-40' visibility='default' filepath='include/net/cfg80211.h' line='710' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='time_rx' type-id='type-id-40' visibility='default' filepath='include/net/cfg80211.h' line='711' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='time_tx' type-id='type-id-40' visibility='default' filepath='include/net/cfg80211.h' line='712' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='time_scan' type-id='type-id-40' visibility='default' filepath='include/net/cfg80211.h' line='713' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='filled' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='714' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='noise' type-id='type-id-209' visibility='default' filepath='include/net/cfg80211.h' line='715' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_pmksa' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2383' column='1' id='type-id-6461'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bssid' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pmkid' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pmk' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pmk_len' type-id='type-id-84' visibility='default' filepath='include/net/cfg80211.h' line='2387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ssid' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ssid_len' type-id='type-id-84' visibility='default' filepath='include/net/cfg80211.h' line='2389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cache_id' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2390' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_mgmt_tx_params' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2603' column='1' id='type-id-6462'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chan' type-id='type-id-6205' visibility='default' filepath='include/net/cfg80211.h' line='2604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='offchan' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='2605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='wait' type-id='type-id-5' visibility='default' filepath='include/net/cfg80211.h' line='2606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='buf' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='len' type-id='type-id-84' visibility='default' filepath='include/net/cfg80211.h' line='2608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='no_cck' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='2609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='dont_wait_for_ack' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='2610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='n_csa_offsets' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='2611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='csa_offsets' type-id='type-id-3566' visibility='default' filepath='include/net/cfg80211.h' line='2612' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_gtk_rekey_data' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2569' column='1' id='type-id-6463'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kek' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='kck' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='replay_ctr' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2570' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_tdls_operation' filepath='include/uapi/linux/nl80211.h' line='4999' column='1' id='type-id-6464'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='NL80211_TDLS_DISCOVERY_REQ' value='0'/>
+        <enumerator name='NL80211_TDLS_SETUP' value='1'/>
+        <enumerator name='NL80211_TDLS_TEARDOWN' value='2'/>
+        <enumerator name='NL80211_TDLS_ENABLE_LINK' value='3'/>
+        <enumerator name='NL80211_TDLS_DISABLE_LINK' value='4'/>
+      </enum-decl>
+      <class-decl name='cfg80211_update_ft_ies_params' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2582' column='1' id='type-id-6465'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='md' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='2583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ie' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ie_len' type-id='type-id-84' visibility='default' filepath='include/net/cfg80211.h' line='2585' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_crit_proto_id' filepath='include/uapi/linux/nl80211.h' line='5495' column='1' id='type-id-6466'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='NL80211_CRIT_PROTO_UNSPEC' value='0'/>
+        <enumerator name='NL80211_CRIT_PROTO_DHCP' value='1'/>
+        <enumerator name='NL80211_CRIT_PROTO_EAPOL' value='2'/>
+        <enumerator name='NL80211_CRIT_PROTO_APIPA' value='3'/>
+        <enumerator name='NUM_NL80211_CRIT_PROTO' value='4'/>
+      </enum-decl>
+      <class-decl name='cfg80211_coalesce' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2497' column='1' id='type-id-6467'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rules' type-id='type-id-6468' visibility='default' filepath='include/net/cfg80211.h' line='2498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n_rules' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='2499' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_coalesce_rules' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2483' column='1' id='type-id-6469'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='delay' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='2484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='condition' type-id='type-id-6470' visibility='default' filepath='include/net/cfg80211.h' line='2485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='patterns' type-id='type-id-6256' visibility='default' filepath='include/net/cfg80211.h' line='2486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='n_patterns' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='2487' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_coalesce_condition' filepath='include/uapi/linux/nl80211.h' line='4770' column='1' id='type-id-6470'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='NL80211_COALESCE_CONDITION_MATCH' value='0'/>
+        <enumerator name='NL80211_COALESCE_CONDITION_NO_MATCH' value='1'/>
+      </enum-decl>
+      <class-decl name='cfg80211_csa_settings' size-in-bits='1984' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='896' column='1' id='type-id-6471'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chandef' type-id='type-id-6282' visibility='default' filepath='include/net/cfg80211.h' line='897' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='beacon_csa' type-id='type-id-6417' visibility='default' filepath='include/net/cfg80211.h' line='898' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='counter_offsets_beacon' type-id='type-id-3566' visibility='default' filepath='include/net/cfg80211.h' line='899' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='counter_offsets_presp' type-id='type-id-3566' visibility='default' filepath='include/net/cfg80211.h' line='900' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='n_counter_offsets_beacon' type-id='type-id-5' visibility='default' filepath='include/net/cfg80211.h' line='901' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='n_counter_offsets_presp' type-id='type-id-5' visibility='default' filepath='include/net/cfg80211.h' line='902' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='beacon_after' type-id='type-id-6417' visibility='default' filepath='include/net/cfg80211.h' line='903' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='radar_required' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='904' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1928'>
+          <var-decl name='block_tx' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='905' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1936'>
+          <var-decl name='count' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='906' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_qos_map' size-in-bits='472' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2653' column='1' id='type-id-6472'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num_des' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='2654' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='dscp_exception' type-id='type-id-6200' visibility='default' filepath='include/net/cfg80211.h' line='2655' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='344'>
+          <var-decl name='up' type-id='type-id-6202' visibility='default' filepath='include/net/cfg80211.h' line='2656' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_dscp_exception' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2621' column='1' id='type-id-6199'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dscp' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='2622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='up' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='2623' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_dscp_range' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2632' column='1' id='type-id-6201'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='low' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='2633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='high' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='2634' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_nan_conf' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2669' column='1' id='type-id-6473'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='master_pref' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='2670' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bands' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='2671' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_nan_func' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2726' column='1' id='type-id-6474'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='type-id-6475' visibility='default' filepath='include/net/cfg80211.h' line='2727' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='service_id' type-id='type-id-6229' visibility='default' filepath='include/net/cfg80211.h' line='2728' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='publish_type' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='2729' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='close_range' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='2730' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='publish_bcast' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='2731' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='subscribe_active' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='2732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='followup_id' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='2733' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='followup_reqid' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='2734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='followup_dest' type-id='type-id-6215' visibility='default' filepath='include/net/cfg80211.h' line='2735' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ttl' type-id='type-id-7' visibility='default' filepath='include/net/cfg80211.h' line='2736' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='serv_spec_info' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='serv_spec_info_len' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='2738' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='328'>
+          <var-decl name='srf_include' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='2739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='srf_bf' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2740' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='srf_bf_len' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='2741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='456'>
+          <var-decl name='srf_bf_idx' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='2742' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='srf_macs' type-id='type-id-6232' visibility='default' filepath='include/net/cfg80211.h' line='2743' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='srf_num_macs' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='2744' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='rx_filters' type-id='type-id-6476' visibility='default' filepath='include/net/cfg80211.h' line='2745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='tx_filters' type-id='type-id-6476' visibility='default' filepath='include/net/cfg80211.h' line='2746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='num_tx_filters' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='2747' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='776'>
+          <var-decl name='num_rx_filters' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='2748' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='784'>
+          <var-decl name='instance_id' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='2749' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='cookie' type-id='type-id-40' visibility='default' filepath='include/net/cfg80211.h' line='2750' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_nan_function_type' filepath='include/uapi/linux/nl80211.h' line='5632' column='1' id='type-id-6475'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='NL80211_NAN_FUNC_PUBLISH' value='0'/>
+        <enumerator name='NL80211_NAN_FUNC_SUBSCRIBE' value='1'/>
+        <enumerator name='NL80211_NAN_FUNC_FOLLOW_UP' value='2'/>
+        <enumerator name='__NL80211_NAN_FUNC_TYPE_AFTER_LAST' value='3'/>
+        <enumerator name='NL80211_NAN_FUNC_MAX_TYPE' value='2'/>
+      </enum-decl>
+      <class-decl name='cfg80211_nan_func_filter' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2692' column='1' id='type-id-6477'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filter' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2693' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='len' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='2694' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_pmk_conf' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2763' column='1' id='type-id-6478'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='aa' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2764' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pmk_len' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='2765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pmk' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pmk_r0_name' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='2767' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_external_auth_params' size-in-bits='416' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2789' column='1' id='type-id-6479'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='action' type-id='type-id-6480' visibility='default' filepath='include/net/cfg80211.h' line='2790' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bssid' type-id='type-id-6229' visibility='default' filepath='include/net/cfg80211.h' line='2791' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='ssid' type-id='type-id-6272' visibility='default' filepath='include/net/cfg80211.h' line='2792' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='key_mgmt_suite' type-id='type-id-5' visibility='default' filepath='include/net/cfg80211.h' line='2793' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='status' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='2794' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_external_auth_action' filepath='include/uapi/linux/nl80211.h' line='5796' column='1' id='type-id-6480'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='NL80211_EXTERNAL_AUTH_START' value='0'/>
+        <enumerator name='NL80211_EXTERNAL_AUTH_ABORT' value='1'/>
+      </enum-decl>
+      <pointer-type-def type-id='type-id-6443' size-in-bits='64' id='type-id-6481'/>
+      <pointer-type-def type-id='type-id-6416' size-in-bits='64' id='type-id-6482'/>
+      <pointer-type-def type-id='type-id-6450' size-in-bits='64' id='type-id-6483'/>
+      <pointer-type-def type-id='type-id-6449' size-in-bits='64' id='type-id-6484'/>
+      <pointer-type-def type-id='type-id-6417' size-in-bits='64' id='type-id-6485'/>
+      <pointer-type-def type-id='type-id-6286' size-in-bits='64' id='type-id-6288'/>
+      <pointer-type-def type-id='type-id-6284' size-in-bits='64' id='type-id-6279'/>
+      <pointer-type-def type-id='type-id-6282' size-in-bits='64' id='type-id-6486'/>
+      <pointer-type-def type-id='type-id-6467' size-in-bits='64' id='type-id-6487'/>
+      <pointer-type-def type-id='type-id-6469' size-in-bits='64' id='type-id-6468'/>
+      <pointer-type-def type-id='type-id-6204' size-in-bits='64' id='type-id-6278'/>
+      <pointer-type-def type-id='type-id-6453' size-in-bits='64' id='type-id-6488'/>
+      <pointer-type-def type-id='type-id-6293' size-in-bits='64' id='type-id-6283'/>
+      <pointer-type-def type-id='type-id-6471' size-in-bits='64' id='type-id-6489'/>
+      <pointer-type-def type-id='type-id-6451' size-in-bits='64' id='type-id-6490'/>
+      <pointer-type-def type-id='type-id-6452' size-in-bits='64' id='type-id-6491'/>
+      <pointer-type-def type-id='type-id-6479' size-in-bits='64' id='type-id-6492'/>
+      <pointer-type-def type-id='type-id-6463' size-in-bits='64' id='type-id-6493'/>
+      <pointer-type-def type-id='type-id-6458' size-in-bits='64' id='type-id-6494'/>
+      <pointer-type-def type-id='type-id-6285' size-in-bits='64' id='type-id-6281'/>
+      <pointer-type-def type-id='type-id-6273' size-in-bits='64' id='type-id-6268'/>
+      <pointer-type-def type-id='type-id-6462' size-in-bits='64' id='type-id-6495'/>
+      <pointer-type-def type-id='type-id-6473' size-in-bits='64' id='type-id-6496'/>
+      <pointer-type-def type-id='type-id-6474' size-in-bits='64' id='type-id-6497'/>
+      <pointer-type-def type-id='type-id-6477' size-in-bits='64' id='type-id-6476'/>
+      <pointer-type-def type-id='type-id-6259' size-in-bits='64' id='type-id-6256'/>
+      <pointer-type-def type-id='type-id-6461' size-in-bits='64' id='type-id-6498'/>
+      <pointer-type-def type-id='type-id-6472' size-in-bits='64' id='type-id-6499'/>
+      <pointer-type-def type-id='type-id-6446' size-in-bits='64' id='type-id-6500'/>
+      <pointer-type-def type-id='type-id-6274' size-in-bits='64' id='type-id-6269'/>
+      <pointer-type-def type-id='type-id-6265' size-in-bits='64' id='type-id-6258'/>
+      <pointer-type-def type-id='type-id-6272' size-in-bits='64' id='type-id-6266'/>
+      <pointer-type-def type-id='type-id-6437' size-in-bits='64' id='type-id-6436'/>
+      <pointer-type-def type-id='type-id-6438' size-in-bits='64' id='type-id-6501'/>
+      <pointer-type-def type-id='type-id-6465' size-in-bits='64' id='type-id-6502'/>
+      <pointer-type-def type-id='type-id-6255' size-in-bits='64' id='type-id-6237'/>
+      <pointer-type-def type-id='type-id-6260' size-in-bits='64' id='type-id-6257'/>
+      <qualified-type-def type-id='type-id-926' const='yes' id='type-id-6503'/>
+      <qualified-type-def type-id='type-id-6425' const='yes' id='type-id-6504'/>
+      <pointer-type-def type-id='type-id-6504' size-in-bits='64' id='type-id-6422'/>
+      <qualified-type-def type-id='type-id-6423' const='yes' id='type-id-6505'/>
+      <pointer-type-def type-id='type-id-6505' size-in-bits='64' id='type-id-6506'/>
+      <qualified-type-def type-id='type-id-6291' const='yes' id='type-id-6507'/>
+      <pointer-type-def type-id='type-id-6507' size-in-bits='64' id='type-id-6287'/>
+      <qualified-type-def type-id='type-id-6328' const='yes' id='type-id-6508'/>
+      <pointer-type-def type-id='type-id-6508' size-in-bits='64' id='type-id-6509'/>
+      <qualified-type-def type-id='type-id-6478' const='yes' id='type-id-6510'/>
+      <pointer-type-def type-id='type-id-6510' size-in-bits='64' id='type-id-6511'/>
+      <qualified-type-def type-id='type-id-6305' const='yes' id='type-id-6512'/>
+      <pointer-type-def type-id='type-id-6512' size-in-bits='64' id='type-id-6430'/>
+      <qualified-type-def type-id='type-id-6318' const='yes' id='type-id-6513'/>
+      <pointer-type-def type-id='type-id-6513' size-in-bits='64' id='type-id-6241'/>
+      <qualified-type-def type-id='type-id-6247' const='yes' id='type-id-6514'/>
+      <pointer-type-def type-id='type-id-6514' size-in-bits='64' id='type-id-6234'/>
+      <qualified-type-def type-id='type-id-6249' const='yes' id='type-id-6515'/>
+      <pointer-type-def type-id='type-id-6515' size-in-bits='64' id='type-id-6248'/>
+      <qualified-type-def type-id='type-id-6312' const='yes' id='type-id-6516'/>
+      <pointer-type-def type-id='type-id-6516' size-in-bits='64' id='type-id-6240'/>
+      <qualified-type-def type-id='type-id-6303' const='yes' id='type-id-6517'/>
+      <pointer-type-def type-id='type-id-6517' size-in-bits='64' id='type-id-6299'/>
+      <qualified-type-def type-id='type-id-6246' const='yes' id='type-id-6518'/>
+      <pointer-type-def type-id='type-id-6518' size-in-bits='64' id='type-id-6233'/>
+      <qualified-type-def type-id='type-id-6319' const='yes' id='type-id-6519'/>
+      <pointer-type-def type-id='type-id-6519' size-in-bits='64' id='type-id-6242'/>
+      <qualified-type-def type-id='type-id-6440' const='yes' id='type-id-6520'/>
+      <pointer-type-def type-id='type-id-6520' size-in-bits='64' id='type-id-6521'/>
+      <qualified-type-def type-id='type-id-6441' const='yes' id='type-id-6522'/>
+      <pointer-type-def type-id='type-id-6522' size-in-bits='64' id='type-id-6523'/>
+      <qualified-type-def type-id='type-id-6322' const='yes' id='type-id-6524'/>
+      <pointer-type-def type-id='type-id-6524' size-in-bits='64' id='type-id-6245'/>
+      <qualified-type-def type-id='type-id-6254' const='yes' id='type-id-6525'/>
+      <pointer-type-def type-id='type-id-6525' size-in-bits='64' id='type-id-6253'/>
+      <qualified-type-def type-id='type-id-6320' const='yes' id='type-id-6526'/>
+      <pointer-type-def type-id='type-id-6526' size-in-bits='64' id='type-id-6243'/>
+      <qualified-type-def type-id='type-id-6294' const='yes' id='type-id-6527'/>
+      <pointer-type-def type-id='type-id-6527' size-in-bits='64' id='type-id-6238'/>
+      <qualified-type-def type-id='type-id-6321' const='yes' id='type-id-6528'/>
+      <pointer-type-def type-id='type-id-6528' size-in-bits='64' id='type-id-6244'/>
+      <qualified-type-def type-id='type-id-6250' const='yes' id='type-id-6529'/>
+      <pointer-type-def type-id='type-id-6529' size-in-bits='64' id='type-id-6236'/>
+      <qualified-type-def type-id='type-id-6252' const='yes' id='type-id-6530'/>
+      <pointer-type-def type-id='type-id-6530' size-in-bits='64' id='type-id-6251'/>
+      <pointer-type-def type-id='type-id-6289' size-in-bits='64' id='type-id-6205'/>
+      <pointer-type-def type-id='type-id-6300' size-in-bits='64' id='type-id-6296'/>
+      <pointer-type-def type-id='type-id-6295' size-in-bits='64' id='type-id-6209'/>
+      <pointer-type-def type-id='type-id-6444' size-in-bits='64' id='type-id-6531'/>
+      <pointer-type-def type-id='type-id-6532' size-in-bits='64' id='type-id-6330'/>
+      <pointer-type-def type-id='type-id-6533' size-in-bits='64' id='type-id-6358'/>
+      <pointer-type-def type-id='type-id-6534' size-in-bits='64' id='type-id-6398'/>
+      <pointer-type-def type-id='type-id-6535' size-in-bits='64' id='type-id-6359'/>
+      <pointer-type-def type-id='type-id-6536' size-in-bits='64' id='type-id-6329'/>
+      <pointer-type-def type-id='type-id-6537' size-in-bits='64' id='type-id-6342'/>
+      <pointer-type-def type-id='type-id-6538' size-in-bits='64' id='type-id-6355'/>
+      <pointer-type-def type-id='type-id-6539' size-in-bits='64' id='type-id-6340'/>
+      <pointer-type-def type-id='type-id-6540' size-in-bits='64' id='type-id-6362'/>
+      <pointer-type-def type-id='type-id-6541' size-in-bits='64' id='type-id-6361'/>
+      <pointer-type-def type-id='type-id-6542' size-in-bits='64' id='type-id-6341'/>
+      <pointer-type-def type-id='type-id-6543' size-in-bits='64' id='type-id-6401'/>
+      <pointer-type-def type-id='type-id-6544' size-in-bits='64' id='type-id-6395'/>
+      <pointer-type-def type-id='type-id-6545' size-in-bits='64' id='type-id-6365'/>
+      <pointer-type-def type-id='type-id-6546' size-in-bits='64' id='type-id-6366'/>
+      <pointer-type-def type-id='type-id-6547' size-in-bits='64' id='type-id-6399'/>
+      <pointer-type-def type-id='type-id-6548' size-in-bits='64' id='type-id-6363'/>
+      <pointer-type-def type-id='type-id-6549' size-in-bits='64' id='type-id-6364'/>
+      <pointer-type-def type-id='type-id-6550' size-in-bits='64' id='type-id-6413'/>
+      <pointer-type-def type-id='type-id-6551' size-in-bits='64' id='type-id-6389'/>
+      <pointer-type-def type-id='type-id-6552' size-in-bits='64' id='type-id-6368'/>
+      <pointer-type-def type-id='type-id-6553' size-in-bits='64' id='type-id-6376'/>
+      <pointer-type-def type-id='type-id-6554' size-in-bits='64' id='type-id-6400'/>
+      <pointer-type-def type-id='type-id-6555' size-in-bits='64' id='type-id-6387'/>
+      <pointer-type-def type-id='type-id-6556' size-in-bits='64' id='type-id-6396'/>
+      <pointer-type-def type-id='type-id-6557' size-in-bits='64' id='type-id-6410'/>
+      <pointer-type-def type-id='type-id-6558' size-in-bits='64' id='type-id-6394'/>
+      <pointer-type-def type-id='type-id-6559' size-in-bits='64' id='type-id-6412'/>
+      <pointer-type-def type-id='type-id-6560' size-in-bits='64' id='type-id-6353'/>
+      <pointer-type-def type-id='type-id-6561' size-in-bits='64' id='type-id-6348'/>
+      <pointer-type-def type-id='type-id-6562' size-in-bits='64' id='type-id-6374'/>
+      <pointer-type-def type-id='type-id-6563' size-in-bits='64' id='type-id-6347'/>
+      <pointer-type-def type-id='type-id-6564' size-in-bits='64' id='type-id-6391'/>
+      <pointer-type-def type-id='type-id-6565' size-in-bits='64' id='type-id-6345'/>
+      <pointer-type-def type-id='type-id-6566' size-in-bits='64' id='type-id-6343'/>
+      <pointer-type-def type-id='type-id-6567' size-in-bits='64' id='type-id-6414'/>
+      <pointer-type-def type-id='type-id-6568' size-in-bits='64' id='type-id-6404'/>
+      <pointer-type-def type-id='type-id-6569' size-in-bits='64' id='type-id-6390'/>
+      <pointer-type-def type-id='type-id-6570' size-in-bits='64' id='type-id-6392'/>
+      <pointer-type-def type-id='type-id-6571' size-in-bits='64' id='type-id-6334'/>
+      <pointer-type-def type-id='type-id-6572' size-in-bits='64' id='type-id-6357'/>
+      <pointer-type-def type-id='type-id-6573' size-in-bits='64' id='type-id-6356'/>
+      <pointer-type-def type-id='type-id-6574' size-in-bits='64' id='type-id-6369'/>
+      <pointer-type-def type-id='type-id-6575' size-in-bits='64' id='type-id-6375'/>
+      <pointer-type-def type-id='type-id-6576' size-in-bits='64' id='type-id-6346'/>
+      <pointer-type-def type-id='type-id-6577' size-in-bits='64' id='type-id-6350'/>
+      <pointer-type-def type-id='type-id-6578' size-in-bits='64' id='type-id-6351'/>
+      <pointer-type-def type-id='type-id-6579' size-in-bits='64' id='type-id-6354'/>
+      <pointer-type-def type-id='type-id-6580' size-in-bits='64' id='type-id-6344'/>
+      <pointer-type-def type-id='type-id-6581' size-in-bits='64' id='type-id-6380'/>
+      <pointer-type-def type-id='type-id-6582' size-in-bits='64' id='type-id-6382'/>
+      <pointer-type-def type-id='type-id-6583' size-in-bits='64' id='type-id-6381'/>
+      <pointer-type-def type-id='type-id-6584' size-in-bits='64' id='type-id-6367'/>
+      <pointer-type-def type-id='type-id-6585' size-in-bits='64' id='type-id-6352'/>
+      <pointer-type-def type-id='type-id-6586' size-in-bits='64' id='type-id-6383'/>
+      <pointer-type-def type-id='type-id-6587' size-in-bits='64' id='type-id-6388'/>
+      <pointer-type-def type-id='type-id-6588' size-in-bits='64' id='type-id-6339'/>
+      <pointer-type-def type-id='type-id-6589' size-in-bits='64' id='type-id-6403'/>
+      <pointer-type-def type-id='type-id-6590' size-in-bits='64' id='type-id-6402'/>
+      <pointer-type-def type-id='type-id-6591' size-in-bits='64' id='type-id-6337'/>
+      <pointer-type-def type-id='type-id-6592' size-in-bits='64' id='type-id-6335'/>
+      <pointer-type-def type-id='type-id-6593' size-in-bits='64' id='type-id-6336'/>
+      <pointer-type-def type-id='type-id-6594' size-in-bits='64' id='type-id-6338'/>
+      <pointer-type-def type-id='type-id-6595' size-in-bits='64' id='type-id-6349'/>
+      <pointer-type-def type-id='type-id-6596' size-in-bits='64' id='type-id-6370'/>
+      <pointer-type-def type-id='type-id-6597' size-in-bits='64' id='type-id-6385'/>
+      <pointer-type-def type-id='type-id-6598' size-in-bits='64' id='type-id-6386'/>
+      <pointer-type-def type-id='type-id-6599' size-in-bits='64' id='type-id-6333'/>
+      <pointer-type-def type-id='type-id-6600' size-in-bits='64' id='type-id-6393'/>
+      <pointer-type-def type-id='type-id-6601' size-in-bits='64' id='type-id-6379'/>
+      <pointer-type-def type-id='type-id-6602' size-in-bits='64' id='type-id-6406'/>
+      <pointer-type-def type-id='type-id-6603' size-in-bits='64' id='type-id-6409'/>
+      <pointer-type-def type-id='type-id-6604' size-in-bits='64' id='type-id-6407'/>
+      <pointer-type-def type-id='type-id-6605' size-in-bits='64' id='type-id-6411'/>
+      <pointer-type-def type-id='type-id-6606' size-in-bits='64' id='type-id-6397'/>
+      <pointer-type-def type-id='type-id-6607' size-in-bits='64' id='type-id-6371'/>
+      <pointer-type-def type-id='type-id-6608' size-in-bits='64' id='type-id-6377'/>
+      <pointer-type-def type-id='type-id-6609' size-in-bits='64' id='type-id-6372'/>
+      <pointer-type-def type-id='type-id-6610' size-in-bits='64' id='type-id-6324'/>
+      <pointer-type-def type-id='type-id-6611' size-in-bits='64' id='type-id-6378'/>
+      <pointer-type-def type-id='type-id-6612' size-in-bits='64' id='type-id-6323'/>
+      <pointer-type-def type-id='type-id-6213' size-in-bits='64' id='type-id-6424'/>
+      <pointer-type-def type-id='type-id-6215' size-in-bits='64' id='type-id-6232'/>
+      <pointer-type-def type-id='type-id-6440' size-in-bits='64' id='type-id-6613'/>
+      <pointer-type-def type-id='type-id-6439' size-in-bits='64' id='type-id-6614'/>
+      <pointer-type-def type-id='type-id-6442' size-in-bits='64' id='type-id-6615'/>
+      <pointer-type-def type-id='type-id-6307' size-in-bits='64' id='type-id-6616'/>
+      <pointer-type-def type-id='type-id-6431' size-in-bits='64' id='type-id-6617'/>
+      <pointer-type-def type-id='type-id-6432' size-in-bits='64' id='type-id-6618'/>
+      <pointer-type-def type-id='type-id-6428' size-in-bits='64' id='type-id-6619'/>
+      <pointer-type-def type-id='type-id-6460' size-in-bits='64' id='type-id-6620'/>
+      <pointer-type-def type-id='type-id-6415' size-in-bits='64' id='type-id-6621'/>
+      <pointer-type-def type-id='type-id-6622' size-in-bits='64' id='type-id-6623'/>
+      <pointer-type-def type-id='type-id-6624' size-in-bits='64' id='type-id-6373'/>
+      <pointer-type-def type-id='type-id-6625' size-in-bits='64' id='type-id-6405'/>
+      <pointer-type-def type-id='type-id-6626' size-in-bits='64' id='type-id-6239'/>
+      <pointer-type-def type-id='type-id-6627' size-in-bits='64' id='type-id-6331'/>
+      <pointer-type-def type-id='type-id-6628' size-in-bits='64' id='type-id-6360'/>
+      <pointer-type-def type-id='type-id-6629' size-in-bits='64' id='type-id-6384'/>
+      <pointer-type-def type-id='type-id-6630' size-in-bits='64' id='type-id-6408'/>
+      <pointer-type-def type-id='type-id-6231' size-in-bits='64' id='type-id-6271'/>
+      <pointer-type-def type-id='type-id-6276' size-in-bits='64' id='type-id-6447'/>
+      <pointer-type-def type-id='type-id-6631' size-in-bits='64' id='type-id-6332'/>
+      <function-decl name='wiphy_new_nm' mangled-name='wiphy_new_nm' filepath='net/wireless/core.c' line='383' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wiphy_new_nm'>
+        <parameter type-id='type-id-6509' name='ops' filepath='net/wireless/core.c' line='383' column='1'/>
+        <parameter type-id='type-id-17' name='sizeof_priv' filepath='net/wireless/core.c' line='383' column='1'/>
+        <parameter type-id='type-id-4' name='requested_name' filepath='net/wireless/core.c' line='384' column='1'/>
+        <return type-id='type-id-6271'/>
+      </function-decl>
+      <function-decl name='wiphy_free' mangled-name='wiphy_free' filepath='net/wireless/core.c' line='1001' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wiphy_free'>
+        <parameter type-id='type-id-6271' name='wiphy' filepath='net/wireless/core.c' line='1001' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='wiphy_register' mangled-name='wiphy_register' filepath='net/wireless/core.c' line='631' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wiphy_register'>
+        <parameter type-id='type-id-6271' name='wiphy' filepath='net/wireless/core.c' line='631' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='wiphy_unregister' mangled-name='wiphy_unregister' filepath='net/wireless/core.c' line='929' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wiphy_unregister'>
+        <parameter type-id='type-id-6271' name='wiphy' filepath='net/wireless/core.c' line='929' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='type-id-6532'>
+        <parameter type-id='type-id-6271'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6533'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-6486'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6534'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-6487'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6535'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-6500'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6536'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-6237'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6537'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6538'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-6481'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6539'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-6482'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6540'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-6483'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6541'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-6484'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6542'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-6485'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6543'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-6486'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6544'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-6486'/>
+        <parameter type-id='type-id-7'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6545'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-6488'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6546'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-6488'/>
+        <parameter type-id='type-id-7'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6547'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-6489'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6548'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-6490'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6549'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-6491'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6550'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-6492'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6551'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-6493'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6552'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-6494'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6553'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-6498'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6554'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-6499'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6555'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-6258'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6556'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-6502'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6557'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-3880'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6558'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-6422'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6559'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-6511'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6560'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-6521'/>
+        <parameter type-id='type-id-6523'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6561'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-658'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6562'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-658'/>
+        <parameter type-id='type-id-6506'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6563'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-658'/>
+        <parameter type-id='type-id-658'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6564'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-658'/>
+        <parameter type-id='type-id-6464'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6565'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-658'/>
+        <parameter type-id='type-id-6618'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6566'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-658'/>
+        <parameter type-id='type-id-6619'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6567'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-658'/>
+        <parameter type-id='type-id-84'/>
+        <parameter type-id='type-id-658'/>
+        <parameter type-id='type-id-6503'/>
+        <parameter type-id='type-id-3880'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6568'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-658'/>
+        <parameter type-id='type-id-214'/>
+        <parameter type-id='type-id-6486'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6569'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-658'/>
+        <parameter type-id='type-id-214'/>
+        <parameter type-id='type-id-214'/>
+        <parameter type-id='type-id-688'/>
+        <parameter type-id='type-id-7'/>
+        <parameter type-id='type-id-33'/>
+        <parameter type-id='type-id-658'/>
+        <parameter type-id='type-id-84'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6570'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-658'/>
+        <parameter type-id='type-id-1510'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6571'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-6277'/>
+        <parameter type-id='type-id-6621'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6572'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-6205'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6573'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-6531'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6574'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-666'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6575'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-6620'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6576'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-3121'/>
+        <parameter type-id='type-id-6618'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6577'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-3121'/>
+        <parameter type-id='type-id-3121'/>
+        <parameter type-id='type-id-6614'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6578'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-6613'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6579'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-6615'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6580'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-6617'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6581'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-33'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6582'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-738'/>
+        <parameter type-id='type-id-738'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6583'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-738'/>
+        <parameter type-id='type-id-7'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6584'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-688'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6585'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-7'/>
+        <parameter type-id='type-id-6521'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6586'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-7'/>
+        <parameter type-id='type-id-7'/>
+        <parameter type-id='type-id-7'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6587'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-40'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6588'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-214'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6589'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-214'/>
+        <parameter type-id='type-id-658'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6590'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-214'/>
+        <parameter type-id='type-id-658'/>
+        <parameter type-id='type-id-214'/>
+        <parameter type-id='type-id-688'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6591'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-214'/>
+        <parameter type-id='type-id-33'/>
+        <parameter type-id='type-id-658'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6592'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-214'/>
+        <parameter type-id='type-id-33'/>
+        <parameter type-id='type-id-658'/>
+        <parameter type-id='type-id-6424'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6593'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-214'/>
+        <parameter type-id='type-id-33'/>
+        <parameter type-id='type-id-658'/>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-6623'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6594'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-214'/>
+        <parameter type-id='type-id-33'/>
+        <parameter type-id='type-id-33'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6595'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-3121'/>
+        <parameter type-id='type-id-3121'/>
+        <parameter type-id='type-id-6614'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6596'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-7'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6597'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-7'/>
+        <parameter type-id='type-id-7'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6598'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1567'/>
+        <parameter type-id='type-id-1567'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6599'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-6447'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6600'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-6447'/>
+        <parameter type-id='type-id-6486'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6601'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-6447'/>
+        <parameter type-id='type-id-6495'/>
+        <parameter type-id='type-id-1510'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6602'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-6447'/>
+        <parameter type-id='type-id-6496'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6603'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-6447'/>
+        <parameter type-id='type-id-6496'/>
+        <parameter type-id='type-id-7'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6604'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-6447'/>
+        <parameter type-id='type-id-6497'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6605'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-6447'/>
+        <parameter type-id='type-id-6501'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6606'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-6447'/>
+        <parameter type-id='type-id-6466'/>
+        <parameter type-id='type-id-688'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6607'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-6447'/>
+        <parameter type-id='type-id-6459'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6608'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-6447'/>
+        <parameter type-id='type-id-6205'/>
+        <parameter type-id='type-id-5'/>
+        <parameter type-id='type-id-1510'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6609'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-6447'/>
+        <parameter type-id='type-id-666'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6610'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-6447'/>
+        <parameter type-id='type-id-1768'/>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-17'/>
+        <parameter type-id='type-id-45'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6611'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-6447'/>
+        <parameter type-id='type-id-40'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6612'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-6447'/>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-17'/>
+        <return type-id='type-id-17'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6622'>
+        <parameter type-id='type-id-15'/>
+        <parameter type-id='type-id-6424'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6624'>
+        <parameter type-id='type-id-6271'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6625'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-1650'/>
+        <parameter type-id='type-id-658'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6626'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-6616'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6627'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-33'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6628'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-6447'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6629'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-6447'/>
+        <parameter type-id='type-id-688'/>
+        <parameter type-id='type-id-33'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6630'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-6447'/>
+        <parameter type-id='type-id-40'/>
+        <return type-id='type-id-81'/>
+      </function-type>
+      <function-type size-in-bits='64' id='type-id-6631'>
+        <parameter type-id='type-id-6271'/>
+        <parameter type-id='type-id-4'/>
+        <parameter type-id='type-id-216'/>
+        <parameter type-id='type-id-6277'/>
+        <parameter type-id='type-id-6621'/>
+        <return type-id='type-id-6447'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/wireless/scan.c' language='LANG_C89'>
+      <class-decl name='cfg80211_inform_bss' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1929' column='1' id='type-id-6632'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chan' type-id='type-id-6205' visibility='default' filepath='include/net/cfg80211.h' line='1930' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='scan_width' type-id='type-id-6267' visibility='default' filepath='include/net/cfg80211.h' line='1931' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='signal' type-id='type-id-738' visibility='default' filepath='include/net/cfg80211.h' line='1932' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='boottime_ns' type-id='type-id-40' visibility='default' filepath='include/net/cfg80211.h' line='1933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='parent_tsf' type-id='type-id-40' visibility='default' filepath='include/net/cfg80211.h' line='1934' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='parent_bssid' type-id='type-id-6229' visibility='default' filepath='include/net/cfg80211.h' line='1935' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='304'>
+          <var-decl name='chains' type-id='type-id-214' visibility='default' filepath='include/net/cfg80211.h' line='1936' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='312'>
+          <var-decl name='chain_signal' type-id='type-id-6218' visibility='default' filepath='include/net/cfg80211.h' line='1937' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='cfg80211_bss_frame_type' filepath='include/net/cfg80211.h' line='4975' column='1' id='type-id-6633'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='CFG80211_BSS_FTYPE_UNKNOWN' value='0'/>
+        <enumerator name='CFG80211_BSS_FTYPE_BEACON' value='1'/>
+        <enumerator name='CFG80211_BSS_FTYPE_PRESP' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='type-id-6632' size-in-bits='64' id='type-id-6634'/>
+      <pointer-type-def type-id='type-id-6448' size-in-bits='64' id='type-id-6635'/>
+      <function-decl name='cfg80211_scan_done' mangled-name='cfg80211_scan_done' filepath='net/wireless/scan.c' line='292' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_scan_done'>
+        <parameter type-id='type-id-6500' name='request' filepath='net/wireless/scan.c' line='292' column='1'/>
+        <parameter type-id='type-id-6635' name='info' filepath='net/wireless/scan.c' line='293' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='cfg80211_inform_bss_data' mangled-name='cfg80211_inform_bss_data' filepath='net/wireless/scan.c' line='1132' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_inform_bss_data'>
+        <parameter type-id='type-id-6271' name='wiphy' filepath='net/wireless/scan.c' line='1132' column='1'/>
+        <parameter type-id='type-id-6634' name='data' filepath='net/wireless/scan.c' line='1133' column='1'/>
+        <parameter type-id='type-id-6633' name='ftype' filepath='net/wireless/scan.c' line='1134' column='1'/>
+        <parameter type-id='type-id-658' name='bssid' filepath='net/wireless/scan.c' line='1135' column='1'/>
+        <parameter type-id='type-id-40' name='tsf' filepath='net/wireless/scan.c' line='1135' column='1'/>
+        <parameter type-id='type-id-688' name='capability' filepath='net/wireless/scan.c' line='1135' column='1'/>
+        <parameter type-id='type-id-688' name='beacon_interval' filepath='net/wireless/scan.c' line='1136' column='1'/>
+        <parameter type-id='type-id-658' name='ie' filepath='net/wireless/scan.c' line='1136' column='1'/>
+        <parameter type-id='type-id-84' name='ielen' filepath='net/wireless/scan.c' line='1136' column='1'/>
+        <parameter type-id='type-id-485' name='gfp' filepath='net/wireless/scan.c' line='1137' column='1'/>
+        <return type-id='type-id-6288'/>
+      </function-decl>
+      <function-decl name='cfg80211_put_bss' mangled-name='cfg80211_put_bss' filepath='net/wireless/scan.c' line='1319' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_put_bss'>
+        <parameter type-id='type-id-6271' name='wiphy' filepath='net/wireless/scan.c' line='1319' column='1'/>
+        <parameter type-id='type-id-6288' name='pub' filepath='net/wireless/scan.c' line='1319' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/wireless/sme.c' language='LANG_C89'>
+      <enum-decl name='__anonymous_enum__' is-anonymous='yes' filepath='net/wireless/sme.c' line='34' column='1' id='type-id-6636'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='CFG80211_CONN_SCANNING' value='0'/>
+        <enumerator name='CFG80211_CONN_SCAN_AGAIN' value='1'/>
+        <enumerator name='CFG80211_CONN_AUTHENTICATE_NEXT' value='2'/>
+        <enumerator name='CFG80211_CONN_AUTHENTICATING' value='3'/>
+        <enumerator name='CFG80211_CONN_AUTH_FAILED_TIMEOUT' value='4'/>
+        <enumerator name='CFG80211_CONN_ASSOCIATE_NEXT' value='5'/>
+        <enumerator name='CFG80211_CONN_ASSOCIATING' value='6'/>
+        <enumerator name='CFG80211_CONN_ASSOC_FAILED' value='7'/>
+        <enumerator name='CFG80211_CONN_ASSOC_FAILED_TIMEOUT' value='8'/>
+        <enumerator name='CFG80211_CONN_DEAUTH' value='9'/>
+        <enumerator name='CFG80211_CONN_ABANDON' value='10'/>
+        <enumerator name='CFG80211_CONN_CONNECTED' value='11'/>
+      </enum-decl>
+      <enum-decl name='__anonymous_enum__1' is-anonymous='yes' filepath='include/linux/netdevice.h' line='1964' column='1' id='type-id-6637'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='NETREG_UNINITIALIZED' value='0'/>
+        <enumerator name='NETREG_REGISTERED' value='1'/>
+        <enumerator name='NETREG_UNREGISTERING' value='2'/>
+        <enumerator name='NETREG_UNREGISTERED' value='3'/>
+        <enumerator name='NETREG_RELEASED' value='4'/>
+        <enumerator name='NETREG_DUMMY' value='5'/>
+      </enum-decl>
+      <enum-decl name='__anonymous_enum__2' is-anonymous='yes' filepath='include/linux/netdevice.h' line='1974' column='1' id='type-id-6638'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='RTNL_LINK_INITIALIZED' value='0'/>
+        <enumerator name='RTNL_LINK_INITIALIZING' value='1'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/netdevice.h' line='1989' column='1' id='type-id-6639'>
+        <data-member access='private'>
+          <var-decl name='ml_priv' type-id='type-id-15' visibility='default' filepath='include/linux/netdevice.h' line='1990' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='lstats' type-id='type-id-3039' visibility='default' filepath='include/linux/netdevice.h' line='1991' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='tstats' type-id='type-id-3040' visibility='default' filepath='include/linux/netdevice.h' line='1992' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='dstats' type-id='type-id-3038' visibility='default' filepath='include/linux/netdevice.h' line='1993' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='vstats' type-id='type-id-3041' visibility='default' filepath='include/linux/netdevice.h' line='1994' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='cfg80211_connect_resp_params' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='5579' column='1' id='type-id-6640'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='status' type-id='type-id-17' visibility='default' filepath='include/net/cfg80211.h' line='5580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bssid' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='5581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bss' type-id='type-id-6288' visibility='default' filepath='include/net/cfg80211.h' line='5582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='req_ie' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='5583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='req_ie_len' type-id='type-id-84' visibility='default' filepath='include/net/cfg80211.h' line='5584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='resp_ie' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='5585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='resp_ie_len' type-id='type-id-84' visibility='default' filepath='include/net/cfg80211.h' line='5586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fils' type-id='type-id-6641' visibility='default' filepath='include/net/cfg80211.h' line='5587' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='timeout_reason' type-id='type-id-6642' visibility='default' filepath='include/net/cfg80211.h' line='5588' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_fils_resp_params' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='5543' column='1' id='type-id-6641'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kek' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='5544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='kek_len' type-id='type-id-84' visibility='default' filepath='include/net/cfg80211.h' line='5545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='update_erp_next_seq_num' type-id='type-id-33' visibility='default' filepath='include/net/cfg80211.h' line='5546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='erp_next_seq_num' type-id='type-id-688' visibility='default' filepath='include/net/cfg80211.h' line='5547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pmk' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='5548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pmk_len' type-id='type-id-84' visibility='default' filepath='include/net/cfg80211.h' line='5549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pmkid' type-id='type-id-658' visibility='default' filepath='include/net/cfg80211.h' line='5550' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_timeout_reason' filepath='include/uapi/linux/nl80211.h' line='5308' column='1' id='type-id-6642'>
+        <underlying-type type-id='type-id-94'/>
+        <enumerator name='NL80211_TIMEOUT_UNSPECIFIED' value='0'/>
+        <enumerator name='NL80211_TIMEOUT_SCAN' value='1'/>
+        <enumerator name='NL80211_TIMEOUT_AUTH' value='2'/>
+        <enumerator name='NL80211_TIMEOUT_ASSOC' value='3'/>
+      </enum-decl>
+      <pointer-type-def type-id='type-id-6640' size-in-bits='64' id='type-id-6643'/>
+      <function-decl name='cfg80211_connect_done' mangled-name='cfg80211_connect_done' filepath='net/wireless/sme.c' line='788' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_connect_done'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/wireless/sme.c' line='788' column='1'/>
+        <parameter type-id='type-id-6643' name='params' filepath='net/wireless/sme.c' line='789' column='1'/>
+        <parameter type-id='type-id-485' name='gfp' filepath='net/wireless/sme.c' line='790' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='cfg80211_disconnected' mangled-name='cfg80211_disconnected' filepath='net/wireless/sme.c' line='1106' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_disconnected'>
+        <parameter type-id='type-id-1650' name='dev' filepath='net/wireless/sme.c' line='1106' column='1'/>
+        <parameter type-id='type-id-688' name='reason' filepath='net/wireless/sme.c' line='1106' column='1'/>
+        <parameter type-id='type-id-658' name='ie' filepath='net/wireless/sme.c' line='1107' column='1'/>
+        <parameter type-id='type-id-84' name='ie_len' filepath='net/wireless/sme.c' line='1107' column='1'/>
+        <parameter type-id='type-id-33' name='locally_generated' filepath='net/wireless/sme.c' line='1108' column='1'/>
+        <parameter type-id='type-id-485' name='gfp' filepath='net/wireless/sme.c' line='1108' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/lib/delay.c' language='LANG_C89'>
+      <function-decl name='__const_udelay' mangled-name='__const_udelay' filepath='arch/arm64/lib/delay.c' line='54' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__const_udelay'>
+        <parameter type-id='type-id-16' name='xloops' filepath='arch/arm64/lib/delay.c' line='54' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/cmdline.c' language='LANG_C89'>
+      <function-decl name='memparse' mangled-name='memparse' filepath='lib/cmdline.c' line='128' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='memparse'>
+        <parameter type-id='type-id-4' name='ptr' filepath='lib/cmdline.c' line='128' column='1'/>
+        <parameter type-id='type-id-3458' name='retptr' filepath='lib/cmdline.c' line='128' column='1'/>
+        <return type-id='type-id-98'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/cpumask.c' language='LANG_C89'>
+      <function-decl name='cpumask_next' mangled-name='cpumask_next' filepath='lib/cpumask.c' line='16' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpumask_next'>
+        <parameter type-id='type-id-17' name='n' filepath='lib/cpumask.c' line='16' column='1'/>
+        <parameter type-id='type-id-3386' name='srcp' filepath='lib/cpumask.c' line='16' column='1'/>
+        <return type-id='type-id-5'/>
+      </function-decl>
+      <function-decl name='cpumask_next_wrap' mangled-name='cpumask_next_wrap' filepath='lib/cpumask.c' line='76' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpumask_next_wrap'>
+        <parameter type-id='type-id-17' name='n' filepath='lib/cpumask.c' line='76' column='1'/>
+        <parameter type-id='type-id-3386' name='mask' filepath='lib/cpumask.c' line='76' column='1'/>
+        <parameter type-id='type-id-17' name='start' filepath='lib/cpumask.c' line='76' column='1'/>
+        <parameter type-id='type-id-33' name='wrap' filepath='lib/cpumask.c' line='76' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/idr.c' language='LANG_C89'>
+      <pointer-type-def type-id='type-id-3449' size-in-bits='64' id='type-id-6644'/>
+      <function-decl name='ida_destroy' mangled-name='ida_destroy' filepath='lib/idr.c' line='503' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ida_destroy'>
+        <parameter type-id='type-id-6644' name='ida' filepath='lib/idr.c' line='503' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='ida_alloc_range' mangled-name='ida_alloc_range' filepath='lib/idr.c' line='534' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ida_alloc_range'>
+        <parameter type-id='type-id-6644' name='ida' filepath='lib/idr.c' line='534' column='1'/>
+        <parameter type-id='type-id-5' name='min' filepath='lib/idr.c' line='534' column='1'/>
+        <parameter type-id='type-id-5' name='max' filepath='lib/idr.c' line='534' column='1'/>
+        <parameter type-id='type-id-485' name='gfp' filepath='lib/idr.c' line='535' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='ida_free' mangled-name='ida_free' filepath='lib/idr.c' line='572' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ida_free'>
+        <parameter type-id='type-id-6644' name='ida' filepath='lib/idr.c' line='572' column='1'/>
+        <parameter type-id='type-id-5' name='id' filepath='lib/idr.c' line='572' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/kobject.c' language='LANG_C89'>
+      <function-decl name='kobject_init_and_add' mangled-name='kobject_init_and_add' filepath='lib/kobject.c' line='444' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kobject_init_and_add'>
+        <parameter type-id='type-id-379' name='kobj' filepath='lib/kobject.c' line='444' column='1'/>
+        <parameter type-id='type-id-1396' name='ktype' filepath='lib/kobject.c' line='444' column='1'/>
+        <parameter type-id='type-id-379' name='parent' filepath='lib/kobject.c' line='445' column='1'/>
+        <parameter type-id='type-id-4' name='fmt' filepath='lib/kobject.c' line='445' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='kobject_put' mangled-name='kobject_put' filepath='lib/kobject.c' line='701' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kobject_put'>
+        <parameter type-id='type-id-379' name='kobj' filepath='lib/kobject.c' line='701' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+      <function-decl name='kobject_del' mangled-name='kobject_del' filepath='lib/kobject.c' line='584' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kobject_del'>
+        <parameter type-id='type-id-379' name='kobj' filepath='lib/kobject.c' line='584' column='1'/>
+        <return type-id='type-id-81'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/ratelimit.c' language='LANG_C89'>
+      <pointer-type-def type-id='type-id-1639' size-in-bits='64' id='type-id-6645'/>
+      <function-decl name='___ratelimit' mangled-name='___ratelimit' filepath='lib/ratelimit.c' line='28' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='___ratelimit'>
+        <parameter type-id='type-id-6645' name='rs' filepath='lib/ratelimit.c' line='28' column='1'/>
+        <parameter type-id='type-id-4' name='func' filepath='lib/ratelimit.c' line='28' column='1'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/vsprintf.c' language='LANG_C89'>
+      <function-decl name='simple_strtoul' mangled-name='simple_strtoul' filepath='lib/vsprintf.c' line='83' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_strtoul'>
+        <parameter type-id='type-id-4' name='cp' filepath='lib/vsprintf.c' line='83' column='1'/>
+        <parameter type-id='type-id-3458' name='endp' filepath='lib/vsprintf.c' line='83' column='1'/>
+        <parameter type-id='type-id-5' name='base' filepath='lib/vsprintf.c' line='83' column='1'/>
+        <return type-id='type-id-16'/>
+      </function-decl>
+      <function-decl name='snprintf' mangled-name='snprintf' filepath='lib/vsprintf.c' line='2438' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snprintf'>
+        <parameter type-id='type-id-2' name='buf' filepath='lib/vsprintf.c' line='2438' column='1'/>
+        <parameter type-id='type-id-84' name='size' filepath='lib/vsprintf.c' line='2438' column='1'/>
+        <parameter type-id='type-id-4' name='fmt' filepath='lib/vsprintf.c' line='2438' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='scnprintf' mangled-name='scnprintf' filepath='lib/vsprintf.c' line='2462' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scnprintf'>
+        <parameter type-id='type-id-2' name='buf' filepath='lib/vsprintf.c' line='2462' column='1'/>
+        <parameter type-id='type-id-84' name='size' filepath='lib/vsprintf.c' line='2462' column='1'/>
+        <parameter type-id='type-id-4' name='fmt' filepath='lib/vsprintf.c' line='2462' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='sprintf' mangled-name='sprintf' filepath='lib/vsprintf.c' line='2507' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sprintf'>
+        <parameter type-id='type-id-2' name='buf' filepath='lib/vsprintf.c' line='2507' column='1'/>
+        <parameter type-id='type-id-4' name='fmt' filepath='lib/vsprintf.c' line='2507' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+      <function-decl name='sscanf' mangled-name='sscanf' filepath='lib/vsprintf.c' line='3210' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sscanf'>
+        <parameter type-id='type-id-4' name='buf' filepath='lib/vsprintf.c' line='3210' column='1'/>
+        <parameter type-id='type-id-4' name='fmt' filepath='lib/vsprintf.c' line='3210' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='type-id-17'/>
+      </function-decl>
+    </abi-instr>
+  </abi-corpus>
+  <abi-corpus path='virtio_ring.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='ttm.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='mmc_core.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='virtio_blk.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='virtio-gpu.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='can-dev.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='vmw_vsock_virtio_transport_common.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='can.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='can-gw.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='mmc_block.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='virtio.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='gnss-serial.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='sdhci-pltfm.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='vsock_diag.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='virtio_mmio.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='dummy_hcd.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='can-raw.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='can-bcm.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='virtio-rng.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='kheaders.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='8250_of.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='failover.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='vmw_vsock_virtio_transport.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='sdhci.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='vcan.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='vsock.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='crypto_engine.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='dummy-cpufreq.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='virt_wifi.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='gnss-cmdline.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='net_failover.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='rtc-test.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='virtio_console.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='virtio_net.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='virtio_pci.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='virtio_input.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='binfmt_misc.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+  <abi-corpus path='virtio_crypto.ko' architecture='elf-arm-aarch64'>
+  </abi-corpus>
+</abi-corpus-group>
+
+<!--
+     libabigail: abidw: 1.7.0-c088667b-goog
+     built with: clang: Android (6051079 based on r370808) clang version 10.0.1 (https://android.googlesource.com/toolchain/llvm-project b9738d6d99f614c8bf7a3e7c769659b313b88244)
+-->
diff --git a/abi_gki_aarch64_whitelist b/abi_gki_aarch64_whitelist
new file mode 100644
index 0000000..8c68d31
--- /dev/null
+++ b/abi_gki_aarch64_whitelist
@@ -0,0 +1,857 @@
+[abi_whitelist]
+  add_timer
+  add_uevent_var
+  add_wait_queue
+  alloc_chrdev_region
+  __alloc_disk_node
+  alloc_etherdev_mqs
+  alloc_netdev_mqs
+  alloc_pages_exact
+  __alloc_pages_nodemask
+  __alloc_percpu
+  __alloc_skb
+  __alloc_workqueue_key
+  arch_bpf_jit_check_func
+  __arch_copy_from_user
+  __arch_copy_to_user
+  arm64_const_caps_ready
+  autoremove_wake_function
+  bcmp
+  blk_cleanup_queue
+  blk_execute_rq
+  blk_get_queue
+  blk_get_request
+  blk_mq_alloc_tag_set
+  blk_mq_complete_request
+  __blk_mq_end_request
+  blk_mq_end_request
+  blk_mq_free_tag_set
+  blk_mq_init_queue
+  blk_mq_quiesce_queue
+  blk_mq_requeue_request
+  blk_mq_run_hw_queues
+  blk_mq_start_request
+  blk_mq_start_stopped_hw_queues
+  blk_mq_stop_hw_queue
+  blk_mq_unquiesce_queue
+  blk_mq_virtio_map_queues
+  blk_put_queue
+  blk_put_request
+  blk_queue_alignment_offset
+  blk_queue_bounce_limit
+  blk_queue_flag_clear
+  blk_queue_flag_set
+  blk_queue_io_min
+  blk_queue_io_opt
+  blk_queue_logical_block_size
+  blk_queue_max_discard_sectors
+  blk_queue_max_hw_sectors
+  blk_queue_max_segments
+  blk_queue_max_segment_size
+  blk_queue_physical_block_size
+  blk_queue_rq_timeout
+  blk_queue_write_cache
+  blk_rq_map_kern
+  blk_rq_map_sg
+  blk_status_to_errno
+  blk_update_request
+  bpf_prog_add
+  bpf_prog_put
+  bpf_prog_sub
+  bpf_trace_run10
+  bpf_trace_run2
+  bpf_trace_run8
+  bpf_warn_invalid_xdp_action
+  build_skb
+  bus_register
+  bus_unregister
+  call_netdevice_notifiers
+  call_rcu
+  cancel_delayed_work
+  cancel_delayed_work_sync
+  cancel_work_sync
+  capable
+  cdev_add
+  cdev_alloc
+  cdev_del
+  cdev_device_add
+  cdev_device_del
+  cdev_init
+  cfg80211_connect_done
+  cfg80211_disconnected
+  cfg80211_inform_bss_data
+  cfg80211_put_bss
+  cfg80211_scan_done
+  __cfi_slowpath
+  check_disk_change
+  __check_object_size
+  __class_create
+  class_destroy
+  __class_register
+  class_unregister
+  clear_page
+  clk_disable
+  clk_enable
+  clk_get_rate
+  clk_prepare
+  clk_unprepare
+  complete
+  complete_all
+  completion_done
+  console_suspend_enabled
+  __const_udelay
+  consume_skb
+  _copy_from_iter_full
+  copy_page
+  _copy_to_iter
+  cpu_bit_bitmap
+  cpufreq_generic_attr
+  cpufreq_register_driver
+  cpufreq_unregister_driver
+  __cpuhp_remove_state
+  __cpuhp_setup_state
+  __cpuhp_state_add_instance
+  __cpuhp_state_remove_instance
+  cpu_hwcap_keys
+  cpu_hwcaps
+  cpumask_next
+  cpumask_next_wrap
+  cpu_number
+  __cpu_online_mask
+  cpus_read_lock
+  cpus_read_unlock
+  cpu_topology
+  crypto_ablkcipher_type
+  crypto_dequeue_request
+  crypto_enqueue_request
+  crypto_init_queue
+  crypto_register_alg
+  crypto_unregister_alg
+  datagram_poll
+  debugfs_create_dir
+  debugfs_create_file
+  debugfs_create_x32
+  debugfs_remove
+  debugfs_remove_recursive
+  debug_smp_processor_id
+  default_llseek
+  default_wake_function
+  delayed_work_timer_fn
+  del_gendisk
+  del_timer
+  del_timer_sync
+  destroy_workqueue
+  dev_add_pack
+  dev_close
+  dev_driver_string
+  _dev_err
+  dev_fwnode
+  __dev_get_by_index
+  dev_get_by_index
+  dev_get_by_index_rcu
+  dev_get_stats
+  device_add
+  device_add_disk
+  device_create
+  device_create_file
+  device_del
+  device_destroy
+  device_for_each_child
+  device_initialize
+  device_property_present
+  device_property_read_u32_array
+  device_register
+  device_remove_file
+  device_unregister
+  _dev_info
+  __dev_kfree_skb_any
+  devm_clk_get
+  dev_mc_sync_multiple
+  dev_mc_unsync
+  devm_gpiod_get_index
+  devm_gpio_request_one
+  devm_ioremap
+  devm_ioremap_resource
+  devm_kfree
+  devm_kmalloc
+  devm_regulator_get_optional
+  __devm_request_region
+  devm_request_threaded_irq
+  __devm_reset_control_get
+  devm_rtc_allocate_device
+  _dev_notice
+  dev_open
+  dev_pm_domain_attach
+  dev_pm_domain_detach
+  dev_printk
+  dev_queue_xmit
+  dev_remove_pack
+  devres_add
+  __devres_alloc_node
+  devres_destroy
+  devres_free
+  dev_set_mtu
+  dev_set_name
+  dev_uc_sync_multiple
+  dev_uc_unsync
+  _dev_warn
+  disable_irq
+  dma_alloc_from_dev_coherent
+  dma_buf_export
+  dma_buf_fd
+  dma_buf_get
+  dma_buf_put
+  dma_fence_context_alloc
+  dma_fence_enable_sw_signaling
+  dma_fence_init
+  dma_fence_match_context
+  dma_fence_release
+  dma_fence_signal
+  dma_fence_signal_locked
+  dma_fence_wait_timeout
+  dma_release_from_dev_coherent
+  driver_register
+  driver_unregister
+  drm_add_edid_modes
+  drm_add_modes_noedid
+  drm_atomic_helper_check
+  drm_atomic_helper_cleanup_planes
+  drm_atomic_helper_commit
+  drm_atomic_helper_commit_hw_done
+  drm_atomic_helper_commit_modeset_disables
+  drm_atomic_helper_commit_modeset_enables
+  drm_atomic_helper_commit_planes
+  drm_atomic_helper_connector_destroy_state
+  drm_atomic_helper_connector_duplicate_state
+  drm_atomic_helper_connector_reset
+  drm_atomic_helper_crtc_destroy_state
+  drm_atomic_helper_crtc_duplicate_state
+  drm_atomic_helper_crtc_reset
+  drm_atomic_helper_disable_plane
+  drm_atomic_helper_page_flip
+  drm_atomic_helper_plane_destroy_state
+  drm_atomic_helper_plane_duplicate_state
+  drm_atomic_helper_plane_reset
+  drm_atomic_helper_set_config
+  drm_atomic_helper_shutdown
+  drm_atomic_helper_update_plane
+  drm_atomic_helper_wait_for_vblanks
+  drm_class_device_register
+  drm_class_device_unregister
+  drm_clflush_pages
+  drm_compat_ioctl
+  drm_connector_attach_edid_property
+  drm_connector_attach_encoder
+  drm_connector_cleanup
+  drm_connector_init
+  drm_connector_register
+  drm_connector_unregister
+  drm_connector_update_edid_property
+  drm_crtc_cleanup
+  drm_crtc_init_with_planes
+  drm_crtc_send_vblank_event
+  drm_cvt_mode
+  drm_dbg
+  drm_debugfs_create_files
+  drm_dev_alloc
+  drm_dev_put
+  drm_dev_register
+  drm_dev_set_unique
+  drm_do_get_edid
+  drm_encoder_cleanup
+  drm_encoder_init
+  drm_err
+  drm_framebuffer_init
+  drm_gem_fb_create_handle
+  drm_gem_fb_destroy
+  drm_gem_handle_create
+  drm_gem_object_init
+  drm_gem_object_lookup
+  drm_gem_object_put_unlocked
+  drm_gem_object_release
+  drm_gem_prime_export
+  drm_gem_prime_fd_to_handle
+  drm_gem_prime_handle_to_fd
+  drm_gem_prime_import
+  drm_gem_prime_mmap
+  drm_global_item_ref
+  drm_global_item_unref
+  drm_helper_hpd_irq_event
+  drm_helper_mode_fill_fb_struct
+  drm_helper_probe_single_connector_modes
+  drm_ht_create
+  drm_ht_find_item
+  drm_ht_insert_item
+  drm_ht_just_insert_please
+  drm_ht_remove
+  drm_ht_remove_item
+  drm_ioctl
+  drm_kms_helper_hotplug_event
+  drm_mm_init
+  drm_mm_insert_node_in_range
+  drm_mm_print
+  drm_mm_remove_node
+  drm_mm_takedown
+  drm_mode_config_cleanup
+  drm_mode_config_init
+  drm_mode_config_reset
+  drm_mode_probed_add
+  drm_open
+  drm_plane_cleanup
+  drm_poll
+  drm_prime_pages_to_sg
+  __drm_printfn_debug
+  drm_put_dev
+  drm_read
+  drm_release
+  drm_set_preferred_mode
+  drm_universal_plane_init
+  drm_vma_offset_add
+  drm_vma_offset_lookup_locked
+  drm_vma_offset_manager_destroy
+  drm_vma_offset_manager_init
+  drm_vma_offset_remove
+  dummy_dma_ops
+  eth_commit_mac_addr_change
+  ether_setup
+  eth_prepare_mac_addr_change
+  __ethtool_get_link_ksettings
+  ethtool_op_get_link
+  ethtool_op_get_ts_info
+  eth_type_trans
+  eth_validate_addr
+  event_triggers_call
+  fasync_helper
+  fd_install
+  finish_wait
+  flow_keys_basic_dissector
+  flush_work
+  flush_workqueue
+  fput
+  free_irq
+  free_netdev
+  __free_pages
+  free_pages_exact
+  free_percpu
+  freezing_slow_path
+  fsl8250_handle_irq
+  generic_file_llseek
+  get_device
+  get_random_bytes
+  __get_task_comm
+  get_unused_fd_flags
+  gpiod_cansleep
+  gpiod_get_raw_value
+  gpiod_get_raw_value_cansleep
+  gpiod_get_value
+  gpiod_get_value_cansleep
+  gpiod_is_active_low
+  gpiod_set_debounce
+  gpiod_to_irq
+  gpio_to_desc
+  hrtimer_active
+  hrtimer_cancel
+  hrtimer_forward
+  hrtimer_init
+  hrtimer_start_range_ns
+  hvc_alloc
+  hvc_instantiate
+  hvc_kick
+  hvc_poll
+  hvc_remove
+  __hvc_resize
+  hwrng_register
+  hwrng_unregister
+  ida_alloc_range
+  ida_destroy
+  ida_free
+  init_net
+  init_timer_key
+  init_wait_entry
+  __init_waitqueue_head
+  input_alloc_absinfo
+  input_allocate_device
+  input_event
+  input_free_device
+  input_mt_init_slots
+  input_register_device
+  input_set_abs_params
+  input_unregister_device
+  iomem_resource
+  __ioremap
+  __iounmap
+  irq_dispose_mapping
+  irq_set_affinity_hint
+  irq_set_irq_wake
+  jiffies
+  jiffies_to_msecs
+  kernel_kobj
+  kfree
+  kfree_call_rcu
+  kfree_skb
+  kill_fasync
+  kimage_voffset
+  __kmalloc
+  kmalloc_caches
+  kmalloc_order_trace
+  kmem_cache_alloc
+  kmem_cache_alloc_trace
+  kmem_cache_create
+  kmem_cache_destroy
+  kmem_cache_free
+  kmemdup
+  kobject_del
+  kobject_init_and_add
+  kobject_put
+  kobject_uevent
+  kobject_uevent_env
+  kstrtoull
+  kthread_create_on_node
+  kthread_create_worker
+  kthread_destroy_worker
+  kthread_queue_work
+  kthread_should_stop
+  kthread_stop
+  ktime_get
+  ktime_get_real_seconds
+  ktime_get_ts64
+  ktime_get_with_offset
+  kvfree
+  kvmalloc_node
+  kzfree
+  led_classdev_unregister
+  led_trigger_event
+  led_trigger_register_simple
+  led_trigger_unregister_simple
+  __ll_sc_atomic64_add
+  __ll_sc_atomic64_add_return_relaxed
+  __ll_sc_atomic64_andnot
+  __ll_sc_atomic64_fetch_or
+  __ll_sc_atomic64_or
+  __ll_sc_atomic_add
+  __ll_sc_atomic_add_return
+  __ll_sc_atomic_sub
+  __ll_sc_atomic_sub_return
+  __ll_sc___cmpxchg_case_mb_4
+  __ll_sc___cmpxchg_case_mb_8
+  __local_bh_enable_ip
+  lock_sock_nested
+  mark_page_accessed
+  memcpy
+  __memcpy_fromio
+  __memcpy_toio
+  memdup_user
+  memmove
+  memparse
+  memset
+  __memset_io
+  memstart_addr
+  memzero_explicit
+  misc_deregister
+  misc_register
+  mod_timer
+  __module_get
+  module_put
+  __msecs_to_jiffies
+  msleep
+  __mutex_init
+  mutex_lock
+  mutex_lock_interruptible
+  mutex_trylock
+  mutex_unlock
+  __napi_alloc_skb
+  napi_complete_done
+  napi_consume_skb
+  napi_disable
+  napi_gro_receive
+  napi_hash_del
+  __napi_schedule
+  napi_schedule_prep
+  __netdev_alloc_skb
+  netdev_change_features
+  netdev_err
+  netdev_increment_features
+  netdev_info
+  netdev_lower_state_changed
+  netdev_master_upper_dev_link
+  netdev_notify_peers
+  netdev_rx_handler_register
+  netdev_rx_handler_unregister
+  netdev_upper_dev_link
+  netdev_upper_dev_unlink
+  netdev_warn
+  netif_carrier_off
+  netif_carrier_on
+  netif_device_attach
+  netif_device_detach
+  netif_napi_add
+  netif_napi_del
+  netif_receive_skb
+  netif_rx
+  netif_rx_ni
+  netif_schedule_queue
+  netif_set_real_num_rx_queues
+  netif_set_real_num_tx_queues
+  __netif_set_xps_queue
+  netif_stacked_transfer_operstate
+  netif_tx_stop_all_queues
+  netif_tx_wake_queue
+  netlink_capable
+  __netlink_dump_start
+  net_ratelimit
+  nf_conntrack_destroy
+  nla_memcpy
+  nla_parse
+  nla_put
+  __nlmsg_put
+  no_llseek
+  nonseekable_open
+  noop_llseek
+  nr_cpu_ids
+  nr_swap_pages
+  nsecs_to_jiffies
+  of_address_to_resource
+  of_alias_get_id
+  of_device_is_big_endian
+  of_device_is_compatible
+  of_find_property
+  of_get_child_by_name
+  of_get_next_child
+  of_get_property
+  of_irq_get
+  of_led_classdev_register
+  of_match_device
+  of_parse_phandle
+  of_property_read_u64
+  of_property_read_variable_u32_array
+  panic
+  param_ops_bool
+  param_ops_int
+  param_ops_uint
+  passthru_features_check
+  pci_alloc_irq_vectors_affinity
+  pci_bus_type
+  pci_disable_device
+  pci_enable_device
+  pci_find_capability
+  pci_find_ext_capability
+  pci_find_next_capability
+  pci_free_irq_vectors
+  pci_iomap_range
+  pci_irq_get_affinity
+  pci_irq_vector
+  pci_read_config_byte
+  pci_read_config_dword
+  __pci_register_driver
+  pci_release_selected_regions
+  pci_request_selected_regions
+  pci_set_master
+  pci_unregister_driver
+  PDE_DATA
+  __per_cpu_offset
+  perf_trace_buf_alloc
+  perf_trace_run_bpf_submit
+  pipe_lock
+  pipe_unlock
+  platform_device_add
+  platform_device_add_data
+  platform_device_alloc
+  platform_device_del
+  platform_device_put
+  platform_device_register_full
+  platform_device_unregister
+  __platform_driver_register
+  platform_driver_unregister
+  platform_get_irq
+  platform_get_resource
+  pm_generic_resume
+  pm_generic_runtime_resume
+  pm_generic_runtime_suspend
+  pm_generic_suspend
+  __pm_runtime_disable
+  pm_runtime_enable
+  __pm_runtime_idle
+  __pm_runtime_resume
+  pm_runtime_set_autosuspend_delay
+  __pm_runtime_set_status
+  __pm_runtime_suspend
+  __pm_runtime_use_autosuspend
+  pm_wakeup_dev_event
+  prandom_u32
+  preempt_count_add
+  preempt_count_sub
+  preempt_schedule
+  preempt_schedule_notrace
+  prepare_to_wait
+  prepare_to_wait_event
+  printk
+  proc_create_net_single
+  proc_mkdir_data
+  proto_register
+  proto_unregister
+  __put_cred
+  put_device
+  put_disk
+  __put_page
+  put_unused_fd
+  queue_delayed_work_on
+  queue_work_on
+  ___ratelimit
+  _raw_read_lock
+  _raw_read_unlock
+  _raw_spin_lock
+  _raw_spin_lock_bh
+  _raw_spin_lock_irq
+  _raw_spin_lock_irqsave
+  _raw_spin_trylock
+  _raw_spin_unlock
+  _raw_spin_unlock_bh
+  _raw_spin_unlock_irq
+  _raw_spin_unlock_irqrestore
+  _raw_write_lock_bh
+  _raw_write_unlock_bh
+  rcu_barrier
+  __rcu_read_lock
+  __rcu_read_unlock
+  refcount_dec_and_test_checked
+  refcount_inc_checked
+  refcount_inc_not_zero_checked
+  __refrigerator
+  register_blkdev
+  __register_chrdev
+  register_netdev
+  register_netdevice
+  register_netdevice_notifier
+  register_pernet_subsys
+  register_pm_notifier
+  register_shrinker
+  regulator_count_voltages
+  regulator_disable
+  regulator_enable
+  regulator_get_current_limit
+  regulator_get_voltage
+  regulator_is_supported_voltage
+  regulator_list_voltage
+  regulator_set_voltage
+  release_sock
+  remove_conflicting_framebuffers
+  remove_proc_entry
+  remove_wait_queue
+  __request_module
+  request_threaded_irq
+  reservation_object_add_excl_fence
+  reservation_object_add_shared_fence
+  reservation_object_copy_fences
+  reservation_object_reserve_shared
+  reservation_object_test_signaled_rcu
+  reservation_object_wait_timeout_rcu
+  reservation_ww_class
+  reset_control_assert
+  reset_control_deassert
+  revalidate_disk
+  round_jiffies
+  __rtc_register_device
+  rtc_time64_to_tm
+  rtc_tm_to_time64
+  rtc_update_irq
+  rtnl_is_locked
+  rtnl_link_register
+  rtnl_link_unregister
+  rtnl_lock
+  rtnl_register_module
+  rtnl_unlock
+  rtnl_unregister
+  rtnl_unregister_all
+  sched_setscheduler
+  schedule
+  schedule_timeout
+  scnprintf
+  security_sock_graft
+  send_sig
+  seq_lseek
+  seq_printf
+  seq_putc
+  seq_puts
+  seq_read
+  serial8250_get_port
+  serial8250_register_8250_port
+  serial8250_resume_port
+  serial8250_suspend_port
+  serial8250_unregister_port
+  set_disk_ro
+  set_page_dirty
+  sg_alloc_table
+  sg_alloc_table_from_pages
+  sg_copy_from_buffer
+  sg_copy_to_buffer
+  sg_free_table
+  sg_init_one
+  sg_init_table
+  sg_miter_next
+  sg_miter_start
+  sg_miter_stop
+  sg_nents
+  sg_nents_for_len
+  sg_next
+  shmem_file_setup
+  shmem_read_mapping_page_gfp
+  si_mem_available
+  si_meminfo
+  simple_attr_open
+  simple_attr_read
+  simple_attr_release
+  simple_attr_write
+  simple_read_from_buffer
+  simple_strtoul
+  single_open
+  single_release
+  sk_alloc
+  skb_add_rx_frag
+  skb_clone
+  skb_coalesce_rx_frag
+  skb_copy
+  skb_dequeue
+  __skb_flow_dissect
+  skb_free_datagram
+  skb_page_frag_refill
+  skb_partial_csum_set
+  skb_put
+  skb_queue_purge
+  skb_queue_tail
+  skb_recv_datagram
+  skb_to_sgvec
+  skb_trim
+  skb_tstamp_tx
+  sk_free
+  snprintf
+  sock_alloc_send_skb
+  sock_diag_register
+  sock_diag_save_cookie
+  sock_diag_unregister
+  sock_efree
+  sock_get_timestamp
+  sock_i_ino
+  sock_init_data
+  sock_no_accept
+  sock_no_bind
+  sock_no_connect
+  sock_no_getname
+  sock_no_getsockopt
+  sock_no_ioctl
+  sock_no_listen
+  sock_no_mmap
+  sock_no_sendpage
+  sock_no_setsockopt
+  sock_no_shutdown
+  sock_no_socketpair
+  sock_queue_rcv_skb
+  __sock_recv_ts_and_drops
+  sock_register
+  __sock_tx_timestamp
+  sock_unregister
+  __splice_from_pipe
+  sprintf
+  sscanf
+  __stack_chk_fail
+  __stack_chk_guard
+  strcmp
+  strcpy
+  string_get_size
+  strlcpy
+  strlen
+  strncmp
+  strncpy
+  strstr
+  __sw_hweight64
+  swiotlb_max_segment
+  sync_file_create
+  sync_file_get_fence
+  synchronize_hardirq
+  synchronize_irq
+  synchronize_net
+  synchronize_rcu
+  sysfs_create_bin_file
+  sysfs_create_group
+  __sysfs_match_string
+  sysfs_remove_bin_file
+  sysfs_remove_group
+  system_freezable_wq
+  system_freezing_cnt
+  system_wq
+  __tasklet_hi_schedule
+  tasklet_init
+  tasklet_kill
+  __tasklet_schedule
+  trace_define_field
+  trace_event_buffer_commit
+  trace_event_buffer_reserve
+  trace_event_ignore_this_pid
+  trace_event_raw_init
+  trace_event_reg
+  trace_handle_return
+  __tracepoint_dma_fence_emit
+  __tracepoint_xdp_exception
+  trace_print_symbols_seq
+  trace_raw_output_prep
+  trace_seq_printf
+  try_module_get
+  unlock_page
+  unmap_mapping_range
+  unregister_blkdev
+  __unregister_chrdev
+  unregister_chrdev_region
+  unregister_netdev
+  unregister_netdevice_notifier
+  unregister_netdevice_queue
+  unregister_pernet_subsys
+  unregister_pm_notifier
+  unregister_shrinker
+  up_read
+  usb_add_gadget_udc
+  usb_add_hcd
+  usb_create_hcd
+  usb_create_shared_hcd
+  usb_del_gadget_udc
+  usb_disabled
+  usb_ep_set_maxpacket_limit
+  usb_gadget_giveback_request
+  usb_gadget_udc_reset
+  usb_get_dev
+  usb_hcd_check_unlink_urb
+  usb_hcd_giveback_urb
+  usb_hcd_is_primary_hcd
+  usb_hcd_link_urb_to_ep
+  usb_hcd_poll_rh_status
+  usb_hcd_resume_root_hub
+  usb_hcd_unlink_urb_from_ep
+  usb_put_dev
+  usb_put_hcd
+  usb_remove_hcd
+  usleep_range
+  vmalloc_to_page
+  vmap
+  vm_get_page_prot
+  vm_insert_mixed
+  vm_insert_pfn
+  vunmap
+  wait_for_completion
+  wait_for_completion_killable
+  wait_woken
+  __wake_up
+  wake_up_process
+  __warn_printk
+  wiphy_free
+  wiphy_new_nm
+  wiphy_register
+  wiphy_unregister
+  woken_wake_function
+  ww_mutex_lock
+  ww_mutex_lock_interruptible
+  ww_mutex_unlock
+  xdp_do_flush_map
+  xdp_do_redirect
+  xdp_return_frame
+  xdp_return_frame_rx_napi
+  xdp_rxq_info_reg
+  xdp_rxq_info_reg_mem_model
+  xdp_rxq_info_unreg
\ No newline at end of file
diff --git a/arch/Kconfig b/arch/Kconfig
index 5e247ce..7a06ece 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -486,6 +486,18 @@
 	  - compiling inline assembly with clang's integrated assembler,
 	  - and linking with LLD.
 
+config ARCH_SUPPORTS_THINLTO
+	bool
+	help
+	  An architecture should select this if it supports clang's ThinLTO.
+
+config THINLTO
+	bool "Use clang ThinLTO (EXPERIMENTAL)"
+	depends on LTO_CLANG && ARCH_SUPPORTS_THINLTO
+	default y
+	help
+	  Use ThinLTO to speed up Link Time Optimization.
+
 choice
 	prompt "Link-Time Optimization (LTO) (EXPERIMENTAL)"
 	default LTO_NONE
@@ -542,6 +554,39 @@
 	  If you select this option, the kernel builds a fast look-up table of
 	  CFI check functions in loaded modules to reduce overhead.
 
+config ARCH_SUPPORTS_SHADOW_CALL_STACK
+	bool
+	help
+	  An architecture should select this if it supports Clang's Shadow
+	  Call Stack, has asm/scs.h, and implements runtime support for shadow
+	  stack switching.
+
+config SHADOW_CALL_STACK
+	bool "Clang Shadow Call Stack"
+	depends on ARCH_SUPPORTS_SHADOW_CALL_STACK
+	help
+	  This option enables Clang's Shadow Call Stack, which uses a
+	  shadow stack to protect function return addresses from being
+	  overwritten by an attacker. More information can be found from
+	  Clang's documentation:
+
+	    https://clang.llvm.org/docs/ShadowCallStack.html
+
+	  Note that security guarantees in the kernel differ from the ones
+	  documented for user space. The kernel must store addresses of shadow
+	  stacks used by other tasks and interrupt handlers in memory, which
+	  means an attacker capable reading and writing arbitrary memory may
+	  be able to locate them and hijack control flow by modifying shadow
+	  stacks that are not currently in use.
+
+config SHADOW_CALL_STACK_VMAP
+	bool "Use virtually mapped shadow call stacks"
+	depends on SHADOW_CALL_STACK
+	help
+	  Use virtually mapped shadow call stacks. Selecting this option
+	  provides better stack exhaustion protection, but increases per-thread
+	  memory consumption as a full page is allocated for each shadow stack.
+
 config HAVE_ARCH_WITHIN_STACK_FRAMES
 	bool
 	help
@@ -939,6 +984,20 @@
 	  or potential memory-leaks) with an object associated with that
 	  reference counter.
 
+# Select if the architecture has support for applying RELR relocations.
+config ARCH_HAS_RELR
+	bool
+
+config RELR
+	bool "Use RELR relocation packing"
+	depends on ARCH_HAS_RELR && TOOLS_SUPPORT_RELR
+	default y
+	help
+	  Store the kernel's dynamic relocations in the RELR relocation packing
+	  format. Requires a compatible linker (LLD supports this feature), as
+	  well as compatible NM and OBJCOPY utilities (llvm-nm and llvm-objcopy
+	  are compatible).
+
 source "kernel/gcov/Kconfig"
 
 source "scripts/gcc-plugins/Kconfig"
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 0b5e8ac..be580d4 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -70,7 +70,7 @@
 	select HAVE_EXIT_THREAD
 	select HAVE_FTRACE_MCOUNT_RECORD if (!XIP_KERNEL)
 	select HAVE_FUNCTION_GRAPH_TRACER if (!THUMB2_KERNEL)
-	select HAVE_FUNCTION_TRACER if (!XIP_KERNEL)
+	select HAVE_FUNCTION_TRACER if (!XIP_KERNEL) && (CC_IS_GCC || CLANG_VERSION >= 100000)
 	select HAVE_GCC_PLUGINS
 	select HAVE_GENERIC_DMA_COHERENT
 	select HAVE_HW_BREAKPOINT if (PERF_EVENTS && (CPU_V6 || CPU_V6K || CPU_V7))
@@ -559,6 +559,9 @@
        select SPARSE_IRQ
        select USE_OF
        select PINCTRL
+       select MFD_CORE
+       select SND_SOC_COMPRESS
+       select SND_HWDEP
        help
          Support for Qualcomm MSM/QSD based systems.  This runs on the
          apps processor of the MSM/QSD and depends on a shared memory
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index 6d02008..0e31637 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -44,7 +44,10 @@
 endif
 
 ifeq ($(CONFIG_FRAME_POINTER),y)
-KBUILD_CFLAGS  +=-fno-omit-frame-pointer $(call cc-option,-mapcs,) $(call cc-option,-mno-sched-prolog,)
+KBUILD_CFLAGS	+=-fno-omit-frame-pointer
+ifeq ($(CONFIG_CC_IS_GCC),y)
+KBUILD_CFLAGS += $(call cc-option,-mapcs,) $(call cc-option,-mno-sched-prolog,)
+endif
 endif
 
 ifeq ($(CONFIG_CPU_BIG_ENDIAN),y)
@@ -120,6 +123,10 @@
 CFLAGS_ABI	+=-funwind-tables
 endif
 
+ifeq ($(CONFIG_CC_IS_CLANG),y)
+CFLAGS_ABI	+= -meabi gnu
+endif
+
 # Accept old syntax despite ".syntax unified"
 AFLAGS_NOWARN	:=$(call as-option,-Wa$(comma)-mno-warn-deprecated,-Wa$(comma)-W)
 
diff --git a/arch/arm/configs/vendor/bengal-perf_defconfig b/arch/arm/configs/vendor/bengal-perf_defconfig
index 6cc29ab..9cb1803 100644
--- a/arch/arm/configs/vendor/bengal-perf_defconfig
+++ b/arch/arm/configs/vendor/bengal-perf_defconfig
@@ -52,11 +52,12 @@
 CONFIG_ARM_PSCI=y
 CONFIG_HIGHMEM=y
 CONFIG_SECCOMP=y
-CONFIG_BUILD_ARM_APPENDED_DTB_IMAGE=y
+CONFIG_CPU_FREQ_TIMES=y
 CONFIG_CPU_FREQ_GOV_POWERSAVE=y
 CONFIG_CPU_FREQ_GOV_USERSPACE=y
 CONFIG_CPU_FREQ_GOV_ONDEMAND=y
 CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_BOOST=y
 CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y
 CONFIG_ARM_QCOM_CPUFREQ_HW=y
 CONFIG_CPU_IDLE=y
@@ -303,6 +304,7 @@
 CONFIG_JOYSTICK_XPAD=y
 CONFIG_JOYSTICK_XPAD_LEDS=y
 CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_NT36XXX=y
 CONFIG_INPUT_MISC=y
 CONFIG_INPUT_QPNP_POWER_ON=y
 CONFIG_INPUT_UINPUT=y
@@ -326,12 +328,14 @@
 CONFIG_SPMI=y
 CONFIG_PINCTRL_QCOM_SPMI_PMIC=y
 CONFIG_PINCTRL_BENGAL=y
+CONFIG_PINCTRL_SCUBA=y
 CONFIG_GPIOLIB=y
 CONFIG_GPIO_SYSFS=y
 CONFIG_POWER_RESET=y
 CONFIG_POWER_RESET_QCOM=y
 CONFIG_POWER_RESET_SYSCON=y
 CONFIG_QPNP_SMB5=y
+CONFIG_QPNP_SMBLITE=y
 CONFIG_SMB1355_SLAVE_CHARGER=y
 CONFIG_QPNP_QG=y
 CONFIG_THERMAL=y
@@ -371,9 +375,7 @@
 CONFIG_VIDEO_ADV_DEBUG=y
 CONFIG_VIDEO_FIXED_MINOR_RANGES=y
 CONFIG_V4L_PLATFORM_DRIVERS=y
-CONFIG_V4L_TEST_DRIVERS=y
-CONFIG_VIDEO_VIM2M=y
-CONFIG_VIDEO_VICODEC=y
+CONFIG_VIDEO_V4L2_VIDEOBUF2_CORE=y
 CONFIG_DRM=y
 # CONFIG_DRM_MSM is not set
 CONFIG_BACKLIGHT_LCD_SUPPORT=y
@@ -438,6 +440,9 @@
 CONFIG_MMC_SDHCI_MSM=y
 CONFIG_NEW_LEDS=y
 CONFIG_LEDS_CLASS=y
+CONFIG_LEDS_CLASS_FLASH=y
+CONFIG_LEDS_QTI_FLASH=y
+CONFIG_LEDS_PWM=y
 CONFIG_LEDS_QTI_TRI_LED=y
 CONFIG_LEDS_QPNP_FLASH_V2=y
 CONFIG_LEDS_QPNP_VIBRATOR_LDO=y
@@ -481,6 +486,7 @@
 CONFIG_RPMSG_QCOM_GLINK_SMEM=y
 CONFIG_MSM_RPM_SMD=y
 CONFIG_QCOM_COMMAND_DB=y
+CONFIG_QCOM_RUN_QUEUE_STATS=y
 CONFIG_QCOM_MDT_LOADER=y
 CONFIG_QPNP_PBS=y
 CONFIG_QCOM_QMI_HELPERS=y
diff --git a/arch/arm/configs/vendor/bengal_defconfig b/arch/arm/configs/vendor/bengal_defconfig
index 92a76a8..c588b8d 100644
--- a/arch/arm/configs/vendor/bengal_defconfig
+++ b/arch/arm/configs/vendor/bengal_defconfig
@@ -55,12 +55,13 @@
 CONFIG_ARM_PSCI=y
 CONFIG_HIGHMEM=y
 CONFIG_SECCOMP=y
-CONFIG_BUILD_ARM_APPENDED_DTB_IMAGE=y
 CONFIG_EFI=y
+CONFIG_CPU_FREQ_TIMES=y
 CONFIG_CPU_FREQ_GOV_POWERSAVE=y
 CONFIG_CPU_FREQ_GOV_USERSPACE=y
 CONFIG_CPU_FREQ_GOV_ONDEMAND=y
 CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_BOOST=y
 CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y
 CONFIG_ARM_QCOM_CPUFREQ_HW=y
 CONFIG_CPU_IDLE=y
@@ -325,6 +326,7 @@
 CONFIG_TOUCHSCREEN_ATMEL_MXT=y
 CONFIG_TOUCHSCREEN_SYNAPTICS_TCM_REFLASH=y
 CONFIG_TOUCHSCREEN_SYNAPTICS_TCM_RECOVERY=y
+CONFIG_TOUCHSCREEN_NT36XXX=y
 CONFIG_INPUT_MISC=y
 CONFIG_INPUT_QPNP_POWER_ON=y
 CONFIG_INPUT_UINPUT=y
@@ -355,12 +357,14 @@
 CONFIG_PTP_1588_CLOCK=y
 CONFIG_PINCTRL_QCOM_SPMI_PMIC=y
 CONFIG_PINCTRL_BENGAL=y
+CONFIG_PINCTRL_SCUBA=y
 CONFIG_GPIOLIB=y
 CONFIG_GPIO_SYSFS=y
 CONFIG_POWER_RESET=y
 CONFIG_POWER_RESET_QCOM=y
 CONFIG_POWER_RESET_SYSCON=y
 CONFIG_QPNP_SMB5=y
+CONFIG_QPNP_SMBLITE=y
 CONFIG_SMB1355_SLAVE_CHARGER=y
 CONFIG_QPNP_QG=y
 CONFIG_THERMAL=y
@@ -402,9 +406,7 @@
 CONFIG_V4L_PLATFORM_DRIVERS=y
 CONFIG_SOC_CAMERA=y
 CONFIG_SOC_CAMERA_PLATFORM=y
-CONFIG_V4L_TEST_DRIVERS=y
-CONFIG_VIDEO_VIM2M=y
-CONFIG_VIDEO_VICODEC=y
+CONFIG_VIDEO_V4L2_VIDEOBUF2_CORE=y
 CONFIG_DRM=y
 # CONFIG_DRM_MSM is not set
 CONFIG_BACKLIGHT_LCD_SUPPORT=y
@@ -473,6 +475,9 @@
 CONFIG_MMC_SDHCI_MSM=y
 CONFIG_NEW_LEDS=y
 CONFIG_LEDS_CLASS=y
+CONFIG_LEDS_CLASS_FLASH=y
+CONFIG_LEDS_QTI_FLASH=y
+CONFIG_LEDS_PWM=y
 CONFIG_LEDS_QTI_TRI_LED=y
 CONFIG_LEDS_QPNP_FLASH_V2=y
 CONFIG_LEDS_QPNP_VIBRATOR_LDO=y
@@ -521,6 +526,7 @@
 CONFIG_MSM_RPM_SMD=y
 CONFIG_QCOM_COMMAND_DB=y
 CONFIG_QCOM_CPUSS_DUMP=y
+CONFIG_QCOM_RUN_QUEUE_STATS=y
 CONFIG_QCOM_MDT_LOADER=y
 CONFIG_QPNP_PBS=y
 CONFIG_QCOM_QMI_HELPERS=y
@@ -694,7 +700,6 @@
 CONFIG_MEMTEST=y
 CONFIG_BUG_ON_DATA_CORRUPTION=y
 CONFIG_PANIC_ON_DATA_CORRUPTION=y
-CONFIG_PID_IN_CONTEXTIDR=y
 CONFIG_CORESIGHT=y
 CONFIG_CORESIGHT_LINK_AND_SINK_TMC=y
 CONFIG_CORESIGHT_SOURCE_ETM4X=y
diff --git a/arch/arm/include/asm/arch_timer.h b/arch/arm/include/asm/arch_timer.h
index 0a8d7bb..ed63e83 100644
--- a/arch/arm/include/asm/arch_timer.h
+++ b/arch/arm/include/asm/arch_timer.h
@@ -11,6 +11,20 @@
 #include <clocksource/arm_arch_timer.h>
 
 #ifdef CONFIG_ARM_ARCH_TIMER
+
+#ifdef CONFIG_ARM_ERRATUM_858921
+DECLARE_PER_CPU(bool, timer_erratum_858921_workaround_enabled);
+static __always_inline bool erratum_858921_workaround_enabled(void)
+{
+	return this_cpu_read(timer_erratum_858921_workaround_enabled);
+}
+#else
+static __always_inline bool erratum_858921_workaround_enabled(void)
+{
+	return false;
+}
+#endif
+
 int arch_timer_arch_init(void);
 
 /*
@@ -79,12 +93,19 @@
 	return val;
 }
 
+#define L32_BITS 0x00000000FFFFFFFF
 static inline u64 arch_counter_get_cntpct(void)
 {
 	u64 cval;
 
 	isb();
-	asm volatile("mrrc p15, 0, %Q0, %R0, c14" : "=r" (cval));
+	if (erratum_858921_workaround_enabled()) {
+		do {
+			asm volatile("mrrc p15, 0, %Q0, %R0, c14" : "=r"(cval));
+		} while ((cval & L32_BITS) == L32_BITS);
+	} else {
+		asm volatile("mrrc p15, 0, %Q0, %R0, c14" : "=r" (cval));
+	}
 	return cval;
 }
 
@@ -93,7 +114,13 @@
 	u64 cval;
 
 	isb();
-	asm volatile("mrrc p15, 1, %Q0, %R0, c14" : "=r" (cval));
+	if (erratum_858921_workaround_enabled()) {
+		do {
+			asm volatile("mrrc p15, 1, %Q0, %R0, c14" : "=r"(cval));
+		} while ((cval & L32_BITS) == L32_BITS);
+	} else {
+		asm volatile("mrrc p15, 1, %Q0, %R0, c14" : "=r" (cval));
+	}
 	return cval;
 }
 
diff --git a/arch/arm/include/asm/cputype.h b/arch/arm/include/asm/cputype.h
index 775cac3..453e3f8 100644
--- a/arch/arm/include/asm/cputype.h
+++ b/arch/arm/include/asm/cputype.h
@@ -80,6 +80,7 @@
 #define ARM_CPU_PART_CORTEX_A72		0x4100d080
 #define ARM_CPU_PART_CORTEX_A73		0x4100d090
 #define ARM_CPU_PART_CORTEX_A75		0x4100d0a0
+#define QCOM_CPU_PART_KRYO2XX_GOLD	0x51008000
 #define ARM_CPU_PART_MASK		0xff00fff0
 
 /* Broadcom implemented processors */
diff --git a/arch/arm/kvm/Kconfig b/arch/arm/kvm/Kconfig
index e2bd35b..c09fcc0 100644
--- a/arch/arm/kvm/Kconfig
+++ b/arch/arm/kvm/Kconfig
@@ -22,7 +22,6 @@
 	bool "Kernel-based Virtual Machine (KVM) support"
 	depends on MMU && OF
 	select PREEMPT_NOTIFIERS
-	select ANON_INODES
 	select ARM_GIC
 	select ARM_GIC_V3
 	select ARM_GIC_V3_ITS
diff --git a/arch/arm/lib/Makefile b/arch/arm/lib/Makefile
index 0bff017..93fcf1a 100644
--- a/arch/arm/lib/Makefile
+++ b/arch/arm/lib/Makefile
@@ -5,7 +5,7 @@
 # Copyright (C) 1995-2000 Russell King
 #
 
-lib-y		:= backtrace.o changebit.o csumipv6.o csumpartial.o   \
+lib-y		:= changebit.o csumipv6.o csumpartial.o               \
 		   csumpartialcopy.o csumpartialcopyuser.o clearbit.o \
 		   delay.o delay-loop.o findbit.o memchr.o memcpy.o   \
 		   memmove.o memset.o setbit.o                        \
@@ -19,6 +19,12 @@
 mmu-y		:= clear_user.o copy_page.o getuser.o putuser.o       \
 		   copy_from_user.o copy_to_user.o
 
+ifdef CONFIG_CC_IS_CLANG
+  lib-y	+= backtrace-clang.o
+else
+  lib-y	+= backtrace.o
+endif
+
 # using lib_ here won't override already available weak symbols
 obj-$(CONFIG_UACCESS_WITH_MEMCPY) += uaccess_with_memcpy.o
 
diff --git a/arch/arm/lib/backtrace-clang.S b/arch/arm/lib/backtrace-clang.S
new file mode 100644
index 0000000..2ff3751
--- /dev/null
+++ b/arch/arm/lib/backtrace-clang.S
@@ -0,0 +1,217 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ *  linux/arch/arm/lib/backtrace-clang.S
+ *
+ *  Copyright (C) 2019 Nathan Huckleberry
+ *
+ */
+#include <linux/kern_levels.h>
+#include <linux/linkage.h>
+#include <asm/assembler.h>
+		.text
+
+/* fp is 0 or stack frame */
+
+#define frame	r4
+#define sv_fp	r5
+#define sv_pc	r6
+#define mask	r7
+#define sv_lr	r8
+
+ENTRY(c_backtrace)
+
+#if !defined(CONFIG_FRAME_POINTER) || !defined(CONFIG_PRINTK)
+		ret	lr
+ENDPROC(c_backtrace)
+#else
+
+
+/*
+ * Clang does not store pc or sp in function prologues so we don't know exactly
+ * where the function starts.
+ *
+ * We can treat the current frame's lr as the saved pc and the preceding
+ * frame's lr as the current frame's lr, but we can't trace the most recent
+ * call.  Inserting a false stack frame allows us to reference the function
+ * called last in the stacktrace.
+ *
+ * If the call instruction was a bl we can look at the callers branch
+ * instruction to calculate the saved pc.  We can recover the pc in most cases,
+ * but in cases such as calling function pointers we cannot. In this case,
+ * default to using the lr. This will be some address in the function, but will
+ * not be the function start.
+ *
+ * Unfortunately due to the stack frame layout we can't dump r0 - r3, but these
+ * are less frequently saved.
+ *
+ * Stack frame layout:
+ * 		<larger addresses>
+ * 		saved lr
+ * 	frame=> saved fp
+ * 		optionally saved caller registers (r4 - r10)
+ * 		optionally saved arguments (r0 - r3)
+ * 		<top of stack frame>
+ * 		<smaller addresses>
+ *
+ * Functions start with the following code sequence:
+ * corrected pc =>  stmfd sp!, {..., fp, lr}
+ *		add fp, sp, #x
+ *		stmfd sp!, {r0 - r3} (optional)
+ *
+ *
+ *
+ *
+ *
+ *
+ * The diagram below shows an example stack setup for dump_stack.
+ *
+ * The frame for c_backtrace has pointers to the code of dump_stack. This is
+ * why the frame of c_backtrace is used to for the pc calculation of
+ * dump_stack. This is why we must move back a frame to print dump_stack.
+ *
+ * The stored locals for dump_stack are in dump_stack's frame. This means that
+ * to fully print dump_stack's frame we need both the frame for dump_stack (for
+ * locals) and the frame that was called by dump_stack (for pc).
+ *
+ * To print locals we must know where the function start is. If we read the
+ * function prologue opcodes we can determine which variables are stored in the
+ * stack frame.
+ *
+ * To find the function start of dump_stack we can look at the stored LR of
+ * show_stack. It points at the instruction directly after the bl dump_stack.
+ * We can then read the offset from the bl opcode to determine where the branch
+ * takes us.  The address calculated must be the start of dump_stack.
+ *
+ * c_backtrace frame           dump_stack:
+ * {[LR]    }  ============|   ...
+ * {[FP]    }  =======|    |   bl c_backtrace
+ *                    |    |=> ...
+ * {[R4-R10]}         |
+ * {[R0-R3] }         |        show_stack:
+ * dump_stack frame   |        ...
+ * {[LR]    } =============|   bl dump_stack
+ * {[FP]    } <=======|    |=> ...
+ * {[R4-R10]}
+ * {[R0-R3] }
+ */
+
+		stmfd	sp!, {r4 - r9, fp, lr}	@ Save an extra register
+						@ to ensure 8 byte alignment
+		movs	frame, r0		@ if frame pointer is zero
+		beq	no_frame		@ we have no stack frames
+		tst	r1, #0x10		@ 26 or 32-bit mode?
+		moveq	mask, #0xfc000003
+		movne	mask, #0		@ mask for 32-bit
+
+/*
+ * Switches the current frame to be the frame for dump_stack.
+ */
+		add	frame, sp, #24		@ switch to false frame
+for_each_frame:	tst	frame, mask		@ Check for address exceptions
+		bne	no_frame
+
+/*
+ * sv_fp is the stack frame with the locals for the current considered
+ * function.
+ *
+ * sv_pc is the saved lr frame the frame above. This is a pointer to a code
+ * address within the current considered function, but it is not the function
+ * start. This value gets updated to be the function start later if it is
+ * possible.
+ */
+1001:		ldr	sv_pc, [frame, #4]	@ get saved 'pc'
+1002:		ldr	sv_fp, [frame, #0]	@ get saved fp
+
+		teq	sv_fp, mask		@ make sure next frame exists
+		beq	no_frame
+
+/*
+ * sv_lr is the lr from the function that called the current function. This is
+ * a pointer to a code address in the current function's caller.  sv_lr-4 is
+ * the instruction used to call the current function.
+ *
+ * This sv_lr can be used to calculate the function start if the function was
+ * called using a bl instruction. If the function start can be recovered sv_pc
+ * is overwritten with the function start.
+ *
+ * If the current function was called using a function pointer we cannot
+ * recover the function start and instead continue with sv_pc as an arbitrary
+ * value within the current function. If this is the case we cannot print
+ * registers for the current function, but the stacktrace is still printed
+ * properly.
+ */
+1003:		ldr	sv_lr, [sv_fp, #4]	@ get saved lr from next frame
+
+		ldr	r0, [sv_lr, #-4]	@ get call instruction
+		ldr	r3, .Lopcode+4
+		and	r2, r3, r0		@ is this a bl call
+		teq	r2, r3
+		bne	finished_setup		@ give up if it's not
+		and	r0, #0xffffff		@ get call offset 24-bit int
+		lsl	r0, r0, #8		@ sign extend offset
+		asr	r0, r0, #8
+		ldr	sv_pc, [sv_fp, #4]	@ get lr address
+		add	sv_pc, sv_pc, #-4	@ get call instruction address
+		add	sv_pc, sv_pc, #8	@ take care of prefetch
+		add	sv_pc, sv_pc, r0, lsl #2@ find function start
+
+finished_setup:
+
+		bic	sv_pc, sv_pc, mask	@ mask PC/LR for the mode
+
+/*
+ * Print the function (sv_pc) and where it was called from (sv_lr).
+ */
+1004:		mov	r0, sv_pc
+
+		mov	r1, sv_lr
+		mov	r2, frame
+		bic	r1, r1, mask		@ mask PC/LR for the mode
+		bl	dump_backtrace_entry
+
+/*
+ * Test if the function start is a stmfd instruction to determine which
+ * registers were stored in the function prologue.
+ *
+ * If we could not recover the sv_pc because we were called through a function
+ * pointer the comparison will fail and no registers will print. Unwinding will
+ * continue as if there had been no registers stored in this frame.
+ */
+1005:		ldr	r1, [sv_pc, #0]		@ if stmfd sp!, {..., fp, lr}
+		ldr	r3, .Lopcode		@ instruction exists,
+		teq	r3, r1, lsr #11
+		ldr	r0, [frame]		@ locals are stored in
+						@ the preceding frame
+		subeq	r0, r0, #4
+		bleq	dump_backtrace_stm	@ dump saved registers
+
+/*
+ * If we are out of frames or if the next frame is invalid.
+ */
+		teq	sv_fp, #0		@ zero saved fp means
+		beq	no_frame		@ no further frames
+
+		cmp	sv_fp, frame		@ next frame must be
+		mov	frame, sv_fp		@ above the current frame
+		bhi	for_each_frame
+
+1006:		adr	r0, .Lbad
+		mov	r1, frame
+		bl	printk
+no_frame:	ldmfd	sp!, {r4 - r9, fp, pc}
+ENDPROC(c_backtrace)
+		.pushsection __ex_table,"a"
+		.align	3
+		.long	1001b, 1006b
+		.long	1002b, 1006b
+		.long	1003b, 1006b
+		.long	1004b, 1006b
+		.long   1005b, 1006b
+		.popsection
+
+.Lbad:		.asciz	"Backtrace aborted due to bad frame pointer <%p>\n"
+		.align
+.Lopcode:	.word	0xe92d4800 >> 11	@ stmfd sp!, {... fp, lr}
+		.word	0x0b000000		@ bl if these bits are set
+
+#endif
diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
index 92c3199..98503d5 100644
--- a/arch/arm/mm/dma-mapping.c
+++ b/arch/arm/mm/dma-mapping.c
@@ -2696,7 +2696,6 @@
 		return false;
 	}
 
-	kref_get(&mapping->kref);
 	to_dma_iommu_mapping(dev) = mapping;
 
 	return true;
@@ -2711,12 +2710,13 @@
 	if (!mapping)
 		return;
 
+	iommu_domain_get_attr(mapping->domain, DOMAIN_ATTR_S1_BYPASS,
+			&s1_bypass);
+
 	kref_put(&mapping->kref, arm_iommu_dma_release_mapping);
 	to_dma_iommu_mapping(dev) = NULL;
 
 	/* Let arch_setup_dma_ops() start again from scratch upon re-probe */
-	iommu_domain_get_attr(mapping->domain, DOMAIN_ATTR_S1_BYPASS,
-			&s1_bypass);
 	if (!s1_bypass)
 		set_dma_ops(dev, NULL);
 
diff --git a/arch/arm/tools/syscall.tbl b/arch/arm/tools/syscall.tbl
index 8edf93b..717426d 100644
--- a/arch/arm/tools/syscall.tbl
+++ b/arch/arm/tools/syscall.tbl
@@ -414,3 +414,5 @@
 397	common	statx			sys_statx
 398	common	rseq			sys_rseq
 399	common	io_pgetevents		sys_io_pgetevents
+424	common  pidfd_send_signal	sys_pidfd_send_signal
+434	common	pidfd_open		sys_pidfd_open
diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
index e8c8e63..73dd48a 100644
--- a/arch/arm64/Kconfig
+++ b/arch/arm64/Kconfig
@@ -58,6 +58,8 @@
 	select ARCH_USE_QUEUED_SPINLOCKS
 	select ARCH_SUPPORTS_MEMORY_FAILURE
 	select ARCH_SUPPORTS_LTO_CLANG
+	select ARCH_SUPPORTS_THINLTO
+	select ARCH_SUPPORTS_SHADOW_CALL_STACK if CC_HAVE_SHADOW_CALL_STACK
 	select ARCH_SUPPORTS_ATOMIC_RMW
 	select ARCH_SUPPORTS_INT128 if GCC_VERSION >= 50000 || CC_IS_CLANG
 	select ARCH_SUPPORTS_NUMA_BALANCING
@@ -107,6 +109,7 @@
 	select HAVE_ARCH_HUGE_VMAP
 	select HAVE_ARCH_JUMP_LABEL
 	select HAVE_ARCH_KASAN if !(ARM64_16K_PAGES && ARM64_VA_BITS_48)
+	select HAVE_ARCH_KASAN_SW_TAGS if HAVE_ARCH_KASAN
 	select HAVE_ARCH_KGDB
 	select HAVE_ARCH_MMAP_RND_BITS
 	select HAVE_ARCH_MMAP_RND_COMPAT_BITS if COMPAT
@@ -130,7 +133,7 @@
 	select HAVE_EFFICIENT_UNALIGNED_ACCESS
 	select HAVE_FTRACE_MCOUNT_RECORD
 	select HAVE_FUNCTION_TRACER
-	select HAVE_FUNCTION_GRAPH_TRACER
+	select HAVE_FUNCTION_GRAPH_TRACER if !SHADOW_CALL_STACK
 	select HAVE_GCC_PLUGINS
 	select HAVE_GENERIC_DMA_COHERENT
 	select HAVE_HW_BREAKPOINT if PERF_EVENTS
@@ -916,6 +919,10 @@
 	def_bool y
 	depends on MEMORY_HOTPLUG
 
+# Supported by clang >= 7.0
+config CC_HAVE_SHADOW_CALL_STACK
+	def_bool $(cc-option, -fsanitize=shadow-call-stack -ffixed-x18)
+
 config SECCOMP
 	bool "Enable seccomp to safely compute untrusted bytecode"
 	---help---
@@ -1072,6 +1079,15 @@
 
 	  If unsure, say N.
 
+config ARM64_TAGGED_ADDR_ABI
+	bool "Enable the tagged user addresses syscall ABI"
+	default y
+	help
+	  When this option is enabled, user applications can opt in to a
+	  relaxed ABI via prctl() allowing tagged addresses to be passed
+	  to system calls as pointer arguments. For details, see
+	  Documentation/arm64/tagged-address-abi.rst.
+
 menuconfig ARMV8_DEPRECATED
 	bool "Emulate deprecated/obsolete ARMv8 instructions"
 	depends on COMPAT
@@ -1303,6 +1319,7 @@
 
 config RELOCATABLE
 	bool
+	select ARCH_HAS_RELR
 	help
 	  This builds the kernel as a Position Independent Executable (PIE),
 	  which retains all relocation metadata required to relocate the
diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile
index d06b9f6..c0ad858 100644
--- a/arch/arm64/Makefile
+++ b/arch/arm64/Makefile
@@ -62,6 +62,10 @@
 KBUILD_CFLAGS	+= $(call cc-option,-mabi=lp64)
 KBUILD_AFLAGS	+= $(call cc-option,-mabi=lp64)
 
+ifeq ($(CONFIG_SHADOW_CALL_STACK), y)
+KBUILD_CFLAGS	+= -ffixed-x18
+endif
+
 ifeq ($(CONFIG_CPU_BIG_ENDIAN), y)
 KBUILD_CPPFLAGS	+= -mbig-endian
 CHECKFLAGS	+= -D__AARCH64EB__
@@ -97,10 +101,19 @@
 TEXT_OFFSET := 0x00080000
 endif
 
+ifeq ($(CONFIG_KASAN_SW_TAGS), y)
+KASAN_SHADOW_SCALE_SHIFT := 4
+else
+KASAN_SHADOW_SCALE_SHIFT := 3
+endif
+
+KBUILD_CFLAGS += -DKASAN_SHADOW_SCALE_SHIFT=$(KASAN_SHADOW_SCALE_SHIFT)
+KBUILD_CPPFLAGS += -DKASAN_SHADOW_SCALE_SHIFT=$(KASAN_SHADOW_SCALE_SHIFT)
+KBUILD_AFLAGS += -DKASAN_SHADOW_SCALE_SHIFT=$(KASAN_SHADOW_SCALE_SHIFT)
+
 # KASAN_SHADOW_OFFSET = VA_START + (1 << (VA_BITS - KASAN_SHADOW_SCALE_SHIFT))
 #				 - (1 << (64 - KASAN_SHADOW_SCALE_SHIFT))
 # in 32-bit arithmetic
-KASAN_SHADOW_SCALE_SHIFT := 3
 KASAN_SHADOW_OFFSET := $(shell printf "0x%08x00000000\n" $$(( \
 	(0xffffffff & (-1 << ($(CONFIG_ARM64_VA_BITS) - 32))) \
 	+ (1 << ($(CONFIG_ARM64_VA_BITS) - 32 - $(KASAN_SHADOW_SCALE_SHIFT))) \
diff --git a/arch/arm64/configs/cuttlefish_defconfig b/arch/arm64/configs/gki_defconfig
similarity index 72%
rename from arch/arm64/configs/cuttlefish_defconfig
rename to arch/arm64/configs/gki_defconfig
index 22789da..62b98ef 100644
--- a/arch/arm64/configs/cuttlefish_defconfig
+++ b/arch/arm64/configs/gki_defconfig
@@ -3,18 +3,18 @@
 CONFIG_HIGH_RES_TIMERS=y
 CONFIG_PREEMPT=y
 CONFIG_TASKSTATS=y
-CONFIG_TASK_DELAY_ACCT=y
 CONFIG_TASK_XACCT=y
 CONFIG_TASK_IO_ACCOUNTING=y
 CONFIG_PSI=y
 CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
+CONFIG_IKHEADERS=m
 CONFIG_MEMCG=y
 CONFIG_MEMCG_SWAP=y
+CONFIG_BLK_CGROUP=y
 CONFIG_RT_GROUP_SCHED=y
 CONFIG_CGROUP_FREEZER=y
 CONFIG_CPUSETS=y
-# CONFIG_PROC_PID_CPUSET is not set
 CONFIG_CGROUP_CPUACCT=y
 CONFIG_CGROUP_BPF=y
 CONFIG_SCHED_AUTOGROUP=y
@@ -25,7 +25,6 @@
 # CONFIG_RD_XZ is not set
 # CONFIG_RD_LZO is not set
 # CONFIG_RD_LZ4 is not set
-CONFIG_SGETMASK_SYSCALL=y
 # CONFIG_SYSFS_SYSCALL is not set
 # CONFIG_FHANDLE is not set
 CONFIG_KALLSYMS_ALL=y
@@ -36,10 +35,16 @@
 # CONFIG_VM_EVENT_COUNTERS is not set
 # CONFIG_COMPAT_BRK is not set
 # CONFIG_SLAB_MERGE_DEFAULT is not set
+CONFIG_SLAB_FREELIST_RANDOM=y
+CONFIG_SLAB_FREELIST_HARDENED=y
 CONFIG_PROFILING=y
+CONFIG_ARCH_HISI=y
+CONFIG_ARCH_QCOM=y
 CONFIG_PCI=y
 CONFIG_PCI_HOST_GENERIC=y
-CONFIG_HZ_100=y
+CONFIG_PCIE_KIRIN=y
+CONFIG_SCHED_MC=y
+CONFIG_NR_CPUS=32
 CONFIG_SECCOMP=y
 CONFIG_PARAVIRT=y
 CONFIG_ARMV8_DEPRECATED=y
@@ -48,12 +53,8 @@
 CONFIG_SETEND_EMULATION=y
 CONFIG_ARM64_SW_TTBR0_PAN=y
 CONFIG_RANDOMIZE_BASE=y
-# CONFIG_EFI is not set
+# CONFIG_DMI is not set
 CONFIG_COMPAT=y
-CONFIG_PM_WAKELOCKS=y
-CONFIG_PM_WAKELOCKS_LIMIT=0
-# CONFIG_PM_WAKELOCKS_GC is not set
-CONFIG_PM_DEBUG=y
 CONFIG_ENERGY_MODEL=y
 CONFIG_CPU_IDLE=y
 CONFIG_ARM_CPUIDLE=y
@@ -62,24 +63,29 @@
 CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y
 CONFIG_CPU_FREQ_GOV_POWERSAVE=y
 CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
-CONFIG_CPUFREQ_DT=y
-CONFIG_ARM_BIG_LITTLE_CPUFREQ=y
-CONFIG_ARM_DT_BL_CPUFREQ=y
+CONFIG_CPUFREQ_DUMMY=m
 CONFIG_ARM_SCPI_CPUFREQ=y
 CONFIG_ARM_SCMI_CPUFREQ=y
 CONFIG_ARM_SCMI_PROTOCOL=y
 # CONFIG_ARM_SCMI_POWER_DOMAIN is not set
 CONFIG_ARM_SCPI_PROTOCOL=y
 # CONFIG_ARM_SCPI_POWER_DOMAIN is not set
+# CONFIG_EFI_ARMSTUB_DTB_LOADER is not set
+CONFIG_ARM64_CRYPTO=y
+CONFIG_CRYPTO_SHA2_ARM64_CE=y
+CONFIG_CRYPTO_AES_ARM64_CE_BLK=y
 CONFIG_KPROBES=y
 CONFIG_LTO_CLANG=y
 CONFIG_CFI_CLANG=y
+CONFIG_SHADOW_CALL_STACK=y
 CONFIG_MODULES=y
 CONFIG_MODULE_UNLOAD=y
 CONFIG_MODVERSIONS=y
+CONFIG_GKI_HACKS_TO_FIX=y
 # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
-# CONFIG_SPARSEMEM_VMEMMAP is not set
-CONFIG_KSM=y
+CONFIG_BINFMT_MISC=m
+CONFIG_CMA=y
+CONFIG_CMA_AREAS=16
 CONFIG_ZSMALLOC=y
 CONFIG_NET=y
 CONFIG_PACKET=y
@@ -95,13 +101,8 @@
 CONFIG_NET_IPGRE_DEMUX=y
 CONFIG_NET_IPVTI=y
 CONFIG_INET_ESP=y
-# CONFIG_INET_XFRM_MODE_BEET is not set
 CONFIG_INET_UDP_DIAG=y
 CONFIG_INET_DIAG_DESTROY=y
-CONFIG_TCP_CONG_ADVANCED=y
-# CONFIG_TCP_CONG_BIC is not set
-# CONFIG_TCP_CONG_WESTWOOD is not set
-# CONFIG_TCP_CONG_HTCP is not set
 CONFIG_IPV6_ROUTER_PREF=y
 CONFIG_IPV6_ROUTE_INFO=y
 CONFIG_IPV6_OPTIMISTIC_DAD=y
@@ -111,6 +112,7 @@
 CONFIG_IPV6_VTI=y
 CONFIG_IPV6_MULTIPLE_TABLES=y
 CONFIG_NETFILTER=y
+# CONFIG_BRIDGE_NETFILTER is not set
 CONFIG_NF_CONNTRACK=y
 CONFIG_NF_CONNTRACK_SECMARK=y
 CONFIG_NF_CONNTRACK_EVENTS=y
@@ -179,19 +181,23 @@
 CONFIG_IP6_NF_TARGET_REJECT=y
 CONFIG_IP6_NF_MANGLE=y
 CONFIG_IP6_NF_RAW=y
+CONFIG_TIPC=y
 CONFIG_L2TP=y
+CONFIG_BRIDGE=y
 CONFIG_NET_SCHED=y
 CONFIG_NET_SCH_HTB=y
-CONFIG_NET_SCH_NETEM=y
 CONFIG_NET_SCH_INGRESS=y
 CONFIG_NET_CLS_U32=y
 CONFIG_NET_CLS_BPF=y
 CONFIG_NET_EMATCH=y
 CONFIG_NET_EMATCH_U32=y
 CONFIG_NET_CLS_ACT=y
-CONFIG_VSOCKETS=y
-CONFIG_VIRTIO_VSOCKETS=y
+CONFIG_VSOCKETS=m
+CONFIG_VIRTIO_VSOCKETS=m
 CONFIG_BPF_JIT=y
+CONFIG_CAN=m
+CONFIG_CAN_VCAN=m
+CONFIG_BT=y
 CONFIG_CFG80211=y
 # CONFIG_CFG80211_DEFAULT_PS is not set
 # CONFIG_CFG80211_CRDA_SUPPORT is not set
@@ -199,33 +205,35 @@
 # CONFIG_MAC80211_RC_MINSTREL is not set
 CONFIG_RFKILL=y
 # CONFIG_UEVENT_HELPER is not set
+# CONFIG_FW_CACHE is not set
 # CONFIG_ALLOW_DEV_COREDUMP is not set
 CONFIG_DEBUG_DEVRES=y
-CONFIG_OF_UNITTEST=y
+CONFIG_DMA_CMA=y
+CONFIG_GNSS=y
+CONFIG_GNSS_CMDLINE_SERIAL=m
 CONFIG_ZRAM=y
 CONFIG_BLK_DEV_LOOP=y
 CONFIG_BLK_DEV_RAM=y
 CONFIG_BLK_DEV_RAM_SIZE=8192
-CONFIG_VIRTIO_BLK=y
+CONFIG_VIRTIO_BLK=m
 CONFIG_UID_SYS_STATS=y
 CONFIG_SCSI=y
-# CONFIG_SCSI_MQ_DEFAULT is not set
 # CONFIG_SCSI_PROC_FS is not set
 CONFIG_BLK_DEV_SD=y
-CONFIG_SCSI_VIRTIO=y
+CONFIG_SCSI_UFSHCD=y
+CONFIG_SCSI_UFSHCD_PLATFORM=y
 CONFIG_MD=y
 CONFIG_BLK_DEV_DM=y
 CONFIG_DM_CRYPT=y
+CONFIG_DM_SNAPSHOT=y
 CONFIG_DM_UEVENT=y
 CONFIG_DM_VERITY=y
 CONFIG_DM_VERITY_AVB=y
 CONFIG_DM_VERITY_FEC=y
 CONFIG_DM_BOW=y
 CONFIG_NETDEVICES=y
-CONFIG_NETCONSOLE=y
-CONFIG_NETCONSOLE_DYNAMIC=y
 CONFIG_TUN=y
-CONFIG_VIRTIO_NET=y
+CONFIG_VIRTIO_NET=m
 # CONFIG_ETHERNET is not set
 CONFIG_PHYLIB=y
 CONFIG_PPP=y
@@ -259,20 +267,12 @@
 # CONFIG_WLAN_VENDOR_TI is not set
 # CONFIG_WLAN_VENDOR_ZYDAS is not set
 # CONFIG_WLAN_VENDOR_QUANTENNA is not set
-CONFIG_VIRT_WIFI=y
+CONFIG_VIRT_WIFI=m
+CONFIG_INPUT_FF_MEMLESS=y
 CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_KEYBOARD is not set
+CONFIG_KEYBOARD_GPIO=y
 # CONFIG_INPUT_MOUSE is not set
 CONFIG_INPUT_JOYSTICK=y
-CONFIG_JOYSTICK_XPAD=y
-CONFIG_JOYSTICK_XPAD_FF=y
-CONFIG_JOYSTICK_XPAD_LEDS=y
-CONFIG_INPUT_TABLET=y
-CONFIG_TABLET_USB_ACECAD=y
-CONFIG_TABLET_USB_AIPTEK=y
-CONFIG_TABLET_USB_GTCO=y
-CONFIG_TABLET_USB_HANWANG=y
-CONFIG_TABLET_USB_KBTAB=y
 CONFIG_INPUT_MISC=y
 CONFIG_INPUT_UINPUT=y
 # CONFIG_VT is not set
@@ -282,117 +282,86 @@
 # CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set
 CONFIG_SERIAL_8250_CONSOLE=y
 # CONFIG_SERIAL_8250_EXAR is not set
-CONFIG_SERIAL_8250_NR_UARTS=48
-CONFIG_SERIAL_8250_EXTENDED=y
-CONFIG_SERIAL_8250_MANY_PORTS=y
-CONFIG_SERIAL_8250_SHARE_IRQ=y
-CONFIG_SERIAL_OF_PLATFORM=y
+CONFIG_SERIAL_OF_PLATFORM=m
 CONFIG_SERIAL_AMBA_PL011=y
 CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
-CONFIG_VIRTIO_CONSOLE=y
+CONFIG_SERIAL_DEV_BUS=y
+CONFIG_VIRTIO_CONSOLE=m
 CONFIG_HW_RANDOM=y
-CONFIG_HW_RANDOM_VIRTIO=y
+CONFIG_HW_RANDOM_VIRTIO=m
 # CONFIG_HW_RANDOM_CAVIUM is not set
 # CONFIG_DEVPORT is not set
 # CONFIG_I2C_COMPAT is not set
 # CONFIG_I2C_HELPER_AUTO is not set
+CONFIG_SPI=y
+CONFIG_SPMI=y
+CONFIG_PINCTRL_AMD=y
+CONFIG_POWER_AVS=y
+CONFIG_POWER_RESET_HISI=y
 # CONFIG_HWMON is not set
 CONFIG_THERMAL=y
+CONFIG_THERMAL_GOV_USER_SPACE=y
 CONFIG_CPU_THERMAL=y
+CONFIG_DEVFREQ_THERMAL=y
+CONFIG_WATCHDOG=y
+CONFIG_MFD_ACT8945A=y
+CONFIG_MFD_SYSCON=y
+CONFIG_REGULATOR_FIXED_VOLTAGE=y
 CONFIG_MEDIA_SUPPORT=y
+CONFIG_MEDIA_CAMERA_SUPPORT=y
+CONFIG_MEDIA_CONTROLLER=y
 # CONFIG_VGA_ARB is not set
 CONFIG_DRM=y
 # CONFIG_DRM_FBDEV_EMULATION is not set
-CONFIG_DRM_VIRTIO_GPU=y
+CONFIG_DRM_VIRTIO_GPU=m
 CONFIG_SOUND=y
 CONFIG_SND=y
 CONFIG_SND_HRTIMER=y
+CONFIG_SND_DYNAMIC_MINORS=y
 # CONFIG_SND_SUPPORT_OLD_API is not set
 # CONFIG_SND_VERBOSE_PROCFS is not set
 # CONFIG_SND_DRIVERS is not set
 CONFIG_SND_INTEL8X0=y
-# CONFIG_SND_USB is not set
+CONFIG_SND_USB_AUDIO=y
+CONFIG_SND_SOC=y
 CONFIG_HIDRAW=y
 CONFIG_UHID=y
-CONFIG_HID_A4TECH=y
-CONFIG_HID_ACRUX=y
-CONFIG_HID_ACRUX_FF=y
 CONFIG_HID_APPLE=y
-CONFIG_HID_BELKIN=y
-CONFIG_HID_CHERRY=y
-CONFIG_HID_CHICONY=y
-CONFIG_HID_PRODIKEYS=y
-CONFIG_HID_CYPRESS=y
-CONFIG_HID_DRAGONRISE=y
-CONFIG_DRAGONRISE_FF=y
-CONFIG_HID_EMS_FF=y
 CONFIG_HID_ELECOM=y
-CONFIG_HID_EZKEY=y
-CONFIG_HID_HOLTEK=y
-CONFIG_HID_KEYTOUCH=y
-CONFIG_HID_KYE=y
-CONFIG_HID_UCLOGIC=y
-CONFIG_HID_WALTOP=y
-CONFIG_HID_GYRATION=y
-CONFIG_HID_TWINHAN=y
-CONFIG_HID_KENSINGTON=y
-CONFIG_HID_LCPOWER=y
-CONFIG_HID_LOGITECH=y
-CONFIG_HID_LOGITECH_DJ=y
-CONFIG_LOGITECH_FF=y
-CONFIG_LOGIRUMBLEPAD2_FF=y
-CONFIG_LOGIG940_FF=y
 CONFIG_HID_MAGICMOUSE=y
 CONFIG_HID_MICROSOFT=y
-CONFIG_HID_MONTEREY=y
 CONFIG_HID_MULTITOUCH=y
-CONFIG_HID_NTRIG=y
-CONFIG_HID_ORTEK=y
-CONFIG_HID_PANTHERLORD=y
-CONFIG_PANTHERLORD_FF=y
-CONFIG_HID_PETALYNX=y
-CONFIG_HID_PICOLCD=y
-CONFIG_HID_PRIMAX=y
-CONFIG_HID_ROCCAT=y
-CONFIG_HID_SAITEK=y
-CONFIG_HID_SAMSUNG=y
-CONFIG_HID_SONY=y
-CONFIG_HID_SPEEDLINK=y
-CONFIG_HID_SUNPLUS=y
-CONFIG_HID_GREENASIA=y
-CONFIG_GREENASIA_FF=y
-CONFIG_HID_SMARTJOYPLUS=y
-CONFIG_SMARTJOYPLUS_FF=y
-CONFIG_HID_TIVO=y
-CONFIG_HID_TOPSEED=y
-CONFIG_HID_THRUSTMASTER=y
-CONFIG_HID_WACOM=y
-CONFIG_HID_WIIMOTE=y
-CONFIG_HID_ZEROPLUS=y
-CONFIG_HID_ZYDACRON=y
 CONFIG_USB_HIDDEV=y
-CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
-CONFIG_USB_EHCI_HCD=y
+CONFIG_USB=y
+CONFIG_USB_OTG=y
 CONFIG_USB_GADGET=y
+CONFIG_USB_DUMMY_HCD=m
 CONFIG_USB_CONFIGFS=y
 CONFIG_USB_CONFIGFS_UEVENT=y
 CONFIG_USB_CONFIGFS_F_FS=y
 CONFIG_USB_CONFIGFS_F_ACC=y
 CONFIG_USB_CONFIGFS_F_AUDIO_SRC=y
 CONFIG_USB_CONFIGFS_F_MIDI=y
-CONFIG_MMC=y
+CONFIG_MMC=m
 # CONFIG_PWRSEQ_EMMC is not set
 # CONFIG_PWRSEQ_SIMPLE is not set
-# CONFIG_MMC_BLOCK is not set
+CONFIG_MMC_SDHCI=m
+CONFIG_MMC_SDHCI_PLTFM=m
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_EDAC=y
 CONFIG_RTC_CLASS=y
 # CONFIG_RTC_SYSTOHC is not set
+CONFIG_RTC_DRV_TEST=m
 CONFIG_RTC_DRV_PL030=y
 CONFIG_RTC_DRV_PL031=y
-CONFIG_VIRTIO_PCI=y
+CONFIG_DMADEVICES=y
+CONFIG_UIO=y
+CONFIG_VIRTIO_PCI=m
 # CONFIG_VIRTIO_PCI_LEGACY is not set
-CONFIG_VIRTIO_BALLOON=y
-CONFIG_VIRTIO_INPUT=y
-CONFIG_VIRTIO_MMIO=y
+CONFIG_VIRTIO_INPUT=m
+CONFIG_VIRTIO_MMIO=m
 CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
 CONFIG_STAGING=y
 CONFIG_ASHMEM=y
@@ -401,17 +370,30 @@
 CONFIG_ION_SYSTEM_HEAP=y
 CONFIG_COMMON_CLK_SCPI=y
 # CONFIG_COMMON_CLK_XGENE is not set
+CONFIG_HWSPINLOCK=y
 CONFIG_MAILBOX=y
-# CONFIG_IOMMU_SUPPORT is not set
+CONFIG_ARM_SMMU=y
+CONFIG_QCOM_COMMAND_DB=y
+CONFIG_QCOM_RPMH=y
+CONFIG_DEVFREQ_GOV_PERFORMANCE=y
+CONFIG_DEVFREQ_GOV_POWERSAVE=y
+CONFIG_DEVFREQ_GOV_USERSPACE=y
+CONFIG_DEVFREQ_GOV_PASSIVE=y
+CONFIG_EXTCON=y
+CONFIG_IIO=y
+CONFIG_PWM=y
+CONFIG_QCOM_PDC=y
+CONFIG_GENERIC_PHY=y
+CONFIG_RAS=y
 CONFIG_ANDROID=y
 CONFIG_ANDROID_BINDER_IPC=y
-CONFIG_LEGACY_ENERGY_MODEL_DT=y
 CONFIG_EXT4_FS=y
 CONFIG_EXT4_FS_SECURITY=y
-CONFIG_EXT4_ENCRYPTION=y
 CONFIG_F2FS_FS=y
 CONFIG_F2FS_FS_SECURITY=y
-CONFIG_F2FS_FS_ENCRYPTION=y
+CONFIG_FS_ENCRYPTION=y
+CONFIG_FS_VERITY=y
+CONFIG_FS_VERITY_BUILTIN_SIGNATURES=y
 # CONFIG_DNOTIFY is not set
 CONFIG_QUOTA=y
 CONFIG_QFMT_V2=y
@@ -419,29 +401,77 @@
 CONFIG_OVERLAY_FS=y
 CONFIG_MSDOS_FS=y
 CONFIG_VFAT_FS=y
-CONFIG_TMPFS=y
 CONFIG_TMPFS_POSIX_ACL=y
+# CONFIG_EFIVAR_FS is not set
 CONFIG_SDCARD_FS=y
 CONFIG_PSTORE=y
 CONFIG_PSTORE_CONSOLE=y
 CONFIG_PSTORE_RAM=y
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=y
+CONFIG_NLS_CODEPAGE_775=y
+CONFIG_NLS_CODEPAGE_850=y
+CONFIG_NLS_CODEPAGE_852=y
+CONFIG_NLS_CODEPAGE_855=y
+CONFIG_NLS_CODEPAGE_857=y
+CONFIG_NLS_CODEPAGE_860=y
+CONFIG_NLS_CODEPAGE_861=y
+CONFIG_NLS_CODEPAGE_862=y
+CONFIG_NLS_CODEPAGE_863=y
+CONFIG_NLS_CODEPAGE_864=y
+CONFIG_NLS_CODEPAGE_865=y
+CONFIG_NLS_CODEPAGE_866=y
+CONFIG_NLS_CODEPAGE_869=y
+CONFIG_NLS_CODEPAGE_936=y
+CONFIG_NLS_CODEPAGE_950=y
+CONFIG_NLS_CODEPAGE_932=y
+CONFIG_NLS_CODEPAGE_949=y
+CONFIG_NLS_CODEPAGE_874=y
+CONFIG_NLS_ISO8859_8=y
+CONFIG_NLS_CODEPAGE_1250=y
+CONFIG_NLS_CODEPAGE_1251=y
+CONFIG_NLS_ASCII=y
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=y
+CONFIG_NLS_ISO8859_3=y
+CONFIG_NLS_ISO8859_4=y
+CONFIG_NLS_ISO8859_5=y
+CONFIG_NLS_ISO8859_6=y
+CONFIG_NLS_ISO8859_7=y
+CONFIG_NLS_ISO8859_9=y
+CONFIG_NLS_ISO8859_13=y
+CONFIG_NLS_ISO8859_14=y
+CONFIG_NLS_ISO8859_15=y
+CONFIG_NLS_KOI8_R=y
+CONFIG_NLS_KOI8_U=y
+CONFIG_NLS_MAC_ROMAN=y
+CONFIG_NLS_MAC_CELTIC=y
+CONFIG_NLS_MAC_CENTEURO=y
+CONFIG_NLS_MAC_CROATIAN=y
+CONFIG_NLS_MAC_CYRILLIC=y
+CONFIG_NLS_MAC_GAELIC=y
+CONFIG_NLS_MAC_GREEK=y
+CONFIG_NLS_MAC_ICELAND=y
+CONFIG_NLS_MAC_INUIT=y
+CONFIG_NLS_MAC_ROMANIAN=y
+CONFIG_NLS_MAC_TURKISH=y
+CONFIG_NLS_UTF8=y
 CONFIG_SECURITY_PERF_EVENTS_RESTRICT=y
 CONFIG_SECURITY=y
 CONFIG_SECURITY_NETWORK=y
-CONFIG_LSM_MMAP_MIN_ADDR=65536
 CONFIG_HARDENED_USERCOPY=y
 CONFIG_SECURITY_SELINUX=y
 CONFIG_CRYPTO_ADIANTUM=y
-CONFIG_CRYPTO_SHA512=y
+CONFIG_CRYPTO_MD4=y
 CONFIG_CRYPTO_LZ4=y
 CONFIG_CRYPTO_ZSTD=y
 CONFIG_CRYPTO_ANSI_CPRNG=y
-CONFIG_CRYPTO_DEV_VIRTIO=y
+CONFIG_CRC_CCITT=y
+CONFIG_CRC8=y
 CONFIG_XZ_DEC=y
 CONFIG_PRINTK_TIME=y
 CONFIG_DEBUG_INFO=y
 # CONFIG_ENABLE_MUST_CHECK is not set
-CONFIG_FRAME_WARN=1024
 # CONFIG_SECTION_MISMATCH_WARN_ONLY is not set
 CONFIG_MAGIC_SYSRQ=y
 CONFIG_DEBUG_STACK_USAGE=y
@@ -450,6 +480,6 @@
 # CONFIG_DETECT_HUNG_TASK is not set
 CONFIG_PANIC_TIMEOUT=5
 CONFIG_SCHEDSTATS=y
-CONFIG_RCU_CPU_STALL_TIMEOUT=60
-CONFIG_ENABLE_DEFAULT_TRACERS=y
 # CONFIG_RUNTIME_TESTING_MENU is not set
+CONFIG_CORESIGHT=y
+CONFIG_CORESIGHT_STM=y
diff --git a/arch/arm64/configs/vendor/bengal-perf_defconfig b/arch/arm64/configs/vendor/bengal-perf_defconfig
index ebfcc59..e9c3a94 100644
--- a/arch/arm64/configs/vendor/bengal-perf_defconfig
+++ b/arch/arm64/configs/vendor/bengal-perf_defconfig
@@ -50,7 +50,7 @@
 CONFIG_HOTPLUG_SIZE_BITS=29
 CONFIG_ARCH_QCOM=y
 CONFIG_ARCH_BENGAL=y
-CONFIG_PCI=y
+CONFIG_ARCH_SCUBA=y
 CONFIG_SCHED_MC=y
 CONFIG_NR_CPUS=8
 CONFIG_HZ_100=y
@@ -63,7 +63,6 @@
 CONFIG_SETEND_EMULATION=y
 # CONFIG_ARM64_VHE is not set
 CONFIG_RANDOMIZE_BASE=y
-CONFIG_BUILD_ARM64_APPENDED_DTB_IMAGE=y
 CONFIG_COMPAT=y
 CONFIG_PM_AUTOSLEEP=y
 CONFIG_PM_WAKELOCKS=y
@@ -78,6 +77,7 @@
 CONFIG_CPU_FREQ_GOV_USERSPACE=y
 CONFIG_CPU_FREQ_GOV_ONDEMAND=y
 CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_BOOST=y
 CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y
 CONFIG_ARM_QCOM_CPUFREQ_HW=y
 CONFIG_MSM_TZ_LOG=y
@@ -160,6 +160,7 @@
 CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y
 CONFIG_NETFILTER_XT_TARGET_CONNMARK=y
 CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y
+CONFIG_NETFILTER_XT_TARGET_DSCP=y
 CONFIG_NETFILTER_XT_TARGET_IDLETIMER=y
 CONFIG_NETFILTER_XT_TARGET_HARDIDLETIMER=y
 CONFIG_NETFILTER_XT_TARGET_LOG=y
@@ -277,6 +278,7 @@
 CONFIG_BLK_DEV_RAM_SIZE=8192
 CONFIG_QSEECOM=y
 CONFIG_UID_SYS_STATS=y
+CONFIG_FPR_FPC=y
 CONFIG_SCSI=y
 CONFIG_BLK_DEV_SD=y
 CONFIG_CHR_DEV_SG=y
@@ -298,7 +300,16 @@
 CONFIG_BONDING=y
 CONFIG_DUMMY=y
 CONFIG_TUN=y
+# CONFIG_NET_VENDOR_AMAZON is not set
+# CONFIG_NET_VENDOR_AURORA is not set
+# CONFIG_NET_VENDOR_EZCHIP is not set
+# CONFIG_NET_VENDOR_HISILICON is not set
+# CONFIG_NET_VENDOR_MARVELL is not set
+# CONFIG_NET_VENDOR_MELLANOX is not set
+# CONFIG_NET_VENDOR_NETRONOME is not set
 CONFIG_RMNET=y
+# CONFIG_NET_VENDOR_ROCKER is not set
+# CONFIG_NET_VENDOR_SYNOPSYS is not set
 CONFIG_PHYLIB=y
 CONFIG_PPP=y
 CONFIG_PPP_BSDCOMP=y
@@ -324,6 +335,7 @@
 CONFIG_INPUT_TOUCHSCREEN=y
 CONFIG_TOUCHSCREEN_SYNAPTICS_TCM_REFLASH=y
 CONFIG_TOUCHSCREEN_SYNAPTICS_TCM_RECOVERY=y
+CONFIG_TOUCHSCREEN_NT36XXX=y
 CONFIG_INPUT_MISC=y
 CONFIG_INPUT_QPNP_POWER_ON=y
 CONFIG_INPUT_UINPUT=y
@@ -335,8 +347,6 @@
 CONFIG_SERIAL_MSM_GENI_HALF_SAMPLING=y
 CONFIG_HW_RANDOM=y
 CONFIG_HW_RANDOM_MSM_LEGACY=y
-# CONFIG_HW_RANDOM_CAVIUM is not set
-# CONFIG_DEVPORT is not set
 CONFIG_DIAG_CHAR=y
 CONFIG_MSM_ADSPRPC=y
 CONFIG_MSM_RDBG=m
@@ -348,11 +358,13 @@
 CONFIG_SPMI=y
 CONFIG_PINCTRL_QCOM_SPMI_PMIC=y
 CONFIG_PINCTRL_BENGAL=y
+CONFIG_PINCTRL_SCUBA=y
 CONFIG_GPIO_SYSFS=y
 CONFIG_POWER_RESET_QCOM=y
 CONFIG_POWER_RESET_XGENE=y
 CONFIG_POWER_RESET_SYSCON=y
 CONFIG_QPNP_SMB5=y
+CONFIG_QPNP_SMBLITE=y
 CONFIG_SMB1355_SLAVE_CHARGER=y
 CONFIG_QPNP_QG=y
 CONFIG_THERMAL=y
@@ -395,9 +407,7 @@
 CONFIG_DVB_MPQ=m
 CONFIG_DVB_MPQ_DEMUX=m
 CONFIG_DVB_MPQ_SW=y
-CONFIG_V4L_TEST_DRIVERS=y
-CONFIG_VIDEO_VIM2M=y
-CONFIG_VIDEO_VICODEC=y
+CONFIG_VIDEO_V4L2_VIDEOBUF2_CORE=y
 CONFIG_DRM=y
 # CONFIG_DRM_MSM is not set
 CONFIG_BACKLIGHT_LCD_SUPPORT=y
@@ -408,7 +418,6 @@
 CONFIG_SOUND=y
 CONFIG_SND=y
 CONFIG_SND_DYNAMIC_MINORS=y
-# CONFIG_SND_PCI is not set
 CONFIG_SND_USB_AUDIO=y
 CONFIG_SND_USB_AUDIO_QMI=y
 CONFIG_SND_SOC=y
@@ -461,6 +470,9 @@
 CONFIG_MMC_SDHCI_MSM=y
 CONFIG_NEW_LEDS=y
 CONFIG_LEDS_CLASS=y
+CONFIG_LEDS_CLASS_FLASH=y
+CONFIG_LEDS_QTI_FLASH=y
+CONFIG_LEDS_PWM=y
 CONFIG_LEDS_QTI_TRI_LED=y
 CONFIG_LEDS_QPNP_FLASH_V2=y
 CONFIG_LEDS_QPNP_VIBRATOR_LDO=y
@@ -490,6 +502,9 @@
 CONFIG_SM_GPUCC_BENGAL=y
 CONFIG_SM_DISPCC_BENGAL=y
 CONFIG_SM_DEBUGCC_BENGAL=y
+CONFIG_QM_DISPCC_SCUBA=y
+CONFIG_QM_GPUCC_SCUBA=y
+CONFIG_QM_DEBUGCC_SCUBA=y
 CONFIG_HWSPINLOCK=y
 CONFIG_HWSPINLOCK_QCOM=y
 CONFIG_MAILBOX=y
@@ -619,7 +634,7 @@
 CONFIG_PAGE_OWNER=y
 # CONFIG_SECTION_MISMATCH_WARN_ONLY is not set
 CONFIG_MAGIC_SYSRQ=y
-CONFIG_PANIC_TIMEOUT=-1
+CONFIG_PANIC_TIMEOUT=5
 CONFIG_SCHEDSTATS=y
 # CONFIG_DEBUG_PREEMPT is not set
 CONFIG_IPC_LOGGING=y
diff --git a/arch/arm64/configs/vendor/bengal_defconfig b/arch/arm64/configs/vendor/bengal_defconfig
index 06ab3a3..649781ca 100644
--- a/arch/arm64/configs/vendor/bengal_defconfig
+++ b/arch/arm64/configs/vendor/bengal_defconfig
@@ -52,7 +52,6 @@
 CONFIG_ARCH_QCOM=y
 CONFIG_ARCH_BENGAL=y
 CONFIG_ARCH_SCUBA=y
-CONFIG_PCI=y
 CONFIG_SCHED_MC=y
 CONFIG_NR_CPUS=8
 CONFIG_HZ_100=y
@@ -66,7 +65,6 @@
 CONFIG_SETEND_EMULATION=y
 # CONFIG_ARM64_VHE is not set
 CONFIG_RANDOMIZE_BASE=y
-CONFIG_BUILD_ARM64_APPENDED_DTB_IMAGE=y
 CONFIG_COMPAT=y
 CONFIG_PM_AUTOSLEEP=y
 CONFIG_PM_WAKELOCKS=y
@@ -82,6 +80,7 @@
 CONFIG_CPU_FREQ_GOV_USERSPACE=y
 CONFIG_CPU_FREQ_GOV_ONDEMAND=y
 CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_BOOST=y
 CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y
 CONFIG_ARM_QCOM_CPUFREQ_HW=y
 CONFIG_MSM_TZ_LOG=y
@@ -168,6 +167,7 @@
 CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y
 CONFIG_NETFILTER_XT_TARGET_CONNMARK=y
 CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y
+CONFIG_NETFILTER_XT_TARGET_DSCP=y
 CONFIG_NETFILTER_XT_TARGET_IDLETIMER=y
 CONFIG_NETFILTER_XT_TARGET_HARDIDLETIMER=y
 CONFIG_NETFILTER_XT_TARGET_LOG=y
@@ -286,6 +286,7 @@
 CONFIG_BLK_DEV_RAM_SIZE=8192
 CONFIG_QSEECOM=y
 CONFIG_UID_SYS_STATS=y
+CONFIG_FPR_FPC=y
 CONFIG_SCSI=y
 CONFIG_BLK_DEV_SD=y
 CONFIG_CHR_DEV_SG=y
@@ -309,7 +310,15 @@
 CONFIG_BONDING=y
 CONFIG_DUMMY=y
 CONFIG_TUN=y
+# CONFIG_NET_VENDOR_AURORA is not set
+# CONFIG_NET_VENDOR_EZCHIP is not set
+# CONFIG_NET_VENDOR_HISILICON is not set
+# CONFIG_NET_VENDOR_MARVELL is not set
+# CONFIG_NET_VENDOR_MELLANOX is not set
+# CONFIG_NET_VENDOR_NETRONOME is not set
 CONFIG_RMNET=y
+# CONFIG_NET_VENDOR_ROCKER is not set
+# CONFIG_NET_VENDOR_SYNOPSYS is not set
 CONFIG_PHYLIB=y
 CONFIG_PPP=y
 CONFIG_PPP_BSDCOMP=y
@@ -335,6 +344,7 @@
 CONFIG_INPUT_TOUCHSCREEN=y
 CONFIG_TOUCHSCREEN_SYNAPTICS_TCM_REFLASH=y
 CONFIG_TOUCHSCREEN_SYNAPTICS_TCM_RECOVERY=y
+CONFIG_TOUCHSCREEN_NT36XXX=y
 CONFIG_INPUT_MISC=y
 CONFIG_INPUT_QPNP_POWER_ON=y
 CONFIG_INPUT_UINPUT=y
@@ -348,8 +358,6 @@
 CONFIG_TTY_PRINTK=y
 CONFIG_HW_RANDOM=y
 CONFIG_HW_RANDOM_MSM_LEGACY=y
-# CONFIG_HW_RANDOM_CAVIUM is not set
-# CONFIG_DEVPORT is not set
 CONFIG_DIAG_CHAR=y
 CONFIG_MSM_ADSPRPC=y
 CONFIG_MSM_RDBG=m
@@ -367,6 +375,7 @@
 CONFIG_POWER_RESET_XGENE=y
 CONFIG_POWER_RESET_SYSCON=y
 CONFIG_QPNP_SMB5=y
+CONFIG_QPNP_SMBLITE=y
 CONFIG_SMB1355_SLAVE_CHARGER=y
 CONFIG_QPNP_QG=y
 CONFIG_THERMAL=y
@@ -409,9 +418,7 @@
 CONFIG_DVB_MPQ=m
 CONFIG_DVB_MPQ_DEMUX=m
 CONFIG_DVB_MPQ_SW=y
-CONFIG_V4L_TEST_DRIVERS=y
-CONFIG_VIDEO_VIM2M=y
-CONFIG_VIDEO_VICODEC=y
+CONFIG_VIDEO_V4L2_VIDEOBUF2_CORE=y
 CONFIG_DRM=y
 # CONFIG_DRM_MSM is not set
 CONFIG_BACKLIGHT_LCD_SUPPORT=y
@@ -422,7 +429,6 @@
 CONFIG_SOUND=y
 CONFIG_SND=y
 CONFIG_SND_DYNAMIC_MINORS=y
-# CONFIG_SND_PCI is not set
 CONFIG_SND_USB_AUDIO=y
 CONFIG_SND_USB_AUDIO_QMI=y
 CONFIG_SND_SOC=y
@@ -476,6 +482,9 @@
 CONFIG_MMC_SDHCI_MSM=y
 CONFIG_NEW_LEDS=y
 CONFIG_LEDS_CLASS=y
+CONFIG_LEDS_CLASS_FLASH=y
+CONFIG_LEDS_QTI_FLASH=y
+CONFIG_LEDS_PWM=y
 CONFIG_LEDS_QTI_TRI_LED=y
 CONFIG_LEDS_QPNP_FLASH_V2=y
 CONFIG_LEDS_QPNP_VIBRATOR_LDO=y
@@ -510,6 +519,9 @@
 CONFIG_SM_GPUCC_BENGAL=y
 CONFIG_SM_DISPCC_BENGAL=y
 CONFIG_SM_DEBUGCC_BENGAL=y
+CONFIG_QM_DISPCC_SCUBA=y
+CONFIG_QM_GPUCC_SCUBA=y
+CONFIG_QM_DEBUGCC_SCUBA=y
 CONFIG_HWSPINLOCK=y
 CONFIG_HWSPINLOCK_QCOM=y
 CONFIG_MAILBOX=y
@@ -665,7 +677,7 @@
 CONFIG_DEBUG_MEMORY_INIT=y
 CONFIG_SOFTLOCKUP_DETECTOR=y
 CONFIG_WQ_WATCHDOG=y
-CONFIG_PANIC_TIMEOUT=-1
+CONFIG_PANIC_TIMEOUT=5
 CONFIG_PANIC_ON_SCHED_BUG=y
 CONFIG_PANIC_ON_RT_THROTTLING=y
 CONFIG_SCHEDSTATS=y
@@ -696,7 +708,6 @@
 CONFIG_MEMTEST=y
 CONFIG_BUG_ON_DATA_CORRUPTION=y
 CONFIG_PANIC_ON_DATA_CORRUPTION=y
-CONFIG_PID_IN_CONTEXTIDR=y
 CONFIG_ARM64_STRICT_BREAK_BEFORE_MAKE=y
 CONFIG_CORESIGHT=y
 CONFIG_CORESIGHT_LINK_AND_SINK_TMC=y
diff --git a/arch/arm64/configs/vendor/kona-iot-perf_defconfig b/arch/arm64/configs/vendor/kona-iot-perf_defconfig
new file mode 100644
index 0000000..d7d763d
--- /dev/null
+++ b/arch/arm64/configs/vendor/kona-iot-perf_defconfig
@@ -0,0 +1,708 @@
+CONFIG_LOCALVERSION="-perf"
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_PREEMPT=y
+CONFIG_IRQ_TIME_ACCOUNTING=y
+CONFIG_SCHED_WALT=y
+CONFIG_TASKSTATS=y
+CONFIG_TASK_XACCT=y
+CONFIG_TASK_IO_ACCOUNTING=y
+CONFIG_PSI=y
+CONFIG_RCU_EXPERT=y
+CONFIG_RCU_FAST_NO_HZ=y
+CONFIG_RCU_NOCB_CPU=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_CPU_MAX_BUF_SHIFT=17
+CONFIG_MEMCG=y
+CONFIG_MEMCG_SWAP=y
+CONFIG_BLK_CGROUP=y
+CONFIG_RT_GROUP_SCHED=y
+CONFIG_CGROUP_FREEZER=y
+CONFIG_CPUSETS=y
+CONFIG_CGROUP_CPUACCT=y
+CONFIG_CGROUP_BPF=y
+CONFIG_SCHED_CORE_CTL=y
+CONFIG_NAMESPACES=y
+# CONFIG_UTS_NS is not set
+# CONFIG_PID_NS is not set
+CONFIG_SCHED_AUTOGROUP=y
+CONFIG_SCHED_TUNE=y
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_RD_XZ is not set
+# CONFIG_RD_LZO is not set
+# CONFIG_RD_LZ4 is not set
+# CONFIG_FHANDLE is not set
+CONFIG_KALLSYMS_ALL=y
+CONFIG_BPF_SYSCALL=y
+CONFIG_EMBEDDED=y
+# CONFIG_SLUB_DEBUG is not set
+# CONFIG_COMPAT_BRK is not set
+CONFIG_SLAB_FREELIST_RANDOM=y
+CONFIG_SLAB_FREELIST_HARDENED=y
+CONFIG_PROFILING=y
+# CONFIG_ZONE_DMA32 is not set
+CONFIG_HOTPLUG_SIZE_BITS=29
+CONFIG_ARCH_QCOM=y
+CONFIG_ARCH_KONA=y
+CONFIG_PCI=y
+CONFIG_PCI_MSM=y
+CONFIG_PCI_MSM_MSI=y
+CONFIG_SCHED_MC=y
+CONFIG_NR_CPUS=8
+CONFIG_SECCOMP=y
+CONFIG_OKL4_GUEST=y
+# CONFIG_UNMAP_KERNEL_AT_EL0 is not set
+CONFIG_ARM64_SSBD=y
+CONFIG_ARMV8_DEPRECATED=y
+CONFIG_SWP_EMULATION=y
+CONFIG_CP15_BARRIER_EMULATION=y
+CONFIG_SETEND_EMULATION=y
+CONFIG_ARM64_LSE_ATOMICS=y
+# CONFIG_ARM64_VHE is not set
+CONFIG_RANDOMIZE_BASE=y
+# CONFIG_EFI is not set
+CONFIG_BUILD_ARM64_UNCOMPRESSED_KERNEL=y
+CONFIG_KRYO_PMU_WORKAROUND=y
+CONFIG_COMPAT=y
+CONFIG_PM_WAKELOCKS=y
+CONFIG_PM_WAKELOCKS_LIMIT=0
+# CONFIG_PM_WAKELOCKS_GC is not set
+CONFIG_ENERGY_MODEL=y
+CONFIG_CPU_IDLE=y
+CONFIG_ARM_CPUIDLE=y
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TIMES=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_ONDEMAND=y
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_BOOST=y
+CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y
+CONFIG_ARM_QCOM_CPUFREQ_HW=y
+CONFIG_MSM_TZ_LOG=y
+CONFIG_ARM64_CRYPTO=y
+CONFIG_CRYPTO_SHA1_ARM64_CE=y
+CONFIG_CRYPTO_SHA2_ARM64_CE=y
+CONFIG_CRYPTO_GHASH_ARM64_CE=y
+CONFIG_CRYPTO_AES_ARM64_CE_CCM=y
+CONFIG_CRYPTO_AES_ARM64_CE_BLK=y
+CONFIG_CRYPTO_AES_ARM64_NEON_BLK=y
+CONFIG_PANIC_ON_REFCOUNT_ERROR=y
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+CONFIG_MODULE_SIG=y
+CONFIG_MODULE_SIG_FORCE=y
+CONFIG_MODULE_SIG_SHA512=y
+CONFIG_PARTITION_ADVANCED=y
+CONFIG_CFQ_GROUP_IOSCHED=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_MEMORY_HOTPLUG=y
+CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE=y
+CONFIG_MEMORY_HOTPLUG_MOVABLE_NODE=y
+CONFIG_MEMORY_HOTREMOVE=y
+CONFIG_CMA=y
+CONFIG_CMA_DEBUGFS=y
+CONFIG_CMA_AREAS=16
+CONFIG_ZSMALLOC=y
+CONFIG_BALANCE_ANON_FILE_RECLAIM=y
+CONFIG_HAVE_USERSPACE_LOW_MEMORY_KILLER=y
+CONFIG_NET=y
+CONFIG_PACKET=y
+CONFIG_UNIX=y
+CONFIG_XFRM_USER=y
+CONFIG_XFRM_INTERFACE=y
+CONFIG_XFRM_STATISTICS=y
+CONFIG_NET_KEY=y
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_IP_MULTIPLE_TABLES=y
+CONFIG_IP_ROUTE_VERBOSE=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_NET_IPGRE_DEMUX=y
+CONFIG_SYN_COOKIES=y
+CONFIG_NET_IPVTI=y
+CONFIG_INET_AH=y
+CONFIG_INET_ESP=y
+CONFIG_INET_IPCOMP=y
+CONFIG_INET_UDP_DIAG=y
+CONFIG_INET_DIAG_DESTROY=y
+CONFIG_IPV6_ROUTER_PREF=y
+CONFIG_IPV6_ROUTE_INFO=y
+CONFIG_IPV6_OPTIMISTIC_DAD=y
+CONFIG_INET6_AH=y
+CONFIG_INET6_ESP=y
+CONFIG_INET6_IPCOMP=y
+CONFIG_IPV6_MIP6=y
+CONFIG_IPV6_VTI=y
+CONFIG_IPV6_MULTIPLE_TABLES=y
+CONFIG_IPV6_SUBTREES=y
+CONFIG_NETFILTER=y
+CONFIG_NF_CONNTRACK=y
+CONFIG_NF_CONNTRACK_SECMARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NF_CONNTRACK_AMANDA=y
+CONFIG_NF_CONNTRACK_FTP=y
+CONFIG_NF_CONNTRACK_H323=y
+CONFIG_NF_CONNTRACK_IRC=y
+CONFIG_NF_CONNTRACK_NETBIOS_NS=y
+CONFIG_NF_CONNTRACK_PPTP=y
+CONFIG_NF_CONNTRACK_SANE=y
+CONFIG_NF_CONNTRACK_TFTP=y
+CONFIG_NF_CT_NETLINK=y
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=y
+CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y
+CONFIG_NETFILTER_XT_TARGET_DSCP=y
+CONFIG_NETFILTER_XT_TARGET_IDLETIMER=y
+CONFIG_NETFILTER_XT_TARGET_HARDIDLETIMER=y
+CONFIG_NETFILTER_XT_TARGET_LOG=y
+CONFIG_NETFILTER_XT_TARGET_MARK=y
+CONFIG_NETFILTER_XT_TARGET_NFLOG=y
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y
+CONFIG_NETFILTER_XT_TARGET_NOTRACK=y
+CONFIG_NETFILTER_XT_TARGET_TEE=y
+CONFIG_NETFILTER_XT_TARGET_TPROXY=y
+CONFIG_NETFILTER_XT_TARGET_TRACE=y
+CONFIG_NETFILTER_XT_TARGET_SECMARK=y
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=y
+CONFIG_NETFILTER_XT_MATCH_BPF=y
+CONFIG_NETFILTER_XT_MATCH_COMMENT=y
+CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=y
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=y
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
+CONFIG_NETFILTER_XT_MATCH_DSCP=y
+CONFIG_NETFILTER_XT_MATCH_ESP=y
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=y
+CONFIG_NETFILTER_XT_MATCH_HELPER=y
+CONFIG_NETFILTER_XT_MATCH_IPRANGE=y
+# CONFIG_NETFILTER_XT_MATCH_L2TP is not set
+CONFIG_NETFILTER_XT_MATCH_LENGTH=y
+CONFIG_NETFILTER_XT_MATCH_LIMIT=y
+CONFIG_NETFILTER_XT_MATCH_MAC=y
+CONFIG_NETFILTER_XT_MATCH_MARK=y
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=y
+CONFIG_NETFILTER_XT_MATCH_OWNER=y
+CONFIG_NETFILTER_XT_MATCH_POLICY=y
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y
+CONFIG_NETFILTER_XT_MATCH_QUOTA=y
+CONFIG_NETFILTER_XT_MATCH_QUOTA2=y
+CONFIG_NETFILTER_XT_MATCH_QUOTA2_LOG=y
+# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
+CONFIG_NETFILTER_XT_MATCH_SOCKET=y
+CONFIG_NETFILTER_XT_MATCH_STATE=y
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=y
+CONFIG_NETFILTER_XT_MATCH_STRING=y
+CONFIG_NETFILTER_XT_MATCH_TIME=y
+CONFIG_NETFILTER_XT_MATCH_U32=y
+CONFIG_IP_NF_IPTABLES=y
+CONFIG_IP_NF_MATCH_AH=y
+CONFIG_IP_NF_MATCH_ECN=y
+CONFIG_IP_NF_MATCH_RPFILTER=y
+CONFIG_IP_NF_MATCH_TTL=y
+CONFIG_IP_NF_FILTER=y
+CONFIG_IP_NF_TARGET_REJECT=y
+CONFIG_IP_NF_NAT=y
+CONFIG_IP_NF_TARGET_MASQUERADE=y
+CONFIG_IP_NF_TARGET_NETMAP=y
+CONFIG_IP_NF_TARGET_REDIRECT=y
+CONFIG_IP_NF_MANGLE=y
+CONFIG_IP_NF_RAW=y
+CONFIG_IP_NF_SECURITY=y
+CONFIG_IP_NF_ARPTABLES=y
+CONFIG_IP_NF_ARPFILTER=y
+CONFIG_IP_NF_ARP_MANGLE=y
+CONFIG_IP6_NF_IPTABLES=y
+CONFIG_IP6_NF_MATCH_RPFILTER=y
+CONFIG_IP6_NF_FILTER=y
+CONFIG_IP6_NF_TARGET_REJECT=y
+CONFIG_IP6_NF_MANGLE=y
+CONFIG_IP6_NF_RAW=y
+CONFIG_BRIDGE_NF_EBTABLES=y
+CONFIG_BRIDGE_EBT_BROUTE=y
+CONFIG_IP_SCTP=y
+CONFIG_L2TP=y
+CONFIG_L2TP_V3=y
+CONFIG_L2TP_IP=y
+CONFIG_L2TP_ETH=y
+CONFIG_BRIDGE=y
+CONFIG_NET_SCHED=y
+CONFIG_NET_SCH_HTB=y
+CONFIG_NET_SCH_PRIO=y
+CONFIG_NET_SCH_MULTIQ=y
+CONFIG_NET_SCH_NETEM=y
+CONFIG_NET_SCH_INGRESS=y
+CONFIG_NET_CLS_FW=y
+CONFIG_NET_CLS_U32=y
+CONFIG_CLS_U32_MARK=y
+CONFIG_NET_CLS_FLOW=y
+CONFIG_NET_CLS_BPF=y
+CONFIG_NET_EMATCH=y
+CONFIG_NET_EMATCH_CMP=y
+CONFIG_NET_EMATCH_NBYTE=y
+CONFIG_NET_EMATCH_U32=y
+CONFIG_NET_EMATCH_META=y
+CONFIG_NET_EMATCH_TEXT=y
+CONFIG_NET_CLS_ACT=y
+CONFIG_NET_ACT_GACT=y
+CONFIG_NET_ACT_MIRRED=y
+CONFIG_NET_ACT_SKBEDIT=y
+CONFIG_QRTR=y
+CONFIG_QRTR_SMD=y
+CONFIG_QRTR_MHI=y
+CONFIG_SOCKEV_NLMCAST=y
+CONFIG_BT=y
+CONFIG_MSM_BT_POWER=y
+CONFIG_BT_SLIM_QCA6390=y
+CONFIG_CFG80211=y
+CONFIG_CFG80211_INTERNAL_REGDB=y
+CONFIG_RFKILL=y
+CONFIG_NFC_NQ=y
+CONFIG_FW_LOADER_USER_HELPER=y
+CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y
+CONFIG_REGMAP_WCD_IRQ=y
+CONFIG_REGMAP_ALLOW_WRITE_DEBUGFS=y
+CONFIG_DMA_CMA=y
+CONFIG_MHI_BUS=y
+CONFIG_MHI_QCOM=y
+CONFIG_MHI_NETDEV=y
+CONFIG_MHI_UCI=y
+CONFIG_MHI_SATELLITE=y
+CONFIG_ZRAM=y
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_LOOP_MIN_COUNT=16
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_SIZE=8192
+CONFIG_HDCP_QSEECOM=y
+CONFIG_QSEECOM=y
+CONFIG_UID_SYS_STATS=y
+CONFIG_OKL4_USER_VIRQ=y
+CONFIG_WIGIG_SENSING_SPI=m
+CONFIG_QTI_XR_SMRTVWR_MISC=y
+CONFIG_SCSI=y
+CONFIG_BLK_DEV_SD=y
+CONFIG_CHR_DEV_SG=y
+CONFIG_CHR_DEV_SCH=y
+CONFIG_SCSI_CONSTANTS=y
+CONFIG_SCSI_LOGGING=y
+CONFIG_SCSI_SCAN_ASYNC=y
+CONFIG_SCSI_UFSHCD=y
+CONFIG_SCSI_UFSHCD_PLATFORM=y
+CONFIG_SCSI_UFS_QCOM=y
+CONFIG_SCSI_UFS_QCOM_ICE=y
+CONFIG_MD=y
+CONFIG_BLK_DEV_DM=y
+CONFIG_DM_CRYPT=y
+CONFIG_DM_DEFAULT_KEY=y
+CONFIG_DM_SNAPSHOT=y
+CONFIG_DM_UEVENT=y
+CONFIG_DM_VERITY=y
+CONFIG_DM_VERITY_FEC=y
+CONFIG_NETDEVICES=y
+CONFIG_BONDING=y
+CONFIG_DUMMY=y
+CONFIG_TUN=y
+CONFIG_SKY2=y
+CONFIG_RMNET=y
+CONFIG_SMSC911X=y
+CONFIG_PPP=y
+CONFIG_PPP_BSDCOMP=y
+CONFIG_PPP_DEFLATE=y
+CONFIG_PPP_MPPE=y
+CONFIG_PPTP=y
+CONFIG_PPPOL2TP=y
+CONFIG_USB_RTL8152=y
+CONFIG_USB_LAN78XX=y
+CONFIG_USB_USBNET=y
+CONFIG_WIL6210=m
+CONFIG_WCNSS_MEM_PRE_ALLOC=y
+CONFIG_CLD_LL_CORE=y
+CONFIG_CNSS2=y
+CONFIG_CNSS2_QMI=y
+CONFIG_CNSS_ASYNC=y
+CONFIG_BUS_AUTO_SUSPEND=y
+CONFIG_CNSS_QCA6390=y
+CONFIG_CNSS_GENL=y
+CONFIG_NVM=y
+CONFIG_NVM_PBLK=y
+CONFIG_INPUT_EVDEV=y
+CONFIG_KEYBOARD_GPIO=y
+# CONFIG_INPUT_MOUSE is not set
+CONFIG_INPUT_JOYSTICK=y
+CONFIG_JOYSTICK_XPAD=y
+CONFIG_JOYSTICK_XPAD_FF=y
+CONFIG_JOYSTICK_XPAD_LEDS=y
+CONFIG_INPUT_TABLET=y
+CONFIG_TABLET_USB_ACECAD=y
+CONFIG_TABLET_USB_AIPTEK=y
+CONFIG_TABLET_USB_GTCO=y
+CONFIG_TABLET_USB_HANWANG=y
+CONFIG_TABLET_USB_KBTAB=y
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_QPNP_POWER_ON=y
+CONFIG_INPUT_QTI_HAPTICS=y
+CONFIG_INPUT_UINPUT=y
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_DEVMEM is not set
+CONFIG_SERIAL_MSM_GENI=y
+CONFIG_SERIAL_MSM_GENI_HALF_SAMPLING=y
+CONFIG_HW_RANDOM=y
+CONFIG_HW_RANDOM_MSM_LEGACY=y
+# CONFIG_DEVPORT is not set
+CONFIG_DIAG_CHAR=y
+CONFIG_MSM_ADSPRPC=y
+CONFIG_MSM_RDBG=m
+CONFIG_OKL4_PIPE=y
+CONFIG_I2C_CHARDEV=y
+CONFIG_I2C_QCOM_GENI=y
+CONFIG_I3C=y
+CONFIG_I3C_MASTER_QCOM_GENI=y
+CONFIG_SPI=y
+CONFIG_SPI_QCOM_GENI=y
+CONFIG_SPI_SPIDEV=y
+CONFIG_SPMI=y
+CONFIG_SPMI_MSM_PMIC_ARB_DEBUG=y
+CONFIG_PINCTRL_QCOM_SPMI_PMIC=y
+CONFIG_PINCTRL_KONA=y
+CONFIG_GPIO_SYSFS=y
+CONFIG_POWER_RESET_QCOM=y
+CONFIG_POWER_RESET_XGENE=y
+CONFIG_POWER_RESET_SYSCON=y
+CONFIG_QPNP_SMB5=y
+CONFIG_SMB1390_CHARGE_PUMP_PSY=y
+CONFIG_SMB1355_SLAVE_CHARGER=y
+CONFIG_QPNP_QNOVO5=y
+CONFIG_QPNP_FG_GEN4=y
+CONFIG_HL6111R=y
+CONFIG_THERMAL=y
+CONFIG_THERMAL_WRITABLE_TRIPS=y
+CONFIG_THERMAL_GOV_USER_SPACE=y
+CONFIG_THERMAL_GOV_LOW_LIMITS=y
+CONFIG_CPU_THERMAL=y
+CONFIG_DEVFREQ_THERMAL=y
+CONFIG_QCOM_SPMI_TEMP_ALARM=y
+CONFIG_THERMAL_TSENS=y
+CONFIG_QTI_ADC_TM=y
+CONFIG_QTI_VIRTUAL_SENSOR=y
+CONFIG_QTI_QMI_SENSOR=y
+CONFIG_QTI_BCL_PMIC5=y
+CONFIG_QTI_BCL_SOC_DRIVER=y
+CONFIG_QTI_QMI_COOLING_DEVICE=y
+CONFIG_QTI_THERMAL_LIMITS_DCVS=y
+CONFIG_QTI_CPU_ISOLATE_COOLING_DEVICE=y
+CONFIG_QTI_LIMITS_ISENSE_CDSP=y
+CONFIG_MFD_I2C_PMIC=y
+CONFIG_MFD_SPMI_PMIC=y
+CONFIG_REGULATOR=y
+CONFIG_REGULATOR_FIXED_VOLTAGE=y
+CONFIG_REGULATOR_PROXY_CONSUMER=y
+CONFIG_REGULATOR_QPNP_AMOLED=y
+CONFIG_REGULATOR_QPNP_LCDB=y
+CONFIG_REGULATOR_REFGEN=y
+CONFIG_REGULATOR_RPMH=y
+CONFIG_REGULATOR_STUB=y
+CONFIG_MEDIA_SUPPORT=y
+CONFIG_MEDIA_CAMERA_SUPPORT=y
+CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
+CONFIG_MEDIA_RADIO_SUPPORT=y
+CONFIG_MEDIA_CONTROLLER=y
+CONFIG_VIDEO_V4L2_SUBDEV_API=y
+CONFIG_VIDEO_ADV_DEBUG=y
+CONFIG_VIDEO_FIXED_MINOR_RANGES=y
+CONFIG_MEDIA_USB_SUPPORT=y
+CONFIG_USB_VIDEO_CLASS=y
+CONFIG_V4L_PLATFORM_DRIVERS=y
+CONFIG_MSM_CVP_V4L2=y
+CONFIG_MSM_NPU=y
+CONFIG_MSM_GLOBAL_SYNX=y
+CONFIG_DVB_MPQ=m
+CONFIG_DVB_MPQ_DEMUX=m
+CONFIG_DVB_MPQ_TSPP1=y
+CONFIG_TSPP=m
+CONFIG_VIDEO_V4L2_VIDEOBUF2_CORE=y
+CONFIG_I2C_RTC6226_QCA=y
+CONFIG_DRM=y
+# CONFIG_DRM_MSM is not set
+CONFIG_DRM_LONTIUM_LT9611UXC=y
+CONFIG_FB_ARMCLCD=y
+CONFIG_BACKLIGHT_QCOM_SPMI_WLED=y
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+CONFIG_SOUND=y
+CONFIG_SND=y
+CONFIG_SND_DYNAMIC_MINORS=y
+CONFIG_SND_USB_AUDIO=y
+CONFIG_SND_USB_AUDIO_QMI=y
+CONFIG_SND_SOC=y
+CONFIG_UHID=y
+CONFIG_HID_APPLE=y
+CONFIG_HID_ELECOM=y
+CONFIG_HID_MAGICMOUSE=y
+CONFIG_HID_MICROSOFT=y
+CONFIG_HID_MULTITOUCH=y
+CONFIG_HID_PLANTRONICS=y
+CONFIG_HID_SONY=y
+CONFIG_HID_QVR=y
+CONFIG_USB_HIDDEV=y
+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
+CONFIG_USB_XHCI_HCD=y
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_HCD_PLATFORM=y
+CONFIG_USB_OHCI_HCD=y
+CONFIG_USB_OHCI_HCD_PLATFORM=y
+CONFIG_USB_ACM=y
+CONFIG_USB_STORAGE=y
+CONFIG_USB_DWC3=y
+CONFIG_USB_DWC3_MSM=y
+CONFIG_USB_ISP1760=y
+CONFIG_USB_ISP1760_HOST_ROLE=y
+CONFIG_USB_SERIAL=y
+CONFIG_USB_SERIAL_CP210X=y
+CONFIG_USB_EHSET_TEST_FIXTURE=y
+CONFIG_USB_LINK_LAYER_TEST=y
+CONFIG_USB_REDRIVER_NB7VPQ904M=y
+CONFIG_NOP_USB_XCEIV=y
+CONFIG_USB_MSM_SSPHY_QMP=y
+CONFIG_MSM_HSUSB_PHY=y
+CONFIG_USB_QCOM_EMU_PHY=y
+CONFIG_USB_GADGET=y
+CONFIG_USB_GADGET_VBUS_DRAW=900
+CONFIG_USB_CONFIGFS=y
+CONFIG_USB_CONFIGFS_UEVENT=y
+CONFIG_USB_CONFIGFS_NCM=y
+CONFIG_USB_CONFIGFS_MASS_STORAGE=y
+CONFIG_USB_CONFIGFS_F_FS=y
+CONFIG_USB_CONFIGFS_F_ACC=y
+CONFIG_USB_CONFIGFS_F_AUDIO_SRC=y
+CONFIG_USB_CONFIGFS_F_UAC2=y
+CONFIG_USB_CONFIGFS_F_MIDI=y
+CONFIG_USB_CONFIGFS_F_HID=y
+CONFIG_USB_CONFIGFS_F_DIAG=y
+CONFIG_USB_CONFIGFS_F_CDEV=y
+CONFIG_USB_CONFIGFS_F_CCID=y
+CONFIG_USB_CONFIGFS_F_QDSS=y
+CONFIG_USB_CONFIGFS_F_GSI=y
+CONFIG_USB_CONFIGFS_F_MTP=y
+CONFIG_USB_CONFIGFS_F_PTP=y
+CONFIG_TYPEC=y
+CONFIG_USB_PD_POLICY=y
+CONFIG_QPNP_USB_PDPHY=y
+CONFIG_MMC=y
+CONFIG_MMC_BLOCK_MINORS=32
+CONFIG_MMC_BLOCK_DEFERRED_RESUME=y
+CONFIG_MMC_TEST=y
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SDHCI_PLTFM=y
+CONFIG_MMC_SDHCI_MSM=y
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+CONFIG_LEDS_QTI_TRI_LED=y
+CONFIG_LEDS_QPNP_FLASH_V2=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_EDAC=y
+CONFIG_EDAC_KRYO_ARM64=y
+CONFIG_EDAC_KRYO_ARM64_PANIC_ON_UE=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_DRV_PM8XXX=y
+CONFIG_DMADEVICES=y
+CONFIG_QCOM_GPI_DMA=y
+CONFIG_UIO=y
+CONFIG_STAGING=y
+CONFIG_ASHMEM=y
+CONFIG_ION=y
+CONFIG_ION_POOL_AUTO_REFILL=y
+CONFIG_QPNP_REVID=y
+CONFIG_SPS=y
+CONFIG_SPS_SUPPORT_NDP_BAM=y
+CONFIG_GSI_REGISTER_VERSION_2=y
+CONFIG_IPA3=y
+CONFIG_IPA_WDI_UNIFIED_API=y
+CONFIG_RMNET_IPA3=y
+CONFIG_RNDIS_IPA=y
+CONFIG_IPA3_MHI_PRIME_MANAGER=y
+CONFIG_IPA_UT=y
+CONFIG_MSM_11AD=m
+CONFIG_USB_BAM=y
+CONFIG_QCOM_GENI_SE=y
+CONFIG_IPA3_REGDUMP=y
+CONFIG_QCOM_CLK_RPMH=y
+CONFIG_SPMI_PMIC_CLKDIV=y
+CONFIG_MSM_CLK_AOP_QMP=y
+CONFIG_MSM_VIDEOCC_KONA=y
+CONFIG_MSM_DISPCC_KONA=y
+CONFIG_MSM_CAMCC_KONA=y
+CONFIG_MSM_GPUCC_KONA=y
+CONFIG_MSM_DEBUGCC_KONA=y
+CONFIG_MSM_NPUCC_KONA=y
+CONFIG_HWSPINLOCK=y
+CONFIG_HWSPINLOCK_QCOM=y
+CONFIG_MAILBOX=y
+CONFIG_QCOM_APCS_IPC=y
+CONFIG_MSM_QMP=y
+CONFIG_IOMMU_IO_PGTABLE_FAST=y
+CONFIG_ARM_SMMU=y
+CONFIG_QCOM_LAZY_MAPPING=y
+CONFIG_IOMMU_DEBUG=y
+CONFIG_IOMMU_TESTS=y
+CONFIG_RPMSG_CHAR=y
+CONFIG_RPMSG_QCOM_GLINK_SMEM=y
+CONFIG_RPMSG_QCOM_GLINK_SPSS=y
+CONFIG_QCOM_COMMAND_DB=y
+CONFIG_QCOM_MEM_OFFLINE=y
+CONFIG_OVERRIDE_MEMORY_LIMIT=y
+CONFIG_QCOM_RUN_QUEUE_STATS=y
+CONFIG_MSM_QBT_HANDLER=y
+CONFIG_QCOM_IPCC=y
+CONFIG_QCOM_LLCC=y
+CONFIG_QCOM_KONA_LLCC=y
+CONFIG_QCOM_LLCC_PERFMON=m
+CONFIG_QCOM_MDT_LOADER=y
+CONFIG_QPNP_PBS=y
+CONFIG_QCOM_QMI_HELPERS=y
+CONFIG_QCOM_QMI_RMNET=y
+CONFIG_QCOM_QMI_DFC=y
+CONFIG_RMNET_CTL=y
+CONFIG_QCOM_QMI_POWER_COLLAPSE=y
+CONFIG_QCOM_RPMH=y
+CONFIG_QCOM_SMEM=y
+CONFIG_QCOM_EARLY_RANDOM=y
+CONFIG_QCOM_MEMORY_DUMP_V2=y
+CONFIG_QCOM_SMP2P=y
+CONFIG_SETUP_SSR_NOTIF_TIMEOUTS=y
+CONFIG_SSR_SYSMON_NOTIF_TIMEOUT=20000
+CONFIG_SSR_SUBSYS_NOTIF_TIMEOUT=20000
+CONFIG_PANIC_ON_SSR_NOTIF_TIMEOUT=y
+CONFIG_QCOM_SECURE_BUFFER=y
+CONFIG_MSM_REMOTEQDSS=y
+CONFIG_MSM_SERVICE_LOCATOR=y
+CONFIG_MSM_SERVICE_NOTIFIER=y
+CONFIG_MSM_SUBSYSTEM_RESTART=y
+CONFIG_MSM_PIL=y
+CONFIG_MSM_SYSMON_QMI_COMM=y
+CONFIG_MSM_PIL_SSR_GENERIC=y
+CONFIG_MSM_BOOT_STATS=y
+CONFIG_QCOM_DCC_V2=y
+CONFIG_QCOM_EUD=y
+CONFIG_QCOM_MINIDUMP=y
+CONFIG_QCOM_FSA4480_I2C=y
+CONFIG_QCOM_WATCHDOG_V2=y
+CONFIG_QCOM_FORCE_WDOG_BITE_ON_PANIC=y
+CONFIG_QCOM_BUS_SCALING=y
+CONFIG_QCOM_BUS_CONFIG_RPMH=y
+CONFIG_MSM_SPCOM=y
+CONFIG_MSM_SPSS_UTILS=y
+CONFIG_QSEE_IPC_IRQ_BRIDGE=y
+CONFIG_QCOM_GLINK=y
+CONFIG_QCOM_GLINK_PKT=y
+CONFIG_QCOM_SMP2P_SLEEPSTATE=y
+CONFIG_QCOM_QDSS_BRIDGE=y
+CONFIG_MSM_CDSP_LOADER=y
+CONFIG_QCOM_SMCINVOKE=y
+CONFIG_MSM_EVENT_TIMER=y
+CONFIG_MSM_PM=y
+CONFIG_QTI_RPM_STATS_LOG=y
+CONFIG_QTI_DDR_STATS_LOG=y
+CONFIG_QTEE_SHM_BRIDGE=y
+CONFIG_MSM_PERFORMANCE=y
+CONFIG_QMP_DEBUGFS_CLIENT=y
+CONFIG_QCOM_CDSP_RM=y
+CONFIG_QCOM_QHEE_ENABLE_MEM_PROTECTION=y
+CONFIG_DEVFREQ_GOV_PASSIVE=y
+CONFIG_QCOM_BIMC_BWMON=y
+CONFIG_ARM_MEMLAT_MON=y
+CONFIG_DEVFREQ_GOV_QCOM_BW_HWMON=y
+CONFIG_DEVFREQ_GOV_QCOM_CACHE_HWMON=y
+CONFIG_DEVFREQ_GOV_MEMLAT=y
+CONFIG_DEVFREQ_GOV_CDSPL3=y
+CONFIG_ARM_QCOM_DEVFREQ_FW=y
+CONFIG_DEVFREQ_SIMPLE_DEV=y
+CONFIG_QCOM_DEVFREQ_DEVBW=y
+CONFIG_ARM_QCOM_DEVFREQ_QOSLAT=y
+CONFIG_DEVFREQ_GOV_STATICMAP=y
+CONFIG_EXTCON_USB_GPIO=y
+CONFIG_IIO=y
+CONFIG_QCOM_SPMI_ADC5=y
+CONFIG_PWM=y
+CONFIG_PWM_QTI_LPG=y
+CONFIG_QCOM_PDC=y
+CONFIG_ARM_DSU_PMU=y
+CONFIG_QCOM_LLCC_PMU=y
+CONFIG_RAS=y
+CONFIG_ANDROID=y
+CONFIG_ANDROID_BINDER_IPC=y
+CONFIG_QCOM_QFPROM=y
+CONFIG_NVMEM_SPMI_SDAM=y
+CONFIG_SLIMBUS_MSM_NGD=y
+CONFIG_ESOC=y
+CONFIG_ESOC_DEV=y
+CONFIG_ESOC_CLIENT=y
+CONFIG_ESOC_MDM_4x=y
+CONFIG_ESOC_MDM_DRV=y
+CONFIG_SENSORS_SSC=y
+CONFIG_QCOM_KGSL=y
+CONFIG_EXT4_FS=y
+CONFIG_EXT4_FS_SECURITY=y
+CONFIG_F2FS_FS=y
+CONFIG_F2FS_FS_SECURITY=y
+CONFIG_FS_ENCRYPTION=y
+CONFIG_QUOTA=y
+CONFIG_QUOTA_NETLINK_INTERFACE=y
+CONFIG_QFMT_V2=y
+CONFIG_FUSE_FS=y
+CONFIG_OVERLAY_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_TMPFS=y
+CONFIG_TMPFS_POSIX_ACL=y
+CONFIG_ECRYPT_FS=y
+CONFIG_ECRYPT_FS_MESSAGING=y
+CONFIG_SDCARD_FS=y
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_ISO8859_1=y
+CONFIG_PFK=y
+CONFIG_SECURITY_PERF_EVENTS_RESTRICT=y
+CONFIG_SECURITY=y
+CONFIG_HARDENED_USERCOPY=y
+CONFIG_FORTIFY_SOURCE=y
+CONFIG_SECURITY_SELINUX=y
+CONFIG_SECURITY_SMACK=y
+CONFIG_SECURITY_APPARMOR=y
+CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE=0
+CONFIG_CRYPTO_CCM=y
+CONFIG_CRYPTO_GCM=y
+CONFIG_CRYPTO_XCBC=y
+CONFIG_CRYPTO_MD4=y
+CONFIG_CRYPTO_TWOFISH=y
+CONFIG_CRYPTO_ANSI_CPRNG=y
+CONFIG_CRYPTO_DEV_QCOM_MSM_QCE=y
+CONFIG_CRYPTO_DEV_QCRYPTO=y
+CONFIG_CRYPTO_DEV_QCEDEV=y
+CONFIG_CRYPTO_DEV_QCOM_ICE=y
+CONFIG_PRINTK_TIME=y
+CONFIG_DEBUG_INFO=y
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_PANIC_TIMEOUT=-1
+CONFIG_SCHEDSTATS=y
+# CONFIG_DEBUG_PREEMPT is not set
+CONFIG_IPC_LOGGING=y
+CONFIG_DEBUG_ALIGN_RODATA=y
+CONFIG_CORESIGHT=y
+CONFIG_CORESIGHT_LINK_AND_SINK_TMC=y
+CONFIG_CORESIGHT_DYNAMIC_REPLICATOR=y
+CONFIG_CORESIGHT_STM=y
+CONFIG_CORESIGHT_CTI=y
+CONFIG_CORESIGHT_CTI_SAVE_DISABLE=y
+CONFIG_CORESIGHT_TPDA=y
+CONFIG_CORESIGHT_TPDM=y
+CONFIG_CORESIGHT_HWEVENT=y
+CONFIG_CORESIGHT_DUMMY=y
+CONFIG_CORESIGHT_REMOTE_ETM=y
+CONFIG_CORESIGHT_TGU=y
diff --git a/arch/arm64/configs/vendor/kona-iot_defconfig b/arch/arm64/configs/vendor/kona-iot_defconfig
new file mode 100644
index 0000000..b3d2663
--- /dev/null
+++ b/arch/arm64/configs/vendor/kona-iot_defconfig
@@ -0,0 +1,794 @@
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_PREEMPT=y
+CONFIG_IRQ_TIME_ACCOUNTING=y
+CONFIG_SCHED_WALT=y
+CONFIG_TASKSTATS=y
+CONFIG_TASK_XACCT=y
+CONFIG_TASK_IO_ACCOUNTING=y
+CONFIG_PSI=y
+CONFIG_PSI_FTRACE=y
+CONFIG_RCU_EXPERT=y
+CONFIG_RCU_FAST_NO_HZ=y
+CONFIG_RCU_NOCB_CPU=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_CPU_MAX_BUF_SHIFT=17
+CONFIG_MEMCG=y
+CONFIG_MEMCG_SWAP=y
+CONFIG_BLK_CGROUP=y
+CONFIG_DEBUG_BLK_CGROUP=y
+CONFIG_RT_GROUP_SCHED=y
+CONFIG_CGROUP_FREEZER=y
+CONFIG_CPUSETS=y
+CONFIG_CGROUP_CPUACCT=y
+CONFIG_CGROUP_BPF=y
+CONFIG_CGROUP_DEBUG=y
+CONFIG_SCHED_CORE_CTL=y
+CONFIG_NAMESPACES=y
+# CONFIG_UTS_NS is not set
+# CONFIG_PID_NS is not set
+CONFIG_SCHED_AUTOGROUP=y
+CONFIG_SCHED_TUNE=y
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_RD_XZ is not set
+# CONFIG_RD_LZO is not set
+# CONFIG_RD_LZ4 is not set
+# CONFIG_FHANDLE is not set
+CONFIG_BPF_SYSCALL=y
+CONFIG_EMBEDDED=y
+# CONFIG_COMPAT_BRK is not set
+CONFIG_SLAB_FREELIST_RANDOM=y
+CONFIG_SLAB_FREELIST_HARDENED=y
+CONFIG_PROFILING=y
+# CONFIG_ZONE_DMA32 is not set
+CONFIG_HOTPLUG_SIZE_BITS=29
+CONFIG_ARCH_QCOM=y
+CONFIG_ARCH_KONA=y
+CONFIG_PCI=y
+CONFIG_PCI_MSM=y
+CONFIG_PCI_MSM_MSI=y
+CONFIG_SCHED_MC=y
+CONFIG_NR_CPUS=8
+CONFIG_SECCOMP=y
+CONFIG_OKL4_GUEST=y
+# CONFIG_UNMAP_KERNEL_AT_EL0 is not set
+CONFIG_ARM64_SSBD=y
+CONFIG_PRINT_VMEMLAYOUT=y
+CONFIG_ARMV8_DEPRECATED=y
+CONFIG_SWP_EMULATION=y
+CONFIG_CP15_BARRIER_EMULATION=y
+CONFIG_SETEND_EMULATION=y
+CONFIG_ARM64_LSE_ATOMICS=y
+# CONFIG_ARM64_VHE is not set
+CONFIG_RANDOMIZE_BASE=y
+CONFIG_BUILD_ARM64_UNCOMPRESSED_KERNEL=y
+CONFIG_KRYO_PMU_WORKAROUND=y
+CONFIG_COMPAT=y
+CONFIG_PM_WAKELOCKS=y
+CONFIG_PM_WAKELOCKS_LIMIT=0
+# CONFIG_PM_WAKELOCKS_GC is not set
+CONFIG_PM_DEBUG=y
+CONFIG_ENERGY_MODEL=y
+CONFIG_CPU_IDLE=y
+CONFIG_ARM_CPUIDLE=y
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TIMES=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_ONDEMAND=y
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_BOOST=y
+CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y
+CONFIG_ARM_QCOM_CPUFREQ_HW=y
+CONFIG_MSM_TZ_LOG=y
+CONFIG_ARM64_CRYPTO=y
+CONFIG_CRYPTO_SHA1_ARM64_CE=y
+CONFIG_CRYPTO_SHA2_ARM64_CE=y
+CONFIG_CRYPTO_GHASH_ARM64_CE=y
+CONFIG_CRYPTO_AES_ARM64_CE_CCM=y
+CONFIG_CRYPTO_AES_ARM64_CE_BLK=y
+CONFIG_CRYPTO_AES_ARM64_NEON_BLK=y
+CONFIG_KPROBES=y
+CONFIG_PANIC_ON_REFCOUNT_ERROR=y
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+CONFIG_MODULE_SIG=y
+CONFIG_MODULE_SIG_FORCE=y
+CONFIG_MODULE_SIG_SHA512=y
+# CONFIG_BLK_DEV_BSG is not set
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_IOSCHED_DEADLINE is not set
+CONFIG_CFQ_GROUP_IOSCHED=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_MEMORY_HOTPLUG=y
+CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE=y
+CONFIG_MEMORY_HOTPLUG_MOVABLE_NODE=y
+CONFIG_MEMORY_HOTREMOVE=y
+CONFIG_CLEANCACHE=y
+CONFIG_CMA=y
+CONFIG_CMA_DEBUG=y
+CONFIG_CMA_DEBUGFS=y
+CONFIG_CMA_ALLOW_WRITE_DEBUGFS=y
+CONFIG_CMA_AREAS=16
+CONFIG_ZSMALLOC=y
+CONFIG_BALANCE_ANON_FILE_RECLAIM=y
+CONFIG_HAVE_USERSPACE_LOW_MEMORY_KILLER=y
+CONFIG_NET=y
+CONFIG_PACKET=y
+CONFIG_UNIX=y
+CONFIG_XFRM_USER=y
+CONFIG_XFRM_INTERFACE=y
+CONFIG_XFRM_STATISTICS=y
+CONFIG_NET_KEY=y
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_IP_MULTIPLE_TABLES=y
+CONFIG_IP_ROUTE_VERBOSE=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_NET_IPGRE_DEMUX=y
+CONFIG_SYN_COOKIES=y
+CONFIG_NET_IPVTI=y
+CONFIG_INET_AH=y
+CONFIG_INET_ESP=y
+CONFIG_INET_IPCOMP=y
+CONFIG_INET_UDP_DIAG=y
+CONFIG_INET_DIAG_DESTROY=y
+CONFIG_IPV6_ROUTER_PREF=y
+CONFIG_IPV6_ROUTE_INFO=y
+CONFIG_IPV6_OPTIMISTIC_DAD=y
+CONFIG_INET6_AH=y
+CONFIG_INET6_ESP=y
+CONFIG_INET6_IPCOMP=y
+CONFIG_IPV6_MIP6=y
+CONFIG_IPV6_VTI=y
+CONFIG_IPV6_MULTIPLE_TABLES=y
+CONFIG_IPV6_SUBTREES=y
+CONFIG_NETFILTER=y
+CONFIG_NF_CONNTRACK=y
+CONFIG_NF_CONNTRACK_SECMARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NF_CONNTRACK_AMANDA=y
+CONFIG_NF_CONNTRACK_FTP=y
+CONFIG_NF_CONNTRACK_H323=y
+CONFIG_NF_CONNTRACK_IRC=y
+CONFIG_NF_CONNTRACK_NETBIOS_NS=y
+CONFIG_NF_CONNTRACK_PPTP=y
+CONFIG_NF_CONNTRACK_SANE=y
+CONFIG_NF_CONNTRACK_TFTP=y
+CONFIG_NF_CT_NETLINK=y
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=y
+CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y
+CONFIG_NETFILTER_XT_TARGET_DSCP=y
+CONFIG_NETFILTER_XT_TARGET_IDLETIMER=y
+CONFIG_NETFILTER_XT_TARGET_HARDIDLETIMER=y
+CONFIG_NETFILTER_XT_TARGET_LOG=y
+CONFIG_NETFILTER_XT_TARGET_MARK=y
+CONFIG_NETFILTER_XT_TARGET_NFLOG=y
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y
+CONFIG_NETFILTER_XT_TARGET_NOTRACK=y
+CONFIG_NETFILTER_XT_TARGET_TEE=y
+CONFIG_NETFILTER_XT_TARGET_TPROXY=y
+CONFIG_NETFILTER_XT_TARGET_TRACE=y
+CONFIG_NETFILTER_XT_TARGET_SECMARK=y
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=y
+CONFIG_NETFILTER_XT_MATCH_BPF=y
+CONFIG_NETFILTER_XT_MATCH_COMMENT=y
+CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=y
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=y
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
+CONFIG_NETFILTER_XT_MATCH_DSCP=y
+CONFIG_NETFILTER_XT_MATCH_ESP=y
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=y
+CONFIG_NETFILTER_XT_MATCH_HELPER=y
+CONFIG_NETFILTER_XT_MATCH_IPRANGE=y
+# CONFIG_NETFILTER_XT_MATCH_L2TP is not set
+CONFIG_NETFILTER_XT_MATCH_LENGTH=y
+CONFIG_NETFILTER_XT_MATCH_LIMIT=y
+CONFIG_NETFILTER_XT_MATCH_MAC=y
+CONFIG_NETFILTER_XT_MATCH_MARK=y
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=y
+CONFIG_NETFILTER_XT_MATCH_OWNER=y
+CONFIG_NETFILTER_XT_MATCH_POLICY=y
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y
+CONFIG_NETFILTER_XT_MATCH_QUOTA=y
+CONFIG_NETFILTER_XT_MATCH_QUOTA2=y
+CONFIG_NETFILTER_XT_MATCH_QUOTA2_LOG=y
+# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
+CONFIG_NETFILTER_XT_MATCH_SOCKET=y
+CONFIG_NETFILTER_XT_MATCH_STATE=y
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=y
+CONFIG_NETFILTER_XT_MATCH_STRING=y
+CONFIG_NETFILTER_XT_MATCH_TIME=y
+CONFIG_NETFILTER_XT_MATCH_U32=y
+CONFIG_IP_NF_IPTABLES=y
+CONFIG_IP_NF_MATCH_AH=y
+CONFIG_IP_NF_MATCH_ECN=y
+CONFIG_IP_NF_MATCH_RPFILTER=y
+CONFIG_IP_NF_MATCH_TTL=y
+CONFIG_IP_NF_FILTER=y
+CONFIG_IP_NF_TARGET_REJECT=y
+CONFIG_IP_NF_NAT=y
+CONFIG_IP_NF_TARGET_MASQUERADE=y
+CONFIG_IP_NF_TARGET_NETMAP=y
+CONFIG_IP_NF_TARGET_REDIRECT=y
+CONFIG_IP_NF_MANGLE=y
+CONFIG_IP_NF_RAW=y
+CONFIG_IP_NF_SECURITY=y
+CONFIG_IP_NF_ARPTABLES=y
+CONFIG_IP_NF_ARPFILTER=y
+CONFIG_IP_NF_ARP_MANGLE=y
+CONFIG_IP6_NF_IPTABLES=y
+CONFIG_IP6_NF_MATCH_RPFILTER=y
+CONFIG_IP6_NF_FILTER=y
+CONFIG_IP6_NF_TARGET_REJECT=y
+CONFIG_IP6_NF_MANGLE=y
+CONFIG_IP6_NF_RAW=y
+CONFIG_BRIDGE_NF_EBTABLES=y
+CONFIG_BRIDGE_EBT_BROUTE=y
+CONFIG_IP_SCTP=y
+CONFIG_L2TP=y
+CONFIG_L2TP_DEBUGFS=y
+CONFIG_L2TP_V3=y
+CONFIG_L2TP_IP=y
+CONFIG_L2TP_ETH=y
+CONFIG_BRIDGE=y
+CONFIG_NET_SCHED=y
+CONFIG_NET_SCH_HTB=y
+CONFIG_NET_SCH_PRIO=y
+CONFIG_NET_SCH_MULTIQ=y
+CONFIG_NET_SCH_NETEM=y
+CONFIG_NET_SCH_INGRESS=y
+CONFIG_NET_CLS_FW=y
+CONFIG_NET_CLS_U32=y
+CONFIG_CLS_U32_MARK=y
+CONFIG_NET_CLS_FLOW=y
+CONFIG_NET_CLS_BPF=y
+CONFIG_NET_EMATCH=y
+CONFIG_NET_EMATCH_CMP=y
+CONFIG_NET_EMATCH_NBYTE=y
+CONFIG_NET_EMATCH_U32=y
+CONFIG_NET_EMATCH_META=y
+CONFIG_NET_EMATCH_TEXT=y
+CONFIG_NET_CLS_ACT=y
+CONFIG_NET_ACT_GACT=y
+CONFIG_NET_ACT_MIRRED=y
+CONFIG_NET_ACT_SKBEDIT=y
+CONFIG_DNS_RESOLVER=y
+CONFIG_QRTR=y
+CONFIG_QRTR_SMD=y
+CONFIG_QRTR_MHI=y
+CONFIG_SOCKEV_NLMCAST=y
+CONFIG_CAN=y
+CONFIG_CAN_MCP25XXFD=y
+CONFIG_BT=y
+CONFIG_MSM_BT_POWER=y
+CONFIG_BT_SLIM_QCA6390=y
+CONFIG_CFG80211=y
+CONFIG_CFG80211_CERTIFICATION_ONUS=y
+CONFIG_CFG80211_REG_CELLULAR_HINTS=y
+CONFIG_CFG80211_INTERNAL_REGDB=y
+CONFIG_RFKILL=y
+CONFIG_NFC_NQ=y
+CONFIG_FW_LOADER_USER_HELPER=y
+CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y
+CONFIG_REGMAP_WCD_IRQ=y
+CONFIG_REGMAP_ALLOW_WRITE_DEBUGFS=y
+CONFIG_DMA_CMA=y
+CONFIG_MHI_BUS=y
+CONFIG_MHI_DEBUG=y
+CONFIG_MHI_QCOM=y
+CONFIG_MHI_NETDEV=y
+CONFIG_MHI_UCI=y
+CONFIG_MHI_SATELLITE=y
+CONFIG_ZRAM=y
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_LOOP_MIN_COUNT=16
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_SIZE=8192
+CONFIG_HDCP_QSEECOM=y
+CONFIG_QSEECOM=y
+CONFIG_UID_SYS_STATS=y
+CONFIG_OKL4_USER_VIRQ=y
+CONFIG_WIGIG_SENSING_SPI=m
+CONFIG_QTI_XR_SMRTVWR_MISC=y
+CONFIG_SCSI=y
+CONFIG_BLK_DEV_SD=y
+CONFIG_CHR_DEV_SG=y
+CONFIG_CHR_DEV_SCH=y
+CONFIG_SCSI_CONSTANTS=y
+CONFIG_SCSI_LOGGING=y
+CONFIG_SCSI_SCAN_ASYNC=y
+CONFIG_SCSI_UFSHCD=y
+CONFIG_SCSI_UFSHCD_PLATFORM=y
+CONFIG_SCSI_UFS_QCOM=y
+CONFIG_SCSI_UFS_QCOM_ICE=y
+CONFIG_SCSI_UFSHCD_CMD_LOGGING=y
+CONFIG_MD=y
+CONFIG_BLK_DEV_DM=y
+CONFIG_DM_CRYPT=y
+CONFIG_DM_DEFAULT_KEY=y
+CONFIG_DM_SNAPSHOT=y
+CONFIG_DM_UEVENT=y
+CONFIG_DM_VERITY=y
+CONFIG_DM_VERITY_FEC=y
+CONFIG_NETDEVICES=y
+CONFIG_BONDING=y
+CONFIG_DUMMY=y
+CONFIG_TUN=y
+CONFIG_RMNET=y
+CONFIG_PPP=y
+CONFIG_PPP_BSDCOMP=y
+CONFIG_PPP_DEFLATE=y
+CONFIG_PPP_MPPE=y
+CONFIG_PPTP=y
+CONFIG_PPPOL2TP=y
+CONFIG_USB_RTL8152=y
+CONFIG_USB_LAN78XX=y
+CONFIG_USB_USBNET=y
+CONFIG_WIL6210=m
+CONFIG_WCNSS_MEM_PRE_ALLOC=y
+CONFIG_CLD_LL_CORE=y
+CONFIG_CNSS2=y
+CONFIG_CNSS2_DEBUG=y
+CONFIG_CNSS2_QMI=y
+CONFIG_CNSS_ASYNC=y
+CONFIG_BUS_AUTO_SUSPEND=y
+CONFIG_CNSS_QCA6390=y
+CONFIG_CNSS_GENL=y
+CONFIG_NVM=y
+CONFIG_NVM_PBLK=y
+CONFIG_INPUT_EVDEV=y
+CONFIG_KEYBOARD_GPIO=y
+# CONFIG_INPUT_MOUSE is not set
+CONFIG_INPUT_JOYSTICK=y
+CONFIG_JOYSTICK_XPAD=y
+CONFIG_JOYSTICK_XPAD_FF=y
+CONFIG_JOYSTICK_XPAD_LEDS=y
+CONFIG_INPUT_TABLET=y
+CONFIG_TABLET_USB_ACECAD=y
+CONFIG_TABLET_USB_AIPTEK=y
+CONFIG_TABLET_USB_GTCO=y
+CONFIG_TABLET_USB_HANWANG=y
+CONFIG_TABLET_USB_KBTAB=y
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_QPNP_POWER_ON=y
+CONFIG_INPUT_QTI_HAPTICS=y
+CONFIG_INPUT_UINPUT=y
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_DEVMEM is not set
+CONFIG_SERIAL_MSM_GENI=y
+CONFIG_SERIAL_MSM_GENI_CONSOLE=y
+CONFIG_SERIAL_MSM_GENI_HALF_SAMPLING=y
+CONFIG_TTY_PRINTK=y
+CONFIG_HW_RANDOM=y
+CONFIG_HW_RANDOM_MSM_LEGACY=y
+# CONFIG_DEVPORT is not set
+CONFIG_DIAG_CHAR=y
+CONFIG_MSM_ADSPRPC=y
+CONFIG_MSM_RDBG=m
+CONFIG_OKL4_PIPE=y
+CONFIG_I2C_CHARDEV=y
+CONFIG_I2C_QCOM_GENI=y
+CONFIG_I3C=y
+CONFIG_I3C_MASTER_QCOM_GENI=y
+CONFIG_SPI=y
+CONFIG_SPI_QCOM_GENI=y
+CONFIG_SPI_SPIDEV=y
+CONFIG_SPMI=y
+CONFIG_SPMI_MSM_PMIC_ARB_DEBUG=y
+CONFIG_PINCTRL_QCOM_SPMI_PMIC=y
+CONFIG_PINCTRL_KONA=y
+CONFIG_GPIO_SYSFS=y
+CONFIG_POWER_RESET_QCOM=y
+CONFIG_POWER_RESET_XGENE=y
+CONFIG_POWER_RESET_SYSCON=y
+CONFIG_QPNP_SMB5=y
+CONFIG_SMB1390_CHARGE_PUMP_PSY=y
+CONFIG_SMB1355_SLAVE_CHARGER=y
+CONFIG_QPNP_QNOVO5=y
+CONFIG_QPNP_FG_GEN4=y
+CONFIG_HL6111R=y
+CONFIG_THERMAL=y
+CONFIG_THERMAL_WRITABLE_TRIPS=y
+CONFIG_THERMAL_GOV_USER_SPACE=y
+CONFIG_THERMAL_GOV_LOW_LIMITS=y
+CONFIG_CPU_THERMAL=y
+CONFIG_DEVFREQ_THERMAL=y
+CONFIG_QCOM_SPMI_TEMP_ALARM=y
+CONFIG_THERMAL_TSENS=y
+CONFIG_QTI_ADC_TM=y
+CONFIG_QTI_VIRTUAL_SENSOR=y
+CONFIG_QTI_QMI_SENSOR=y
+CONFIG_QTI_BCL_PMIC5=y
+CONFIG_QTI_BCL_SOC_DRIVER=y
+CONFIG_QTI_QMI_COOLING_DEVICE=y
+CONFIG_QTI_THERMAL_LIMITS_DCVS=y
+CONFIG_QTI_CPU_ISOLATE_COOLING_DEVICE=y
+CONFIG_QTI_LIMITS_ISENSE_CDSP=y
+CONFIG_MFD_I2C_PMIC=y
+CONFIG_MFD_SPMI_PMIC=y
+CONFIG_REGULATOR=y
+CONFIG_REGULATOR_FIXED_VOLTAGE=y
+CONFIG_REGULATOR_PROXY_CONSUMER=y
+CONFIG_REGULATOR_QPNP_AMOLED=y
+CONFIG_REGULATOR_QPNP_LCDB=y
+CONFIG_REGULATOR_REFGEN=y
+CONFIG_REGULATOR_RPMH=y
+CONFIG_REGULATOR_STUB=y
+CONFIG_MEDIA_SUPPORT=y
+CONFIG_MEDIA_CAMERA_SUPPORT=y
+CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
+CONFIG_MEDIA_RADIO_SUPPORT=y
+CONFIG_MEDIA_CONTROLLER=y
+CONFIG_VIDEO_V4L2_SUBDEV_API=y
+CONFIG_VIDEO_ADV_DEBUG=y
+CONFIG_VIDEO_FIXED_MINOR_RANGES=y
+CONFIG_MEDIA_USB_SUPPORT=y
+CONFIG_USB_VIDEO_CLASS=y
+CONFIG_V4L_PLATFORM_DRIVERS=y
+CONFIG_MSM_CVP_V4L2=y
+CONFIG_MSM_NPU=y
+CONFIG_MSM_GLOBAL_SYNX=y
+CONFIG_DVB_MPQ=m
+CONFIG_DVB_MPQ_DEMUX=m
+CONFIG_DVB_MPQ_TSPP1=y
+CONFIG_TSPP=m
+CONFIG_VIDEO_V4L2_VIDEOBUF2_CORE=y
+CONFIG_I2C_RTC6226_QCA=y
+CONFIG_DRM=y
+# CONFIG_DRM_MSM is not set
+CONFIG_DRM_LONTIUM_LT9611UXC=y
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_QCOM_SPMI_WLED=y
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+CONFIG_SOUND=y
+CONFIG_SND=y
+CONFIG_SND_DYNAMIC_MINORS=y
+CONFIG_SND_USB_AUDIO=y
+CONFIG_SND_USB_AUDIO_QMI=y
+CONFIG_SND_SOC=y
+CONFIG_UHID=y
+CONFIG_HID_APPLE=y
+CONFIG_HID_ELECOM=y
+CONFIG_HID_MAGICMOUSE=y
+CONFIG_HID_MICROSOFT=y
+CONFIG_HID_MULTITOUCH=y
+CONFIG_HID_PLANTRONICS=y
+CONFIG_HID_SONY=y
+CONFIG_HID_QVR=y
+CONFIG_USB_HIDDEV=y
+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
+CONFIG_USB_XHCI_HCD=y
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_HCD_PLATFORM=y
+CONFIG_USB_OHCI_HCD=y
+CONFIG_USB_OHCI_HCD_PLATFORM=y
+CONFIG_USB_ACM=y
+CONFIG_USB_STORAGE=y
+CONFIG_USB_DWC3=y
+CONFIG_USB_DWC3_MSM=y
+CONFIG_USB_ISP1760=y
+CONFIG_USB_ISP1760_HOST_ROLE=y
+CONFIG_USB_SERIAL=y
+CONFIG_USB_SERIAL_CP210X=y
+CONFIG_USB_EHSET_TEST_FIXTURE=y
+CONFIG_USB_LINK_LAYER_TEST=y
+CONFIG_USB_REDRIVER_NB7VPQ904M=y
+CONFIG_NOP_USB_XCEIV=y
+CONFIG_USB_MSM_SSPHY_QMP=y
+CONFIG_MSM_HSUSB_PHY=y
+CONFIG_USB_QCOM_EMU_PHY=y
+CONFIG_USB_GADGET=y
+CONFIG_USB_GADGET_VBUS_DRAW=900
+CONFIG_USB_CONFIGFS=y
+CONFIG_USB_CONFIGFS_UEVENT=y
+CONFIG_USB_CONFIGFS_NCM=y
+CONFIG_USB_CONFIGFS_MASS_STORAGE=y
+CONFIG_USB_CONFIGFS_F_FS=y
+CONFIG_USB_CONFIGFS_F_ACC=y
+CONFIG_USB_CONFIGFS_F_AUDIO_SRC=y
+CONFIG_USB_CONFIGFS_F_UAC2=y
+CONFIG_USB_CONFIGFS_F_MIDI=y
+CONFIG_USB_CONFIGFS_F_HID=y
+CONFIG_USB_CONFIGFS_F_DIAG=y
+CONFIG_USB_CONFIGFS_F_CDEV=y
+CONFIG_USB_CONFIGFS_F_CCID=y
+CONFIG_USB_CONFIGFS_F_QDSS=y
+CONFIG_USB_CONFIGFS_F_GSI=y
+CONFIG_USB_CONFIGFS_F_MTP=y
+CONFIG_USB_CONFIGFS_F_PTP=y
+CONFIG_TYPEC=y
+CONFIG_USB_PD_POLICY=y
+CONFIG_QPNP_USB_PDPHY=y
+CONFIG_MMC=y
+CONFIG_MMC_BLOCK_MINORS=32
+CONFIG_MMC_BLOCK_DEFERRED_RESUME=y
+CONFIG_MMC_TEST=y
+CONFIG_MMC_IPC_LOGGING=y
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SDHCI_PLTFM=y
+CONFIG_MMC_SDHCI_MSM=y
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+CONFIG_LEDS_QTI_TRI_LED=y
+CONFIG_LEDS_QPNP_FLASH_V2=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_EDAC=y
+CONFIG_EDAC_KRYO_ARM64=y
+CONFIG_EDAC_KRYO_ARM64_PANIC_ON_CE=y
+CONFIG_EDAC_KRYO_ARM64_PANIC_ON_UE=y
+CONFIG_EDAC_QCOM=y
+CONFIG_EDAC_QCOM_LLCC_PANIC_ON_CE=y
+CONFIG_EDAC_QCOM_LLCC_PANIC_ON_UE=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_DRV_PM8XXX=y
+CONFIG_DMADEVICES=y
+CONFIG_QCOM_GPI_DMA=y
+CONFIG_QCOM_GPI_DMA_DEBUG=y
+CONFIG_DEBUG_DMA_BUF_REF=y
+CONFIG_UIO=y
+CONFIG_STAGING=y
+CONFIG_ASHMEM=y
+CONFIG_ION=y
+CONFIG_ION_POOL_AUTO_REFILL=y
+CONFIG_QPNP_REVID=y
+CONFIG_SPS=y
+CONFIG_SPS_SUPPORT_NDP_BAM=y
+CONFIG_GSI_REGISTER_VERSION_2=y
+CONFIG_IPA3=y
+CONFIG_IPA_WDI_UNIFIED_API=y
+CONFIG_RMNET_IPA3=y
+CONFIG_RNDIS_IPA=y
+CONFIG_IPA3_MHI_PRIME_MANAGER=y
+CONFIG_IPA_UT=y
+CONFIG_MSM_11AD=m
+CONFIG_USB_BAM=y
+CONFIG_QCOM_GENI_SE=y
+CONFIG_IPA3_REGDUMP=y
+CONFIG_QCOM_CLK_RPMH=y
+CONFIG_SPMI_PMIC_CLKDIV=y
+CONFIG_MSM_CLK_AOP_QMP=y
+CONFIG_MSM_VIDEOCC_KONA=y
+CONFIG_MSM_DISPCC_KONA=y
+CONFIG_MSM_CAMCC_KONA=y
+CONFIG_MSM_GPUCC_KONA=y
+CONFIG_MSM_DEBUGCC_KONA=y
+CONFIG_MSM_NPUCC_KONA=y
+CONFIG_HWSPINLOCK=y
+CONFIG_HWSPINLOCK_QCOM=y
+CONFIG_MAILBOX=y
+CONFIG_QCOM_APCS_IPC=y
+CONFIG_MSM_QMP=y
+CONFIG_IOMMU_IO_PGTABLE_FAST=y
+CONFIG_ARM_SMMU=y
+CONFIG_IOMMU_TLBSYNC_DEBUG=y
+CONFIG_QCOM_LAZY_MAPPING=y
+CONFIG_IOMMU_DEBUG=y
+CONFIG_IOMMU_TESTS=y
+CONFIG_RPMSG_CHAR=y
+CONFIG_RPMSG_QCOM_GLINK_SMEM=y
+CONFIG_RPMSG_QCOM_GLINK_SPSS=y
+CONFIG_QCOM_COMMAND_DB=y
+CONFIG_QCOM_MEM_OFFLINE=y
+CONFIG_BUG_ON_HW_MEM_ONLINE_FAIL=y
+CONFIG_OVERRIDE_MEMORY_LIMIT=y
+CONFIG_QCOM_RUN_QUEUE_STATS=y
+CONFIG_MSM_QBT_HANDLER=y
+CONFIG_QCOM_IPCC=y
+CONFIG_QCOM_LLCC=y
+CONFIG_QCOM_KONA_LLCC=y
+CONFIG_QCOM_LLCC_PERFMON=m
+CONFIG_QCOM_MDT_LOADER=y
+CONFIG_QPNP_PBS=y
+CONFIG_QCOM_QMI_HELPERS=y
+CONFIG_QCOM_QMI_RMNET=y
+CONFIG_QCOM_QMI_DFC=y
+CONFIG_RMNET_CTL=y
+CONFIG_RMNET_CTL_DEBUG=y
+CONFIG_QCOM_QMI_POWER_COLLAPSE=y
+CONFIG_QCOM_RPMH=y
+CONFIG_QCOM_SMEM=y
+CONFIG_QCOM_EARLY_RANDOM=y
+CONFIG_QCOM_MEMORY_DUMP_V2=y
+CONFIG_QCOM_SMP2P=y
+CONFIG_SETUP_SSR_NOTIF_TIMEOUTS=y
+CONFIG_SSR_SYSMON_NOTIF_TIMEOUT=20000
+CONFIG_SSR_SUBSYS_NOTIF_TIMEOUT=20000
+CONFIG_PANIC_ON_SSR_NOTIF_TIMEOUT=y
+CONFIG_QCOM_SECURE_BUFFER=y
+CONFIG_MSM_REMOTEQDSS=y
+CONFIG_MSM_SERVICE_LOCATOR=y
+CONFIG_MSM_SERVICE_NOTIFIER=y
+CONFIG_MSM_SUBSYSTEM_RESTART=y
+CONFIG_MSM_PIL=y
+CONFIG_MSM_SYSMON_QMI_COMM=y
+CONFIG_MSM_PIL_SSR_GENERIC=y
+CONFIG_MSM_BOOT_STATS=y
+CONFIG_QCOM_DCC_V2=y
+CONFIG_QCOM_EUD=y
+CONFIG_QCOM_MINIDUMP=y
+CONFIG_MSM_CORE_HANG_DETECT=y
+CONFIG_QCOM_FSA4480_I2C=y
+CONFIG_QCOM_WATCHDOG_V2=y
+CONFIG_QCOM_FORCE_WDOG_BITE_ON_PANIC=y
+CONFIG_QCOM_WDOG_IPI_ENABLE=y
+CONFIG_QCOM_BUS_SCALING=y
+CONFIG_QCOM_BUS_CONFIG_RPMH=y
+CONFIG_MSM_SPCOM=y
+CONFIG_MSM_SPSS_UTILS=y
+CONFIG_QSEE_IPC_IRQ_BRIDGE=y
+CONFIG_QCOM_GLINK=y
+CONFIG_QCOM_GLINK_PKT=y
+CONFIG_QCOM_SMP2P_SLEEPSTATE=y
+CONFIG_QCOM_QDSS_BRIDGE=y
+CONFIG_MSM_CDSP_LOADER=y
+CONFIG_QCOM_SMCINVOKE=y
+CONFIG_MSM_EVENT_TIMER=y
+CONFIG_MSM_PM=y
+CONFIG_QTI_RPM_STATS_LOG=y
+CONFIG_QTI_DDR_STATS_LOG=y
+CONFIG_QTEE_SHM_BRIDGE=y
+CONFIG_MSM_PERFORMANCE=y
+CONFIG_QMP_DEBUGFS_CLIENT=y
+CONFIG_QCOM_CDSP_RM=y
+CONFIG_QCOM_QHEE_ENABLE_MEM_PROTECTION=y
+CONFIG_DEVFREQ_GOV_PASSIVE=y
+CONFIG_QCOM_BIMC_BWMON=y
+CONFIG_ARM_MEMLAT_MON=y
+CONFIG_DEVFREQ_GOV_QCOM_BW_HWMON=y
+CONFIG_DEVFREQ_GOV_QCOM_CACHE_HWMON=y
+CONFIG_DEVFREQ_GOV_MEMLAT=y
+CONFIG_DEVFREQ_GOV_CDSPL3=y
+CONFIG_ARM_QCOM_DEVFREQ_FW=y
+CONFIG_DEVFREQ_SIMPLE_DEV=y
+CONFIG_QCOM_DEVFREQ_DEVBW=y
+CONFIG_ARM_QCOM_DEVFREQ_QOSLAT=y
+CONFIG_DEVFREQ_GOV_STATICMAP=y
+CONFIG_EXTCON_USB_GPIO=y
+CONFIG_IIO=y
+CONFIG_QCOM_SPMI_ADC5=y
+CONFIG_PWM=y
+CONFIG_PWM_QTI_LPG=y
+CONFIG_QCOM_PDC=y
+CONFIG_PHY_XGENE=y
+CONFIG_ARM_DSU_PMU=y
+CONFIG_QCOM_LLCC_PMU=y
+CONFIG_RAS=y
+CONFIG_ANDROID=y
+CONFIG_ANDROID_BINDER_IPC=y
+CONFIG_QCOM_QFPROM=y
+CONFIG_NVMEM_SPMI_SDAM=y
+CONFIG_SLIMBUS_MSM_NGD=y
+CONFIG_ESOC=y
+CONFIG_ESOC_DEV=y
+CONFIG_ESOC_CLIENT=y
+CONFIG_ESOC_DEBUG=y
+CONFIG_ESOC_MDM_4x=y
+CONFIG_ESOC_MDM_DRV=y
+CONFIG_ESOC_MDM_DBG_ENG=y
+CONFIG_SENSORS_SSC=y
+CONFIG_QCOM_KGSL=y
+CONFIG_EXT4_FS=y
+CONFIG_EXT4_FS_SECURITY=y
+CONFIG_F2FS_FS=y
+CONFIG_F2FS_FS_SECURITY=y
+CONFIG_FS_ENCRYPTION=y
+CONFIG_QUOTA=y
+CONFIG_QUOTA_NETLINK_INTERFACE=y
+CONFIG_QFMT_V2=y
+CONFIG_FUSE_FS=y
+CONFIG_OVERLAY_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_TMPFS=y
+CONFIG_TMPFS_POSIX_ACL=y
+CONFIG_EFIVAR_FS=y
+CONFIG_ECRYPT_FS=y
+CONFIG_ECRYPT_FS_MESSAGING=y
+CONFIG_SDCARD_FS=y
+# CONFIG_NETWORK_FILESYSTEMS is not set
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_ISO8859_1=y
+CONFIG_PFK=y
+CONFIG_SECURITY_PERF_EVENTS_RESTRICT=y
+CONFIG_SECURITY=y
+CONFIG_HARDENED_USERCOPY=y
+CONFIG_HARDENED_USERCOPY_PAGESPAN=y
+CONFIG_FORTIFY_SOURCE=y
+CONFIG_SECURITY_SELINUX=y
+CONFIG_SECURITY_SMACK=y
+CONFIG_SECURITY_APPARMOR=y
+CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE=0
+CONFIG_CRYPTO_CCM=y
+CONFIG_CRYPTO_GCM=y
+CONFIG_CRYPTO_XCBC=y
+CONFIG_CRYPTO_MD4=y
+CONFIG_CRYPTO_TWOFISH=y
+CONFIG_CRYPTO_ANSI_CPRNG=y
+CONFIG_CRYPTO_DEV_QCOM_MSM_QCE=y
+CONFIG_CRYPTO_DEV_QCRYPTO=y
+CONFIG_CRYPTO_DEV_QCEDEV=y
+CONFIG_CRYPTO_DEV_QCOM_ICE=y
+CONFIG_XZ_DEC=y
+CONFIG_PRINTK_TIME=y
+CONFIG_DYNAMIC_DEBUG=y
+CONFIG_DEBUG_CONSOLE_UNHASHED_POINTERS=y
+CONFIG_DEBUG_MODULE_LOAD_INFO=y
+CONFIG_DEBUG_INFO=y
+CONFIG_PAGE_OWNER=y
+CONFIG_PAGE_OWNER_ENABLE_DEFAULT=y
+CONFIG_DEBUG_SECTION_MISMATCH=y
+# CONFIG_SECTION_MISMATCH_WARN_ONLY is not set
+CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_DEBUG_PAGEALLOC=y
+CONFIG_SLUB_DEBUG_PANIC_ON=y
+CONFIG_DEBUG_PANIC_ON_OOM=y
+CONFIG_DEBUG_PAGEALLOC_ENABLE_DEFAULT=y
+CONFIG_PAGE_POISONING=y
+CONFIG_PAGE_POISONING_ENABLE_DEFAULT=y
+CONFIG_SLUB_DEBUG_ON=y
+CONFIG_DEBUG_KMEMLEAK=y
+CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=4000
+CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=y
+CONFIG_DEBUG_STACK_USAGE=y
+CONFIG_DEBUG_MEMORY_INIT=y
+CONFIG_SOFTLOCKUP_DETECTOR=y
+CONFIG_WQ_WATCHDOG=y
+CONFIG_PANIC_TIMEOUT=-1
+CONFIG_PANIC_ON_SCHED_BUG=y
+CONFIG_PANIC_ON_RT_THROTTLING=y
+CONFIG_SCHEDSTATS=y
+CONFIG_SCHED_STACK_END_CHECK=y
+CONFIG_PROVE_LOCKING=y
+CONFIG_LOCK_STAT=y
+CONFIG_DEBUG_ATOMIC_SLEEP=y
+CONFIG_LOCK_TORTURE_TEST=m
+CONFIG_DEBUG_SG=y
+CONFIG_DEBUG_NOTIFIERS=y
+CONFIG_DEBUG_CREDENTIALS=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_FAULT_INJECTION=y
+CONFIG_FAIL_PAGE_ALLOC=y
+CONFIG_FAULT_INJECTION_DEBUG_FS=y
+CONFIG_UFS_FAULT_INJECTION=y
+CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y
+CONFIG_IPC_LOGGING=y
+CONFIG_QCOM_RTB=y
+CONFIG_QCOM_RTB_SEPARATE_CPUS=y
+CONFIG_FUNCTION_TRACER=y
+CONFIG_PREEMPTIRQ_EVENTS=y
+CONFIG_IRQSOFF_TRACER=y
+CONFIG_PREEMPT_TRACER=y
+CONFIG_BLK_DEV_IO_TRACE=y
+CONFIG_LKDTM=m
+CONFIG_ATOMIC64_SELFTEST=m
+CONFIG_TEST_USER_COPY=m
+CONFIG_MEMTEST=y
+CONFIG_BUG_ON_DATA_CORRUPTION=y
+CONFIG_PANIC_ON_DATA_CORRUPTION=y
+CONFIG_ARM64_STRICT_BREAK_BEFORE_MAKE=y
+CONFIG_CORESIGHT=y
+CONFIG_CORESIGHT_LINK_AND_SINK_TMC=y
+CONFIG_CORESIGHT_SOURCE_ETM4X=y
+CONFIG_CORESIGHT_DYNAMIC_REPLICATOR=y
+CONFIG_CORESIGHT_STM=y
+CONFIG_CORESIGHT_CTI=y
+CONFIG_CORESIGHT_TPDA=y
+CONFIG_CORESIGHT_TPDM=y
+CONFIG_CORESIGHT_HWEVENT=y
+CONFIG_CORESIGHT_DUMMY=y
+CONFIG_CORESIGHT_REMOTE_ETM=y
+CONFIG_CORESIGHT_TGU=y
diff --git a/arch/arm64/configs/vendor/kona-perf_defconfig b/arch/arm64/configs/vendor/kona-perf_defconfig
index e5faae4..337ce90 100644
--- a/arch/arm64/configs/vendor/kona-perf_defconfig
+++ b/arch/arm64/configs/vendor/kona-perf_defconfig
@@ -158,6 +158,7 @@
 CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y
 CONFIG_NETFILTER_XT_TARGET_CONNMARK=y
 CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y
+CONFIG_NETFILTER_XT_TARGET_DSCP=y
 CONFIG_NETFILTER_XT_TARGET_IDLETIMER=y
 CONFIG_NETFILTER_XT_TARGET_HARDIDLETIMER=y
 CONFIG_NETFILTER_XT_TARGET_LOG=y
@@ -222,6 +223,8 @@
 CONFIG_IP6_NF_TARGET_REJECT=y
 CONFIG_IP6_NF_MANGLE=y
 CONFIG_IP6_NF_RAW=y
+CONFIG_IP6_NF_NAT=y
+CONFIG_IP6_NF_TARGET_MASQUERADE=y
 CONFIG_BRIDGE_NF_EBTABLES=y
 CONFIG_BRIDGE_EBT_BROUTE=y
 CONFIG_IP_SCTP=y
@@ -283,6 +286,7 @@
 CONFIG_OKL4_USER_VIRQ=y
 CONFIG_WIGIG_SENSING_SPI=m
 CONFIG_QTI_XR_SMRTVWR_MISC=y
+CONFIG_QTI_MAXIM_FAN_CONTROLLER=y
 CONFIG_SCSI=y
 CONFIG_BLK_DEV_SD=y
 CONFIG_CHR_DEV_SG=y
@@ -348,7 +352,6 @@
 CONFIG_INPUT_QTI_HAPTICS=y
 CONFIG_INPUT_UINPUT=y
 # CONFIG_SERIO_SERPORT is not set
-# CONFIG_VT is not set
 # CONFIG_LEGACY_PTYS is not set
 # CONFIG_DEVMEM is not set
 CONFIG_SERIAL_MSM_GENI=y
@@ -424,14 +427,16 @@
 CONFIG_MSM_GLOBAL_SYNX=y
 CONFIG_DVB_MPQ=m
 CONFIG_DVB_MPQ_DEMUX=m
-CONFIG_DVB_MPQ_TSPP1=y
-CONFIG_TSPP=m
+CONFIG_DVB_MPQ_SW=y
+CONFIG_VIDEO_V4L2_VIDEOBUF2_CORE=y
 CONFIG_I2C_RTC6226_QCA=y
 CONFIG_DRM=y
+CONFIG_DRM_FBDEV_EMULATION=y
 # CONFIG_DRM_MSM is not set
 CONFIG_DRM_LONTIUM_LT9611UXC=y
 CONFIG_FB_ARMCLCD=y
 CONFIG_BACKLIGHT_QCOM_SPMI_WLED=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
 CONFIG_LOGO=y
 # CONFIG_LOGO_LINUX_MONO is not set
 # CONFIG_LOGO_LINUX_VGA16 is not set
@@ -580,7 +585,6 @@
 CONFIG_SSR_SUBSYS_NOTIF_TIMEOUT=20000
 CONFIG_PANIC_ON_SSR_NOTIF_TIMEOUT=y
 CONFIG_QCOM_SECURE_BUFFER=y
-CONFIG_MSM_REMOTEQDSS=y
 CONFIG_MSM_SERVICE_LOCATOR=y
 CONFIG_MSM_SERVICE_NOTIFIER=y
 CONFIG_MSM_SUBSYSTEM_RESTART=y
@@ -632,6 +636,7 @@
 CONFIG_PWM=y
 CONFIG_PWM_QTI_LPG=y
 CONFIG_QCOM_PDC=y
+CONFIG_ARM_DSU_PMU=y
 CONFIG_QCOM_LLCC_PMU=y
 CONFIG_RAS=y
 CONFIG_ANDROID=y
diff --git a/arch/arm64/configs/vendor/kona_defconfig b/arch/arm64/configs/vendor/kona_defconfig
index bfc8ced..c351ca2 100644
--- a/arch/arm64/configs/vendor/kona_defconfig
+++ b/arch/arm64/configs/vendor/kona_defconfig
@@ -165,6 +165,7 @@
 CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y
 CONFIG_NETFILTER_XT_TARGET_CONNMARK=y
 CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y
+CONFIG_NETFILTER_XT_TARGET_DSCP=y
 CONFIG_NETFILTER_XT_TARGET_IDLETIMER=y
 CONFIG_NETFILTER_XT_TARGET_HARDIDLETIMER=y
 CONFIG_NETFILTER_XT_TARGET_LOG=y
@@ -229,6 +230,8 @@
 CONFIG_IP6_NF_TARGET_REJECT=y
 CONFIG_IP6_NF_MANGLE=y
 CONFIG_IP6_NF_RAW=y
+CONFIG_IP6_NF_NAT=y
+CONFIG_IP6_NF_TARGET_MASQUERADE=y
 CONFIG_BRIDGE_NF_EBTABLES=y
 CONFIG_BRIDGE_EBT_BROUTE=y
 CONFIG_IP_SCTP=y
@@ -264,6 +267,8 @@
 CONFIG_QRTR_SMD=y
 CONFIG_QRTR_MHI=y
 CONFIG_SOCKEV_NLMCAST=y
+CONFIG_CAN=y
+CONFIG_CAN_MCP25XXFD=y
 CONFIG_BT=y
 CONFIG_MSM_BT_POWER=y
 CONFIG_BT_SLIM_QCA6390=y
@@ -295,6 +300,7 @@
 CONFIG_OKL4_USER_VIRQ=y
 CONFIG_WIGIG_SENSING_SPI=m
 CONFIG_QTI_XR_SMRTVWR_MISC=y
+CONFIG_QTI_MAXIM_FAN_CONTROLLER=y
 CONFIG_SCSI=y
 CONFIG_BLK_DEV_SD=y
 CONFIG_CHR_DEV_SG=y
@@ -360,7 +366,6 @@
 CONFIG_INPUT_QTI_HAPTICS=y
 CONFIG_INPUT_UINPUT=y
 # CONFIG_SERIO_SERPORT is not set
-# CONFIG_VT is not set
 # CONFIG_LEGACY_PTYS is not set
 # CONFIG_DEVMEM is not set
 CONFIG_SERIAL_MSM_GENI=y
@@ -438,15 +443,17 @@
 CONFIG_MSM_GLOBAL_SYNX=y
 CONFIG_DVB_MPQ=m
 CONFIG_DVB_MPQ_DEMUX=m
-CONFIG_DVB_MPQ_TSPP1=y
-CONFIG_TSPP=m
+CONFIG_DVB_MPQ_SW=y
+CONFIG_VIDEO_V4L2_VIDEOBUF2_CORE=y
 CONFIG_I2C_RTC6226_QCA=y
 CONFIG_DRM=y
+CONFIG_DRM_FBDEV_EMULATION=y
 # CONFIG_DRM_MSM is not set
 CONFIG_DRM_LONTIUM_LT9611UXC=y
 CONFIG_BACKLIGHT_LCD_SUPPORT=y
 CONFIG_BACKLIGHT_CLASS_DEVICE=y
 CONFIG_BACKLIGHT_QCOM_SPMI_WLED=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
 CONFIG_LOGO=y
 # CONFIG_LOGO_LINUX_MONO is not set
 # CONFIG_LOGO_LINUX_VGA16 is not set
@@ -660,6 +667,7 @@
 CONFIG_PWM_QTI_LPG=y
 CONFIG_QCOM_PDC=y
 CONFIG_PHY_XGENE=y
+CONFIG_ARM_DSU_PMU=y
 CONFIG_QCOM_LLCC_PMU=y
 CONFIG_RAS=y
 CONFIG_ANDROID=y
@@ -775,7 +783,6 @@
 CONFIG_MEMTEST=y
 CONFIG_BUG_ON_DATA_CORRUPTION=y
 CONFIG_PANIC_ON_DATA_CORRUPTION=y
-CONFIG_PID_IN_CONTEXTIDR=y
 CONFIG_ARM64_STRICT_BREAK_BEFORE_MAKE=y
 CONFIG_CORESIGHT=y
 CONFIG_CORESIGHT_LINK_AND_SINK_TMC=y
diff --git a/arch/arm64/configs/vendor/lito-perf_defconfig b/arch/arm64/configs/vendor/lito-perf_defconfig
index 7829f72..142e9ae 100644
--- a/arch/arm64/configs/vendor/lito-perf_defconfig
+++ b/arch/arm64/configs/vendor/lito-perf_defconfig
@@ -51,7 +51,6 @@
 CONFIG_PCI=y
 CONFIG_SCHED_MC=y
 CONFIG_NR_CPUS=8
-CONFIG_HZ_100=y
 CONFIG_SECCOMP=y
 # CONFIG_UNMAP_KERNEL_AT_EL0 is not set
 CONFIG_ARM64_SSBD=y
@@ -160,6 +159,7 @@
 CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y
 CONFIG_NETFILTER_XT_TARGET_CONNMARK=y
 CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y
+CONFIG_NETFILTER_XT_TARGET_DSCP=y
 CONFIG_NETFILTER_XT_TARGET_IDLETIMER=y
 CONFIG_NETFILTER_XT_TARGET_HARDIDLETIMER=y
 CONFIG_NETFILTER_XT_TARGET_LOG=y
@@ -419,9 +419,7 @@
 CONFIG_DVB_MPQ=m
 CONFIG_DVB_MPQ_DEMUX=m
 CONFIG_DVB_MPQ_SW=y
-CONFIG_V4L_TEST_DRIVERS=y
-CONFIG_VIDEO_VIM2M=m
-CONFIG_VIDEO_VICODEC=y
+CONFIG_VIDEO_V4L2_VIDEOBUF2_CORE=y
 CONFIG_DRM=y
 # CONFIG_DRM_MSM is not set
 CONFIG_BACKLIGHT_LCD_SUPPORT=y
@@ -460,6 +458,7 @@
 CONFIG_USB_LINK_LAYER_TEST=y
 CONFIG_NOP_USB_XCEIV=y
 CONFIG_USB_MSM_SSPHY_QMP=y
+CONFIG_MSM_QUSB_PHY=y
 CONFIG_MSM_HSUSB_PHY=y
 CONFIG_USB_QCOM_EMU_PHY=y
 CONFIG_USB_GADGET=y
@@ -519,6 +518,7 @@
 CONFIG_RMNET_IPA3=y
 CONFIG_RNDIS_IPA=y
 CONFIG_IPA_UT=y
+CONFIG_USB_BAM=y
 CONFIG_QCOM_GENI_SE=y
 # CONFIG_QCOM_A53PLL is not set
 CONFIG_QCOM_CLK_RPMH=y
@@ -674,7 +674,7 @@
 CONFIG_PAGE_OWNER=y
 # CONFIG_SECTION_MISMATCH_WARN_ONLY is not set
 CONFIG_MAGIC_SYSRQ=y
-CONFIG_PANIC_TIMEOUT=-1
+CONFIG_PANIC_TIMEOUT=5
 CONFIG_SCHEDSTATS=y
 # CONFIG_DEBUG_PREEMPT is not set
 CONFIG_IPC_LOGGING=y
@@ -685,6 +685,7 @@
 CONFIG_CORESIGHT_DYNAMIC_REPLICATOR=y
 CONFIG_CORESIGHT_STM=y
 CONFIG_CORESIGHT_CTI=y
+CONFIG_CORESIGHT_CTI_SAVE_DISABLE=y
 CONFIG_CORESIGHT_TPDA=y
 CONFIG_CORESIGHT_TPDM=y
 CONFIG_CORESIGHT_HWEVENT=y
diff --git a/arch/arm64/configs/vendor/lito_defconfig b/arch/arm64/configs/vendor/lito_defconfig
index c0c50c2..9b4fe41 100644
--- a/arch/arm64/configs/vendor/lito_defconfig
+++ b/arch/arm64/configs/vendor/lito_defconfig
@@ -51,7 +51,6 @@
 CONFIG_PCI=y
 CONFIG_SCHED_MC=y
 CONFIG_NR_CPUS=8
-CONFIG_HZ_100=y
 CONFIG_SECCOMP=y
 # CONFIG_UNMAP_KERNEL_AT_EL0 is not set
 CONFIG_ARM64_SSBD=y
@@ -165,6 +164,7 @@
 CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y
 CONFIG_NETFILTER_XT_TARGET_CONNMARK=y
 CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y
+CONFIG_NETFILTER_XT_TARGET_DSCP=y
 CONFIG_NETFILTER_XT_TARGET_IDLETIMER=y
 CONFIG_NETFILTER_XT_TARGET_HARDIDLETIMER=y
 CONFIG_NETFILTER_XT_TARGET_LOG=y
@@ -427,9 +427,7 @@
 CONFIG_DVB_MPQ=m
 CONFIG_DVB_MPQ_DEMUX=m
 CONFIG_DVB_MPQ_SW=y
-CONFIG_V4L_TEST_DRIVERS=y
-CONFIG_VIDEO_VIM2M=y
-CONFIG_VIDEO_VICODEC=y
+CONFIG_VIDEO_V4L2_VIDEOBUF2_CORE=y
 CONFIG_DRM=y
 # CONFIG_DRM_MSM is not set
 CONFIG_BACKLIGHT_LCD_SUPPORT=y
@@ -468,6 +466,7 @@
 CONFIG_USB_LINK_LAYER_TEST=y
 CONFIG_NOP_USB_XCEIV=y
 CONFIG_USB_MSM_SSPHY_QMP=y
+CONFIG_MSM_QUSB_PHY=y
 CONFIG_MSM_HSUSB_PHY=y
 CONFIG_USB_QCOM_EMU_PHY=y
 CONFIG_USB_GADGET=y
@@ -715,7 +714,7 @@
 CONFIG_DEBUG_MEMORY_INIT=y
 CONFIG_SOFTLOCKUP_DETECTOR=y
 CONFIG_WQ_WATCHDOG=y
-CONFIG_PANIC_TIMEOUT=-1
+CONFIG_PANIC_TIMEOUT=5
 CONFIG_PANIC_ON_SCHED_BUG=y
 CONFIG_PANIC_ON_RT_THROTTLING=y
 CONFIG_SCHEDSTATS=y
@@ -746,7 +745,6 @@
 CONFIG_MEMTEST=y
 CONFIG_BUG_ON_DATA_CORRUPTION=y
 CONFIG_PANIC_ON_DATA_CORRUPTION=y
-CONFIG_PID_IN_CONTEXTIDR=y
 CONFIG_ARM64_STRICT_BREAK_BEFORE_MAKE=y
 CONFIG_CORESIGHT=y
 CONFIG_CORESIGHT_LINK_AND_SINK_TMC=y
diff --git a/arch/arm64/include/asm/alternative.h b/arch/arm64/include/asm/alternative.h
index 4b650ec..c3a08d6 100644
--- a/arch/arm64/include/asm/alternative.h
+++ b/arch/arm64/include/asm/alternative.h
@@ -35,13 +35,16 @@
 static inline void apply_alternatives_module(void *start, size_t length) { }
 #endif
 
-#define ALTINSTR_ENTRY(feature,cb)					      \
+#define ALTINSTR_ENTRY(feature)					              \
 	" .word 661b - .\n"				/* label           */ \
-	" .if " __stringify(cb) " == 0\n"				      \
 	" .word 663f - .\n"				/* new instruction */ \
-	" .else\n"							      \
+	" .hword " __stringify(feature) "\n"		/* feature bit     */ \
+	" .byte 662b-661b\n"				/* source len      */ \
+	" .byte 664f-663f\n"				/* replacement len */
+
+#define ALTINSTR_ENTRY_CB(feature,cb)					      \
+	" .word 661b - .\n"				/* label           */ \
 	" .word " __stringify(cb) "- .\n"		/* callback */	      \
-	" .endif\n"							      \
 	" .hword " __stringify(feature) "\n"		/* feature bit     */ \
 	" .byte 662b-661b\n"				/* source len      */ \
 	" .byte 664f-663f\n"				/* replacement len */
@@ -62,15 +65,14 @@
  *
  * Alternatives with callbacks do not generate replacement instructions.
  */
-#define __ALTERNATIVE_CFG(oldinstr, newinstr, feature, cfg_enabled, cb)	\
+#define __ALTERNATIVE_CFG(oldinstr, newinstr, feature, cfg_enabled)	\
 	".if "__stringify(cfg_enabled)" == 1\n"				\
 	"661:\n\t"							\
 	oldinstr "\n"							\
 	"662:\n"							\
 	".pushsection .altinstructions,\"a\"\n"				\
-	ALTINSTR_ENTRY(feature,cb)					\
+	ALTINSTR_ENTRY(feature)						\
 	".popsection\n"							\
-	" .if " __stringify(cb) " == 0\n"				\
 	".pushsection .altinstr_replacement, \"a\"\n"			\
 	"663:\n\t"							\
 	newinstr "\n"							\
@@ -78,17 +80,25 @@
 	".popsection\n\t"						\
 	".org	. - (664b-663b) + (662b-661b)\n\t"			\
 	".org	. - (662b-661b) + (664b-663b)\n"			\
-	".else\n\t"							\
+	".endif\n"
+
+#define __ALTERNATIVE_CFG_CB(oldinstr, feature, cfg_enabled, cb)	\
+	".if "__stringify(cfg_enabled)" == 1\n"				\
+	"661:\n\t"							\
+	oldinstr "\n"							\
+	"662:\n"							\
+	".pushsection .altinstructions,\"a\"\n"				\
+	ALTINSTR_ENTRY_CB(feature,cb)					\
+	".popsection\n"							\
 	"663:\n\t"							\
 	"664:\n\t"							\
-	".endif\n"							\
 	".endif\n"
 
 #define _ALTERNATIVE_CFG(oldinstr, newinstr, feature, cfg, ...)	\
-	__ALTERNATIVE_CFG(oldinstr, newinstr, feature, IS_ENABLED(cfg), 0)
+	__ALTERNATIVE_CFG(oldinstr, newinstr, feature, IS_ENABLED(cfg))
 
 #define ALTERNATIVE_CB(oldinstr, cb) \
-	__ALTERNATIVE_CFG(oldinstr, "NOT_AN_INSTRUCTION", ARM64_CB_PATCH, 1, cb)
+	__ALTERNATIVE_CFG_CB(oldinstr, ARM64_CB_PATCH, 1, cb)
 #else
 
 #include <asm/assembler.h>
diff --git a/arch/arm64/include/asm/asm-uaccess.h b/arch/arm64/include/asm/asm-uaccess.h
index 4128bec..d8b2ce5 100644
--- a/arch/arm64/include/asm/asm-uaccess.h
+++ b/arch/arm64/include/asm/asm-uaccess.h
@@ -78,10 +78,9 @@
 /*
  * Remove the address tag from a virtual address, if present.
  */
-	.macro	clear_address_tag, dst, addr
-	tst	\addr, #(1 << 55)
-	bic	\dst, \addr, #(0xff << 56)
-	csel	\dst, \dst, \addr, eq
+	.macro	untagged_addr, dst, addr
+	sbfx	\dst, \addr, #0, #56
+	and	\dst, \dst, \addr
 	.endm
 
 #endif
diff --git a/arch/arm64/include/asm/assembler.h b/arch/arm64/include/asm/assembler.h
index 50d3ac6..886669b 100644
--- a/arch/arm64/include/asm/assembler.h
+++ b/arch/arm64/include/asm/assembler.h
@@ -23,6 +23,8 @@
 #ifndef __ASM_ASSEMBLER_H
 #define __ASM_ASSEMBLER_H
 
+#include <asm-generic/export.h>
+
 #include <asm/asm-offsets.h>
 #include <asm/cpufeature.h>
 #include <asm/debug-monitors.h>
@@ -500,6 +502,13 @@
 #else
 #define NOKPROBE(x)
 #endif
+
+#ifdef CONFIG_KASAN
+#define EXPORT_SYMBOL_NOKASAN(name)
+#else
+#define EXPORT_SYMBOL_NOKASAN(name)	EXPORT_SYMBOL(name)
+#endif
+
 	/*
 	 * Emit a 64-bit absolute little endian symbol reference in a way that
 	 * ensures that it will be resolved at build time, even when building a
diff --git a/arch/arm64/include/asm/brk-imm.h b/arch/arm64/include/asm/brk-imm.h
index ed693c5..2945fe6 100644
--- a/arch/arm64/include/asm/brk-imm.h
+++ b/arch/arm64/include/asm/brk-imm.h
@@ -16,10 +16,12 @@
  * 0x400: for dynamic BRK instruction
  * 0x401: for compile time BRK instruction
  * 0x800: kernel-mode BUG() and WARN() traps
+ * 0x9xx: tag-based KASAN trap (allowed values 0x900 - 0x9ff)
  */
 #define FAULT_BRK_IMM			0x100
 #define KGDB_DYN_DBG_BRK_IMM		0x400
 #define KGDB_COMPILED_DBG_BRK_IMM	0x401
 #define BUG_BRK_IMM			0x800
+#define KASAN_BRK_IMM			0x900
 
 #endif
diff --git a/arch/arm64/include/asm/cache.h b/arch/arm64/include/asm/cache.h
index 5ee5bca..88dab0d 100644
--- a/arch/arm64/include/asm/cache.h
+++ b/arch/arm64/include/asm/cache.h
@@ -49,6 +49,10 @@
  */
 #define ARCH_DMA_MINALIGN	(128)
 
+#ifdef CONFIG_KASAN_SW_TAGS
+#define ARCH_SLAB_MINALIGN	(1ULL << KASAN_SHADOW_SCALE_SHIFT)
+#endif
+
 #ifndef __ASSEMBLY__
 
 #include <linux/bitops.h>
diff --git a/arch/arm64/include/asm/kasan.h b/arch/arm64/include/asm/kasan.h
index 8758bb0..b52aacd 100644
--- a/arch/arm64/include/asm/kasan.h
+++ b/arch/arm64/include/asm/kasan.h
@@ -4,12 +4,16 @@
 
 #ifndef __ASSEMBLY__
 
-#ifdef CONFIG_KASAN
-
 #include <linux/linkage.h>
 #include <asm/memory.h>
 #include <asm/pgtable-types.h>
 
+#define arch_kasan_set_tag(addr, tag)	__tag_set(addr, tag)
+#define arch_kasan_reset_tag(addr)	__tag_reset(addr)
+#define arch_kasan_get_tag(addr)	__tag_get(addr)
+
+#ifdef CONFIG_KASAN
+
 /*
  * KASAN_SHADOW_START: beginning of the kernel virtual addresses.
  * KASAN_SHADOW_END: KASAN_SHADOW_START + 1/N of kernel virtual addresses,
diff --git a/arch/arm64/include/asm/memory.h b/arch/arm64/include/asm/memory.h
index 4189d86..7feb23f 100644
--- a/arch/arm64/include/asm/memory.h
+++ b/arch/arm64/include/asm/memory.h
@@ -74,19 +74,13 @@
 #define KERNEL_END        _end
 
 /*
- * KASAN requires 1/8th of the kernel virtual address space for the shadow
- * region. KASAN can bloat the stack significantly, so double the (minimum)
- * stack size when KASAN is in use, and then double it again if KASAN_EXTRA is
- * on.
+ * Generic and tag-based KASAN require 1/8th and 1/16th of the kernel virtual
+ * address space for the shadow region respectively. They can bloat the stack
+ * significantly, so double the (minimum) stack size when they are in use.
  */
 #ifdef CONFIG_KASAN
-#define KASAN_SHADOW_SCALE_SHIFT 3
 #define KASAN_SHADOW_SIZE	(UL(1) << (VA_BITS - KASAN_SHADOW_SCALE_SHIFT))
-#ifdef CONFIG_KASAN_EXTRA
-#define KASAN_THREAD_SHIFT	2
-#else
 #define KASAN_THREAD_SHIFT	1
-#endif /* CONFIG_KASAN_EXTRA */
 #else
 #define KASAN_SHADOW_SIZE	(0)
 #define KASAN_THREAD_SHIFT	0
@@ -221,6 +215,36 @@
 #define PHYS_PFN_OFFSET	(PHYS_OFFSET >> PAGE_SHIFT)
 
 /*
+ * When dealing with data aborts, watchpoints, or instruction traps we may end
+ * up with a tagged userland pointer. Clear the tag to get a sane pointer to
+ * pass on to access_ok(), for instance.
+ */
+#define __untagged_addr(addr)	\
+	((__force __typeof__(addr))sign_extend64((__force u64)(addr), 55))
+
+#define untagged_addr(addr)	({					\
+	u64 __addr = (__force u64)addr;					\
+	__addr &= __untagged_addr(__addr);				\
+	(__force __typeof__(addr))__addr;				\
+})
+
+#ifdef CONFIG_KASAN_SW_TAGS
+#define __tag_shifted(tag)	((u64)(tag) << 56)
+#define __tag_reset(addr)	__untagged_addr(addr)
+#define __tag_get(addr)		(__u8)((u64)(addr) >> 56)
+#else
+#define __tag_shifted(tag)	0UL
+#define __tag_reset(addr)	(addr)
+#define __tag_get(addr)		0
+#endif
+
+static inline const void *__tag_set(const void *addr, u8 tag)
+{
+	u64 __addr = (u64)addr & ~__tag_shifted(0xff);
+	return (const void *)(__addr | __tag_shifted(tag));
+}
+
+/*
  * Physical vs virtual RAM address space conversion.  These are
  * private definitions which should NOT be used outside memory.h
  * files.  Use virt_to_phys/phys_to_virt/__pa/__va instead.
@@ -291,6 +315,22 @@
 #define sym_to_pfn(x)	    __phys_to_pfn(__pa_symbol(x))
 
 /*
+ * With non-canonical CFI jump tables, the compiler replaces function
+ * address references with the address of the function's CFI jump
+ * table entry. This results in __pa_symbol(function) returning the
+ * physical address of the jump table entry, which can lead to address
+ * space confusion since the jump table points to the function's
+ * virtual address. Therefore, use inline assembly to ensure we are
+ * always taking the address of the actual function.
+ */
+#define __pa_function(x) ({						\
+	unsigned long addr;						\
+	asm("adrp %0, " __stringify(x) "\n\t"				\
+	    "add  %0, %0, :lo12:" __stringify(x) : "=r" (addr));	\
+	__pa_symbol(addr);						\
+})
+
+/*
  *  virt_to_page(k)	convert a _valid_ virtual address to struct page *
  *  virt_addr_valid(k)	indicates whether a virtual address is valid
  */
@@ -303,7 +343,14 @@
 #define __virt_to_pgoff(kaddr)	(((u64)(kaddr) & ~PAGE_OFFSET) / PAGE_SIZE * sizeof(struct page))
 #define __page_to_voff(kaddr)	(((u64)(kaddr) & ~VMEMMAP_START) * PAGE_SIZE / sizeof(struct page))
 
-#define page_to_virt(page)	((void *)((__page_to_voff(page)) | PAGE_OFFSET))
+#define page_to_virt(page)	({					\
+	unsigned long __addr =						\
+		((__page_to_voff(page)) | PAGE_OFFSET);			\
+	const void *__addr_tag =					\
+		__tag_set((void *)__addr, page_kasan_tag(page));	\
+	((void *)__addr_tag);						\
+})
+
 #define virt_to_page(vaddr)	((struct page *)((__virt_to_pgoff(vaddr)) | VMEMMAP_START))
 
 #define _virt_addr_valid(kaddr)	pfn_valid((((u64)(kaddr) & ~PAGE_OFFSET) \
@@ -311,9 +358,10 @@
 #endif
 #endif
 
-#define _virt_addr_is_linear(kaddr)	(((u64)(kaddr)) >= PAGE_OFFSET)
-#define virt_addr_valid(kaddr)		(_virt_addr_is_linear(kaddr) && \
-					 _virt_addr_valid(kaddr))
+#define _virt_addr_is_linear(kaddr)	\
+	(__tag_reset((u64)(kaddr)) >= PAGE_OFFSET)
+#define virt_addr_valid(kaddr)		\
+	(_virt_addr_is_linear(kaddr) && _virt_addr_valid(kaddr))
 
 #include <asm-generic/memory_model.h>
 
diff --git a/arch/arm64/include/asm/mmu_context.h b/arch/arm64/include/asm/mmu_context.h
index b5c2d7a..ed992d8 100644
--- a/arch/arm64/include/asm/mmu_context.h
+++ b/arch/arm64/include/asm/mmu_context.h
@@ -155,7 +155,7 @@
 
 	phys_addr_t pgd_phys = virt_to_phys(pgdp);
 
-	replace_phys = (void *)__pa_symbol(idmap_cpu_replace_ttbr1);
+	replace_phys = (void *)__pa_function(idmap_cpu_replace_ttbr1);
 
 	cpu_install_idmap();
 	replace_phys(pgd_phys);
diff --git a/arch/arm64/include/asm/pgtable-hwdef.h b/arch/arm64/include/asm/pgtable-hwdef.h
index fd208ea..483acee 100644
--- a/arch/arm64/include/asm/pgtable-hwdef.h
+++ b/arch/arm64/include/asm/pgtable-hwdef.h
@@ -289,6 +289,7 @@
 #define TCR_A1			(UL(1) << 22)
 #define TCR_ASID16		(UL(1) << 36)
 #define TCR_TBI0		(UL(1) << 37)
+#define TCR_TBI1		(UL(1) << 38)
 #define TCR_HA			(UL(1) << 39)
 #define TCR_HD			(UL(1) << 40)
 #define TCR_NFD1		(UL(1) << 54)
diff --git a/arch/arm64/include/asm/processor.h b/arch/arm64/include/asm/processor.h
index ede4218..5d6f105 100644
--- a/arch/arm64/include/asm/processor.h
+++ b/arch/arm64/include/asm/processor.h
@@ -294,6 +294,14 @@
 #define SVE_SET_VL(arg)	sve_set_current_vl(arg)
 #define SVE_GET_VL()	sve_get_current_vl()
 
+#ifdef CONFIG_ARM64_TAGGED_ADDR_ABI
+/* PR_{SET,GET}_TAGGED_ADDR_CTRL prctl */
+long set_tagged_addr_ctrl(unsigned long arg);
+long get_tagged_addr_ctrl(void);
+#define SET_TAGGED_ADDR_CTRL(arg)	set_tagged_addr_ctrl(arg)
+#define GET_TAGGED_ADDR_CTRL()		get_tagged_addr_ctrl()
+#endif
+
 /*
  * For CONFIG_GCC_PLUGIN_STACKLEAK
  *
diff --git a/arch/arm64/include/asm/scs.h b/arch/arm64/include/asm/scs.h
new file mode 100644
index 0000000..c50d2b0
--- /dev/null
+++ b/arch/arm64/include/asm/scs.h
@@ -0,0 +1,37 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _ASM_SCS_H
+#define _ASM_SCS_H
+
+#ifndef __ASSEMBLY__
+
+#include <linux/scs.h>
+
+#ifdef CONFIG_SHADOW_CALL_STACK
+
+extern void scs_init_irq(void);
+
+static __always_inline void scs_save(struct task_struct *tsk)
+{
+	void *s;
+
+	asm volatile("mov %0, x18" : "=r" (s));
+	task_set_scs(tsk, s);
+}
+
+static inline void scs_overflow_check(struct task_struct *tsk)
+{
+	if (unlikely(scs_corrupted(tsk)))
+		panic("corrupted shadow stack detected inside scheduler\n");
+}
+
+#else /* CONFIG_SHADOW_CALL_STACK */
+
+static inline void scs_init_irq(void) {}
+static inline void scs_save(struct task_struct *tsk) {}
+static inline void scs_overflow_check(struct task_struct *tsk) {}
+
+#endif /* CONFIG_SHADOW_CALL_STACK */
+
+#endif /* __ASSEMBLY __ */
+
+#endif /* _ASM_SCS_H */
diff --git a/arch/arm64/include/asm/stacktrace.h b/arch/arm64/include/asm/stacktrace.h
index e86737b..8910f18 100644
--- a/arch/arm64/include/asm/stacktrace.h
+++ b/arch/arm64/include/asm/stacktrace.h
@@ -54,6 +54,10 @@
 
 DECLARE_PER_CPU(unsigned long *, irq_stack_ptr);
 
+#ifdef CONFIG_SHADOW_CALL_STACK
+DECLARE_PER_CPU(unsigned long *, irq_shadow_call_stack_ptr);
+#endif
+
 static inline bool on_irq_stack(unsigned long sp,
 				struct stack_info *info)
 {
diff --git a/arch/arm64/include/asm/suspend.h b/arch/arm64/include/asm/suspend.h
index 8939c87..0cde2f4 100644
--- a/arch/arm64/include/asm/suspend.h
+++ b/arch/arm64/include/asm/suspend.h
@@ -2,7 +2,7 @@
 #ifndef __ASM_SUSPEND_H
 #define __ASM_SUSPEND_H
 
-#define NR_CTX_REGS 12
+#define NR_CTX_REGS 13
 #define NR_CALLEE_SAVED_REGS 12
 
 /*
diff --git a/arch/arm64/include/asm/thread_info.h b/arch/arm64/include/asm/thread_info.h
index 3988f5a..1db186e 100644
--- a/arch/arm64/include/asm/thread_info.h
+++ b/arch/arm64/include/asm/thread_info.h
@@ -44,6 +44,9 @@
 	u64			ttbr0;		/* saved TTBR0_EL1 */
 #endif
 	int			preempt_count;	/* 0 => preemptable, <0 => bug */
+#ifdef CONFIG_SHADOW_CALL_STACK
+	void			*shadow_call_stack;
+#endif
 };
 
 #define thread_saved_pc(tsk)	\
@@ -90,6 +93,7 @@
 #define TIF_SVE			23	/* Scalable Vector Extension in use */
 #define TIF_SVE_VL_INHERIT	24	/* Inherit sve_vl_onexec across exec */
 #define TIF_SSBD		25	/* Wants SSB mitigation */
+#define TIF_TAGGED_ADDR		26	/* Allow tagged user addresses */
 
 #define _TIF_SIGPENDING		(1 << TIF_SIGPENDING)
 #define _TIF_NEED_RESCHED	(1 << TIF_NEED_RESCHED)
diff --git a/arch/arm64/include/asm/uaccess.h b/arch/arm64/include/asm/uaccess.h
index e66b0fc..16969bc 100644
--- a/arch/arm64/include/asm/uaccess.h
+++ b/arch/arm64/include/asm/uaccess.h
@@ -76,6 +76,15 @@
 {
 	unsigned long ret, limit = current_thread_info()->addr_limit;
 
+	/*
+	 * Asynchronous I/O running in a kernel thread does not have the
+	 * TIF_TAGGED_ADDR flag of the process owning the mm, so always untag
+	 * the user address before checking.
+	 */
+	if (IS_ENABLED(CONFIG_ARM64_TAGGED_ADDR_ABI) &&
+	    (current->flags & PF_KTHREAD || test_thread_flag(TIF_TAGGED_ADDR)))
+		addr = untagged_addr(addr);
+
 	__chk_user_ptr(addr);
 	asm volatile(
 	// A + B <= C + 1 for all A,B,C, in four easy steps:
@@ -97,13 +106,6 @@
 	return ret;
 }
 
-/*
- * When dealing with data aborts, watchpoints, or instruction traps we may end
- * up with a tagged userland pointer. Clear the tag to get a sane pointer to
- * pass on to access_ok(), for instance.
- */
-#define untagged_addr(addr)		sign_extend64(addr, 55)
-
 #define access_ok(type, addr, size)	__range_ok(addr, size)
 #define user_addr_max			get_fs
 
@@ -236,7 +238,8 @@
 
 /*
  * Sanitise a uaccess pointer such that it becomes NULL if above the
- * current addr_limit.
+ * current addr_limit. In case the pointer is tagged (has the top byte set),
+ * untag the pointer before checking.
  */
 #define uaccess_mask_ptr(ptr) (__typeof__(ptr))__uaccess_mask_ptr(ptr)
 static inline void __user *__uaccess_mask_ptr(const void __user *ptr)
@@ -244,10 +247,11 @@
 	void __user *safe_ptr;
 
 	asm volatile(
-	"	bics	xzr, %1, %2\n"
+	"	bics	xzr, %3, %2\n"
 	"	csel	%0, %1, xzr, eq\n"
 	: "=&r" (safe_ptr)
-	: "r" (ptr), "r" (current_thread_info()->addr_limit)
+	: "r" (ptr), "r" (current_thread_info()->addr_limit),
+	  "r" (untagged_addr(ptr))
 	: "cc");
 
 	csdb();
diff --git a/arch/arm64/include/asm/unistd.h b/arch/arm64/include/asm/unistd.h
index d520518..47b822e 100644
--- a/arch/arm64/include/asm/unistd.h
+++ b/arch/arm64/include/asm/unistd.h
@@ -44,7 +44,7 @@
 #define __ARM_NR_compat_set_tls		(__ARM_NR_COMPAT_BASE + 5)
 #define __ARM_NR_COMPAT_END		(__ARM_NR_COMPAT_BASE + 0x800)
 
-#define __NR_compat_syscalls		399
+#define __NR_compat_syscalls		435
 #endif
 
 #define __ARCH_WANT_SYS_CLONE
diff --git a/arch/arm64/include/asm/unistd32.h b/arch/arm64/include/asm/unistd32.h
index 2cd6dcf..d27ae61 100644
--- a/arch/arm64/include/asm/unistd32.h
+++ b/arch/arm64/include/asm/unistd32.h
@@ -819,6 +819,10 @@
 __SYSCALL(__NR_statx, sys_statx)
 #define __NR_rseq 398
 __SYSCALL(__NR_rseq, sys_rseq)
+#define __NR_pidfd_send_signal 424
+__SYSCALL(__NR_pidfd_send_signal, sys_pidfd_send_signal)
+#define __NR_pidfd_open 434
+__SYSCALL(__NR_pidfd_open, sys_pidfd_open)
 
 /*
  * Please add new compat syscalls above this comment and update
diff --git a/arch/arm64/kernel/Makefile b/arch/arm64/kernel/Makefile
index 1ceb932..840f8aa 100644
--- a/arch/arm64/kernel/Makefile
+++ b/arch/arm64/kernel/Makefile
@@ -58,6 +58,7 @@
 arm64-obj-$(CONFIG_CRASH_CORE)		+= crash_core.o
 arm64-obj-$(CONFIG_ARM_SDE_INTERFACE)	+= sdei.o
 arm64-obj-$(CONFIG_ARM64_SSBD)		+= ssbd.o
+arm64-obj-$(CONFIG_SHADOW_CALL_STACK)	+= scs.o
 
 obj-y					+= $(arm64-obj-y) vdso/ probes/
 obj-m					+= $(arm64-obj-m)
diff --git a/arch/arm64/kernel/alternative.c b/arch/arm64/kernel/alternative.c
index b5d6039..845f9bd 100644
--- a/arch/arm64/kernel/alternative.c
+++ b/arch/arm64/kernel/alternative.c
@@ -145,7 +145,7 @@
 	} while (cur += d_size, cur < end);
 }
 
-static void __apply_alternatives(void *alt_region, bool is_module)
+static void __nocfi __apply_alternatives(void *alt_region, bool is_module)
 {
 	struct alt_instr *alt;
 	struct alt_region *region = alt_region;
diff --git a/arch/arm64/kernel/asm-offsets.c b/arch/arm64/kernel/asm-offsets.c
index 92fba85..87c3d49 100644
--- a/arch/arm64/kernel/asm-offsets.c
+++ b/arch/arm64/kernel/asm-offsets.c
@@ -45,6 +45,9 @@
 #ifdef CONFIG_ARM64_SW_TTBR0_PAN
   DEFINE(TSK_TI_TTBR0,		offsetof(struct task_struct, thread_info.ttbr0));
 #endif
+#ifdef CONFIG_SHADOW_CALL_STACK
+  DEFINE(TSK_TI_SCS,		offsetof(struct task_struct, thread_info.shadow_call_stack));
+#endif
   DEFINE(TSK_STACK,		offsetof(struct task_struct, stack));
   BLANK();
   DEFINE(THREAD_CPU_CONTEXT,	offsetof(struct task_struct, thread.cpu_context));
diff --git a/arch/arm64/kernel/cpu-reset.S b/arch/arm64/kernel/cpu-reset.S
index 8021b46..63ccd07 100644
--- a/arch/arm64/kernel/cpu-reset.S
+++ b/arch/arm64/kernel/cpu-reset.S
@@ -45,11 +45,11 @@
 	mov	x0, #HVC_SOFT_RESTART
 	hvc	#0				// no return
 
-1:	mov	x18, x1				// entry
+1:	mov	x8, x1				// entry
 	mov	x0, x2				// arg0
 	mov	x1, x3				// arg1
 	mov	x2, x4				// arg2
-	br	x18
+	br	x8
 ENDPROC(__cpu_soft_restart)
 
 .popsection
diff --git a/arch/arm64/kernel/cpu-reset.h b/arch/arm64/kernel/cpu-reset.h
index fad90e49..f300e757 100644
--- a/arch/arm64/kernel/cpu-reset.h
+++ b/arch/arm64/kernel/cpu-reset.h
@@ -25,7 +25,7 @@
 
 	unsigned long el2_switch = !is_kernel_in_hyp_mode() &&
 		is_hyp_mode_available();
-	restart = (void *)__pa_symbol(__cpu_soft_restart);
+	restart = (void *)__pa_function(__cpu_soft_restart);
 
 	cpu_install_idmap();
 	restart(el2_switch, entry, arg0, arg1, arg2);
diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c
index c6324c2..045251b 100644
--- a/arch/arm64/kernel/cpufeature.c
+++ b/arch/arm64/kernel/cpufeature.c
@@ -891,7 +891,8 @@
 }
 
 static bool __meltdown_safe = true;
-static int __kpti_forced; /* 0: not forced, >0: forced on, <0: forced off */
+/* 0: not forced, >0: forced on, <0: forced off */
+static int __kpti_forced = -1;
 
 static bool unmap_kernel_at_el0(const struct arm64_cpu_capabilities *entry,
 				int scope)
@@ -973,7 +974,7 @@
 	if (kpti_applied)
 		return;
 
-	remap_fn = (void *)__pa_symbol(idmap_kpti_install_ng_mappings);
+	remap_fn = (void *)__pa_function(idmap_kpti_install_ng_mappings);
 
 	cpu_install_idmap();
 	remap_fn(cpu, num_online_cpus(), __pa_symbol(swapper_pg_dir));
diff --git a/arch/arm64/kernel/efi-rt-wrapper.S b/arch/arm64/kernel/efi-rt-wrapper.S
index 05235eb..f5cea7b 100644
--- a/arch/arm64/kernel/efi-rt-wrapper.S
+++ b/arch/arm64/kernel/efi-rt-wrapper.S
@@ -37,5 +37,14 @@
 	ldp	x29, x30, [sp], #32
 	b.ne	0f
 	ret
-0:	b	efi_handle_corrupted_x18	// tail call
+0:
+#ifdef CONFIG_SHADOW_CALL_STACK
+	/*
+	 * Restore x18 before returning to instrumented code. This is
+	 * safe because the wrapper is called with preemption disabled and
+	 * a separate shadow stack is used for interrupts.
+	 */
+	mov	x18, x2
+#endif
+	b	efi_handle_corrupted_x18	// tail call
 ENDPROC(__efi_rt_asm_wrapper)
diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S
index adc166c..285be73 100644
--- a/arch/arm64/kernel/entry.S
+++ b/arch/arm64/kernel/entry.S
@@ -183,6 +183,10 @@
 
 	apply_ssbd 1, x22, x23
 
+#ifdef CONFIG_SHADOW_CALL_STACK
+	ldr	x18, [tsk, #TSK_TI_SCS]		// Restore shadow call stack
+	str	xzr, [tsk, #TSK_TI_SCS]		// Limit visibility of saved SCS
+#endif
 	.else
 	add	x21, sp, #S_FRAME_SIZE
 	get_thread_info tsk
@@ -274,6 +278,12 @@
 	ct_user_enter
 	.endif
 
+#ifdef CONFIG_SHADOW_CALL_STACK
+	.if	\el == 0
+	str	x18, [tsk, #TSK_TI_SCS]		// Save shadow call stack
+	.endif
+#endif
+
 #ifdef CONFIG_ARM64_SW_TTBR0_PAN
 	/*
 	 * Restore access to TTBR0_EL1. If returning to EL0, no need for SPSR
@@ -367,6 +377,9 @@
 
 	.macro	irq_stack_entry
 	mov	x19, sp			// preserve the original sp
+#ifdef CONFIG_SHADOW_CALL_STACK
+	mov	x20, x18		// preserve the original shadow stack
+#endif
 
 	/*
 	 * Compare sp with the base of the task stack.
@@ -384,15 +397,24 @@
 
 	/* switch to the irq stack */
 	mov	sp, x26
+
+#ifdef CONFIG_SHADOW_CALL_STACK
+	/* also switch to the irq shadow stack */
+	ldr_this_cpu x18, irq_shadow_call_stack_ptr, x26
+#endif
+
 9998:
 	.endm
 
 	/*
-	 * x19 should be preserved between irq_stack_entry and
-	 * irq_stack_exit.
+	 * The callee-saved regs (x19-x29) should be preserved between
+	 * irq_stack_entry and irq_stack_exit.
 	 */
 	.macro	irq_stack_exit
 	mov	sp, x19
+#ifdef CONFIG_SHADOW_CALL_STACK
+	mov	x18, x20
+#endif
 	.endm
 
 /*
@@ -568,7 +590,7 @@
 	 */
 	mrs	x3, far_el1
 	inherit_daif	pstate=x23, tmp=x2
-	clear_address_tag x0, x3
+	untagged_addr x0, x3
 	mov	x2, sp				// struct pt_regs
 	bl	do_mem_abort
 
@@ -742,7 +764,7 @@
 	mrs	x26, far_el1
 	enable_daif
 	ct_user_exit
-	clear_address_tag x0, x26
+	untagged_addr x0, x26
 	mov	x1, x25
 	mov	x2, sp
 	bl	do_mem_abort
@@ -1071,6 +1093,11 @@
 	ldr	lr, [x8]
 	mov	sp, x9
 	msr	sp_el0, x1
+#ifdef CONFIG_SHADOW_CALL_STACK
+	str	x18, [x0, #TSK_TI_SCS]
+	ldr	x18, [x1, #TSK_TI_SCS]
+	str	xzr, [x1, #TSK_TI_SCS]		// limit visibility of saved SCS
+#endif
 	ret
 ENDPROC(cpu_switch_to)
 NOKPROBE(cpu_switch_to)
diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S
index 06058fb..fac664c 100644
--- a/arch/arm64/kernel/head.S
+++ b/arch/arm64/kernel/head.S
@@ -37,6 +37,7 @@
 #include <asm/pgtable-hwdef.h>
 #include <asm/pgtable.h>
 #include <asm/page.h>
+#include <asm/scs.h>
 #include <asm/smp.h>
 #include <asm/sysreg.h>
 #include <asm/thread_info.h>
@@ -112,6 +113,8 @@
 	 *  x23        stext() .. start_kernel()  physical misalignment/KASLR offset
 	 *  x28        __create_page_tables()     callee preserved temp register
 	 *  x19/x20    __primary_switch()         callee preserved temp registers
+	 *  x24        __primary_switch() .. relocate_kernel()
+	 *                                        current RELR displacement
 	 */
 ENTRY(stext)
 	bl	preserve_boot_args
@@ -417,6 +420,10 @@
 	stp	xzr, x30, [sp, #-16]!
 	mov	x29, sp
 
+#ifdef CONFIG_SHADOW_CALL_STACK
+	adr_l	x18, init_shadow_call_stack	// Set shadow call stack
+#endif
+
 	str_l	x21, __fdt_pointer, x5		// Save FDT pointer
 
 	ldr_l	x4, kimage_vaddr		// Save the offset between
@@ -720,6 +727,10 @@
 	mov	sp, x1
 	ldr	x2, [x0, #CPU_BOOT_TASK]
 	msr	sp_el0, x2
+#ifdef CONFIG_SHADOW_CALL_STACK
+	ldr	x18, [x2, #TSK_TI_SCS]		// set shadow call stack
+	str	xzr, [x2, #TSK_TI_SCS]		// limit visibility of saved SCS
+#endif
 	mov	x29, #0
 	mov	x30, #0
 	b	secondary_start_kernel
@@ -830,14 +841,93 @@
 
 0:	cmp	x9, x10
 	b.hs	1f
-	ldp	x11, x12, [x9], #24
-	ldr	x13, [x9, #-8]
-	cmp	w12, #R_AARCH64_RELATIVE
+	ldp	x12, x13, [x9], #24
+	ldr	x14, [x9, #-8]
+	cmp	w13, #R_AARCH64_RELATIVE
 	b.ne	0b
-	add	x13, x13, x23			// relocate
-	str	x13, [x11, x23]
+	add	x14, x14, x23			// relocate
+	str	x14, [x12, x23]
 	b	0b
-1:	ret
+
+1:
+#ifdef CONFIG_RELR
+	/*
+	 * Apply RELR relocations.
+	 *
+	 * RELR is a compressed format for storing relative relocations. The
+	 * encoded sequence of entries looks like:
+	 * [ AAAAAAAA BBBBBBB1 BBBBBBB1 ... AAAAAAAA BBBBBB1 ... ]
+	 *
+	 * i.e. start with an address, followed by any number of bitmaps. The
+	 * address entry encodes 1 relocation. The subsequent bitmap entries
+	 * encode up to 63 relocations each, at subsequent offsets following
+	 * the last address entry.
+	 *
+	 * The bitmap entries must have 1 in the least significant bit. The
+	 * assumption here is that an address cannot have 1 in lsb. Odd
+	 * addresses are not supported. Any odd addresses are stored in the RELA
+	 * section, which is handled above.
+	 *
+	 * Excluding the least significant bit in the bitmap, each non-zero
+	 * bit in the bitmap represents a relocation to be applied to
+	 * a corresponding machine word that follows the base address
+	 * word. The second least significant bit represents the machine
+	 * word immediately following the initial address, and each bit
+	 * that follows represents the next word, in linear order. As such,
+	 * a single bitmap can encode up to 63 relocations in a 64-bit object.
+	 *
+	 * In this implementation we store the address of the next RELR table
+	 * entry in x9, the address being relocated by the current address or
+	 * bitmap entry in x13 and the address being relocated by the current
+	 * bit in x14.
+	 *
+	 * Because addends are stored in place in the binary, RELR relocations
+	 * cannot be applied idempotently. We use x24 to keep track of the
+	 * currently applied displacement so that we can correctly relocate if
+	 * __relocate_kernel is called twice with non-zero displacements (i.e.
+	 * if there is both a physical misalignment and a KASLR displacement).
+	 */
+	ldr	w9, =__relr_offset		// offset to reloc table
+	ldr	w10, =__relr_size		// size of reloc table
+	add	x9, x9, x11			// __va(.relr)
+	add	x10, x9, x10			// __va(.relr) + sizeof(.relr)
+
+	sub	x15, x23, x24			// delta from previous offset
+	cbz	x15, 7f				// nothing to do if unchanged
+	mov	x24, x23			// save new offset
+
+2:	cmp	x9, x10
+	b.hs	7f
+	ldr	x11, [x9], #8
+	tbnz	x11, #0, 3f			// branch to handle bitmaps
+	add	x13, x11, x23
+	ldr	x12, [x13]			// relocate address entry
+	add	x12, x12, x15
+	str	x12, [x13], #8			// adjust to start of bitmap
+	b	2b
+
+3:	mov	x14, x13
+4:	lsr	x11, x11, #1
+	cbz	x11, 6f
+	tbz	x11, #0, 5f			// skip bit if not set
+	ldr	x12, [x14]			// relocate bit
+	add	x12, x12, x15
+	str	x12, [x14]
+
+5:	add	x14, x14, #8			// move to next bit's address
+	b	4b
+
+6:	/*
+	 * Move to the next bitmap's address. 8 is the word size, and 63 is the
+	 * number of significant bits in a bitmap entry.
+	 */
+	add	x13, x13, #(8 * 63)
+	b	2b
+
+7:
+#endif
+	ret
+
 ENDPROC(__relocate_kernel)
 #endif
 
@@ -849,6 +939,9 @@
 
 	bl	__enable_mmu
 #ifdef CONFIG_RELOCATABLE
+#ifdef CONFIG_RELR
+	mov	x24, #0				// no RELR displacement yet
+#endif
 	bl	__relocate_kernel
 #ifdef CONFIG_RANDOMIZE_BASE
 	ldr	x8, =__primary_switched
diff --git a/arch/arm64/kernel/irq.c b/arch/arm64/kernel/irq.c
index 92fa817..c4ac832 100644
--- a/arch/arm64/kernel/irq.c
+++ b/arch/arm64/kernel/irq.c
@@ -30,6 +30,7 @@
 #include <linux/seq_file.h>
 #include <linux/vmalloc.h>
 #include <asm/vmap_stack.h>
+#include <asm/scs.h>
 
 unsigned long irq_err_count;
 
@@ -72,6 +73,7 @@
 void __init init_IRQ(void)
 {
 	init_irq_stacks();
+	scs_init_irq();
 	irqchip_init();
 	if (!handle_arch_irq)
 		panic("No interrupt controller found.");
diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c
index 95f139a..fe97624 100644
--- a/arch/arm64/kernel/process.c
+++ b/arch/arm64/kernel/process.c
@@ -30,6 +30,7 @@
 #include <linux/kernel.h>
 #include <linux/mm.h>
 #include <linux/stddef.h>
+#include <linux/sysctl.h>
 #include <linux/unistd.h>
 #include <linux/user.h>
 #include <linux/delay.h>
@@ -49,6 +50,7 @@
 #include <trace/events/power.h>
 #include <linux/percpu.h>
 #include <linux/thread_info.h>
+#include <linux/prctl.h>
 
 #include <asm/alternative.h>
 #include <asm/compat.h>
@@ -57,6 +59,7 @@
 #include <asm/fpsimd.h>
 #include <asm/mmu_context.h>
 #include <asm/processor.h>
+#include <asm/scs.h>
 #include <asm/stacktrace.h>
 
 #ifdef CONFIG_STACKPROTECTOR
@@ -341,11 +344,18 @@
 	}
 }
 
+static void flush_tagged_addr_state(void)
+{
+	if (IS_ENABLED(CONFIG_ARM64_TAGGED_ADDR_ABI))
+		clear_thread_flag(TIF_TAGGED_ADDR);
+}
+
 void flush_thread(void)
 {
 	fpsimd_flush_thread();
 	tls_thread_flush();
 	flush_ptrace_hw_breakpoint(current);
+	flush_tagged_addr_state();
 }
 
 void release_thread(struct task_struct *dead_task)
@@ -526,6 +536,7 @@
 	entry_task_switch(next);
 	uao_thread_switch(next);
 	ssbs_thread_switch(next);
+	scs_overflow_check(next);
 
 	/*
 	 * Complete any pending TLB or cache maintenance on this CPU in case
@@ -616,3 +627,70 @@
 }
 EXPORT_SYMBOL(stackleak_check_alloca);
 #endif
+
+#ifdef CONFIG_ARM64_TAGGED_ADDR_ABI
+/*
+ * Control the relaxed ABI allowing tagged user addresses into the kernel.
+ */
+static unsigned int tagged_addr_disabled;
+
+long set_tagged_addr_ctrl(unsigned long arg)
+{
+	if (is_compat_task())
+		return -EINVAL;
+	if (arg & ~PR_TAGGED_ADDR_ENABLE)
+		return -EINVAL;
+
+	/*
+	 * Do not allow the enabling of the tagged address ABI if globally
+	 * disabled via sysctl abi.tagged_addr_disabled.
+	 */
+	if (arg & PR_TAGGED_ADDR_ENABLE && tagged_addr_disabled)
+		return -EINVAL;
+
+	update_thread_flag(TIF_TAGGED_ADDR, arg & PR_TAGGED_ADDR_ENABLE);
+
+	return 0;
+}
+
+long get_tagged_addr_ctrl(void)
+{
+	if (is_compat_task())
+		return -EINVAL;
+
+	if (test_thread_flag(TIF_TAGGED_ADDR))
+		return PR_TAGGED_ADDR_ENABLE;
+
+	return 0;
+}
+
+/*
+ * Global sysctl to disable the tagged user addresses support. This control
+ * only prevents the tagged address ABI enabling via prctl() and does not
+ * disable it for tasks that already opted in to the relaxed ABI.
+ */
+static int zero;
+static int one = 1;
+
+static struct ctl_table tagged_addr_sysctl_table[] = {
+	{
+		.procname	= "tagged_addr_disabled",
+		.mode		= 0644,
+		.data		= &tagged_addr_disabled,
+		.maxlen		= sizeof(int),
+		.proc_handler	= proc_dointvec_minmax,
+		.extra1		= &zero,
+		.extra2		= &one,
+	},
+	{ }
+};
+
+static int __init tagged_addr_init(void)
+{
+	if (!register_sysctl("abi", tagged_addr_sysctl_table))
+		return -EINVAL;
+	return 0;
+}
+
+core_initcall(tagged_addr_init);
+#endif	/* CONFIG_ARM64_TAGGED_ADDR_ABI */
diff --git a/arch/arm64/kernel/psci.c b/arch/arm64/kernel/psci.c
index 3856d51..73d5ac3 100644
--- a/arch/arm64/kernel/psci.c
+++ b/arch/arm64/kernel/psci.c
@@ -46,7 +46,8 @@
 
 static int cpu_psci_cpu_boot(unsigned int cpu)
 {
-	int err = psci_ops.cpu_on(cpu_logical_map(cpu), __pa_symbol(secondary_entry));
+	int err = psci_ops.cpu_on(cpu_logical_map(cpu),
+				  __pa_function(secondary_entry));
 	if (err)
 		pr_err("failed to boot CPU%d (%d)\n", cpu, err);
 
diff --git a/arch/arm64/kernel/scs.c b/arch/arm64/kernel/scs.c
new file mode 100644
index 0000000..eaadf54
--- /dev/null
+++ b/arch/arm64/kernel/scs.c
@@ -0,0 +1,40 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Shadow Call Stack support.
+ *
+ * Copyright (C) 2019 Google LLC
+ */
+
+#include <linux/percpu.h>
+#include <linux/vmalloc.h>
+#include <asm/pgtable.h>
+#include <asm/scs.h>
+
+DEFINE_PER_CPU(unsigned long *, irq_shadow_call_stack_ptr);
+
+#ifndef CONFIG_SHADOW_CALL_STACK_VMAP
+DEFINE_PER_CPU(unsigned long [SCS_SIZE/sizeof(long)], irq_shadow_call_stack)
+	__aligned(SCS_SIZE);
+#endif
+
+void scs_init_irq(void)
+{
+	int cpu;
+
+	for_each_possible_cpu(cpu) {
+#ifdef CONFIG_SHADOW_CALL_STACK_VMAP
+		unsigned long *p;
+
+		p = __vmalloc_node_range(PAGE_SIZE, SCS_SIZE,
+					 VMALLOC_START, VMALLOC_END,
+					 GFP_SCS, PAGE_KERNEL,
+					 0, cpu_to_node(cpu),
+					 __builtin_return_address(0));
+
+		per_cpu(irq_shadow_call_stack_ptr, cpu) = p;
+#else
+		per_cpu(irq_shadow_call_stack_ptr, cpu) =
+			per_cpu(irq_shadow_call_stack, cpu);
+#endif /* CONFIG_SHADOW_CALL_STACK_VMAP */
+	}
+}
diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c
index d747558..f049e54 100644
--- a/arch/arm64/kernel/setup.c
+++ b/arch/arm64/kernel/setup.c
@@ -301,6 +301,11 @@
 
 	setup_machine_fdt(__fdt_pointer);
 
+	/*
+	 * Initialise the static keys early as they may be enabled by the
+	 * cpufeature code and early parameters.
+	 */
+	jump_label_init();
 	parse_early_param();
 
 	/*
@@ -347,6 +352,9 @@
 	smp_init_cpus();
 	smp_build_mpidr_hash();
 
+	/* Init percpu seeds for random tags after cpus are set up. */
+	kasan_init_tags();
+
 #ifdef CONFIG_ARM64_SW_TTBR0_PAN
 	/*
 	 * Make sure init_thread_info.ttbr0 always generates translation
diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c
index 81d22c8..fb588f7 100644
--- a/arch/arm64/kernel/smp.c
+++ b/arch/arm64/kernel/smp.c
@@ -54,6 +54,7 @@
 #include <asm/pgtable.h>
 #include <asm/pgalloc.h>
 #include <asm/processor.h>
+#include <asm/scs.h>
 #include <asm/smp_plat.h>
 #include <asm/sections.h>
 #include <asm/tlbflush.h>
@@ -62,7 +63,6 @@
 #include <asm/system_misc.h>
 #include <soc/qcom/minidump.h>
 
-#include <soc/qcom/scm.h>
 #include <soc/qcom/lpm_levels.h>
 
 #define CREATE_TRACE_POINTS
@@ -354,6 +354,9 @@
 {
 	unsigned int cpu = smp_processor_id();
 
+	/* Save the shadow stack pointer before exiting the idle task */
+	scs_save(current);
+
 	idle_task_exit();
 
 	local_daif_mask();
@@ -413,18 +416,12 @@
 	setup_cpu_features();
 	hyp_mode_check();
 	apply_alternatives_all();
-	scm_enable_mem_protection();
 	mark_linear_text_alias_ro();
 }
 
 void __init smp_prepare_boot_cpu(void)
 {
 	set_my_cpu_offset(per_cpu_offset(smp_processor_id()));
-	/*
-	 * Initialise the static keys early as they may be enabled by the
-	 * cpufeature code.
-	 */
-	jump_label_init();
 	cpuinfo_store_boot_cpu();
 }
 
diff --git a/arch/arm64/kernel/smp_spin_table.c b/arch/arm64/kernel/smp_spin_table.c
index 9303465..1ba281d 100644
--- a/arch/arm64/kernel/smp_spin_table.c
+++ b/arch/arm64/kernel/smp_spin_table.c
@@ -99,7 +99,7 @@
 	 * boot-loader's endianess before jumping. This is mandated by
 	 * the boot protocol.
 	 */
-	writeq_relaxed(__pa_symbol(secondary_holding_pen), release_addr);
+	writeq_relaxed(__pa_function(secondary_holding_pen), release_addr);
 	__flush_dcache_area((__force void *)release_addr,
 			    sizeof(*release_addr));
 
diff --git a/arch/arm64/kernel/traps.c b/arch/arm64/kernel/traps.c
index 4aded5b..8478d27 100644
--- a/arch/arm64/kernel/traps.c
+++ b/arch/arm64/kernel/traps.c
@@ -35,6 +35,7 @@
 #include <linux/sizes.h>
 #include <linux/syscalls.h>
 #include <linux/mm_types.h>
+#include <linux/kasan.h>
 
 #include <asm/atomic.h>
 #include <asm/barrier.h>
@@ -947,6 +948,58 @@
 	.fn = bug_handler,
 };
 
+#ifdef CONFIG_KASAN_SW_TAGS
+
+#define KASAN_ESR_RECOVER	0x20
+#define KASAN_ESR_WRITE	0x10
+#define KASAN_ESR_SIZE_MASK	0x0f
+#define KASAN_ESR_SIZE(esr)	(1 << ((esr) & KASAN_ESR_SIZE_MASK))
+
+static int kasan_handler(struct pt_regs *regs, unsigned int esr)
+{
+	bool recover = esr & KASAN_ESR_RECOVER;
+	bool write = esr & KASAN_ESR_WRITE;
+	size_t size = KASAN_ESR_SIZE(esr);
+	u64 addr = regs->regs[0];
+	u64 pc = regs->pc;
+
+	if (user_mode(regs))
+		return DBG_HOOK_ERROR;
+
+	kasan_report(addr, size, write, pc);
+
+	/*
+	 * The instrumentation allows to control whether we can proceed after
+	 * a crash was detected. This is done by passing the -recover flag to
+	 * the compiler. Disabling recovery allows to generate more compact
+	 * code.
+	 *
+	 * Unfortunately disabling recovery doesn't work for the kernel right
+	 * now. KASAN reporting is disabled in some contexts (for example when
+	 * the allocator accesses slab object metadata; this is controlled by
+	 * current->kasan_depth). All these accesses are detected by the tool,
+	 * even though the reports for them are not printed.
+	 *
+	 * This is something that might be fixed at some point in the future.
+	 */
+	if (!recover)
+		die("Oops - KASAN", regs, 0);
+
+	/* If thread survives, skip over the brk instruction and continue: */
+	arm64_skip_faulting_instruction(regs, AARCH64_INSN_SIZE);
+	return DBG_HOOK_HANDLED;
+}
+
+#define KASAN_ESR_VAL (0xf2000000 | KASAN_BRK_IMM)
+#define KASAN_ESR_MASK 0xffffff00
+
+static struct break_hook kasan_break_hook = {
+	.esr_val = KASAN_ESR_VAL,
+	.esr_mask = KASAN_ESR_MASK,
+	.fn = kasan_handler,
+};
+#endif
+
 /*
  * Initial handler for AArch64 BRK exceptions
  * This handler only used until debug_traps_init().
@@ -954,6 +1007,10 @@
 int __init early_brk64(unsigned long addr, unsigned int esr,
 		struct pt_regs *regs)
 {
+#ifdef CONFIG_KASAN_SW_TAGS
+	if ((esr & KASAN_ESR_MASK) == KASAN_ESR_VAL)
+		return kasan_handler(regs, esr) != DBG_HOOK_HANDLED;
+#endif
 	return bug_handler(regs, esr) != DBG_HOOK_HANDLED;
 }
 
@@ -961,4 +1018,7 @@
 void __init trap_init(void)
 {
 	register_break_hook(&bug_break_hook);
+#ifdef CONFIG_KASAN_SW_TAGS
+	register_break_hook(&kasan_break_hook);
+#endif
 }
diff --git a/arch/arm64/kernel/vdso/Makefile b/arch/arm64/kernel/vdso/Makefile
index ef3f9d9..f7620d3 100644
--- a/arch/arm64/kernel/vdso/Makefile
+++ b/arch/arm64/kernel/vdso/Makefile
@@ -17,6 +17,8 @@
 		$(call cc-ldoption, -Wl$(comma)--hash-style=sysv)
 ccflags-y += $(DISABLE_LTO)
 
+CFLAGS_REMOVE_vgettimeofday.o += $(CC_FLAGS_SCS)
+
 # Disable gcov profiling for VDSO code
 GCOV_PROFILE := n
 
diff --git a/arch/arm64/kernel/vmlinux.lds.S b/arch/arm64/kernel/vmlinux.lds.S
index 4dae476..fd1c65b 100644
--- a/arch/arm64/kernel/vmlinux.lds.S
+++ b/arch/arm64/kernel/vmlinux.lds.S
@@ -188,6 +188,15 @@
 	__rela_offset	= ABSOLUTE(ADDR(.rela.dyn) - KIMAGE_VADDR);
 	__rela_size	= SIZEOF(.rela.dyn);
 
+#ifdef CONFIG_RELR
+	.relr.dyn : ALIGN(8) {
+		*(.relr.dyn)
+	}
+
+	__relr_offset	= ABSOLUTE(ADDR(.relr.dyn) - KIMAGE_VADDR);
+	__relr_size	= SIZEOF(.relr.dyn);
+#endif
+
 	. = ALIGN(SEGMENT_ALIGN);
 	__initdata_end = .;
 	__init_end = .;
diff --git a/arch/arm64/kvm/Kconfig b/arch/arm64/kvm/Kconfig
index 47b23bf..86fe9b3 100644
--- a/arch/arm64/kvm/Kconfig
+++ b/arch/arm64/kvm/Kconfig
@@ -23,7 +23,6 @@
 	depends on OF
 	select MMU_NOTIFIER
 	select PREEMPT_NOTIFIERS
-	select ANON_INODES
 	select HAVE_KVM_CPU_RELAX_INTERCEPT
 	select HAVE_KVM_ARCH_TLB_FLUSH_ALL
 	select KVM_MMIO
diff --git a/arch/arm64/kvm/hyp/Makefile b/arch/arm64/kvm/hyp/Makefile
index 22aeb8d..1f1282b 100644
--- a/arch/arm64/kvm/hyp/Makefile
+++ b/arch/arm64/kvm/hyp/Makefile
@@ -34,3 +34,6 @@
 KASAN_SANITIZE	:= n
 UBSAN_SANITIZE	:= n
 KCOV_INSTRUMENT	:= n
+
+# remove the SCS flags from all objects in this directory
+KBUILD_CFLAGS := $(filter-out $(CC_FLAGS_SCS), $(KBUILD_CFLAGS))
diff --git a/arch/arm64/kvm/hyp/entry.S b/arch/arm64/kvm/hyp/entry.S
index fad1e16..2cee0c3 100644
--- a/arch/arm64/kvm/hyp/entry.S
+++ b/arch/arm64/kvm/hyp/entry.S
@@ -31,7 +31,12 @@
 	.text
 	.pushsection	.hyp.text, "ax"
 
+/*
+ * We treat x18 as callee-saved as the host may use it as a platform
+ * register (e.g. for shadow call stack).
+ */
 .macro save_callee_saved_regs ctxt
+	str	x18,      [\ctxt, #CPU_XREG_OFFSET(18)]
 	stp	x19, x20, [\ctxt, #CPU_XREG_OFFSET(19)]
 	stp	x21, x22, [\ctxt, #CPU_XREG_OFFSET(21)]
 	stp	x23, x24, [\ctxt, #CPU_XREG_OFFSET(23)]
@@ -41,6 +46,8 @@
 .endm
 
 .macro restore_callee_saved_regs ctxt
+	// We require \ctxt is not x18-x28
+	ldr	x18,      [\ctxt, #CPU_XREG_OFFSET(18)]
 	ldp	x19, x20, [\ctxt, #CPU_XREG_OFFSET(19)]
 	ldp	x21, x22, [\ctxt, #CPU_XREG_OFFSET(21)]
 	ldp	x23, x24, [\ctxt, #CPU_XREG_OFFSET(23)]
@@ -57,29 +64,26 @@
 	// x0: vcpu
 	// x1: host context
 	// x2-x17: clobbered by macros
-	// x18: guest context
+	// x29: guest context
 
 	// Store the host regs
 	save_callee_saved_regs x1
 
-	add	x18, x0, #VCPU_CONTEXT
+	add	x29, x0, #VCPU_CONTEXT
 
 	// Restore guest regs x0-x17
-	ldp	x0, x1,   [x18, #CPU_XREG_OFFSET(0)]
-	ldp	x2, x3,   [x18, #CPU_XREG_OFFSET(2)]
-	ldp	x4, x5,   [x18, #CPU_XREG_OFFSET(4)]
-	ldp	x6, x7,   [x18, #CPU_XREG_OFFSET(6)]
-	ldp	x8, x9,   [x18, #CPU_XREG_OFFSET(8)]
-	ldp	x10, x11, [x18, #CPU_XREG_OFFSET(10)]
-	ldp	x12, x13, [x18, #CPU_XREG_OFFSET(12)]
-	ldp	x14, x15, [x18, #CPU_XREG_OFFSET(14)]
-	ldp	x16, x17, [x18, #CPU_XREG_OFFSET(16)]
+	ldp	x0, x1,   [x29, #CPU_XREG_OFFSET(0)]
+	ldp	x2, x3,   [x29, #CPU_XREG_OFFSET(2)]
+	ldp	x4, x5,   [x29, #CPU_XREG_OFFSET(4)]
+	ldp	x6, x7,   [x29, #CPU_XREG_OFFSET(6)]
+	ldp	x8, x9,   [x29, #CPU_XREG_OFFSET(8)]
+	ldp	x10, x11, [x29, #CPU_XREG_OFFSET(10)]
+	ldp	x12, x13, [x29, #CPU_XREG_OFFSET(12)]
+	ldp	x14, x15, [x29, #CPU_XREG_OFFSET(14)]
+	ldp	x16, x17, [x29, #CPU_XREG_OFFSET(16)]
 
-	// Restore guest regs x19-x29, lr
-	restore_callee_saved_regs x18
-
-	// Restore guest reg x18
-	ldr	x18,      [x18, #CPU_XREG_OFFSET(18)]
+	// Restore guest regs x18-x29, lr
+	restore_callee_saved_regs x29
 
 	// Do not touch any register after this!
 	eret
@@ -101,7 +105,7 @@
 	// Retrieve the guest regs x0-x1 from the stack
 	ldp	x2, x3, [sp], #16	// x0, x1
 
-	// Store the guest regs x0-x1 and x4-x18
+	// Store the guest regs x0-x1 and x4-x17
 	stp	x2, x3,   [x1, #CPU_XREG_OFFSET(0)]
 	stp	x4, x5,   [x1, #CPU_XREG_OFFSET(4)]
 	stp	x6, x7,   [x1, #CPU_XREG_OFFSET(6)]
@@ -110,9 +114,8 @@
 	stp	x12, x13, [x1, #CPU_XREG_OFFSET(12)]
 	stp	x14, x15, [x1, #CPU_XREG_OFFSET(14)]
 	stp	x16, x17, [x1, #CPU_XREG_OFFSET(16)]
-	str	x18,      [x1, #CPU_XREG_OFFSET(18)]
 
-	// Store the guest regs x19-x29, lr
+	// Store the guest regs x18-x29, lr
 	save_callee_saved_regs x1
 
 	get_host_ctxt	x2, x3
diff --git a/arch/arm64/lib/copy_page.S b/arch/arm64/lib/copy_page.S
index 076c437..30f9316 100644
--- a/arch/arm64/lib/copy_page.S
+++ b/arch/arm64/lib/copy_page.S
@@ -45,45 +45,45 @@
 	ldp	x14, x15, [x1, #96]
 	ldp	x16, x17, [x1, #112]
 
-	mov	x18, #(PAGE_SIZE - 128)
+	add	x0, x0, #256
 	add	x1, x1, #128
 1:
-	subs	x18, x18, #128
+	tst	x0, #(PAGE_SIZE - 1)
 
 alternative_if ARM64_HAS_NO_HW_PREFETCH
 	prfm	pldl1strm, [x1, #384]
 alternative_else_nop_endif
 
-	stnp	x2, x3, [x0]
+	stnp	x2, x3, [x0, #-256]
 	ldp	x2, x3, [x1]
-	stnp	x4, x5, [x0, #16]
+	stnp	x4, x5, [x0, #16 - 256]
 	ldp	x4, x5, [x1, #16]
-	stnp	x6, x7, [x0, #32]
+	stnp	x6, x7, [x0, #32 - 256]
 	ldp	x6, x7, [x1, #32]
-	stnp	x8, x9, [x0, #48]
+	stnp	x8, x9, [x0, #48 - 256]
 	ldp	x8, x9, [x1, #48]
-	stnp	x10, x11, [x0, #64]
+	stnp	x10, x11, [x0, #64 - 256]
 	ldp	x10, x11, [x1, #64]
-	stnp	x12, x13, [x0, #80]
+	stnp	x12, x13, [x0, #80 - 256]
 	ldp	x12, x13, [x1, #80]
-	stnp	x14, x15, [x0, #96]
+	stnp	x14, x15, [x0, #96 - 256]
 	ldp	x14, x15, [x1, #96]
-	stnp	x16, x17, [x0, #112]
+	stnp	x16, x17, [x0, #112 - 256]
 	ldp	x16, x17, [x1, #112]
 
 	add	x0, x0, #128
 	add	x1, x1, #128
 
-	b.gt	1b
+	b.ne	1b
 
-	stnp	x2, x3, [x0]
-	stnp	x4, x5, [x0, #16]
-	stnp	x6, x7, [x0, #32]
-	stnp	x8, x9, [x0, #48]
-	stnp	x10, x11, [x0, #64]
-	stnp	x12, x13, [x0, #80]
-	stnp	x14, x15, [x0, #96]
-	stnp	x16, x17, [x0, #112]
+	stnp	x2, x3, [x0, #-256]
+	stnp	x4, x5, [x0, #16 - 256]
+	stnp	x6, x7, [x0, #32 - 256]
+	stnp	x8, x9, [x0, #48 - 256]
+	stnp	x10, x11, [x0, #64 - 256]
+	stnp	x12, x13, [x0, #80 - 256]
+	stnp	x14, x15, [x0, #96 - 256]
+	stnp	x16, x17, [x0, #112 - 256]
 
 	ret
 ENDPROC(copy_page)
diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c
index 296e04b..ece9ee6 100644
--- a/arch/arm64/mm/fault.c
+++ b/arch/arm64/mm/fault.c
@@ -39,6 +39,7 @@
 #include <asm/exception.h>
 #include <asm/debug-monitors.h>
 #include <asm/esr.h>
+#include <asm/kasan.h>
 #include <asm/sysreg.h>
 #include <asm/system_misc.h>
 #include <asm/pgtable.h>
@@ -126,6 +127,18 @@
 		data_abort_decode(esr);
 }
 
+static inline bool is_ttbr0_addr(unsigned long addr)
+{
+	/* entry assembly clears tags for TTBR0 addrs */
+	return addr < TASK_SIZE;
+}
+
+static inline bool is_ttbr1_addr(unsigned long addr)
+{
+	/* TTBR1 addresses may have a tag if KASAN_SW_TAGS is in use */
+	return arch_kasan_reset_tag(addr) >= VA_START;
+}
+
 /*
  * Dump out the page tables associated with 'addr' in the currently active mm.
  */
@@ -135,7 +148,7 @@
 	pgd_t *pgdp;
 	pgd_t pgd;
 
-	if (addr < TASK_SIZE) {
+	if (is_ttbr0_addr(addr)) {
 		/* TTBR0 */
 		mm = current->active_mm;
 		if (mm == &init_mm) {
@@ -143,7 +156,7 @@
 				 addr);
 			return;
 		}
-	} else if (addr >= VA_START) {
+	} else if (is_ttbr1_addr(addr)) {
 		/* TTBR1 */
 		mm = &init_mm;
 	} else {
@@ -249,7 +262,7 @@
 	if (fsc_type == ESR_ELx_FSC_PERM)
 		return true;
 
-	if (addr < TASK_SIZE && system_uses_ttbr0_pan())
+	if (is_ttbr0_addr(addr) && system_uses_ttbr0_pan())
 		return fsc_type == ESR_ELx_FSC_FAULT &&
 			(regs->pstate & PSR_PAN_BIT);
 
@@ -314,7 +327,7 @@
 	 * type", so we ignore this wrinkle and just return the translation
 	 * fault.)
 	 */
-	if (current->thread.fault_address >= TASK_SIZE) {
+	if (!is_ttbr0_addr(current->thread.fault_address)) {
 		switch (ESR_ELx_EC(esr)) {
 		case ESR_ELx_EC_DABT_LOW:
 			/*
@@ -454,7 +467,7 @@
 		mm_flags |= FAULT_FLAG_WRITE;
 	}
 
-	if (addr < TASK_SIZE && is_el1_permission_fault(esr, regs, addr)) {
+	if (is_ttbr0_addr(addr) && is_el1_permission_fault(esr, regs, addr)) {
 		/* regs->orig_addr_limit may be 0 if we entered from EL0 */
 		if (regs->orig_addr_limit == KERNEL_DS)
 			die_kernel_fault("access to user memory with fs=KERNEL_DS",
@@ -641,7 +654,7 @@
 					  unsigned int esr,
 					  struct pt_regs *regs)
 {
-	if (addr < TASK_SIZE)
+	if (is_ttbr0_addr(addr))
 		return do_page_fault(addr, esr, regs);
 
 	do_bad_area(addr, esr, regs);
@@ -805,7 +818,7 @@
 	 * re-enabled IRQs. If the address is a kernel address, apply
 	 * BP hardening prior to enabling IRQs and pre-emption.
 	 */
-	if (addr > TASK_SIZE)
+	if (!is_ttbr0_addr(addr))
 		arm64_apply_bp_hardening();
 
 	local_irq_enable();
@@ -820,7 +833,7 @@
 	struct siginfo info;
 
 	if (user_mode(regs)) {
-		if (instruction_pointer(regs) > TASK_SIZE)
+		if (!is_ttbr0_addr(instruction_pointer(regs)))
 			arm64_apply_bp_hardening();
 		local_irq_enable();
 	}
@@ -912,7 +925,7 @@
 	if (interrupts_enabled(regs))
 		trace_hardirqs_off();
 
-	if (user_mode(regs) && pc > TASK_SIZE)
+	if (user_mode(regs) && !is_ttbr0_addr(pc))
 		arm64_apply_bp_hardening();
 
 	if (!inf->fn(addr_if_watchpoint, esr, regs)) {
diff --git a/arch/arm64/mm/kasan_init.c b/arch/arm64/mm/kasan_init.c
index 1214587..5ef034a 100644
--- a/arch/arm64/mm/kasan_init.c
+++ b/arch/arm64/mm/kasan_init.c
@@ -40,7 +40,7 @@
 {
 	void *p = memblock_virt_alloc_try_nid(PAGE_SIZE, PAGE_SIZE,
 					      __pa(MAX_DMA_ADDRESS),
-					      MEMBLOCK_ALLOC_ACCESSIBLE, node);
+					      MEMBLOCK_ALLOC_KASAN, node);
 	return __pa(p);
 }
 
@@ -48,8 +48,9 @@
 				      bool early)
 {
 	if (pmd_none(READ_ONCE(*pmdp))) {
-		phys_addr_t pte_phys = early ? __pa_symbol(kasan_zero_pte)
-					     : kasan_alloc_zeroed_page(node);
+		phys_addr_t pte_phys = early ?
+				__pa_symbol(kasan_early_shadow_pte)
+					: kasan_alloc_zeroed_page(node);
 		__pmd_populate(pmdp, pte_phys, PMD_TYPE_TABLE);
 	}
 
@@ -61,8 +62,9 @@
 				      bool early)
 {
 	if (pud_none(READ_ONCE(*pudp))) {
-		phys_addr_t pmd_phys = early ? __pa_symbol(kasan_zero_pmd)
-					     : kasan_alloc_zeroed_page(node);
+		phys_addr_t pmd_phys = early ?
+				__pa_symbol(kasan_early_shadow_pmd)
+					: kasan_alloc_zeroed_page(node);
 		__pud_populate(pudp, pmd_phys, PMD_TYPE_TABLE);
 	}
 
@@ -73,8 +75,9 @@
 				      bool early)
 {
 	if (pgd_none(READ_ONCE(*pgdp))) {
-		phys_addr_t pud_phys = early ? __pa_symbol(kasan_zero_pud)
-					     : kasan_alloc_zeroed_page(node);
+		phys_addr_t pud_phys = early ?
+				__pa_symbol(kasan_early_shadow_pud)
+					: kasan_alloc_zeroed_page(node);
 		__pgd_populate(pgdp, pud_phys, PMD_TYPE_TABLE);
 	}
 
@@ -88,8 +91,11 @@
 	pte_t *ptep = kasan_pte_offset(pmdp, addr, node, early);
 
 	do {
-		phys_addr_t page_phys = early ? __pa_symbol(kasan_zero_page)
-					      : kasan_alloc_zeroed_page(node);
+		phys_addr_t page_phys = early ?
+				__pa_symbol(kasan_early_shadow_page)
+					: kasan_alloc_zeroed_page(node);
+		if (!early)
+			memset(__va(page_phys), KASAN_SHADOW_INIT, PAGE_SIZE);
 		next = addr + PAGE_SIZE;
 		set_pte(ptep, pfn_pte(__phys_to_pfn(page_phys), PAGE_KERNEL));
 	} while (ptep++, addr = next, addr != end && pte_none(READ_ONCE(*ptep)));
@@ -192,7 +198,7 @@
 
 	/*
 	 * We are going to perform proper setup of shadow memory.
-	 * At first we should unmap early shadow (clear_pgds() call bellow).
+	 * At first we should unmap early shadow (clear_pgds() call below).
 	 * However, instrumented code couldn't execute without shadow memory.
 	 * tmp_pg_dir used to keep early shadow mapped until full shadow
 	 * setup will be finished.
@@ -206,14 +212,14 @@
 	kasan_map_populate(kimg_shadow_start, kimg_shadow_end,
 			   early_pfn_to_nid(virt_to_pfn(lm_alias(_text))));
 
-	kasan_populate_zero_shadow((void *)KASAN_SHADOW_START,
-				   (void *)mod_shadow_start);
-	kasan_populate_zero_shadow((void *)kimg_shadow_end,
-				   kasan_mem_to_shadow((void *)PAGE_OFFSET));
+	kasan_populate_early_shadow((void *)KASAN_SHADOW_START,
+				    (void *)mod_shadow_start);
+	kasan_populate_early_shadow((void *)kimg_shadow_end,
+				    kasan_mem_to_shadow((void *)PAGE_OFFSET));
 
 	if (kimg_shadow_start > mod_shadow_end)
-		kasan_populate_zero_shadow((void *)mod_shadow_end,
-					   (void *)kimg_shadow_start);
+		kasan_populate_early_shadow((void *)mod_shadow_end,
+					    (void *)kimg_shadow_start);
 
 	for_each_memblock(memory, reg) {
 		void *start = (void *)__phys_to_virt(reg->base);
@@ -228,14 +234,15 @@
 	}
 
 	/*
-	 * KAsan may reuse the contents of kasan_zero_pte directly, so we
-	 * should make sure that it maps the zero page read-only.
+	 * KAsan may reuse the contents of kasan_early_shadow_pte directly,
+	 * so we should make sure that it maps the zero page read-only.
 	 */
 	for (i = 0; i < PTRS_PER_PTE; i++)
-		set_pte(&kasan_zero_pte[i],
-			pfn_pte(sym_to_pfn(kasan_zero_page), PAGE_KERNEL_RO));
+		set_pte(&kasan_early_shadow_pte[i],
+			pfn_pte(sym_to_pfn(kasan_early_shadow_page),
+				PAGE_KERNEL_RO));
 
-	memset(kasan_zero_page, 0, PAGE_SIZE);
+	memset(kasan_early_shadow_page, KASAN_SHADOW_INIT, PAGE_SIZE);
 	cpu_replace_ttbr1(lm_alias(swapper_pg_dir));
 
 	/* At this point kasan is fully initialized. Enable error messages */
diff --git a/arch/arm64/mm/proc.S b/arch/arm64/mm/proc.S
index 13a2dd4..d40c37b 100644
--- a/arch/arm64/mm/proc.S
+++ b/arch/arm64/mm/proc.S
@@ -47,6 +47,12 @@
 /* PTWs cacheable, inner/outer WBWA */
 #define TCR_CACHE_FLAGS	TCR_IRGN_WBWA | TCR_ORGN_WBWA
 
+#ifdef CONFIG_KASAN_SW_TAGS
+#define TCR_KASAN_FLAGS TCR_TBI1
+#else
+#define TCR_KASAN_FLAGS 0
+#endif
+
 #define MAIR(attr, mt)	((attr) << ((mt) * 8))
 
 /*
@@ -111,6 +117,8 @@
  * cpu_do_suspend - save CPU registers context
  *
  * x0: virtual address of context pointer
+ *
+ * This must be kept in sync with struct cpu_suspend_ctx in <asm/suspend.h>.
  */
 ENTRY(cpu_do_suspend)
 	mrs	x2, tpidr_el0
@@ -135,6 +143,11 @@
 	stp	x8, x9, [x0, #48]
 	stp	x10, x11, [x0, #64]
 	stp	x12, x13, [x0, #80]
+	/*
+	 * Save x18 as it may be used as a platform register, e.g. by shadow
+	 * call stack.
+	 */
+	str	x18, [x0, #96]
 	ret
 ENDPROC(cpu_do_suspend)
 
@@ -151,6 +164,13 @@
 	ldp	x9, x10, [x0, #48]
 	ldp	x11, x12, [x0, #64]
 	ldp	x13, x14, [x0, #80]
+	/*
+	 * Restore x18, as it may be used as a platform register, and clear
+	 * the buffer to minimize the risk of exposure when used for shadow
+	 * call stack.
+	 */
+	ldr	x18, [x0, #96]
+	str	xzr, [x0, #96]
 	msr	tpidr_el0, x2
 	msr	tpidrro_el0, x3
 	msr	contextidr_el1, x4
@@ -304,15 +324,15 @@
 	/* We're the boot CPU. Wait for the others to catch up */
 	sevl
 1:	wfe
-	ldaxr	w18, [flag_ptr]
-	eor	w18, w18, num_cpus
-	cbnz	w18, 1b
+	ldaxr	w17, [flag_ptr]
+	eor	w17, w17, num_cpus
+	cbnz	w17, 1b
 
 	/* We need to walk swapper, so turn off the MMU. */
 	pre_disable_mmu_workaround
-	mrs	x18, sctlr_el1
-	bic	x18, x18, #SCTLR_ELx_M
-	msr	sctlr_el1, x18
+	mrs	x17, sctlr_el1
+	bic	x17, x17, #SCTLR_ELx_M
+	msr	sctlr_el1, x17
 	isb
 
 	/* Everybody is enjoying the idmap, so we can rewrite swapper. */
@@ -335,9 +355,9 @@
 	isb
 
 	/* We're done: fire up the MMU again */
-	mrs	x18, sctlr_el1
-	orr	x18, x18, #SCTLR_ELx_M
-	msr	sctlr_el1, x18
+	mrs	x17, sctlr_el1
+	orr	x17, x17, #SCTLR_ELx_M
+	msr	sctlr_el1, x17
 	isb
 
 	/*
@@ -407,33 +427,9 @@
 	b.ne	do_pte
 	b	next_pmd
 
-	/* Secondary CPUs end up here */
-__idmap_kpti_secondary:
-	/* Uninstall swapper before surgery begins */
-	__idmap_cpu_set_reserved_ttbr1 x18, x17
-
-	/* Increment the flag to let the boot CPU we're ready */
-1:	ldxr	w18, [flag_ptr]
-	add	w18, w18, #1
-	stxr	w17, w18, [flag_ptr]
-	cbnz	w17, 1b
-
-	/* Wait for the boot CPU to finish messing around with swapper */
-	sevl
-1:	wfe
-	ldxr	w18, [flag_ptr]
-	cbnz	w18, 1b
-
-	/* All done, act like nothing happened */
-	msr	ttbr1_el1, swapper_ttb
-	isb
-	ret
-
 	.unreq	cpu
 	.unreq	num_cpus
 	.unreq	swapper_pa
-	.unreq	swapper_ttb
-	.unreq	flag_ptr
 	.unreq	cur_pgdp
 	.unreq	end_pgdp
 	.unreq	pgd
@@ -446,6 +442,31 @@
 	.unreq	cur_ptep
 	.unreq	end_ptep
 	.unreq	pte
+
+	/* Secondary CPUs end up here */
+__idmap_kpti_secondary:
+	/* Uninstall swapper before surgery begins */
+	__idmap_cpu_set_reserved_ttbr1 x16, x17
+
+	/* Increment the flag to let the boot CPU we're ready */
+1:	ldxr	w16, [flag_ptr]
+	add	w16, w16, #1
+	stxr	w17, w16, [flag_ptr]
+	cbnz	w17, 1b
+
+	/* Wait for the boot CPU to finish messing around with swapper */
+	sevl
+1:	wfe
+	ldxr	w16, [flag_ptr]
+	cbnz	w16, 1b
+
+	/* All done, act like nothing happened */
+	msr	ttbr1_el1, swapper_ttb
+	isb
+	ret
+
+	.unreq	swapper_ttb
+	.unreq	flag_ptr
 ENDPROC(idmap_kpti_install_ng_mappings)
 	.popsection
 #endif
@@ -497,7 +518,7 @@
 	 */
 	ldr	x10, =TCR_TxSZ(VA_BITS) | TCR_CACHE_FLAGS | TCR_SMP_FLAGS | \
 			TCR_TG_FLAGS | TCR_KASLR_FLAGS | TCR_ASID16 | \
-			TCR_TBI0 | TCR_A1
+			TCR_TBI0 | TCR_A1 | TCR_KASAN_FLAGS
 	tcr_set_idmap_t0sz	x10, x9
 
 	/*
diff --git a/arch/mips/kvm/Kconfig b/arch/mips/kvm/Kconfig
index 76b93a9..4d06a29 100644
--- a/arch/mips/kvm/Kconfig
+++ b/arch/mips/kvm/Kconfig
@@ -20,7 +20,6 @@
 	depends on HAVE_KVM
 	select EXPORT_UASM
 	select PREEMPT_NOTIFIERS
-	select ANON_INODES
 	select KVM_GENERIC_DIRTYLOG_READ_PROTECT
 	select HAVE_KVM_VCPU_ASYNC_IOCTL
 	select KVM_MMIO
diff --git a/arch/powerpc/kvm/Kconfig b/arch/powerpc/kvm/Kconfig
index 68a0e9d..e058d02 100644
--- a/arch/powerpc/kvm/Kconfig
+++ b/arch/powerpc/kvm/Kconfig
@@ -20,7 +20,6 @@
 config KVM
 	bool
 	select PREEMPT_NOTIFIERS
-	select ANON_INODES
 	select HAVE_KVM_EVENTFD
 	select HAVE_KVM_VCPU_ASYNC_IOCTL
 	select SRCU
diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c
index 4004dbd..6804580 100644
--- a/arch/powerpc/perf/core-book3s.c
+++ b/arch/powerpc/perf/core-book3s.c
@@ -95,7 +95,7 @@
 {
 	return 0;
 }
-static inline void perf_get_data_addr(struct pt_regs *regs, u64 *addrp) { }
+static inline void perf_get_data_addr(struct perf_event *event, struct pt_regs *regs, u64 *addrp) { }
 static inline u32 perf_get_misc_flags(struct pt_regs *regs)
 {
 	return 0;
@@ -126,7 +126,7 @@
 static inline void power_pmu_bhrb_enable(struct perf_event *event) {}
 static inline void power_pmu_bhrb_disable(struct perf_event *event) {}
 static void power_pmu_sched_task(struct perf_event_context *ctx, bool sched_in) {}
-static inline void power_pmu_bhrb_read(struct cpu_hw_events *cpuhw) {}
+static inline void power_pmu_bhrb_read(struct perf_event *event, struct cpu_hw_events *cpuhw) {}
 static void pmao_restore_workaround(bool ebb) { }
 #endif /* CONFIG_PPC32 */
 
@@ -170,7 +170,7 @@
  * pointed to by SIAR; this is indicated by the [POWER6_]MMCRA_SDSYNC, the
  * [POWER7P_]MMCRA_SDAR_VALID bit in MMCRA, or the SDAR_VALID bit in SIER.
  */
-static inline void perf_get_data_addr(struct pt_regs *regs, u64 *addrp)
+static inline void perf_get_data_addr(struct perf_event *event, struct pt_regs *regs, u64 *addrp)
 {
 	unsigned long mmcra = regs->dsisr;
 	bool sdar_valid;
@@ -195,8 +195,7 @@
 	if (!(mmcra & MMCRA_SAMPLE_ENABLE) || sdar_valid)
 		*addrp = mfspr(SPRN_SDAR);
 
-	if (perf_paranoid_kernel() && !capable(CAP_SYS_ADMIN) &&
-		is_kernel_addr(mfspr(SPRN_SDAR)))
+	if (is_kernel_addr(mfspr(SPRN_SDAR)) && perf_allow_kernel(&event->attr) != 0)
 		*addrp = 0;
 }
 
@@ -435,7 +434,7 @@
 }
 
 /* Processing BHRB entries */
-static void power_pmu_bhrb_read(struct cpu_hw_events *cpuhw)
+static void power_pmu_bhrb_read(struct perf_event *event, struct cpu_hw_events *cpuhw)
 {
 	u64 val;
 	u64 addr;
@@ -463,8 +462,7 @@
 			 * exporting it to userspace (avoid exposure of regions
 			 * where we could have speculative execution)
 			 */
-			if (perf_paranoid_kernel() && !capable(CAP_SYS_ADMIN) &&
-				is_kernel_addr(addr))
+			if (is_kernel_addr(addr) && perf_allow_kernel(&event->attr) != 0)
 				continue;
 
 			/* Branches are read most recent first (ie. mfbhrb 0 is
@@ -2068,12 +2066,12 @@
 
 		if (event->attr.sample_type &
 		    (PERF_SAMPLE_ADDR | PERF_SAMPLE_PHYS_ADDR))
-			perf_get_data_addr(regs, &data.addr);
+			perf_get_data_addr(event, regs, &data.addr);
 
 		if (event->attr.sample_type & PERF_SAMPLE_BRANCH_STACK) {
 			struct cpu_hw_events *cpuhw;
 			cpuhw = this_cpu_ptr(&cpu_hw_events);
-			power_pmu_bhrb_read(cpuhw);
+			power_pmu_bhrb_read(event, cpuhw);
 			data.br_stack = &cpuhw->bhrb_stack;
 		}
 
diff --git a/arch/s390/kernel/syscalls/syscall.tbl b/arch/s390/kernel/syscalls/syscall.tbl
index 022fc09..8caf42a 100644
--- a/arch/s390/kernel/syscalls/syscall.tbl
+++ b/arch/s390/kernel/syscalls/syscall.tbl
@@ -391,3 +391,5 @@
 381  common	kexec_file_load		sys_kexec_file_load		compat_sys_kexec_file_load
 382  common	io_pgetevents		sys_io_pgetevents		compat_sys_io_pgetevents
 383  common	rseq			sys_rseq			compat_sys_rseq
+424  common	pidfd_send_signal	sys_pidfd_send_signal		sys_pidfd_send_signal
+434  common	pidfd_open		sys_pidfd_open			sys_pidfd_open
diff --git a/arch/s390/kvm/Kconfig b/arch/s390/kvm/Kconfig
index a3dbd45..600e4fd1 100644
--- a/arch/s390/kvm/Kconfig
+++ b/arch/s390/kvm/Kconfig
@@ -21,7 +21,6 @@
 	prompt "Kernel-based Virtual Machine (KVM) support"
 	depends on HAVE_KVM
 	select PREEMPT_NOTIFIERS
-	select ANON_INODES
 	select HAVE_KVM_CPU_RELAX_INTERCEPT
 	select HAVE_KVM_VCPU_ASYNC_IOCTL
 	select HAVE_KVM_EVENTFD
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index d9ba533..2b08204 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -46,7 +46,6 @@
 	#
 	select ACPI_LEGACY_TABLES_LOOKUP	if ACPI
 	select ACPI_SYSTEM_POWER_STATES_SUPPORT	if ACPI
-	select ANON_INODES
 	select ARCH_CLOCKSOURCE_DATA
 	select ARCH_DISCARD_MEMBLOCK
 	select ARCH_HAS_ACPI_TABLE_UPGRADE	if ACPI
diff --git a/arch/x86/boot/compressed/string.c b/arch/x86/boot/compressed/string.c
index 19dbbcd..81fc1ea 100644
--- a/arch/x86/boot/compressed/string.c
+++ b/arch/x86/boot/compressed/string.c
@@ -11,7 +11,7 @@
 #include "../string.c"
 
 #ifdef CONFIG_X86_32
-static void *__memcpy(void *dest, const void *src, size_t n)
+static void *____memcpy(void *dest, const void *src, size_t n)
 {
 	int d0, d1, d2;
 	asm volatile(
@@ -25,7 +25,7 @@
 	return dest;
 }
 #else
-static void *__memcpy(void *dest, const void *src, size_t n)
+static void *____memcpy(void *dest, const void *src, size_t n)
 {
 	long d0, d1, d2;
 	asm volatile(
@@ -56,7 +56,7 @@
 	const unsigned char *s = src;
 
 	if (d <= s || d - s >= n)
-		return __memcpy(dest, src, n);
+		return ____memcpy(dest, src, n);
 
 	while (n-- > 0)
 		d[n] = s[n];
@@ -71,5 +71,11 @@
 		warn("Avoiding potentially unsafe overlapping memcpy()!");
 		return memmove(dest, src, n);
 	}
-	return __memcpy(dest, src, n);
+	return ____memcpy(dest, src, n);
 }
+
+#ifdef CONFIG_KASAN
+extern void *__memset(void *s, int c, size_t n) __alias(memset);
+extern void *__memmove(void *dest, const void *src, size_t n) __alias(memmove);
+extern void *__memcpy(void *dest, const void *src, size_t n) __alias(memcpy);
+#endif
diff --git a/arch/arm64/configs/cuttlefish_defconfig b/arch/x86/configs/gki_defconfig
similarity index 69%
copy from arch/arm64/configs/cuttlefish_defconfig
copy to arch/x86/configs/gki_defconfig
index 22789da..2307b1e 100644
--- a/arch/arm64/configs/cuttlefish_defconfig
+++ b/arch/x86/configs/gki_defconfig
@@ -1,20 +1,20 @@
+# CONFIG_USELIB is not set
 CONFIG_AUDIT=y
 CONFIG_NO_HZ=y
 CONFIG_HIGH_RES_TIMERS=y
 CONFIG_PREEMPT=y
 CONFIG_TASKSTATS=y
-CONFIG_TASK_DELAY_ACCT=y
 CONFIG_TASK_XACCT=y
 CONFIG_TASK_IO_ACCOUNTING=y
 CONFIG_PSI=y
 CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
+CONFIG_IKHEADERS=m
 CONFIG_MEMCG=y
 CONFIG_MEMCG_SWAP=y
 CONFIG_RT_GROUP_SCHED=y
 CONFIG_CGROUP_FREEZER=y
 CONFIG_CPUSETS=y
-# CONFIG_PROC_PID_CPUSET is not set
 CONFIG_CGROUP_CPUACCT=y
 CONFIG_CGROUP_BPF=y
 CONFIG_SCHED_AUTOGROUP=y
@@ -25,7 +25,6 @@
 # CONFIG_RD_XZ is not set
 # CONFIG_RD_LZO is not set
 # CONFIG_RD_LZ4 is not set
-CONFIG_SGETMASK_SYSCALL=y
 # CONFIG_SYSFS_SYSCALL is not set
 # CONFIG_FHANDLE is not set
 CONFIG_KALLSYMS_ALL=y
@@ -37,49 +36,23 @@
 # CONFIG_COMPAT_BRK is not set
 # CONFIG_SLAB_MERGE_DEFAULT is not set
 CONFIG_PROFILING=y
-CONFIG_PCI=y
-CONFIG_PCI_HOST_GENERIC=y
-CONFIG_HZ_100=y
-CONFIG_SECCOMP=y
+CONFIG_SMP=y
+CONFIG_HYPERVISOR_GUEST=y
 CONFIG_PARAVIRT=y
-CONFIG_ARMV8_DEPRECATED=y
-CONFIG_SWP_EMULATION=y
-CONFIG_CP15_BARRIER_EMULATION=y
-CONFIG_SETEND_EMULATION=y
-CONFIG_ARM64_SW_TTBR0_PAN=y
-CONFIG_RANDOMIZE_BASE=y
-# CONFIG_EFI is not set
-CONFIG_COMPAT=y
-CONFIG_PM_WAKELOCKS=y
-CONFIG_PM_WAKELOCKS_LIMIT=0
-# CONFIG_PM_WAKELOCKS_GC is not set
-CONFIG_PM_DEBUG=y
-CONFIG_ENERGY_MODEL=y
-CONFIG_CPU_IDLE=y
-CONFIG_ARM_CPUIDLE=y
-CONFIG_CPU_FREQ=y
+CONFIG_NR_CPUS=32
+CONFIG_EFI=y
 CONFIG_CPU_FREQ_TIMES=y
-CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y
 CONFIG_CPU_FREQ_GOV_POWERSAVE=y
 CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
-CONFIG_CPUFREQ_DT=y
-CONFIG_ARM_BIG_LITTLE_CPUFREQ=y
-CONFIG_ARM_DT_BL_CPUFREQ=y
-CONFIG_ARM_SCPI_CPUFREQ=y
-CONFIG_ARM_SCMI_CPUFREQ=y
-CONFIG_ARM_SCMI_PROTOCOL=y
-# CONFIG_ARM_SCMI_POWER_DOMAIN is not set
-CONFIG_ARM_SCPI_PROTOCOL=y
-# CONFIG_ARM_SCPI_POWER_DOMAIN is not set
+CONFIG_CPUFREQ_DUMMY=m
+CONFIG_IA32_EMULATION=y
 CONFIG_KPROBES=y
-CONFIG_LTO_CLANG=y
-CONFIG_CFI_CLANG=y
 CONFIG_MODULES=y
 CONFIG_MODULE_UNLOAD=y
 CONFIG_MODVERSIONS=y
+CONFIG_GKI_HACKS_TO_FIX=y
 # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
-# CONFIG_SPARSEMEM_VMEMMAP is not set
-CONFIG_KSM=y
+CONFIG_BINFMT_MISC=m
 CONFIG_ZSMALLOC=y
 CONFIG_NET=y
 CONFIG_PACKET=y
@@ -98,10 +71,6 @@
 # CONFIG_INET_XFRM_MODE_BEET is not set
 CONFIG_INET_UDP_DIAG=y
 CONFIG_INET_DIAG_DESTROY=y
-CONFIG_TCP_CONG_ADVANCED=y
-# CONFIG_TCP_CONG_BIC is not set
-# CONFIG_TCP_CONG_WESTWOOD is not set
-# CONFIG_TCP_CONG_HTCP is not set
 CONFIG_IPV6_ROUTER_PREF=y
 CONFIG_IPV6_ROUTE_INFO=y
 CONFIG_IPV6_OPTIMISTIC_DAD=y
@@ -179,19 +148,23 @@
 CONFIG_IP6_NF_TARGET_REJECT=y
 CONFIG_IP6_NF_MANGLE=y
 CONFIG_IP6_NF_RAW=y
+CONFIG_TIPC=y
 CONFIG_L2TP=y
 CONFIG_NET_SCHED=y
 CONFIG_NET_SCH_HTB=y
-CONFIG_NET_SCH_NETEM=y
 CONFIG_NET_SCH_INGRESS=y
 CONFIG_NET_CLS_U32=y
 CONFIG_NET_CLS_BPF=y
 CONFIG_NET_EMATCH=y
 CONFIG_NET_EMATCH_U32=y
 CONFIG_NET_CLS_ACT=y
-CONFIG_VSOCKETS=y
-CONFIG_VIRTIO_VSOCKETS=y
+CONFIG_VSOCKETS=m
+CONFIG_VIRTIO_VSOCKETS=m
 CONFIG_BPF_JIT=y
+CONFIG_CAN=m
+# CONFIG_CAN_BCM is not set
+# CONFIG_CAN_GW is not set
+CONFIG_CAN_VCAN=m
 CONFIG_CFG80211=y
 # CONFIG_CFG80211_DEFAULT_PS is not set
 # CONFIG_CFG80211_CRDA_SUPPORT is not set
@@ -199,33 +172,34 @@
 # CONFIG_MAC80211_RC_MINSTREL is not set
 CONFIG_RFKILL=y
 # CONFIG_UEVENT_HELPER is not set
+# CONFIG_FW_CACHE is not set
 # CONFIG_ALLOW_DEV_COREDUMP is not set
 CONFIG_DEBUG_DEVRES=y
-CONFIG_OF_UNITTEST=y
+CONFIG_GNSS=y
+CONFIG_GNSS_CMDLINE_SERIAL=m
+CONFIG_OF=y
 CONFIG_ZRAM=y
 CONFIG_BLK_DEV_LOOP=y
 CONFIG_BLK_DEV_RAM=y
 CONFIG_BLK_DEV_RAM_SIZE=8192
-CONFIG_VIRTIO_BLK=y
+CONFIG_VIRTIO_BLK=m
 CONFIG_UID_SYS_STATS=y
 CONFIG_SCSI=y
 # CONFIG_SCSI_MQ_DEFAULT is not set
 # CONFIG_SCSI_PROC_FS is not set
 CONFIG_BLK_DEV_SD=y
-CONFIG_SCSI_VIRTIO=y
 CONFIG_MD=y
 CONFIG_BLK_DEV_DM=y
 CONFIG_DM_CRYPT=y
+CONFIG_DM_SNAPSHOT=y
 CONFIG_DM_UEVENT=y
 CONFIG_DM_VERITY=y
 CONFIG_DM_VERITY_AVB=y
 CONFIG_DM_VERITY_FEC=y
 CONFIG_DM_BOW=y
 CONFIG_NETDEVICES=y
-CONFIG_NETCONSOLE=y
-CONFIG_NETCONSOLE_DYNAMIC=y
 CONFIG_TUN=y
-CONFIG_VIRTIO_NET=y
+CONFIG_VIRTIO_NET=m
 # CONFIG_ETHERNET is not set
 CONFIG_PHYLIB=y
 CONFIG_PPP=y
@@ -259,20 +233,11 @@
 # CONFIG_WLAN_VENDOR_TI is not set
 # CONFIG_WLAN_VENDOR_ZYDAS is not set
 # CONFIG_WLAN_VENDOR_QUANTENNA is not set
-CONFIG_VIRT_WIFI=y
+CONFIG_VIRT_WIFI=m
 CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_KEYBOARD is not set
+CONFIG_KEYBOARD_GPIO=y
 # CONFIG_INPUT_MOUSE is not set
 CONFIG_INPUT_JOYSTICK=y
-CONFIG_JOYSTICK_XPAD=y
-CONFIG_JOYSTICK_XPAD_FF=y
-CONFIG_JOYSTICK_XPAD_LEDS=y
-CONFIG_INPUT_TABLET=y
-CONFIG_TABLET_USB_ACECAD=y
-CONFIG_TABLET_USB_AIPTEK=y
-CONFIG_TABLET_USB_GTCO=y
-CONFIG_TABLET_USB_HANWANG=y
-CONFIG_TABLET_USB_KBTAB=y
 CONFIG_INPUT_MISC=y
 CONFIG_INPUT_UINPUT=y
 # CONFIG_VT is not set
@@ -282,136 +247,90 @@
 # CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set
 CONFIG_SERIAL_8250_CONSOLE=y
 # CONFIG_SERIAL_8250_EXAR is not set
-CONFIG_SERIAL_8250_NR_UARTS=48
-CONFIG_SERIAL_8250_EXTENDED=y
-CONFIG_SERIAL_8250_MANY_PORTS=y
-CONFIG_SERIAL_8250_SHARE_IRQ=y
-CONFIG_SERIAL_OF_PLATFORM=y
-CONFIG_SERIAL_AMBA_PL011=y
-CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
-CONFIG_VIRTIO_CONSOLE=y
+CONFIG_SERIAL_OF_PLATFORM=m
+CONFIG_SERIAL_DEV_BUS=y
+CONFIG_VIRTIO_CONSOLE=m
 CONFIG_HW_RANDOM=y
-CONFIG_HW_RANDOM_VIRTIO=y
-# CONFIG_HW_RANDOM_CAVIUM is not set
+CONFIG_HW_RANDOM_VIRTIO=m
 # CONFIG_DEVPORT is not set
 # CONFIG_I2C_COMPAT is not set
 # CONFIG_I2C_HELPER_AUTO is not set
+CONFIG_SPI=y
+CONFIG_GPIOLIB=y
 # CONFIG_HWMON is not set
-CONFIG_THERMAL=y
-CONFIG_CPU_THERMAL=y
+CONFIG_DEVFREQ_THERMAL=y
+# CONFIG_X86_PKG_TEMP_THERMAL is not set
+CONFIG_REGULATOR=y
+CONFIG_REGULATOR_FIXED_VOLTAGE=y
 CONFIG_MEDIA_SUPPORT=y
+CONFIG_MEDIA_CAMERA_SUPPORT=y
 # CONFIG_VGA_ARB is not set
 CONFIG_DRM=y
 # CONFIG_DRM_FBDEV_EMULATION is not set
-CONFIG_DRM_VIRTIO_GPU=y
+CONFIG_DRM_VIRTIO_GPU=m
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+# CONFIG_LCD_CLASS_DEVICE is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
 CONFIG_SOUND=y
 CONFIG_SND=y
 CONFIG_SND_HRTIMER=y
+CONFIG_SND_DYNAMIC_MINORS=y
 # CONFIG_SND_SUPPORT_OLD_API is not set
 # CONFIG_SND_VERBOSE_PROCFS is not set
 # CONFIG_SND_DRIVERS is not set
-CONFIG_SND_INTEL8X0=y
+CONFIG_SND_INTEL8X0=m
 # CONFIG_SND_USB is not set
 CONFIG_HIDRAW=y
 CONFIG_UHID=y
-CONFIG_HID_A4TECH=y
-CONFIG_HID_ACRUX=y
-CONFIG_HID_ACRUX_FF=y
 CONFIG_HID_APPLE=y
-CONFIG_HID_BELKIN=y
-CONFIG_HID_CHERRY=y
-CONFIG_HID_CHICONY=y
-CONFIG_HID_PRODIKEYS=y
-CONFIG_HID_CYPRESS=y
-CONFIG_HID_DRAGONRISE=y
-CONFIG_DRAGONRISE_FF=y
-CONFIG_HID_EMS_FF=y
 CONFIG_HID_ELECOM=y
-CONFIG_HID_EZKEY=y
-CONFIG_HID_HOLTEK=y
-CONFIG_HID_KEYTOUCH=y
-CONFIG_HID_KYE=y
-CONFIG_HID_UCLOGIC=y
-CONFIG_HID_WALTOP=y
-CONFIG_HID_GYRATION=y
-CONFIG_HID_TWINHAN=y
-CONFIG_HID_KENSINGTON=y
-CONFIG_HID_LCPOWER=y
-CONFIG_HID_LOGITECH=y
-CONFIG_HID_LOGITECH_DJ=y
-CONFIG_LOGITECH_FF=y
-CONFIG_LOGIRUMBLEPAD2_FF=y
-CONFIG_LOGIG940_FF=y
 CONFIG_HID_MAGICMOUSE=y
 CONFIG_HID_MICROSOFT=y
-CONFIG_HID_MONTEREY=y
 CONFIG_HID_MULTITOUCH=y
-CONFIG_HID_NTRIG=y
-CONFIG_HID_ORTEK=y
-CONFIG_HID_PANTHERLORD=y
-CONFIG_PANTHERLORD_FF=y
-CONFIG_HID_PETALYNX=y
-CONFIG_HID_PICOLCD=y
-CONFIG_HID_PRIMAX=y
-CONFIG_HID_ROCCAT=y
-CONFIG_HID_SAITEK=y
-CONFIG_HID_SAMSUNG=y
-CONFIG_HID_SONY=y
-CONFIG_HID_SPEEDLINK=y
-CONFIG_HID_SUNPLUS=y
-CONFIG_HID_GREENASIA=y
-CONFIG_GREENASIA_FF=y
-CONFIG_HID_SMARTJOYPLUS=y
-CONFIG_SMARTJOYPLUS_FF=y
-CONFIG_HID_TIVO=y
-CONFIG_HID_TOPSEED=y
-CONFIG_HID_THRUSTMASTER=y
-CONFIG_HID_WACOM=y
-CONFIG_HID_WIIMOTE=y
-CONFIG_HID_ZEROPLUS=y
-CONFIG_HID_ZYDACRON=y
 CONFIG_USB_HIDDEV=y
-CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
-CONFIG_USB_EHCI_HCD=y
+CONFIG_USB=y
 CONFIG_USB_GADGET=y
+CONFIG_USB_DUMMY_HCD=m
 CONFIG_USB_CONFIGFS=y
 CONFIG_USB_CONFIGFS_UEVENT=y
 CONFIG_USB_CONFIGFS_F_FS=y
 CONFIG_USB_CONFIGFS_F_ACC=y
 CONFIG_USB_CONFIGFS_F_AUDIO_SRC=y
 CONFIG_USB_CONFIGFS_F_MIDI=y
-CONFIG_MMC=y
+CONFIG_MMC=m
 # CONFIG_PWRSEQ_EMMC is not set
 # CONFIG_PWRSEQ_SIMPLE is not set
-# CONFIG_MMC_BLOCK is not set
+CONFIG_MMC_SDHCI=m
+CONFIG_MMC_SDHCI_PLTFM=m
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+CONFIG_LEDS_TRIGGERS=y
 CONFIG_RTC_CLASS=y
 # CONFIG_RTC_SYSTOHC is not set
-CONFIG_RTC_DRV_PL030=y
-CONFIG_RTC_DRV_PL031=y
-CONFIG_VIRTIO_PCI=y
+CONFIG_RTC_DRV_TEST=m
+CONFIG_UIO=y
+CONFIG_VIRTIO_PCI=m
 # CONFIG_VIRTIO_PCI_LEGACY is not set
-CONFIG_VIRTIO_BALLOON=y
-CONFIG_VIRTIO_INPUT=y
-CONFIG_VIRTIO_MMIO=y
+CONFIG_VIRTIO_BALLOON=m
+CONFIG_VIRTIO_INPUT=m
+CONFIG_VIRTIO_MMIO=m
 CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
 CONFIG_STAGING=y
 CONFIG_ASHMEM=y
-CONFIG_ANDROID_VSOC=y
 CONFIG_ION=y
 CONFIG_ION_SYSTEM_HEAP=y
-CONFIG_COMMON_CLK_SCPI=y
-# CONFIG_COMMON_CLK_XGENE is not set
-CONFIG_MAILBOX=y
-# CONFIG_IOMMU_SUPPORT is not set
+CONFIG_PM_DEVFREQ=y
+CONFIG_IIO=y
 CONFIG_ANDROID=y
 CONFIG_ANDROID_BINDER_IPC=y
-CONFIG_LEGACY_ENERGY_MODEL_DT=y
 CONFIG_EXT4_FS=y
 CONFIG_EXT4_FS_SECURITY=y
 CONFIG_EXT4_ENCRYPTION=y
 CONFIG_F2FS_FS=y
 CONFIG_F2FS_FS_SECURITY=y
 CONFIG_F2FS_FS_ENCRYPTION=y
+CONFIG_FS_VERITY=y
+CONFIG_FS_VERITY_BUILTIN_SIGNATURES=y
 # CONFIG_DNOTIFY is not set
 CONFIG_QUOTA=y
 CONFIG_QFMT_V2=y
@@ -421,27 +340,76 @@
 CONFIG_VFAT_FS=y
 CONFIG_TMPFS=y
 CONFIG_TMPFS_POSIX_ACL=y
+# CONFIG_EFIVAR_FS is not set
 CONFIG_SDCARD_FS=y
 CONFIG_PSTORE=y
 CONFIG_PSTORE_CONSOLE=y
 CONFIG_PSTORE_RAM=y
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=y
+CONFIG_NLS_CODEPAGE_775=y
+CONFIG_NLS_CODEPAGE_850=y
+CONFIG_NLS_CODEPAGE_852=y
+CONFIG_NLS_CODEPAGE_855=y
+CONFIG_NLS_CODEPAGE_857=y
+CONFIG_NLS_CODEPAGE_860=y
+CONFIG_NLS_CODEPAGE_861=y
+CONFIG_NLS_CODEPAGE_862=y
+CONFIG_NLS_CODEPAGE_863=y
+CONFIG_NLS_CODEPAGE_864=y
+CONFIG_NLS_CODEPAGE_865=y
+CONFIG_NLS_CODEPAGE_866=y
+CONFIG_NLS_CODEPAGE_869=y
+CONFIG_NLS_CODEPAGE_936=y
+CONFIG_NLS_CODEPAGE_950=y
+CONFIG_NLS_CODEPAGE_932=y
+CONFIG_NLS_CODEPAGE_949=y
+CONFIG_NLS_CODEPAGE_874=y
+CONFIG_NLS_ISO8859_8=y
+CONFIG_NLS_CODEPAGE_1250=y
+CONFIG_NLS_CODEPAGE_1251=y
+CONFIG_NLS_ASCII=y
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=y
+CONFIG_NLS_ISO8859_3=y
+CONFIG_NLS_ISO8859_4=y
+CONFIG_NLS_ISO8859_5=y
+CONFIG_NLS_ISO8859_6=y
+CONFIG_NLS_ISO8859_7=y
+CONFIG_NLS_ISO8859_9=y
+CONFIG_NLS_ISO8859_13=y
+CONFIG_NLS_ISO8859_14=y
+CONFIG_NLS_ISO8859_15=y
+CONFIG_NLS_KOI8_R=y
+CONFIG_NLS_KOI8_U=y
+CONFIG_NLS_MAC_ROMAN=y
+CONFIG_NLS_MAC_CELTIC=y
+CONFIG_NLS_MAC_CENTEURO=y
+CONFIG_NLS_MAC_CROATIAN=y
+CONFIG_NLS_MAC_CYRILLIC=y
+CONFIG_NLS_MAC_GAELIC=y
+CONFIG_NLS_MAC_GREEK=y
+CONFIG_NLS_MAC_ICELAND=y
+CONFIG_NLS_MAC_INUIT=y
+CONFIG_NLS_MAC_ROMANIAN=y
+CONFIG_NLS_MAC_TURKISH=y
+CONFIG_NLS_UTF8=y
 CONFIG_SECURITY_PERF_EVENTS_RESTRICT=y
 CONFIG_SECURITY=y
 CONFIG_SECURITY_NETWORK=y
-CONFIG_LSM_MMAP_MIN_ADDR=65536
 CONFIG_HARDENED_USERCOPY=y
 CONFIG_SECURITY_SELINUX=y
 CONFIG_CRYPTO_ADIANTUM=y
-CONFIG_CRYPTO_SHA512=y
+CONFIG_CRYPTO_SHA256_SSSE3=y
+CONFIG_CRYPTO_AES_NI_INTEL=y
 CONFIG_CRYPTO_LZ4=y
 CONFIG_CRYPTO_ZSTD=y
 CONFIG_CRYPTO_ANSI_CPRNG=y
-CONFIG_CRYPTO_DEV_VIRTIO=y
+CONFIG_CRC8=y
 CONFIG_XZ_DEC=y
 CONFIG_PRINTK_TIME=y
 CONFIG_DEBUG_INFO=y
 # CONFIG_ENABLE_MUST_CHECK is not set
-CONFIG_FRAME_WARN=1024
 # CONFIG_SECTION_MISMATCH_WARN_ONLY is not set
 CONFIG_MAGIC_SYSRQ=y
 CONFIG_DEBUG_STACK_USAGE=y
@@ -450,6 +418,5 @@
 # CONFIG_DETECT_HUNG_TASK is not set
 CONFIG_PANIC_TIMEOUT=5
 CONFIG_SCHEDSTATS=y
-CONFIG_RCU_CPU_STALL_TIMEOUT=60
-CONFIG_ENABLE_DEFAULT_TRACERS=y
 # CONFIG_RUNTIME_TESTING_MENU is not set
+CONFIG_UNWINDER_FRAME_POINTER=y
diff --git a/arch/x86/configs/x86_64_cuttlefish_defconfig b/arch/x86/configs/x86_64_cuttlefish_defconfig
deleted file mode 100644
index 0d86eadb..0000000
--- a/arch/x86/configs/x86_64_cuttlefish_defconfig
+++ /dev/null
@@ -1,485 +0,0 @@
-CONFIG_POSIX_MQUEUE=y
-# CONFIG_USELIB is not set
-CONFIG_AUDIT=y
-CONFIG_NO_HZ=y
-CONFIG_HIGH_RES_TIMERS=y
-CONFIG_PREEMPT=y
-CONFIG_BSD_PROCESS_ACCT=y
-CONFIG_TASKSTATS=y
-CONFIG_TASK_DELAY_ACCT=y
-CONFIG_TASK_XACCT=y
-CONFIG_TASK_IO_ACCOUNTING=y
-CONFIG_PSI=y
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_CGROUPS=y
-CONFIG_MEMCG=y
-CONFIG_MEMCG_SWAP=y
-CONFIG_CGROUP_SCHED=y
-CONFIG_RT_GROUP_SCHED=y
-CONFIG_CGROUP_FREEZER=y
-CONFIG_CPUSETS=y
-# CONFIG_PROC_PID_CPUSET is not set
-CONFIG_CGROUP_CPUACCT=y
-CONFIG_CGROUP_BPF=y
-CONFIG_NAMESPACES=y
-CONFIG_SCHED_TUNE=y
-CONFIG_BLK_DEV_INITRD=y
-# CONFIG_RD_LZ4 is not set
-# CONFIG_FHANDLE is not set
-# CONFIG_PCSPKR_PLATFORM is not set
-CONFIG_KALLSYMS_ALL=y
-CONFIG_BPF_SYSCALL=y
-CONFIG_BPF_JIT_ALWAYS_ON=y
-CONFIG_EMBEDDED=y
-# CONFIG_COMPAT_BRK is not set
-CONFIG_PROFILING=y
-CONFIG_SMP=y
-CONFIG_HYPERVISOR_GUEST=y
-CONFIG_PARAVIRT=y
-CONFIG_PARAVIRT_SPINLOCKS=y
-CONFIG_MCORE2=y
-CONFIG_PROCESSOR_SELECT=y
-# CONFIG_CPU_SUP_CENTAUR is not set
-CONFIG_NR_CPUS=8
-# CONFIG_MICROCODE is not set
-CONFIG_X86_MSR=y
-CONFIG_X86_CPUID=y
-# CONFIG_MTRR is not set
-CONFIG_HZ_100=y
-CONFIG_KEXEC=y
-CONFIG_CRASH_DUMP=y
-CONFIG_PHYSICAL_START=0x200000
-CONFIG_PHYSICAL_ALIGN=0x1000000
-CONFIG_CMDLINE_BOOL=y
-CONFIG_CMDLINE="console=ttyS0 reboot=p"
-CONFIG_PM_WAKELOCKS=y
-CONFIG_PM_WAKELOCKS_LIMIT=0
-# CONFIG_PM_WAKELOCKS_GC is not set
-CONFIG_PM_DEBUG=y
-CONFIG_ACPI_PROCFS_POWER=y
-# CONFIG_ACPI_FAN is not set
-# CONFIG_ACPI_THERMAL is not set
-# CONFIG_X86_PM_TIMER is not set
-CONFIG_CPU_FREQ_TIMES=y
-CONFIG_CPU_FREQ_GOV_ONDEMAND=y
-CONFIG_X86_ACPI_CPUFREQ=y
-CONFIG_PCI_MSI=y
-CONFIG_IA32_EMULATION=y
-# CONFIG_FIRMWARE_MEMMAP is not set
-CONFIG_OPROFILE=y
-CONFIG_KPROBES=y
-CONFIG_LTO_CLANG=y
-CONFIG_CFI_CLANG=y
-CONFIG_REFCOUNT_FULL=y
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODVERSIONS=y
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
-CONFIG_BINFMT_MISC=y
-CONFIG_KSM=y
-CONFIG_DEFAULT_MMAP_MIN_ADDR=65536
-CONFIG_ZSMALLOC=y
-CONFIG_NET=y
-CONFIG_PACKET=y
-CONFIG_UNIX=y
-CONFIG_XFRM_USER=y
-CONFIG_XFRM_INTERFACE=y
-CONFIG_XFRM_STATISTICS=y
-CONFIG_NET_KEY=y
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-CONFIG_IP_ADVANCED_ROUTER=y
-CONFIG_IP_MULTIPLE_TABLES=y
-CONFIG_IP_ROUTE_MULTIPATH=y
-CONFIG_IP_ROUTE_VERBOSE=y
-CONFIG_NET_IPGRE_DEMUX=y
-CONFIG_IP_MROUTE=y
-CONFIG_IP_PIMSM_V1=y
-CONFIG_IP_PIMSM_V2=y
-CONFIG_SYN_COOKIES=y
-CONFIG_NET_IPVTI=y
-CONFIG_INET_ESP=y
-# CONFIG_INET_XFRM_MODE_BEET is not set
-CONFIG_INET_UDP_DIAG=y
-CONFIG_INET_DIAG_DESTROY=y
-CONFIG_TCP_CONG_ADVANCED=y
-# CONFIG_TCP_CONG_BIC is not set
-# CONFIG_TCP_CONG_WESTWOOD is not set
-# CONFIG_TCP_CONG_HTCP is not set
-CONFIG_TCP_MD5SIG=y
-CONFIG_IPV6_ROUTER_PREF=y
-CONFIG_IPV6_ROUTE_INFO=y
-CONFIG_IPV6_OPTIMISTIC_DAD=y
-CONFIG_INET6_AH=y
-CONFIG_INET6_ESP=y
-CONFIG_INET6_IPCOMP=y
-CONFIG_IPV6_MIP6=y
-CONFIG_IPV6_VTI=y
-CONFIG_IPV6_MULTIPLE_TABLES=y
-CONFIG_NETLABEL=y
-CONFIG_NETFILTER=y
-CONFIG_NF_CONNTRACK=y
-CONFIG_NF_CONNTRACK_SECMARK=y
-CONFIG_NF_CONNTRACK_EVENTS=y
-CONFIG_NF_CONNTRACK_AMANDA=y
-CONFIG_NF_CONNTRACK_FTP=y
-CONFIG_NF_CONNTRACK_H323=y
-CONFIG_NF_CONNTRACK_IRC=y
-CONFIG_NF_CONNTRACK_NETBIOS_NS=y
-CONFIG_NF_CONNTRACK_PPTP=y
-CONFIG_NF_CONNTRACK_SANE=y
-CONFIG_NF_CONNTRACK_TFTP=y
-CONFIG_NF_CT_NETLINK=y
-CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y
-CONFIG_NETFILTER_XT_TARGET_CONNMARK=y
-CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y
-CONFIG_NETFILTER_XT_TARGET_CT=y
-CONFIG_NETFILTER_XT_TARGET_IDLETIMER=y
-CONFIG_NETFILTER_XT_TARGET_MARK=y
-CONFIG_NETFILTER_XT_TARGET_NFLOG=y
-CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y
-CONFIG_NETFILTER_XT_TARGET_TPROXY=y
-CONFIG_NETFILTER_XT_TARGET_TRACE=y
-CONFIG_NETFILTER_XT_TARGET_SECMARK=y
-CONFIG_NETFILTER_XT_TARGET_TCPMSS=y
-CONFIG_NETFILTER_XT_MATCH_BPF=y
-CONFIG_NETFILTER_XT_MATCH_COMMENT=y
-CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=y
-CONFIG_NETFILTER_XT_MATCH_CONNMARK=y
-CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
-CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=y
-CONFIG_NETFILTER_XT_MATCH_HELPER=y
-CONFIG_NETFILTER_XT_MATCH_IPRANGE=y
-# CONFIG_NETFILTER_XT_MATCH_L2TP is not set
-CONFIG_NETFILTER_XT_MATCH_LENGTH=y
-CONFIG_NETFILTER_XT_MATCH_LIMIT=y
-CONFIG_NETFILTER_XT_MATCH_MAC=y
-CONFIG_NETFILTER_XT_MATCH_MARK=y
-CONFIG_NETFILTER_XT_MATCH_OWNER=y
-CONFIG_NETFILTER_XT_MATCH_POLICY=y
-CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y
-CONFIG_NETFILTER_XT_MATCH_QUOTA=y
-CONFIG_NETFILTER_XT_MATCH_QUOTA2=y
-CONFIG_NETFILTER_XT_MATCH_SOCKET=y
-CONFIG_NETFILTER_XT_MATCH_STATE=y
-CONFIG_NETFILTER_XT_MATCH_STATISTIC=y
-CONFIG_NETFILTER_XT_MATCH_STRING=y
-CONFIG_NETFILTER_XT_MATCH_TIME=y
-CONFIG_NETFILTER_XT_MATCH_U32=y
-CONFIG_IP_NF_IPTABLES=y
-CONFIG_IP_NF_MATCH_AH=y
-CONFIG_IP_NF_MATCH_ECN=y
-CONFIG_IP_NF_MATCH_TTL=y
-CONFIG_IP_NF_FILTER=y
-CONFIG_IP_NF_TARGET_REJECT=y
-CONFIG_IP_NF_NAT=y
-CONFIG_IP_NF_TARGET_MASQUERADE=y
-CONFIG_IP_NF_TARGET_NETMAP=y
-CONFIG_IP_NF_TARGET_REDIRECT=y
-CONFIG_IP_NF_MANGLE=y
-CONFIG_IP_NF_RAW=y
-CONFIG_IP_NF_SECURITY=y
-CONFIG_IP_NF_ARPTABLES=y
-CONFIG_IP_NF_ARPFILTER=y
-CONFIG_IP_NF_ARP_MANGLE=y
-CONFIG_IP6_NF_IPTABLES=y
-CONFIG_IP6_NF_MATCH_IPV6HEADER=y
-CONFIG_IP6_NF_MATCH_RPFILTER=y
-CONFIG_IP6_NF_FILTER=y
-CONFIG_IP6_NF_TARGET_REJECT=y
-CONFIG_IP6_NF_MANGLE=y
-CONFIG_IP6_NF_RAW=y
-CONFIG_L2TP=y
-CONFIG_NET_SCHED=y
-CONFIG_NET_SCH_HTB=y
-CONFIG_NET_SCH_NETEM=y
-CONFIG_NET_SCH_INGRESS=y
-CONFIG_NET_CLS_U32=y
-CONFIG_NET_CLS_BPF=y
-CONFIG_NET_EMATCH=y
-CONFIG_NET_EMATCH_U32=y
-CONFIG_NET_CLS_ACT=y
-CONFIG_VSOCKETS=y
-CONFIG_VIRTIO_VSOCKETS=y
-CONFIG_BPF_JIT=y
-CONFIG_CFG80211=y
-CONFIG_MAC80211=y
-CONFIG_RFKILL=y
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-CONFIG_DEBUG_DEVRES=y
-CONFIG_OF=y
-CONFIG_OF_UNITTEST=y
-# CONFIG_PNP_DEBUG_MESSAGES is not set
-CONFIG_ZRAM=y
-CONFIG_BLK_DEV_LOOP=y
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_SIZE=8192
-CONFIG_VIRTIO_BLK=y
-CONFIG_UID_SYS_STATS=y
-CONFIG_SCSI=y
-CONFIG_BLK_DEV_SD=y
-CONFIG_BLK_DEV_SR=y
-CONFIG_BLK_DEV_SR_VENDOR=y
-CONFIG_CHR_DEV_SG=y
-CONFIG_SCSI_CONSTANTS=y
-CONFIG_SCSI_SPI_ATTRS=y
-CONFIG_SCSI_VIRTIO=y
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=y
-CONFIG_DM_CRYPT=y
-CONFIG_DM_MIRROR=y
-CONFIG_DM_ZERO=y
-CONFIG_DM_UEVENT=y
-CONFIG_DM_VERITY=y
-CONFIG_DM_VERITY_AVB=y
-CONFIG_DM_VERITY_FEC=y
-CONFIG_DM_BOW=y
-CONFIG_NETDEVICES=y
-CONFIG_NETCONSOLE=y
-CONFIG_NETCONSOLE_DYNAMIC=y
-CONFIG_TUN=y
-CONFIG_VIRTIO_NET=y
-# CONFIG_ETHERNET is not set
-CONFIG_PPP=y
-CONFIG_PPP_BSDCOMP=y
-CONFIG_PPP_DEFLATE=y
-CONFIG_PPP_MPPE=y
-CONFIG_PPTP=y
-CONFIG_PPPOL2TP=y
-CONFIG_USB_RTL8152=y
-CONFIG_USB_USBNET=y
-# CONFIG_USB_NET_AX8817X is not set
-# CONFIG_USB_NET_AX88179_178A is not set
-# CONFIG_USB_NET_CDCETHER is not set
-# CONFIG_USB_NET_CDC_NCM is not set
-# CONFIG_USB_NET_NET1080 is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-# CONFIG_USB_NET_ZAURUS is not set
-# CONFIG_WLAN_VENDOR_ADMTEK is not set
-# CONFIG_WLAN_VENDOR_ATH is not set
-# CONFIG_WLAN_VENDOR_ATMEL is not set
-# CONFIG_WLAN_VENDOR_BROADCOM is not set
-# CONFIG_WLAN_VENDOR_CISCO is not set
-# CONFIG_WLAN_VENDOR_INTEL is not set
-# CONFIG_WLAN_VENDOR_INTERSIL is not set
-# CONFIG_WLAN_VENDOR_MARVELL is not set
-# CONFIG_WLAN_VENDOR_MEDIATEK is not set
-# CONFIG_WLAN_VENDOR_RALINK is not set
-# CONFIG_WLAN_VENDOR_REALTEK is not set
-# CONFIG_WLAN_VENDOR_RSI is not set
-# CONFIG_WLAN_VENDOR_ST is not set
-# CONFIG_WLAN_VENDOR_TI is not set
-# CONFIG_WLAN_VENDOR_ZYDAS is not set
-# CONFIG_WLAN_VENDOR_QUANTENNA is not set
-CONFIG_MAC80211_HWSIM=y
-CONFIG_VIRT_WIFI=y
-CONFIG_INPUT_MOUSEDEV=y
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_KEYBOARD is not set
-# CONFIG_INPUT_MOUSE is not set
-CONFIG_INPUT_JOYSTICK=y
-CONFIG_JOYSTICK_XPAD=y
-CONFIG_JOYSTICK_XPAD_FF=y
-CONFIG_JOYSTICK_XPAD_LEDS=y
-CONFIG_INPUT_TABLET=y
-CONFIG_TABLET_USB_ACECAD=y
-CONFIG_TABLET_USB_AIPTEK=y
-CONFIG_TABLET_USB_GTCO=y
-CONFIG_TABLET_USB_HANWANG=y
-CONFIG_TABLET_USB_KBTAB=y
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=y
-# CONFIG_SERIO_I8042 is not set
-# CONFIG_VT is not set
-# CONFIG_LEGACY_PTYS is not set
-# CONFIG_DEVMEM is not set
-CONFIG_SERIAL_8250=y
-# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set
-CONFIG_SERIAL_8250_CONSOLE=y
-# CONFIG_SERIAL_8250_EXAR is not set
-CONFIG_SERIAL_8250_NR_UARTS=48
-CONFIG_SERIAL_8250_EXTENDED=y
-CONFIG_SERIAL_8250_MANY_PORTS=y
-CONFIG_SERIAL_8250_SHARE_IRQ=y
-CONFIG_VIRTIO_CONSOLE=y
-CONFIG_HW_RANDOM=y
-# CONFIG_HW_RANDOM_INTEL is not set
-# CONFIG_HW_RANDOM_AMD is not set
-# CONFIG_HW_RANDOM_VIA is not set
-CONFIG_HW_RANDOM_VIRTIO=y
-CONFIG_HPET=y
-# CONFIG_HPET_MMAP_DEFAULT is not set
-# CONFIG_DEVPORT is not set
-# CONFIG_ACPI_I2C_OPREGION is not set
-# CONFIG_I2C_COMPAT is not set
-# CONFIG_I2C_HELPER_AUTO is not set
-CONFIG_PTP_1588_CLOCK=y
-# CONFIG_HWMON is not set
-# CONFIG_X86_PKG_TEMP_THERMAL is not set
-CONFIG_WATCHDOG=y
-CONFIG_SOFT_WATCHDOG=y
-CONFIG_MEDIA_SUPPORT=y
-# CONFIG_VGA_ARB is not set
-CONFIG_DRM=y
-# CONFIG_DRM_FBDEV_EMULATION is not set
-CONFIG_DRM_VIRTIO_GPU=y
-CONFIG_SOUND=y
-CONFIG_SND=y
-CONFIG_SND_HRTIMER=y
-# CONFIG_SND_SUPPORT_OLD_API is not set
-# CONFIG_SND_VERBOSE_PROCFS is not set
-# CONFIG_SND_DRIVERS is not set
-CONFIG_SND_INTEL8X0=y
-# CONFIG_SND_USB is not set
-CONFIG_HIDRAW=y
-CONFIG_UHID=y
-CONFIG_HID_A4TECH=y
-CONFIG_HID_ACRUX=y
-CONFIG_HID_ACRUX_FF=y
-CONFIG_HID_APPLE=y
-CONFIG_HID_BELKIN=y
-CONFIG_HID_CHERRY=y
-CONFIG_HID_CHICONY=y
-CONFIG_HID_PRODIKEYS=y
-CONFIG_HID_CYPRESS=y
-CONFIG_HID_DRAGONRISE=y
-CONFIG_DRAGONRISE_FF=y
-CONFIG_HID_EMS_FF=y
-CONFIG_HID_ELECOM=y
-CONFIG_HID_EZKEY=y
-CONFIG_HID_HOLTEK=y
-CONFIG_HID_KEYTOUCH=y
-CONFIG_HID_KYE=y
-CONFIG_HID_UCLOGIC=y
-CONFIG_HID_WALTOP=y
-CONFIG_HID_GYRATION=y
-CONFIG_HID_TWINHAN=y
-CONFIG_HID_KENSINGTON=y
-CONFIG_HID_LCPOWER=y
-CONFIG_HID_LOGITECH=y
-CONFIG_HID_LOGITECH_DJ=y
-CONFIG_LOGITECH_FF=y
-CONFIG_LOGIRUMBLEPAD2_FF=y
-CONFIG_LOGIG940_FF=y
-CONFIG_HID_MAGICMOUSE=y
-CONFIG_HID_MICROSOFT=y
-CONFIG_HID_MONTEREY=y
-CONFIG_HID_MULTITOUCH=y
-CONFIG_HID_NTRIG=y
-CONFIG_HID_ORTEK=y
-CONFIG_HID_PANTHERLORD=y
-CONFIG_PANTHERLORD_FF=y
-CONFIG_HID_PETALYNX=y
-CONFIG_HID_PICOLCD=y
-CONFIG_HID_PRIMAX=y
-CONFIG_HID_ROCCAT=y
-CONFIG_HID_SAITEK=y
-CONFIG_HID_SAMSUNG=y
-CONFIG_HID_SONY=y
-CONFIG_HID_SPEEDLINK=y
-CONFIG_HID_SUNPLUS=y
-CONFIG_HID_GREENASIA=y
-CONFIG_GREENASIA_FF=y
-CONFIG_HID_SMARTJOYPLUS=y
-CONFIG_SMARTJOYPLUS_FF=y
-CONFIG_HID_TIVO=y
-CONFIG_HID_TOPSEED=y
-CONFIG_HID_THRUSTMASTER=y
-CONFIG_HID_WACOM=y
-CONFIG_HID_WIIMOTE=y
-CONFIG_HID_ZEROPLUS=y
-CONFIG_HID_ZYDACRON=y
-CONFIG_USB_HIDDEV=y
-CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
-CONFIG_USB_EHCI_HCD=y
-CONFIG_USB_GADGET=y
-CONFIG_USB_DUMMY_HCD=y
-CONFIG_USB_CONFIGFS=y
-CONFIG_USB_CONFIGFS_UEVENT=y
-CONFIG_USB_CONFIGFS_F_FS=y
-CONFIG_USB_CONFIGFS_F_ACC=y
-CONFIG_USB_CONFIGFS_F_AUDIO_SRC=y
-CONFIG_USB_CONFIGFS_F_MIDI=y
-CONFIG_MMC=y
-# CONFIG_PWRSEQ_EMMC is not set
-# CONFIG_PWRSEQ_SIMPLE is not set
-# CONFIG_MMC_BLOCK is not set
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_DRV_TEST=y
-CONFIG_SW_SYNC=y
-CONFIG_VIRTIO_PCI=y
-CONFIG_VIRTIO_BALLOON=y
-CONFIG_VIRTIO_INPUT=y
-CONFIG_VIRTIO_MMIO=y
-CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
-CONFIG_STAGING=y
-CONFIG_ASHMEM=y
-CONFIG_ANDROID_VSOC=y
-CONFIG_ION=y
-CONFIG_ION_SYSTEM_HEAP=y
-# CONFIG_X86_PLATFORM_DEVICES is not set
-# CONFIG_IOMMU_SUPPORT is not set
-CONFIG_ANDROID=y
-CONFIG_ANDROID_BINDER_IPC=y
-CONFIG_EXT4_FS=y
-CONFIG_EXT4_FS_POSIX_ACL=y
-CONFIG_EXT4_FS_SECURITY=y
-CONFIG_EXT4_ENCRYPTION=y
-CONFIG_F2FS_FS=y
-CONFIG_F2FS_FS_SECURITY=y
-CONFIG_F2FS_FS_ENCRYPTION=y
-CONFIG_QUOTA=y
-CONFIG_QUOTA_NETLINK_INTERFACE=y
-# CONFIG_PRINT_QUOTA_WARNING is not set
-CONFIG_QFMT_V2=y
-CONFIG_AUTOFS4_FS=y
-CONFIG_FUSE_FS=y
-CONFIG_OVERLAY_FS=y
-CONFIG_MSDOS_FS=y
-CONFIG_VFAT_FS=y
-CONFIG_PROC_KCORE=y
-CONFIG_TMPFS=y
-CONFIG_TMPFS_POSIX_ACL=y
-CONFIG_HUGETLBFS=y
-CONFIG_SDCARD_FS=y
-CONFIG_PSTORE=y
-CONFIG_PSTORE_CONSOLE=y
-CONFIG_PSTORE_RAM=y
-CONFIG_NLS_DEFAULT="utf8"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_ASCII=y
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_UTF8=y
-CONFIG_SECURITY_PERF_EVENTS_RESTRICT=y
-CONFIG_SECURITY=y
-CONFIG_SECURITY_NETWORK=y
-CONFIG_SECURITY_PATH=y
-CONFIG_HARDENED_USERCOPY=y
-CONFIG_SECURITY_SELINUX=y
-CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1
-# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
-CONFIG_CRYPTO_ADIANTUM=y
-CONFIG_CRYPTO_SHA512=y
-CONFIG_CRYPTO_LZ4=y
-CONFIG_CRYPTO_ZSTD=y
-CONFIG_CRYPTO_DEV_VIRTIO=y
-CONFIG_PRINTK_TIME=y
-CONFIG_DEBUG_INFO=y
-# CONFIG_ENABLE_MUST_CHECK is not set
-CONFIG_FRAME_WARN=1024
-# CONFIG_UNUSED_SYMBOLS is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_STACK_USAGE=y
-CONFIG_DEBUG_MEMORY_INIT=y
-CONFIG_DEBUG_STACKOVERFLOW=y
-CONFIG_HARDLOCKUP_DETECTOR=y
-CONFIG_PANIC_TIMEOUT=5
-CONFIG_SCHEDSTATS=y
-CONFIG_RCU_CPU_STALL_TIMEOUT=60
-CONFIG_ENABLE_DEFAULT_TRACERS=y
-CONFIG_IO_DELAY_NONE=y
-CONFIG_DEBUG_BOOT_PARAMS=y
-CONFIG_OPTIMIZE_INLINING=y
-CONFIG_UNWINDER_FRAME_POINTER=y
diff --git a/arch/x86/entry/syscalls/syscall_32.tbl b/arch/x86/entry/syscalls/syscall_32.tbl
index 57d188e..bb3a1b3 100644
--- a/arch/x86/entry/syscalls/syscall_32.tbl
+++ b/arch/x86/entry/syscalls/syscall_32.tbl
@@ -398,3 +398,5 @@
 384	i386	arch_prctl		sys_arch_prctl			__ia32_compat_sys_arch_prctl
 385	i386	io_pgetevents		sys_io_pgetevents		__ia32_compat_sys_io_pgetevents
 386	i386	rseq			sys_rseq			__ia32_sys_rseq
+424	i386	pidfd_send_signal	sys_pidfd_send_signal		__ia32_sys_pidfd_send_signal
+434	i386	pidfd_open		sys_pidfd_open			__ia32_sys_pidfd_open
diff --git a/arch/x86/entry/syscalls/syscall_64.tbl b/arch/x86/entry/syscalls/syscall_64.tbl
index 73f4951..af1ce3a 100644
--- a/arch/x86/entry/syscalls/syscall_64.tbl
+++ b/arch/x86/entry/syscalls/syscall_64.tbl
@@ -339,6 +339,8 @@
 330	common	pkey_alloc		sys_pkey_alloc
 331	common	pkey_free		sys_pkey_free
 332	common	statx			sys_statx
+424	common	pidfd_send_signal	sys_pidfd_send_signal
+434	common	pidfd_open		sys_pidfd_open
 
 #
 # x32-specific system call numbers start at 512 to avoid cache impact
diff --git a/arch/x86/events/intel/bts.c b/arch/x86/events/intel/bts.c
index 510f946..5a1cd9c 100644
--- a/arch/x86/events/intel/bts.c
+++ b/arch/x86/events/intel/bts.c
@@ -563,9 +563,11 @@
 	 * Note that the default paranoia setting permits unprivileged
 	 * users to profile the kernel.
 	 */
-	if (event->attr.exclude_kernel && perf_paranoid_kernel() &&
-	    !capable(CAP_SYS_ADMIN))
-		return -EACCES;
+	if (event->attr.exclude_kernel) {
+		ret = perf_allow_kernel(&event->attr);
+		if (ret)
+			return ret;
+	}
 
 	if (x86_add_exclusive(x86_lbr_exclusive_bts))
 		return -EBUSY;
diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c
index 2dd8b0d..0fc0208 100644
--- a/arch/x86/events/intel/core.c
+++ b/arch/x86/events/intel/core.c
@@ -3109,8 +3109,9 @@
 	if (x86_pmu.version < 3)
 		return -EINVAL;
 
-	if (perf_paranoid_cpu() && !capable(CAP_SYS_ADMIN))
-		return -EACCES;
+	ret = perf_allow_cpu(&event->attr);
+	if (ret)
+		return ret;
 
 	event->hw.config |= ARCH_PERFMON_EVENTSEL_ANY;
 
diff --git a/arch/x86/events/intel/p4.c b/arch/x86/events/intel/p4.c
index d32c0ee..4f9ac72 100644
--- a/arch/x86/events/intel/p4.c
+++ b/arch/x86/events/intel/p4.c
@@ -776,8 +776,9 @@
 	 * the user needs special permissions to be able to use it
 	 */
 	if (p4_ht_active() && p4_event_bind_map[v].shared) {
-		if (perf_paranoid_cpu() && !capable(CAP_SYS_ADMIN))
-			return -EACCES;
+		v = perf_allow_cpu(&event->attr);
+		if (v)
+			return v;
 	}
 
 	/* ESCR EventMask bits may be invalid */
diff --git a/arch/x86/events/intel/pt.c b/arch/x86/events/intel/pt.c
index 8f4c98f..f03100b 100644
--- a/arch/x86/events/intel/pt.c
+++ b/arch/x86/events/intel/pt.c
@@ -1213,7 +1213,8 @@
 static void pt_event_addr_filters_sync(struct perf_event *event)
 {
 	struct perf_addr_filters_head *head = perf_event_addr_filters(event);
-	unsigned long msr_a, msr_b, *offs = event->addr_filters_offs;
+	unsigned long msr_a, msr_b;
+	struct perf_addr_filter_range *fr = event->addr_filter_ranges;
 	struct pt_filters *filters = event->hw.addr_filters;
 	struct perf_addr_filter *filter;
 	int range = 0;
@@ -1222,12 +1223,12 @@
 		return;
 
 	list_for_each_entry(filter, &head->list, entry) {
-		if (filter->path.dentry && !offs[range]) {
+		if (filter->path.dentry && !fr[range].start) {
 			msr_a = msr_b = 0;
 		} else {
 			/* apply the offset */
-			msr_a = filter->offset + offs[range];
-			msr_b = filter->size + msr_a - 1;
+			msr_a = fr[range].start;
+			msr_b = msr_a + fr[range].size - 1;
 		}
 
 		filters->filter[range].msr_a  = msr_a;
diff --git a/arch/x86/include/asm/page_64_types.h b/arch/x86/include/asm/page_64_types.h
index 0b6352a..b99d497 100644
--- a/arch/x86/include/asm/page_64_types.h
+++ b/arch/x86/include/asm/page_64_types.h
@@ -7,11 +7,7 @@
 #endif
 
 #ifdef CONFIG_KASAN
-#ifdef CONFIG_KASAN_EXTRA
-#define KASAN_STACK_ORDER 2
-#else
 #define KASAN_STACK_ORDER 1
-#endif
 #else
 #define KASAN_STACK_ORDER 0
 #endif
diff --git a/arch/x86/include/asm/smap.h b/arch/x86/include/asm/smap.h
index db33330..6cfe431 100644
--- a/arch/x86/include/asm/smap.h
+++ b/arch/x86/include/asm/smap.h
@@ -58,6 +58,23 @@
 	alternative("", __stringify(__ASM_STAC), X86_FEATURE_SMAP);
 }
 
+static __always_inline unsigned long smap_save(void)
+{
+	unsigned long flags;
+
+	asm volatile (ALTERNATIVE("", "pushf; pop %0; " __stringify(__ASM_CLAC),
+				  X86_FEATURE_SMAP)
+		      : "=rm" (flags) : : "memory", "cc");
+
+	return flags;
+}
+
+static __always_inline void smap_restore(unsigned long flags)
+{
+	asm volatile (ALTERNATIVE("", "push %0; popf", X86_FEATURE_SMAP)
+		      : : "g" (flags) : "memory", "cc");
+}
+
 /* These macros can be used in asm() statements */
 #define ASM_CLAC \
 	ALTERNATIVE("", __stringify(__ASM_CLAC), X86_FEATURE_SMAP)
@@ -69,6 +86,9 @@
 static inline void clac(void) { }
 static inline void stac(void) { }
 
+static inline unsigned long smap_save(void) { return 0; }
+static inline void smap_restore(unsigned long flags) { }
+
 #define ASM_CLAC
 #define ASM_STAC
 
diff --git a/arch/x86/include/asm/uaccess.h b/arch/x86/include/asm/uaccess.h
index 9718303..d34e354 100644
--- a/arch/x86/include/asm/uaccess.h
+++ b/arch/x86/include/asm/uaccess.h
@@ -711,9 +711,22 @@
  * checking before using them, but you have to surround them with the
  * user_access_begin/end() pair.
  */
-#define user_access_begin()	__uaccess_begin()
+static __must_check inline bool user_access_begin(int type,
+						  const void __user *ptr,
+						  size_t len)
+{
+	if (unlikely(!access_ok(type, ptr, len)))
+		return 0;
+	__uaccess_begin();
+	return 1;
+}
+
+#define user_access_begin(a, b, c)	user_access_begin(a, b, c)
 #define user_access_end()	__uaccess_end()
 
+#define user_access_save()	smap_save()
+#define user_access_restore(x)	smap_restore(x)
+
 #define unsafe_put_user(x, ptr, err_label)					\
 do {										\
 	int __pu_err;								\
diff --git a/arch/x86/kvm/Kconfig b/arch/x86/kvm/Kconfig
index 1bbec38..f3f2e54 100644
--- a/arch/x86/kvm/Kconfig
+++ b/arch/x86/kvm/Kconfig
@@ -27,7 +27,6 @@
 	depends on X86_LOCAL_APIC
 	select PREEMPT_NOTIFIERS
 	select MMU_NOTIFIER
-	select ANON_INODES
 	select HAVE_KVM_IRQCHIP
 	select HAVE_KVM_IRQFD
 	select IRQ_BYPASS_MANAGER
diff --git a/arch/x86/mm/dump_pagetables.c b/arch/x86/mm/dump_pagetables.c
index abcb8d0..e3cdc85 100644
--- a/arch/x86/mm/dump_pagetables.c
+++ b/arch/x86/mm/dump_pagetables.c
@@ -377,7 +377,7 @@
 
 /*
  * This is an optimization for KASAN=y case. Since all kasan page tables
- * eventually point to the kasan_zero_page we could call note_page()
+ * eventually point to the kasan_early_shadow_page we could call note_page()
  * right away without walking through lower level page tables. This saves
  * us dozens of seconds (minutes for 5-level config) while checking for
  * W+X mapping or reading kernel_page_tables debugfs file.
@@ -385,10 +385,11 @@
 static inline bool kasan_page_table(struct seq_file *m, struct pg_state *st,
 				void *pt)
 {
-	if (__pa(pt) == __pa(kasan_zero_pmd) ||
-	    (pgtable_l5_enabled() && __pa(pt) == __pa(kasan_zero_p4d)) ||
-	    __pa(pt) == __pa(kasan_zero_pud)) {
-		pgprotval_t prot = pte_flags(kasan_zero_pte[0]);
+	if (__pa(pt) == __pa(kasan_early_shadow_pmd) ||
+	    (pgtable_l5_enabled() &&
+			__pa(pt) == __pa(kasan_early_shadow_p4d)) ||
+	    __pa(pt) == __pa(kasan_early_shadow_pud)) {
+		pgprotval_t prot = pte_flags(kasan_early_shadow_pte[0]);
 		note_page(m, st, __pgprot(prot), 0, 5);
 		return true;
 	}
diff --git a/arch/x86/mm/kasan_init_64.c b/arch/x86/mm/kasan_init_64.c
index 4bfd14d..d6f8f87 100644
--- a/arch/x86/mm/kasan_init_64.c
+++ b/arch/x86/mm/kasan_init_64.c
@@ -212,7 +212,8 @@
 	unsigned long next;
 
 	if (pgd_none(*pgd)) {
-		pgd_entry = __pgd(_KERNPG_TABLE | __pa_nodebug(kasan_zero_p4d));
+		pgd_entry = __pgd(_KERNPG_TABLE |
+					__pa_nodebug(kasan_early_shadow_p4d));
 		set_pgd(pgd, pgd_entry);
 	}
 
@@ -223,7 +224,8 @@
 		if (!p4d_none(*p4d))
 			continue;
 
-		p4d_entry = __p4d(_KERNPG_TABLE | __pa_nodebug(kasan_zero_pud));
+		p4d_entry = __p4d(_KERNPG_TABLE |
+					__pa_nodebug(kasan_early_shadow_pud));
 		set_p4d(p4d, p4d_entry);
 	} while (p4d++, addr = next, addr != end && p4d_none(*p4d));
 }
@@ -262,10 +264,11 @@
 void __init kasan_early_init(void)
 {
 	int i;
-	pteval_t pte_val = __pa_nodebug(kasan_zero_page) | __PAGE_KERNEL | _PAGE_ENC;
-	pmdval_t pmd_val = __pa_nodebug(kasan_zero_pte) | _KERNPG_TABLE;
-	pudval_t pud_val = __pa_nodebug(kasan_zero_pmd) | _KERNPG_TABLE;
-	p4dval_t p4d_val = __pa_nodebug(kasan_zero_pud) | _KERNPG_TABLE;
+	pteval_t pte_val = __pa_nodebug(kasan_early_shadow_page) |
+				__PAGE_KERNEL | _PAGE_ENC;
+	pmdval_t pmd_val = __pa_nodebug(kasan_early_shadow_pte) | _KERNPG_TABLE;
+	pudval_t pud_val = __pa_nodebug(kasan_early_shadow_pmd) | _KERNPG_TABLE;
+	p4dval_t p4d_val = __pa_nodebug(kasan_early_shadow_pud) | _KERNPG_TABLE;
 
 	/* Mask out unsupported __PAGE_KERNEL bits: */
 	pte_val &= __default_kernel_pte_mask;
@@ -274,16 +277,16 @@
 	p4d_val &= __default_kernel_pte_mask;
 
 	for (i = 0; i < PTRS_PER_PTE; i++)
-		kasan_zero_pte[i] = __pte(pte_val);
+		kasan_early_shadow_pte[i] = __pte(pte_val);
 
 	for (i = 0; i < PTRS_PER_PMD; i++)
-		kasan_zero_pmd[i] = __pmd(pmd_val);
+		kasan_early_shadow_pmd[i] = __pmd(pmd_val);
 
 	for (i = 0; i < PTRS_PER_PUD; i++)
-		kasan_zero_pud[i] = __pud(pud_val);
+		kasan_early_shadow_pud[i] = __pud(pud_val);
 
 	for (i = 0; pgtable_l5_enabled() && i < PTRS_PER_P4D; i++)
-		kasan_zero_p4d[i] = __p4d(p4d_val);
+		kasan_early_shadow_p4d[i] = __p4d(p4d_val);
 
 	kasan_map_early_shadow(early_top_pgt);
 	kasan_map_early_shadow(init_top_pgt);
@@ -327,7 +330,7 @@
 
 	clear_pgds(KASAN_SHADOW_START & PGDIR_MASK, KASAN_SHADOW_END);
 
-	kasan_populate_zero_shadow((void *)(KASAN_SHADOW_START & PGDIR_MASK),
+	kasan_populate_early_shadow((void *)(KASAN_SHADOW_START & PGDIR_MASK),
 			kasan_mem_to_shadow((void *)PAGE_OFFSET));
 
 	for (i = 0; i < E820_MAX_ENTRIES; i++) {
@@ -339,41 +342,41 @@
 
 	shadow_cpu_entry_begin = (void *)CPU_ENTRY_AREA_BASE;
 	shadow_cpu_entry_begin = kasan_mem_to_shadow(shadow_cpu_entry_begin);
-	shadow_cpu_entry_begin = (void *)round_down((unsigned long)shadow_cpu_entry_begin,
-						PAGE_SIZE);
+	shadow_cpu_entry_begin = (void *)round_down(
+			(unsigned long)shadow_cpu_entry_begin, PAGE_SIZE);
 
 	shadow_cpu_entry_end = (void *)(CPU_ENTRY_AREA_BASE +
 					CPU_ENTRY_AREA_MAP_SIZE);
 	shadow_cpu_entry_end = kasan_mem_to_shadow(shadow_cpu_entry_end);
-	shadow_cpu_entry_end = (void *)round_up((unsigned long)shadow_cpu_entry_end,
-					PAGE_SIZE);
+	shadow_cpu_entry_end = (void *)round_up(
+			(unsigned long)shadow_cpu_entry_end, PAGE_SIZE);
 
-	kasan_populate_zero_shadow(
+	kasan_populate_early_shadow(
 		kasan_mem_to_shadow((void *)PAGE_OFFSET + MAXMEM),
 		shadow_cpu_entry_begin);
 
 	kasan_populate_shadow((unsigned long)shadow_cpu_entry_begin,
 			      (unsigned long)shadow_cpu_entry_end, 0);
 
-	kasan_populate_zero_shadow(shadow_cpu_entry_end,
-				kasan_mem_to_shadow((void *)__START_KERNEL_map));
+	kasan_populate_early_shadow(shadow_cpu_entry_end,
+			kasan_mem_to_shadow((void *)__START_KERNEL_map));
 
 	kasan_populate_shadow((unsigned long)kasan_mem_to_shadow(_stext),
 			      (unsigned long)kasan_mem_to_shadow(_end),
 			      early_pfn_to_nid(__pa(_stext)));
 
-	kasan_populate_zero_shadow(kasan_mem_to_shadow((void *)MODULES_END),
-				(void *)KASAN_SHADOW_END);
+	kasan_populate_early_shadow(kasan_mem_to_shadow((void *)MODULES_END),
+					(void *)KASAN_SHADOW_END);
 
 	load_cr3(init_top_pgt);
 	__flush_tlb_all();
 
 	/*
-	 * kasan_zero_page has been used as early shadow memory, thus it may
-	 * contain some garbage. Now we can clear and write protect it, since
-	 * after the TLB flush no one should write to it.
+	 * kasan_early_shadow_page has been used as early shadow memory, thus
+	 * it may contain some garbage. Now we can clear and write protect it,
+	 * since after the TLB flush no one should write to it.
 	 */
-	memset(kasan_zero_page, 0, PAGE_SIZE);
+	memset(kasan_early_shadow_page, 0, PAGE_SIZE);
 	for (i = 0; i < PTRS_PER_PTE; i++) {
 		pte_t pte;
 		pgprot_t prot;
@@ -381,8 +384,8 @@
 		prot = __pgprot(__PAGE_KERNEL_RO | _PAGE_ENC);
 		pgprot_val(prot) &= __default_kernel_pte_mask;
 
-		pte = __pte(__pa(kasan_zero_page) | pgprot_val(prot));
-		set_pte(&kasan_zero_pte[i], pte);
+		pte = __pte(__pa(kasan_early_shadow_page) | pgprot_val(prot));
+		set_pte(&kasan_early_shadow_pte[i], pte);
 	}
 	/* Flush TLBs again to be sure that write protection applied. */
 	__flush_tlb_all();
diff --git a/arch/xtensa/mm/kasan_init.c b/arch/xtensa/mm/kasan_init.c
index 6b532b6..38ecdbf 100644
--- a/arch/xtensa/mm/kasan_init.c
+++ b/arch/xtensa/mm/kasan_init.c
@@ -25,12 +25,13 @@
 	int i;
 
 	for (i = 0; i < PTRS_PER_PTE; ++i)
-		set_pte(kasan_zero_pte + i,
-			mk_pte(virt_to_page(kasan_zero_page), PAGE_KERNEL));
+		set_pte(kasan_early_shadow_pte + i,
+			mk_pte(virt_to_page(kasan_early_shadow_page),
+				PAGE_KERNEL));
 
 	for (vaddr = 0; vaddr < KASAN_SHADOW_SIZE; vaddr += PMD_SIZE, ++pmd) {
 		BUG_ON(!pmd_none(*pmd));
-		set_pmd(pmd, __pmd((unsigned long)kasan_zero_pte));
+		set_pmd(pmd, __pmd((unsigned long)kasan_early_shadow_pte));
 	}
 	early_trap_init();
 }
@@ -81,13 +82,16 @@
 	populate(kasan_mem_to_shadow((void *)VMALLOC_START),
 		 kasan_mem_to_shadow((void *)XCHAL_KSEG_BYPASS_VADDR));
 
-	/* Write protect kasan_zero_page and zero-initialize it again. */
+	/*
+	 * Write protect kasan_early_shadow_page and zero-initialize it again.
+	 */
 	for (i = 0; i < PTRS_PER_PTE; ++i)
-		set_pte(kasan_zero_pte + i,
-			mk_pte(virt_to_page(kasan_zero_page), PAGE_KERNEL_RO));
+		set_pte(kasan_early_shadow_pte + i,
+			mk_pte(virt_to_page(kasan_early_shadow_page),
+				PAGE_KERNEL_RO));
 
 	local_flush_tlb_all();
-	memset(kasan_zero_page, 0, PAGE_SIZE);
+	memset(kasan_early_shadow_page, 0, PAGE_SIZE);
 
 	/* At this point kasan is fully initialized. Enable error messages. */
 	current->kasan_depth = 0;
diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
index ef5a07b..ceb72a7 100644
--- a/block/bfq-iosched.c
+++ b/block/bfq-iosched.c
@@ -5152,20 +5152,28 @@
 	return bfqq;
 }
 
-static void bfq_idle_slice_timer_body(struct bfq_queue *bfqq)
+static void
+bfq_idle_slice_timer_body(struct bfq_data *bfqd, struct bfq_queue *bfqq)
 {
-	struct bfq_data *bfqd = bfqq->bfqd;
 	enum bfqq_expiration reason;
 	unsigned long flags;
 
 	spin_lock_irqsave(&bfqd->lock, flags);
-	bfq_clear_bfqq_wait_request(bfqq);
 
+	/*
+	 * Considering that bfqq may be in race, we should firstly check
+	 * whether bfqq is in service before doing something on it. If
+	 * the bfqq in race is not in service, it has already been expired
+	 * through __bfq_bfqq_expire func and its wait_request flags has
+	 * been cleared in __bfq_bfqd_reset_in_service func.
+	 */
 	if (bfqq != bfqd->in_service_queue) {
 		spin_unlock_irqrestore(&bfqd->lock, flags);
 		return;
 	}
 
+	bfq_clear_bfqq_wait_request(bfqq);
+
 	if (bfq_bfqq_budget_timeout(bfqq))
 		/*
 		 * Also here the queue can be safely expired
@@ -5210,7 +5218,7 @@
 	 * early.
 	 */
 	if (bfqq)
-		bfq_idle_slice_timer_body(bfqq);
+		bfq_idle_slice_timer_body(bfqd, bfqq);
 
 	return HRTIMER_NORESTART;
 }
diff --git a/block/bio.c b/block/bio.c
index 5ccc459..ab2acc2 100644
--- a/block/bio.c
+++ b/block/bio.c
@@ -816,6 +816,9 @@
 
 	bio->bi_iter.bi_size += len;
 	bio->bi_vcnt++;
+
+	if (!bio_flagged(bio, BIO_WORKINGSET) && unlikely(PageWorkingset(page)))
+		bio_set_flag(bio, BIO_WORKINGSET);
 }
 EXPORT_SYMBOL_GPL(__bio_add_page);
 
diff --git a/block/blk-core.c b/block/blk-core.c
index dca51ca..b6c6fb1 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -35,6 +35,7 @@
 #include <linux/blk-cgroup.h>
 #include <linux/debugfs.h>
 #include <linux/bpf.h>
+#include <linux/psi.h>
 
 #define CREATE_TRACE_POINTS
 #include <trace/events/block.h>
@@ -2550,6 +2551,10 @@
  */
 blk_qc_t submit_bio(struct bio *bio)
 {
+	bool workingset_read = false;
+	unsigned long pflags;
+	blk_qc_t ret;
+
 	/*
 	 * If it's a regular read/write or a barrier with data attached,
 	 * go through the normal accounting stuff before submission.
@@ -2565,6 +2570,8 @@
 		if (op_is_write(bio_op(bio))) {
 			count_vm_events(PGPGOUT, count);
 		} else {
+			if (bio_flagged(bio, BIO_WORKINGSET))
+				workingset_read = true;
 			task_io_account_read(bio->bi_iter.bi_size);
 			count_vm_events(PGPGIN, count);
 		}
@@ -2579,7 +2586,21 @@
 		}
 	}
 
-	return generic_make_request(bio);
+	/*
+	 * If we're reading data that is part of the userspace
+	 * workingset, count submission time as memory stall. When the
+	 * device is congested, or the submitting cgroup IO-throttled,
+	 * submission can be a significant part of overall IO time.
+	 */
+	if (workingset_read)
+		psi_memstall_enter(&pflags);
+
+	ret = generic_make_request(bio);
+
+	if (workingset_read)
+		psi_memstall_leave(&pflags);
+
+	return ret;
 }
 EXPORT_SYMBOL(submit_bio);
 
diff --git a/block/blk-ioc.c b/block/blk-ioc.c
index 01580f8..4c81096 100644
--- a/block/blk-ioc.c
+++ b/block/blk-ioc.c
@@ -87,6 +87,7 @@
 	 * making it impossible to determine icq_cache.  Record it in @icq.
 	 */
 	icq->__rcu_icq_cache = et->icq_cache;
+	icq->flags |= ICQ_DESTROYED;
 	call_rcu(&icq->__rcu_head, icq_free_icq_rcu);
 }
 
@@ -230,15 +231,21 @@
 {
 	unsigned long flags;
 
+	rcu_read_lock();
 	while (!list_empty(icq_list)) {
 		struct io_cq *icq = list_entry(icq_list->next,
 					       struct io_cq, q_node);
 		struct io_context *ioc = icq->ioc;
 
 		spin_lock_irqsave(&ioc->lock, flags);
+		if (icq->flags & ICQ_DESTROYED) {
+			spin_unlock_irqrestore(&ioc->lock, flags);
+			continue;
+		}
 		ioc_destroy_icq(icq);
 		spin_unlock_irqrestore(&ioc->lock, flags);
 	}
+	rcu_read_unlock();
 }
 
 /**
diff --git a/block/blk-merge.c b/block/blk-merge.c
index 8d61477..8c8c285 100644
--- a/block/blk-merge.c
+++ b/block/blk-merge.c
@@ -673,31 +673,6 @@
 		part_stat_unlock();
 	}
 }
-/*
- * Two cases of handling DISCARD merge:
- * If max_discard_segments > 1, the driver takes every bio
- * as a range and send them to controller together. The ranges
- * needn't to be contiguous.
- * Otherwise, the bios/requests will be handled as same as
- * others which should be contiguous.
- */
-static inline bool blk_discard_mergable(struct request *req)
-{
-	if (req_op(req) == REQ_OP_DISCARD &&
-	    queue_max_discard_segments(req->q) > 1)
-		return true;
-	return false;
-}
-
-enum elv_merge blk_try_req_merge(struct request *req, struct request *next)
-{
-	if (blk_discard_mergable(req))
-		return ELEVATOR_DISCARD_MERGE;
-	else if (blk_rq_pos(req) + blk_rq_sectors(req) == blk_rq_pos(next))
-		return ELEVATOR_BACK_MERGE;
-
-	return ELEVATOR_NO_MERGE;
-}
 
 static bool crypto_not_mergeable(const struct bio *bio, const struct bio *nxt)
 {
@@ -720,6 +695,12 @@
 	if (req_op(req) != req_op(next))
 		return NULL;
 
+	/*
+	 * not contiguous
+	 */
+	if (blk_rq_pos(req) + blk_rq_sectors(req) != blk_rq_pos(next))
+		return NULL;
+
 	if (rq_data_dir(req) != rq_data_dir(next)
 	    || req->rq_disk != next->rq_disk
 	    || req_no_special_merge(next))
@@ -746,19 +727,11 @@
 	 * counts here. Handle DISCARDs separately, as they
 	 * have separate settings.
 	 */
-
-	switch (blk_try_req_merge(req, next)) {
-	case ELEVATOR_DISCARD_MERGE:
+	if (req_op(req) == REQ_OP_DISCARD) {
 		if (!req_attempt_discard_merge(q, req, next))
 			return NULL;
-		break;
-	case ELEVATOR_BACK_MERGE:
-		if (!ll_merge_requests_fn(q, req, next))
-			return NULL;
-		break;
-	default:
+	} else if (!ll_merge_requests_fn(q, req, next))
 		return NULL;
-	}
 
 	/*
 	 * If failfast settings disagree or any of the two is already
@@ -786,7 +759,7 @@
 
 	req->__data_len += blk_rq_bytes(next);
 
-	if (!blk_discard_mergable(req))
+	if (req_op(req) != REQ_OP_DISCARD)
 		elv_merge_requests(q, req, next);
 
 	/*
@@ -882,7 +855,8 @@
 
 enum elv_merge blk_try_merge(struct request *rq, struct bio *bio)
 {
-	if (blk_discard_mergable(rq))
+	if (req_op(rq) == REQ_OP_DISCARD &&
+	    queue_max_discard_segments(rq->q) > 1)
 		return ELEVATOR_DISCARD_MERGE;
 	else if (blk_rq_pos(rq) + blk_rq_sectors(rq) ==
 						bio->bi_iter.bi_sector) {
diff --git a/build.config.allmodconfig b/build.config.allmodconfig
new file mode 100644
index 0000000..f4da6b2
--- /dev/null
+++ b/build.config.allmodconfig
@@ -0,0 +1,16 @@
+DEFCONFIG=allmodconfig
+
+# XFS_FS is currently broken on this branch with clang-9
+POST_DEFCONFIG_CMDS="update_config"
+function update_config() {
+    ${KERNEL_DIR}/scripts/config --file ${OUT_DIR}/.config \
+         -d TEST_KMOD  \
+         -d XFS_FS \
+         -d CPU_BIG_ENDIAN \
+         -d STM \
+         -d TEST_MEMCAT_P \
+         -e UNWINDER_FRAME_POINTER \
+
+    (cd ${OUT_DIR} && \
+     make O=${OUT_DIR} $archsubarch CC=${CC} CROSS_COMPILE=${CROSS_COMPILE} olddefconfig)
+}
diff --git a/build.config.allmodconfig.aarch64 b/build.config.allmodconfig.aarch64
new file mode 100644
index 0000000..863ab1c
--- /dev/null
+++ b/build.config.allmodconfig.aarch64
@@ -0,0 +1,4 @@
+. ${ROOT_DIR}/common/build.config.common
+. ${ROOT_DIR}/common/build.config.aarch64
+. ${ROOT_DIR}/common/build.config.allmodconfig
+
diff --git a/build.config.allmodconfig.x86_64 b/build.config.allmodconfig.x86_64
new file mode 100644
index 0000000..bedb386
--- /dev/null
+++ b/build.config.allmodconfig.x86_64
@@ -0,0 +1,4 @@
+. ${ROOT_DIR}/common/build.config.common
+. ${ROOT_DIR}/common/build.config.x86_64
+. ${ROOT_DIR}/common/build.config.allmodconfig
+
diff --git a/build.config.common b/build.config.common
index 707de4f..d75e565 100644
--- a/build.config.common
+++ b/build.config.common
@@ -1,9 +1,13 @@
-BRANCH=android-4.19-q
+BRANCH=android-4.19
 KERNEL_DIR=common
 
 CC=clang
-CLANG_PREBUILT_BIN=prebuilts-master/clang/host/linux-x86/clang-r365631c/bin
+LD=ld.lld
+NM=llvm-nm
+OBJCOPY=llvm-objcopy
+CLANG_PREBUILT_BIN=prebuilts-master/clang/host/linux-x86/clang-r370808/bin
 
 EXTRA_CMDS=''
 STOP_SHIP_TRACEPRINTK=1
-LD=ld.lld
+IN_KERNEL_MODULES=1
+DO_NOT_STRIP_MODULES=1
diff --git a/build.config.cuttlefish.aarch64 b/build.config.cuttlefish.aarch64
deleted file mode 100644
index 0cb6019..0000000
--- a/build.config.cuttlefish.aarch64
+++ /dev/null
@@ -1,5 +0,0 @@
-. ${ROOT_DIR}/common/build.config.common
-. ${ROOT_DIR}/common/build.config.aarch64
-
-DEFCONFIG=cuttlefish_defconfig
-POST_DEFCONFIG_CMDS="check_defconfig"
diff --git a/build.config.cuttlefish.x86_64 b/build.config.cuttlefish.x86_64
deleted file mode 100644
index fed773c..0000000
--- a/build.config.cuttlefish.x86_64
+++ /dev/null
@@ -1,5 +0,0 @@
-. ${ROOT_DIR}/common/build.config.common
-. ${ROOT_DIR}/common/build.config.x86_64
-
-DEFCONFIG=x86_64_cuttlefish_defconfig
-POST_DEFCONFIG_CMDS="check_defconfig"
diff --git a/build.config.gki b/build.config.gki
new file mode 100644
index 0000000..66f6eb8
--- /dev/null
+++ b/build.config.gki
@@ -0,0 +1,4 @@
+DEFCONFIG=gki_defconfig
+POST_DEFCONFIG_CMDS="check_defconfig"
+BUILD_INITRAMFS=1
+
diff --git a/build.config.gki.aarch64 b/build.config.gki.aarch64
new file mode 100644
index 0000000..dade440
--- /dev/null
+++ b/build.config.gki.aarch64
@@ -0,0 +1,6 @@
+. ${ROOT_DIR}/common/build.config.common
+. ${ROOT_DIR}/common/build.config.aarch64
+. ${ROOT_DIR}/common/build.config.gki
+
+ABI_DEFINITION=abi_gki_aarch64.xml
+KMI_WHITELIST=abi_gki_aarch64_whitelist
diff --git a/build.config.gki.x86_64 b/build.config.gki.x86_64
new file mode 100644
index 0000000..627d1e1
--- /dev/null
+++ b/build.config.gki.x86_64
@@ -0,0 +1,4 @@
+. ${ROOT_DIR}/common/build.config.common
+. ${ROOT_DIR}/common/build.config.x86_64
+. ${ROOT_DIR}/common/build.config.gki
+
diff --git a/drivers/android/Kconfig b/drivers/android/Kconfig
index 432e9ad..6fdf2ab 100644
--- a/drivers/android/Kconfig
+++ b/drivers/android/Kconfig
@@ -20,6 +20,18 @@
 	  Android process, using Binder to identify, invoke and pass arguments
 	  between said processes.
 
+config ANDROID_BINDERFS
+	bool "Android Binderfs filesystem"
+	depends on ANDROID_BINDER_IPC
+	default n
+	---help---
+	  Binderfs is a pseudo-filesystem for the Android Binder IPC driver
+	  which can be mounted per-ipc namespace allowing to run multiple
+	  instances of Android.
+	  Each binderfs mount initially only contains a binder-control device.
+	  It can be used to dynamically allocate new binder IPC devices via
+	  ioctls.
+
 config ANDROID_BINDER_DEVICES
 	string "Android Binder devices"
 	depends on ANDROID_BINDER_IPC
diff --git a/drivers/android/Makefile b/drivers/android/Makefile
index a01254c..c7856e3 100644
--- a/drivers/android/Makefile
+++ b/drivers/android/Makefile
@@ -1,4 +1,5 @@
 ccflags-y += -I$(src)			# needed for trace events
 
+obj-$(CONFIG_ANDROID_BINDERFS)		+= binderfs.o
 obj-$(CONFIG_ANDROID_BINDER_IPC)	+= binder.o binder_alloc.o
 obj-$(CONFIG_ANDROID_BINDER_IPC_SELFTEST) += binder_alloc_selftest.o
diff --git a/drivers/android/binder.c b/drivers/android/binder.c
index c35d949..4cdbd7b 100644
--- a/drivers/android/binder.c
+++ b/drivers/android/binder.c
@@ -78,6 +78,7 @@
 #include <asm/cacheflush.h>
 
 #include "binder_alloc.h"
+#include "binder_internal.h"
 #include "binder_trace.h"
 
 static HLIST_HEAD(binder_deferred_list);
@@ -94,22 +95,8 @@
 static struct dentry *binder_debugfs_dir_entry_proc;
 static atomic_t binder_last_id;
 
-#define BINDER_DEBUG_ENTRY(name) \
-static int binder_##name##_open(struct inode *inode, struct file *file) \
-{ \
-	return single_open(file, binder_##name##_show, inode->i_private); \
-} \
-\
-static const struct file_operations binder_##name##_fops = { \
-	.owner = THIS_MODULE, \
-	.open = binder_##name##_open, \
-	.read = seq_read, \
-	.llseek = seq_lseek, \
-	.release = single_release, \
-}
-
-static int binder_proc_show(struct seq_file *m, void *unused);
-BINDER_DEBUG_ENTRY(proc);
+static int proc_show(struct seq_file *m, void *unused);
+DEFINE_SHOW_ATTRIBUTE(proc);
 
 /* This is only defined in include/asm-arm/sizes.h */
 #ifndef SZ_1K
@@ -143,7 +130,7 @@
 	BINDER_DEBUG_FAILED_TRANSACTION | BINDER_DEBUG_DEAD_TRANSACTION;
 module_param_named(debug_mask, binder_debug_mask, uint, 0644);
 
-static char *binder_devices_param = CONFIG_ANDROID_BINDER_DEVICES;
+char *binder_devices_param = CONFIG_ANDROID_BINDER_DEVICES;
 module_param_named(devices, binder_devices_param, charp, 0444);
 
 static DECLARE_WAIT_QUEUE_HEAD(binder_user_error_wait);
@@ -217,30 +204,8 @@
 	atomic_inc(&binder_stats.obj_created[type]);
 }
 
-struct binder_transaction_log_entry {
-	int debug_id;
-	int debug_id_done;
-	int call_type;
-	int from_proc;
-	int from_thread;
-	int target_handle;
-	int to_proc;
-	int to_thread;
-	int to_node;
-	int data_size;
-	int offsets_size;
-	int return_error_line;
-	uint32_t return_error;
-	uint32_t return_error_param;
-	const char *context_name;
-};
-struct binder_transaction_log {
-	atomic_t cur;
-	bool full;
-	struct binder_transaction_log_entry entry[32];
-};
-static struct binder_transaction_log binder_transaction_log;
-static struct binder_transaction_log binder_transaction_log_failed;
+struct binder_transaction_log binder_transaction_log;
+struct binder_transaction_log binder_transaction_log_failed;
 
 static struct binder_transaction_log_entry *binder_transaction_log_add(
 	struct binder_transaction_log *log)
@@ -262,20 +227,6 @@
 	return e;
 }
 
-struct binder_context {
-	struct binder_node *binder_context_mgr_node;
-	struct mutex context_mgr_node_lock;
-
-	kuid_t binder_context_mgr_uid;
-	const char *name;
-};
-
-struct binder_device {
-	struct hlist_node hlist;
-	struct miscdevice miscdev;
-	struct binder_context context;
-};
-
 /**
  * struct binder_work - work enqueued on a worklist
  * @entry:             node enqueued on list
@@ -540,6 +491,7 @@
  * @inner_lock:           can nest under outer_lock and/or node lock
  * @outer_lock:           no nesting under innor or node lock
  *                        Lock order: 1) outer, 2) node, 3) inner
+ * @binderfs_entry:       process-specific binderfs log file
  *
  * Bookkeeping structure for binder processes
  */
@@ -571,6 +523,7 @@
 	struct binder_context *context;
 	spinlock_t inner_lock;
 	spinlock_t outer_lock;
+	struct dentry *binderfs_entry;
 };
 
 enum {
@@ -3450,7 +3403,7 @@
 			binder_size_t parent_offset;
 			struct binder_fd_array_object *fda =
 				to_binder_fd_array_object(hdr);
-			size_t num_valid = (buffer_offset - off_start_offset) *
+			size_t num_valid = (buffer_offset - off_start_offset) /
 						sizeof(binder_size_t);
 			struct binder_buffer_object *parent =
 				binder_validate_ptr(target_proc, t->buffer,
@@ -3524,7 +3477,7 @@
 				t->buffer->user_data + sg_buf_offset;
 			sg_buf_offset += ALIGN(bp->length, sizeof(u64));
 
-			num_valid = (buffer_offset - off_start_offset) *
+			num_valid = (buffer_offset - off_start_offset) /
 					sizeof(binder_size_t);
 			ret = binder_fixup_parent(t, thread, bp,
 						  off_start_offset,
@@ -5230,6 +5183,8 @@
 {
 	struct binder_proc *proc;
 	struct binder_device *binder_dev;
+	struct binderfs_info *info;
+	struct dentry *binder_binderfs_dir_entry_proc = NULL;
 
 	binder_debug(BINDER_DEBUG_OPEN_CLOSE, "%s: %d:%d\n", __func__,
 		     current->group_leader->pid, current->pid);
@@ -5251,8 +5206,15 @@
 		proc->default_priority.prio = NICE_TO_PRIO(0);
 	}
 
-	binder_dev = container_of(filp->private_data, struct binder_device,
-				  miscdev);
+	/* binderfs stashes devices in i_private */
+	if (is_binderfs_device(nodp)) {
+		binder_dev = nodp->i_private;
+		info = nodp->i_sb->s_fs_info;
+		binder_binderfs_dir_entry_proc = info->proc_log_dir;
+	} else {
+		binder_dev = container_of(filp->private_data,
+					  struct binder_device, miscdev);
+	}
 	proc->context = &binder_dev->context;
 	binder_alloc_init(&proc->alloc);
 
@@ -5280,7 +5242,36 @@
 		proc->debugfs_entry = debugfs_create_file(strbuf, 0444,
 			binder_debugfs_dir_entry_proc,
 			(void *)(unsigned long)proc->pid,
-			&binder_proc_fops);
+			&proc_fops);
+	}
+
+	if (binder_binderfs_dir_entry_proc) {
+		char strbuf[11];
+		struct dentry *binderfs_entry;
+
+		snprintf(strbuf, sizeof(strbuf), "%u", proc->pid);
+		/*
+		 * Similar to debugfs, the process specific log file is shared
+		 * between contexts. If the file has already been created for a
+		 * process, the following binderfs_create_file() call will
+		 * fail with error code EEXIST if another context of the same
+		 * process invoked binder_open(). This is ok since same as
+		 * debugfs, the log file will contain information on all
+		 * contexts of a given PID.
+		 */
+		binderfs_entry = binderfs_create_file(binder_binderfs_dir_entry_proc,
+			strbuf, &proc_fops, (void *)(unsigned long)proc->pid);
+		if (!IS_ERR(binderfs_entry)) {
+			proc->binderfs_entry = binderfs_entry;
+		} else {
+			int error;
+
+			error = PTR_ERR(binderfs_entry);
+			if (error != -EEXIST) {
+				pr_warn("Unable to create file %s in binderfs (error %d)\n",
+					strbuf, error);
+			}
+		}
 	}
 
 	return 0;
@@ -5322,6 +5313,12 @@
 	struct binder_proc *proc = filp->private_data;
 
 	debugfs_remove(proc->debugfs_entry);
+
+	if (proc->binderfs_entry) {
+		binderfs_remove_file(proc->binderfs_entry);
+		proc->binderfs_entry = NULL;
+	}
+
 	binder_defer_work(proc, BINDER_DEFERRED_RELEASE);
 
 	return 0;
@@ -5928,7 +5925,7 @@
 }
 
 
-static int binder_state_show(struct seq_file *m, void *unused)
+int binder_state_show(struct seq_file *m, void *unused)
 {
 	struct binder_proc *proc;
 	struct binder_node *node;
@@ -5967,7 +5964,7 @@
 	return 0;
 }
 
-static int binder_stats_show(struct seq_file *m, void *unused)
+int binder_stats_show(struct seq_file *m, void *unused)
 {
 	struct binder_proc *proc;
 
@@ -5983,7 +5980,7 @@
 	return 0;
 }
 
-static int binder_transactions_show(struct seq_file *m, void *unused)
+int binder_transactions_show(struct seq_file *m, void *unused)
 {
 	struct binder_proc *proc;
 
@@ -5996,7 +5993,7 @@
 	return 0;
 }
 
-static int binder_proc_show(struct seq_file *m, void *unused)
+static int proc_show(struct seq_file *m, void *unused)
 {
 	struct binder_proc *itr;
 	int pid = (unsigned long)m->private;
@@ -6039,7 +6036,7 @@
 			"\n" : " (incomplete)\n");
 }
 
-static int binder_transaction_log_show(struct seq_file *m, void *unused)
+int binder_transaction_log_show(struct seq_file *m, void *unused)
 {
 	struct binder_transaction_log *log = m->private;
 	unsigned int log_cur = atomic_read(&log->cur);
@@ -6060,7 +6057,7 @@
 	return 0;
 }
 
-static const struct file_operations binder_fops = {
+const struct file_operations binder_fops = {
 	.owner = THIS_MODULE,
 	.poll = binder_poll,
 	.unlocked_ioctl = binder_ioctl,
@@ -6071,11 +6068,6 @@
 	.release = binder_release,
 };
 
-BINDER_DEBUG_ENTRY(state);
-BINDER_DEBUG_ENTRY(stats);
-BINDER_DEBUG_ENTRY(transactions);
-BINDER_DEBUG_ENTRY(transaction_log);
-
 static int __init init_binder_device(const char *name)
 {
 	int ret;
@@ -6107,9 +6099,10 @@
 static int __init binder_init(void)
 {
 	int ret;
-	char *device_name, *device_names, *device_tmp;
+	char *device_name, *device_tmp;
 	struct binder_device *device;
 	struct hlist_node *tmp;
+	char *device_names = NULL;
 
 	ret = binder_alloc_shrinker_init();
 	if (ret)
@@ -6151,24 +6144,30 @@
 				    &binder_transaction_log_fops);
 	}
 
-	/*
-	 * Copy the module_parameter string, because we don't want to
-	 * tokenize it in-place.
-	 */
-	device_names = kzalloc(strlen(binder_devices_param) + 1, GFP_KERNEL);
-	if (!device_names) {
-		ret = -ENOMEM;
-		goto err_alloc_device_names_failed;
-	}
-	strcpy(device_names, binder_devices_param);
+	if (!IS_ENABLED(CONFIG_ANDROID_BINDERFS) &&
+	    strcmp(binder_devices_param, "") != 0) {
+		/*
+		* Copy the module_parameter string, because we don't want to
+		* tokenize it in-place.
+		 */
+		device_names = kstrdup(binder_devices_param, GFP_KERNEL);
+		if (!device_names) {
+			ret = -ENOMEM;
+			goto err_alloc_device_names_failed;
+		}
 
-	device_tmp = device_names;
-	while ((device_name = strsep(&device_tmp, ","))) {
-		ret = init_binder_device(device_name);
-		if (ret)
-			goto err_init_binder_device_failed;
+		device_tmp = device_names;
+		while ((device_name = strsep(&device_tmp, ","))) {
+			ret = init_binder_device(device_name);
+			if (ret)
+				goto err_init_binder_device_failed;
+		}
 	}
 
+	ret = init_binderfs();
+	if (ret)
+		goto err_init_binder_device_failed;
+
 	return ret;
 
 err_init_binder_device_failed:
diff --git a/drivers/android/binder_internal.h b/drivers/android/binder_internal.h
new file mode 100644
index 0000000..bd47f7f
--- /dev/null
+++ b/drivers/android/binder_internal.h
@@ -0,0 +1,144 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+
+#ifndef _LINUX_BINDER_INTERNAL_H
+#define _LINUX_BINDER_INTERNAL_H
+
+#include <linux/export.h>
+#include <linux/fs.h>
+#include <linux/list.h>
+#include <linux/miscdevice.h>
+#include <linux/mutex.h>
+#include <linux/stddef.h>
+#include <linux/types.h>
+#include <linux/uidgid.h>
+
+struct binder_context {
+	struct binder_node *binder_context_mgr_node;
+	struct mutex context_mgr_node_lock;
+	kuid_t binder_context_mgr_uid;
+	const char *name;
+};
+
+/**
+ * struct binder_device - information about a binder device node
+ * @hlist:          list of binder devices (only used for devices requested via
+ *                  CONFIG_ANDROID_BINDER_DEVICES)
+ * @miscdev:        information about a binder character device node
+ * @context:        binder context information
+ * @binderfs_inode: This is the inode of the root dentry of the super block
+ *                  belonging to a binderfs mount.
+ */
+struct binder_device {
+	struct hlist_node hlist;
+	struct miscdevice miscdev;
+	struct binder_context context;
+	struct inode *binderfs_inode;
+};
+
+/**
+ * binderfs_mount_opts - mount options for binderfs
+ * @max: maximum number of allocatable binderfs binder devices
+ * @stats_mode: enable binder stats in binderfs.
+ */
+struct binderfs_mount_opts {
+	int max;
+	int stats_mode;
+};
+
+/**
+ * binderfs_info - information about a binderfs mount
+ * @ipc_ns:         The ipc namespace the binderfs mount belongs to.
+ * @control_dentry: This records the dentry of this binderfs mount
+ *                  binder-control device.
+ * @root_uid:       uid that needs to be used when a new binder device is
+ *                  created.
+ * @root_gid:       gid that needs to be used when a new binder device is
+ *                  created.
+ * @mount_opts:     The mount options in use.
+ * @device_count:   The current number of allocated binder devices.
+ * @proc_log_dir:   Pointer to the directory dentry containing process-specific
+ *                  logs.
+ */
+struct binderfs_info {
+	struct ipc_namespace *ipc_ns;
+	struct dentry *control_dentry;
+	kuid_t root_uid;
+	kgid_t root_gid;
+	struct binderfs_mount_opts mount_opts;
+	int device_count;
+	struct dentry *proc_log_dir;
+};
+
+extern const struct file_operations binder_fops;
+
+extern char *binder_devices_param;
+
+#ifdef CONFIG_ANDROID_BINDERFS
+extern bool is_binderfs_device(const struct inode *inode);
+extern struct dentry *binderfs_create_file(struct dentry *dir, const char *name,
+					   const struct file_operations *fops,
+					   void *data);
+extern void binderfs_remove_file(struct dentry *dentry);
+#else
+static inline bool is_binderfs_device(const struct inode *inode)
+{
+	return false;
+}
+static inline struct dentry *binderfs_create_file(struct dentry *dir,
+					   const char *name,
+					   const struct file_operations *fops,
+					   void *data)
+{
+	return NULL;
+}
+static inline void binderfs_remove_file(struct dentry *dentry) {}
+#endif
+
+#ifdef CONFIG_ANDROID_BINDERFS
+extern int __init init_binderfs(void);
+#else
+static inline int __init init_binderfs(void)
+{
+	return 0;
+}
+#endif
+
+int binder_stats_show(struct seq_file *m, void *unused);
+DEFINE_SHOW_ATTRIBUTE(binder_stats);
+
+int binder_state_show(struct seq_file *m, void *unused);
+DEFINE_SHOW_ATTRIBUTE(binder_state);
+
+int binder_transactions_show(struct seq_file *m, void *unused);
+DEFINE_SHOW_ATTRIBUTE(binder_transactions);
+
+int binder_transaction_log_show(struct seq_file *m, void *unused);
+DEFINE_SHOW_ATTRIBUTE(binder_transaction_log);
+
+struct binder_transaction_log_entry {
+	int debug_id;
+	int debug_id_done;
+	int call_type;
+	int from_proc;
+	int from_thread;
+	int target_handle;
+	int to_proc;
+	int to_thread;
+	int to_node;
+	int data_size;
+	int offsets_size;
+	int return_error_line;
+	uint32_t return_error;
+	uint32_t return_error_param;
+	const char *context_name;
+};
+
+struct binder_transaction_log {
+	atomic_t cur;
+	bool full;
+	struct binder_transaction_log_entry entry[32];
+};
+
+extern struct binder_transaction_log binder_transaction_log;
+extern struct binder_transaction_log binder_transaction_log_failed;
+#endif /* _LINUX_BINDER_INTERNAL_H */
diff --git a/drivers/android/binderfs.c b/drivers/android/binderfs.c
new file mode 100644
index 0000000..e2580e5
--- /dev/null
+++ b/drivers/android/binderfs.c
@@ -0,0 +1,790 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+
+#include <linux/compiler_types.h>
+#include <linux/errno.h>
+#include <linux/fs.h>
+#include <linux/fsnotify.h>
+#include <linux/gfp.h>
+#include <linux/idr.h>
+#include <linux/init.h>
+#include <linux/ipc_namespace.h>
+#include <linux/kdev_t.h>
+#include <linux/kernel.h>
+#include <linux/list.h>
+#include <linux/namei.h>
+#include <linux/magic.h>
+#include <linux/major.h>
+#include <linux/miscdevice.h>
+#include <linux/module.h>
+#include <linux/mutex.h>
+#include <linux/mount.h>
+#include <linux/parser.h>
+#include <linux/radix-tree.h>
+#include <linux/sched.h>
+#include <linux/seq_file.h>
+#include <linux/slab.h>
+#include <linux/spinlock_types.h>
+#include <linux/stddef.h>
+#include <linux/string.h>
+#include <linux/types.h>
+#include <linux/uaccess.h>
+#include <linux/user_namespace.h>
+#include <linux/xarray.h>
+#include <uapi/asm-generic/errno-base.h>
+#include <uapi/linux/android/binder.h>
+#include <uapi/linux/android/binderfs.h>
+
+#include "binder_internal.h"
+
+#define FIRST_INODE 1
+#define SECOND_INODE 2
+#define INODE_OFFSET 3
+#define INTSTRLEN 21
+#define BINDERFS_MAX_MINOR (1U << MINORBITS)
+/* Ensure that the initial ipc namespace always has devices available. */
+#define BINDERFS_MAX_MINOR_CAPPED (BINDERFS_MAX_MINOR - 4)
+
+static dev_t binderfs_dev;
+static DEFINE_MUTEX(binderfs_minors_mutex);
+static DEFINE_IDA(binderfs_minors);
+
+enum {
+	Opt_max,
+	Opt_stats_mode,
+	Opt_err
+};
+
+enum binderfs_stats_mode {
+	STATS_NONE,
+	STATS_GLOBAL,
+};
+
+static const match_table_t tokens = {
+	{ Opt_max, "max=%d" },
+	{ Opt_stats_mode, "stats=%s" },
+	{ Opt_err, NULL     }
+};
+
+static inline struct binderfs_info *BINDERFS_I(const struct inode *inode)
+{
+	return inode->i_sb->s_fs_info;
+}
+
+bool is_binderfs_device(const struct inode *inode)
+{
+	if (inode->i_sb->s_magic == BINDERFS_SUPER_MAGIC)
+		return true;
+
+	return false;
+}
+
+/**
+ * binderfs_binder_device_create - allocate inode from super block of a
+ *                                 binderfs mount
+ * @ref_inode: inode from wich the super block will be taken
+ * @userp:     buffer to copy information about new device for userspace to
+ * @req:       struct binderfs_device as copied from userspace
+ *
+ * This function allocates a new binder_device and reserves a new minor
+ * number for it.
+ * Minor numbers are limited and tracked globally in binderfs_minors. The
+ * function will stash a struct binder_device for the specific binder
+ * device in i_private of the inode.
+ * It will go on to allocate a new inode from the super block of the
+ * filesystem mount, stash a struct binder_device in its i_private field
+ * and attach a dentry to that inode.
+ *
+ * Return: 0 on success, negative errno on failure
+ */
+static int binderfs_binder_device_create(struct inode *ref_inode,
+					 struct binderfs_device __user *userp,
+					 struct binderfs_device *req)
+{
+	int minor, ret;
+	struct dentry *dentry, *root;
+	struct binder_device *device;
+	char *name = NULL;
+	size_t name_len;
+	struct inode *inode = NULL;
+	struct super_block *sb = ref_inode->i_sb;
+	struct binderfs_info *info = sb->s_fs_info;
+#if defined(CONFIG_IPC_NS)
+	bool use_reserve = (info->ipc_ns == &init_ipc_ns);
+#else
+	bool use_reserve = true;
+#endif
+
+	/* Reserve new minor number for the new device. */
+	mutex_lock(&binderfs_minors_mutex);
+	if (++info->device_count <= info->mount_opts.max)
+		minor = ida_alloc_max(&binderfs_minors,
+				      use_reserve ? BINDERFS_MAX_MINOR :
+						    BINDERFS_MAX_MINOR_CAPPED,
+				      GFP_KERNEL);
+	else
+		minor = -ENOSPC;
+	if (minor < 0) {
+		--info->device_count;
+		mutex_unlock(&binderfs_minors_mutex);
+		return minor;
+	}
+	mutex_unlock(&binderfs_minors_mutex);
+
+	ret = -ENOMEM;
+	device = kzalloc(sizeof(*device), GFP_KERNEL);
+	if (!device)
+		goto err;
+
+	inode = new_inode(sb);
+	if (!inode)
+		goto err;
+
+	inode->i_ino = minor + INODE_OFFSET;
+	inode->i_mtime = inode->i_atime = inode->i_ctime = current_time(inode);
+	init_special_inode(inode, S_IFCHR | 0600,
+			   MKDEV(MAJOR(binderfs_dev), minor));
+	inode->i_fop = &binder_fops;
+	inode->i_uid = info->root_uid;
+	inode->i_gid = info->root_gid;
+
+	req->name[BINDERFS_MAX_NAME] = '\0'; /* NUL-terminate */
+	name_len = strlen(req->name);
+	/* Make sure to include terminating NUL byte */
+	name = kmemdup(req->name, name_len + 1, GFP_KERNEL);
+	if (!name)
+		goto err;
+
+	device->binderfs_inode = inode;
+	device->context.binder_context_mgr_uid = INVALID_UID;
+	device->context.name = name;
+	device->miscdev.name = name;
+	device->miscdev.minor = minor;
+	mutex_init(&device->context.context_mgr_node_lock);
+
+	req->major = MAJOR(binderfs_dev);
+	req->minor = minor;
+
+	if (userp && copy_to_user(userp, req, sizeof(*req))) {
+		ret = -EFAULT;
+		goto err;
+	}
+
+	root = sb->s_root;
+	inode_lock(d_inode(root));
+
+	/* look it up */
+	dentry = lookup_one_len(name, root, name_len);
+	if (IS_ERR(dentry)) {
+		inode_unlock(d_inode(root));
+		ret = PTR_ERR(dentry);
+		goto err;
+	}
+
+	if (d_really_is_positive(dentry)) {
+		/* already exists */
+		dput(dentry);
+		inode_unlock(d_inode(root));
+		ret = -EEXIST;
+		goto err;
+	}
+
+	inode->i_private = device;
+	d_instantiate(dentry, inode);
+	fsnotify_create(root->d_inode, dentry);
+	inode_unlock(d_inode(root));
+
+	return 0;
+
+err:
+	kfree(name);
+	kfree(device);
+	mutex_lock(&binderfs_minors_mutex);
+	--info->device_count;
+	ida_free(&binderfs_minors, minor);
+	mutex_unlock(&binderfs_minors_mutex);
+	iput(inode);
+
+	return ret;
+}
+
+/**
+ * binderfs_ctl_ioctl - handle binder device node allocation requests
+ *
+ * The request handler for the binder-control device. All requests operate on
+ * the binderfs mount the binder-control device resides in:
+ * - BINDER_CTL_ADD
+ *   Allocate a new binder device.
+ *
+ * Return: 0 on success, negative errno on failure
+ */
+static long binder_ctl_ioctl(struct file *file, unsigned int cmd,
+			     unsigned long arg)
+{
+	int ret = -EINVAL;
+	struct inode *inode = file_inode(file);
+	struct binderfs_device __user *device = (struct binderfs_device __user *)arg;
+	struct binderfs_device device_req;
+
+	switch (cmd) {
+	case BINDER_CTL_ADD:
+		ret = copy_from_user(&device_req, device, sizeof(device_req));
+		if (ret) {
+			ret = -EFAULT;
+			break;
+		}
+
+		ret = binderfs_binder_device_create(inode, device, &device_req);
+		break;
+	default:
+		break;
+	}
+
+	return ret;
+}
+
+static void binderfs_evict_inode(struct inode *inode)
+{
+	struct binder_device *device = inode->i_private;
+	struct binderfs_info *info = BINDERFS_I(inode);
+
+	clear_inode(inode);
+
+	if (!S_ISCHR(inode->i_mode) || !device)
+		return;
+
+	mutex_lock(&binderfs_minors_mutex);
+	--info->device_count;
+	ida_free(&binderfs_minors, device->miscdev.minor);
+	mutex_unlock(&binderfs_minors_mutex);
+
+	kfree(device->context.name);
+	kfree(device);
+}
+
+/**
+ * binderfs_parse_mount_opts - parse binderfs mount options
+ * @data: options to set (can be NULL in which case defaults are used)
+ */
+static int binderfs_parse_mount_opts(char *data,
+				     struct binderfs_mount_opts *opts)
+{
+	char *p, *stats;
+	opts->max = BINDERFS_MAX_MINOR;
+	opts->stats_mode = STATS_NONE;
+
+	while ((p = strsep(&data, ",")) != NULL) {
+		substring_t args[MAX_OPT_ARGS];
+		int token;
+		int max_devices;
+
+		if (!*p)
+			continue;
+
+		token = match_token(p, tokens, args);
+		switch (token) {
+		case Opt_max:
+			if (match_int(&args[0], &max_devices) ||
+			    (max_devices < 0 ||
+			     (max_devices > BINDERFS_MAX_MINOR)))
+				return -EINVAL;
+
+			opts->max = max_devices;
+			break;
+		case Opt_stats_mode:
+			if (!capable(CAP_SYS_ADMIN))
+				return -EINVAL;
+
+			stats = match_strdup(&args[0]);
+			if (!stats)
+				return -ENOMEM;
+
+			if (strcmp(stats, "global") != 0) {
+				kfree(stats);
+				return -EINVAL;
+			}
+
+			opts->stats_mode = STATS_GLOBAL;
+			kfree(stats);
+			break;
+		default:
+			pr_err("Invalid mount options\n");
+			return -EINVAL;
+		}
+	}
+
+	return 0;
+}
+
+static int binderfs_remount(struct super_block *sb, int *flags, char *data)
+{
+	int prev_stats_mode, ret;
+	struct binderfs_info *info = sb->s_fs_info;
+
+	prev_stats_mode = info->mount_opts.stats_mode;
+	ret = binderfs_parse_mount_opts(data, &info->mount_opts);
+	if (ret)
+		return ret;
+
+	if (prev_stats_mode != info->mount_opts.stats_mode) {
+		pr_err("Binderfs stats mode cannot be changed during a remount\n");
+		info->mount_opts.stats_mode = prev_stats_mode;
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static int binderfs_show_mount_opts(struct seq_file *seq, struct dentry *root)
+{
+	struct binderfs_info *info;
+
+	info = root->d_sb->s_fs_info;
+	if (info->mount_opts.max <= BINDERFS_MAX_MINOR)
+		seq_printf(seq, ",max=%d", info->mount_opts.max);
+	if (info->mount_opts.stats_mode == STATS_GLOBAL)
+		seq_printf(seq, ",stats=global");
+
+	return 0;
+}
+
+static const struct super_operations binderfs_super_ops = {
+	.evict_inode    = binderfs_evict_inode,
+	.remount_fs	= binderfs_remount,
+	.show_options	= binderfs_show_mount_opts,
+	.statfs         = simple_statfs,
+};
+
+static inline bool is_binderfs_control_device(const struct dentry *dentry)
+{
+	struct binderfs_info *info = dentry->d_sb->s_fs_info;
+	return info->control_dentry == dentry;
+}
+
+static int binderfs_rename(struct inode *old_dir, struct dentry *old_dentry,
+			   struct inode *new_dir, struct dentry *new_dentry,
+			   unsigned int flags)
+{
+	if (is_binderfs_control_device(old_dentry) ||
+	    is_binderfs_control_device(new_dentry))
+		return -EPERM;
+
+	return simple_rename(old_dir, old_dentry, new_dir, new_dentry, flags);
+}
+
+static int binderfs_unlink(struct inode *dir, struct dentry *dentry)
+{
+	if (is_binderfs_control_device(dentry))
+		return -EPERM;
+
+	return simple_unlink(dir, dentry);
+}
+
+static const struct file_operations binder_ctl_fops = {
+	.owner		= THIS_MODULE,
+	.open		= nonseekable_open,
+	.unlocked_ioctl	= binder_ctl_ioctl,
+	.compat_ioctl	= binder_ctl_ioctl,
+	.llseek		= noop_llseek,
+};
+
+/**
+ * binderfs_binder_ctl_create - create a new binder-control device
+ * @sb: super block of the binderfs mount
+ *
+ * This function creates a new binder-control device node in the binderfs mount
+ * referred to by @sb.
+ *
+ * Return: 0 on success, negative errno on failure
+ */
+static int binderfs_binder_ctl_create(struct super_block *sb)
+{
+	int minor, ret;
+	struct dentry *dentry;
+	struct binder_device *device;
+	struct inode *inode = NULL;
+	struct dentry *root = sb->s_root;
+	struct binderfs_info *info = sb->s_fs_info;
+#if defined(CONFIG_IPC_NS)
+	bool use_reserve = (info->ipc_ns == &init_ipc_ns);
+#else
+	bool use_reserve = true;
+#endif
+
+	device = kzalloc(sizeof(*device), GFP_KERNEL);
+	if (!device)
+		return -ENOMEM;
+
+	/* If we have already created a binder-control node, return. */
+	if (info->control_dentry) {
+		ret = 0;
+		goto out;
+	}
+
+	ret = -ENOMEM;
+	inode = new_inode(sb);
+	if (!inode)
+		goto out;
+
+	/* Reserve a new minor number for the new device. */
+	mutex_lock(&binderfs_minors_mutex);
+	minor = ida_alloc_max(&binderfs_minors,
+			      use_reserve ? BINDERFS_MAX_MINOR :
+					    BINDERFS_MAX_MINOR_CAPPED,
+			      GFP_KERNEL);
+	mutex_unlock(&binderfs_minors_mutex);
+	if (minor < 0) {
+		ret = minor;
+		goto out;
+	}
+
+	inode->i_ino = SECOND_INODE;
+	inode->i_mtime = inode->i_atime = inode->i_ctime = current_time(inode);
+	init_special_inode(inode, S_IFCHR | 0600,
+			   MKDEV(MAJOR(binderfs_dev), minor));
+	inode->i_fop = &binder_ctl_fops;
+	inode->i_uid = info->root_uid;
+	inode->i_gid = info->root_gid;
+
+	device->binderfs_inode = inode;
+	device->miscdev.minor = minor;
+
+	dentry = d_alloc_name(root, "binder-control");
+	if (!dentry)
+		goto out;
+
+	inode->i_private = device;
+	info->control_dentry = dentry;
+	d_add(dentry, inode);
+
+	return 0;
+
+out:
+	kfree(device);
+	iput(inode);
+
+	return ret;
+}
+
+static const struct inode_operations binderfs_dir_inode_operations = {
+	.lookup = simple_lookup,
+	.rename = binderfs_rename,
+	.unlink = binderfs_unlink,
+};
+
+static struct inode *binderfs_make_inode(struct super_block *sb, int mode)
+{
+	struct inode *ret;
+
+	ret = new_inode(sb);
+	if (ret) {
+		ret->i_ino = iunique(sb, BINDERFS_MAX_MINOR + INODE_OFFSET);
+		ret->i_mode = mode;
+		ret->i_atime = ret->i_mtime = ret->i_ctime = current_time(ret);
+	}
+	return ret;
+}
+
+static struct dentry *binderfs_create_dentry(struct dentry *parent,
+					     const char *name)
+{
+	struct dentry *dentry;
+
+	dentry = lookup_one_len(name, parent, strlen(name));
+	if (IS_ERR(dentry))
+		return dentry;
+
+	/* Return error if the file/dir already exists. */
+	if (d_really_is_positive(dentry)) {
+		dput(dentry);
+		return ERR_PTR(-EEXIST);
+	}
+
+	return dentry;
+}
+
+void binderfs_remove_file(struct dentry *dentry)
+{
+	struct inode *parent_inode;
+
+	parent_inode = d_inode(dentry->d_parent);
+	inode_lock(parent_inode);
+	if (simple_positive(dentry)) {
+		dget(dentry);
+		simple_unlink(parent_inode, dentry);
+		d_delete(dentry);
+		dput(dentry);
+	}
+	inode_unlock(parent_inode);
+}
+
+struct dentry *binderfs_create_file(struct dentry *parent, const char *name,
+				    const struct file_operations *fops,
+				    void *data)
+{
+	struct dentry *dentry;
+	struct inode *new_inode, *parent_inode;
+	struct super_block *sb;
+
+	parent_inode = d_inode(parent);
+	inode_lock(parent_inode);
+
+	dentry = binderfs_create_dentry(parent, name);
+	if (IS_ERR(dentry))
+		goto out;
+
+	sb = parent_inode->i_sb;
+	new_inode = binderfs_make_inode(sb, S_IFREG | 0444);
+	if (!new_inode) {
+		dput(dentry);
+		dentry = ERR_PTR(-ENOMEM);
+		goto out;
+	}
+
+	new_inode->i_fop = fops;
+	new_inode->i_private = data;
+	d_instantiate(dentry, new_inode);
+	fsnotify_create(parent_inode, dentry);
+
+out:
+	inode_unlock(parent_inode);
+	return dentry;
+}
+
+static struct dentry *binderfs_create_dir(struct dentry *parent,
+					  const char *name)
+{
+	struct dentry *dentry;
+	struct inode *new_inode, *parent_inode;
+	struct super_block *sb;
+
+	parent_inode = d_inode(parent);
+	inode_lock(parent_inode);
+
+	dentry = binderfs_create_dentry(parent, name);
+	if (IS_ERR(dentry))
+		goto out;
+
+	sb = parent_inode->i_sb;
+	new_inode = binderfs_make_inode(sb, S_IFDIR | 0755);
+	if (!new_inode) {
+		dput(dentry);
+		dentry = ERR_PTR(-ENOMEM);
+		goto out;
+	}
+
+	new_inode->i_fop = &simple_dir_operations;
+	new_inode->i_op = &simple_dir_inode_operations;
+
+	set_nlink(new_inode, 2);
+	d_instantiate(dentry, new_inode);
+	inc_nlink(parent_inode);
+	fsnotify_mkdir(parent_inode, dentry);
+
+out:
+	inode_unlock(parent_inode);
+	return dentry;
+}
+
+static int init_binder_logs(struct super_block *sb)
+{
+	struct dentry *binder_logs_root_dir, *dentry, *proc_log_dir;
+	struct binderfs_info *info;
+	int ret = 0;
+
+	binder_logs_root_dir = binderfs_create_dir(sb->s_root,
+						   "binder_logs");
+	if (IS_ERR(binder_logs_root_dir)) {
+		ret = PTR_ERR(binder_logs_root_dir);
+		goto out;
+	}
+
+	dentry = binderfs_create_file(binder_logs_root_dir, "stats",
+				      &binder_stats_fops, NULL);
+	if (IS_ERR(dentry)) {
+		ret = PTR_ERR(dentry);
+		goto out;
+	}
+
+	dentry = binderfs_create_file(binder_logs_root_dir, "state",
+				      &binder_state_fops, NULL);
+	if (IS_ERR(dentry)) {
+		ret = PTR_ERR(dentry);
+		goto out;
+	}
+
+	dentry = binderfs_create_file(binder_logs_root_dir, "transactions",
+				      &binder_transactions_fops, NULL);
+	if (IS_ERR(dentry)) {
+		ret = PTR_ERR(dentry);
+		goto out;
+	}
+
+	dentry = binderfs_create_file(binder_logs_root_dir,
+				      "transaction_log",
+				      &binder_transaction_log_fops,
+				      &binder_transaction_log);
+	if (IS_ERR(dentry)) {
+		ret = PTR_ERR(dentry);
+		goto out;
+	}
+
+	dentry = binderfs_create_file(binder_logs_root_dir,
+				      "failed_transaction_log",
+				      &binder_transaction_log_fops,
+				      &binder_transaction_log_failed);
+	if (IS_ERR(dentry)) {
+		ret = PTR_ERR(dentry);
+		goto out;
+	}
+
+	proc_log_dir = binderfs_create_dir(binder_logs_root_dir, "proc");
+	if (IS_ERR(proc_log_dir)) {
+		ret = PTR_ERR(proc_log_dir);
+		goto out;
+	}
+	info = sb->s_fs_info;
+	info->proc_log_dir = proc_log_dir;
+
+out:
+	return ret;
+}
+
+static int binderfs_fill_super(struct super_block *sb, void *data, int silent)
+{
+	int ret;
+	struct binderfs_info *info;
+	struct inode *inode = NULL;
+	struct binderfs_device device_info = { 0 };
+	const char *name;
+	size_t len;
+
+	sb->s_blocksize = PAGE_SIZE;
+	sb->s_blocksize_bits = PAGE_SHIFT;
+
+	/*
+	 * The binderfs filesystem can be mounted by userns root in a
+	 * non-initial userns. By default such mounts have the SB_I_NODEV flag
+	 * set in s_iflags to prevent security issues where userns root can
+	 * just create random device nodes via mknod() since it owns the
+	 * filesystem mount. But binderfs does not allow to create any files
+	 * including devices nodes. The only way to create binder devices nodes
+	 * is through the binder-control device which userns root is explicitly
+	 * allowed to do. So removing the SB_I_NODEV flag from s_iflags is both
+	 * necessary and safe.
+	 */
+	sb->s_iflags &= ~SB_I_NODEV;
+	sb->s_iflags |= SB_I_NOEXEC;
+	sb->s_magic = BINDERFS_SUPER_MAGIC;
+	sb->s_op = &binderfs_super_ops;
+	sb->s_time_gran = 1;
+
+	sb->s_fs_info = kzalloc(sizeof(struct binderfs_info), GFP_KERNEL);
+	if (!sb->s_fs_info)
+		return -ENOMEM;
+	info = sb->s_fs_info;
+
+	info->ipc_ns = get_ipc_ns(current->nsproxy->ipc_ns);
+
+	ret = binderfs_parse_mount_opts(data, &info->mount_opts);
+	if (ret)
+		return ret;
+
+	info->root_gid = make_kgid(sb->s_user_ns, 0);
+	if (!gid_valid(info->root_gid))
+		info->root_gid = GLOBAL_ROOT_GID;
+	info->root_uid = make_kuid(sb->s_user_ns, 0);
+	if (!uid_valid(info->root_uid))
+		info->root_uid = GLOBAL_ROOT_UID;
+
+	inode = new_inode(sb);
+	if (!inode)
+		return -ENOMEM;
+
+	inode->i_ino = FIRST_INODE;
+	inode->i_fop = &simple_dir_operations;
+	inode->i_mode = S_IFDIR | 0755;
+	inode->i_mtime = inode->i_atime = inode->i_ctime = current_time(inode);
+	inode->i_op = &binderfs_dir_inode_operations;
+	set_nlink(inode, 2);
+
+	sb->s_root = d_make_root(inode);
+	if (!sb->s_root)
+		return -ENOMEM;
+
+	ret = binderfs_binder_ctl_create(sb);
+	if (ret)
+		return ret;
+
+	name = binder_devices_param;
+	for (len = strcspn(name, ","); len > 0; len = strcspn(name, ",")) {
+		strscpy(device_info.name, name, len + 1);
+		ret = binderfs_binder_device_create(inode, NULL, &device_info);
+		if (ret)
+			return ret;
+		name += len;
+		if (*name == ',')
+			name++;
+	}
+
+	if (info->mount_opts.stats_mode == STATS_GLOBAL)
+		return init_binder_logs(sb);
+
+	return 0;
+}
+
+static struct dentry *binderfs_mount(struct file_system_type *fs_type,
+				     int flags, const char *dev_name,
+				     void *data)
+{
+	return mount_nodev(fs_type, flags, data, binderfs_fill_super);
+}
+
+static void binderfs_kill_super(struct super_block *sb)
+{
+	struct binderfs_info *info = sb->s_fs_info;
+
+	kill_litter_super(sb);
+
+	if (info && info->ipc_ns)
+		put_ipc_ns(info->ipc_ns);
+
+	kfree(info);
+}
+
+static struct file_system_type binder_fs_type = {
+	.name		= "binder",
+	.mount		= binderfs_mount,
+	.kill_sb	= binderfs_kill_super,
+	.fs_flags	= FS_USERNS_MOUNT,
+};
+
+int __init init_binderfs(void)
+{
+	int ret;
+	const char *name;
+	size_t len;
+
+	/* Verify that the default binderfs device names are valid. */
+	name = binder_devices_param;
+	for (len = strcspn(name, ","); len > 0; len = strcspn(name, ",")) {
+		if (len > BINDERFS_MAX_NAME)
+			return -E2BIG;
+		name += len;
+		if (*name == ',')
+			name++;
+	}
+
+	/* Allocate new major number for binderfs. */
+	ret = alloc_chrdev_region(&binderfs_dev, 0, BINDERFS_MAX_MINOR,
+				  "binder");
+	if (ret)
+		return ret;
+
+	ret = register_filesystem(&binder_fs_type);
+	if (ret) {
+		unregister_chrdev_region(binderfs_dev, BINDERFS_MAX_MINOR);
+		return ret;
+	}
+
+	return ret;
+}
diff --git a/drivers/base/Kconfig b/drivers/base/Kconfig
index a5f4733..d85275a 100644
--- a/drivers/base/Kconfig
+++ b/drivers/base/Kconfig
@@ -179,7 +179,6 @@
 config DMA_SHARED_BUFFER
 	bool
 	default n
-	select ANON_INODES
 	select IRQ_WORK
 	help
 	  This option enables the framework for buffer-sharing between
diff --git a/drivers/base/core.c b/drivers/base/core.c
index 9dfab55..5abecfb 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -44,6 +44,10 @@
 #endif
 
 /* Device links support. */
+static LIST_HEAD(wait_for_suppliers);
+static DEFINE_MUTEX(wfs_lock);
+static LIST_HEAD(deferred_sync);
+static unsigned int defer_sync_state_count = 1;
 
 #ifdef CONFIG_SRCU
 static DEFINE_MUTEX(device_links_lock);
@@ -114,6 +118,9 @@
 		return ret;
 
 	list_for_each_entry(link, &dev->links.consumers, s_node) {
+		if (link->flags == DL_FLAG_SYNC_STATE_ONLY)
+			continue;
+
 		if (link->consumer == target)
 			return 1;
 
@@ -139,8 +146,11 @@
 		device_pm_move_last(dev);
 
 	device_for_each_child(dev, NULL, device_reorder_to_tail);
-	list_for_each_entry(link, &dev->links.consumers, s_node)
+	list_for_each_entry(link, &dev->links.consumers, s_node) {
+		if (link->flags == DL_FLAG_SYNC_STATE_ONLY)
+			continue;
 		device_reorder_to_tail(link->consumer, NULL);
+	}
 
 	return 0;
 }
@@ -199,6 +209,8 @@
 	struct device_link *link;
 
 	if (!consumer || !supplier ||
+	    (flags & DL_FLAG_SYNC_STATE_ONLY &&
+	     flags != DL_FLAG_SYNC_STATE_ONLY) ||
 	    ((flags & DL_FLAG_STATELESS) &&
 	     (flags & DL_FLAG_AUTOREMOVE_CONSUMER)))
 		return NULL;
@@ -208,11 +220,14 @@
 
 	/*
 	 * If the supplier has not been fully registered yet or there is a
-	 * reverse dependency between the consumer and the supplier already in
-	 * the graph, return NULL.
+	 * reverse (non-SYNC_STATE_ONLY) dependency between the consumer and
+	 * the supplier already in the graph, return NULL. If the link is a
+	 * SYNC_STATE_ONLY link, we don't check for reverse dependencies
+	 * because it only affects sync_state() callbacks.
 	 */
 	if (!device_pm_initialized(supplier)
-	    || device_is_dependent(consumer, supplier)) {
+	    || (!(flags & DL_FLAG_SYNC_STATE_ONLY) &&
+		  device_is_dependent(consumer, supplier))) {
 		link = NULL;
 		goto out;
 	}
@@ -220,6 +235,11 @@
 	list_for_each_entry(link, &supplier->links.consumers, s_node)
 		if (link->consumer == consumer) {
 			kref_get(&link->kref);
+			if (link->flags & DL_FLAG_SYNC_STATE_ONLY &&
+			    !(flags & DL_FLAG_SYNC_STATE_ONLY)) {
+				link->flags &= ~DL_FLAG_SYNC_STATE_ONLY;
+				goto reorder;
+			}
 			goto out;
 		}
 
@@ -290,6 +310,9 @@
 		}
 	}
 
+	if (flags & DL_FLAG_SYNC_STATE_ONLY)
+		goto out;
+reorder:
 	/*
 	 * Move the consumer and all of the devices depending on it to the end
 	 * of dpm_list and the devices_kset list.
@@ -311,6 +334,70 @@
 }
 EXPORT_SYMBOL_GPL(device_link_add);
 
+/**
+ * device_link_wait_for_supplier - Add device to wait_for_suppliers list
+ * @consumer: Consumer device
+ *
+ * Marks the @consumer device as waiting for suppliers to become available by
+ * adding it to the wait_for_suppliers list. The consumer device will never be
+ * probed until it's removed from the wait_for_suppliers list.
+ *
+ * The caller is responsible for adding the links to the supplier devices once
+ * they are available and removing the @consumer device from the
+ * wait_for_suppliers list once links to all the suppliers have been created.
+ *
+ * This function is NOT meant to be called from the probe function of the
+ * consumer but rather from code that creates/adds the consumer device.
+ */
+static void device_link_wait_for_supplier(struct device *consumer,
+					  bool need_for_probe)
+{
+	mutex_lock(&wfs_lock);
+	list_add_tail(&consumer->links.needs_suppliers, &wait_for_suppliers);
+	consumer->links.need_for_probe = need_for_probe;
+	mutex_unlock(&wfs_lock);
+}
+
+static void device_link_wait_for_mandatory_supplier(struct device *consumer)
+{
+	device_link_wait_for_supplier(consumer, true);
+}
+
+static void device_link_wait_for_optional_supplier(struct device *consumer)
+{
+	device_link_wait_for_supplier(consumer, false);
+}
+
+/**
+ * device_link_add_missing_supplier_links - Add links from consumer devices to
+ *					    supplier devices, leaving any
+ *					    consumer with inactive suppliers on
+ *					    the wait_for_suppliers list
+ *
+ * Loops through all consumers waiting on suppliers and tries to add all their
+ * supplier links. If that succeeds, the consumer device is removed from
+ * wait_for_suppliers list. Otherwise, they are left in the wait_for_suppliers
+ * list.  Devices left on the wait_for_suppliers list will not be probed.
+ *
+ * The fwnode add_links callback is expected to return 0 if it has found and
+ * added all the supplier links for the consumer device. It should return an
+ * error if it isn't able to do so.
+ *
+ * The caller of device_link_wait_for_supplier() is expected to call this once
+ * it's aware of potential suppliers becoming available.
+ */
+static void device_link_add_missing_supplier_links(void)
+{
+	struct device *dev, *tmp;
+
+	mutex_lock(&wfs_lock);
+	list_for_each_entry_safe(dev, tmp, &wait_for_suppliers,
+				 links.needs_suppliers)
+		if (!fwnode_call_int_op(dev->fwnode, add_links, dev))
+			list_del_init(&dev->links.needs_suppliers);
+	mutex_unlock(&wfs_lock);
+}
+
 static void device_link_free(struct device_link *link)
 {
 	put_device(link->consumer);
@@ -434,10 +521,23 @@
 	struct device_link *link;
 	int ret = 0;
 
+	/*
+	 * Device waiting for supplier to become available is not allowed to
+	 * probe.
+	 */
+	mutex_lock(&wfs_lock);
+	if (!list_empty(&dev->links.needs_suppliers) &&
+	    dev->links.need_for_probe) {
+		mutex_unlock(&wfs_lock);
+		return -EPROBE_DEFER;
+	}
+	mutex_unlock(&wfs_lock);
+
 	device_links_write_lock();
 
 	list_for_each_entry(link, &dev->links.suppliers, c_node) {
-		if (link->flags & DL_FLAG_STATELESS)
+		if (link->flags & DL_FLAG_STATELESS ||
+		    link->flags & DL_FLAG_SYNC_STATE_ONLY)
 			continue;
 
 		if (link->status != DL_STATE_AVAILABLE) {
@@ -454,6 +554,128 @@
 }
 
 /**
+ * __device_links_queue_sync_state - Queue a device for sync_state() callback
+ * @dev: Device to call sync_state() on
+ * @list: List head to queue the @dev on
+ *
+ * Queues a device for a sync_state() callback when the device links write lock
+ * isn't held. This allows the sync_state() execution flow to use device links
+ * APIs.  The caller must ensure this function is called with
+ * device_links_write_lock() held.
+ *
+ * This function does a get_device() to make sure the device is not freed while
+ * on this list.
+ *
+ * So the caller must also ensure that device_links_flush_sync_list() is called
+ * as soon as the caller releases device_links_write_lock().  This is necessary
+ * to make sure the sync_state() is called in a timely fashion and the
+ * put_device() is called on this device.
+ */
+static void __device_links_queue_sync_state(struct device *dev,
+					    struct list_head *list)
+{
+	struct device_link *link;
+
+	if (dev->state_synced)
+		return;
+
+	list_for_each_entry(link, &dev->links.consumers, s_node) {
+		if (link->flags & DL_FLAG_STATELESS)
+			continue;
+		if (link->status != DL_STATE_ACTIVE)
+			return;
+	}
+
+	/*
+	 * Set the flag here to avoid adding the same device to a list more
+	 * than once. This can happen if new consumers get added to the device
+	 * and probed before the list is flushed.
+	 */
+	dev->state_synced = true;
+
+	if (WARN_ON(!list_empty(&dev->links.defer_sync)))
+		return;
+
+	get_device(dev);
+	list_add_tail(&dev->links.defer_sync, list);
+}
+
+/**
+ * device_links_flush_sync_list - Call sync_state() on a list of devices
+ * @list: List of devices to call sync_state() on
+ *
+ * Calls sync_state() on all the devices that have been queued for it. This
+ * function is used in conjunction with __device_links_queue_sync_state().
+ */
+static void device_links_flush_sync_list(struct list_head *list)
+{
+	struct device *dev, *tmp;
+
+	list_for_each_entry_safe(dev, tmp, list, links.defer_sync) {
+		list_del_init(&dev->links.defer_sync);
+
+		device_lock(dev);
+
+		if (dev->bus->sync_state)
+			dev->bus->sync_state(dev);
+		else if (dev->driver && dev->driver->sync_state)
+			dev->driver->sync_state(dev);
+
+		device_unlock(dev);
+
+		put_device(dev);
+	}
+}
+
+void device_links_supplier_sync_state_pause(void)
+{
+	device_links_write_lock();
+	defer_sync_state_count++;
+	device_links_write_unlock();
+}
+
+void device_links_supplier_sync_state_resume(void)
+{
+	struct device *dev, *tmp;
+	LIST_HEAD(sync_list);
+
+	device_links_write_lock();
+	if (!defer_sync_state_count) {
+		WARN(true, "Unmatched sync_state pause/resume!");
+		goto out;
+	}
+	defer_sync_state_count--;
+	if (defer_sync_state_count)
+		goto out;
+
+	list_for_each_entry_safe(dev, tmp, &deferred_sync, links.defer_sync) {
+		/*
+		 * Delete from deferred_sync list before queuing it to
+		 * sync_list because defer_sync is used for both lists.
+		 */
+		list_del_init(&dev->links.defer_sync);
+		__device_links_queue_sync_state(dev, &sync_list);
+	}
+out:
+	device_links_write_unlock();
+
+	device_links_flush_sync_list(&sync_list);
+}
+
+static int sync_state_resume_initcall(void)
+{
+	device_links_supplier_sync_state_resume();
+	return 0;
+}
+late_initcall(sync_state_resume_initcall);
+
+static void __device_links_supplier_defer_sync(struct device *sup)
+{
+	if (list_empty(&sup->links.defer_sync))
+		list_add_tail(&sup->links.defer_sync, &deferred_sync);
+}
+
+/**
  * device_links_driver_bound - Update device links after probing its driver.
  * @dev: Device to update the links for.
  *
@@ -467,6 +689,16 @@
 void device_links_driver_bound(struct device *dev)
 {
 	struct device_link *link;
+	LIST_HEAD(sync_list);
+
+	/*
+	 * If a device probes successfully, it's expected to have created all
+	 * the device links it needs to or make new device links as it needs
+	 * them. So, it no longer needs to wait on any suppliers.
+	 */
+	mutex_lock(&wfs_lock);
+	list_del_init(&dev->links.needs_suppliers);
+	mutex_unlock(&wfs_lock);
 
 	device_links_write_lock();
 
@@ -484,11 +716,19 @@
 
 		WARN_ON(link->status != DL_STATE_CONSUMER_PROBE);
 		WRITE_ONCE(link->status, DL_STATE_ACTIVE);
+
+		if (defer_sync_state_count)
+			__device_links_supplier_defer_sync(link->supplier);
+		else
+			__device_links_queue_sync_state(link->supplier,
+							&sync_list);
 	}
 
 	dev->links.status = DL_DEV_DRIVER_BOUND;
 
 	device_links_write_unlock();
+
+	device_links_flush_sync_list(&sync_list);
 }
 
 /**
@@ -562,6 +802,7 @@
 		WRITE_ONCE(link->status, DL_STATE_DORMANT);
 	}
 
+	list_del_init(&dev->links.defer_sync);
 	__device_links_no_driver(dev);
 
 	device_links_write_unlock();
@@ -631,7 +872,8 @@
 	list_for_each_entry(link, &dev->links.consumers, s_node) {
 		enum device_link_state status;
 
-		if (link->flags & DL_FLAG_STATELESS)
+		if (link->flags & DL_FLAG_STATELESS ||
+		    link->flags & DL_FLAG_SYNC_STATE_ONLY)
 			continue;
 
 		status = link->status;
@@ -667,6 +909,10 @@
 {
 	struct device_link *link, *ln;
 
+	mutex_lock(&wfs_lock);
+	list_del(&dev->links.needs_suppliers);
+	mutex_unlock(&wfs_lock);
+
 	/*
 	 * Delete all of the remaining links from this device to any other
 	 * devices (either consumers or suppliers).
@@ -1507,6 +1753,8 @@
 #endif
 	INIT_LIST_HEAD(&dev->links.consumers);
 	INIT_LIST_HEAD(&dev->links.suppliers);
+	INIT_LIST_HEAD(&dev->links.needs_suppliers);
+	INIT_LIST_HEAD(&dev->links.defer_sync);
 	dev->links.status = DL_DEV_NO_DRIVER;
 }
 EXPORT_SYMBOL_GPL(device_initialize);
@@ -1890,7 +2138,7 @@
 	struct device *parent;
 	struct kobject *kobj;
 	struct class_interface *class_intf;
-	int error = -EINVAL;
+	int error = -EINVAL, fw_ret;
 	struct kobject *glue_dir = NULL;
 
 	dev = get_device(dev);
@@ -1987,6 +2235,32 @@
 					     BUS_NOTIFY_ADD_DEVICE, dev);
 
 	kobject_uevent(&dev->kobj, KOBJ_ADD);
+
+	if (dev->fwnode && !dev->fwnode->dev)
+		dev->fwnode->dev = dev;
+
+	/*
+	 * Check if any of the other devices (consumers) have been waiting for
+	 * this device (supplier) to be added so that they can create a device
+	 * link to it.
+	 *
+	 * This needs to happen after device_pm_add() because device_link_add()
+	 * requires the supplier be registered before it's called.
+	 *
+	 * But this also needs to happe before bus_probe_device() to make sure
+	 * waiting consumers can link to it before the driver is bound to the
+	 * device and the driver sync_state callback is called for this device.
+	 */
+	device_link_add_missing_supplier_links();
+
+	if (fwnode_has_op(dev->fwnode, add_links)) {
+		fw_ret = fwnode_call_int_op(dev->fwnode, add_links, dev);
+		if (fw_ret == -ENODEV)
+			device_link_wait_for_mandatory_supplier(dev);
+		else if (fw_ret)
+			device_link_wait_for_optional_supplier(dev);
+	}
+
 	bus_probe_device(dev);
 	if (parent)
 		klist_add_tail(&dev->p->knode_parent,
@@ -2129,6 +2403,9 @@
 	kill_device(dev);
 	device_unlock(dev);
 
+	if (dev->fwnode && dev->fwnode->dev == dev)
+		dev->fwnode->dev = NULL;
+
 	/* Notify clients of device removal.  This call must come
 	 * before dpm_sysfs_remove().
 	 */
diff --git a/drivers/base/cpu.c b/drivers/base/cpu.c
index 16de148..9b1ae3f 100644
--- a/drivers/base/cpu.c
+++ b/drivers/base/cpu.c
@@ -517,6 +517,7 @@
 	dev->parent = parent;
 	dev->groups = groups;
 	dev->release = device_create_release;
+	device_set_pm_not_required(dev);
 	dev_set_drvdata(dev, drvdata);
 
 	retval = kobject_set_name_vargs(&dev->kobj, fmt, args);
diff --git a/drivers/base/firmware_loader/Kconfig b/drivers/base/firmware_loader/Kconfig
index eb15d97..e44d10c 100644
--- a/drivers/base/firmware_loader/Kconfig
+++ b/drivers/base/firmware_loader/Kconfig
@@ -150,5 +150,17 @@
 
 	  If you are unsure about this, say N here.
 
+config FW_CACHE
+	bool "Enable firmware caching during suspend"
+	depends on PM_SLEEP
+	default y if PM_SLEEP
+	help
+	  Because firmware caching generates uevent messages that are sent
+	  over a netlink socket, it can prevent suspend on many platforms.
+	  It is also not always useful, so on such platforms we have the
+	  option.
+
+	  If unsure, say Y.
+
 endif # FW_LOADER
 endmenu
diff --git a/drivers/base/node.c b/drivers/base/node.c
index c3968e2..ce27be2 100644
--- a/drivers/base/node.c
+++ b/drivers/base/node.c
@@ -67,8 +67,11 @@
 	int nid = dev->id;
 	struct pglist_data *pgdat = NODE_DATA(nid);
 	struct sysinfo i;
+	unsigned long sreclaimable, sunreclaimable;
 
 	si_meminfo_node(&i, nid);
+	sreclaimable = node_page_state(pgdat, NR_SLAB_RECLAIMABLE);
+	sunreclaimable = node_page_state(pgdat, NR_SLAB_UNRECLAIMABLE);
 	n = sprintf(buf,
 		       "Node %d MemTotal:       %8lu kB\n"
 		       "Node %d MemFree:        %8lu kB\n"
@@ -114,10 +117,14 @@
 		       "Node %d AnonPages:      %8lu kB\n"
 		       "Node %d Shmem:          %8lu kB\n"
 		       "Node %d KernelStack:    %8lu kB\n"
+#ifdef CONFIG_SHADOW_CALL_STACK
+		       "Node %d ShadowCallStack:%8lu kB\n"
+#endif
 		       "Node %d PageTables:     %8lu kB\n"
 		       "Node %d NFS_Unstable:   %8lu kB\n"
 		       "Node %d Bounce:         %8lu kB\n"
 		       "Node %d WritebackTmp:   %8lu kB\n"
+		       "Node %d KReclaimable:   %8lu kB\n"
 		       "Node %d Slab:           %8lu kB\n"
 		       "Node %d SReclaimable:   %8lu kB\n"
 		       "Node %d SUnreclaim:     %8lu kB\n"
@@ -134,24 +141,28 @@
 		       nid, K(node_page_state(pgdat, NR_ANON_MAPPED)),
 		       nid, K(i.sharedram),
 		       nid, sum_zone_node_page_state(nid, NR_KERNEL_STACK_KB),
+#ifdef CONFIG_SHADOW_CALL_STACK
+		       nid, sum_zone_node_page_state(nid, NR_KERNEL_SCS_BYTES) / 1024,
+#endif
 		       nid, K(sum_zone_node_page_state(nid, NR_PAGETABLE)),
 		       nid, K(node_page_state(pgdat, NR_UNSTABLE_NFS)),
 		       nid, K(sum_zone_node_page_state(nid, NR_BOUNCE)),
 		       nid, K(node_page_state(pgdat, NR_WRITEBACK_TEMP)),
-		       nid, K(node_page_state(pgdat, NR_SLAB_RECLAIMABLE) +
-			      node_page_state(pgdat, NR_SLAB_UNRECLAIMABLE)),
-		       nid, K(node_page_state(pgdat, NR_SLAB_RECLAIMABLE)),
+		       nid, K(sreclaimable +
+			      node_page_state(pgdat, NR_KERNEL_MISC_RECLAIMABLE)),
+		       nid, K(sreclaimable + sunreclaimable),
+		       nid, K(sreclaimable),
+		       nid, K(sunreclaimable)
 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
-		       nid, K(node_page_state(pgdat, NR_SLAB_UNRECLAIMABLE)),
+		       ,
 		       nid, K(node_page_state(pgdat, NR_ANON_THPS) *
 				       HPAGE_PMD_NR),
 		       nid, K(node_page_state(pgdat, NR_SHMEM_THPS) *
 				       HPAGE_PMD_NR),
 		       nid, K(node_page_state(pgdat, NR_SHMEM_PMDMAPPED) *
-				       HPAGE_PMD_NR));
-#else
-		       nid, K(node_page_state(pgdat, NR_SLAB_UNRECLAIMABLE)));
+				       HPAGE_PMD_NR)
 #endif
+		       );
 	n += hugetlb_report_node_meminfo(nid, buf + n);
 	return n;
 }
diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c
index 7a86f09..7663f1a 100644
--- a/drivers/base/power/main.c
+++ b/drivers/base/power/main.c
@@ -124,6 +124,10 @@
  */
 void device_pm_add(struct device *dev)
 {
+	/* Skip PM setup/initialization. */
+	if (device_pm_not_required(dev))
+		return;
+
 	pr_debug("PM: Adding info for %s:%s\n",
 		 dev->bus ? dev->bus->name : "No Bus", dev_name(dev));
 	device_pm_check_callbacks(dev);
@@ -142,6 +146,9 @@
  */
 void device_pm_remove(struct device *dev)
 {
+	if (device_pm_not_required(dev))
+		return;
+
 	pr_debug("PM: Removing info for %s:%s\n",
 		 dev->bus ? dev->bus->name : "No Bus", dev_name(dev));
 	complete_all(&dev->power.completion);
@@ -2025,6 +2032,7 @@
 			printk(KERN_INFO "PM: Device %s not prepared "
 				"for power transition: code %d\n",
 				dev_name(dev), error);
+			dpm_save_failed_dev(dev_name(dev));
 			put_device(dev);
 			break;
 		}
diff --git a/drivers/base/power/sysfs.c b/drivers/base/power/sysfs.c
index d713738..fc03614 100644
--- a/drivers/base/power/sysfs.c
+++ b/drivers/base/power/sysfs.c
@@ -648,6 +648,10 @@
 {
 	int rc;
 
+	/* No need to create PM sysfs if explicitly disabled. */
+	if (device_pm_not_required(dev))
+		return 0;
+
 	rc = sysfs_create_group(&dev->kobj, &pm_attr_group);
 	if (rc)
 		return rc;
@@ -727,6 +731,8 @@
 
 void dpm_sysfs_remove(struct device *dev)
 {
+	if (device_pm_not_required(dev))
+		return;
 	sysfs_unmerge_group(&dev->kobj, &pm_qos_latency_tolerance_attr_group);
 	dev_pm_qos_constraints_destroy(dev);
 	rpm_sysfs_remove(dev);
diff --git a/drivers/bluetooth/bluetooth-power.c b/drivers/bluetooth/bluetooth-power.c
index 612941f..e014f61 100644
--- a/drivers/bluetooth/bluetooth-power.c
+++ b/drivers/bluetooth/bluetooth-power.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2020, The Linux Foundation. All rights reserved.
  */
 
 /*
@@ -253,6 +253,9 @@
 {
 	int rc = 0;
 	int bt_reset_gpio = bt_power_pdata->bt_gpio_sys_rst;
+	int bt_sw_ctrl_gpio  =  bt_power_pdata->bt_gpio_sw_ctrl;
+	int bt_debug_gpio  =  bt_power_pdata->bt_gpio_debug;
+	int assertDebugGpio = 0;
 
 	if (on) {
 		rc = gpio_request(bt_reset_gpio, "bt_sys_rst_n");
@@ -268,15 +271,53 @@
 			return rc;
 		}
 		msleep(50);
+		BT_PWR_ERR("BTON:Turn Bt Off bt-reset-gpio(%d) value(%d)\n",
+			bt_reset_gpio, gpio_get_value(bt_reset_gpio));
+		BT_PWR_ERR("BTON:Turn Bt Off bt-sw-ctrl-gpio(%d) value(%d)\n",
+			bt_sw_ctrl_gpio,  gpio_get_value(bt_sw_ctrl_gpio));
+
 		rc = gpio_direction_output(bt_reset_gpio, 1);
 		if (rc) {
 			BT_PWR_ERR("Unable to set direction\n");
 			return rc;
 		}
 		msleep(50);
+		/*  Check  if  SW_CTRL  is  asserted  */
+		if  (bt_sw_ctrl_gpio  >=  0)  {
+			rc  =  gpio_direction_input(bt_sw_ctrl_gpio);
+			if  (rc)  {
+				BT_PWR_ERR("SWCTRL Dir Set Problem:%d\n", rc);
+			}  else  if  (!gpio_get_value(bt_sw_ctrl_gpio))  {
+				/*  Assert  debug  GPIO, if available  as
+				 * SW_CTRL  is  not  asserted
+				 */
+				if  (bt_debug_gpio  >=  0)
+					assertDebugGpio = 1;
+			}
+		}
+		if (assertDebugGpio) {
+			rc  =  gpio_request(bt_debug_gpio, "bt_debug_n");
+			if  (rc)  {
+				BT_PWR_ERR("unable to request Debug Gpio\n");
+			}  else  {
+				rc = gpio_direction_output(bt_debug_gpio,  1);
+				if (rc)
+					BT_PWR_ERR("Prob: Set Debug-Gpio\n");
+			}
+		}
+		BT_PWR_ERR("BTON:Turn Bt On bt-reset-gpio(%d) value(%d)\n",
+			bt_reset_gpio, gpio_get_value(bt_reset_gpio));
+		BT_PWR_ERR("BTON:Turn Bt On bt-sw-ctrl-gpio(%d) value(%d)\n",
+			bt_sw_ctrl_gpio,  gpio_get_value(bt_sw_ctrl_gpio));
 	} else {
 		gpio_set_value(bt_reset_gpio, 0);
+		if  (bt_debug_gpio  >=  0)
+			gpio_set_value(bt_debug_gpio,  0);
 		msleep(100);
+		BT_PWR_ERR("BT-OFF:bt-reset-gpio(%d) value(%d)\n",
+			bt_reset_gpio, gpio_get_value(bt_reset_gpio));
+		BT_PWR_ERR("BT-OFF:bt-sw-ctrl-gpio(%d) value(%d)\n",
+			bt_sw_ctrl_gpio,  gpio_get_value(bt_sw_ctrl_gpio));
 	}
 
 	BT_PWR_ERR("bt_gpio= %d on: %d is successful", bt_reset_gpio, on);
@@ -392,6 +433,10 @@
 gpio_fail:
 		if (bt_power_pdata->bt_gpio_sys_rst > 0)
 			gpio_free(bt_power_pdata->bt_gpio_sys_rst);
+		if  (bt_power_pdata->bt_gpio_sw_ctrl  >  0)
+			gpio_free(bt_power_pdata->bt_gpio_sw_ctrl);
+		if  (bt_power_pdata->bt_gpio_debug  >  0)
+			gpio_free(bt_power_pdata->bt_gpio_debug);
 		if (bt_power_pdata->bt_chip_clk)
 			bt_clk_disable(bt_power_pdata->bt_chip_clk);
 clk_fail:
@@ -660,72 +705,60 @@
 		if (bt_power_pdata->bt_gpio_sys_rst < 0)
 			BT_PWR_INFO("bt-reset-gpio not provided in devicetree");
 
+		bt_power_pdata->bt_gpio_sw_ctrl  =
+			of_get_named_gpio(pdev->dev.of_node,
+						"qca,bt-sw-ctrl-gpio",  0);
+
+		bt_power_pdata->bt_gpio_debug  =
+			of_get_named_gpio(pdev->dev.of_node,
+						"qca,bt-debug-gpio",  0);
+
 		rc = bt_dt_parse_vreg_info(&pdev->dev,
 					&bt_power_pdata->bt_vdd_core,
 					"qca,bt-vdd-core");
-		if (rc < 0)
-			BT_PWR_ERR("bt-vdd-core not provided in device tree");
 
 		rc = bt_dt_parse_vreg_info(&pdev->dev,
 					&bt_power_pdata->bt_vdd_io,
 					"qca,bt-vdd-io");
-		if (rc < 0)
-			BT_PWR_ERR("bt-vdd-io not provided in device tree");
 
 		rc = bt_dt_parse_vreg_info(&pdev->dev,
 					&bt_power_pdata->bt_vdd_xtal,
 					"qca,bt-vdd-xtal");
-		if (rc < 0)
-			BT_PWR_ERR("bt-vdd-xtal not provided in device tree");
 
 		rc = bt_dt_parse_vreg_info(&pdev->dev,
 					&bt_power_pdata->bt_vdd_pa,
 					"qca,bt-vdd-pa");
-		if (rc < 0)
-			BT_PWR_ERR("bt-vdd-pa not provided in device tree");
 
 		rc = bt_dt_parse_vreg_info(&pdev->dev,
 					&bt_power_pdata->bt_vdd_ldo,
 					"qca,bt-vdd-ldo");
-		if (rc < 0)
-			BT_PWR_ERR("bt-vdd-ldo not provided in device tree");
 
 		rc = bt_dt_parse_vreg_info(&pdev->dev,
 					&bt_power_pdata->bt_chip_pwd,
 					"qca,bt-chip-pwd");
-		if (rc < 0)
-			BT_PWR_ERR("bt-chip-pwd not provided in device tree");
 
 		rc = bt_dt_parse_vreg_info(&pdev->dev,
 					&bt_power_pdata->bt_vdd_aon,
 					"qca,bt-vdd-aon");
-		if (rc < 0)
-			BT_PWR_ERR("bt-vdd-aon not provided in device tree");
 
 		rc = bt_dt_parse_vreg_info(&pdev->dev,
 					&bt_power_pdata->bt_vdd_dig,
 					"qca,bt-vdd-dig");
-		if (rc < 0)
-			BT_PWR_ERR("bt-vdd-dig not provided in device tree");
+
 		rc = bt_dt_parse_vreg_info(&pdev->dev,
 					&bt_power_pdata->bt_vdd_rfa1,
 					"qca,bt-vdd-rfa1");
-		if (rc < 0)
-			BT_PWR_ERR("bt-vdd-rfa1 not provided in device tree");
+
 		rc = bt_dt_parse_vreg_info(&pdev->dev,
 					&bt_power_pdata->bt_vdd_rfa2,
 					"qca,bt-vdd-rfa2");
-		if (rc < 0)
-			BT_PWR_ERR("bt-vdd-rfa2 not provided in device tree");
+
 		rc = bt_dt_parse_vreg_info(&pdev->dev,
 					&bt_power_pdata->bt_vdd_asd,
 					"qca,bt-vdd-asd");
-		if (rc < 0)
-			BT_PWR_ERR("bt-vdd-asd not provided in device tree");
+
 		rc = bt_dt_parse_clk_info(&pdev->dev,
 					&bt_power_pdata->bt_chip_clk);
-		if (rc < 0)
-			BT_PWR_ERR("clock not provided in device tree");
 	}
 
 	bt_power_pdata->bt_power_setup = bluetooth_power;
@@ -818,6 +851,7 @@
 {
 	int ret = 0, pwr_cntrl = 0;
 	int chipset_version = 0;
+	long  value  =  -1;
 
 	switch (cmd) {
 	case BT_CMD_SLIM_TEST:
@@ -854,6 +888,90 @@
 			soc_id = 0;
 		}
 		break;
+	case BT_CMD_GETVAL_RESET_GPIO:
+		if (bt_power_pdata->bt_gpio_sys_rst > 0) {
+			value = (long)gpio_get_value(
+				bt_power_pdata->bt_gpio_sys_rst);
+			BT_PWR_ERR("GET_RESET_GPIO(%d) value(%d)",
+				bt_power_pdata->bt_gpio_sys_rst, value);
+			ret = value;
+		} else {
+			BT_PWR_ERR("RESET_GPIO not configured");
+			ret = -EINVAL;
+		}
+		break;
+	case BT_CMD_GETVAL_SW_CTRL_GPIO:
+		if (bt_power_pdata->bt_gpio_sw_ctrl > 0) {
+			value = (long)gpio_get_value(
+				bt_power_pdata->bt_gpio_sw_ctrl);
+			BT_PWR_ERR("GET_SWCTRL_GPIO(%d) value(%d)",
+				bt_power_pdata->bt_gpio_sw_ctrl,  value);
+			ret = value;
+		} else {
+			BT_PWR_ERR("SW_CTRL_GPIO not configured");
+			ret = -EINVAL;
+		}
+		break;
+	case BT_CMD_GETVAL_VDD_AON_LDO:
+		if ((bt_power_pdata->bt_vdd_aon) &&
+				(bt_power_pdata->bt_vdd_aon->is_enabled) &&
+				(regulator_is_enabled(
+					bt_power_pdata->bt_vdd_aon->reg))) {
+			value = (int)regulator_get_voltage(
+				bt_power_pdata->bt_vdd_aon->reg);
+			BT_PWR_ERR("GET_VDD_AON_LDO(%d) value(%d)",
+				bt_power_pdata->bt_vdd_aon, value);
+			ret = value;
+		} else {
+			BT_PWR_ERR("VDD-AON_LDO not configure/enabled");
+			ret = -EINVAL;
+		}
+		break;
+	case BT_CMD_GETVAL_VDD_DIG_LDO:
+		if ((bt_power_pdata->bt_vdd_dig) &&
+				(bt_power_pdata->bt_vdd_dig->is_enabled) &&
+				(regulator_is_enabled(
+					bt_power_pdata->bt_vdd_dig->reg))) {
+			value = (int)regulator_get_voltage(
+				bt_power_pdata->bt_vdd_dig->reg);
+			BT_PWR_ERR("GET_VDD_DIG_LDO(%d) value(%d)",
+				bt_power_pdata->bt_vdd_dig, value);
+			ret = value;
+		} else {
+			BT_PWR_ERR("VDD-DIG-LDO not configured/enabled");
+			ret = -EINVAL;
+		}
+		break;
+	case BT_CMD_GETVAL_VDD_RFA1_LDO:
+		if ((bt_power_pdata->bt_vdd_rfa1) &&
+				(bt_power_pdata->bt_vdd_rfa1->is_enabled) &&
+				(regulator_is_enabled(
+					bt_power_pdata->bt_vdd_rfa1->reg))) {
+			value = (int)regulator_get_voltage(
+				bt_power_pdata->bt_vdd_rfa1->reg);
+			BT_PWR_ERR("GET_VDD_RFA1_LDO(%d) value(%d)",
+				bt_power_pdata->bt_vdd_rfa1, value);
+			ret = value;
+		} else {
+			BT_PWR_ERR("VDD-RFA1-LDO not configure/enabled");
+			ret = -EINVAL;
+		}
+		break;
+	case BT_CMD_GETVAL_VDD_RFA2_LDO:
+		if ((bt_power_pdata->bt_vdd_rfa2) &&
+				(bt_power_pdata->bt_vdd_rfa2->is_enabled) &&
+				(regulator_is_enabled(
+					bt_power_pdata->bt_vdd_rfa2->reg))) {
+			value = (int)regulator_get_voltage(
+				bt_power_pdata->bt_vdd_rfa2->reg);
+			BT_PWR_ERR("GET_VDD_RFA2_LDO(%d) value(%d)",
+				bt_power_pdata->bt_vdd_rfa2, value);
+			ret = value;
+		}  else  {
+			BT_PWR_ERR("VDD-RFA2-LDO not configure/enabled");
+			ret = -EINVAL;
+		}
+		break;
 	default:
 		return -EINVAL;
 	}
diff --git a/drivers/bus/mhi/controllers/mhi_arch_qcom.c b/drivers/bus/mhi/controllers/mhi_arch_qcom.c
index aa04fa4..f9f1731 100644
--- a/drivers/bus/mhi/controllers/mhi_arch_qcom.c
+++ b/drivers/bus/mhi/controllers/mhi_arch_qcom.c
@@ -39,16 +39,18 @@
 #define DLOG "Dev->Host: "
 #define HLOG "Host: "
 
-#define MHI_TSYNC_LOG_PAGES (10)
+#define MHI_TSYNC_LOG_PAGES (2)
 
 #ifdef CONFIG_MHI_DEBUG
 
 #define MHI_IPC_LOG_PAGES (100)
+#define MHI_CNTRL_LOG_PAGES (25)
 enum MHI_DEBUG_LEVEL  mhi_ipc_log_lvl = MHI_MSG_LVL_VERBOSE;
 
 #else
 
 #define MHI_IPC_LOG_PAGES (10)
+#define MHI_CNTRL_LOG_PAGES (5)
 enum MHI_DEBUG_LEVEL  mhi_ipc_log_lvl = MHI_MSG_LVL_ERROR;
 
 #endif
@@ -143,7 +145,7 @@
 
 	switch (notify->event) {
 	case MSM_PCIE_EVENT_WAKEUP:
-		MHI_LOG("Received MSM_PCIE_EVENT_WAKE signal\n");
+		MHI_CNTRL_LOG("Received PCIE_WAKE signal\n");
 
 		/* bring link out of d3cold */
 		if (mhi_dev->powered_on) {
@@ -152,14 +154,14 @@
 		}
 		break;
 	case MSM_PCIE_EVENT_L1SS_TIMEOUT:
-		MHI_VERB("Received MSM_PCIE_EVENT_L1SS_TIMEOUT signal\n");
+		MHI_VERB("Received PCIE_L1SS_TIMEOUT signal\n");
 
 		pm_runtime_mark_last_busy(&pci_dev->dev);
 		pm_request_autosuspend(&pci_dev->dev);
 		break;
 	case MSM_PCIE_EVENT_DRV_CONNECT:
 		/* drv is connected we can suspend now */
-		MHI_LOG("Received MSM_PCIE_EVENT_DRV_CONNECT signal\n");
+		MHI_CNTRL_LOG("Received DRV_CONNECT signal\n");
 
 		arch_info->drv_connected = true;
 
@@ -174,7 +176,7 @@
 		mutex_unlock(&mhi_cntrl->pm_mutex);
 		break;
 	case MSM_PCIE_EVENT_DRV_DISCONNECT:
-		MHI_LOG("Received MSM_PCIE_EVENT_DRV_DISCONNECT signal\n");
+		MHI_CNTRL_LOG("Received DRV_DISCONNECT signal\n");
 
 		/*
 		 * if link suspended bring it out of suspend and disable runtime
@@ -184,7 +186,7 @@
 		pm_runtime_forbid(&pci_dev->dev);
 		break;
 	default:
-		MHI_ERR("Unhandled event 0x%x\n", notify->event);
+		MHI_CNTRL_LOG("Unhandled event 0x%x\n", notify->event);
 	}
 }
 
@@ -197,12 +199,12 @@
 
 	mutex_lock(&mhi_cntrl->pm_mutex);
 	if (mhi_dev->powered_on) {
-		MHI_LOG("MHI still in active state\n");
+		MHI_CNTRL_LOG("MHI still in active state\n");
 		mutex_unlock(&mhi_cntrl->pm_mutex);
 		return 0;
 	}
 
-	MHI_LOG("Enter: mdm_crashed:%d\n", flags & ESOC_HOOK_MDM_CRASH);
+	MHI_CNTRL_LOG("Enter: mdm_crashed:%d\n", flags & ESOC_HOOK_MDM_CRASH);
 
 	/* reset rpm state */
 	pm_runtime_set_active(&pci_dev->dev);
@@ -211,7 +213,7 @@
 	pm_runtime_forbid(&pci_dev->dev);
 	ret = pm_runtime_get_sync(&pci_dev->dev);
 	if (ret < 0) {
-		MHI_ERR("Error with rpm resume, ret:%d\n", ret);
+		MHI_CNTRL_ERR("Error with rpm resume, ret:%d\n", ret);
 		return ret;
 	}
 
@@ -219,7 +221,7 @@
 	ret = msm_pcie_pm_control(MSM_PCIE_RESUME, pci_dev->bus->number,
 				  pci_dev, NULL, 0);
 	if (ret) {
-		MHI_ERR("Failed to resume pcie bus ret %d\n", ret);
+		MHI_CNTRL_ERR("Failed to resume pcie bus ret %d\n", ret);
 		return ret;
 	}
 
@@ -231,7 +233,7 @@
 	struct mhi_dev *mhi_dev = mhi_controller_get_devdata(mhi_cntrl);
 	struct pci_dev *pci_dev = mhi_dev->pci_dev;
 
-	MHI_LOG("Entered\n");
+	MHI_CNTRL_LOG("Entered\n");
 
 	pci_set_power_state(pci_dev, PCI_D3hot);
 
@@ -239,7 +241,7 @@
 	msm_pcie_pm_control(MSM_PCIE_SUSPEND, mhi_cntrl->bus, pci_dev, NULL, 0);
 	mhi_arch_set_bus_request(mhi_cntrl, 0);
 
-	MHI_LOG("Exited\n");
+	MHI_CNTRL_LOG("Exited\n");
 }
 
 static void mhi_arch_esoc_ops_power_off(void *priv, unsigned int flags)
@@ -250,7 +252,7 @@
 	struct pci_dev *pci_dev = mhi_dev->pci_dev;
 	bool mdm_state = (flags & ESOC_HOOK_MDM_CRASH);
 
-	MHI_LOG("Enter: mdm_crashed:%d\n", mdm_state);
+	MHI_CNTRL_LOG("Enter: mdm_crashed:%d\n", mdm_state);
 
 	/*
 	 * Abort system suspend if system is preparing to go to suspend
@@ -266,7 +268,7 @@
 
 	mutex_lock(&mhi_cntrl->pm_mutex);
 	if (!mhi_dev->powered_on) {
-		MHI_LOG("Not in active state\n");
+		MHI_CNTRL_LOG("Not in active state\n");
 		mutex_unlock(&mhi_cntrl->pm_mutex);
 		pm_runtime_put_noidle(&pci_dev->dev);
 		return;
@@ -276,7 +278,7 @@
 
 	pm_runtime_put_noidle(&pci_dev->dev);
 
-	MHI_LOG("Triggering shutdown process\n");
+	MHI_CNTRL_LOG("Triggering shutdown process\n");
 	mhi_power_down(mhi_cntrl, !mdm_state);
 
 	/* turn the link off */
@@ -293,12 +295,10 @@
 {
 	struct mhi_controller *mhi_cntrl = priv;
 
-	MHI_LOG("Enter: mdm asserted\n");
+	MHI_CNTRL_LOG("Enter: mdm asserted\n");
 
 	/* transition MHI state into error state */
 	mhi_control_error(mhi_cntrl);
-
-	MHI_LOG("Exit\n");
 }
 
 static void mhi_bl_dl_cb(struct mhi_device *mhi_device,
@@ -308,11 +308,21 @@
 	struct mhi_dev *mhi_dev = mhi_controller_get_devdata(mhi_cntrl);
 	struct arch_info *arch_info = mhi_dev->arch_info;
 	char *buf = mhi_result->buf_addr;
+	char *token, *delim = "\n";
 
 	/* force a null at last character */
 	buf[mhi_result->bytes_xferd - 1] = 0;
 
-	ipc_log_string(arch_info->boot_ipc_log, "%s %s", DLOG, buf);
+	if (mhi_result->bytes_xferd >= MAX_MSG_SIZE) {
+		do {
+			token = strsep((char **)&buf, delim);
+			if (token)
+				ipc_log_string(arch_info->boot_ipc_log, "%s %s",
+					       DLOG, token);
+		} while (token);
+	} else {
+		ipc_log_string(arch_info->boot_ipc_log, "%s %s", DLOG, buf);
+	}
 }
 
 static void mhi_bl_dummy_cb(struct mhi_device *mhi_dev,
@@ -362,8 +372,9 @@
 	/* do a bus scale vote based on gen speeds */
 	mhi_arch_set_bus_request(mhi_cntrl, link_info->target_link_speed);
 
-	MHI_VERB("bw changed to speed:0x%x width:0x%x\n",
-		 link_info->target_link_speed, link_info->target_link_width);
+	MHI_LOG("BW changed to speed:0x%x width:0x%x\n",
+		link_info->target_link_speed,
+		link_info->target_link_width);
 
 	return 0;
 }
@@ -390,7 +401,7 @@
 		 mhi_device->slot);
 
 	arch_info->boot_dev = mhi_device;
-	arch_info->boot_ipc_log = ipc_log_context_create(MHI_IPC_LOG_PAGES,
+	arch_info->boot_ipc_log = ipc_log_context_create(MHI_CNTRL_LOG_PAGES,
 							 node_name, 0);
 	ipc_log_string(arch_info->boot_ipc_log, HLOG
 		       "Entered SBL, Session ID:0x%x\n", mhi_cntrl->session_id);
@@ -444,6 +455,12 @@
 							    node, 0);
 		mhi_cntrl->log_lvl = mhi_ipc_log_lvl;
 
+		snprintf(node, sizeof(node), "mhi_cntrl_%04x_%02u.%02u.%02u",
+			 mhi_cntrl->dev_id, mhi_cntrl->domain, mhi_cntrl->bus,
+			 mhi_cntrl->slot);
+		mhi_cntrl->cntrl_log_buf = ipc_log_context_create(
+						MHI_CNTRL_LOG_PAGES, node, 0);
+
 		snprintf(node, sizeof(node), "mhi_tsync_%04x_%02u.%02u.%02u",
 			 mhi_cntrl->dev_id, mhi_cntrl->domain, mhi_cntrl->bus,
 			 mhi_cntrl->slot);
@@ -485,7 +502,8 @@
 		reg_event->notify.data = mhi_cntrl;
 		ret = msm_pcie_register_event(reg_event);
 		if (ret)
-			MHI_LOG("Failed to reg. for link up notification\n");
+			MHI_CNTRL_ERR(
+				"Failed to reg. for link up notification\n");
 
 		init_completion(&arch_info->pm_completion);
 
@@ -502,7 +520,7 @@
 		arch_info->esoc_client = devm_register_esoc_client(
 						&mhi_dev->pci_dev->dev, "mdm");
 		if (IS_ERR_OR_NULL(arch_info->esoc_client)) {
-			MHI_ERR("Failed to register esoc client\n");
+			MHI_CNTRL_ERR("Failed to register esoc client\n");
 		} else {
 			/* register for power on/off hooks */
 			struct esoc_client_hook *esoc_ops =
@@ -520,7 +538,7 @@
 			ret = esoc_register_client_hook(arch_info->esoc_client,
 							esoc_ops);
 			if (ret)
-				MHI_ERR("Failed to register esoc ops\n");
+				MHI_CNTRL_ERR("Failed to register esoc ops\n");
 		}
 
 		/*
@@ -571,7 +589,7 @@
 		link_info.target_link_width = cur_link_info->target_link_width;
 		ret = mhi_arch_pcie_scale_bw(mhi_cntrl, pci_dev, &link_info);
 		if (ret) {
-			MHI_ERR("Failed to switch Gen1 speed\n");
+			MHI_CNTRL_ERR("Failed to switch Gen1 speed\n");
 			return -EBUSY;
 		}
 
@@ -601,7 +619,8 @@
 	struct pci_dev *pci_dev = mhi_dev->pci_dev;
 	int ret = 0;
 
-	MHI_LOG("Entered\n");
+	MHI_LOG("Entered with suspend_mode:%s\n",
+		TO_MHI_SUSPEND_MODE_STR(mhi_dev->suspend_mode));
 
 	/* disable inactivity timer */
 	msm_pcie_l1ss_timeout_disable(pci_dev);
@@ -611,7 +630,8 @@
 		pci_clear_master(pci_dev);
 		ret = pci_save_state(mhi_dev->pci_dev);
 		if (ret) {
-			MHI_ERR("Failed with pci_save_state, ret:%d\n", ret);
+			MHI_CNTRL_ERR("Failed with pci_save_state, ret:%d\n",
+				      ret);
 			goto exit_suspend;
 		}
 
@@ -630,6 +650,7 @@
 		break;
 	case MHI_ACTIVE_STATE:
 	case MHI_FAST_LINK_ON:/* keeping link on do nothing */
+	default:
 		break;
 	}
 
@@ -650,8 +671,6 @@
 	struct mhi_link_info *cur_info = &mhi_cntrl->mhi_link_info;
 	int ret;
 
-	MHI_LOG("Entered\n");
-
 	/* request bus scale voting based on higher gen speed */
 	ret = mhi_arch_set_bus_request(mhi_cntrl,
 				       cur_info->target_link_speed);
@@ -694,7 +713,8 @@
 	struct mhi_link_info *cur_info = &mhi_cntrl->mhi_link_info;
 	int ret = 0;
 
-	MHI_LOG("Entered\n");
+	MHI_LOG("Entered with suspend_mode:%s\n",
+		TO_MHI_SUSPEND_MODE_STR(mhi_dev->suspend_mode));
 
 	switch (mhi_dev->suspend_mode) {
 	case MHI_DEFAULT_SUSPEND:
@@ -712,26 +732,23 @@
 		 * only print an error here.
 		 */
 		if (mhi_arch_pcie_scale_bw(mhi_cntrl, pci_dev, cur_info))
-			MHI_ERR(
+			MHI_CNTRL_ERR(
 			"Failed to honor bw request: speed:0x%x width:0x%x\n",
 			cur_info->target_link_speed,
 			cur_info->target_link_width);
 		break;
 	case MHI_ACTIVE_STATE:
 	case MHI_FAST_LINK_ON:
+	default:
 		break;
 	}
 
-	if (ret) {
-		MHI_ERR("Link training failed, ret:%d\n", ret);
-		return ret;
-	}
+	if (!ret)
+		msm_pcie_l1ss_timeout_enable(pci_dev);
 
-	msm_pcie_l1ss_timeout_enable(pci_dev);
+	MHI_LOG("Exited with ret:%d\n", ret);
 
-	MHI_LOG("Exited\n");
-
-	return 0;
+	return ret;
 }
 
 int mhi_arch_link_lpm_disable(struct mhi_controller *mhi_cntrl)
diff --git a/drivers/bus/mhi/controllers/mhi_qcom.c b/drivers/bus/mhi/controllers/mhi_qcom.c
index 1257338..61de2b1 100644
--- a/drivers/bus/mhi/controllers/mhi_qcom.c
+++ b/drivers/bus/mhi/controllers/mhi_qcom.c
@@ -34,12 +34,19 @@
 static int debug_mode;
 module_param_named(debug_mode, debug_mode, int, 0644);
 
+const char * const mhi_suspend_mode_str[MHI_SUSPEND_MODE_MAX] = {
+	[MHI_ACTIVE_STATE] = "Active",
+	[MHI_DEFAULT_SUSPEND] = "Default",
+	[MHI_FAST_LINK_OFF] = "Fast Link Off",
+	[MHI_FAST_LINK_ON] = "Fast Link On",
+};
+
 int mhi_debugfs_trigger_m0(void *data, u64 val)
 {
 	struct mhi_controller *mhi_cntrl = data;
 	struct mhi_dev *mhi_dev = mhi_controller_get_devdata(mhi_cntrl);
 
-	MHI_LOG("Trigger M3 Exit\n");
+	MHI_CNTRL_LOG("Trigger M3 Exit\n");
 	pm_runtime_get(&mhi_dev->pci_dev->dev);
 	pm_runtime_put(&mhi_dev->pci_dev->dev);
 
@@ -53,7 +60,7 @@
 	struct mhi_controller *mhi_cntrl = data;
 	struct mhi_dev *mhi_dev = mhi_controller_get_devdata(mhi_cntrl);
 
-	MHI_LOG("Trigger M3 Entry\n");
+	MHI_CNTRL_LOG("Trigger M3 Entry\n");
 	pm_runtime_mark_last_busy(&mhi_dev->pci_dev->dev);
 	pm_request_autosuspend(&mhi_dev->pci_dev->dev);
 
@@ -92,19 +99,19 @@
 	mhi_dev->resn = MHI_PCI_BAR_NUM;
 	ret = pci_assign_resource(pci_dev, mhi_dev->resn);
 	if (ret) {
-		MHI_ERR("Error assign pci resources, ret:%d\n", ret);
+		MHI_CNTRL_ERR("Error assign pci resources, ret:%d\n", ret);
 		return ret;
 	}
 
 	ret = pci_enable_device(pci_dev);
 	if (ret) {
-		MHI_ERR("Error enabling device, ret:%d\n", ret);
+		MHI_CNTRL_ERR("Error enabling device, ret:%d\n", ret);
 		goto error_enable_device;
 	}
 
 	ret = pci_request_region(pci_dev, mhi_dev->resn, "mhi");
 	if (ret) {
-		MHI_ERR("Error pci_request_region, ret:%d\n", ret);
+		MHI_CNTRL_ERR("Error pci_request_region, ret:%d\n", ret);
 		goto error_request_region;
 	}
 
@@ -114,14 +121,14 @@
 	len = pci_resource_len(pci_dev, mhi_dev->resn);
 	mhi_cntrl->regs = ioremap_nocache(mhi_cntrl->base_addr, len);
 	if (!mhi_cntrl->regs) {
-		MHI_ERR("Error ioremap region\n");
+		MHI_CNTRL_ERR("Error ioremap region\n");
 		goto error_ioremap;
 	}
 
 	ret = pci_alloc_irq_vectors(pci_dev, mhi_cntrl->msi_required,
 				    mhi_cntrl->msi_required, PCI_IRQ_MSI);
 	if (IS_ERR_VALUE((ulong)ret) || ret < mhi_cntrl->msi_required) {
-		MHI_ERR("Failed to enable MSI, ret:%d\n", ret);
+		MHI_CNTRL_ERR("Failed to enable MSI, ret:%d\n", ret);
 		goto error_req_msi;
 	}
 
@@ -395,7 +402,12 @@
 	struct mhi_dev *mhi_dev = mhi_controller_get_devdata(mhi_cntrl);
 	int itr = DIV_ROUND_UP(mhi_cntrl->timeout_ms, delayms);
 
-	MHI_LOG("Entered\n");
+	MHI_CNTRL_LOG("Entered\n");
+
+	if (debug_mode == MHI_DEBUG_NO_D3 || debug_mode == MHI_FWIMAGE_NO_D3) {
+		MHI_CNTRL_LOG("Exited due to debug mode:%d\n", debug_mode);
+		return ret;
+	}
 
 	mutex_lock(&mhi_cntrl->pm_mutex);
 
@@ -411,12 +423,12 @@
 		if (!ret || ret != -EBUSY)
 			break;
 
-		MHI_LOG("MHI busy, sleeping and retry\n");
+		MHI_CNTRL_LOG("MHI busy, sleeping and retry\n");
 		msleep(delayms);
 	}
 
 	if (ret) {
-		MHI_ERR("Force suspend ret with %d\n", ret);
+		MHI_CNTRL_ERR("Force suspend ret:%d\n", ret);
 		goto exit_force_suspend;
 	}
 
@@ -552,14 +564,14 @@
 		pm_runtime_get(dev);
 		ret = mhi_force_suspend(mhi_cntrl);
 		if (!ret) {
-			MHI_LOG("Attempt resume after forced suspend\n");
+			MHI_CNTRL_LOG("Attempt resume after forced suspend\n");
 			mhi_runtime_resume(dev);
 		}
 		pm_runtime_put(dev);
 		mhi_arch_mission_mode_enter(mhi_cntrl);
 		break;
 	default:
-		MHI_ERR("Unhandled cb:0x%x\n", reason);
+		MHI_CNTRL_LOG("Unhandled cb:0x%x\n", reason);
 	}
 }
 
@@ -670,7 +682,7 @@
 	bool use_s1;
 	u32 addr_win[2];
 	const char *iommu_dma_type;
-	int ret, i;
+	int ret, i, len;
 
 	if (!of_node)
 		return ERR_PTR(-ENODEV);
@@ -746,14 +758,22 @@
 	if (ret)
 		goto error_register;
 
-	for (i = 0; i < ARRAY_SIZE(firmware_table); i++) {
+	len = ARRAY_SIZE(firmware_table);
+	for (i = 0; i < len; i++) {
 		firmware_info = firmware_table + i;
 
-		/* debug mode always use default */
-		if (!debug_mode && mhi_cntrl->dev_id == firmware_info->dev_id)
+		if (mhi_cntrl->dev_id == firmware_info->dev_id)
 			break;
 	}
 
+	if (debug_mode) {
+		if (debug_mode <= MHI_DEBUG_D3)
+			firmware_info = firmware_table + (len - 1);
+		MHI_CNTRL_LOG("fw info: debug_mode:%d dev_id:%d image:%s\n",
+			      debug_mode, firmware_info->dev_id,
+			      firmware_info->fw_image);
+	}
+
 	mhi_cntrl->fw_image = firmware_info->fw_image;
 	mhi_cntrl->edl_image = firmware_info->edl_image;
 
@@ -773,7 +793,7 @@
 	atomic_set(&mhi_cntrl->write_idx, -1);
 
 	if (sysfs_create_group(&mhi_cntrl->mhi_dev->dev.kobj, &mhi_qcom_group))
-		MHI_ERR("Error while creating the sysfs group\n");
+		MHI_CNTRL_ERR("Error while creating the sysfs group\n");
 
 	return mhi_cntrl;
 
@@ -830,7 +850,7 @@
 
 	pm_runtime_mark_last_busy(&pci_dev->dev);
 
-	MHI_LOG("Return successful\n");
+	MHI_CNTRL_LOG("Return successful\n");
 
 	return 0;
 
diff --git a/drivers/bus/mhi/controllers/mhi_qcom.h b/drivers/bus/mhi/controllers/mhi_qcom.h
index e1d58a8..2a5a82b 100644
--- a/drivers/bus/mhi/controllers/mhi_qcom.h
+++ b/drivers/bus/mhi/controllers/mhi_qcom.h
@@ -35,14 +35,26 @@
 extern const char * const mhi_ee_str[MHI_EE_MAX];
 #define TO_MHI_EXEC_STR(ee) (ee >= MHI_EE_MAX ? "INVALID_EE" : mhi_ee_str[ee])
 
+enum mhi_debug_mode {
+	MHI_DEBUG_MODE_OFF,
+	MHI_DEBUG_NO_D3, /* use debug.mbn as fw image and skip first M3/D3 */
+	MHI_DEBUG_D3, /* use debug.mbn as fw image and allow first M3/D3 */
+	MHI_FWIMAGE_NO_D3, /* use fw image if found and skip first M3/D3 */
+	MHI_FWIMAGE_D3, /* use fw image if found and allow first M3/D3 */
+	MHI_DEBUG_MODE_MAX = MHI_FWIMAGE_D3,
+};
+
 enum mhi_suspend_mode {
 	MHI_ACTIVE_STATE,
 	MHI_DEFAULT_SUSPEND,
 	MHI_FAST_LINK_OFF,
 	MHI_FAST_LINK_ON,
+	MHI_SUSPEND_MODE_MAX,
 };
 
-#define MHI_IS_SUSPENDED(mode) (mode)
+extern const char * const mhi_suspend_mode_str[MHI_SUSPEND_MODE_MAX];
+#define TO_MHI_SUSPEND_MODE_STR(mode) \
+	(mode >= MHI_SUSPEND_MODE_MAX ? "Invalid" : mhi_suspend_mode_str[mode])
 
 struct mhi_dev {
 	struct pci_dev *pci_dev;
diff --git a/drivers/bus/mhi/core/mhi_boot.c b/drivers/bus/mhi/core/mhi_boot.c
index 896d517..21d7202 100644
--- a/drivers/bus/mhi/core/mhi_boot.c
+++ b/drivers/bus/mhi/core/mhi_boot.c
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: GPL-2.0-only
-/* Copyright (c) 2018-2019, The Linux Foundation. All rights reserved. */
+/* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved. */
 
 #include <linux/debugfs.h>
 #include <linux/delay.h>
@@ -51,7 +51,7 @@
 		rem_seg_len = 0;
 		seg_idx++;
 		if (seg_idx == mhi_cntrl->rddm_image->entries) {
-			MHI_ERR("invalid size for SFR file\n");
+			MHI_CNTRL_ERR("invalid size for SFR file\n");
 			goto err;
 		}
 	}
@@ -80,7 +80,7 @@
 	while (info->file_size) {
 		info->seg_idx++;
 		if (info->seg_idx == mhi_cntrl->rddm_image->entries) {
-			MHI_ERR("invalid size for file %s\n",
+			MHI_CNTRL_ERR("invalid size for file %s\n",
 					table_info->file_name);
 			return -EINVAL;
 		}
@@ -109,14 +109,14 @@
 
 	if (rddm_header->header_size > sizeof(*rddm_header) ||
 			rddm_header->header_size < 8) {
-		MHI_ERR("invalid reported header size %u\n",
+		MHI_CNTRL_ERR("invalid reported header size %u\n",
 				rddm_header->header_size);
 		return;
 	}
 
 	table_size = (rddm_header->header_size - 8) / sizeof(*table_info);
 	if (!table_size) {
-		MHI_ERR("invalid rddm table size %u\n", table_size);
+		MHI_CNTRL_ERR("invalid rddm table size %u\n", table_size);
 		return;
 	}
 
@@ -148,13 +148,13 @@
 	int i = 0;
 
 	for (i = 0; i < img_info->entries - 1; i++, mhi_buf++, bhi_vec++) {
-		MHI_VERB("Setting vector:%pad size:%zu\n",
-			 &mhi_buf->dma_addr, mhi_buf->len);
+		MHI_CNTRL_LOG("Setting vector:%pad size:%zu\n",
+				&mhi_buf->dma_addr, mhi_buf->len);
 		bhi_vec->dma_addr = mhi_buf->dma_addr;
 		bhi_vec->size = mhi_buf->len;
 	}
 
-	MHI_LOG("BHIe programming for RDDM\n");
+	MHI_CNTRL_LOG("BHIe programming for RDDM\n");
 
 	mhi_cntrl->write_reg(mhi_cntrl, base, BHIE_RXVECADDR_HIGH_OFFS,
 		      upper_32_bits(mhi_buf->dma_addr));
@@ -173,8 +173,8 @@
 			    BHIE_RXVECDB_SEQNUM_BMSK, BHIE_RXVECDB_SEQNUM_SHFT,
 			    sequence_id);
 
-	MHI_LOG("address:%pad len:0x%lx sequence:%u\n",
-		&mhi_buf->dma_addr, mhi_buf->len, sequence_id);
+	MHI_CNTRL_LOG("address:%pad len:0x%lx sequence:%u\n",
+			&mhi_buf->dma_addr, mhi_buf->len, sequence_id);
 }
 
 /* collect rddm during kernel panic */
@@ -189,10 +189,10 @@
 	int rddm_retry = rddm_timeout_us / delayus; /* time to enter rddm */
 	void __iomem *base = mhi_cntrl->bhie;
 
-	MHI_LOG("Entered with pm_state:%s dev_state:%s ee:%s\n",
-		to_mhi_pm_state_str(mhi_cntrl->pm_state),
-		TO_MHI_STATE_STR(mhi_cntrl->dev_state),
-		TO_MHI_EXEC_STR(mhi_cntrl->ee));
+	MHI_CNTRL_LOG("Entered with pm_state:%s dev_state:%s ee:%s\n",
+			to_mhi_pm_state_str(mhi_cntrl->pm_state),
+			TO_MHI_STATE_STR(mhi_cntrl->dev_state),
+			TO_MHI_EXEC_STR(mhi_cntrl->ee));
 
 	/*
 	 * This should only be executing during a kernel panic, we expect all
@@ -217,10 +217,10 @@
 	ee = mhi_get_exec_env(mhi_cntrl);
 	if (ee != MHI_EE_RDDM) {
 
-		MHI_LOG("Trigger device into RDDM mode using SYSERR\n");
+		MHI_CNTRL_LOG("Trigger device into RDDM mode using SYSERR\n");
 		mhi_set_mhi_state(mhi_cntrl, MHI_STATE_SYS_ERR);
 
-		MHI_LOG("Waiting for device to enter RDDM\n");
+		MHI_CNTRL_LOG("Waiting for device to enter RDDM\n");
 		while (rddm_retry--) {
 			ee = mhi_get_exec_env(mhi_cntrl);
 			if (ee == MHI_EE_RDDM)
@@ -231,7 +231,7 @@
 
 		if (rddm_retry <= 0) {
 			/* Hardware reset; force device to enter rddm */
-			MHI_LOG(
+			MHI_CNTRL_LOG(
 				"Did not enter RDDM, do a host req. reset\n");
 			mhi_cntrl->write_reg(mhi_cntrl, mhi_cntrl->regs,
 				      MHI_SOC_RESET_REQ_OFFSET,
@@ -242,8 +242,8 @@
 		ee = mhi_get_exec_env(mhi_cntrl);
 	}
 
-	MHI_LOG("Waiting for image download completion, current EE:%s\n",
-		TO_MHI_EXEC_STR(ee));
+	MHI_CNTRL_LOG("Waiting for image download completion, current EE:%s\n",
+			TO_MHI_EXEC_STR(ee));
 	while (retry--) {
 		ret = mhi_read_reg_field(mhi_cntrl, base, BHIE_RXVECSTATUS_OFFS,
 					 BHIE_RXVECSTATUS_STATUS_BMSK,
@@ -253,7 +253,7 @@
 			return -EIO;
 
 		if (rx_status == BHIE_RXVECSTATUS_STATUS_XFER_COMPL) {
-			MHI_LOG("RDDM successfully collected\n");
+			MHI_CNTRL_LOG("RDDM successfully collected\n");
 			return 0;
 		}
 
@@ -263,9 +263,9 @@
 	ee = mhi_get_exec_env(mhi_cntrl);
 	ret = mhi_read_reg(mhi_cntrl, base, BHIE_RXVECSTATUS_OFFS, &rx_status);
 
-	MHI_ERR("Did not complete RDDM transfer\n");
-	MHI_ERR("Current EE:%s\n", TO_MHI_EXEC_STR(ee));
-	MHI_ERR("RXVEC_STATUS:0x%x, ret:%d\n", rx_status, ret);
+	MHI_CNTRL_ERR("Did not complete RDDM transfer\n");
+	MHI_CNTRL_ERR("Current EE:%s\n", TO_MHI_EXEC_STR(ee));
+	MHI_CNTRL_ERR("RXVEC_STATUS:0x%x, ret:%d\n", rx_status, ret);
 
 	return -EIO;
 }
@@ -279,7 +279,7 @@
 	if (in_panic)
 		return __mhi_download_rddm_in_panic(mhi_cntrl);
 
-	MHI_LOG("Waiting for image download completion\n");
+	MHI_CNTRL_LOG("Waiting for image download completion\n");
 
 	/* waiting for image download completion */
 	wait_event_timeout(mhi_cntrl->state_event,
@@ -307,7 +307,7 @@
 		return -EIO;
 	}
 
-	MHI_LOG("Starting BHIe Programming\n");
+	MHI_CNTRL_LOG("Starting BHIe Programming\n");
 
 	mhi_cntrl->write_reg(mhi_cntrl, base, BHIE_TXVECADDR_HIGH_OFFS,
 		      upper_32_bits(mhi_buf->dma_addr));
@@ -319,16 +319,19 @@
 			mhi_buf->len);
 
 	mhi_cntrl->sequence_id = prandom_u32() & BHIE_TXVECSTATUS_SEQNUM_BMSK;
+	if (unlikely(!mhi_cntrl->sequence_id))
+		mhi_cntrl->sequence_id = 1;
+
 	mhi_write_reg_field(mhi_cntrl, base, BHIE_TXVECDB_OFFS,
 			    BHIE_TXVECDB_SEQNUM_BMSK, BHIE_TXVECDB_SEQNUM_SHFT,
 			    mhi_cntrl->sequence_id);
 	read_unlock_bh(pm_lock);
 
-	MHI_LOG("Upper:0x%x Lower:0x%x len:0x%lx sequence:%u\n",
-		upper_32_bits(mhi_buf->dma_addr),
-		lower_32_bits(mhi_buf->dma_addr),
-		mhi_buf->len, mhi_cntrl->sequence_id);
-	MHI_LOG("Waiting for image transfer completion\n");
+	MHI_CNTRL_LOG("Upper:0x%x Lower:0x%x len:0x%lx sequence:%u\n",
+			upper_32_bits(mhi_buf->dma_addr),
+			lower_32_bits(mhi_buf->dma_addr),
+			mhi_buf->len, mhi_cntrl->sequence_id);
+	MHI_CNTRL_LOG("Waiting for image transfer completion\n");
 
 	/* waiting for image download completion */
 	wait_event_timeout(mhi_cntrl->state_event,
@@ -365,7 +368,7 @@
 		{ NULL },
 	};
 
-	MHI_LOG("Starting BHI programming\n");
+	MHI_CNTRL_LOG("Starting BHI programming\n");
 
 	/* program start sbl download via  bhi protocol */
 	read_lock_bh(pm_lock);
@@ -381,11 +384,14 @@
 		      lower_32_bits(dma_addr));
 	mhi_cntrl->write_reg(mhi_cntrl, base, BHI_IMGSIZE, size);
 	mhi_cntrl->session_id = prandom_u32() & BHI_TXDB_SEQNUM_BMSK;
+	if (unlikely(!mhi_cntrl->session_id))
+		mhi_cntrl->session_id = 1;
+
 	mhi_cntrl->write_reg(mhi_cntrl, base, BHI_IMGTXDB,
 			mhi_cntrl->session_id);
 	read_unlock_bh(pm_lock);
 
-	MHI_LOG("Waiting for image transfer completion\n");
+	MHI_CNTRL_LOG("Waiting for image transfer completion\n");
 
 	/* waiting for image download completion */
 	wait_event_timeout(mhi_cntrl->state_event,
@@ -398,7 +404,7 @@
 		goto invalid_pm_state;
 
 	if (tx_status == BHI_STATUS_ERROR) {
-		MHI_ERR("Image transfer failed\n");
+		MHI_CNTRL_ERR("Image transfer failed\n");
 		read_lock_bh(pm_lock);
 		if (MHI_REG_ACCESS_VALID(mhi_cntrl->pm_state)) {
 			for (i = 0; error_reg[i].name; i++) {
@@ -406,8 +412,8 @@
 						   error_reg[i].offset, &val);
 				if (ret)
 					break;
-				MHI_ERR("reg:%s value:0x%x\n",
-					error_reg[i].name, val);
+				MHI_CNTRL_ERR("reg:%s value:0x%x\n",
+					      error_reg[i].name, val);
 			}
 		}
 		read_unlock_bh(pm_lock);
@@ -446,8 +452,8 @@
 	struct image_info *img_info;
 	struct mhi_buf *mhi_buf;
 
-	MHI_LOG("Allocating bytes:%zu seg_size:%zu total_seg:%u\n",
-		alloc_size, seg_size, segments);
+	MHI_CNTRL_LOG("Allocating bytes:%zu seg_size:%zu total_seg:%u\n",
+			alloc_size, seg_size, segments);
 
 	img_info = kzalloc(sizeof(*img_info), GFP_KERNEL);
 	if (!img_info)
@@ -474,7 +480,7 @@
 		if (!mhi_buf->buf)
 			goto error_alloc_segment;
 
-		MHI_LOG("Entry:%d Address:0x%llx size:%lu\n", i,
+		MHI_CNTRL_LOG("Entry:%d Address:0x%llx size:%lu\n", i,
 			mhi_buf->dma_addr, mhi_buf->len);
 	}
 
@@ -482,7 +488,7 @@
 	img_info->entries = segments;
 	*image_info = img_info;
 
-	MHI_LOG("Successfully allocated bhi vec table\n");
+	MHI_CNTRL_LOG("Successfully allocated bhi vec table\n");
 
 	return 0;
 
@@ -530,18 +536,18 @@
 {
 	int ret;
 	const char *fw_name;
-	const struct firmware *firmware;
+	const struct firmware *firmware = NULL;
 	struct image_info *image_info;
 	void *buf;
 	dma_addr_t dma_addr;
 	size_t size;
 
 	if (MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state)) {
-		MHI_ERR("MHI is not in valid state\n");
+		MHI_CNTRL_ERR("MHI is not in valid state\n");
 		return;
 	}
 
-	MHI_LOG("Device current EE:%s\n", TO_MHI_EXEC_STR(mhi_cntrl->ee));
+	MHI_CNTRL_LOG("Device current EE:%s\n", TO_MHI_EXEC_STR(mhi_cntrl->ee));
 
 	/* if device in pthru, do reset to ready state transition */
 	if (mhi_cntrl->ee == MHI_EE_PTHRU)
@@ -552,13 +558,14 @@
 
 	if (!fw_name || (mhi_cntrl->fbc_download && (!mhi_cntrl->sbl_size ||
 						     !mhi_cntrl->seg_len))) {
-		MHI_ERR("No firmware image defined or !sbl_size || !seg_len\n");
+		MHI_CNTRL_ERR(
+			"No firmware image defined or !sbl_size || !seg_len\n");
 		return;
 	}
 
 	ret = request_firmware(&firmware, fw_name, mhi_cntrl->dev);
 	if (ret) {
-		MHI_ERR("Error loading firmware, ret:%d\n", ret);
+		MHI_CNTRL_ERR("Error loading firmware, ret:%d\n", ret);
 		return;
 	}
 
@@ -570,7 +577,7 @@
 
 	buf = mhi_alloc_coherent(mhi_cntrl, size, &dma_addr, GFP_KERNEL);
 	if (!buf) {
-		MHI_ERR("Could not allocate memory for image\n");
+		MHI_CNTRL_ERR("Could not allocate memory for image\n");
 		release_firmware(firmware);
 		return;
 	}
@@ -599,11 +606,11 @@
 		ret = mhi_alloc_bhie_table(mhi_cntrl, &mhi_cntrl->fbc_image,
 					   firmware->size);
 		if (ret) {
-			MHI_ERR("Error alloc size of %zu\n", firmware->size);
+			MHI_CNTRL_ERR("Error alloc size:%zu\n", firmware->size);
 			goto error_alloc_fw_table;
 		}
 
-		MHI_LOG("Copying firmware image into vector table\n");
+		MHI_CNTRL_LOG("Copying firmware image into vector table\n");
 
 		/* load the firmware into BHIE vec table */
 		mhi_firmware_copy(mhi_cntrl, firmware, mhi_cntrl->fbc_image);
@@ -613,16 +620,16 @@
 	/* transitioning into MHI RESET->READY state */
 	ret = mhi_ready_state_transition(mhi_cntrl);
 
-	MHI_LOG("To Reset->Ready PM_STATE:%s MHI_STATE:%s EE:%s, ret:%d\n",
-		to_mhi_pm_state_str(mhi_cntrl->pm_state),
-		TO_MHI_STATE_STR(mhi_cntrl->dev_state),
-		TO_MHI_EXEC_STR(mhi_cntrl->ee), ret);
+	MHI_CNTRL_LOG("To Reset->Ready PM_STATE:%s MHI_STATE:%s EE:%s ret:%d\n",
+			to_mhi_pm_state_str(mhi_cntrl->pm_state),
+			TO_MHI_STATE_STR(mhi_cntrl->dev_state),
+			TO_MHI_EXEC_STR(mhi_cntrl->ee), ret);
 
 	if (!mhi_cntrl->fbc_download)
 		return;
 
 	if (ret) {
-		MHI_ERR("Did not transition to READY state\n");
+		MHI_CNTRL_ERR("Did not transition to READY state\n");
 		goto error_read;
 	}
 
@@ -633,7 +640,7 @@
 				 msecs_to_jiffies(mhi_cntrl->timeout_ms));
 
 	if (!ret || MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state)) {
-		MHI_ERR("MHI did not enter BHIE\n");
+		MHI_CNTRL_ERR("MHI did not enter BHIE\n");
 		goto error_read;
 	}
 
@@ -643,7 +650,7 @@
 			       /* last entry is vec table */
 			       &image_info->mhi_buf[image_info->entries - 1]);
 
-	MHI_LOG("amss fw_load, ret:%d\n", ret);
+	MHI_CNTRL_LOG("amss fw_load ret:%d\n", ret);
 
 	release_firmware(firmware);
 
diff --git a/drivers/bus/mhi/core/mhi_init.c b/drivers/bus/mhi/core/mhi_init.c
index 20bb8f3..9c8be59 100644
--- a/drivers/bus/mhi/core/mhi_init.c
+++ b/drivers/bus/mhi/core/mhi_init.c
@@ -9,6 +9,7 @@
 #include <linux/list.h>
 #include <linux/of.h>
 #include <linux/module.h>
+#include <linux/random.h>
 #include <linux/slab.h>
 #include <linux/wait.h>
 #include <linux/mhi.h>
@@ -96,6 +97,25 @@
 	return mhi_pm_state_str[index];
 }
 
+void mhi_time_async_cb(struct mhi_device *mhi_dev, u32 sequence,
+		       u64 local_time, u64 remote_time)
+{
+	struct mhi_controller *mhi_cntrl = mhi_dev->mhi_cntrl;
+
+	MHI_LOG("Time response: seq:%llx local: %llu remote: %llu (ticks)\n",
+		sequence, local_time, remote_time);
+}
+
+void mhi_time_us_async_cb(struct mhi_device *mhi_dev, u32 sequence,
+			  u64 local_time, u64 remote_time)
+{
+	struct mhi_controller *mhi_cntrl = mhi_dev->mhi_cntrl;
+
+	MHI_LOG("Time response: seq:%llx local: %llu remote: %llu (us)\n",
+		sequence, LOCAL_TICKS_TO_US(local_time),
+		REMOTE_TICKS_TO_US(remote_time));
+}
+
 static ssize_t time_show(struct device *dev,
 			 struct device_attribute *attr,
 			 char *buf)
@@ -108,7 +128,8 @@
 	ret = mhi_get_remote_time_sync(mhi_dev, &t_host, &t_device);
 	if (ret) {
 		MHI_ERR("Failed to obtain time, ret:%d\n", ret);
-		return ret;
+		return scnprintf(buf, PAGE_SIZE,
+				 "Request failed or feature unsupported\n");
 	}
 
 	return scnprintf(buf, PAGE_SIZE, "local: %llu remote: %llu (ticks)\n",
@@ -128,7 +149,8 @@
 	ret = mhi_get_remote_time_sync(mhi_dev, &t_host, &t_device);
 	if (ret) {
 		MHI_ERR("Failed to obtain time, ret:%d\n", ret);
-		return ret;
+		return scnprintf(buf, PAGE_SIZE,
+				 "Request failed or feature unsupported\n");
 	}
 
 	return scnprintf(buf, PAGE_SIZE, "local: %llu remote: %llu (us)\n",
@@ -137,9 +159,59 @@
 }
 static DEVICE_ATTR_RO(time_us);
 
+static ssize_t time_async_show(struct device *dev,
+			       struct device_attribute *attr,
+			       char *buf)
+{
+	struct mhi_device *mhi_dev = to_mhi_device(dev);
+	struct mhi_controller *mhi_cntrl = mhi_dev->mhi_cntrl;
+	u32 seq = prandom_u32();
+	int ret;
+
+	if (!seq)
+		seq = 1;
+
+	ret = mhi_get_remote_time(mhi_dev, seq, &mhi_time_async_cb);
+	if (ret) {
+		MHI_ERR("Failed to request time, seq:%llx, ret:%d\n", seq, ret);
+		return scnprintf(buf, PAGE_SIZE,
+				 "Request failed or feature unsupported\n");
+	}
+
+	return scnprintf(buf, PAGE_SIZE,
+			 "Requested time asynchronously with seq:%llx\n", seq);
+}
+static DEVICE_ATTR_RO(time_async);
+
+static ssize_t time_us_async_show(struct device *dev,
+				  struct device_attribute *attr,
+				  char *buf)
+{
+	struct mhi_device *mhi_dev = to_mhi_device(dev);
+	struct mhi_controller *mhi_cntrl = mhi_dev->mhi_cntrl;
+	u32 seq = prandom_u32();
+	int ret;
+
+	if (!seq)
+		seq = 1;
+
+	ret = mhi_get_remote_time(mhi_dev, seq, &mhi_time_us_async_cb);
+	if (ret) {
+		MHI_ERR("Failed to request time, seq:%llx, ret:%d\n", seq, ret);
+		return scnprintf(buf, PAGE_SIZE,
+				 "Request failed or feature unsupported\n");
+	}
+
+	return scnprintf(buf, PAGE_SIZE,
+			 "Requested time asynchronously with seq:%llx\n", seq);
+}
+static DEVICE_ATTR_RO(time_us_async);
+
 static struct attribute *mhi_tsync_attrs[] = {
 	&dev_attr_time.attr,
 	&dev_attr_time_us.attr,
+	&dev_attr_time_async.attr,
+	&dev_attr_time_us_async.attr,
 	NULL,
 };
 
@@ -358,8 +430,8 @@
 				  mhi_msi_handlr, IRQF_SHARED | IRQF_NO_SUSPEND,
 				  "mhi", mhi_event);
 		if (ret) {
-			MHI_ERR("Error requesting irq:%d for ev:%d\n",
-				mhi_cntrl->irq[mhi_event->msi], i);
+			MHI_CNTRL_ERR("Error requesting irq:%d for ev:%d\n",
+					mhi_cntrl->irq[mhi_event->msi], i);
 			goto error_request;
 		}
 	}
@@ -695,7 +767,7 @@
 	ret = mhi_get_capability_offset(mhi_cntrl, TIMESYNC_CAP_ID,
 					&time_offset);
 	if (ret) {
-		MHI_LOG("No timesync capability found\n");
+		MHI_CNTRL_LOG("No timesync capability found\n");
 		return ret;
 	}
 
@@ -710,7 +782,7 @@
 	INIT_LIST_HEAD(&mhi_tsync->head);
 
 	/* save time_offset for obtaining time */
-	MHI_LOG("TIME OFFS:0x%x\n", time_offset);
+	MHI_CNTRL_LOG("TIME OFFS:0x%x\n", time_offset);
 	mhi_tsync->time_reg = mhi_cntrl->regs + time_offset
 			      + TIMESYNC_TIME_LOW_OFFSET;
 
@@ -719,10 +791,12 @@
 	/* get timesync event ring configuration */
 	er_index = mhi_get_er_index(mhi_cntrl, MHI_ER_TSYNC_ELEMENT_TYPE);
 	if (er_index < 0) {
-		MHI_LOG("Could not find timesync event ring\n");
+		MHI_CNTRL_LOG("Could not find timesync event ring\n");
 		return er_index;
 	}
 
+	mhi_tsync->db_support = true;
+
 	time_cfg_offset = time_offset + TIMESYNC_CFG_OFFSET;
 
 	/* advertise host support */
@@ -746,7 +820,7 @@
 	sfr_info->buf_addr = mhi_alloc_coherent(mhi_cntrl, sfr_info->len,
 					&sfr_info->dma_addr, GFP_KERNEL);
 	if (!sfr_info->buf_addr) {
-		MHI_ERR("Failed to allocate memory for sfr\n");
+		MHI_CNTRL_ERR("Failed to allocate memory for sfr\n");
 		return -ENOMEM;
 	}
 
@@ -754,14 +828,14 @@
 
 	ret = mhi_send_cmd(mhi_cntrl, NULL, MHI_CMD_SFR_CFG);
 	if (ret) {
-		MHI_ERR("Failed to send sfr cfg cmd\n");
+		MHI_CNTRL_ERR("Failed to send sfr cfg cmd\n");
 		return ret;
 	}
 
 	ret = wait_for_completion_timeout(&sfr_info->completion,
 			msecs_to_jiffies(mhi_cntrl->timeout_ms));
 	if (!ret || sfr_info->ccs != MHI_EV_CC_SUCCESS) {
-		MHI_ERR("Failed to get sfr cfg cmd completion\n");
+		MHI_CNTRL_ERR("Failed to get sfr cfg cmd completion\n");
 		return -EIO;
 	}
 
@@ -784,12 +858,12 @@
 
 	/* No ER configured to support BW scale */
 	er_index = mhi_get_er_index(mhi_cntrl, MHI_ER_BW_SCALE_ELEMENT_TYPE);
-	if (ret < 0)
+	if (er_index < 0)
 		return er_index;
 
 	bw_cfg_offset += BW_SCALE_CFG_OFFSET;
 
-	MHI_LOG("BW_CFG OFFSET:0x%x\n", bw_cfg_offset);
+	MHI_CNTRL_LOG("BW_CFG OFFSET:0x%x\n", bw_cfg_offset);
 
 	/* advertise host support */
 	mhi_cntrl->write_reg(mhi_cntrl, mhi_cntrl->regs, bw_cfg_offset,
@@ -878,7 +952,7 @@
 		{ 0, 0, 0 }
 	};
 
-	MHI_LOG("Initializing MMIO\n");
+	MHI_CNTRL_LOG("Initializing MMIO\n");
 
 	/* set up DB register for all the chan rings */
 	ret = mhi_read_reg_field(mhi_cntrl, base, CHDBOFF, CHDBOFF_CHDBOFF_MASK,
@@ -886,7 +960,7 @@
 	if (ret)
 		return -EIO;
 
-	MHI_LOG("CHDBOFF:0x%x\n", val);
+	MHI_CNTRL_LOG("CHDBOFF:0x%x\n", val);
 
 	/* setup wake db */
 	mhi_cntrl->wake_db = base + val + (8 * MHI_DEV_WAKE_DB);
@@ -909,7 +983,7 @@
 	if (ret)
 		return -EIO;
 
-	MHI_LOG("ERDBOFF:0x%x\n", val);
+	MHI_CNTRL_LOG("ERDBOFF:0x%x\n", val);
 
 	mhi_event = mhi_cntrl->mhi_event;
 	for (i = 0; i < mhi_cntrl->total_ev_rings; i++, val += 8, mhi_event++) {
@@ -922,7 +996,7 @@
 	/* set up DB register for primary CMD rings */
 	mhi_cntrl->mhi_cmd[PRIMARY_CMD_RING].ring.db_addr = base + CRDB_LOWER;
 
-	MHI_LOG("Programming all MMIO values.\n");
+	MHI_CNTRL_LOG("Programming all MMIO values.\n");
 	for (i = 0; reg_info[i].offset; i++)
 		mhi_write_reg_field(mhi_cntrl, base, reg_info[i].offset,
 				    reg_info[i].mask, reg_info[i].shift,
@@ -1655,7 +1729,7 @@
 
 	ret = mhi_init_dev_ctxt(mhi_cntrl);
 	if (ret) {
-		MHI_ERR("Error with init dev_ctxt\n");
+		MHI_CNTRL_ERR("Error with init dev_ctxt\n");
 		goto error_dev_ctxt;
 	}
 
@@ -1675,7 +1749,7 @@
 			ret = mhi_read_reg(mhi_cntrl, mhi_cntrl->regs, BHIEOFF,
 					   &bhie_off);
 			if (ret) {
-				MHI_ERR("Error getting bhie offset\n");
+				MHI_CNTRL_ERR("Error getting bhie offset\n");
 				goto bhie_error;
 			}
 
diff --git a/drivers/bus/mhi/core/mhi_internal.h b/drivers/bus/mhi/core/mhi_internal.h
index d45bb85..c885d63 100644
--- a/drivers/bus/mhi/core/mhi_internal.h
+++ b/drivers/bus/mhi/core/mhi_internal.h
@@ -728,6 +728,7 @@
 struct mhi_timesync {
 	void __iomem *time_reg;
 	u32 int_sequence;
+	bool db_support;
 	spinlock_t lock; /* list protection */
 	struct list_head head;
 };
diff --git a/drivers/bus/mhi/core/mhi_main.c b/drivers/bus/mhi/core/mhi_main.c
index 916010f..3deea95 100644
--- a/drivers/bus/mhi/core/mhi_main.c
+++ b/drivers/bus/mhi/core/mhi_main.c
@@ -783,75 +783,6 @@
 	}
 }
 
-static ssize_t time_show(struct device *dev,
-			 struct device_attribute *attr,
-			 char *buf)
-{
-	struct mhi_device *mhi_dev = to_mhi_device(dev);
-	struct mhi_controller *mhi_cntrl = mhi_dev->mhi_cntrl;
-	u64 t_host, t_device;
-	int ret;
-
-	ret = mhi_get_remote_time_sync(mhi_dev, &t_host, &t_device);
-	if (ret) {
-		MHI_ERR("Failed to obtain time, ret:%d\n", ret);
-		return ret;
-	}
-
-	return scnprintf(buf, PAGE_SIZE, "local: %llu remote: %llu (ticks)\n",
-			 t_host, t_device);
-}
-static DEVICE_ATTR_RO(time);
-
-static ssize_t time_us_show(struct device *dev,
-			    struct device_attribute *attr,
-			    char *buf)
-{
-	struct mhi_device *mhi_dev = to_mhi_device(dev);
-	struct mhi_controller *mhi_cntrl = mhi_dev->mhi_cntrl;
-	u64 t_host, t_device;
-	int ret;
-
-	ret = mhi_get_remote_time_sync(mhi_dev, &t_host, &t_device);
-	if (ret) {
-		MHI_ERR("Failed to obtain time, ret:%d\n", ret);
-		return ret;
-	}
-
-	return scnprintf(buf, PAGE_SIZE, "local: %llu remote: %llu (us)\n",
-			 LOCAL_TICKS_TO_US(t_host),
-			 REMOTE_TICKS_TO_US(t_device));
-}
-static DEVICE_ATTR_RO(time_us);
-
-static struct attribute *mhi_tsync_attrs[] = {
-	&dev_attr_time.attr,
-	&dev_attr_time_us.attr,
-	NULL,
-};
-
-static const struct attribute_group mhi_tsync_group = {
-	.attrs = mhi_tsync_attrs,
-};
-
-void mhi_destroy_timesync(struct mhi_controller *mhi_cntrl)
-{
-	if (mhi_cntrl->mhi_tsync) {
-		mutex_lock(&mhi_cntrl->tsync_mutex);
-		sysfs_remove_group(&mhi_cntrl->mhi_dev->dev.kobj,
-				   &mhi_tsync_group);
-		kfree(mhi_cntrl->mhi_tsync);
-		mhi_cntrl->mhi_tsync = NULL;
-		mutex_unlock(&mhi_cntrl->tsync_mutex);
-	}
-}
-
-int mhi_create_timesync_sysfs(struct mhi_controller *mhi_cntrl)
-{
-	return sysfs_create_group(&mhi_cntrl->mhi_dev->dev.kobj,
-				  &mhi_tsync_group);
-}
-
 /* bind mhi channels into mhi devices */
 void mhi_create_devices(struct mhi_controller *mhi_cntrl)
 {
@@ -1353,7 +1284,7 @@
 	struct mhi_chan *mhi_chan;
 
 	if (unlikely(MHI_EVENT_ACCESS_INVALID(mhi_cntrl->pm_state))) {
-		MHI_ERR("No EV access, PM_STATE:%s\n",
+		MHI_LOG("No EV access, PM_STATE:%s\n",
 			to_mhi_pm_state_str(mhi_cntrl->pm_state));
 		return -EIO;
 	}
@@ -1416,9 +1347,8 @@
 	u64 remote_time;
 
 	if (unlikely(MHI_EVENT_ACCESS_INVALID(mhi_cntrl->pm_state))) {
-		MHI_ERR("No EV access, PM_STATE:%s\n",
+		MHI_LOG("No EV access, PM_STATE:%s\n",
 			to_mhi_pm_state_str(mhi_cntrl->pm_state));
-		read_unlock_bh(&mhi_cntrl->pm_lock);
 		return -EIO;
 	}
 
@@ -1852,6 +1782,7 @@
 			struct mhi_chan *mhi_chan)
 {
 	int ret = 0;
+	bool in_mission_mode = false;
 
 	MHI_LOG("Entered: preparing channel:%d\n", mhi_chan->chan);
 
@@ -1890,7 +1821,12 @@
 		goto error_pm_state;
 	}
 
-	atomic_inc(&mhi_cntrl->pending_pkts);
+	/* block host low power modes */
+	if (MHI_IN_MISSION_MODE(mhi_cntrl->ee)) {
+		atomic_inc(&mhi_cntrl->pending_pkts);
+		in_mission_mode = true;
+	}
+
 	mhi_cntrl->wake_toggle(mhi_cntrl);
 	if (MHI_PM_IN_SUSPEND_STATE(mhi_cntrl->pm_state))
 		mhi_trigger_resume(mhi_cntrl);
@@ -1911,7 +1847,8 @@
 		goto error_dec_pendpkt;
 	}
 
-	atomic_dec(&mhi_cntrl->pending_pkts);
+	if (in_mission_mode)
+		atomic_dec(&mhi_cntrl->pending_pkts);
 
 	write_lock_irq(&mhi_chan->lock);
 	mhi_chan->ch_state = MHI_CH_STATE_ENABLED;
@@ -2095,6 +2032,7 @@
 				    struct mhi_chan *mhi_chan)
 {
 	int ret;
+	bool in_mission_mode = false;
 
 	MHI_LOG("Entered: unprepare channel:%d\n", mhi_chan->chan);
 
@@ -2118,7 +2056,12 @@
 		goto error_invalid_state;
 	}
 
-	atomic_inc(&mhi_cntrl->pending_pkts);
+	/* block host low power modes */
+	if (MHI_IN_MISSION_MODE(mhi_cntrl->ee)) {
+		atomic_inc(&mhi_cntrl->pending_pkts);
+		in_mission_mode = true;
+	}
+
 	mhi_cntrl->wake_toggle(mhi_cntrl);
 	if (MHI_PM_IN_SUSPEND_STATE(mhi_cntrl->pm_state))
 		mhi_trigger_resume(mhi_cntrl);
@@ -2137,7 +2080,8 @@
 		MHI_ERR("Failed to receive cmd completion, still resetting\n");
 
 error_dec_pendpkt:
-	atomic_dec(&mhi_cntrl->pending_pkts);
+	if (in_mission_mode)
+		atomic_dec(&mhi_cntrl->pending_pkts);
 error_invalid_state:
 	if (!mhi_chan->offload_ch) {
 		mhi_reset_chan(mhi_cntrl, mhi_chan);
@@ -2150,18 +2094,22 @@
 int mhi_debugfs_mhi_states_show(struct seq_file *m, void *d)
 {
 	struct mhi_controller *mhi_cntrl = m->private;
+	struct mhi_link_info *cur_info = &mhi_cntrl->mhi_link_info;
 
 	seq_printf(m,
-		   "[%llu ns]: pm_state:%s dev_state:%s EE:%s M0:%u M2:%u M3:%u M3_Fast:%u wake:%d dev_wake:%u alloc_size:%u pending_pkts:%u\n",
+		   "[%llu ns]: pm_state:%s dev_state:%s EE:%s M0:%u M2:%u M3:%u M3_Fast:%u wake:%d ignore_override:%d dev_wake:%u alloc_size:%u pending_pkts:%u last_requested_bw:GEN%dx%d\n",
 		   sched_clock(),
 		   to_mhi_pm_state_str(mhi_cntrl->pm_state),
 		   TO_MHI_STATE_STR(mhi_cntrl->dev_state),
 		   TO_MHI_EXEC_STR(mhi_cntrl->ee),
 		   mhi_cntrl->M0, mhi_cntrl->M2, mhi_cntrl->M3,
 		   mhi_cntrl->M3_FAST, mhi_cntrl->wake_set,
+		   mhi_cntrl->ignore_override,
 		   atomic_read(&mhi_cntrl->dev_wake),
 		   atomic_read(&mhi_cntrl->alloc_size),
-		   atomic_read(&mhi_cntrl->pending_pkts));
+		   atomic_read(&mhi_cntrl->pending_pkts),
+		   cur_info->target_link_speed,
+		   cur_info->target_link_width);
 	return 0;
 }
 
@@ -2277,7 +2225,7 @@
 
 	mhi_dev = mhi_cntrl->mhi_dev;
 
-	seq_printf(m, "At %llu ns:\n", sched_clock());
+	seq_printf(m, "[%llu ns]:\n", sched_clock());
 	seq_printf(m, "%s: device:%u, bus:%u\n", mhi_dev->chan_name,
 		   atomic_read(&mhi_dev->dev_vote),
 		   atomic_read(&mhi_dev->bus_vote));
@@ -2346,6 +2294,7 @@
 				    enum MHI_CMD cmd)
 {
 	int ret = -EIO;
+	bool in_mission_mode = false;
 
 	mutex_lock(&mhi_chan->mutex);
 
@@ -2368,7 +2317,12 @@
 		goto error_chan_state;
 	}
 
-	atomic_inc(&mhi_cntrl->pending_pkts);
+	/* block host low power modes */
+	if (MHI_IN_MISSION_MODE(mhi_cntrl->ee)) {
+		atomic_inc(&mhi_cntrl->pending_pkts);
+		in_mission_mode = true;
+	}
+
 	mhi_cntrl->wake_toggle(mhi_cntrl);
 	if (MHI_PM_IN_SUSPEND_STATE(mhi_cntrl->pm_state))
 		mhi_trigger_resume(mhi_cntrl);
@@ -2395,7 +2349,8 @@
 		 mhi_chan->chan, cmd == MHI_CMD_START_CHAN ? "START" : "STOP");
 
 error_dec_pendpkt:
-	atomic_dec(&mhi_cntrl->pending_pkts);
+	if (in_mission_mode)
+		atomic_dec(&mhi_cntrl->pending_pkts);
 error_chan_state:
 	mutex_unlock(&mhi_chan->mutex);
 
@@ -2533,16 +2488,16 @@
 	int ret;
 
 	mutex_lock(&mhi_cntrl->tsync_mutex);
-	/* not all devices support time feature */
+	/* not all devices support time features */
 	if (!mhi_tsync) {
 		ret = -EIO;
-		goto err_unlock;
+		goto error_unlock;
 	}
 
 	/* bring to M0 state */
 	ret = __mhi_device_get_sync(mhi_cntrl);
 	if (ret)
-		goto err_unlock;
+		goto error_unlock;
 
 	read_lock_bh(&mhi_cntrl->pm_lock);
 	if (unlikely(MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state))) {
@@ -2555,8 +2510,10 @@
 
 	/* disable link level low power modes */
 	ret = mhi_cntrl->lpm_disable(mhi_cntrl, mhi_cntrl->priv_data);
-	if (ret)
+	if (ret) {
+		read_lock_bh(&mhi_cntrl->pm_lock);
 		goto error_invalid_state;
+	}
 
 	/*
 	 * time critical code to fetch device times,
@@ -2578,7 +2535,7 @@
 error_invalid_state:
 	mhi_cntrl->wake_put(mhi_cntrl, false);
 	read_unlock_bh(&mhi_cntrl->pm_lock);
-err_unlock:
+error_unlock:
 	mutex_unlock(&mhi_cntrl->tsync_mutex);
 	return ret;
 }
@@ -2606,9 +2563,9 @@
 	struct tsync_node *tsync_node;
 	int ret;
 
-	/* not all devices support time feature */
+	/* not all devices support all time features */
 	mutex_lock(&mhi_cntrl->tsync_mutex);
-	if (!mhi_tsync) {
+	if (!mhi_tsync || !mhi_tsync->db_support) {
 		ret = -EIO;
 		goto error_unlock;
 	}
diff --git a/drivers/bus/mhi/core/mhi_pm.c b/drivers/bus/mhi/core/mhi_pm.c
index ab31083..703dcba 100644
--- a/drivers/bus/mhi/core/mhi_pm.c
+++ b/drivers/bus/mhi/core/mhi_pm.c
@@ -253,7 +253,7 @@
 	enum MHI_PM_STATE cur_state;
 	int ret, i;
 
-	MHI_LOG("Waiting to enter READY state\n");
+	MHI_CNTRL_LOG("Waiting to enter READY state\n");
 
 	/* wait for RESET to be cleared and READY bit to be set */
 	wait_event_timeout(mhi_cntrl->state_event,
@@ -275,16 +275,16 @@
 	if (reset || !ready)
 		return -ETIMEDOUT;
 
-	MHI_LOG("Device in READY State\n");
+	MHI_CNTRL_LOG("Device in READY State\n");
 	write_lock_irq(&mhi_cntrl->pm_lock);
 	cur_state = mhi_tryset_pm_state(mhi_cntrl, MHI_PM_POR);
 	mhi_cntrl->dev_state = MHI_STATE_READY;
 	write_unlock_irq(&mhi_cntrl->pm_lock);
 
 	if (cur_state != MHI_PM_POR) {
-		MHI_ERR("Error moving to state %s from %s\n",
-			to_mhi_pm_state_str(MHI_PM_POR),
-			to_mhi_pm_state_str(cur_state));
+		MHI_CNTRL_ERR("Error moving to state %s from %s\n",
+				to_mhi_pm_state_str(MHI_PM_POR),
+				to_mhi_pm_state_str(cur_state));
 		return -EIO;
 	}
 	read_lock_bh(&mhi_cntrl->pm_lock);
@@ -293,7 +293,7 @@
 
 	ret = mhi_init_mmio(mhi_cntrl);
 	if (ret) {
-		MHI_ERR("Error programming mmio registers\n");
+		MHI_CNTRL_ERR("Error programming mmio registers\n");
 		goto error_mmio;
 	}
 
@@ -465,7 +465,7 @@
 	enum mhi_ee ee = 0;
 	struct mhi_event *mhi_event;
 
-	MHI_LOG("Processing Mission Mode Transition\n");
+	MHI_CNTRL_LOG("Processing Mission Mode Transition\n");
 
 	write_lock_irq(&mhi_cntrl->pm_lock);
 	if (MHI_REG_ACCESS_VALID(mhi_cntrl->pm_state))
@@ -473,7 +473,7 @@
 	write_unlock_irq(&mhi_cntrl->pm_lock);
 
 	if (!MHI_IN_MISSION_MODE(ee)) {
-		MHI_ERR("Invalid EE:%s\n", TO_MHI_EXEC_STR(ee));
+		MHI_CNTRL_ERR("Invalid EE:%s\n", TO_MHI_EXEC_STR(ee));
 		return -EIO;
 	}
 
@@ -536,7 +536,7 @@
 	/* setup sysfs nodes for userspace votes */
 	mhi_create_sysfs(mhi_cntrl);
 
-	MHI_LOG("Adding new devices\n");
+	MHI_CNTRL_LOG("Adding new devices\n");
 
 	/* add supported devices */
 	mhi_create_devices(mhi_cntrl);
@@ -547,7 +547,7 @@
 	mhi_cntrl->wake_put(mhi_cntrl, false);
 	read_unlock_bh(&mhi_cntrl->pm_lock);
 
-	MHI_LOG("Exit with ret:%d\n", ret);
+	MHI_CNTRL_LOG("Exit with ret:%d\n", ret);
 
 	return ret;
 }
@@ -564,7 +564,8 @@
 	struct mhi_sfr_info *sfr_info = mhi_cntrl->mhi_sfr;
 	int ret, i;
 
-	MHI_LOG("Enter with from pm_state:%s MHI_STATE:%s to pm_state:%s\n",
+	MHI_CNTRL_LOG(
+		"Enter with from pm_state:%s MHI_STATE:%s to pm_state:%s\n",
 		to_mhi_pm_state_str(mhi_cntrl->pm_state),
 		TO_MHI_STATE_STR(mhi_cntrl->dev_state),
 		to_mhi_pm_state_str(transition_state));
@@ -595,8 +596,8 @@
 
 	/* not handling sys_err, could be middle of shut down */
 	if (cur_state != transition_state) {
-		MHI_LOG("Failed to transition to state:0x%x from:0x%x\n",
-			transition_state, cur_state);
+		MHI_CNTRL_LOG("Failed to transition to state:0x%x from:0x%x\n",
+				transition_state, cur_state);
 		mutex_unlock(&mhi_cntrl->pm_mutex);
 		return;
 	}
@@ -605,7 +606,7 @@
 	if (MHI_REG_ACCESS_VALID(prev_state)) {
 		unsigned long timeout = msecs_to_jiffies(mhi_cntrl->timeout_ms);
 
-		MHI_LOG("Trigger device into MHI_RESET\n");
+		MHI_CNTRL_LOG("Trigger device into MHI_RESET\n");
 
 		write_lock_irq(&mhi_cntrl->pm_lock);
 		mhi_set_mhi_state(mhi_cntrl, MHI_STATE_RESET);
@@ -631,7 +632,8 @@
 		mhi_cntrl->initiate_mhi_reset = false;
 	}
 
-	MHI_LOG("Waiting for all pending event ring processing to complete\n");
+	MHI_CNTRL_LOG(
+		"Waiting for all pending event ring processing to complete\n");
 	mhi_event = mhi_cntrl->mhi_event;
 	for (i = 0; i < mhi_cntrl->total_ev_rings; i++, mhi_event++) {
 		if (!mhi_event->request_irq)
@@ -641,7 +643,7 @@
 
 	mutex_unlock(&mhi_cntrl->pm_mutex);
 
-	MHI_LOG("Reset all active channels and remove mhi devices\n");
+	MHI_CNTRL_LOG("Reset all active channels and remove mhi devices\n");
 	device_for_each_child(mhi_cntrl->dev, NULL, mhi_destroy_device);
 
 	MHI_LOG("Finish resetting channels\n");
@@ -649,7 +651,7 @@
 	/* remove support for userspace votes */
 	mhi_destroy_sysfs(mhi_cntrl);
 
-	MHI_LOG("Waiting for all pending threads to complete\n");
+	MHI_CNTRL_LOG("Waiting for all pending threads to complete\n");
 	wake_up_all(&mhi_cntrl->state_event);
 	flush_work(&mhi_cntrl->special_work);
 
@@ -665,7 +667,7 @@
 	MHI_ASSERT(atomic_read(&mhi_cntrl->pending_pkts), "pending_pkts != 0");
 
 	/* reset the ev rings and cmd rings */
-	MHI_LOG("Resetting EV CTXT and CMD CTXT\n");
+	MHI_CNTRL_LOG("Resetting EV CTXT and CMD CTXT\n");
 	mhi_cmd = mhi_cntrl->mhi_cmd;
 	cmd_ctxt = mhi_cntrl->mhi_ctxt->cmd_ctxt;
 	for (i = 0; i < NR_OF_CMD_RINGS; i++, mhi_cmd++, cmd_ctxt++) {
@@ -701,14 +703,15 @@
 		cur_state = mhi_tryset_pm_state(mhi_cntrl, MHI_PM_DISABLE);
 		write_unlock_irq(&mhi_cntrl->pm_lock);
 		if (unlikely(cur_state != MHI_PM_DISABLE))
-			MHI_ERR("Error moving from pm state:%s to state:%s\n",
+			MHI_CNTRL_ERR(
+				"Error moving from pm state:%s to state:%s\n",
 				to_mhi_pm_state_str(cur_state),
 				to_mhi_pm_state_str(MHI_PM_DISABLE));
 	}
 
-	MHI_LOG("Exit with pm_state:%s mhi_state:%s\n",
-		to_mhi_pm_state_str(mhi_cntrl->pm_state),
-		TO_MHI_STATE_STR(mhi_cntrl->dev_state));
+	MHI_CNTRL_LOG("Exit with pm_state:%s mhi_state:%s\n",
+			to_mhi_pm_state_str(mhi_cntrl->pm_state),
+			TO_MHI_STATE_STR(mhi_cntrl->dev_state));
 
 	mutex_unlock(&mhi_cntrl->pm_mutex);
 }
@@ -719,7 +722,7 @@
 	enum MHI_PM_STATE cur_state;
 	int ret;
 
-	MHI_LOG("Trigger MHI Reset\n");
+	MHI_CNTRL_LOG("Trigger MHI Reset\n");
 
 	/* exit lpm first */
 	mhi_cntrl->runtime_get(mhi_cntrl, mhi_cntrl->priv_data);
@@ -731,7 +734,8 @@
 				 msecs_to_jiffies(mhi_cntrl->timeout_ms));
 
 	if (!ret || MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state)) {
-		MHI_ERR("Did not enter M0 state, cur_state:%s pm_state:%s\n",
+		MHI_CNTRL_ERR(
+			"Did not enter M0 state, cur_state:%s pm_state:%s\n",
 			TO_MHI_STATE_STR(mhi_cntrl->dev_state),
 			to_mhi_pm_state_str(mhi_cntrl->pm_state));
 		return -EIO;
@@ -832,7 +836,8 @@
 	 * instead we will jump directly to rddm state
 	 */
 	if (mhi_cntrl->rddm_image) {
-		MHI_LOG("Controller supports RDDM, skipping SYS_ERR_PROCESS\n");
+		MHI_CNTRL_LOG(
+			"Controller supports RDDM, skipping SYS_ERR_PROCESS\n");
 		return;
 	}
 
@@ -856,8 +861,8 @@
 
 	list_for_each_entry_safe(itr, tmp, &head, node) {
 		list_del(&itr->node);
-		MHI_LOG("Transition to state:%s\n",
-			TO_MHI_STATE_TRANS_STR(itr->state));
+		MHI_CNTRL_LOG("Transition to state:%s\n",
+				TO_MHI_STATE_TRANS_STR(itr->state));
 
 		switch (itr->state) {
 		case MHI_ST_TRANSITION_PBL:
@@ -894,7 +899,7 @@
 	enum MHI_ST_TRANSITION next_state;
 	struct mhi_device *mhi_dev = mhi_cntrl->mhi_dev;
 
-	MHI_LOG("Requested to power on\n");
+	MHI_CNTRL_LOG("Requested to power on\n");
 
 	if (mhi_cntrl->msi_allocated < mhi_cntrl->total_ev_rings)
 		return -EINVAL;
@@ -919,14 +924,14 @@
 		/* setup device context */
 		ret = mhi_init_dev_ctxt(mhi_cntrl);
 		if (ret) {
-			MHI_ERR("Error setting dev_context\n");
+			MHI_CNTRL_ERR("Error setting dev_context\n");
 			goto error_dev_ctxt;
 		}
 	}
 
 	ret = mhi_init_irq_setup(mhi_cntrl);
 	if (ret) {
-		MHI_ERR("Error setting up irq\n");
+		MHI_CNTRL_ERR("Error setting up irq\n");
 		goto error_setup_irq;
 	}
 
@@ -946,7 +951,7 @@
 		ret = mhi_read_reg(mhi_cntrl, mhi_cntrl->regs, BHIEOFF, &val);
 		if (ret) {
 			write_unlock_irq(&mhi_cntrl->pm_lock);
-			MHI_ERR("Error getting bhie offset\n");
+			MHI_CNTRL_ERR("Error getting bhie offset\n");
 			goto error_bhi_offset;
 		}
 
@@ -962,7 +967,8 @@
 
 	/* confirm device is in valid exec env */
 	if (!MHI_IN_PBL(current_ee) && current_ee != MHI_EE_AMSS) {
-		MHI_ERR("Not a valid ee for power on\n");
+		MHI_CNTRL_ERR("Not a valid EE for power on:%s\n",
+				TO_MHI_EXEC_STR(current_ee));
 		ret = -EIO;
 		goto error_bhi_offset;
 	}
@@ -977,7 +983,7 @@
 
 	mutex_unlock(&mhi_cntrl->pm_mutex);
 
-	MHI_LOG("Power on setup success\n");
+	MHI_CNTRL_LOG("Power on setup success\n");
 
 	return 0;
 
@@ -1002,15 +1008,15 @@
 	enum MHI_PM_STATE cur_state, transition_state;
 	struct mhi_sfr_info *sfr_info = mhi_cntrl->mhi_sfr;
 
-	MHI_LOG("Enter with pm_state:%s MHI_STATE:%s\n",
-		to_mhi_pm_state_str(mhi_cntrl->pm_state),
-		TO_MHI_STATE_STR(mhi_cntrl->dev_state));
+	MHI_CNTRL_LOG("Enter with pm_state:%s MHI_STATE:%s\n",
+			to_mhi_pm_state_str(mhi_cntrl->pm_state),
+			TO_MHI_STATE_STR(mhi_cntrl->dev_state));
 
 	/* copy subsystem failure reason string if supported */
 	if (sfr_info && sfr_info->buf_addr) {
 		memcpy(sfr_info->str, sfr_info->buf_addr, sfr_info->len);
-		pr_err("mhi: %s sfr: %s\n", mhi_cntrl->name,
-		       sfr_info->buf_addr);
+		MHI_CNTRL_ERR("mhi:%s sfr: %s\n", mhi_cntrl->name,
+				sfr_info->buf_addr);
 	}
 
 	/* link is not down if device is in RDDM */
@@ -1023,9 +1029,9 @@
 
 	/* proceed if we move to device error or are already in error state */
 	if (!MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state)) {
-		MHI_ERR("Failed to transition to state:%s from:%s\n",
-			to_mhi_pm_state_str(transition_state),
-			to_mhi_pm_state_str(cur_state));
+		MHI_CNTRL_ERR("Failed to transition to state:%s from:%s\n",
+				to_mhi_pm_state_str(transition_state),
+				to_mhi_pm_state_str(cur_state));
 		goto exit_control_error;
 	}
 
@@ -1038,9 +1044,9 @@
 	device_for_each_child(mhi_cntrl->dev, NULL, mhi_early_notify_device);
 
 exit_control_error:
-	MHI_LOG("Exit with pm_state:%s MHI_STATE:%s\n",
-		to_mhi_pm_state_str(mhi_cntrl->pm_state),
-		TO_MHI_STATE_STR(mhi_cntrl->dev_state));
+	MHI_CNTRL_LOG("Exit with pm_state:%s MHI_STATE:%s\n",
+			to_mhi_pm_state_str(mhi_cntrl->pm_state),
+			TO_MHI_STATE_STR(mhi_cntrl->dev_state));
 }
 EXPORT_SYMBOL(mhi_control_error);
 
@@ -1058,7 +1064,7 @@
 		cur_state = mhi_tryset_pm_state(mhi_cntrl,
 						MHI_PM_LD_ERR_FATAL_DETECT);
 		if (cur_state != MHI_PM_LD_ERR_FATAL_DETECT)
-			MHI_ERR("Failed to move to state:%s from:%s\n",
+			MHI_CNTRL_ERR("Failed to move to state:%s from:%s\n",
 				to_mhi_pm_state_str(MHI_PM_LD_ERR_FATAL_DETECT),
 				to_mhi_pm_state_str(mhi_cntrl->pm_state));
 		transition_state = MHI_PM_SHUTDOWN_NO_ACCESS;
@@ -1069,7 +1075,7 @@
 
 	mhi_queue_disable_transition(mhi_cntrl, transition_state);
 
-	MHI_LOG("Wait for shutdown to complete\n");
+	MHI_CNTRL_LOG("Wait for shutdown to complete\n");
 	flush_work(&mhi_cntrl->st_worker);
 
 	mhi_deinit_debugfs(mhi_cntrl);
@@ -1405,6 +1411,9 @@
 	 */
 	mhi_special_events_pending(mhi_cntrl);
 
+	if (MHI_REG_ACCESS_VALID(mhi_cntrl->pm_state))
+		mhi_timesync_log(mhi_cntrl);
+
 	return 0;
 }
 
@@ -1496,6 +1505,9 @@
 	/* schedules worker if any special purpose events need to be handled */
 	mhi_special_events_pending(mhi_cntrl);
 
+	if (MHI_REG_ACCESS_VALID(mhi_cntrl->pm_state))
+		mhi_timesync_log(mhi_cntrl);
+
 	MHI_LOG("Exit with pm_state:%s dev_state:%s\n",
 		to_mhi_pm_state_str(mhi_cntrl->pm_state),
 		TO_MHI_STATE_STR(mhi_cntrl->dev_state));
@@ -1508,11 +1520,17 @@
 	int ret;
 
 	read_lock_bh(&mhi_cntrl->pm_lock);
+	if (MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state)) {
+		read_unlock_bh(&mhi_cntrl->pm_lock);
+		return -EIO;
+	}
+
 	mhi_cntrl->wake_get(mhi_cntrl, true);
-	if (MHI_PM_IN_SUSPEND_STATE(mhi_cntrl->pm_state))
-		mhi_trigger_resume(mhi_cntrl);
 	read_unlock_bh(&mhi_cntrl->pm_lock);
 
+	pm_wakeup_hard_event(&mhi_cntrl->mhi_dev->dev);
+	mhi_cntrl->runtime_get(mhi_cntrl, mhi_cntrl->priv_data);
+
 	mhi_force_reg_write(mhi_cntrl);
 
 	ret = wait_event_timeout(mhi_cntrl->state_event,
@@ -1527,9 +1545,11 @@
 		read_lock_bh(&mhi_cntrl->pm_lock);
 		mhi_cntrl->wake_put(mhi_cntrl, false);
 		read_unlock_bh(&mhi_cntrl->pm_lock);
+		mhi_cntrl->runtime_put(mhi_cntrl, mhi_cntrl->priv_data);
 		return -EIO;
 	}
 
+	mhi_cntrl->runtime_put(mhi_cntrl, mhi_cntrl->priv_data);
 	return 0;
 }
 
@@ -1590,9 +1610,7 @@
 	if (vote & MHI_VOTE_DEVICE) {
 		atomic_dec(&mhi_dev->dev_vote);
 		read_lock_bh(&mhi_cntrl->pm_lock);
-		if (MHI_PM_IN_SUSPEND_STATE(mhi_cntrl->pm_state))
-			mhi_trigger_resume(mhi_cntrl);
-
+		mhi_trigger_resume(mhi_cntrl);
 		mhi_cntrl->wake_put(mhi_cntrl, false);
 		MHI_LOG("dev_wake %d\n", atomic_read(&mhi_cntrl->dev_wake));
 		read_unlock_bh(&mhi_cntrl->pm_lock);
@@ -1617,27 +1635,27 @@
 {
 	int ret;
 
-	MHI_LOG("Enter with pm_state:%s ee:%s\n",
-		to_mhi_pm_state_str(mhi_cntrl->pm_state),
-		TO_MHI_EXEC_STR(mhi_cntrl->ee));
+	MHI_CNTRL_LOG("Enter with pm_state:%s ee:%s\n",
+			to_mhi_pm_state_str(mhi_cntrl->pm_state),
+			TO_MHI_EXEC_STR(mhi_cntrl->ee));
 
 	/* device already in rddm */
 	if (mhi_cntrl->ee == MHI_EE_RDDM)
 		return 0;
 
-	MHI_LOG("Triggering SYS_ERR to force rddm state\n");
+	MHI_CNTRL_LOG("Triggering SYS_ERR to force rddm state\n");
 	mhi_set_mhi_state(mhi_cntrl, MHI_STATE_SYS_ERR);
 
 	/* wait for rddm event */
-	MHI_LOG("Waiting for device to enter RDDM state\n");
+	MHI_CNTRL_LOG("Waiting for device to enter RDDM state\n");
 	ret = wait_event_timeout(mhi_cntrl->state_event,
 				 mhi_cntrl->ee == MHI_EE_RDDM,
 				 msecs_to_jiffies(mhi_cntrl->timeout_ms));
 	ret = ret ? 0 : -EIO;
 
-	MHI_LOG("Exiting with pm_state:%s ee:%s ret:%d\n",
-		to_mhi_pm_state_str(mhi_cntrl->pm_state),
-		TO_MHI_EXEC_STR(mhi_cntrl->ee), ret);
+	MHI_CNTRL_LOG("Exiting with pm_state:%s ee:%s ret:%d\n",
+			to_mhi_pm_state_str(mhi_cntrl->pm_state),
+			TO_MHI_EXEC_STR(mhi_cntrl->ee), ret);
 
 	return ret;
 }
diff --git a/drivers/bus/mhi/devices/mhi_netdev.c b/drivers/bus/mhi/devices/mhi_netdev.c
index cd26e55..e99724f 100644
--- a/drivers/bus/mhi/devices/mhi_netdev.c
+++ b/drivers/bus/mhi/devices/mhi_netdev.c
@@ -917,7 +917,7 @@
 
 #else
 
-static void mhi_netdev_create_debugfs(struct mhi_netdev_private *mhi_netdev)
+static void mhi_netdev_create_debugfs(struct mhi_netdev *mhi_netdev)
 {
 }
 
diff --git a/drivers/char/adsprpc.c b/drivers/char/adsprpc.c
index ac55873..97369b1 100644
--- a/drivers/char/adsprpc.c
+++ b/drivers/char/adsprpc.c
@@ -1070,6 +1070,10 @@
 		}
 		trace_fastrpc_dma_map(fl->cid, fd, map->phys, map->size,
 			len, mflags, map->attach->dma_map_attrs);
+		if (map->size < len) {
+			err = -EFAULT;
+			goto bail;
+		}
 
 		vmid = fl->apps->channel[fl->cid].vmid;
 		if (!sess->smmu.enabled && !vmid) {
@@ -1270,8 +1274,10 @@
 			if (ctx->overps[i]->end > max.end) {
 				max.end = ctx->overps[i]->end;
 			} else {
-				if (max.raix + 1 <= inbufs &&
-				ctx->overps[i]->raix + 1 > inbufs)
+				if ((max.raix < inbufs &&
+					ctx->overps[i]->raix + 1 > inbufs) ||
+					(ctx->overps[i]->raix < inbufs &&
+					max.raix + 1 > inbufs))
 					ctx->overps[i]->do_cmo = 1;
 				ctx->overps[i]->mend = 0;
 				ctx->overps[i]->mstart = 0;
@@ -1865,37 +1871,54 @@
 		if (rpra && rpra[i].buf.len && (ctx->overps[oix]->mstart ||
 		ctx->overps[oix]->do_cmo == 1)) {
 			if (map && map->buf) {
-				if (((buf_page_size(ctx->overps[oix]->mend -
-				ctx->overps[oix]->mstart)) == map->size) ||
-				ctx->overps[oix]->do_cmo) {
+				if ((buf_page_size(ctx->overps[oix]->mend -
+				ctx->overps[oix]->mstart)) == map->size) {
 					dma_buf_begin_cpu_access(map->buf,
 						DMA_TO_DEVICE);
 					dma_buf_end_cpu_access(map->buf,
 						DMA_TO_DEVICE);
+					pr_debug("Debug: adsprpc: %s: %s: sc 0x%x pv 0x%llx, mend 0x%llx mstart 0x%llx, len %zu size %zu\n",
+					current->comm, __func__, sc,
+					rpra[i].buf.pv, ctx->overps[oix]->mend,
+					ctx->overps[oix]->mstart,
+					rpra[i].buf.len, map->size);
 				} else {
 					uintptr_t offset;
+					uint64_t flush_len;
 					struct vm_area_struct *vma;
 
 					down_read(&current->mm->mmap_sem);
 					VERIFY(err, NULL != (vma = find_vma(
-						current->mm,
-						ctx->overps[oix]->mstart)));
+						current->mm, rpra[i].buf.pv)));
 					if (err) {
 						up_read(&current->mm->mmap_sem);
 						goto bail;
 					}
-					offset = buf_page_start(
-						rpra[i].buf.pv) -
-						vma->vm_start;
+					if (ctx->overps[oix]->do_cmo) {
+						offset = rpra[i].buf.pv -
+								vma->vm_start;
+						flush_len = rpra[i].buf.len;
+					} else {
+						offset =
+						ctx->overps[oix]->mstart
+						- vma->vm_start;
+						flush_len =
+						ctx->overps[oix]->mend -
+						ctx->overps[oix]->mstart;
+					}
 					up_read(&current->mm->mmap_sem);
 					dma_buf_begin_cpu_access_partial(
 						map->buf, DMA_TO_DEVICE, offset,
-						ctx->overps[oix]->mend -
-						ctx->overps[oix]->mstart);
+						flush_len);
 					dma_buf_end_cpu_access_partial(
 						map->buf, DMA_TO_DEVICE, offset,
-						ctx->overps[oix]->mend -
-						ctx->overps[oix]->mstart);
+						flush_len);
+					pr_debug("Debug: adsprpc: %s: %s: sc 0x%x vm_start 0x%llx pv 0x%llx, offset 0x%llx, mend 0x%llx mstart 0x%llx, len %zu size %zu\n",
+					current->comm, __func__, sc,
+					vma->vm_start, rpra[i].buf.pv, offset,
+					ctx->overps[oix]->mend,
+					ctx->overps[oix]->mstart,
+					rpra[i].buf.len, map->size);
 				}
 			} else
 				dmac_flush_range(uint64_to_ptr(rpra[i].buf.pv),
@@ -2007,37 +2030,55 @@
 		}
 		if (ctx->overps[i]->mstart || ctx->overps[i]->do_cmo == 1) {
 			if (map && map->buf) {
-				if (((buf_page_size(ctx->overps[i]->mend -
-				ctx->overps[i]->mstart)) == map->size) ||
-				ctx->overps[i]->do_cmo) {
+				if ((buf_page_size(ctx->overps[i]->mend -
+				ctx->overps[i]->mstart)) == map->size) {
 					dma_buf_begin_cpu_access(map->buf,
 						DMA_TO_DEVICE);
 					dma_buf_end_cpu_access(map->buf,
 						DMA_FROM_DEVICE);
+					pr_debug("Debug: adsprpc: %s: %s: sc 0x%x pv 0x%llx, mend 0x%llx mstart 0x%llx, len %zu size %zu\n",
+					current->comm, __func__, sc,
+					rpra[over].buf.pv, ctx->overps[i]->mend,
+					ctx->overps[i]->mstart,
+					rpra[over].buf.len, map->size);
 				} else {
 					uintptr_t offset;
+					uint64_t inv_len;
 					struct vm_area_struct *vma;
 
 					down_read(&current->mm->mmap_sem);
 					VERIFY(err, NULL != (vma = find_vma(
 						current->mm,
-						ctx->overps[i]->mstart)));
+						rpra[over].buf.pv)));
 					if (err) {
 						up_read(&current->mm->mmap_sem);
 						goto bail;
 					}
-					offset = buf_page_start(
-						rpra[over].buf.pv) -
-						vma->vm_start;
+					if (ctx->overps[i]->do_cmo) {
+						offset = rpra[over].buf.pv -
+								vma->vm_start;
+						inv_len = rpra[over].buf.len;
+					} else {
+						offset =
+							ctx->overps[i]->mstart -
+							vma->vm_start;
+						inv_len =
+							ctx->overps[i]->mend -
+							ctx->overps[i]->mstart;
+					}
 					up_read(&current->mm->mmap_sem);
 					dma_buf_begin_cpu_access_partial(
 						map->buf, DMA_TO_DEVICE, offset,
-						ctx->overps[i]->mend -
-						ctx->overps[i]->mstart);
+						inv_len);
 					dma_buf_end_cpu_access_partial(map->buf,
 						DMA_FROM_DEVICE, offset,
-						ctx->overps[i]->mend -
-						ctx->overps[i]->mstart);
+						inv_len);
+					pr_debug("Debug: adsprpc: %s: %s: sc 0x%x vm_start 0x%llx pv 0x%llx, offset 0x%llx, mend 0x%llx mstart 0x%llx, len %zu size %zu\n",
+					current->comm, __func__, sc,
+					vma->vm_start, rpra[over].buf.pv,
+					offset, ctx->overps[i]->mend,
+					ctx->overps[i]->mstart,
+					rpra[over].buf.len, map->size);
 			}
 		} else
 			dmac_inv_range((char *)uint64_to_ptr(rpra[over].buf.pv),
@@ -2855,6 +2896,41 @@
 	return err;
 }
 
+static int fastrpc_unmap_on_dsp(struct fastrpc_file *fl,
+		uintptr_t raddr, uint64_t phys, size_t size, uint32_t flags)
+{
+	struct fastrpc_ioctl_invoke_crc ioctl;
+	remote_arg_t ra[1] = {};
+	int err = 0;
+	struct {
+		int pid;
+		uintptr_t vaddrout;
+		size_t size;
+	} inargs;
+
+	inargs.pid = fl->tgid;
+	inargs.size = size;
+	inargs.vaddrout = raddr;
+	ra[0].buf.pv = (void *)&inargs;
+	ra[0].buf.len = sizeof(inargs);
+
+	ioctl.inv.handle = FASTRPC_STATIC_HANDLE_PROCESS_GROUP;
+	if (fl->apps->compat)
+		ioctl.inv.sc = REMOTE_SCALARS_MAKE(5, 1, 0);
+	else
+		ioctl.inv.sc = REMOTE_SCALARS_MAKE(3, 1, 0);
+	ioctl.inv.pra = ra;
+	ioctl.fds = NULL;
+	ioctl.attrs = NULL;
+	ioctl.crc = NULL;
+	VERIFY(err, 0 == (err = fastrpc_internal_invoke(fl,
+		FASTRPC_MODE_PARALLEL, 1, &ioctl)));
+	if (err)
+		goto bail;
+bail:
+	return err;
+}
+
 static int fastrpc_mmap_on_dsp(struct fastrpc_file *fl, uint32_t flags,
 					uintptr_t va, uint64_t phys,
 					size_t size, uintptr_t *raddr)
@@ -2913,6 +2989,13 @@
 			pr_err("adsprpc: %s: %s: rh hyp assign failed with %d for phys 0x%llx, size %zd\n",
 					__func__, current->comm,
 					err, phys, size);
+			err = fastrpc_unmap_on_dsp(fl,
+				*raddr, phys, size, flags);
+			if (err) {
+				pr_err("adsprpc: %s: %s: failed to unmap %d for phys 0x%llx, size %zd\n",
+					__func__, current->comm,
+					err, phys, size);
+			}
 			goto bail;
 		}
 	}
@@ -2980,32 +3063,10 @@
 static int fastrpc_munmap_on_dsp(struct fastrpc_file *fl, uintptr_t raddr,
 				uint64_t phys, size_t size, uint32_t flags)
 {
-	struct fastrpc_ioctl_invoke_crc ioctl;
-	remote_arg_t ra[1];
 	int err = 0;
-	struct {
-		int pid;
-		uintptr_t vaddrout;
-		size_t size;
-	} inargs;
 
-	inargs.pid = fl->tgid;
-	inargs.size = size;
-	inargs.vaddrout = raddr;
-	ra[0].buf.pv = (void *)&inargs;
-	ra[0].buf.len = sizeof(inargs);
-
-	ioctl.inv.handle = FASTRPC_STATIC_HANDLE_PROCESS_GROUP;
-	if (fl->apps->compat)
-		ioctl.inv.sc = REMOTE_SCALARS_MAKE(5, 1, 0);
-	else
-		ioctl.inv.sc = REMOTE_SCALARS_MAKE(3, 1, 0);
-	ioctl.inv.pra = ra;
-	ioctl.fds = NULL;
-	ioctl.attrs = NULL;
-	ioctl.crc = NULL;
-	VERIFY(err, 0 == (err = fastrpc_internal_invoke(fl,
-		FASTRPC_MODE_PARALLEL, 1, &ioctl)));
+	VERIFY(err, 0 == (err = fastrpc_unmap_on_dsp(fl, raddr, phys,
+						size, flags)));
 	if (err)
 		goto bail;
 	if (flags == ADSP_MMAP_HEAP_ADDR ||
@@ -3426,10 +3487,9 @@
 	struct smq_invoke_rspv2 *rspv2 = NULL;
 	struct fastrpc_apps *me = &gfa;
 	uint32_t index, rspFlags = 0, earlyWakeTime = 0;
-	int err = 0, cid;
-	struct fastrpc_channel_ctx *chan = 0;
+	int err = 0, cid = -1;
+	struct fastrpc_channel_ctx *chan = NULL;
 	unsigned long irq_flags = 0;
-	bool is_ctxtable_locked = false;
 
 	cid = get_cid_from_rpdev(rpdev);
 	VERIFY(err, (cid >= ADSP_DOMAIN_ID && cid <= NUM_CHANNELS));
@@ -3463,31 +3523,28 @@
 	if (err)
 		goto bail;
 
-	if (rspFlags == COMPLETE_SIGNAL) {
-		spin_lock_irqsave(&chan->ctxlock, irq_flags);
-		is_ctxtable_locked = true;
-	}
+	spin_lock_irqsave(&chan->ctxlock, irq_flags);
 	VERIFY(err, !IS_ERR_OR_NULL(chan->ctxtable[index]));
 	if (err)
-		goto bail;
+		goto bail_unlock;
 
 	VERIFY(err, ((chan->ctxtable[index]->ctxid ==
 		(rsp->ctx & ~CONTEXT_PD_CHECK)) &&
 			chan->ctxtable[index]->magic ==
 				FASTRPC_CTX_MAGIC));
 	if (err)
-		goto bail;
+		goto bail_unlock;
 
 	if (rspv2) {
 		VERIFY(err, rspv2->version == FASTRPC_RSP_VERSION2);
 		if (err)
-			goto bail;
+			goto bail_unlock;
 	}
 	context_notify_user(chan->ctxtable[index], rsp->retval,
 				 rspFlags, earlyWakeTime);
+bail_unlock:
+	spin_unlock_irqrestore(&chan->ctxlock, irq_flags);
 bail:
-	if (rspFlags == COMPLETE_SIGNAL && is_ctxtable_locked)
-		spin_unlock_irqrestore(&chan->ctxlock, irq_flags);
 	if (err)
 		pr_err("adsprpc: ERROR: %s: invalid response (data %pK, len %d) from remote subsystem (err %d)\n",
 				__func__, data, len, err);
@@ -4061,6 +4118,9 @@
 			fl->ws_timeout = cp->pm.timeout;
 		fastrpc_pm_awake(fl);
 		break;
+	case FASTRPC_CONTROL_DSPPROCESS_CLEAN:
+		(void)fastrpc_release_current_dsp_process(fl);
+		break;
 	default:
 		err = -EBADRQC;
 		break;
diff --git a/drivers/char/adsprpc_shared.h b/drivers/char/adsprpc_shared.h
index bcc63c8..7501b1c 100644
--- a/drivers/char/adsprpc_shared.h
+++ b/drivers/char/adsprpc_shared.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0 */
 /*
- * Copyright (c) 2012-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved.
  */
 #ifndef ADSPRPC_SHARED_H
 #define ADSPRPC_SHARED_H
@@ -250,6 +250,8 @@
 	FASTRPC_CONTROL_KALLOC		=	3,
 	FASTRPC_CONTROL_WAKELOCK	=	4,
 	FASTRPC_CONTROL_PM		=	5,
+/* Clean process on DSP */
+	FASTRPC_CONTROL_DSPPROCESS_CLEAN	=	6,
 };
 
 struct fastrpc_ctrl_latency {
diff --git a/drivers/char/diag/diag_dci.c b/drivers/char/diag/diag_dci.c
index 2ae87eb..e2c3344 100644
--- a/drivers/char/diag/diag_dci.c
+++ b/drivers/char/diag/diag_dci.c
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: GPL-2.0-only
-/* Copyright (c) 2012-2019, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2012-2020, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/slab.h>
@@ -3145,6 +3145,7 @@
 		kfree(new_entry);
 		new_entry = NULL;
 	}
+	put_task_struct(current);
 	mutex_unlock(&driver->dci_mutex);
 	return DIAG_DCI_NO_REG;
 }
diff --git a/drivers/char/diag/diag_masks.c b/drivers/char/diag/diag_masks.c
index 088e449..019e203 100644
--- a/drivers/char/diag/diag_masks.c
+++ b/drivers/char/diag/diag_masks.c
@@ -893,7 +893,7 @@
 		if (src_len < sizeof(struct diag_build_mask_req_sub_t))
 			goto fail;
 		req_sub = (struct diag_build_mask_req_sub_t *)src_buf;
-		rsp_sub.header.cmd_code = DIAG_CMD_MSG_CONFIG;
+		rsp_sub.header.cmd_code = req_sub->header.cmd_code;
 		rsp_sub.sub_cmd = DIAG_CMD_OP_GET_BUILD_MASK;
 		rsp_sub.ssid_first = req_sub->ssid_first;
 		rsp_sub.ssid_last = req_sub->ssid_last;
diff --git a/drivers/char/diag/diag_memorydevice.c b/drivers/char/diag/diag_memorydevice.c
index 6177f2b..90830b5 100644
--- a/drivers/char/diag/diag_memorydevice.c
+++ b/drivers/char/diag/diag_memorydevice.c
@@ -406,26 +406,38 @@
 
 			task_s = get_pid_task(pid_struct, PIDTYPE_PID);
 			if (task_s) {
-
-				/* Copy the length of data being passed */
-				err = copy_to_user(buf + ret,
-						(void *)&(entry->len),
-						sizeof(int));
-				if (err) {
-					put_task_struct(task_s);
-					goto drop_data;
+				spin_lock_irqsave(&ch->lock, flags);
+				entry = &ch->tbl[j];
+				if (entry->len <= 0 || entry->buf == NULL) {
+					spin_unlock_irqrestore(&ch->lock,
+						flags);
+					continue;
 				}
-				ret += sizeof(int);
+				spin_unlock_irqrestore(&ch->lock,
+						flags);
+				/* Copy the length of data being passed */
+				if (entry->len) {
+					err = copy_to_user(buf + ret,
+							(void *)&(entry->len),
+							sizeof(int));
+					if (err) {
+						put_task_struct(task_s);
+						goto drop_data;
+					}
+					ret += sizeof(int);
+				}
 
 				/* Copy the actual data being passed */
-				err = copy_to_user(buf + ret,
-						(void *)entry->buf,
-						entry->len);
-				if (err) {
-					put_task_struct(task_s);
-					goto drop_data;
+				if (entry->buf) {
+					err = copy_to_user(buf + ret,
+							(void *)entry->buf,
+							entry->len);
+					if (err) {
+						put_task_struct(task_s);
+						goto drop_data;
+					}
+					ret += entry->len;
 				}
-				ret += entry->len;
 				put_task_struct(task_s);
 			}
 
@@ -437,6 +449,11 @@
 			num_data++;
 drop_data:
 			spin_lock_irqsave(&ch->lock, flags);
+			entry = &ch->tbl[j];
+			if (entry->len <= 0 || entry->buf == NULL) {
+				spin_unlock_irqrestore(&ch->lock, flags);
+				continue;
+			}
 			if (ch->ops && ch->ops->write_done)
 				ch->ops->write_done(entry->buf, entry->len,
 						    entry->ctx,
diff --git a/drivers/char/diag/diagchar_core.c b/drivers/char/diag/diagchar_core.c
index 6638358..d5b56fd 100644
--- a/drivers/char/diag/diagchar_core.c
+++ b/drivers/char/diag/diagchar_core.c
@@ -2063,6 +2063,9 @@
 	if (!(driver->data_ready[i] & DEINIT_TYPE)) {
 		driver->data_ready[i] |= DEINIT_TYPE;
 		atomic_inc(&driver->data_ready_notif[i]);
+		DIAG_LOG(DIAG_DEBUG_USERSPACE,
+			"Setting DEINIT_TYPE for pid: %d\n",
+			current->tgid);
 	}
 	mutex_unlock(&driver->diagchar_mutex);
 	wake_up_interruptible(&driver->wait_q);
@@ -3757,6 +3760,9 @@
 		COPY_USER_SPACE_OR_ERR(buf, data_type, 4);
 		if (ret == -EFAULT)
 			goto exit;
+		DIAG_LOG(DIAG_DEBUG_USERSPACE,
+			"Copied DEINIT_TYPE pkt current->tgid: %d\n",
+			current->tgid);
 		driver->data_ready[index] ^= DEINIT_TYPE;
 		atomic_dec(&driver->data_ready_notif[index]);
 		mutex_unlock(&driver->diagchar_mutex);
diff --git a/drivers/char/diag/diagfwd_socket.h b/drivers/char/diag/diagfwd_socket.h
index 1b3e900..eec1bfc 100644
--- a/drivers/char/diag/diagfwd_socket.h
+++ b/drivers/char/diag/diagfwd_socket.h
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
-/* Copyright (c) 2015-2019, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2015-2020, The Linux Foundation. All rights reserved.
  */
 
 #ifndef DIAGFWD_SOCKET_H
@@ -22,7 +22,7 @@
 	SOCKET_ADSP,
 	SOCKET_WCNSS,
 	SOCKET_SLPI,
-	SOCKET_CDSP,
+	SOCKET_CDSP = 5,
 	SOCKET_NPU,
 	SOCKET_APPS,
 	NUM_SOCKET_SUBSYSTEMS,
diff --git a/drivers/char/tpm/Kconfig b/drivers/char/tpm/Kconfig
index 18c81cb..4819874 100644
--- a/drivers/char/tpm/Kconfig
+++ b/drivers/char/tpm/Kconfig
@@ -157,7 +157,6 @@
 config TCG_VTPM_PROXY
 	tristate "VTPM Proxy Interface"
 	depends on TCG_TPM
-	select ANON_INODES
 	---help---
 	  This driver proxies for an emulated TPM (vTPM) running in userspace.
 	  A device /dev/vtpmx is provided that creates a device pair
diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
index be04521..c372a24 100644
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -82,6 +82,8 @@
 	struct clk_core		*new_child;
 	unsigned long		flags;
 	bool			orphan;
+	bool			need_sync;
+	bool			boot_enabled;
 	unsigned int		enable_count;
 	unsigned int		prepare_count;
 	unsigned int		protect_count;
@@ -1282,6 +1284,10 @@
 	hlist_for_each_entry(child, &core->children, child_node)
 		clk_unprepare_unused_subtree(child);
 
+	if (dev_has_sync_state(core->dev) &&
+	    !(core->flags & CLK_DONT_HOLD_STATE))
+		return;
+
 	/*
 	 * setting CLK_ENABLE_HAND_OFF flag triggers this conditional
 	 *
@@ -1326,6 +1332,10 @@
 	hlist_for_each_entry(child, &core->children, child_node)
 		clk_disable_unused_subtree(child);
 
+	if (dev_has_sync_state(core->dev) &&
+	    !(core->flags & CLK_DONT_HOLD_STATE))
+		return;
+
 	/*
 	 * setting CLK_ENABLE_HAND_OFF flag triggers this conditional
 	 *
@@ -1425,6 +1435,38 @@
 }
 late_initcall_sync(clk_disable_unused);
 
+static void clk_unprepare_disable_dev_subtree(struct clk_core *core,
+					      struct device *dev)
+{
+	struct clk_core *child;
+
+	lockdep_assert_held(&prepare_lock);
+
+	hlist_for_each_entry(child, &core->children, child_node)
+		clk_unprepare_disable_dev_subtree(child, dev);
+
+	if (core->dev != dev || !core->need_sync)
+		return;
+
+	clk_core_disable_unprepare(core);
+}
+
+void clk_sync_state(struct device *dev)
+{
+	struct clk_core *core;
+
+	clk_prepare_lock();
+
+	hlist_for_each_entry(core, &clk_root_list, child_node)
+		clk_unprepare_disable_dev_subtree(core, dev);
+
+	hlist_for_each_entry(core, &clk_orphan_list, child_node)
+		clk_unprepare_disable_dev_subtree(core, dev);
+
+	clk_prepare_unlock();
+}
+EXPORT_SYMBOL_GPL(clk_sync_state);
+
 static int clk_core_determine_round_nolock(struct clk_core *core,
 					   struct clk_rate_request *req)
 {
@@ -1774,6 +1816,33 @@
 	return -EINVAL;
 }
 
+static void clk_core_hold_state(struct clk_core *core)
+{
+	if (core->need_sync || !core->boot_enabled)
+		return;
+
+	if (core->orphan || !dev_has_sync_state(core->dev))
+		return;
+
+	if (core->flags & CLK_DONT_HOLD_STATE)
+		return;
+
+	core->need_sync = !clk_core_prepare_enable(core);
+}
+
+static void __clk_core_update_orphan_hold_state(struct clk_core *core)
+{
+	struct clk_core *child;
+
+	if (core->orphan)
+		return;
+
+	clk_core_hold_state(core);
+
+	hlist_for_each_entry(child, &core->children, child_node)
+		__clk_core_update_orphan_hold_state(child);
+}
+
 /*
  * Update the orphan status of @core and all its children.
  */
@@ -3949,6 +4018,14 @@
 static inline void clk_debug_unregister(struct clk_core *core)
 {
 }
+
+void clk_debug_print_hw(struct clk_core *clk, struct seq_file *f)
+{
+}
+
+void clock_debug_print_enabled(void)
+{
+}
 #endif
 
 /**
@@ -4100,6 +4177,8 @@
 		rate = 0;
 	core->rate = core->req_rate = rate;
 
+	core->boot_enabled = clk_core_is_enabled(core);
+
 	/*
 	 * Enable CLK_IS_CRITICAL clocks so newly added critical clocks
 	 * don't get accidentally disabled when walking the orphan tree and
@@ -4115,6 +4194,8 @@
 		clk_enable_unlock(flags);
 	}
 
+	clk_core_hold_state(core);
+
 	/*
 	 * walk the list of orphan clocks and reparent any that newly finds a
 	 * parent.
@@ -4134,6 +4215,7 @@
 			__clk_set_parent_after(orphan, parent, NULL);
 			__clk_recalc_accuracies(orphan);
 			__clk_recalc_rates(orphan, 0);
+			__clk_core_update_orphan_hold_state(orphan);
 		}
 	}
 
diff --git a/drivers/clk/qcom/Kconfig b/drivers/clk/qcom/Kconfig
index 0d5ed47..9a9a4d1 100644
--- a/drivers/clk/qcom/Kconfig
+++ b/drivers/clk/qcom/Kconfig
@@ -505,3 +505,39 @@
 	  LAGOON devices.
 	  Say Y if you want to support video devices and functionality such as
 	  video encode/decode.
+
+config QM_GCC_SCUBA
+	tristate "SCUBA Global Clock Controller"
+	select QCOM_GDSC
+	depends on COMMON_CLK_QCOM
+	help
+	  Support for the global clock controller on Qualcomm Technologies, Inc
+	  SCUBA devices.
+	  Say Y if you want to use peripheral devices such as UART, SPI, I2C,
+	  USB, SD/eMMC, etc.
+
+config QM_DISPCC_SCUBA
+	tristate "SCUBA Display Clock Controller"
+	select QM_GCC_SCUBA
+	help
+	  Support for the display clock controller on Qualcomm Technologies, Inc.
+	  SCUBA devices.
+	  Say Y if you want to support display devices and functionality such as
+	  splash screen.
+
+config QM_GPUCC_SCUBA
+	tristate "SCUBA Graphics Clock Controller"
+	select QM_GCC_SCUBA
+	help
+	  Support for the graphics clock controller on Qualcomm Technologies, Inc.
+	  SCUBA devices.
+	  Say Y if you want to support graphics controller devices
+	  and it's functionalities.
+
+config QM_DEBUGCC_SCUBA
+	tristate "SCUBA Debug Clock Controller"
+	depends on QM_GCC_SCUBA
+	help
+	  Support for the debug clock controller on Qualcomm Technologies, Inc
+	  SCUBA devices.
+	  Say Y if you want to support the clock measurement functionality.
diff --git a/drivers/clk/qcom/Makefile b/drivers/clk/qcom/Makefile
index 0168829..37e8f94 100644
--- a/drivers/clk/qcom/Makefile
+++ b/drivers/clk/qcom/Makefile
@@ -49,6 +49,10 @@
 obj-$(CONFIG_QCOM_CLK_RPM) += clk-rpm.o
 obj-$(CONFIG_QCOM_CLK_RPMH) += clk-rpmh.o
 obj-$(CONFIG_QCOM_CLK_SMD_RPM) += clk-smd-rpm.o
+obj-$(CONFIG_QM_DISPCC_SCUBA) += dispcc-scuba.o
+obj-$(CONFIG_QM_GCC_SCUBA) += gcc-scuba.o
+obj-$(CONFIG_QM_GPUCC_SCUBA) += gpucc-scuba.o
+obj-$(CONFIG_QM_DEBUGCC_SCUBA) += debugcc-scuba.o
 obj-$(CONFIG_SDM_CAMCC_LAGOON) += camcc-lagoon.o
 obj-$(CONFIG_SDM_DEBUGCC_LAGOON) += debugcc-lagoon.o
 obj-$(CONFIG_SDM_DISPCC_845) += dispcc-sdm845.o
diff --git a/drivers/clk/qcom/camcc-lagoon.c b/drivers/clk/qcom/camcc-lagoon.c
index 7763e48..a735541 100644
--- a/drivers/clk/qcom/camcc-lagoon.c
+++ b/drivers/clk/qcom/camcc-lagoon.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2019-2020, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/clk.h>
@@ -15,7 +15,7 @@
 #include "clk-branch.h"
 #include "clk-rcg.h"
 #include "common.h"
-#include "vdd-level-lito.h"
+#include "vdd-level-lagoon.h"
 
 static DEFINE_VDD_REGULATORS(vdd_cx, VDD_NUM, 1, vdd_corner);
 static DEFINE_VDD_REGULATORS(vdd_mx, VDD_NUM, 1, vdd_corner);
@@ -432,6 +432,7 @@
 	.hid_width = 5,
 	.parent_map = cam_cc_parent_map_0,
 	.freq_tbl = ftbl_cam_cc_cci_0_clk_src,
+	.enable_safe_config = true,
 	.clkr.hw.init = &(struct clk_init_data){
 		.name = "cam_cc_cci_0_clk_src",
 		.parent_names = cam_cc_parent_names_0,
@@ -452,6 +453,7 @@
 	.hid_width = 5,
 	.parent_map = cam_cc_parent_map_0,
 	.freq_tbl = ftbl_cam_cc_cci_0_clk_src,
+	.enable_safe_config = true,
 	.clkr.hw.init = &(struct clk_init_data){
 		.name = "cam_cc_cci_1_clk_src",
 		.parent_names = cam_cc_parent_names_0,
@@ -480,6 +482,7 @@
 	.hid_width = 5,
 	.parent_map = cam_cc_parent_map_2,
 	.freq_tbl = ftbl_cam_cc_cphy_rx_clk_src,
+	.enable_safe_config = true,
 	.clkr.hw.init = &(struct clk_init_data){
 		.name = "cam_cc_cphy_rx_clk_src",
 		.parent_names = cam_cc_parent_names_2,
@@ -505,6 +508,7 @@
 	.hid_width = 5,
 	.parent_map = cam_cc_parent_map_0,
 	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
+	.enable_safe_config = true,
 	.clkr.hw.init = &(struct clk_init_data){
 		.name = "cam_cc_csi0phytimer_clk_src",
 		.parent_names = cam_cc_parent_names_0,
@@ -523,6 +527,7 @@
 	.hid_width = 5,
 	.parent_map = cam_cc_parent_map_0,
 	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
+	.enable_safe_config = true,
 	.clkr.hw.init = &(struct clk_init_data){
 		.name = "cam_cc_csi1phytimer_clk_src",
 		.parent_names = cam_cc_parent_names_0,
@@ -541,6 +546,7 @@
 	.hid_width = 5,
 	.parent_map = cam_cc_parent_map_0,
 	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
+	.enable_safe_config = true,
 	.clkr.hw.init = &(struct clk_init_data){
 		.name = "cam_cc_csi2phytimer_clk_src",
 		.parent_names = cam_cc_parent_names_0,
@@ -559,6 +565,7 @@
 	.hid_width = 5,
 	.parent_map = cam_cc_parent_map_0,
 	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
+	.enable_safe_config = true,
 	.clkr.hw.init = &(struct clk_init_data){
 		.name = "cam_cc_csi3phytimer_clk_src",
 		.parent_names = cam_cc_parent_names_0,
@@ -585,6 +592,7 @@
 	.hid_width = 5,
 	.parent_map = cam_cc_parent_map_4,
 	.freq_tbl = ftbl_cam_cc_fast_ahb_clk_src,
+	.enable_safe_config = true,
 	.clkr.hw.init = &(struct clk_init_data){
 		.name = "cam_cc_fast_ahb_clk_src",
 		.parent_names = cam_cc_parent_names_4,
@@ -783,6 +791,7 @@
 	.hid_width = 5,
 	.parent_map = cam_cc_parent_map_6,
 	.freq_tbl = ftbl_cam_cc_ife_lite_clk_src,
+	.enable_safe_config = true,
 	.clkr.hw.init = &(struct clk_init_data){
 		.name = "cam_cc_ife_lite_clk_src",
 		.parent_names = cam_cc_parent_names_6,
@@ -927,6 +936,7 @@
 	.hid_width = 5,
 	.parent_map = cam_cc_parent_map_3,
 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
+	.enable_safe_config = true,
 	.clkr.hw.init = &(struct clk_init_data){
 		.name = "cam_cc_mclk0_clk_src",
 		.parent_names = cam_cc_parent_names_3,
@@ -945,6 +955,7 @@
 	.hid_width = 5,
 	.parent_map = cam_cc_parent_map_3,
 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
+	.enable_safe_config = true,
 	.clkr.hw.init = &(struct clk_init_data){
 		.name = "cam_cc_mclk1_clk_src",
 		.parent_names = cam_cc_parent_names_3,
@@ -963,6 +974,7 @@
 	.hid_width = 5,
 	.parent_map = cam_cc_parent_map_3,
 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
+	.enable_safe_config = true,
 	.clkr.hw.init = &(struct clk_init_data){
 		.name = "cam_cc_mclk2_clk_src",
 		.parent_names = cam_cc_parent_names_3,
@@ -981,6 +993,7 @@
 	.hid_width = 5,
 	.parent_map = cam_cc_parent_map_3,
 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
+	.enable_safe_config = true,
 	.clkr.hw.init = &(struct clk_init_data){
 		.name = "cam_cc_mclk3_clk_src",
 		.parent_names = cam_cc_parent_names_3,
@@ -999,6 +1012,7 @@
 	.hid_width = 5,
 	.parent_map = cam_cc_parent_map_3,
 	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
+	.enable_safe_config = true,
 	.clkr.hw.init = &(struct clk_init_data){
 		.name = "cam_cc_mclk4_clk_src",
 		.parent_names = cam_cc_parent_names_3,
diff --git a/drivers/clk/qcom/clk-alpha-pll.c b/drivers/clk/qcom/clk-alpha-pll.c
index b3ef447..cef64f9 100644
--- a/drivers/clk/qcom/clk-alpha-pll.c
+++ b/drivers/clk/qcom/clk-alpha-pll.c
@@ -699,6 +699,67 @@
 	return clamp(rate, min_freq, max_freq);
 }
 
+void clk_huayra_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap,
+				const struct alpha_pll_config *config)
+{
+	if (config->config_ctl_val)
+		regmap_write(regmap, PLL_CONFIG_CTL(pll),
+				config->config_ctl_val);
+
+	if (config->config_ctl_hi_val)
+		regmap_write(regmap, PLL_CONFIG_CTL_U(pll),
+				config->config_ctl_hi_val);
+
+	if (config->config_ctl_hi1_val)
+		regmap_write(regmap, PLL_CONFIG_CTL_U1(pll),
+				config->config_ctl_hi1_val);
+
+	if (config->test_ctl_val)
+		regmap_write(regmap, PLL_TEST_CTL(pll),
+				config->test_ctl_val);
+
+	if (config->test_ctl_hi_val)
+		regmap_write(regmap, PLL_TEST_CTL_U(pll),
+				config->test_ctl_hi_val);
+
+	if (config->test_ctl_hi1_val)
+		regmap_write(regmap, PLL_TEST_CTL_U1(pll),
+				config->test_ctl_hi1_val);
+
+	if (config->l)
+		regmap_write(regmap, PLL_L_VAL(pll), config->l);
+
+	if (config->alpha)
+		regmap_write(regmap, PLL_ALPHA_VAL(pll), config->alpha);
+
+	if (config->user_ctl_val)
+		regmap_write(regmap, PLL_USER_CTL(pll),
+				config->user_ctl_val);
+
+	/* Set PLL_BYPASSNL */
+	regmap_update_bits(regmap, PLL_MODE(pll),
+			 PLL_BYPASSNL, PLL_BYPASSNL);
+
+	/*
+	 * H/W requires a 1us delay between disabling the bypass and
+	 * de-asserting the reset.
+	 */
+	mb();
+	udelay(5);
+
+	/* Take PLL out from reset state */
+	regmap_update_bits(regmap, PLL_MODE(pll),
+				 PLL_RESET_N, PLL_RESET_N);
+
+	/* Wait 50us for pll_lock_det bit to go high */
+	mb();
+	udelay(50);
+
+	/* Enables PLL output */
+	regmap_update_bits(regmap, PLL_MODE(pll),
+			 PLL_OUTCTRL, PLL_OUTCTRL);
+}
+
 static unsigned long
 alpha_huayra_pll_calc_rate(u64 prate, u32 l, u32 a)
 {
@@ -851,6 +912,50 @@
 	return alpha_huayra_pll_round_rate(rate, *prate, &l, &a);
 }
 
+static void clk_huayra_pll_list_registers(struct seq_file *f, struct clk_hw *hw)
+{
+	struct clk_alpha_pll *pll = to_clk_alpha_pll(hw);
+	int size, i, val;
+
+	static struct clk_register_data data[] = {
+		{"PLL_MODE", PLL_OFF_MODE},
+		{"PLL_L_VAL", PLL_OFF_L_VAL},
+		{"PLL_ALPHA_VAL", PLL_OFF_ALPHA_VAL},
+		{"PLL_USER_CTL", PLL_OFF_USER_CTL},
+		{"PLL_CONFIG_CTL", PLL_OFF_CONFIG_CTL},
+		{"PLL_CONFIG_CTL_U", PLL_OFF_CONFIG_CTL_U},
+		{"PLL_CONFIG_CTL_U1", PLL_OFF_CONFIG_CTL_U1},
+		{"PLL_TEST_CTL", PLL_OFF_TEST_CTL},
+		{"PLL_TEST_CTL_U", PLL_OFF_TEST_CTL_U},
+		{"PLL_TEST_CTL_U1", PLL_OFF_TEST_CTL_U1},
+		{"PLL_OPMODE", PLL_OFF_OPMODE},
+		{"PLL_STATUS", PLL_OFF_STATUS},
+	};
+
+	static struct clk_register_data data1[] = {
+		{"APSS_PLL_VOTE", 0x0},
+	};
+
+	size = ARRAY_SIZE(data);
+
+	for (i = 0; i < size; i++) {
+		regmap_read(pll->clkr.regmap,
+				pll->offset + pll->regs[data[i].offset], &val);
+		clock_debug_output(f, false,
+				"%20s: 0x%.8x\n", data[i].name, val);
+	}
+
+	regmap_read(pll->clkr.regmap, pll->offset +
+					pll->regs[data[0].offset], &val);
+
+	if (val & PLL_FSM_ENA) {
+		regmap_read(pll->clkr.regmap, pll->clkr.enable_reg +
+					data1[0].offset, &val);
+		clock_debug_output(f, false,
+				"%20s: 0x%.8x\n", data1[0].name, val);
+	}
+}
+
 static void clk_alpha_pll_list_registers(struct seq_file *f, struct clk_hw *hw)
 {
 	struct clk_alpha_pll *pll = to_clk_alpha_pll(hw);
@@ -1200,6 +1305,7 @@
 	.recalc_rate = alpha_pll_huayra_recalc_rate,
 	.round_rate = alpha_pll_huayra_round_rate,
 	.set_rate = alpha_pll_huayra_set_rate,
+	.list_registers = clk_huayra_pll_list_registers,
 	.bus_vote = clk_debug_bus_vote,
 };
 EXPORT_SYMBOL_GPL(clk_alpha_pll_huayra_ops);
diff --git a/drivers/clk/qcom/clk-alpha-pll.h b/drivers/clk/qcom/clk-alpha-pll.h
index 2b3de02..c95f926 100644
--- a/drivers/clk/qcom/clk-alpha-pll.h
+++ b/drivers/clk/qcom/clk-alpha-pll.h
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: GPL-2.0 */
-/* Copyright (c) 2015, 2018-2019, The Linux Foundation. All rights reserved. */
+/* Copyright (c) 2015, 2018-2020, The Linux Foundation. All rights reserved. */
 
 #ifndef __QCOM_CLK_ALPHA_PLL_H__
 #define __QCOM_CLK_ALPHA_PLL_H__
@@ -152,4 +152,6 @@
 				const struct alpha_pll_config *config);
 int clk_agera_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap,
 				const struct alpha_pll_config *config);
+void clk_huayra_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap,
+				const struct alpha_pll_config *config);
 #endif
diff --git a/drivers/clk/qcom/clk-rcg2.c b/drivers/clk/qcom/clk-rcg2.c
index e104484..c33d2b6 100644
--- a/drivers/clk/qcom/clk-rcg2.c
+++ b/drivers/clk/qcom/clk-rcg2.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Copyright (c) 2013, 2018-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013, 2018-2020, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/kernel.h>
@@ -1469,7 +1469,7 @@
 	struct freq_tbl *freq_tbl;
 	int i, ret;
 
-	freq_tbl = kcalloc(MAX_PERF_LEVEL, sizeof(*freq_tbl), GFP_KERNEL);
+	freq_tbl = kcalloc(MAX_PERF_LEVEL + 1, sizeof(*freq_tbl), GFP_KERNEL);
 	if (!freq_tbl)
 		return -ENOMEM;
 	rcg->freq_tbl = freq_tbl;
@@ -1553,6 +1553,7 @@
 	.get_parent = clk_rcg2_get_parent,
 	.determine_rate = clk_rcg2_dfs_determine_rate,
 	.recalc_rate = clk_rcg2_dfs_recalc_rate,
+	.list_rate = clk_rcg2_list_rate,
 };
 
 static int clk_rcg2_enable_dfs(const struct clk_rcg_dfs_data *data,
diff --git a/drivers/clk/qcom/clk-rpmh.c b/drivers/clk/qcom/clk-rpmh.c
index bb9e9ab..09ed532 100644
--- a/drivers/clk/qcom/clk-rpmh.c
+++ b/drivers/clk/qcom/clk-rpmh.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2018-2020, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/clk-provider.h>
@@ -312,6 +312,7 @@
 };
 
 DEFINE_CLK_RPMH_ARC(lagoon, bi_tcxo, bi_tcxo_ao, "xo.lvl", 0x3, 4);
+DEFINE_CLK_RPMH_ARC(lagoon, qlink, qlink_ao, "qphy.lvl", 0x1, 4);
 DEFINE_CLK_RPMH_VRM(lagoon, ln_bb_clk2, ln_bb_clk2_ao, "lnbclkg2", 4);
 DEFINE_CLK_RPMH_VRM(lagoon, ln_bb_clk3, ln_bb_clk3_ao, "lnbclkg3", 4);
 
@@ -322,6 +323,8 @@
 	[RPMH_LN_BB_CLK2_A]	= &lagoon_ln_bb_clk2_ao.hw,
 	[RPMH_LN_BB_CLK3]	= &lagoon_ln_bb_clk3.hw,
 	[RPMH_LN_BB_CLK3_A]	= &lagoon_ln_bb_clk3_ao.hw,
+	[RPMH_QLINK_CLK]	= &lagoon_qlink.hw,
+	[RPMH_QLINK_CLK_A]	= &lagoon_qlink_ao.hw,
 };
 
 static const struct clk_rpmh_desc clk_rpmh_lagoon = {
diff --git a/drivers/clk/qcom/clk-smd-rpm.c b/drivers/clk/qcom/clk-smd-rpm.c
index 9e72243..2ce13cd 100644
--- a/drivers/clk/qcom/clk-smd-rpm.c
+++ b/drivers/clk/qcom/clk-smd-rpm.c
@@ -860,7 +860,9 @@
 DEFINE_CLK_SMD_RPM_XO_BUFFER(scuba, ln_bb_clk2, ln_bb_clk2_a, 0x2);
 DEFINE_CLK_SMD_RPM_XO_BUFFER(scuba, rf_clk3, rf_clk3_a, 6);
 
-DEFINE_CLK_SMD_RPM(scuba, qpic_clk, qpic_a_clk, RPM_SMD_QPIC_CLK, 0);
+DEFINE_CLK_SMD_RPM(scuba, qpic_clk, qpic_a_clk, QCOM_SMD_RPM_QPIC_CLK, 0);
+DEFINE_CLK_SMD_RPM(scuba, hwkm_clk, hwkm_a_clk, QCOM_SMD_RPM_HWKM_CLK, 0);
+DEFINE_CLK_SMD_RPM(scuba, pka_clk, pka_a_clk, QCOM_SMD_RPM_PKA_CLK, 0);
 
 /* Scuba */
 static struct clk_hw *scuba_clks[] = {
@@ -946,11 +948,15 @@
 	[CXO_SMD_WLAN_CLK] = &bi_tcxo_wlan_clk.hw,
 	[CXO_SMD_PIL_LPASS_CLK] = &bi_tcxo_pil_lpass_clk.hw,
 	[CXO_SMD_PIL_CDSP_CLK] = &bi_tcxo_pil_cdsp_clk.hw,
+	[RPM_SMD_HWKM_CLK] = &scuba_hwkm_clk.hw,
+	[RPM_SMD_HWKM_A_CLK] = &scuba_hwkm_a_clk.hw,
+	[RPM_SMD_PKA_CLK] = &scuba_pka_clk.hw,
+	[RPM_SMD_PKA_A_CLK] = &scuba_pka_a_clk.hw,
 };
 
 static const struct rpm_smd_clk_desc rpm_clk_scuba = {
 	.clks = scuba_clks,
-	.num_rpm_clks = RPM_SMD_QPIC_A_CLK,
+	.num_rpm_clks = RPM_SMD_PKA_A_CLK,
 	.num_clks = ARRAY_SIZE(scuba_clks),
 };
 
diff --git a/drivers/clk/qcom/debugcc-bengal.c b/drivers/clk/qcom/debugcc-bengal.c
index bf3a92f..2bb282b 100644
--- a/drivers/clk/qcom/debugcc-bengal.c
+++ b/drivers/clk/qcom/debugcc-bengal.c
@@ -165,7 +165,6 @@
 	"gcc_gpu_memnoc_gfx_clk",
 	"gcc_gpu_snoc_dvm_gfx_clk",
 	"gcc_gpu_throttle_core_clk",
-	"gcc_gpu_throttle_xo_clk",
 	"gcc_pdm2_clk",
 	"gcc_pdm_ahb_clk",
 	"gcc_pdm_xo4_clk",
@@ -270,7 +269,6 @@
 	0xE8,		/* gcc_gpu_memnoc_gfx_clk */
 	0xEA,		/* gcc_gpu_snoc_dvm_gfx_clk */
 	0xEF,		/* gcc_gpu_throttle_core_clk */
-	0xEE,		/* gcc_gpu_throttle_xo_clk */
 	0x73,		/* gcc_pdm2_clk */
 	0x71,		/* gcc_pdm_ahb_clk */
 	0x72,		/* gcc_pdm_xo4_clk */
diff --git a/drivers/clk/qcom/debugcc-lagoon.c b/drivers/clk/qcom/debugcc-lagoon.c
index 2d2138b..0d92eb4 100644
--- a/drivers/clk/qcom/debugcc-lagoon.c
+++ b/drivers/clk/qcom/debugcc-lagoon.c
@@ -27,20 +27,20 @@
 
 static const char *const cpu_cc_debug_mux_parent_names[] = {
 	"l3_clk",
-	"perfcl_clk",
 	"pwrcl_clk",
+	"perfcl_clk",
 };
 
 static int cpu_cc_debug_mux_sels[] = {
 	0x41,		/* l3_clk */
-	0x21,		/* perf_clk */
-	0x25,		/* pwrcl_clk */
+	0x21,		/* pwrcl_clk */
+	0x25,		/* perfcl_clk */
 };
 
 static int apss_cc_debug_mux_pre_divs[] = {
 	0x4,		/* l3_clk */
-	0x4,		/* perfcl_clk */
-	0x8,		/* pwrcl_clk */
+	0x4,		/* pwrcl_clk */
+	0x8,		/* perfcl_clk */
 };
 
 static struct clk_debug_mux cpu_cc_debug_mux = {
@@ -125,7 +125,11 @@
 	0x38,		/* cam_cc_camnoc_axi_clk */
 	0x34,		/* cam_cc_cci_0_clk */
 	0x35,		/* cam_cc_cci_1_clk */
-	0x3B,		/* cam_cc_core_ahb_clk */
+	/*
+	 * 0x3B measures gcc_camera_ahb_clk which is incorrect,
+	 * thus use the other CBC Mux sel to measure cam_cc_core_ahb_clk.
+	 */
+	0x37,		/* cam_cc_core_ahb_clk */
 	0x37,		/* cam_cc_cpas_ahb_clk */
 	0x6,		/* cam_cc_csi0phytimer_clk */
 	0x8,		/* cam_cc_csi1phytimer_clk */
diff --git a/drivers/clk/qcom/debugcc-scuba.c b/drivers/clk/qcom/debugcc-scuba.c
new file mode 100644
index 0000000..e382ed8
--- /dev/null
+++ b/drivers/clk/qcom/debugcc-scuba.c
@@ -0,0 +1,599 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2020, The Linux Foundation. All rights reserved.
+ */
+
+#define pr_fmt(fmt) "clk: %s: " fmt, __func__
+
+#include <linux/clk.h>
+#include <linux/clk-provider.h>
+#include <linux/err.h>
+#include <linux/kernel.h>
+#include <linux/mfd/syscon.h>
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/of_device.h>
+#include <linux/platform_device.h>
+#include <linux/regmap.h>
+
+#include "clk-debug.h"
+#include "common.h"
+
+static struct measure_clk_data debug_mux_priv = {
+	.ctl_reg = 0x62038,
+	.status_reg = 0x6203C,
+	.xo_div4_cbcr = 0x28008,
+};
+
+static const char *const apcs_debug_mux_parent_names[] = {
+	"pwrcl_clk",
+};
+
+static int apcs_debug_mux_sels[] = {
+	0x0,		/* pwrcl_clk */
+};
+
+static int apcs_debug_mux_pre_divs[] = {
+	0x8,		/* pwrcl_clk */
+};
+
+static struct clk_debug_mux apcs_debug_mux = {
+	.priv = &debug_mux_priv,
+	.debug_offset = 0x0,
+	.post_div_offset = 0x0,
+	.cbcr_offset = 0x0,
+	.src_sel_mask = 0x3FF00,
+	.src_sel_shift = 8,
+	.post_div_mask = 0xF0000000,
+	.post_div_shift = 28,
+	.post_div_val = 1,
+	.mux_sels = apcs_debug_mux_sels,
+	.pre_div_vals = apcs_debug_mux_pre_divs,
+	.hw.init = &(struct clk_init_data){
+		.name = "apcs_debug_mux",
+		.ops = &clk_debug_mux_ops,
+		.parent_names = apcs_debug_mux_parent_names,
+		.num_parents = ARRAY_SIZE(apcs_debug_mux_parent_names),
+		.flags = CLK_IS_MEASURE,
+	},
+};
+
+static const char *const disp_cc_debug_mux_parent_names[] = {
+	"disp_cc_mdss_ahb_clk",
+	"disp_cc_mdss_byte0_clk",
+	"disp_cc_mdss_byte0_intf_clk",
+	"disp_cc_mdss_esc0_clk",
+	"disp_cc_mdss_mdp_clk",
+	"disp_cc_mdss_mdp_lut_clk",
+	"disp_cc_mdss_non_gdsc_ahb_clk",
+	"disp_cc_mdss_pclk0_clk",
+	"disp_cc_mdss_vsync_clk",
+	"disp_cc_sleep_clk",
+	"disp_cc_xo_clk",
+};
+
+static int disp_cc_debug_mux_sels[] = {
+	0x1A,		/* disp_cc_mdss_ahb_clk */
+	0x11,		/* disp_cc_mdss_byte0_clk */
+	0x12,		/* disp_cc_mdss_byte0_intf_clk */
+	0x13,		/* disp_cc_mdss_esc0_clk */
+	0xE,		/* disp_cc_mdss_mdp_clk */
+	0xF,		/* disp_cc_mdss_mdp_lut_clk */
+	0x1B,		/* disp_cc_mdss_non_gdsc_ahb_clk */
+	0xD,		/* disp_cc_mdss_pclk0_clk */
+	0x10,		/* disp_cc_mdss_vsync_clk */
+	0x24,		/* disp_cc_sleep_clk */
+	0x23,		/* disp_cc_xo_clk */
+};
+
+static struct clk_debug_mux disp_cc_debug_mux = {
+	.priv = &debug_mux_priv,
+	.debug_offset = 0x7000,
+	.post_div_offset = 0x5008,
+	.cbcr_offset = 0x500C,
+	.src_sel_mask = 0xFF,
+	.src_sel_shift = 0,
+	.post_div_mask = 0x3,
+	.post_div_shift = 0,
+	.post_div_val = 4,
+	.mux_sels = disp_cc_debug_mux_sels,
+	.hw.init = &(struct clk_init_data){
+		.name = "disp_cc_debug_mux",
+		.ops = &clk_debug_mux_ops,
+		.parent_names = disp_cc_debug_mux_parent_names,
+		.num_parents = ARRAY_SIZE(disp_cc_debug_mux_parent_names),
+		.flags = CLK_IS_MEASURE,
+	},
+};
+
+static const char *const gcc_debug_mux_parent_names[] = {
+	"apcs_debug_mux",
+	"disp_cc_debug_mux",
+	"gcc_ahb2phy_csi_clk",
+	"gcc_ahb2phy_usb_clk",
+	"gcc_apc_vs_clk",
+	"gcc_bimc_gpu_axi_clk",
+	"gcc_boot_rom_ahb_clk",
+	"gcc_cam_throttle_nrt_clk",
+	"gcc_cam_throttle_rt_clk",
+	"gcc_camera_ahb_clk",
+	"gcc_camera_xo_clk",
+	"gcc_camss_axi_clk",
+	"gcc_camss_camnoc_atb_clk",
+	"gcc_camss_camnoc_nts_xo_clk",
+	"gcc_camss_cci_0_clk",
+	"gcc_camss_cphy_0_clk",
+	"gcc_camss_cphy_1_clk",
+	"gcc_camss_csi0phytimer_clk",
+	"gcc_camss_csi1phytimer_clk",
+	"gcc_camss_mclk0_clk",
+	"gcc_camss_mclk1_clk",
+	"gcc_camss_mclk2_clk",
+	"gcc_camss_mclk3_clk",
+	"gcc_camss_nrt_axi_clk",
+	"gcc_camss_ope_ahb_clk",
+	"gcc_camss_ope_clk",
+	"gcc_camss_rt_axi_clk",
+	"gcc_camss_tfe_0_clk",
+	"gcc_camss_tfe_0_cphy_rx_clk",
+	"gcc_camss_tfe_0_csid_clk",
+	"gcc_camss_tfe_1_clk",
+	"gcc_camss_tfe_1_cphy_rx_clk",
+	"gcc_camss_tfe_1_csid_clk",
+	"gcc_camss_top_ahb_clk",
+	"gcc_cfg_noc_usb3_prim_axi_clk",
+	"gcc_disp_ahb_clk",
+	"gcc_disp_gpll0_div_clk_src",
+	"gcc_disp_hf_axi_clk",
+	"gcc_disp_throttle_core_clk",
+	"gcc_disp_xo_clk",
+	"gcc_gp1_clk",
+	"gcc_gp2_clk",
+	"gcc_gp3_clk",
+	"gcc_gpu_cfg_ahb_clk",
+	"gcc_gpu_gpll0_clk_src",
+	"gcc_gpu_gpll0_div_clk_src",
+	"gcc_gpu_memnoc_gfx_clk",
+	"gcc_gpu_snoc_dvm_gfx_clk",
+	"gcc_gpu_throttle_core_clk",
+	"gcc_gpu_throttle_xo_clk",
+	"gcc_mss_vs_clk",
+	"gcc_pdm2_clk",
+	"gcc_pdm_ahb_clk",
+	"gcc_pdm_xo4_clk",
+	"gcc_pwm0_xo512_clk",
+	"gcc_qmip_camera_nrt_ahb_clk",
+	"gcc_qmip_camera_rt_ahb_clk",
+	"gcc_qmip_disp_ahb_clk",
+	"gcc_qmip_gpu_cfg_ahb_clk",
+	"gcc_qmip_video_vcodec_ahb_clk",
+	"gcc_qupv3_wrap0_core_2x_clk",
+	"gcc_qupv3_wrap0_core_clk",
+	"gcc_qupv3_wrap0_s0_clk",
+	"gcc_qupv3_wrap0_s1_clk",
+	"gcc_qupv3_wrap0_s2_clk",
+	"gcc_qupv3_wrap0_s3_clk",
+	"gcc_qupv3_wrap0_s4_clk",
+	"gcc_qupv3_wrap0_s5_clk",
+	"gcc_qupv3_wrap_0_m_ahb_clk",
+	"gcc_qupv3_wrap_0_s_ahb_clk",
+	"gcc_sdcc1_ahb_clk",
+	"gcc_sdcc1_apps_clk",
+	"gcc_sdcc1_ice_core_clk",
+	"gcc_sdcc2_ahb_clk",
+	"gcc_sdcc2_apps_clk",
+	"gcc_sys_noc_cpuss_ahb_clk",
+	"gcc_sys_noc_usb3_prim_axi_clk",
+	"gcc_usb30_prim_master_clk",
+	"gcc_usb30_prim_mock_utmi_clk",
+	"gcc_usb30_prim_sleep_clk",
+	"gcc_usb3_prim_phy_com_aux_clk",
+	"gcc_usb3_prim_phy_pipe_clk",
+	"gcc_vcodec0_axi_clk",
+	"gcc_vdda_vs_clk",
+	"gcc_vddcx_vs_clk",
+	"gcc_vddmx_vs_clk",
+	"gcc_venus_ahb_clk",
+	"gcc_venus_ctl_axi_clk",
+	"gcc_video_ahb_clk",
+	"gcc_video_axi0_clk",
+	"gcc_video_throttle_core_clk",
+	"gcc_video_vcodec0_sys_clk",
+	"gcc_video_venus_ctl_clk",
+	"gcc_video_xo_clk",
+	"gcc_vs_ctrl_ahb_clk",
+	"gcc_vs_ctrl_clk",
+	"gcc_wcss_vs_clk",
+	"gpu_cc_debug_mux",
+	"measure_only_cnoc_clk",
+	"measure_only_ipa_2x_clk",
+	"measure_only_snoc_clk",
+	"measure_only_qpic_clk",
+	"measure_only_qpic_ahb_clk",
+	"measure_only_hwkm_km_core_clk",
+	"measure_only_hwkm_ahb_clk",
+	"measure_only_pka_core_clk",
+	"measure_only_pka_ahb_clk",
+};
+
+static int gcc_debug_mux_sels[] = {
+	0xAB,		/* apcs_debug_mux */
+	0x41,		/* disp_cc_debug_mux */
+	0x62,		/* gcc_ahb2phy_csi_clk */
+	0x63,		/* gcc_ahb2phy_usb_clk */
+	0xBF,		/* gcc_apc_vs_clk */
+	0x8D,		/* gcc_bimc_gpu_axi_clk */
+	0x75,		/* gcc_boot_rom_ahb_clk */
+	0x4B,		/* gcc_cam_throttle_nrt_clk */
+	0x4A,		/* gcc_cam_throttle_rt_clk */
+	0x36,		/* gcc_camera_ahb_clk */
+	0x3E,		/* gcc_camera_xo_clk */
+	0x120,		/* gcc_camss_axi_clk */
+	0x122,		/* gcc_camss_camnoc_atb_clk */
+	0x123,		/* gcc_camss_camnoc_nts_xo_clk */
+	0x11E,		/* gcc_camss_cci_0_clk */
+	0x115,		/* gcc_camss_cphy_0_clk */
+	0x116,		/* gcc_camss_cphy_1_clk */
+	0x10B,		/* gcc_camss_csi0phytimer_clk */
+	0x10C,		/* gcc_camss_csi1phytimer_clk */
+	0x10D,		/* gcc_camss_mclk0_clk */
+	0x10E,		/* gcc_camss_mclk1_clk */
+	0x10F,		/* gcc_camss_mclk2_clk */
+	0x110,		/* gcc_camss_mclk3_clk */
+	0x124,		/* gcc_camss_nrt_axi_clk */
+	0x11D,		/* gcc_camss_ope_ahb_clk */
+	0x11B,		/* gcc_camss_ope_clk */
+	0x126,		/* gcc_camss_rt_axi_clk */
+	0x111,		/* gcc_camss_tfe_0_clk */
+	0x113,		/* gcc_camss_tfe_0_cphy_rx_clk */
+	0x117,		/* gcc_camss_tfe_0_csid_clk */
+	0x112,		/* gcc_camss_tfe_1_clk */
+	0x114,		/* gcc_camss_tfe_1_cphy_rx_clk */
+	0x119,		/* gcc_camss_tfe_1_csid_clk */
+	0x11F,		/* gcc_camss_top_ahb_clk */
+	0x1C,		/* gcc_cfg_noc_usb3_prim_axi_clk */
+	0x37,		/* gcc_disp_ahb_clk */
+	0x46,		/* gcc_disp_gpll0_div_clk_src */
+	0x3C,		/* gcc_disp_hf_axi_clk */
+	0x48,		/* gcc_disp_throttle_core_clk */
+	0x3F,		/* gcc_disp_xo_clk */
+	0xB6,		/* gcc_gp1_clk */
+	0xB7,		/* gcc_gp2_clk */
+	0xB8,		/* gcc_gp3_clk */
+	0xE1,		/* gcc_gpu_cfg_ahb_clk */
+	0xE7,		/* gcc_gpu_gpll0_clk_src */
+	0xE8,		/* gcc_gpu_gpll0_div_clk_src */
+	0xE4,		/* gcc_gpu_memnoc_gfx_clk */
+	0xE6,		/* gcc_gpu_snoc_dvm_gfx_clk */
+	0xEB,		/* gcc_gpu_throttle_core_clk */
+	0xEA,		/* gcc_gpu_throttle_xo_clk */
+	0xBE,		/* gcc_mss_vs_clk */
+	0x72,		/* gcc_pdm2_clk */
+	0x70,		/* gcc_pdm_ahb_clk */
+	0x71,		/* gcc_pdm_xo4_clk */
+	0x73,		/* gcc_pwm0_xo512_clk */
+	0x39,		/* gcc_qmip_camera_nrt_ahb_clk */
+	0x47,		/* gcc_qmip_camera_rt_ahb_clk */
+	0x3A,		/* gcc_qmip_disp_ahb_clk */
+	0xE9,		/* gcc_qmip_gpu_cfg_ahb_clk */
+	0x38,		/* gcc_qmip_video_vcodec_ahb_clk */
+	0x69,		/* gcc_qupv3_wrap0_core_2x_clk */
+	0x68,		/* gcc_qupv3_wrap0_core_clk */
+	0x6A,		/* gcc_qupv3_wrap0_s0_clk */
+	0x6B,		/* gcc_qupv3_wrap0_s1_clk */
+	0x6C,		/* gcc_qupv3_wrap0_s2_clk */
+	0x6D,		/* gcc_qupv3_wrap0_s3_clk */
+	0x6E,		/* gcc_qupv3_wrap0_s4_clk */
+	0x6F,		/* gcc_qupv3_wrap0_s5_clk */
+	0x66,		/* gcc_qupv3_wrap_0_m_ahb_clk */
+	0x67,		/* gcc_qupv3_wrap_0_s_ahb_clk */
+	0xEF,		/* gcc_sdcc1_ahb_clk */
+	0xEE,		/* gcc_sdcc1_apps_clk */
+	0xF0,		/* gcc_sdcc1_ice_core_clk */
+	0x65,		/* gcc_sdcc2_ahb_clk */
+	0x64,		/* gcc_sdcc2_apps_clk */
+	0x9,		/* gcc_sys_noc_cpuss_ahb_clk */
+	0x18,		/* gcc_sys_noc_usb3_prim_axi_clk */
+	0x5B,		/* gcc_usb30_prim_master_clk */
+	0x5D,		/* gcc_usb30_prim_mock_utmi_clk */
+	0x5C,		/* gcc_usb30_prim_sleep_clk */
+	0x5E,		/* gcc_usb3_prim_phy_com_aux_clk */
+	0x5F,		/* gcc_usb3_prim_phy_pipe_clk */
+	0x12C,		/* gcc_vcodec0_axi_clk */
+	0xBB,		/* gcc_vdda_vs_clk */
+	0xB9,		/* gcc_vddcx_vs_clk */
+	0xBA,		/* gcc_vddmx_vs_clk */
+	0x12D,		/* gcc_venus_ahb_clk */
+	0x12B,		/* gcc_venus_ctl_axi_clk */
+	0x35,		/* gcc_video_ahb_clk */
+	0x3B,		/* gcc_video_axi0_clk */
+	0x49,		/* gcc_video_throttle_core_clk */
+	0x129,		/* gcc_video_vcodec0_sys_clk */
+	0x127,		/* gcc_video_venus_ctl_clk */
+	0x3D,		/* gcc_video_xo_clk */
+	0xBD,		/* gcc_vs_ctrl_ahb_clk */
+	0xBC,		/* gcc_vs_ctrl_clk */
+	0xC0,		/* gcc_wcss_vs_clk */
+	0xE3,		/* gpu_cc_debug_mux */
+	0x19,		/* measure_only_cnoc_clk */
+	0xC2,		/* measure_only_ipa_2x_clk */
+	0x7,		/* measure_only_snoc_clk */
+	0x9C,		/* measure_only_qpic_clk */
+	0x9E,		/* measure_only_qpic_ahb_clk */
+	0xA0,		/* measure_only_hwkm_km_core_clk */
+	0xA2,		/* measure_only_hwkm_ahb_clk */
+	0xA3,		/* measure_only_pka_core_clk */
+	0xA4,		/* measure_only_pka_ahb_clk */
+};
+
+static struct clk_debug_mux gcc_debug_mux = {
+	.priv = &debug_mux_priv,
+	.debug_offset = 0x62000,
+	.post_div_offset = 0x30000,
+	.cbcr_offset = 0x30004,
+	.src_sel_mask = 0x3FF,
+	.src_sel_shift = 0,
+	.post_div_mask = 0xF,
+	.post_div_shift = 0,
+	.post_div_val = 1,
+	.mux_sels = gcc_debug_mux_sels,
+	.hw.init = &(struct clk_init_data){
+		.name = "gcc_debug_mux",
+		.ops = &clk_debug_mux_ops,
+		.parent_names = gcc_debug_mux_parent_names,
+		.num_parents = ARRAY_SIZE(gcc_debug_mux_parent_names),
+		.flags = CLK_IS_MEASURE,
+	},
+};
+
+static const char *const gpu_cc_debug_mux_parent_names[] = {
+	"gpu_cc_ahb_clk",
+	"gpu_cc_crc_ahb_clk",
+	"gpu_cc_cx_apb_clk",
+	"gpu_cc_cx_gfx3d_clk",
+	"gpu_cc_cx_gfx3d_slv_clk",
+	"gpu_cc_cx_gmu_clk",
+	"gpu_cc_cx_snoc_dvm_clk",
+	"gpu_cc_cxo_aon_clk",
+	"gpu_cc_cxo_clk",
+	"gpu_cc_gx_cxo_clk",
+	"gpu_cc_gx_gfx3d_clk",
+	"gpu_cc_sleep_clk",
+};
+
+static int gpu_cc_debug_mux_sels[] = {
+	0x10,		/* gpu_cc_ahb_clk */
+	0x11,		/* gpu_cc_crc_ahb_clk */
+	0x14,		/* gpu_cc_cx_apb_clk */
+	0x1A,		/* gpu_cc_cx_gfx3d_clk */
+	0x1B,		/* gpu_cc_cx_gfx3d_slv_clk */
+	0x18,		/* gpu_cc_cx_gmu_clk */
+	0x15,		/* gpu_cc_cx_snoc_dvm_clk */
+	0xA,		/* gpu_cc_cxo_aon_clk */
+	0x19,		/* gpu_cc_cxo_clk */
+	0xE,		/* gpu_cc_gx_cxo_clk */
+	0xB,		/* gpu_cc_gx_gfx3d_clk */
+	0x16,		/* gpu_cc_sleep_clk */
+};
+
+static struct clk_debug_mux gpu_cc_debug_mux = {
+	.priv = &debug_mux_priv,
+	.debug_offset = 0x1568,
+	.post_div_offset = 0x10FC,
+	.cbcr_offset = 0x1100,
+	.src_sel_mask = 0xFF,
+	.src_sel_shift = 0,
+	.post_div_mask = 0x3,
+	.post_div_shift = 0,
+	.post_div_val = 2,
+	.mux_sels = gpu_cc_debug_mux_sels,
+	.hw.init = &(struct clk_init_data){
+		.name = "gpu_cc_debug_mux",
+		.ops = &clk_debug_mux_ops,
+		.parent_names = gpu_cc_debug_mux_parent_names,
+		.num_parents = ARRAY_SIZE(gpu_cc_debug_mux_parent_names),
+		.flags = CLK_IS_MEASURE,
+	},
+};
+
+static const char *const mc_cc_debug_mux_parent_names[] = {
+	"measure_only_mccc_clk",
+};
+
+static struct clk_debug_mux mc_cc_debug_mux = {
+	.period_offset = 0x20,
+	.hw.init = &(struct clk_init_data){
+		.name = "mc_cc_debug_mux",
+		.ops = &clk_debug_mux_ops,
+		.parent_names = mc_cc_debug_mux_parent_names,
+		.num_parents = ARRAY_SIZE(mc_cc_debug_mux_parent_names),
+		.flags = CLK_IS_MEASURE,
+	},
+};
+
+static struct mux_regmap_names mux_list[] = {
+	{ .mux = &apcs_debug_mux, .regmap_name = "qcom,cpucc" },
+	{ .mux = &disp_cc_debug_mux, .regmap_name = "qcom,dispcc" },
+	{ .mux = &gcc_debug_mux, .regmap_name = "qcom,gcc" },
+	{ .mux = &gpu_cc_debug_mux, .regmap_name = "qcom,gpucc" },
+	{ .mux = &mc_cc_debug_mux, .regmap_name = "qcom,mccc" },
+};
+
+static struct clk_dummy measure_only_mccc_clk = {
+	.rrate = 1000,
+	.hw.init = &(struct clk_init_data){
+		.name = "measure_only_mccc_clk",
+		.ops = &clk_dummy_ops,
+	},
+};
+
+static struct clk_dummy pwrcl_clk = {
+	.rrate = 1000,
+	.hw.init = &(struct clk_init_data){
+		.name = "pwrcl_clk",
+		.ops = &clk_dummy_ops,
+	},
+};
+
+static struct clk_dummy measure_only_cnoc_clk = {
+	.rrate = 1000,
+	.hw.init = &(struct clk_init_data){
+		.name = "measure_only_cnoc_clk",
+		.ops = &clk_dummy_ops,
+	},
+};
+
+static struct clk_dummy measure_only_ipa_2x_clk = {
+	.rrate = 1000,
+	.hw.init = &(struct clk_init_data){
+		.name = "measure_only_ipa_2x_clk",
+		.ops = &clk_dummy_ops,
+	},
+};
+
+static struct clk_dummy measure_only_snoc_clk = {
+	.rrate = 1000,
+	.hw.init = &(struct clk_init_data){
+		.name = "measure_only_snoc_clk",
+		.ops = &clk_dummy_ops,
+	},
+};
+
+static struct clk_dummy measure_only_qpic_clk = {
+	.rrate = 1000,
+	.hw.init = &(struct clk_init_data){
+		.name = "measure_only_qpic_clk",
+		.ops = &clk_dummy_ops,
+	},
+};
+
+static struct clk_dummy measure_only_qpic_ahb_clk = {
+	.rrate = 1000,
+	.hw.init = &(struct clk_init_data){
+		.name = "measure_only_qpic_ahb_clk",
+		.ops = &clk_dummy_ops,
+	},
+};
+
+static struct clk_dummy measure_only_hwkm_km_core_clk = {
+	.rrate = 1000,
+	.hw.init = &(struct clk_init_data){
+		.name = "measure_only_hwkm_km_core_clk",
+		.ops = &clk_dummy_ops,
+	},
+};
+
+static struct clk_dummy measure_only_hwkm_ahb_clk = {
+	.rrate = 1000,
+	.hw.init = &(struct clk_init_data){
+		.name = "measure_only_hwkm_ahb_clk",
+		.ops = &clk_dummy_ops,
+	},
+};
+
+static struct clk_dummy measure_only_pka_core_clk = {
+	.rrate = 1000,
+	.hw.init = &(struct clk_init_data){
+		.name = "measure_only_pka_core_clk",
+		.ops = &clk_dummy_ops,
+	},
+};
+
+static struct clk_dummy measure_only_pka_ahb_clk = {
+	.rrate = 1000,
+	.hw.init = &(struct clk_init_data){
+		.name = "measure_only_pka_ahb_clk",
+		.ops = &clk_dummy_ops,
+	},
+};
+
+static struct clk_hw *debugcc_scuba_hws[] = {
+	&pwrcl_clk.hw,
+	&measure_only_cnoc_clk.hw,
+	&measure_only_ipa_2x_clk.hw,
+	&measure_only_mccc_clk.hw,
+	&measure_only_snoc_clk.hw,
+	&measure_only_qpic_clk.hw,
+	&measure_only_qpic_ahb_clk.hw,
+	&measure_only_hwkm_km_core_clk.hw,
+	&measure_only_hwkm_ahb_clk.hw,
+	&measure_only_pka_core_clk.hw,
+	&measure_only_pka_ahb_clk.hw,
+};
+
+static const struct of_device_id clk_debug_match_table[] = {
+	{ .compatible = "qcom,scuba-debugcc" },
+	{ }
+};
+
+static int clk_debug_scuba_probe(struct platform_device *pdev)
+{
+	struct clk *clk;
+	int i, ret;
+
+	BUILD_BUG_ON(ARRAY_SIZE(apcs_debug_mux_parent_names) !=
+				ARRAY_SIZE(apcs_debug_mux_sels));
+	BUILD_BUG_ON(ARRAY_SIZE(disp_cc_debug_mux_parent_names) !=
+				ARRAY_SIZE(disp_cc_debug_mux_sels));
+	BUILD_BUG_ON(ARRAY_SIZE(gcc_debug_mux_parent_names) !=
+				ARRAY_SIZE(gcc_debug_mux_sels));
+	BUILD_BUG_ON(ARRAY_SIZE(gpu_cc_debug_mux_parent_names) !=
+				ARRAY_SIZE(gpu_cc_debug_mux_sels));
+
+	clk = devm_clk_get(&pdev->dev, "xo_clk_src");
+	if (IS_ERR(clk)) {
+		if (PTR_ERR(clk) != -EPROBE_DEFER)
+			dev_err(&pdev->dev, "Unable to get xo clock\n");
+		return PTR_ERR(clk);
+	}
+
+	debug_mux_priv.cxo = clk;
+
+	for (i = 0; i < ARRAY_SIZE(mux_list); i++) {
+		ret = map_debug_bases(pdev, mux_list[i].regmap_name,
+				      mux_list[i].mux);
+		if (ret == -EBADR)
+			continue;
+		else if (ret)
+			return ret;
+
+		clk = devm_clk_register(&pdev->dev, &mux_list[i].mux->hw);
+		if (IS_ERR(clk)) {
+			dev_err(&pdev->dev, "Unable to register %s, err:(%d)\n",
+				mux_list[i].mux->hw.init->name, PTR_ERR(clk));
+			return PTR_ERR(clk);
+		}
+	}
+
+	for (i = 0; i < ARRAY_SIZE(debugcc_scuba_hws); i++) {
+		clk = devm_clk_register(&pdev->dev, debugcc_scuba_hws[i]);
+		if (IS_ERR(clk)) {
+			dev_err(&pdev->dev, "Unable to register %s, err:(%d)\n",
+			debugcc_scuba_hws[i]->init->name, PTR_ERR(clk));
+			return PTR_ERR(clk);
+		}
+	}
+
+	ret = clk_debug_measure_register(&gcc_debug_mux.hw);
+	if (ret)
+		dev_err(&pdev->dev, "Could not register Measure clock\n");
+
+	return ret;
+}
+
+static struct platform_driver clk_debug_driver = {
+	.probe = clk_debug_scuba_probe,
+	.driver = {
+		.name = "scuba-debugcc",
+		.of_match_table = clk_debug_match_table,
+	},
+};
+
+static int __init clk_debug_scuba_init(void)
+{
+	return platform_driver_register(&clk_debug_driver);
+}
+fs_initcall(clk_debug_scuba_init);
+
+MODULE_DESCRIPTION("QTI DEBUG CC SCUBA Driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/clk/qcom/dispcc-lagoon.c b/drivers/clk/qcom/dispcc-lagoon.c
index 593a8df..fb88c51 100644
--- a/drivers/clk/qcom/dispcc-lagoon.c
+++ b/drivers/clk/qcom/dispcc-lagoon.c
@@ -22,7 +22,7 @@
 #include "clk-regmap-divider.h"
 #include "common.h"
 #include "reset.h"
-#include "vdd-level-lito.h"
+#include "vdd-level-lagoon.h"
 
 static DEFINE_VDD_REGULATORS(vdd_cx, VDD_NUM, 1, vdd_corner);
 
@@ -273,8 +273,8 @@
 		.name = "disp_cc_mdss_dp_crypto_clk_src",
 		.parent_names = disp_cc_parent_names_0,
 		.num_parents = 4,
-		.flags = CLK_SET_RATE_PARENT,
-		.ops = &clk_byte2_ops,
+		.flags = CLK_GET_RATE_NOCACHE,
+		.ops = &clk_rcg2_ops,
 		.vdd_class = &vdd_cx,
 		.num_rate_max = VDD_NUM,
 		.rate_max = (unsigned long[VDD_NUM]) {
@@ -303,8 +303,8 @@
 		.name = "disp_cc_mdss_dp_link_clk_src",
 		.parent_names = disp_cc_parent_names_0,
 		.num_parents = 4,
-		.flags = CLK_SET_RATE_PARENT,
-		.ops = &clk_byte2_ops,
+		.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,
+		.ops = &clk_rcg2_ops,
 		.vdd_class = &vdd_cx,
 		.num_rate_max = VDD_NUM,
 		.rate_max = (unsigned long[VDD_NUM]) {
@@ -633,7 +633,7 @@
 
 static struct clk_branch disp_cc_mdss_mdp_lut_clk = {
 	.halt_reg = 0x1020,
-	.halt_check = BRANCH_HALT,
+	.halt_check = BRANCH_HALT_VOTED,
 	.clkr = {
 		.enable_reg = 0x1020,
 		.enable_mask = BIT(0),
diff --git a/drivers/clk/qcom/dispcc-scuba.c b/drivers/clk/qcom/dispcc-scuba.c
new file mode 100644
index 0000000..4fcd457
--- /dev/null
+++ b/drivers/clk/qcom/dispcc-scuba.c
@@ -0,0 +1,650 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2020, The Linux Foundation. All rights reserved.
+ */
+
+#include <linux/clk.h>
+#include <linux/clk-provider.h>
+#include <linux/err.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/of_device.h>
+#include <linux/of.h>
+#include <linux/regmap.h>
+
+#include <dt-bindings/clock/qcom,dispcc-scuba.h>
+
+#include "clk-alpha-pll.h"
+#include "clk-branch.h"
+#include "clk-rcg.h"
+#include "clk-regmap.h"
+#include "clk-regmap-divider.h"
+#include "common.h"
+#include "reset.h"
+#include "vdd-level.h"
+
+static DEFINE_VDD_REGULATORS(vdd_cx, VDD_NUM, 1, vdd_corner);
+
+enum {
+	P_BI_TCXO,
+	P_CORE_BI_PLL_TEST_SE,
+	P_DISP_CC_PLL0_OUT_MAIN,
+	P_DSI0_PHY_PLL_OUT_BYTECLK,
+	P_DSI0_PHY_PLL_OUT_DSICLK,
+	P_DSI1_PHY_PLL_OUT_DSICLK,
+	P_GPLL0_OUT_MAIN,
+	P_SLEEP_CLK,
+};
+
+static const struct parent_map disp_cc_parent_map_0[] = {
+	{ P_BI_TCXO, 0 },
+	{ P_DSI0_PHY_PLL_OUT_BYTECLK, 1 },
+	{ P_CORE_BI_PLL_TEST_SE, 7 },
+};
+
+static const char * const disp_cc_parent_names_0[] = {
+	"bi_tcxo",
+	"dsi0_phy_pll_out_byteclk",
+	"core_bi_pll_test_se",
+};
+
+static const struct parent_map disp_cc_parent_map_1[] = {
+	{ P_BI_TCXO, 0 },
+	{ P_CORE_BI_PLL_TEST_SE, 7 },
+};
+
+static const char * const disp_cc_parent_names_1[] = {
+	"bi_tcxo",
+	"core_bi_pll_test_se",
+};
+static const char * const disp_cc_parent_names_1_ao[] = {
+	"bi_tcxo_ao",
+	"core_bi_pll_test_se",
+};
+
+static const struct parent_map disp_cc_parent_map_2[] = {
+	{ P_BI_TCXO, 0 },
+	{ P_GPLL0_OUT_MAIN, 4 },
+	{ P_CORE_BI_PLL_TEST_SE, 7 },
+};
+
+static const char * const disp_cc_parent_names_2[] = {
+	"bi_tcxo",
+	"gcc_disp_gpll0_div_clk_src",
+	"core_bi_pll_test_se",
+};
+
+static const struct parent_map disp_cc_parent_map_3[] = {
+	{ P_BI_TCXO, 0 },
+	{ P_DISP_CC_PLL0_OUT_MAIN, 1 },
+	{ P_GPLL0_OUT_MAIN, 4 },
+	{ P_CORE_BI_PLL_TEST_SE, 7 },
+};
+
+static const char * const disp_cc_parent_names_3[] = {
+	"bi_tcxo",
+	"disp_cc_pll0",
+	"gpll0",
+	"core_bi_pll_test_se",
+};
+
+static const struct parent_map disp_cc_parent_map_4[] = {
+	{ P_BI_TCXO, 0 },
+	{ P_DSI0_PHY_PLL_OUT_DSICLK, 1 },
+	{ P_DSI1_PHY_PLL_OUT_DSICLK, 2 },
+	{ P_CORE_BI_PLL_TEST_SE, 7 },
+};
+
+static const char * const disp_cc_parent_names_4[] = {
+	"bi_tcxo",
+	"dsi0_phy_pll_out_dsiclk",
+	"dsi1_phy_pll_out_dsiclk",
+	"core_bi_pll_test_se",
+};
+
+static const struct parent_map disp_cc_parent_map_5[] = {
+	{ P_SLEEP_CLK, 0 },
+	{ P_CORE_BI_PLL_TEST_SE, 7 },
+};
+
+static const char * const disp_cc_parent_names_5[] = {
+	"chip_sleep_clk",
+	"core_bi_pll_test_se",
+};
+
+static struct pll_vco spark_vco[] = {
+	{ 500000000, 1000000000, 2 },
+};
+
+/* 768MHz configuration */
+static const struct alpha_pll_config disp_cc_pll0_config = {
+	.l = 0x28,
+	.alpha = 0x0,
+	.alpha_en_mask = BIT(24),
+	.vco_val = 0x2 << 20,
+	.vco_mask = GENMASK(21, 20),
+	.main_output_mask = BIT(0),
+	.config_ctl_val = 0x4001055B,
+	.test_ctl_hi1_val = 0x1,
+	.test_ctl_hi_mask = 0x1,
+};
+
+static struct clk_alpha_pll disp_cc_pll0 = {
+	.offset = 0x0,
+	.vco_table = spark_vco,
+	.num_vco = ARRAY_SIZE(spark_vco),
+	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
+	.clkr = {
+		.hw.init = &(struct clk_init_data){
+			.name = "disp_cc_pll0",
+			.parent_names = (const char *[]){ "bi_tcxo" },
+			.num_parents = 1,
+			.ops = &clk_alpha_pll_ops,
+			.vdd_class = &vdd_cx,
+			.num_rate_max = VDD_NUM,
+			.rate_max = (unsigned long[VDD_NUM]) {
+				[VDD_MIN] = 1000000000,
+				[VDD_NOMINAL] = 2000000000},
+		},
+	},
+};
+
+static struct clk_regmap_div disp_cc_mdss_byte0_div_clk_src = {
+	.reg = 0x20bc,
+	.shift = 0,
+	.width = 2,
+	.clkr.hw.init = &(struct clk_init_data) {
+		.name = "disp_cc_mdss_byte0_div_clk_src",
+		.parent_names =
+			(const char *[]){ "disp_cc_mdss_byte0_clk_src" },
+		.num_parents = 1,
+		.flags = CLK_GET_RATE_NOCACHE,
+		.ops = &clk_regmap_div_ops,
+	},
+};
+
+static const struct freq_tbl ftbl_disp_cc_mdss_ahb_clk_src[] = {
+	F(19200000, P_BI_TCXO, 1, 0, 0),
+	F(37500000, P_GPLL0_OUT_MAIN, 8, 0, 0),
+	F(75000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
+	{ }
+};
+
+static struct clk_rcg2 disp_cc_mdss_ahb_clk_src = {
+	.cmd_rcgr = 0x2154,
+	.mnd_width = 0,
+	.hid_width = 5,
+	.parent_map = disp_cc_parent_map_2,
+	.freq_tbl = ftbl_disp_cc_mdss_ahb_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "disp_cc_mdss_ahb_clk_src",
+		.parent_names = disp_cc_parent_names_2,
+		.num_parents = 3,
+		.ops = &clk_rcg2_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_MIN] = 19200000,
+			[VDD_LOW] = 37500000,
+			[VDD_NOMINAL] = 75000000},
+	},
+};
+
+static struct clk_rcg2 disp_cc_mdss_byte0_clk_src = {
+	.cmd_rcgr = 0x20a4,
+	.mnd_width = 0,
+	.hid_width = 5,
+	.parent_map = disp_cc_parent_map_0,
+	.enable_safe_config = true,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "disp_cc_mdss_byte0_clk_src",
+		.parent_names = disp_cc_parent_names_0,
+		.num_parents = 3,
+		.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,
+		.ops = &clk_byte2_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_MIN] = 19200000,
+			[VDD_LOWER] = 164000000,
+			[VDD_LOW] = 187500000},
+	},
+};
+
+static const struct freq_tbl ftbl_disp_cc_mdss_esc0_clk_src[] = {
+	F(19200000, P_BI_TCXO, 1, 0, 0),
+	{ }
+};
+
+static struct clk_rcg2 disp_cc_mdss_esc0_clk_src = {
+	.cmd_rcgr = 0x20c0,
+	.mnd_width = 0,
+	.hid_width = 5,
+	.parent_map = disp_cc_parent_map_0,
+	.freq_tbl = ftbl_disp_cc_mdss_esc0_clk_src,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "disp_cc_mdss_esc0_clk_src",
+		.parent_names = disp_cc_parent_names_0,
+		.num_parents = 3,
+		.ops = &clk_rcg2_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_MIN] = 19200000},
+	},
+};
+
+static const struct freq_tbl ftbl_disp_cc_mdss_mdp_clk_src[] = {
+	F(19200000, P_BI_TCXO, 1, 0, 0),
+	F(192000000, P_DISP_CC_PLL0_OUT_MAIN, 4, 0, 0),
+	F(256000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
+	F(307200000, P_DISP_CC_PLL0_OUT_MAIN, 2.5, 0, 0),
+	F(384000000, P_DISP_CC_PLL0_OUT_MAIN, 2, 0, 0),
+	{ }
+};
+
+static struct clk_rcg2 disp_cc_mdss_mdp_clk_src = {
+	.cmd_rcgr = 0x2074,
+	.mnd_width = 0,
+	.hid_width = 5,
+	.parent_map = disp_cc_parent_map_3,
+	.freq_tbl = ftbl_disp_cc_mdss_mdp_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "disp_cc_mdss_mdp_clk_src",
+		.parent_names = disp_cc_parent_names_3,
+		.num_parents = 4,
+		.flags = CLK_SET_RATE_PARENT,
+		.ops = &clk_rcg2_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_MIN] = 19200000,
+			[VDD_LOWER] = 192000000,
+			[VDD_LOW] = 256000000,
+			[VDD_LOW_L1] = 307200000,
+			[VDD_NOMINAL] = 384000000},
+	},
+};
+
+static struct clk_rcg2 disp_cc_mdss_pclk0_clk_src = {
+	.cmd_rcgr = 0x205c,
+	.mnd_width = 8,
+	.hid_width = 5,
+	.parent_map = disp_cc_parent_map_4,
+	.enable_safe_config = true,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "disp_cc_mdss_pclk0_clk_src",
+		.parent_names = disp_cc_parent_names_4,
+		.num_parents = 4,
+		.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,
+		.ops = &clk_pixel_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_MIN] = 19200000,
+			[VDD_LOWER] = 183310056,
+			[VDD_LOW] = 250000000},
+	},
+};
+
+static struct clk_rcg2 disp_cc_mdss_vsync_clk_src = {
+	.cmd_rcgr = 0x208c,
+	.mnd_width = 0,
+	.hid_width = 5,
+	.parent_map = disp_cc_parent_map_1,
+	.freq_tbl = ftbl_disp_cc_mdss_esc0_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "disp_cc_mdss_vsync_clk_src",
+		.parent_names = disp_cc_parent_names_1,
+		.num_parents = 2,
+		.flags = CLK_SET_RATE_PARENT,
+		.ops = &clk_rcg2_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_MIN] = 19200000},
+	},
+};
+
+static const struct freq_tbl ftbl_disp_cc_sleep_clk_src[] = {
+	F(32764, P_SLEEP_CLK, 1, 0, 0),
+	{ }
+};
+
+static struct clk_rcg2 disp_cc_sleep_clk_src = {
+	.cmd_rcgr = 0x6050,
+	.mnd_width = 0,
+	.hid_width = 5,
+	.parent_map = disp_cc_parent_map_5,
+	.freq_tbl = ftbl_disp_cc_sleep_clk_src,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "disp_cc_sleep_clk_src",
+		.parent_names = disp_cc_parent_names_5,
+		.num_parents = 2,
+		.ops = &clk_rcg2_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_MIN] = 32764},
+	},
+};
+
+static struct clk_rcg2 disp_cc_xo_clk_src = {
+	.cmd_rcgr = 0x6034,
+	.mnd_width = 0,
+	.hid_width = 5,
+	.parent_map = disp_cc_parent_map_1,
+	.freq_tbl = ftbl_disp_cc_mdss_esc0_clk_src,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "disp_cc_xo_clk_src",
+		.parent_names = disp_cc_parent_names_1_ao,
+		.num_parents = 2,
+		.ops = &clk_rcg2_ops,
+	},
+};
+
+static struct clk_branch disp_cc_mdss_ahb_clk = {
+	.halt_reg = 0x2044,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x2044,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "disp_cc_mdss_ahb_clk",
+			.parent_names = (const char *[]){
+				"disp_cc_mdss_ahb_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch disp_cc_mdss_byte0_clk = {
+	.halt_reg = 0x201c,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x201c,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "disp_cc_mdss_byte0_clk",
+			.parent_names = (const char *[]){
+				"disp_cc_mdss_byte0_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch disp_cc_mdss_byte0_intf_clk = {
+	.halt_reg = 0x2020,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x2020,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "disp_cc_mdss_byte0_intf_clk",
+			.parent_names = (const char *[]){
+				"disp_cc_mdss_byte0_div_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch disp_cc_mdss_esc0_clk = {
+	.halt_reg = 0x2024,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x2024,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "disp_cc_mdss_esc0_clk",
+			.parent_names = (const char *[]){
+				"disp_cc_mdss_esc0_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch disp_cc_mdss_mdp_clk = {
+	.halt_reg = 0x2008,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x2008,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "disp_cc_mdss_mdp_clk",
+			.parent_names = (const char *[]){
+				"disp_cc_mdss_mdp_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch disp_cc_mdss_mdp_lut_clk = {
+	.halt_reg = 0x2010,
+	.halt_check = BRANCH_HALT_VOTED,
+	.clkr = {
+		.enable_reg = 0x2010,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "disp_cc_mdss_mdp_lut_clk",
+			.parent_names = (const char *[]){
+				"disp_cc_mdss_mdp_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch disp_cc_mdss_non_gdsc_ahb_clk = {
+	.halt_reg = 0x4004,
+	.halt_check = BRANCH_HALT_VOTED,
+	.clkr = {
+		.enable_reg = 0x4004,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "disp_cc_mdss_non_gdsc_ahb_clk",
+			.parent_names = (const char *[]){
+				"disp_cc_mdss_ahb_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch disp_cc_mdss_pclk0_clk = {
+	.halt_reg = 0x2004,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x2004,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "disp_cc_mdss_pclk0_clk",
+			.parent_names = (const char *[]){
+				"disp_cc_mdss_pclk0_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch disp_cc_mdss_vsync_clk = {
+	.halt_reg = 0x2018,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x2018,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "disp_cc_mdss_vsync_clk",
+			.parent_names = (const char *[]){
+				"disp_cc_mdss_vsync_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch disp_cc_sleep_clk = {
+	.halt_reg = 0x6068,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x6068,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "disp_cc_sleep_clk",
+			.parent_names = (const char *[]){
+				"disp_cc_sleep_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch disp_cc_xo_clk = {
+	.halt_reg = 0x604c,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x604c,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "disp_cc_xo_clk",
+			.parent_names = (const char *[]){
+				"disp_cc_xo_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_regmap *disp_cc_scuba_clocks[] = {
+	[DISP_CC_MDSS_AHB_CLK] = &disp_cc_mdss_ahb_clk.clkr,
+	[DISP_CC_MDSS_AHB_CLK_SRC] = &disp_cc_mdss_ahb_clk_src.clkr,
+	[DISP_CC_MDSS_BYTE0_CLK] = &disp_cc_mdss_byte0_clk.clkr,
+	[DISP_CC_MDSS_BYTE0_CLK_SRC] = &disp_cc_mdss_byte0_clk_src.clkr,
+	[DISP_CC_MDSS_BYTE0_DIV_CLK_SRC] = &disp_cc_mdss_byte0_div_clk_src.clkr,
+	[DISP_CC_MDSS_BYTE0_INTF_CLK] = &disp_cc_mdss_byte0_intf_clk.clkr,
+	[DISP_CC_MDSS_ESC0_CLK] = &disp_cc_mdss_esc0_clk.clkr,
+	[DISP_CC_MDSS_ESC0_CLK_SRC] = &disp_cc_mdss_esc0_clk_src.clkr,
+	[DISP_CC_MDSS_MDP_CLK] = &disp_cc_mdss_mdp_clk.clkr,
+	[DISP_CC_MDSS_MDP_CLK_SRC] = &disp_cc_mdss_mdp_clk_src.clkr,
+	[DISP_CC_MDSS_MDP_LUT_CLK] = &disp_cc_mdss_mdp_lut_clk.clkr,
+	[DISP_CC_MDSS_NON_GDSC_AHB_CLK] = &disp_cc_mdss_non_gdsc_ahb_clk.clkr,
+	[DISP_CC_MDSS_PCLK0_CLK] = &disp_cc_mdss_pclk0_clk.clkr,
+	[DISP_CC_MDSS_PCLK0_CLK_SRC] = &disp_cc_mdss_pclk0_clk_src.clkr,
+	[DISP_CC_MDSS_VSYNC_CLK] = &disp_cc_mdss_vsync_clk.clkr,
+	[DISP_CC_MDSS_VSYNC_CLK_SRC] = &disp_cc_mdss_vsync_clk_src.clkr,
+	[DISP_CC_PLL0] = &disp_cc_pll0.clkr,
+	[DISP_CC_SLEEP_CLK] = &disp_cc_sleep_clk.clkr,
+	[DISP_CC_SLEEP_CLK_SRC] = &disp_cc_sleep_clk_src.clkr,
+	[DISP_CC_XO_CLK] = &disp_cc_xo_clk.clkr,
+	[DISP_CC_XO_CLK_SRC] = &disp_cc_xo_clk_src.clkr,
+};
+
+static const struct regmap_config disp_cc_scuba_regmap_config = {
+	.reg_bits = 32,
+	.reg_stride = 4,
+	.val_bits = 32,
+	.max_register = 0x10000,
+	.fast_io = true,
+};
+
+static const struct qcom_cc_desc disp_cc_scuba_desc = {
+	.config = &disp_cc_scuba_regmap_config,
+	.clks = disp_cc_scuba_clocks,
+	.num_clks = ARRAY_SIZE(disp_cc_scuba_clocks),
+};
+
+static const struct of_device_id disp_cc_scuba_match_table[] = {
+	{ .compatible = "qcom,scuba-dispcc" },
+	{ }
+};
+MODULE_DEVICE_TABLE(of, disp_cc_scuba_match_table);
+
+static int disp_cc_scuba_probe(struct platform_device *pdev)
+{
+	struct regmap *regmap;
+	struct clk *clk;
+	int ret;
+
+	vdd_cx.regulator[0] = devm_regulator_get(&pdev->dev, "vdd_cx");
+	if (IS_ERR(vdd_cx.regulator[0])) {
+		if (PTR_ERR(vdd_cx.regulator[0]) != -EPROBE_DEFER)
+			dev_err(&pdev->dev, "Unable to get vdd_cx regulator\n");
+		return PTR_ERR(vdd_cx.regulator[0]);
+	}
+
+	regmap = qcom_cc_map(pdev, &disp_cc_scuba_desc);
+	if (IS_ERR(regmap))
+		return PTR_ERR(regmap);
+
+	clk = clk_get(&pdev->dev, "cfg_ahb_clk");
+	if (IS_ERR(clk)) {
+		if (PTR_ERR(clk) != -EPROBE_DEFER)
+			dev_err(&pdev->dev, "Unable to get ahb clock handle\n");
+		return PTR_ERR(clk);
+	}
+	clk_put(clk);
+
+	clk_alpha_pll_configure(&disp_cc_pll0, regmap, &disp_cc_pll0_config);
+
+	ret = qcom_cc_really_probe(pdev, &disp_cc_scuba_desc, regmap);
+	if (ret) {
+		dev_err(&pdev->dev, "Failed to register DISP CC clocks\n");
+		return ret;
+	}
+
+	dev_info(&pdev->dev, "Registered DISP CC clocks\n");
+
+	return ret;
+}
+
+static struct platform_driver disp_cc_scuba_driver = {
+	.probe = disp_cc_scuba_probe,
+	.driver = {
+		.name = "dispcc-scuba",
+		.of_match_table = disp_cc_scuba_match_table,
+	},
+};
+
+static int __init disp_cc_scuba_init(void)
+{
+	return platform_driver_register(&disp_cc_scuba_driver);
+}
+subsys_initcall(disp_cc_scuba_init);
+
+static void __exit disp_cc_scuba_exit(void)
+{
+	platform_driver_unregister(&disp_cc_scuba_driver);
+}
+module_exit(disp_cc_scuba_exit);
+
+MODULE_DESCRIPTION("QTI DISP_CC SCUBA Driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/clk/qcom/gcc-bengal.c b/drivers/clk/qcom/gcc-bengal.c
index b8c5ea4..95137f6 100644
--- a/drivers/clk/qcom/gcc-bengal.c
+++ b/drivers/clk/qcom/gcc-bengal.c
@@ -2782,19 +2782,6 @@
 	},
 };
 
-static struct clk_branch gcc_gpu_throttle_xo_clk = {
-	.halt_reg = 0x36044,
-	.halt_check = BRANCH_HALT,
-	.clkr = {
-		.enable_reg = 0x36044,
-		.enable_mask = BIT(0),
-		.hw.init = &(struct clk_init_data){
-			.name = "gcc_gpu_throttle_xo_clk",
-			.ops = &clk_branch2_ops,
-		},
-	},
-};
-
 static struct clk_branch gcc_pdm2_clk = {
 	.halt_reg = 0x2000c,
 	.halt_check = BRANCH_HALT,
@@ -3672,7 +3659,6 @@
 	[GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
 	[GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
 	[GCC_GPU_THROTTLE_CORE_CLK] = &gcc_gpu_throttle_core_clk.clkr,
-	[GCC_GPU_THROTTLE_XO_CLK] = &gcc_gpu_throttle_xo_clk.clkr,
 	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
 	[GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
 	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
@@ -3769,6 +3755,7 @@
 	[GCC_QUSB2PHY_PRIM_BCR] = { 0x1c000 },
 	[GCC_QUSB2PHY_SEC_BCR] = { 0x1c004 },
 	[GCC_SDCC1_BCR] = { 0x38000 },
+	[GCC_SDCC2_BCR] = { 0x141E000 },
 	[GCC_UFS_PHY_BCR] = { 0x45000 },
 	[GCC_USB30_PRIM_BCR] = { 0x1a000 },
 	[GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x1d000 },
diff --git a/drivers/clk/qcom/gcc-lagoon.c b/drivers/clk/qcom/gcc-lagoon.c
index f0ae8b6..fd9a348 100644
--- a/drivers/clk/qcom/gcc-lagoon.c
+++ b/drivers/clk/qcom/gcc-lagoon.c
@@ -24,7 +24,7 @@
 #include "clk-regmap-mux.h"
 #include "common.h"
 #include "reset.h"
-#include "vdd-level-lito.h"
+#include "vdd-level-lagoon.h"
 
 static DEFINE_VDD_REGULATORS(vdd_cx, VDD_NUM, 1, vdd_corner);
 static DEFINE_VDD_REGULATORS(vdd_cx_ao, VDD_NUM, 1, vdd_corner);
diff --git a/drivers/clk/qcom/gcc-scuba.c b/drivers/clk/qcom/gcc-scuba.c
new file mode 100644
index 0000000..55c7147
--- /dev/null
+++ b/drivers/clk/qcom/gcc-scuba.c
@@ -0,0 +1,3388 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2020, The Linux Foundation. All rights reserved.
+ */
+
+#define pr_fmt(fmt) "clk: %s: " fmt, __func__
+
+#include <linux/clk.h>
+#include <linux/clk-provider.h>
+#include <linux/err.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/of_device.h>
+#include <linux/of.h>
+#include <linux/regmap.h>
+
+#include <dt-bindings/clock/qcom,gcc-scuba.h>
+
+#include "clk-alpha-pll.h"
+#include "clk-branch.h"
+#include "clk-rcg.h"
+#include "clk-regmap-divider.h"
+#include "common.h"
+#include "reset.h"
+#include "vdd-level.h"
+
+static DEFINE_VDD_REGULATORS(vdd_cx, VDD_NUM, 1, vdd_corner);
+static DEFINE_VDD_REGULATORS(vdd_mx, VDD_NUM, 1, vdd_corner);
+
+enum {
+	P_BI_TCXO,
+	P_CORE_BI_PLL_TEST_SE,
+	P_GPLL0_OUT_AUX2,
+	P_GPLL0_OUT_EARLY,
+	P_GPLL10_OUT_MAIN,
+	P_GPLL11_OUT_AUX,
+	P_GPLL11_OUT_AUX2,
+	P_GPLL11_OUT_MAIN,
+	P_GPLL3_OUT_EARLY,
+	P_GPLL3_OUT_MAIN,
+	P_GPLL4_OUT_MAIN,
+	P_GPLL5_OUT_MAIN,
+	P_GPLL6_OUT_EARLY,
+	P_GPLL6_OUT_MAIN,
+	P_GPLL7_OUT_MAIN,
+	P_GPLL8_OUT_EARLY,
+	P_GPLL8_OUT_MAIN,
+	P_GPLL9_OUT_EARLY,
+	P_GPLL9_OUT_MAIN,
+	P_SLEEP_CLK,
+};
+
+static const struct parent_map gcc_parent_map_0[] = {
+	{ P_BI_TCXO, 0 },
+	{ P_GPLL0_OUT_EARLY, 1 },
+	{ P_GPLL0_OUT_AUX2, 2 },
+	{ P_CORE_BI_PLL_TEST_SE, 7 },
+};
+
+static const char * const gcc_parent_names_0[] = {
+	"bi_tcxo",
+	"gpll0",
+	"gpll0_out_aux2",
+	"core_bi_pll_test_se",
+};
+
+static const struct parent_map gcc_parent_map_1[] = {
+	{ P_BI_TCXO, 0 },
+	{ P_GPLL0_OUT_EARLY, 1 },
+	{ P_GPLL0_OUT_AUX2, 2 },
+	{ P_GPLL6_OUT_MAIN, 4 },
+	{ P_CORE_BI_PLL_TEST_SE, 7 },
+};
+
+static const char * const gcc_parent_names_1[] = {
+	"bi_tcxo",
+	"gpll0",
+	"gpll0_out_aux2",
+	"gpll6_out_main",
+	"core_bi_pll_test_se",
+};
+
+static const struct parent_map gcc_parent_map_2[] = {
+	{ P_BI_TCXO, 0 },
+	{ P_GPLL0_OUT_EARLY, 1 },
+	{ P_GPLL0_OUT_AUX2, 2 },
+	{ P_SLEEP_CLK, 5 },
+	{ P_CORE_BI_PLL_TEST_SE, 7 },
+};
+
+static const char * const gcc_parent_names_2[] = {
+	"bi_tcxo",
+	"gpll0",
+	"gpll0_out_aux2",
+	"sleep_clk",
+	"core_bi_pll_test_se",
+};
+
+static const struct parent_map gcc_parent_map_3[] = {
+	{ P_BI_TCXO, 0 },
+	{ P_GPLL0_OUT_EARLY, 1 },
+	{ P_GPLL9_OUT_EARLY, 2 },
+	{ P_GPLL10_OUT_MAIN, 3 },
+	{ P_GPLL9_OUT_MAIN, 5 },
+	{ P_GPLL3_OUT_MAIN, 6 },
+	{ P_CORE_BI_PLL_TEST_SE, 7 },
+};
+
+static const char * const gcc_parent_names_3[] = {
+	"bi_tcxo",
+	"gpll0",
+	"gpll9",
+	"gpll10",
+	"gpll9_out_main",
+	"gpll3_out_main",
+	"core_bi_pll_test_se",
+};
+
+static const struct parent_map gcc_parent_map_4[] = {
+	{ P_BI_TCXO, 0 },
+	{ P_GPLL0_OUT_EARLY, 1 },
+	{ P_GPLL0_OUT_AUX2, 2 },
+	{ P_GPLL10_OUT_MAIN, 3 },
+	{ P_GPLL4_OUT_MAIN, 5 },
+	{ P_GPLL3_OUT_EARLY, 6 },
+	{ P_CORE_BI_PLL_TEST_SE, 7 },
+};
+
+static const char * const gcc_parent_names_4[] = {
+	"bi_tcxo",
+	"gpll0",
+	"gpll0_out_aux2",
+	"gpll10",
+	"gpll4",
+	"gpll3",
+	"core_bi_pll_test_se",
+};
+
+static const struct parent_map gcc_parent_map_5[] = {
+	{ P_BI_TCXO, 0 },
+	{ P_GPLL0_OUT_EARLY, 1 },
+	{ P_GPLL0_OUT_AUX2, 2 },
+	{ P_GPLL4_OUT_MAIN, 5 },
+	{ P_GPLL3_OUT_MAIN, 6 },
+	{ P_CORE_BI_PLL_TEST_SE, 7 },
+};
+
+static const char * const gcc_parent_names_5[] = {
+	"bi_tcxo",
+	"gpll0",
+	"gpll0_out_aux2",
+	"gpll4",
+	"gpll3_out_main",
+	"core_bi_pll_test_se",
+};
+
+static const struct parent_map gcc_parent_map_6[] = {
+	{ P_BI_TCXO, 0 },
+	{ P_GPLL0_OUT_EARLY, 1 },
+	{ P_GPLL8_OUT_EARLY, 2 },
+	{ P_GPLL10_OUT_MAIN, 3 },
+	{ P_GPLL8_OUT_MAIN, 4 },
+	{ P_GPLL9_OUT_MAIN, 5 },
+	{ P_GPLL3_OUT_EARLY, 6 },
+	{ P_CORE_BI_PLL_TEST_SE, 7 },
+};
+
+static const char * const gcc_parent_names_6[] = {
+	"bi_tcxo",
+	"gpll0",
+	"gpll8",
+	"gpll10",
+	"gpll8_out_main",
+	"gpll9_out_main",
+	"gpll3",
+	"core_bi_pll_test_se",
+};
+
+static const struct parent_map gcc_parent_map_7[] = {
+	{ P_BI_TCXO, 0 },
+	{ P_GPLL0_OUT_EARLY, 1 },
+	{ P_GPLL8_OUT_EARLY, 2 },
+	{ P_GPLL10_OUT_MAIN, 3 },
+	{ P_GPLL8_OUT_MAIN, 4 },
+	{ P_GPLL9_OUT_MAIN, 5 },
+	{ P_GPLL3_OUT_MAIN, 6 },
+	{ P_CORE_BI_PLL_TEST_SE, 7 },
+};
+
+static const char * const gcc_parent_names_7[] = {
+	"bi_tcxo",
+	"gpll0",
+	"gpll8",
+	"gpll10",
+	"gpll8_out_main",
+	"gpll9_out_main",
+	"gpll3_out_main",
+	"core_bi_pll_test_se",
+};
+
+static const struct parent_map gcc_parent_map_8[] = {
+	{ P_BI_TCXO, 0 },
+	{ P_GPLL0_OUT_EARLY, 1 },
+	{ P_GPLL8_OUT_EARLY, 2 },
+	{ P_GPLL10_OUT_MAIN, 3 },
+	{ P_GPLL6_OUT_MAIN, 4 },
+	{ P_GPLL9_OUT_MAIN, 5 },
+	{ P_GPLL3_OUT_EARLY, 6 },
+	{ P_CORE_BI_PLL_TEST_SE, 7 },
+};
+
+static const char * const gcc_parent_names_8[] = {
+	"bi_tcxo",
+	"gpll0",
+	"gpll8",
+	"gpll10",
+	"gpll6_out_main",
+	"gpll9_out_main",
+	"gpll3",
+	"core_bi_pll_test_se",
+};
+
+static const struct parent_map gcc_parent_map_9[] = {
+	{ P_BI_TCXO, 0 },
+	{ P_GPLL0_OUT_EARLY, 1 },
+	{ P_GPLL0_OUT_AUX2, 2 },
+	{ P_GPLL10_OUT_MAIN, 3 },
+	{ P_GPLL8_OUT_MAIN, 4 },
+	{ P_GPLL9_OUT_MAIN, 5 },
+	{ P_GPLL3_OUT_EARLY, 6 },
+	{ P_CORE_BI_PLL_TEST_SE, 7 },
+};
+
+static const char * const gcc_parent_names_9[] = {
+	"bi_tcxo",
+	"gpll0",
+	"gpll0_out_aux2",
+	"gpll10",
+	"gpll8_out_main",
+	"gpll9_out_main",
+	"gpll3",
+	"core_bi_pll_test_se",
+};
+
+static const struct parent_map gcc_parent_map_10[] = {
+	{ P_BI_TCXO, 0 },
+	{ P_GPLL0_OUT_EARLY, 1 },
+	{ P_GPLL8_OUT_EARLY, 2 },
+	{ P_GPLL10_OUT_MAIN, 3 },
+	{ P_GPLL6_OUT_EARLY, 5 },
+	{ P_GPLL3_OUT_MAIN, 6 },
+	{ P_CORE_BI_PLL_TEST_SE, 7 },
+};
+
+static const char * const gcc_parent_names_10[] = {
+	"bi_tcxo",
+	"gpll0",
+	"gpll8",
+	"gpll10",
+	"gpll6",
+	"gpll3_out_main",
+	"core_bi_pll_test_se",
+};
+
+static const struct parent_map gcc_parent_map_11[] = {
+	{ P_BI_TCXO, 0 },
+	{ P_GPLL0_OUT_EARLY, 1 },
+	{ P_GPLL0_OUT_AUX2, 2 },
+	{ P_GPLL5_OUT_MAIN, 3 },
+	{ P_GPLL6_OUT_MAIN, 4 },
+	{ P_GPLL6_OUT_EARLY, 5 },
+	{ P_GPLL3_OUT_EARLY, 6 },
+	{ P_CORE_BI_PLL_TEST_SE, 7 },
+};
+
+static const char * const gcc_parent_names_11[] = {
+	"bi_tcxo",
+	"gpll0",
+	"gpll0_out_aux2",
+	"gpll5",
+	"gpll6_out_main",
+	"gpll6",
+	"gpll3",
+	"core_bi_pll_test_se",
+};
+
+static const struct parent_map gcc_parent_map_12[] = {
+	{ P_BI_TCXO, 0 },
+	{ P_GPLL0_OUT_EARLY, 1 },
+	{ P_GPLL0_OUT_AUX2, 2 },
+	{ P_GPLL7_OUT_MAIN, 3 },
+	{ P_GPLL4_OUT_MAIN, 5 },
+	{ P_CORE_BI_PLL_TEST_SE, 7 },
+};
+
+static const char * const gcc_parent_names_12[] = {
+	"bi_tcxo",
+	"gpll0",
+	"gpll0_out_aux2",
+	"gpll7",
+	"gpll4",
+	"core_bi_pll_test_se",
+};
+
+static const struct parent_map gcc_parent_map_13[] = {
+	{ P_BI_TCXO, 0 },
+	{ P_SLEEP_CLK, 5 },
+	{ P_CORE_BI_PLL_TEST_SE, 7 },
+};
+
+static const char * const gcc_parent_names_13[] = {
+	"bi_tcxo",
+	"sleep_clk",
+	"core_bi_pll_test_se",
+};
+
+static const struct parent_map gcc_parent_map_14[] = {
+	{ P_BI_TCXO, 0 },
+	{ P_GPLL11_OUT_MAIN, 1 },
+	{ P_GPLL11_OUT_AUX, 2 },
+	{ P_GPLL11_OUT_AUX2, 3 },
+	{ P_CORE_BI_PLL_TEST_SE, 7 },
+};
+
+static const char * const gcc_parent_names_14[] = {
+	"bi_tcxo",
+	"gpll11",
+	"gpll11",
+	"gpll11",
+	"core_bi_pll_test_se",
+};
+
+static const struct parent_map gcc_parent_map_15[] = {
+	{ P_BI_TCXO, 0 },
+	{ P_GPLL0_OUT_EARLY, 1 },
+	{ P_CORE_BI_PLL_TEST_SE, 7 },
+};
+
+static const char * const gcc_parent_names_15[] = {
+	"bi_tcxo",
+	"gpll0",
+	"core_bi_pll_test_se",
+};
+
+static const struct parent_map gcc_parent_map_16[] = {
+	{ P_BI_TCXO, 0 },
+	{ P_GPLL0_OUT_EARLY, 1 },
+	{ P_GPLL6_OUT_MAIN, 4 },
+	{ P_CORE_BI_PLL_TEST_SE, 7 },
+};
+
+static const char * const gcc_parent_names_16[] = {
+	"bi_tcxo",
+	"gpll0",
+	"gpll6_out_main",
+	"core_bi_pll_test_se",
+};
+
+static struct pll_vco brammo_vco[] = {
+	{ 500000000, 1250000000, 0 },
+};
+
+static struct pll_vco default_vco[] = {
+	{ 500000000, 1000000000, 2 },
+};
+
+static struct pll_vco spark_vco[] = {
+	{ 750000000, 1500000000, 1 },
+};
+
+static const u8 clk_alpha_pll_regs_offset[][PLL_OFF_MAX_REGS] = {
+	[CLK_ALPHA_PLL_TYPE_DEFAULT] =  {
+		[PLL_OFF_L_VAL] = 0x04,
+		[PLL_OFF_ALPHA_VAL] = 0x08,
+		[PLL_OFF_ALPHA_VAL_U] = 0x0c,
+		[PLL_OFF_TEST_CTL] = 0x10,
+		[PLL_OFF_TEST_CTL_U] = 0x14,
+		[PLL_OFF_USER_CTL] = 0x18,
+		[PLL_OFF_USER_CTL_U] = 0x1C,
+		[PLL_OFF_CONFIG_CTL] = 0x20,
+		[PLL_OFF_STATUS] = 0x24,
+	},
+	[CLK_ALPHA_PLL_TYPE_BRAMMO] =  {
+		[PLL_OFF_L_VAL] = 0x04,
+		[PLL_OFF_ALPHA_VAL] = 0x08,
+		[PLL_OFF_ALPHA_VAL_U] = 0x0c,
+		[PLL_OFF_TEST_CTL] = 0x10,
+		[PLL_OFF_TEST_CTL_U] = 0x14,
+		[PLL_OFF_USER_CTL] = 0x18,
+		[PLL_OFF_CONFIG_CTL] = 0x1C,
+		[PLL_OFF_STATUS] = 0x20,
+	},
+};
+
+static struct clk_alpha_pll gpll0 = {
+	.offset = 0x0,
+	.regs = clk_alpha_pll_regs_offset[CLK_ALPHA_PLL_TYPE_DEFAULT],
+	.clkr = {
+		.enable_reg = 0x79000,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gpll0",
+			.parent_names = (const char *[]){ "bi_tcxo" },
+			.num_parents = 1,
+			.ops = &clk_alpha_pll_ops,
+			.vdd_class = &vdd_cx,
+			.num_rate_max = VDD_NUM,
+			.rate_max = (unsigned long[VDD_NUM]) {
+				[VDD_MIN] = 1000000000,
+				[VDD_NOMINAL] = 2000000000},
+		},
+	},
+};
+
+static const struct clk_div_table post_div_table_gpll0_out_aux2[] = {
+	{ 0x1, 2 },
+	{ }
+};
+
+static struct clk_alpha_pll_postdiv gpll0_out_aux2 = {
+	.offset = 0x0,
+	.post_div_shift = 8,
+	.post_div_table = post_div_table_gpll0_out_aux2,
+	.num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_aux2),
+	.width = 4,
+	.regs = clk_alpha_pll_regs_offset[CLK_ALPHA_PLL_TYPE_DEFAULT],
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "gpll0_out_aux2",
+		.parent_names = (const char *[]){ "gpll0" },
+		.num_parents = 1,
+		.ops = &clk_alpha_pll_postdiv_ro_ops,
+	},
+};
+
+static struct clk_alpha_pll gpll1 = {
+	.offset = 0x1000,
+	.regs = clk_alpha_pll_regs_offset[CLK_ALPHA_PLL_TYPE_DEFAULT],
+	.clkr = {
+		.enable_reg = 0x79000,
+		.enable_mask = BIT(1),
+		.hw.init = &(struct clk_init_data){
+			.name = "gpll1",
+			.parent_names = (const char *[]){ "bi_tcxo" },
+			.num_parents = 1,
+			.ops = &clk_alpha_pll_ops,
+			.vdd_class = &vdd_cx,
+			.num_rate_max = VDD_NUM,
+			.rate_max = (unsigned long[VDD_NUM]) {
+				[VDD_MIN] = 1000000000,
+				[VDD_NOMINAL] = 2000000000},
+		},
+	},
+};
+
+/* 1152MHz configuration */
+static const struct alpha_pll_config gpll10_config = {
+	.l = 0x3c,
+	.alpha = 0x0,
+	.vco_val = 0x1 << 20,
+	.vco_mask = GENMASK(21, 20),
+	.main_output_mask = BIT(0),
+	.config_ctl_val = 0x4001055B,
+	.test_ctl_hi1_val = 0x1,
+	.test_ctl_hi_mask = 0x1,
+};
+
+static struct clk_alpha_pll gpll10 = {
+	.offset = 0xa000,
+	.vco_table = spark_vco,
+	.num_vco = ARRAY_SIZE(spark_vco),
+	.regs = clk_alpha_pll_regs_offset[CLK_ALPHA_PLL_TYPE_DEFAULT],
+	.clkr = {
+		.enable_reg = 0x79000,
+		.enable_mask = BIT(10),
+		.hw.init = &(struct clk_init_data){
+			.name = "gpll10",
+			.parent_names = (const char *[]){ "bi_tcxo" },
+			.num_parents = 1,
+			.ops = &clk_alpha_pll_ops,
+			.vdd_class = &vdd_mx,
+			.num_rate_max = VDD_NUM,
+			.rate_max = (unsigned long[VDD_NUM]) {
+				[VDD_MIN] = 1000000000,
+				[VDD_NOMINAL] = 2000000000},
+		},
+	},
+};
+
+/* 532MHz configuration */
+static const struct alpha_pll_config gpll11_config = {
+	.l = 0x1B,
+	.alpha = 0x55555555,
+	.alpha_hi = 0xB5,
+	.alpha_en_mask = BIT(24),
+	.vco_val = 0x2 << 20,
+	.vco_mask = GENMASK(21, 20),
+	.main_output_mask = BIT(0),
+	.config_ctl_val = 0x4001055B,
+	.test_ctl_hi1_val = 0x1,
+	.test_ctl_hi_mask = 0x1,
+};
+
+static struct clk_alpha_pll gpll11 = {
+	.offset = 0xb000,
+	.vco_table = default_vco,
+	.num_vco = ARRAY_SIZE(default_vco),
+	.regs = clk_alpha_pll_regs_offset[CLK_ALPHA_PLL_TYPE_DEFAULT],
+	.flags = SUPPORTS_DYNAMIC_UPDATE,
+	.clkr = {
+		.enable_reg = 0x79000,
+		.enable_mask = BIT(11),
+		.hw.init = &(struct clk_init_data){
+			.name = "gpll11",
+			.parent_names = (const char *[]){ "bi_tcxo" },
+			.num_parents = 1,
+			.ops = &clk_alpha_pll_ops,
+			.vdd_class = &vdd_cx,
+			.num_rate_max = VDD_NUM,
+			.rate_max = (unsigned long[VDD_NUM]) {
+				[VDD_MIN] = 1000000000,
+				[VDD_NOMINAL] = 2000000000},
+		},
+	},
+};
+
+static struct clk_alpha_pll gpll3 = {
+	.offset = 0x3000,
+	.regs = clk_alpha_pll_regs_offset[CLK_ALPHA_PLL_TYPE_DEFAULT],
+	.clkr = {
+		.enable_reg = 0x79000,
+		.enable_mask = BIT(3),
+		.hw.init = &(struct clk_init_data){
+			.name = "gpll3",
+			.parent_names = (const char *[]){ "bi_tcxo" },
+			.num_parents = 1,
+			.ops = &clk_alpha_pll_ops,
+			.vdd_class = &vdd_cx,
+			.num_rate_max = VDD_NUM,
+			.rate_max = (unsigned long[VDD_NUM]) {
+				[VDD_MIN] = 1000000000,
+				[VDD_NOMINAL] = 2000000000},
+		},
+	},
+};
+
+static const struct clk_div_table post_div_table_gpll3_out_main[] = {
+	{ 0x1, 2 },
+	{ }
+};
+
+static struct clk_alpha_pll_postdiv gpll3_out_main = {
+	.offset = 0x3000,
+	.post_div_shift = 8,
+	.post_div_table = post_div_table_gpll3_out_main,
+	.num_post_div = ARRAY_SIZE(post_div_table_gpll3_out_main),
+	.width = 4,
+	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "gpll3_out_main",
+		.parent_names = (const char *[]){ "gpll3" },
+		.num_parents = 1,
+		.ops = &clk_alpha_pll_postdiv_ro_ops,
+	},
+};
+
+static struct clk_alpha_pll gpll4 = {
+	.offset = 0x4000,
+	.regs = clk_alpha_pll_regs_offset[CLK_ALPHA_PLL_TYPE_DEFAULT],
+	.clkr = {
+		.enable_reg = 0x79000,
+		.enable_mask = BIT(4),
+		.hw.init = &(struct clk_init_data){
+			.name = "gpll4",
+			.parent_names = (const char *[]){ "bi_tcxo" },
+			.num_parents = 1,
+			.ops = &clk_alpha_pll_ops,
+			.vdd_class = &vdd_cx,
+			.num_rate_max = VDD_NUM,
+			.rate_max = (unsigned long[VDD_NUM]) {
+				[VDD_MIN] = 1000000000,
+				[VDD_NOMINAL] = 2000000000},
+		},
+	},
+};
+
+static struct clk_alpha_pll gpll5 = {
+	.offset = 0x5000,
+	.regs = clk_alpha_pll_regs_offset[CLK_ALPHA_PLL_TYPE_DEFAULT],
+	.clkr = {
+		.enable_reg = 0x79000,
+		.enable_mask = BIT(5),
+		.hw.init = &(struct clk_init_data){
+			.name = "gpll5",
+			.parent_names = (const char *[]){ "bi_tcxo" },
+			.num_parents = 1,
+			.ops = &clk_alpha_pll_ops,
+			.vdd_class = &vdd_cx,
+			.num_rate_max = VDD_NUM,
+			.rate_max = (unsigned long[VDD_NUM]) {
+				[VDD_MIN] = 1000000000,
+				[VDD_NOMINAL] = 2000000000},
+		},
+	},
+};
+
+static struct clk_alpha_pll gpll6 = {
+	.offset = 0x6000,
+	.regs = clk_alpha_pll_regs_offset[CLK_ALPHA_PLL_TYPE_DEFAULT],
+	.clkr = {
+		.enable_reg = 0x79000,
+		.enable_mask = BIT(6),
+		.hw.init = &(struct clk_init_data){
+			.name = "gpll6",
+			.parent_names = (const char *[]){ "bi_tcxo" },
+			.num_parents = 1,
+			.ops = &clk_alpha_pll_ops,
+			.vdd_class = &vdd_cx,
+			.num_rate_max = VDD_NUM,
+			.rate_max = (unsigned long[VDD_NUM]) {
+				[VDD_MIN] = 1000000000,
+				[VDD_NOMINAL] = 2000000000},
+		},
+	},
+};
+
+static const struct clk_div_table post_div_table_gpll6_out_main[] = {
+	{ 0x1, 2 },
+	{ }
+};
+
+static struct clk_alpha_pll_postdiv gpll6_out_main = {
+	.offset = 0x6000,
+	.post_div_shift = 8,
+	.post_div_table = post_div_table_gpll6_out_main,
+	.num_post_div = ARRAY_SIZE(post_div_table_gpll6_out_main),
+	.width = 4,
+	.regs = clk_alpha_pll_regs_offset[CLK_ALPHA_PLL_TYPE_DEFAULT],
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "gpll6_out_main",
+		.parent_names = (const char *[]){ "gpll6" },
+		.num_parents = 1,
+		.ops = &clk_alpha_pll_postdiv_ro_ops,
+	},
+};
+
+static struct clk_alpha_pll gpll7 = {
+	.offset = 0x7000,
+	.regs = clk_alpha_pll_regs_offset[CLK_ALPHA_PLL_TYPE_DEFAULT],
+	.clkr = {
+		.enable_reg = 0x79000,
+		.enable_mask = BIT(7),
+		.hw.init = &(struct clk_init_data){
+			.name = "gpll7",
+			.parent_names = (const char *[]){ "bi_tcxo" },
+			.num_parents = 1,
+			.ops = &clk_alpha_pll_ops,
+			.vdd_class = &vdd_cx,
+			.num_rate_max = VDD_NUM,
+			.rate_max = (unsigned long[VDD_NUM]) {
+				[VDD_MIN] = 1000000000,
+				[VDD_NOMINAL] = 2000000000},
+		},
+	},
+};
+
+/* 533.2MHz configuration */
+static const struct alpha_pll_config gpll8_config = {
+	.l = 0x1B,
+	.alpha = 0x55555555,
+	.alpha_hi = 0xC5,
+	.alpha_en_mask = BIT(24),
+	.vco_val = 0x2 << 20,
+	.vco_mask = GENMASK(21, 20),
+	.main_output_mask = BIT(0),
+	.early_output_mask = BIT(3),
+	.post_div_val = 0x1 << 8,
+	.post_div_mask = GENMASK(11, 8),
+	.config_ctl_val = 0x4001055B,
+	.test_ctl_hi1_val = 0x1,
+	.test_ctl_hi_mask = 0x1,
+};
+
+static struct clk_alpha_pll gpll8 = {
+	.offset = 0x8000,
+	.vco_table = default_vco,
+	.num_vco = ARRAY_SIZE(default_vco),
+	.regs = clk_alpha_pll_regs_offset[CLK_ALPHA_PLL_TYPE_DEFAULT],
+	.flags = SUPPORTS_DYNAMIC_UPDATE,
+	.clkr = {
+		.enable_reg = 0x79000,
+		.enable_mask = BIT(8),
+		.hw.init = &(struct clk_init_data){
+			.name = "gpll8",
+			.parent_names = (const char *[]){ "bi_tcxo" },
+			.num_parents = 1,
+			.ops = &clk_alpha_pll_ops,
+			.vdd_class = &vdd_cx,
+			.num_rate_max = VDD_NUM,
+			.rate_max = (unsigned long[VDD_NUM]) {
+				[VDD_MIN] = 1000000000,
+				[VDD_NOMINAL] = 2000000000},
+		},
+	},
+};
+
+static const struct clk_div_table post_div_table_gpll8_out_main[] = {
+	{ 0x1, 2 },
+	{ }
+};
+
+static struct clk_alpha_pll_postdiv gpll8_out_main = {
+	.offset = 0x8000,
+	.post_div_shift = 8,
+	.post_div_table = post_div_table_gpll8_out_main,
+	.num_post_div = ARRAY_SIZE(post_div_table_gpll8_out_main),
+	.width = 4,
+	.regs = clk_alpha_pll_regs_offset[CLK_ALPHA_PLL_TYPE_DEFAULT],
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "gpll8_out_main",
+		.parent_names = (const char *[]){ "gpll8" },
+		.num_parents = 1,
+		.flags = CLK_SET_RATE_PARENT,
+		.ops = &clk_alpha_pll_postdiv_ro_ops,
+	},
+};
+
+/* 1152MHz configuration */
+static const struct alpha_pll_config gpll9_config = {
+	.l = 0x3C,
+	.alpha = 0x0,
+	.post_div_val = 0x1 << 8,
+	.post_div_mask = GENMASK(9, 8),
+	.main_output_mask = BIT(0),
+	.early_output_mask = BIT(3),
+	.config_ctl_val = 0x00004289,
+	.test_ctl_mask = GENMASK(31, 0),
+	.test_ctl_val = 0x08000000,
+};
+
+static struct clk_alpha_pll gpll9 = {
+	.offset = 0x9000,
+	.vco_table = brammo_vco,
+	.num_vco = ARRAY_SIZE(brammo_vco),
+	.regs = clk_alpha_pll_regs_offset[CLK_ALPHA_PLL_TYPE_BRAMMO],
+	.clkr = {
+		.enable_reg = 0x79000,
+		.enable_mask = BIT(9),
+		.hw.init = &(struct clk_init_data){
+			.name = "gpll9",
+			.parent_names = (const char *[]){ "bi_tcxo" },
+			.num_parents = 1,
+			.ops = &clk_alpha_pll_ops,
+			.vdd_class = &vdd_mx,
+			.num_rate_max = VDD_NUM,
+			.rate_max = (unsigned long[VDD_NUM]) {
+				[VDD_LOWER] = 1250000000,
+				[VDD_LOW] = 1250000000,
+				[VDD_NOMINAL] = 1250000000},
+		},
+	},
+};
+
+static const struct clk_div_table post_div_table_gpll9_out_main[] = {
+	{ 0x1, 2 },
+	{ }
+};
+
+static struct clk_alpha_pll_postdiv gpll9_out_main = {
+	.offset = 0x9000,
+	.post_div_shift = 8,
+	.post_div_table = post_div_table_gpll9_out_main,
+	.num_post_div = ARRAY_SIZE(post_div_table_gpll9_out_main),
+	.width = 2,
+	.regs = clk_alpha_pll_regs_offset[CLK_ALPHA_PLL_TYPE_BRAMMO],
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "gpll9_out_main",
+		.parent_names = (const char *[]){ "gpll9" },
+		.num_parents = 1,
+		.flags = CLK_SET_RATE_PARENT,
+		.ops = &clk_alpha_pll_postdiv_ro_ops,
+	},
+};
+
+static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv = {
+	.reg = 0x1a04c,
+	.shift = 0,
+	.width = 2,
+	.clkr.hw.init = &(struct clk_init_data) {
+		.name = "gcc_usb30_prim_mock_utmi_postdiv",
+		.parent_names =
+			(const char *[]){ "gcc_usb30_prim_mock_utmi_clk_src" },
+		.num_parents = 1,
+		.flags = CLK_SET_RATE_PARENT,
+		.ops = &clk_regmap_div_ro_ops,
+	},
+};
+
+static const struct freq_tbl ftbl_gcc_camss_axi_clk_src[] = {
+	F(19200000, P_BI_TCXO, 1, 0, 0),
+	F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0),
+	F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0),
+	F(300000000, P_GPLL0_OUT_AUX2, 1, 0, 0),
+	{ }
+};
+
+static struct clk_rcg2 gcc_camss_axi_clk_src = {
+	.cmd_rcgr = 0x5802c,
+	.mnd_width = 0,
+	.hid_width = 5,
+	.parent_map = gcc_parent_map_4,
+	.freq_tbl = ftbl_gcc_camss_axi_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "gcc_camss_axi_clk_src",
+		.parent_names = gcc_parent_names_4,
+		.num_parents = 7,
+		.ops = &clk_rcg2_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_LOWER] = 19200000,
+			[VDD_LOW] = 150000000,
+			[VDD_LOW_L1] = 200000000,
+			[VDD_NOMINAL] = 300000000},
+	},
+};
+
+static const struct freq_tbl ftbl_gcc_camss_cci_clk_src[] = {
+	F(19200000, P_BI_TCXO, 1, 0, 0),
+	F(37500000, P_GPLL0_OUT_AUX2, 8, 0, 0),
+	{ }
+};
+
+static struct clk_rcg2 gcc_camss_cci_clk_src = {
+	.cmd_rcgr = 0x56000,
+	.mnd_width = 0,
+	.hid_width = 5,
+	.parent_map = gcc_parent_map_9,
+	.freq_tbl = ftbl_gcc_camss_cci_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "gcc_camss_cci_clk_src",
+		.parent_names = gcc_parent_names_9,
+		.num_parents = 8,
+		.ops = &clk_rcg2_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_LOWER] = 19200000,
+			[VDD_LOW] = 37500000},
+	},
+};
+
+static const struct freq_tbl ftbl_gcc_camss_csi0phytimer_clk_src[] = {
+	F(19200000, P_BI_TCXO, 1, 0, 0),
+	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
+	F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0),
+	F(268800000, P_GPLL4_OUT_MAIN, 3, 0, 0),
+	{ }
+};
+
+static struct clk_rcg2 gcc_camss_csi0phytimer_clk_src = {
+	.cmd_rcgr = 0x45000,
+	.mnd_width = 0,
+	.hid_width = 5,
+	.parent_map = gcc_parent_map_5,
+	.freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "gcc_camss_csi0phytimer_clk_src",
+		.parent_names = gcc_parent_names_5,
+		.num_parents = 6,
+		.ops = &clk_rcg2_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_LOWER] = 19200000,
+			[VDD_LOW] = 200000000,
+			[VDD_NOMINAL] = 268800000},
+	},
+};
+
+static struct clk_rcg2 gcc_camss_csi1phytimer_clk_src = {
+	.cmd_rcgr = 0x4501c,
+	.mnd_width = 0,
+	.hid_width = 5,
+	.parent_map = gcc_parent_map_5,
+	.freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "gcc_camss_csi1phytimer_clk_src",
+		.parent_names = gcc_parent_names_5,
+		.num_parents = 6,
+		.ops = &clk_rcg2_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_LOWER] = 19200000,
+			[VDD_LOW] = 200000000,
+			[VDD_NOMINAL] = 268800000},
+	},
+};
+
+static const struct freq_tbl ftbl_gcc_camss_mclk0_clk_src[] = {
+	F(19200000, P_BI_TCXO, 1, 0, 0),
+	F(24000000, P_GPLL9_OUT_MAIN, 1, 1, 24),
+	F(64000000, P_GPLL9_OUT_EARLY, 9, 1, 2),
+	{ }
+};
+
+static struct clk_rcg2 gcc_camss_mclk0_clk_src = {
+	.cmd_rcgr = 0x51000,
+	.mnd_width = 8,
+	.hid_width = 5,
+	.parent_map = gcc_parent_map_3,
+	.freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "gcc_camss_mclk0_clk_src",
+		.parent_names = gcc_parent_names_3,
+		.num_parents = 7,
+		.flags = CLK_OPS_PARENT_ENABLE,
+		.ops = &clk_rcg2_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_LOWER] = 64000000},
+	},
+};
+
+static struct clk_rcg2 gcc_camss_mclk1_clk_src = {
+	.cmd_rcgr = 0x5101c,
+	.mnd_width = 8,
+	.hid_width = 5,
+	.parent_map = gcc_parent_map_3,
+	.freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "gcc_camss_mclk1_clk_src",
+		.parent_names = gcc_parent_names_3,
+		.num_parents = 7,
+		.flags = CLK_OPS_PARENT_ENABLE,
+		.ops = &clk_rcg2_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_LOWER] = 64000000},
+	},
+};
+
+static struct clk_rcg2 gcc_camss_mclk2_clk_src = {
+	.cmd_rcgr = 0x51038,
+	.mnd_width = 8,
+	.hid_width = 5,
+	.parent_map = gcc_parent_map_3,
+	.freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "gcc_camss_mclk2_clk_src",
+		.parent_names = gcc_parent_names_3,
+		.num_parents = 7,
+		.flags = CLK_OPS_PARENT_ENABLE,
+		.ops = &clk_rcg2_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_LOWER] = 64000000},
+	},
+};
+
+static struct clk_rcg2 gcc_camss_mclk3_clk_src = {
+	.cmd_rcgr = 0x51054,
+	.mnd_width = 8,
+	.hid_width = 5,
+	.parent_map = gcc_parent_map_3,
+	.freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "gcc_camss_mclk3_clk_src",
+		.parent_names = gcc_parent_names_3,
+		.num_parents = 7,
+		.flags = CLK_OPS_PARENT_ENABLE,
+		.ops = &clk_rcg2_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_LOWER] = 64000000},
+	},
+};
+
+static const struct freq_tbl ftbl_gcc_camss_ope_ahb_clk_src[] = {
+	F(19200000, P_BI_TCXO, 1, 0, 0),
+	F(171428571, P_GPLL0_OUT_EARLY, 3.5, 0, 0),
+	F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
+	{ }
+};
+
+static struct clk_rcg2 gcc_camss_ope_ahb_clk_src = {
+	.cmd_rcgr = 0x55024,
+	.mnd_width = 0,
+	.hid_width = 5,
+	.parent_map = gcc_parent_map_6,
+	.freq_tbl = ftbl_gcc_camss_ope_ahb_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "gcc_camss_ope_ahb_clk_src",
+		.parent_names = gcc_parent_names_6,
+		.num_parents = 8,
+		.ops = &clk_rcg2_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_LOWER] = 19200000,
+			[VDD_LOW] = 171428571,
+			[VDD_NOMINAL] = 240000000},
+	},
+};
+
+static const struct freq_tbl ftbl_gcc_camss_ope_clk_src[] = {
+	F(19200000, P_BI_TCXO, 1, 0, 0),
+	F(200000000, P_GPLL8_OUT_MAIN, 2, 0, 0),
+	F(266600000, P_GPLL8_OUT_MAIN, 1, 0, 0),
+	F(465000000, P_GPLL8_OUT_MAIN, 1, 0, 0),
+	F(580000000, P_GPLL8_OUT_EARLY, 1, 0, 0),
+	{ }
+};
+
+static struct clk_rcg2 gcc_camss_ope_clk_src = {
+	.cmd_rcgr = 0x55004,
+	.mnd_width = 0,
+	.hid_width = 5,
+	.parent_map = gcc_parent_map_6,
+	.freq_tbl = ftbl_gcc_camss_ope_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "gcc_camss_ope_clk_src",
+		.parent_names = gcc_parent_names_6,
+		.num_parents = 8,
+		.flags = CLK_SET_RATE_PARENT,
+		.ops = &clk_rcg2_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_LOWER] = 19200000,
+			[VDD_LOW] = 200000000,
+			[VDD_LOW_L1] = 266600000,
+			[VDD_NOMINAL] = 465000000,
+			[VDD_HIGH] = 580000000},
+	},
+};
+
+static const struct freq_tbl ftbl_gcc_camss_tfe_0_clk_src[] = {
+	F(19200000, P_BI_TCXO, 1, 0, 0),
+	F(128000000, P_GPLL10_OUT_MAIN, 9, 0, 0),
+	F(135529412, P_GPLL10_OUT_MAIN, 8.5, 0, 0),
+	F(144000000, P_GPLL10_OUT_MAIN, 8, 0, 0),
+	F(153600000, P_GPLL10_OUT_MAIN, 7.5, 0, 0),
+	F(164571429, P_GPLL10_OUT_MAIN, 7, 0, 0),
+	F(177230769, P_GPLL10_OUT_MAIN, 6.5, 0, 0),
+	F(192000000, P_GPLL10_OUT_MAIN, 6, 0, 0),
+	F(209454545, P_GPLL10_OUT_MAIN, 5.5, 0, 0),
+	F(230400000, P_GPLL10_OUT_MAIN, 5, 0, 0),
+	F(256000000, P_GPLL10_OUT_MAIN, 4.5, 0, 0),
+	F(288000000, P_GPLL10_OUT_MAIN, 4, 0, 0),
+	F(329142857, P_GPLL10_OUT_MAIN, 3.5, 0, 0),
+	F(384000000, P_GPLL10_OUT_MAIN, 3, 0, 0),
+	F(460800000, P_GPLL10_OUT_MAIN, 2.5, 0, 0),
+	F(576000000, P_GPLL10_OUT_MAIN, 2, 0, 0),
+	{ }
+};
+
+static struct clk_rcg2 gcc_camss_tfe_0_clk_src = {
+	.cmd_rcgr = 0x52004,
+	.mnd_width = 8,
+	.hid_width = 5,
+	.parent_map = gcc_parent_map_7,
+	.freq_tbl = ftbl_gcc_camss_tfe_0_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "gcc_camss_tfe_0_clk_src",
+		.parent_names = gcc_parent_names_7,
+		.num_parents = 8,
+		.ops = &clk_rcg2_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_LOWER] = 19200000,
+			[VDD_LOW] = 256000000,
+			[VDD_LOW_L1] = 460800000,
+			[VDD_NOMINAL] = 576000000},
+	},
+};
+
+static const struct freq_tbl ftbl_gcc_camss_tfe_0_csid_clk_src[] = {
+	F(19200000, P_BI_TCXO, 1, 0, 0),
+	F(120000000, P_GPLL0_OUT_EARLY, 5, 0, 0),
+	F(192000000, P_GPLL6_OUT_MAIN, 2, 0, 0),
+	F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
+	F(384000000, P_GPLL6_OUT_MAIN, 1, 0, 0),
+	F(426400000, P_GPLL3_OUT_EARLY, 2.5, 0, 0),
+	{ }
+};
+
+static struct clk_rcg2 gcc_camss_tfe_0_csid_clk_src = {
+	.cmd_rcgr = 0x52094,
+	.mnd_width = 0,
+	.hid_width = 5,
+	.parent_map = gcc_parent_map_8,
+	.freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "gcc_camss_tfe_0_csid_clk_src",
+		.parent_names = gcc_parent_names_8,
+		.num_parents = 8,
+		.ops = &clk_rcg2_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_LOWER] = 19200000,
+			[VDD_LOW] = 240000000,
+			[VDD_LOW_L1] = 384000000,
+			[VDD_HIGH] = 426400000},
+	},
+};
+
+static struct clk_rcg2 gcc_camss_tfe_1_clk_src = {
+	.cmd_rcgr = 0x52024,
+	.mnd_width = 8,
+	.hid_width = 5,
+	.parent_map = gcc_parent_map_7,
+	.freq_tbl = ftbl_gcc_camss_tfe_0_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "gcc_camss_tfe_1_clk_src",
+		.parent_names = gcc_parent_names_7,
+		.num_parents = 8,
+		.ops = &clk_rcg2_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_LOWER] = 19200000,
+			[VDD_LOW] = 256000000,
+			[VDD_LOW_L1] = 460800000,
+			[VDD_NOMINAL] = 576000000},
+	},
+};
+
+static struct clk_rcg2 gcc_camss_tfe_1_csid_clk_src = {
+	.cmd_rcgr = 0x520b4,
+	.mnd_width = 0,
+	.hid_width = 5,
+	.parent_map = gcc_parent_map_8,
+	.freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "gcc_camss_tfe_1_csid_clk_src",
+		.parent_names = gcc_parent_names_8,
+		.num_parents = 8,
+		.ops = &clk_rcg2_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_LOWER] = 19200000,
+			[VDD_LOW] = 240000000,
+			[VDD_LOW_L1] = 384000000,
+			[VDD_HIGH] = 426400000},
+	},
+};
+
+static const struct freq_tbl ftbl_gcc_camss_tfe_cphy_rx_clk_src[] = {
+	F(19200000, P_BI_TCXO, 1, 0, 0),
+	F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
+	F(341333333, P_GPLL6_OUT_EARLY, 1, 4, 9),
+	F(384000000, P_GPLL6_OUT_EARLY, 2, 0, 0),
+	{ }
+};
+
+static struct clk_rcg2 gcc_camss_tfe_cphy_rx_clk_src = {
+	.cmd_rcgr = 0x52064,
+	.mnd_width = 16,
+	.hid_width = 5,
+	.parent_map = gcc_parent_map_10,
+	.freq_tbl = ftbl_gcc_camss_tfe_cphy_rx_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "gcc_camss_tfe_cphy_rx_clk_src",
+		.parent_names = gcc_parent_names_10,
+		.num_parents = 7,
+		.flags = CLK_OPS_PARENT_ENABLE,
+		.ops = &clk_rcg2_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_LOWER] = 19200000,
+			[VDD_LOW] = 240000000,
+			[VDD_LOW_L1] = 341333333,
+			[VDD_HIGH] = 384000000},
+	},
+};
+
+static const struct freq_tbl ftbl_gcc_camss_top_ahb_clk_src[] = {
+	F(19200000, P_BI_TCXO, 1, 0, 0),
+	F(40000000, P_GPLL0_OUT_AUX2, 7.5, 0, 0),
+	F(80000000, P_GPLL0_OUT_EARLY, 7.5, 0, 0),
+	{ }
+};
+
+static struct clk_rcg2 gcc_camss_top_ahb_clk_src = {
+	.cmd_rcgr = 0x58010,
+	.mnd_width = 0,
+	.hid_width = 5,
+	.parent_map = gcc_parent_map_4,
+	.freq_tbl = ftbl_gcc_camss_top_ahb_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "gcc_camss_top_ahb_clk_src",
+		.parent_names = gcc_parent_names_4,
+		.num_parents = 7,
+		.ops = &clk_rcg2_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_LOWER] = 19200000,
+			[VDD_LOW] = 80000000},
+	},
+};
+
+static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
+	F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0),
+	F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
+	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
+	F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0),
+	{ }
+};
+
+static struct clk_rcg2 gcc_gp1_clk_src = {
+	.cmd_rcgr = 0x4d004,
+	.mnd_width = 8,
+	.hid_width = 5,
+	.parent_map = gcc_parent_map_2,
+	.freq_tbl = ftbl_gcc_gp1_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "gcc_gp1_clk_src",
+		.parent_names = gcc_parent_names_2,
+		.num_parents = 5,
+		.ops = &clk_rcg2_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_LOWER] = 50000000,
+			[VDD_LOW] = 100000000,
+			[VDD_NOMINAL] = 200000000},
+	},
+};
+
+static struct clk_rcg2 gcc_gp2_clk_src = {
+	.cmd_rcgr = 0x4e004,
+	.mnd_width = 8,
+	.hid_width = 5,
+	.parent_map = gcc_parent_map_2,
+	.freq_tbl = ftbl_gcc_gp1_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "gcc_gp2_clk_src",
+		.parent_names = gcc_parent_names_2,
+		.num_parents = 5,
+		.ops = &clk_rcg2_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_LOWER] = 50000000,
+			[VDD_LOW] = 100000000,
+			[VDD_NOMINAL] = 200000000},
+	},
+};
+
+static struct clk_rcg2 gcc_gp3_clk_src = {
+	.cmd_rcgr = 0x4f004,
+	.mnd_width = 8,
+	.hid_width = 5,
+	.parent_map = gcc_parent_map_2,
+	.freq_tbl = ftbl_gcc_gp1_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "gcc_gp3_clk_src",
+		.parent_names = gcc_parent_names_2,
+		.num_parents = 5,
+		.ops = &clk_rcg2_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_LOWER] = 50000000,
+			[VDD_LOW] = 100000000,
+			[VDD_NOMINAL] = 200000000},
+	},
+};
+
+static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
+	F(19200000, P_BI_TCXO, 1, 0, 0),
+	F(60000000, P_GPLL0_OUT_AUX2, 5, 0, 0),
+	{ }
+};
+
+static struct clk_rcg2 gcc_pdm2_clk_src = {
+	.cmd_rcgr = 0x20010,
+	.mnd_width = 0,
+	.hid_width = 5,
+	.parent_map = gcc_parent_map_0,
+	.freq_tbl = ftbl_gcc_pdm2_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "gcc_pdm2_clk_src",
+		.parent_names = gcc_parent_names_0,
+		.num_parents = 4,
+		.ops = &clk_rcg2_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_LOWER] = 19200000,
+			[VDD_LOW] = 60000000},
+	},
+};
+
+static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
+	F(7372800, P_GPLL0_OUT_AUX2, 1, 384, 15625),
+	F(14745600, P_GPLL0_OUT_AUX2, 1, 768, 15625),
+	F(19200000, P_BI_TCXO, 1, 0, 0),
+	F(29491200, P_GPLL0_OUT_AUX2, 1, 1536, 15625),
+	F(32000000, P_GPLL0_OUT_AUX2, 1, 8, 75),
+	F(48000000, P_GPLL0_OUT_AUX2, 1, 4, 25),
+	F(64000000, P_GPLL0_OUT_AUX2, 1, 16, 75),
+	F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),
+	F(80000000, P_GPLL0_OUT_AUX2, 1, 4, 15),
+	F(96000000, P_GPLL0_OUT_AUX2, 1, 8, 25),
+	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
+	F(102400000, P_GPLL0_OUT_AUX2, 1, 128, 375),
+	F(112000000, P_GPLL0_OUT_AUX2, 1, 28, 75),
+	F(117964800, P_GPLL0_OUT_AUX2, 1, 6144, 15625),
+	F(120000000, P_GPLL0_OUT_AUX2, 2.5, 0, 0),
+	F(128000000, P_GPLL6_OUT_MAIN, 3, 0, 0),
+	{ }
+};
+
+static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
+	.name = "gcc_qupv3_wrap0_s0_clk_src",
+	.parent_names = gcc_parent_names_1,
+	.num_parents = 5,
+	.ops = &clk_rcg2_ops,
+	.vdd_class = &vdd_cx,
+	.num_rate_max = VDD_NUM,
+	.rate_max = (unsigned long[VDD_NUM]) {
+		[VDD_LOWER] = 75000000,
+		[VDD_LOW] = 100000000,
+		[VDD_NOMINAL] = 128000000},
+};
+
+static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
+	.cmd_rcgr = 0x1f148,
+	.mnd_width = 16,
+	.hid_width = 5,
+	.parent_map = gcc_parent_map_1,
+	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
+};
+
+static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
+	.name = "gcc_qupv3_wrap0_s1_clk_src",
+	.parent_names = gcc_parent_names_1,
+	.num_parents = 5,
+	.ops = &clk_rcg2_ops,
+	.vdd_class = &vdd_cx,
+	.num_rate_max = VDD_NUM,
+	.rate_max = (unsigned long[VDD_NUM]) {
+		[VDD_LOWER] = 75000000,
+		[VDD_LOW] = 100000000,
+		[VDD_NOMINAL] = 128000000},
+};
+
+static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
+	.cmd_rcgr = 0x1f278,
+	.mnd_width = 16,
+	.hid_width = 5,
+	.parent_map = gcc_parent_map_1,
+	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
+};
+
+static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
+	.name = "gcc_qupv3_wrap0_s2_clk_src",
+	.parent_names = gcc_parent_names_1,
+	.num_parents = 5,
+	.ops = &clk_rcg2_ops,
+	.vdd_class = &vdd_cx,
+	.num_rate_max = VDD_NUM,
+	.rate_max = (unsigned long[VDD_NUM]) {
+		[VDD_LOWER] = 75000000,
+		[VDD_LOW] = 100000000,
+		[VDD_NOMINAL] = 128000000},
+};
+
+static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
+	.cmd_rcgr = 0x1f3a8,
+	.mnd_width = 16,
+	.hid_width = 5,
+	.parent_map = gcc_parent_map_1,
+	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
+};
+
+static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
+	.name = "gcc_qupv3_wrap0_s3_clk_src",
+	.parent_names = gcc_parent_names_1,
+	.num_parents = 5,
+	.ops = &clk_rcg2_ops,
+	.vdd_class = &vdd_cx,
+	.num_rate_max = VDD_NUM,
+	.rate_max = (unsigned long[VDD_NUM]) {
+		[VDD_LOWER] = 75000000,
+		[VDD_LOW] = 100000000,
+		[VDD_NOMINAL] = 128000000},
+};
+
+static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
+	.cmd_rcgr = 0x1f4d8,
+	.mnd_width = 16,
+	.hid_width = 5,
+	.parent_map = gcc_parent_map_1,
+	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
+};
+
+static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
+	.name = "gcc_qupv3_wrap0_s4_clk_src",
+	.parent_names = gcc_parent_names_1,
+	.num_parents = 5,
+	.ops = &clk_rcg2_ops,
+	.vdd_class = &vdd_cx,
+	.num_rate_max = VDD_NUM,
+	.rate_max = (unsigned long[VDD_NUM]) {
+		[VDD_LOWER] = 75000000,
+		[VDD_LOW] = 100000000,
+		[VDD_NOMINAL] = 128000000},
+};
+
+static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
+	.cmd_rcgr = 0x1f608,
+	.mnd_width = 16,
+	.hid_width = 5,
+	.parent_map = gcc_parent_map_1,
+	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
+};
+
+static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {
+	.name = "gcc_qupv3_wrap0_s5_clk_src",
+	.parent_names = gcc_parent_names_1,
+	.num_parents = 5,
+	.ops = &clk_rcg2_ops,
+	.vdd_class = &vdd_cx,
+	.num_rate_max = VDD_NUM,
+	.rate_max = (unsigned long[VDD_NUM]) {
+		[VDD_LOWER] = 75000000,
+		[VDD_LOW] = 100000000,
+		[VDD_NOMINAL] = 128000000},
+};
+
+static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
+	.cmd_rcgr = 0x1f738,
+	.mnd_width = 16,
+	.hid_width = 5,
+	.parent_map = gcc_parent_map_1,
+	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,
+};
+
+static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = {
+	F(144000, P_BI_TCXO, 16, 3, 25),
+	F(400000, P_BI_TCXO, 12, 1, 4),
+	F(20000000, P_GPLL0_OUT_AUX2, 5, 1, 3),
+	F(25000000, P_GPLL0_OUT_AUX2, 6, 1, 2),
+	F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
+	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
+	F(192000000, P_GPLL6_OUT_MAIN, 2, 0, 0),
+	F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
+	{ }
+};
+
+static struct clk_rcg2 gcc_sdcc1_apps_clk_src = {
+	.cmd_rcgr = 0x38028,
+	.mnd_width = 8,
+	.hid_width = 5,
+	.parent_map = gcc_parent_map_1,
+	.freq_tbl = ftbl_gcc_sdcc1_apps_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "gcc_sdcc1_apps_clk_src",
+		.parent_names = gcc_parent_names_1,
+		.num_parents = 5,
+		.ops = &clk_rcg2_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_LOWER] = 100000000,
+			[VDD_LOW_L1] = 200000000},
+	},
+};
+
+static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = {
+	F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),
+	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
+	F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0),
+	F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
+	F(300000000, P_GPLL0_OUT_AUX2, 1, 0, 0),
+	{ }
+};
+
+static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = {
+	.cmd_rcgr = 0x38010,
+	.mnd_width = 0,
+	.hid_width = 5,
+	.parent_map = gcc_parent_map_0,
+	.freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "gcc_sdcc1_ice_core_clk_src",
+		.parent_names = gcc_parent_names_0,
+		.num_parents = 4,
+		.ops = &clk_rcg2_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_LOWER] = 100000000,
+			[VDD_LOW] = 150000000,
+			[VDD_LOW_L1] = 300000000},
+	},
+};
+
+static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
+	F(400000, P_BI_TCXO, 12, 1, 4),
+	F(19200000, P_BI_TCXO, 1, 0, 0),
+	F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0),
+	F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
+	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
+	F(202000000, P_GPLL7_OUT_MAIN, 4, 0, 0),
+	{ }
+};
+
+static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
+	.cmd_rcgr = 0x1e00c,
+	.mnd_width = 8,
+	.hid_width = 5,
+	.parent_map = gcc_parent_map_12,
+	.freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "gcc_sdcc2_apps_clk_src",
+		.parent_names = gcc_parent_names_12,
+		.num_parents = 6,
+		.ops = &clk_rcg2_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_LOWER] = 100000000,
+			[VDD_LOW_L1] = 202000000},
+	},
+};
+
+static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
+	F(66666667, P_GPLL0_OUT_AUX2, 4.5, 0, 0),
+	F(133333333, P_GPLL0_OUT_EARLY, 4.5, 0, 0),
+	F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
+	F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
+	{ }
+};
+
+static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
+	.cmd_rcgr = 0x1a01c,
+	.mnd_width = 8,
+	.hid_width = 5,
+	.parent_map = gcc_parent_map_0,
+	.freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "gcc_usb30_prim_master_clk_src",
+		.parent_names = gcc_parent_names_0,
+		.num_parents = 4,
+		.ops = &clk_rcg2_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_LOWER] = 66666667,
+			[VDD_LOW] = 133333333,
+			[VDD_NOMINAL] = 200000000,
+			[VDD_HIGH] = 240000000},
+	},
+};
+
+static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = {
+	F(19200000, P_BI_TCXO, 1, 0, 0),
+	{ }
+};
+
+static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
+	.cmd_rcgr = 0x1a034,
+	.mnd_width = 0,
+	.hid_width = 5,
+	.parent_map = gcc_parent_map_0,
+	.freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "gcc_usb30_prim_mock_utmi_clk_src",
+		.parent_names = gcc_parent_names_0,
+		.num_parents = 4,
+		.ops = &clk_rcg2_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_LOWER] = 19200000},
+	},
+};
+
+static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
+	.cmd_rcgr = 0x1a060,
+	.mnd_width = 0,
+	.hid_width = 5,
+	.parent_map = gcc_parent_map_13,
+	.freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "gcc_usb3_prim_phy_aux_clk_src",
+		.parent_names = gcc_parent_names_13,
+		.num_parents = 3,
+		.ops = &clk_rcg2_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_LOWER] = 19200000},
+	},
+};
+
+static const struct freq_tbl ftbl_gcc_video_venus_clk_src[] = {
+	F(133333333, P_GPLL11_OUT_MAIN, 4.5, 0, 0),
+	F(240000000, P_GPLL11_OUT_MAIN, 2.5, 0, 0),
+	F(300000000, P_GPLL11_OUT_MAIN, 2, 0, 0),
+	F(384000000, P_GPLL11_OUT_MAIN, 2, 0, 0),
+	{ }
+};
+
+static struct clk_rcg2 gcc_video_venus_clk_src = {
+	.cmd_rcgr = 0x58060,
+	.mnd_width = 0,
+	.hid_width = 5,
+	.parent_map = gcc_parent_map_14,
+	.freq_tbl = ftbl_gcc_video_venus_clk_src,
+	.enable_safe_config = true,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "gcc_video_venus_clk_src",
+		.parent_names = gcc_parent_names_14,
+		.num_parents = 5,
+		.flags = CLK_SET_RATE_PARENT,
+		.ops = &clk_rcg2_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_LOWER] = 133333333,
+			[VDD_LOW] = 240000000,
+			[VDD_LOW_L1] = 300000000,
+			[VDD_NOMINAL] = 384000000},
+	},
+};
+
+static struct clk_branch gcc_ahb2phy_csi_clk = {
+	.halt_reg = 0x1d004,
+	.halt_check = BRANCH_HALT_DELAY,
+	.hwcg_reg = 0x1d004,
+	.hwcg_bit = 1,
+	.clkr = {
+		.enable_reg = 0x1d004,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_ahb2phy_csi_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_ahb2phy_usb_clk = {
+	.halt_reg = 0x1d008,
+	.halt_check = BRANCH_HALT,
+	.hwcg_reg = 0x1d008,
+	.hwcg_bit = 1,
+	.clkr = {
+		.enable_reg = 0x1d008,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_ahb2phy_usb_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_bimc_gpu_axi_clk = {
+	.halt_reg = 0x71154,
+	.halt_check = BRANCH_HALT_DELAY,
+	.hwcg_reg = 0x71154,
+	.hwcg_bit = 1,
+	.clkr = {
+		.enable_reg = 0x71154,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_bimc_gpu_axi_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_boot_rom_ahb_clk = {
+	.halt_reg = 0x23004,
+	.halt_check = BRANCH_HALT_VOTED,
+	.hwcg_reg = 0x23004,
+	.hwcg_bit = 1,
+	.clkr = {
+		.enable_reg = 0x79004,
+		.enable_mask = BIT(10),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_boot_rom_ahb_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_cam_throttle_nrt_clk = {
+	.halt_reg = 0x17070,
+	.halt_check = BRANCH_HALT_VOTED,
+	.hwcg_reg = 0x17070,
+	.hwcg_bit = 1,
+	.clkr = {
+		.enable_reg = 0x79004,
+		.enable_mask = BIT(27),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_cam_throttle_nrt_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_cam_throttle_rt_clk = {
+	.halt_reg = 0x1706c,
+	.halt_check = BRANCH_HALT_VOTED,
+	.hwcg_reg = 0x1706c,
+	.hwcg_bit = 1,
+	.clkr = {
+		.enable_reg = 0x79004,
+		.enable_mask = BIT(26),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_cam_throttle_rt_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_camera_ahb_clk = {
+	.halt_reg = 0x17008,
+	.halt_check = BRANCH_HALT_DELAY,
+	.hwcg_reg = 0x17008,
+	.hwcg_bit = 1,
+	.clkr = {
+		.enable_reg = 0x17008,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_camera_ahb_clk",
+			.flags = CLK_IS_CRITICAL,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_camera_xo_clk = {
+	.halt_reg = 0x17028,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x17028,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_camera_xo_clk",
+			.flags = CLK_IS_CRITICAL,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_camss_axi_clk = {
+	.halt_reg = 0x58044,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x58044,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_camss_axi_clk",
+			.parent_names = (const char *[]){
+				"gcc_camss_axi_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_camss_camnoc_atb_clk = {
+	.halt_reg = 0x5804c,
+	.halt_check = BRANCH_HALT_DELAY,
+	.hwcg_reg = 0x5804c,
+	.hwcg_bit = 1,
+	.clkr = {
+		.enable_reg = 0x5804c,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_camss_camnoc_atb_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_camss_camnoc_nts_xo_clk = {
+	.halt_reg = 0x58050,
+	.halt_check = BRANCH_HALT_DELAY,
+	.hwcg_reg = 0x58050,
+	.hwcg_bit = 1,
+	.clkr = {
+		.enable_reg = 0x58050,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_camss_camnoc_nts_xo_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_camss_cci_0_clk = {
+	.halt_reg = 0x56018,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x56018,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_camss_cci_0_clk",
+			.parent_names = (const char *[]){
+				"gcc_camss_cci_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_camss_cphy_0_clk = {
+	.halt_reg = 0x52088,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x52088,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_camss_cphy_0_clk",
+			.parent_names = (const char *[]){
+				"gcc_camss_tfe_cphy_rx_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_camss_cphy_1_clk = {
+	.halt_reg = 0x5208c,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x5208c,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_camss_cphy_1_clk",
+			.parent_names = (const char *[]){
+				"gcc_camss_tfe_cphy_rx_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_camss_csi0phytimer_clk = {
+	.halt_reg = 0x45018,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x45018,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_camss_csi0phytimer_clk",
+			.parent_names = (const char *[]){
+				"gcc_camss_csi0phytimer_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_camss_csi1phytimer_clk = {
+	.halt_reg = 0x45034,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x45034,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_camss_csi1phytimer_clk",
+			.parent_names = (const char *[]){
+				"gcc_camss_csi1phytimer_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_camss_mclk0_clk = {
+	.halt_reg = 0x51018,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x51018,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_camss_mclk0_clk",
+			.parent_names = (const char *[]){
+				"gcc_camss_mclk0_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_camss_mclk1_clk = {
+	.halt_reg = 0x51034,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x51034,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_camss_mclk1_clk",
+			.parent_names = (const char *[]){
+				"gcc_camss_mclk1_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_camss_mclk2_clk = {
+	.halt_reg = 0x51050,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x51050,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_camss_mclk2_clk",
+			.parent_names = (const char *[]){
+				"gcc_camss_mclk2_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_camss_mclk3_clk = {
+	.halt_reg = 0x5106c,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x5106c,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_camss_mclk3_clk",
+			.parent_names = (const char *[]){
+				"gcc_camss_mclk3_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_camss_nrt_axi_clk = {
+	.halt_reg = 0x58054,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x58054,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_camss_nrt_axi_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_camss_ope_ahb_clk = {
+	.halt_reg = 0x5503c,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x5503c,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_camss_ope_ahb_clk",
+			.parent_names = (const char *[]){
+				"gcc_camss_ope_ahb_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_camss_ope_clk = {
+	.halt_reg = 0x5501c,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x5501c,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_camss_ope_clk",
+			.parent_names = (const char *[]){
+				"gcc_camss_ope_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_camss_rt_axi_clk = {
+	.halt_reg = 0x5805c,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x5805c,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_camss_rt_axi_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_camss_tfe_0_clk = {
+	.halt_reg = 0x5201c,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x5201c,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_camss_tfe_0_clk",
+			.parent_names = (const char *[]){
+				"gcc_camss_tfe_0_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_camss_tfe_0_cphy_rx_clk = {
+	.halt_reg = 0x5207c,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x5207c,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_camss_tfe_0_cphy_rx_clk",
+			.parent_names = (const char *[]){
+				"gcc_camss_tfe_cphy_rx_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_camss_tfe_0_csid_clk = {
+	.halt_reg = 0x520ac,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x520ac,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_camss_tfe_0_csid_clk",
+			.parent_names = (const char *[]){
+				"gcc_camss_tfe_0_csid_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_camss_tfe_1_clk = {
+	.halt_reg = 0x5203c,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x5203c,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_camss_tfe_1_clk",
+			.parent_names = (const char *[]){
+				"gcc_camss_tfe_1_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_camss_tfe_1_cphy_rx_clk = {
+	.halt_reg = 0x52080,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x52080,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_camss_tfe_1_cphy_rx_clk",
+			.parent_names = (const char *[]){
+				"gcc_camss_tfe_cphy_rx_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_camss_tfe_1_csid_clk = {
+	.halt_reg = 0x520cc,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x520cc,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_camss_tfe_1_csid_clk",
+			.parent_names = (const char *[]){
+				"gcc_camss_tfe_1_csid_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_camss_top_ahb_clk = {
+	.halt_reg = 0x58028,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x58028,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_camss_top_ahb_clk",
+			.parent_names = (const char *[]){
+				"gcc_camss_top_ahb_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
+	.halt_reg = 0x1a084,
+	.halt_check = BRANCH_HALT,
+	.hwcg_reg = 0x1a084,
+	.hwcg_bit = 1,
+	.clkr = {
+		.enable_reg = 0x1a084,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_cfg_noc_usb3_prim_axi_clk",
+			.parent_names = (const char *[]){
+				"gcc_usb30_prim_master_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_disp_ahb_clk = {
+	.halt_reg = 0x1700c,
+	.halt_check = BRANCH_HALT,
+	.hwcg_reg = 0x1700c,
+	.hwcg_bit = 1,
+	.clkr = {
+		.enable_reg = 0x1700c,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_disp_ahb_clk",
+			.flags = CLK_IS_CRITICAL,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_regmap_div gcc_disp_gpll0_clk_src = {
+	.reg = 0x17058,
+	.shift = 0,
+	.width = 2,
+	.clkr.hw.init = &(struct clk_init_data) {
+		.name = "gcc_disp_gpll0_clk_src",
+		.parent_names =
+			(const char *[]){ "gpll0" },
+		.num_parents = 1,
+		.ops = &clk_regmap_div_ops,
+	},
+};
+
+static struct clk_branch gcc_disp_gpll0_div_clk_src = {
+	.halt_check = BRANCH_HALT_DELAY,
+	.clkr = {
+		.enable_reg = 0x79004,
+		.enable_mask = BIT(20),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_disp_gpll0_div_clk_src",
+			.parent_names = (const char *[]){
+				"gcc_disp_gpll0_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_disp_hf_axi_clk = {
+	.halt_reg = 0x17020,
+	.halt_check = BRANCH_HALT,
+	.hwcg_reg = 0x17020,
+	.hwcg_bit = 1,
+	.clkr = {
+		.enable_reg = 0x17020,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_disp_hf_axi_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_disp_throttle_core_clk = {
+	.halt_reg = 0x17064,
+	.halt_check = BRANCH_HALT_VOTED,
+	.hwcg_reg = 0x17064,
+	.hwcg_bit = 1,
+	.clkr = {
+		.enable_reg = 0x7900c,
+		.enable_mask = BIT(5),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_disp_throttle_core_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_disp_xo_clk = {
+	.halt_reg = 0x1702c,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x1702c,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_disp_xo_clk",
+			.flags = CLK_IS_CRITICAL,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_gp1_clk = {
+	.halt_reg = 0x4d000,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x4d000,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_gp1_clk",
+			.parent_names = (const char *[]){
+				"gcc_gp1_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_gp2_clk = {
+	.halt_reg = 0x4e000,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x4e000,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_gp2_clk",
+			.parent_names = (const char *[]){
+				"gcc_gp2_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_gp3_clk = {
+	.halt_reg = 0x4f000,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x4f000,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_gp3_clk",
+			.parent_names = (const char *[]){
+				"gcc_gp3_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_gpu_cfg_ahb_clk = {
+	.halt_reg = 0x36004,
+	.halt_check = BRANCH_HALT,
+	.hwcg_reg = 0x36004,
+	.hwcg_bit = 1,
+	.clkr = {
+		.enable_reg = 0x36004,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_gpu_cfg_ahb_clk",
+			.flags = CLK_IS_CRITICAL,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_gpu_gpll0_clk_src = {
+	.halt_check = BRANCH_HALT_DELAY,
+	.clkr = {
+		.enable_reg = 0x79004,
+		.enable_mask = BIT(15),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_gpu_gpll0_clk_src",
+			.parent_names = (const char *[]){
+				"gpll0",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
+	.halt_check = BRANCH_HALT_DELAY,
+	.clkr = {
+		.enable_reg = 0x79004,
+		.enable_mask = BIT(16),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_gpu_gpll0_div_clk_src",
+			.parent_names = (const char *[]){
+				"gpll0_out_aux2",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_gpu_iref_clk = {
+	.halt_reg = 0x36100,
+	.halt_check = BRANCH_HALT_DELAY,
+	.clkr = {
+		.enable_reg = 0x36100,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_gpu_iref_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
+	.halt_reg = 0x3600c,
+	.halt_check = BRANCH_HALT,
+	.hwcg_reg = 0x3600c,
+	.hwcg_bit = 1,
+	.clkr = {
+		.enable_reg = 0x3600c,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_gpu_memnoc_gfx_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
+	.halt_reg = 0x36018,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x36018,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_gpu_snoc_dvm_gfx_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_gpu_throttle_core_clk = {
+	.halt_reg = 0x36048,
+	.halt_check = BRANCH_HALT_VOTED,
+	.hwcg_reg = 0x36048,
+	.hwcg_bit = 1,
+	.clkr = {
+		.enable_reg = 0x79004,
+		.enable_mask = BIT(31),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_gpu_throttle_core_clk",
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_gpu_throttle_xo_clk = {
+	.halt_reg = 0x36044,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x36044,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_gpu_throttle_xo_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_pdm2_clk = {
+	.halt_reg = 0x2000c,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x2000c,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_pdm2_clk",
+			.parent_names = (const char *[]){
+				"gcc_pdm2_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_pdm_ahb_clk = {
+	.halt_reg = 0x20004,
+	.halt_check = BRANCH_HALT,
+	.hwcg_reg = 0x20004,
+	.hwcg_bit = 1,
+	.clkr = {
+		.enable_reg = 0x20004,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_pdm_ahb_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_pdm_xo4_clk = {
+	.halt_reg = 0x20008,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x20008,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_pdm_xo4_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_pwm0_xo512_clk = {
+	.halt_reg = 0x2002c,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x2002c,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_pwm0_xo512_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
+	.halt_reg = 0x17014,
+	.halt_check = BRANCH_HALT_VOTED,
+	.hwcg_reg = 0x17014,
+	.hwcg_bit = 1,
+	.clkr = {
+		.enable_reg = 0x7900c,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_qmip_camera_nrt_ahb_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {
+	.halt_reg = 0x17060,
+	.halt_check = BRANCH_HALT_VOTED,
+	.hwcg_reg = 0x17060,
+	.hwcg_bit = 1,
+	.clkr = {
+		.enable_reg = 0x7900c,
+		.enable_mask = BIT(2),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_qmip_camera_rt_ahb_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_qmip_disp_ahb_clk = {
+	.halt_reg = 0x17018,
+	.halt_check = BRANCH_HALT_VOTED,
+	.hwcg_reg = 0x17018,
+	.hwcg_bit = 1,
+	.clkr = {
+		.enable_reg = 0x7900c,
+		.enable_mask = BIT(1),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_qmip_disp_ahb_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_qmip_gpu_cfg_ahb_clk = {
+	.halt_reg = 0x36040,
+	.halt_check = BRANCH_HALT_VOTED,
+	.hwcg_reg = 0x36040,
+	.hwcg_bit = 1,
+	.clkr = {
+		.enable_reg = 0x7900c,
+		.enable_mask = BIT(4),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_qmip_gpu_cfg_ahb_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
+	.halt_reg = 0x17010,
+	.halt_check = BRANCH_HALT_VOTED,
+	.hwcg_reg = 0x17010,
+	.hwcg_bit = 1,
+	.clkr = {
+		.enable_reg = 0x79004,
+		.enable_mask = BIT(25),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_qmip_video_vcodec_ahb_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {
+	.halt_reg = 0x1f014,
+	.halt_check = BRANCH_HALT_VOTED,
+	.clkr = {
+		.enable_reg = 0x7900c,
+		.enable_mask = BIT(9),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_qupv3_wrap0_core_2x_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_qupv3_wrap0_core_clk = {
+	.halt_reg = 0x1f00c,
+	.halt_check = BRANCH_HALT_VOTED,
+	.clkr = {
+		.enable_reg = 0x7900c,
+		.enable_mask = BIT(8),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_qupv3_wrap0_core_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
+	.halt_reg = 0x1f144,
+	.halt_check = BRANCH_HALT_VOTED,
+	.clkr = {
+		.enable_reg = 0x7900c,
+		.enable_mask = BIT(10),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_qupv3_wrap0_s0_clk",
+			.parent_names = (const char *[]){
+				"gcc_qupv3_wrap0_s0_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
+	.halt_reg = 0x1f274,
+	.halt_check = BRANCH_HALT_VOTED,
+	.clkr = {
+		.enable_reg = 0x7900c,
+		.enable_mask = BIT(11),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_qupv3_wrap0_s1_clk",
+			.parent_names = (const char *[]){
+				"gcc_qupv3_wrap0_s1_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
+	.halt_reg = 0x1f3a4,
+	.halt_check = BRANCH_HALT_VOTED,
+	.clkr = {
+		.enable_reg = 0x7900c,
+		.enable_mask = BIT(12),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_qupv3_wrap0_s2_clk",
+			.parent_names = (const char *[]){
+				"gcc_qupv3_wrap0_s2_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
+	.halt_reg = 0x1f4d4,
+	.halt_check = BRANCH_HALT_VOTED,
+	.clkr = {
+		.enable_reg = 0x7900c,
+		.enable_mask = BIT(13),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_qupv3_wrap0_s3_clk",
+			.parent_names = (const char *[]){
+				"gcc_qupv3_wrap0_s3_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
+	.halt_reg = 0x1f604,
+	.halt_check = BRANCH_HALT_VOTED,
+	.clkr = {
+		.enable_reg = 0x7900c,
+		.enable_mask = BIT(14),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_qupv3_wrap0_s4_clk",
+			.parent_names = (const char *[]){
+				"gcc_qupv3_wrap0_s4_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
+	.halt_reg = 0x1f734,
+	.halt_check = BRANCH_HALT_VOTED,
+	.clkr = {
+		.enable_reg = 0x7900c,
+		.enable_mask = BIT(15),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_qupv3_wrap0_s5_clk",
+			.parent_names = (const char *[]){
+				"gcc_qupv3_wrap0_s5_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
+	.halt_reg = 0x1f004,
+	.halt_check = BRANCH_HALT_VOTED,
+	.hwcg_reg = 0x1f004,
+	.hwcg_bit = 1,
+	.clkr = {
+		.enable_reg = 0x7900c,
+		.enable_mask = BIT(6),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_qupv3_wrap_0_m_ahb_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
+	.halt_reg = 0x1f008,
+	.halt_check = BRANCH_HALT_VOTED,
+	.hwcg_reg = 0x1f008,
+	.hwcg_bit = 1,
+	.clkr = {
+		.enable_reg = 0x7900c,
+		.enable_mask = BIT(7),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_qupv3_wrap_0_s_ahb_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_sdcc1_ahb_clk = {
+	.halt_reg = 0x38008,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x38008,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_sdcc1_ahb_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_sdcc1_apps_clk = {
+	.halt_reg = 0x38004,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x38004,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_sdcc1_apps_clk",
+			.parent_names = (const char *[]){
+				"gcc_sdcc1_apps_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT | CLK_ENABLE_HAND_OFF,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_sdcc1_ice_core_clk = {
+	.halt_reg = 0x3800c,
+	.halt_check = BRANCH_HALT,
+	.hwcg_reg = 0x3800c,
+	.hwcg_bit = 1,
+	.clkr = {
+		.enable_reg = 0x3800c,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_sdcc1_ice_core_clk",
+			.parent_names = (const char *[]){
+				"gcc_sdcc1_ice_core_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_sdcc2_ahb_clk = {
+	.halt_reg = 0x1e008,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x1e008,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_sdcc2_ahb_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_sdcc2_apps_clk = {
+	.halt_reg = 0x1e004,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x1e004,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_sdcc2_apps_clk",
+			.parent_names = (const char *[]){
+				"gcc_sdcc2_apps_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = {
+	.halt_reg = 0x2b06c,
+	.halt_check = BRANCH_HALT_VOTED,
+	.hwcg_reg = 0x2b06c,
+	.hwcg_bit = 1,
+	.clkr = {
+		.enable_reg = 0x79004,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_sys_noc_cpuss_ahb_clk",
+			.flags = CLK_IS_CRITICAL,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_sys_noc_usb3_prim_axi_clk = {
+	.halt_reg = 0x1a080,
+	.halt_check = BRANCH_HALT,
+	.hwcg_reg = 0x1a080,
+	.hwcg_bit = 1,
+	.clkr = {
+		.enable_reg = 0x1a080,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_sys_noc_usb3_prim_axi_clk",
+			.parent_names = (const char *[]){
+				"gcc_usb30_prim_master_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_usb30_prim_master_clk = {
+	.halt_reg = 0x1a010,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x1a010,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_usb30_prim_master_clk",
+			.parent_names = (const char *[]){
+				"gcc_usb30_prim_master_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
+	.halt_reg = 0x1a018,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x1a018,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_usb30_prim_mock_utmi_clk",
+			.parent_names = (const char *[]){
+				"gcc_usb30_prim_mock_utmi_postdiv",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_usb30_prim_sleep_clk = {
+	.halt_reg = 0x1a014,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x1a014,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_usb30_prim_sleep_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_usb3_prim_clkref_clk = {
+	.halt_reg = 0x9f000,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x9f000,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_usb3_prim_clkref_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
+	.halt_reg = 0x1a054,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x1a054,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_usb3_prim_phy_com_aux_clk",
+			.parent_names = (const char *[]){
+				"gcc_usb3_prim_phy_aux_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
+	.halt_reg = 0x1a058,
+	.halt_check = BRANCH_HALT_SKIP,
+	.hwcg_reg = 0x1a058,
+	.hwcg_bit = 1,
+	.clkr = {
+		.enable_reg = 0x1a058,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_usb3_prim_phy_pipe_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_vcodec0_axi_clk = {
+	.halt_reg = 0x6e008,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x6e008,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_vcodec0_axi_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_venus_ahb_clk = {
+	.halt_reg = 0x6e010,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x6e010,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_venus_ahb_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_venus_ctl_axi_clk = {
+	.halt_reg = 0x6e004,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x6e004,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_venus_ctl_axi_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_video_ahb_clk = {
+	.halt_reg = 0x17004,
+	.halt_check = BRANCH_HALT,
+	.hwcg_reg = 0x17004,
+	.hwcg_bit = 1,
+	.clkr = {
+		.enable_reg = 0x17004,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_video_ahb_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_video_axi0_clk = {
+	.halt_reg = 0x1701c,
+	.halt_check = BRANCH_HALT,
+	.hwcg_reg = 0x1701c,
+	.hwcg_bit = 1,
+	.clkr = {
+		.enable_reg = 0x1701c,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_video_axi0_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_video_throttle_core_clk = {
+	.halt_reg = 0x17068,
+	.halt_check = BRANCH_HALT_VOTED,
+	.hwcg_reg = 0x17068,
+	.hwcg_bit = 1,
+	.clkr = {
+		.enable_reg = 0x79004,
+		.enable_mask = BIT(28),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_video_throttle_core_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_video_vcodec0_sys_clk = {
+	.halt_reg = 0x580a4,
+	.halt_check = BRANCH_HALT_DELAY,
+	.hwcg_reg = 0x580a4,
+	.hwcg_bit = 1,
+	.clkr = {
+		.enable_reg = 0x580a4,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_video_vcodec0_sys_clk",
+			.parent_names = (const char *[]){
+				"gcc_video_venus_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_video_venus_ctl_clk = {
+	.halt_reg = 0x5808c,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x5808c,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_video_venus_ctl_clk",
+			.parent_names = (const char *[]){
+				"gcc_video_venus_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gcc_video_xo_clk = {
+	.halt_reg = 0x17024,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x17024,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gcc_video_xo_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_regmap *gcc_scuba_clocks[] = {
+	[GCC_AHB2PHY_CSI_CLK] = &gcc_ahb2phy_csi_clk.clkr,
+	[GCC_AHB2PHY_USB_CLK] = &gcc_ahb2phy_usb_clk.clkr,
+	[GCC_BIMC_GPU_AXI_CLK] = &gcc_bimc_gpu_axi_clk.clkr,
+	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
+	[GCC_CAM_THROTTLE_NRT_CLK] = &gcc_cam_throttle_nrt_clk.clkr,
+	[GCC_CAM_THROTTLE_RT_CLK] = &gcc_cam_throttle_rt_clk.clkr,
+	[GCC_CAMERA_AHB_CLK] = &gcc_camera_ahb_clk.clkr,
+	[GCC_CAMERA_XO_CLK] = &gcc_camera_xo_clk.clkr,
+	[GCC_CAMSS_AXI_CLK] = &gcc_camss_axi_clk.clkr,
+	[GCC_CAMSS_AXI_CLK_SRC] = &gcc_camss_axi_clk_src.clkr,
+	[GCC_CAMSS_CAMNOC_ATB_CLK] = &gcc_camss_camnoc_atb_clk.clkr,
+	[GCC_CAMSS_CAMNOC_NTS_XO_CLK] = &gcc_camss_camnoc_nts_xo_clk.clkr,
+	[GCC_CAMSS_CCI_0_CLK] = &gcc_camss_cci_0_clk.clkr,
+	[GCC_CAMSS_CCI_CLK_SRC] = &gcc_camss_cci_clk_src.clkr,
+	[GCC_CAMSS_CPHY_0_CLK] = &gcc_camss_cphy_0_clk.clkr,
+	[GCC_CAMSS_CPHY_1_CLK] = &gcc_camss_cphy_1_clk.clkr,
+	[GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,
+	[GCC_CAMSS_CSI0PHYTIMER_CLK_SRC] = &gcc_camss_csi0phytimer_clk_src.clkr,
+	[GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,
+	[GCC_CAMSS_CSI1PHYTIMER_CLK_SRC] = &gcc_camss_csi1phytimer_clk_src.clkr,
+	[GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,
+	[GCC_CAMSS_MCLK0_CLK_SRC] = &gcc_camss_mclk0_clk_src.clkr,
+	[GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,
+	[GCC_CAMSS_MCLK1_CLK_SRC] = &gcc_camss_mclk1_clk_src.clkr,
+	[GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr,
+	[GCC_CAMSS_MCLK2_CLK_SRC] = &gcc_camss_mclk2_clk_src.clkr,
+	[GCC_CAMSS_MCLK3_CLK] = &gcc_camss_mclk3_clk.clkr,
+	[GCC_CAMSS_MCLK3_CLK_SRC] = &gcc_camss_mclk3_clk_src.clkr,
+	[GCC_CAMSS_NRT_AXI_CLK] = &gcc_camss_nrt_axi_clk.clkr,
+	[GCC_CAMSS_OPE_AHB_CLK] = &gcc_camss_ope_ahb_clk.clkr,
+	[GCC_CAMSS_OPE_AHB_CLK_SRC] = &gcc_camss_ope_ahb_clk_src.clkr,
+	[GCC_CAMSS_OPE_CLK] = &gcc_camss_ope_clk.clkr,
+	[GCC_CAMSS_OPE_CLK_SRC] = &gcc_camss_ope_clk_src.clkr,
+	[GCC_CAMSS_RT_AXI_CLK] = &gcc_camss_rt_axi_clk.clkr,
+	[GCC_CAMSS_TFE_0_CLK] = &gcc_camss_tfe_0_clk.clkr,
+	[GCC_CAMSS_TFE_0_CLK_SRC] = &gcc_camss_tfe_0_clk_src.clkr,
+	[GCC_CAMSS_TFE_0_CPHY_RX_CLK] = &gcc_camss_tfe_0_cphy_rx_clk.clkr,
+	[GCC_CAMSS_TFE_0_CSID_CLK] = &gcc_camss_tfe_0_csid_clk.clkr,
+	[GCC_CAMSS_TFE_0_CSID_CLK_SRC] = &gcc_camss_tfe_0_csid_clk_src.clkr,
+	[GCC_CAMSS_TFE_1_CLK] = &gcc_camss_tfe_1_clk.clkr,
+	[GCC_CAMSS_TFE_1_CLK_SRC] = &gcc_camss_tfe_1_clk_src.clkr,
+	[GCC_CAMSS_TFE_1_CPHY_RX_CLK] = &gcc_camss_tfe_1_cphy_rx_clk.clkr,
+	[GCC_CAMSS_TFE_1_CSID_CLK] = &gcc_camss_tfe_1_csid_clk.clkr,
+	[GCC_CAMSS_TFE_1_CSID_CLK_SRC] = &gcc_camss_tfe_1_csid_clk_src.clkr,
+	[GCC_CAMSS_TFE_CPHY_RX_CLK_SRC] = &gcc_camss_tfe_cphy_rx_clk_src.clkr,
+	[GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,
+	[GCC_CAMSS_TOP_AHB_CLK_SRC] = &gcc_camss_top_ahb_clk_src.clkr,
+	[GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
+	[GCC_DISP_AHB_CLK] = &gcc_disp_ahb_clk.clkr,
+	[GCC_DISP_GPLL0_CLK_SRC] = &gcc_disp_gpll0_clk_src.clkr,
+	[GCC_DISP_GPLL0_DIV_CLK_SRC] = &gcc_disp_gpll0_div_clk_src.clkr,
+	[GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
+	[GCC_DISP_THROTTLE_CORE_CLK] = &gcc_disp_throttle_core_clk.clkr,
+	[GCC_DISP_XO_CLK] = &gcc_disp_xo_clk.clkr,
+	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
+	[GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
+	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
+	[GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
+	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
+	[GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
+	[GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr,
+	[GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
+	[GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
+	[GCC_GPU_IREF_CLK] = &gcc_gpu_iref_clk.clkr,
+	[GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
+	[GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
+	[GCC_GPU_THROTTLE_CORE_CLK] = &gcc_gpu_throttle_core_clk.clkr,
+	[GCC_GPU_THROTTLE_XO_CLK] = &gcc_gpu_throttle_xo_clk.clkr,
+	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
+	[GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
+	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
+	[GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
+	[GCC_PWM0_XO512_CLK] = &gcc_pwm0_xo512_clk.clkr,
+	[GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
+	[GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,
+	[GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
+	[GCC_QMIP_GPU_CFG_AHB_CLK] = &gcc_qmip_gpu_cfg_ahb_clk.clkr,
+	[GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
+	[GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,
+	[GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,
+	[GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
+	[GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
+	[GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
+	[GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
+	[GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
+	[GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
+	[GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
+	[GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
+	[GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
+	[GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
+	[GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
+	[GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
+	[GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
+	[GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
+	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
+	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
+	[GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr,
+	[GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
+	[GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr,
+	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
+	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
+	[GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
+	[GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr,
+	[GCC_SYS_NOC_USB3_PRIM_AXI_CLK] = &gcc_sys_noc_usb3_prim_axi_clk.clkr,
+	[GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
+	[GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
+	[GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
+	[GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] =
+		&gcc_usb30_prim_mock_utmi_clk_src.clkr,
+	[GCC_USB30_PRIM_MOCK_UTMI_POSTDIV] =
+		&gcc_usb30_prim_mock_utmi_postdiv.clkr,
+	[GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
+	[GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr,
+	[GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
+	[GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
+	[GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
+	[GCC_VCODEC0_AXI_CLK] = &gcc_vcodec0_axi_clk.clkr,
+	[GCC_VENUS_AHB_CLK] = &gcc_venus_ahb_clk.clkr,
+	[GCC_VENUS_CTL_AXI_CLK] = &gcc_venus_ctl_axi_clk.clkr,
+	[GCC_VIDEO_AHB_CLK] = &gcc_video_ahb_clk.clkr,
+	[GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
+	[GCC_VIDEO_THROTTLE_CORE_CLK] = &gcc_video_throttle_core_clk.clkr,
+	[GCC_VIDEO_VCODEC0_SYS_CLK] = &gcc_video_vcodec0_sys_clk.clkr,
+	[GCC_VIDEO_VENUS_CLK_SRC] = &gcc_video_venus_clk_src.clkr,
+	[GCC_VIDEO_VENUS_CTL_CLK] = &gcc_video_venus_ctl_clk.clkr,
+	[GCC_VIDEO_XO_CLK] = &gcc_video_xo_clk.clkr,
+	[GPLL0] = &gpll0.clkr,
+	[GPLL0_OUT_AUX2] = &gpll0_out_aux2.clkr,
+	[GPLL1] = &gpll1.clkr,
+	[GPLL10] = &gpll10.clkr,
+	[GPLL11] = &gpll11.clkr,
+	[GPLL3] = &gpll3.clkr,
+	[GPLL3_OUT_MAIN] = &gpll3_out_main.clkr,
+	[GPLL4] = &gpll4.clkr,
+	[GPLL5] = &gpll5.clkr,
+	[GPLL6] = &gpll6.clkr,
+	[GPLL6_OUT_MAIN] = &gpll6_out_main.clkr,
+	[GPLL7] = &gpll7.clkr,
+	[GPLL8] = &gpll8.clkr,
+	[GPLL8_OUT_MAIN] = &gpll8_out_main.clkr,
+	[GPLL9] = &gpll9.clkr,
+	[GPLL9_OUT_MAIN] = &gpll9_out_main.clkr,
+};
+
+static const struct qcom_reset_map gcc_scuba_resets[] = {
+	[GCC_CAMSS_OPE_BCR] = { 0x55000 },
+	[GCC_CAMSS_TFE_BCR] = { 0x52000 },
+	[GCC_CAMSS_TOP_BCR] = { 0x58000 },
+	[GCC_GPU_BCR] = { 0x36000 },
+	[GCC_MMSS_BCR] = { 0x17000 },
+	[GCC_PDM_BCR] = { 0x20000 },
+	[GCC_QUPV3_WRAPPER_0_BCR] = { 0x1f000 },
+	[GCC_QUSB2PHY_PRIM_BCR] = { 0x1c000 },
+	[GCC_SDCC1_BCR] = { 0x38000 },
+	[GCC_SDCC2_BCR] = { 0x1e000 },
+	[GCC_USB30_PRIM_BCR] = { 0x1a000 },
+	[GCC_USB3_PHY_PRIM_SP0_BCR] = { 0x1b000 },
+	[GCC_USB3PHY_PHY_PRIM_SP0_BCR] = { 0x1b008 },
+	[GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x1d000 },
+	[GCC_VCODEC0_BCR] = { 0x58094 },
+	[GCC_VENUS_BCR] = { 0x58078 },
+	[GCC_VIDEO_INTERFACE_BCR] = { 0x6e000 },
+};
+
+static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
+	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
+	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
+	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
+	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
+	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
+	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),
+};
+
+static const struct regmap_config gcc_scuba_regmap_config = {
+	.reg_bits = 32,
+	.reg_stride = 4,
+	.val_bits = 32,
+	.max_register = 0xc7000,
+	.fast_io = true,
+};
+
+static const struct qcom_cc_desc gcc_scuba_desc = {
+	.config = &gcc_scuba_regmap_config,
+	.clks = gcc_scuba_clocks,
+	.num_clks = ARRAY_SIZE(gcc_scuba_clocks),
+	.resets = gcc_scuba_resets,
+	.num_resets = ARRAY_SIZE(gcc_scuba_resets),
+};
+
+static const struct of_device_id gcc_scuba_match_table[] = {
+	{ .compatible = "qcom,scuba-gcc" },
+	{ }
+};
+MODULE_DEVICE_TABLE(of, gcc_scuba_match_table);
+
+static int gcc_scuba_probe(struct platform_device *pdev)
+{
+	struct regmap *regmap;
+	int ret;
+
+	regmap = qcom_cc_map(pdev, &gcc_scuba_desc);
+	if (IS_ERR(regmap))
+		return PTR_ERR(regmap);
+
+	vdd_cx.regulator[0] = devm_regulator_get(&pdev->dev, "vdd_cx");
+	if (IS_ERR(vdd_cx.regulator[0])) {
+		if (PTR_ERR(vdd_cx.regulator[0]) != -EPROBE_DEFER)
+			dev_err(&pdev->dev, "Unable to get vdd_cx regulator\n");
+		return PTR_ERR(vdd_cx.regulator[0]);
+	}
+
+	vdd_mx.regulator[0] = devm_regulator_get(&pdev->dev, "vdd_mx");
+	if (IS_ERR(vdd_mx.regulator[0])) {
+		if (PTR_ERR(vdd_mx.regulator[0]) != -EPROBE_DEFER)
+			dev_err(&pdev->dev, "Unable to get vdd_mx regulator\n");
+		return PTR_ERR(vdd_mx.regulator[0]);
+	}
+
+	ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
+						ARRAY_SIZE(gcc_dfs_clocks));
+	if (ret)
+		return ret;
+
+	clk_alpha_pll_configure(&gpll10, regmap, &gpll10_config);
+	clk_alpha_pll_configure(&gpll11, regmap, &gpll11_config);
+	clk_alpha_pll_configure(&gpll8, regmap, &gpll8_config);
+	clk_alpha_pll_configure(&gpll9, regmap, &gpll9_config);
+
+	ret = qcom_cc_really_probe(pdev, &gcc_scuba_desc, regmap);
+	if (ret) {
+		dev_err(&pdev->dev, "Failed to register GCC clocks\n");
+		return ret;
+	}
+
+	dev_info(&pdev->dev, "Registered GCC clocks\n");
+
+	return ret;
+}
+
+static struct platform_driver gcc_scuba_driver = {
+	.probe = gcc_scuba_probe,
+	.driver = {
+		.name = "gcc-scuba",
+		.of_match_table = gcc_scuba_match_table,
+	},
+};
+
+static int __init gcc_scuba_init(void)
+{
+	return platform_driver_register(&gcc_scuba_driver);
+}
+subsys_initcall(gcc_scuba_init);
+
+static void __exit gcc_scuba_exit(void)
+{
+	platform_driver_unregister(&gcc_scuba_driver);
+}
+module_exit(gcc_scuba_exit);
+
+MODULE_DESCRIPTION("QTI GCC SCUBA Driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/clk/qcom/gpucc-bengal.c b/drivers/clk/qcom/gpucc-bengal.c
index 939568d..7d40e3e 100644
--- a/drivers/clk/qcom/gpucc-bengal.c
+++ b/drivers/clk/qcom/gpucc-bengal.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2019-2020, The Linux Foundation. All rights reserved.
  */
 
 #define pr_fmt(fmt) "clk: %s: " fmt, __func__
@@ -26,6 +26,7 @@
 #define CX_GMU_CBCR_WAKE_SHIFT          8
 
 static DEFINE_VDD_REGULATORS(vdd_cx, VDD_NUM, 1, vdd_corner);
+static DEFINE_VDD_REGULATORS(vdd_mx, VDD_NUM, 1, vdd_corner);
 
 enum {
 	P_BI_TCXO,
@@ -80,15 +81,18 @@
 
 static struct pll_vco default_vco[] = {
 	{ 1000000000, 2000000000, 0 },
-	{ 750000000, 1500000000, 1 },
+};
+
+static struct pll_vco pll1_vco[] = {
 	{ 500000000, 1000000000, 2 },
-	{ 250000000, 500000000, 3 },
 };
 
 static const struct alpha_pll_config gpu_cc_pll0_config = {
-	.l = 0x1B,
-	.alpha = 0x55000000,
-	.alpha_hi = 0xB5,
+	.l = 0x3E,
+	.alpha = 0x00000000,
+	.alpha_hi = 0x80,
+	.vco_val = 0x0 << 20,
+	.vco_mask = GENMASK(21, 20),
 	.alpha_en_mask = BIT(24),
 	.main_output_mask = BIT(0),
 	.aux_output_mask = BIT(1),
@@ -98,7 +102,7 @@
 	.test_ctl_hi_mask = 0x1,
 };
 
-/* 532MHz configuration */
+/* 1200MHz configuration */
 static struct clk_alpha_pll gpu_cc_pll0 = {
 	.offset = 0x0,
 	.vco_table = default_vco,
@@ -111,7 +115,7 @@
 			.parent_names = (const char *[]){ "bi_tcxo" },
 			.num_parents = 1,
 			.ops = &clk_alpha_pll_ops,
-			.vdd_class = &vdd_cx,
+			.vdd_class = &vdd_mx,
 			.num_rate_max = VDD_NUM,
 			.rate_max = (unsigned long[VDD_NUM]) {
 				[VDD_MIN] = 1000000000,
@@ -158,8 +162,8 @@
 
 static struct clk_alpha_pll gpu_cc_pll1 = {
 	.offset = 0x100,
-	.vco_table = default_vco,
-	.num_vco = ARRAY_SIZE(default_vco),
+	.vco_table = pll1_vco,
+	.num_vco = ARRAY_SIZE(pll1_vco),
 	.flags = SUPPORTS_DYNAMIC_UPDATE,
 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 	.clkr = {
@@ -168,7 +172,7 @@
 			.parent_names = (const char *[]){ "bi_tcxo" },
 			.num_parents = 1,
 			.ops = &clk_alpha_pll_ops,
-			.vdd_class = &vdd_cx,
+			.vdd_class = &vdd_mx,
 			.num_rate_max = VDD_NUM,
 			.rate_max = (unsigned long[VDD_NUM]) {
 				[VDD_MIN] = 1000000000,
@@ -474,6 +478,14 @@
 		return PTR_ERR(vdd_cx.regulator[0]);
 	}
 
+	vdd_mx.regulator[0] = devm_regulator_get(&pdev->dev, "vdd_mx");
+	if (IS_ERR(vdd_mx.regulator[0])) {
+		if (!(PTR_ERR(vdd_mx.regulator[0]) == -EPROBE_DEFER))
+			dev_err(&pdev->dev,
+				"Unable to get vdd_mx regulator\n");
+		return PTR_ERR(vdd_mx.regulator[0]);
+	}
+
 	regmap = qcom_cc_map(pdev, &gpu_cc_bengal_desc);
 	if (IS_ERR(regmap))
 		return PTR_ERR(regmap);
diff --git a/drivers/clk/qcom/gpucc-kona.c b/drivers/clk/qcom/gpucc-kona.c
index 4e9c6a0..bd0c28b 100644
--- a/drivers/clk/qcom/gpucc-kona.c
+++ b/drivers/clk/qcom/gpucc-kona.c
@@ -66,52 +66,6 @@
 	{ 249600000, 2000000000, 0 },
 };
 
-static const struct alpha_pll_config gpu_cc_pll0_config = {
-	.l = 0x13,
-	.cal_l = 0x44,
-	.alpha = 0xCAAA,
-	.config_ctl_val = 0x20485699,
-	.config_ctl_hi_val = 0x00002261,
-	.config_ctl_hi1_val = 0x329A699C,
-	.user_ctl_val = 0x00000000,
-	.user_ctl_hi_val = 0x00000805,
-	.user_ctl_hi1_val = 0x00000000,
-};
-
-static const struct alpha_pll_config gpu_cc_pll0_config_sm8250_v2 = {
-	.l = 0x14,
-	.cal_l = 0x44,
-	.alpha = 0x5000,
-	.config_ctl_val = 0x20485699,
-	.config_ctl_hi_val = 0x00002261,
-	.config_ctl_hi1_val = 0x329A699C,
-	.user_ctl_val = 0x00000000,
-	.user_ctl_hi_val = 0x00000805,
-	.user_ctl_hi1_val = 0x00000000,
-};
-
-static struct clk_alpha_pll gpu_cc_pll0 = {
-	.offset = 0x0,
-	.vco_table = lucid_vco,
-	.num_vco = ARRAY_SIZE(lucid_vco),
-	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
-	.clkr = {
-		.hw.init = &(struct clk_init_data){
-			.name = "gpu_cc_pll0",
-			.parent_names = (const char *[]){ "bi_tcxo" },
-			.num_parents = 1,
-			.ops = &clk_alpha_pll_lucid_ops,
-			.vdd_class = &vdd_mx,
-			.num_rate_max = VDD_NUM,
-			.rate_max = (unsigned long[VDD_NUM]) {
-				[VDD_MIN] = 615000000,
-				[VDD_LOW] = 1066000000,
-				[VDD_LOW_L1] = 1600000000,
-				[VDD_NOMINAL] = 2000000000},
-		},
-	},
-};
-
 static const struct alpha_pll_config gpu_cc_pll1_config = {
 	.l = 0x1A,
 	.cal_l = 0x44,
@@ -444,33 +398,10 @@
 
 static const struct of_device_id gpu_cc_kona_match_table[] = {
 	{ .compatible = "qcom,gpucc-kona" },
-	{ .compatible = "qcom,gpucc-kona-v2" },
 	{ }
 };
 MODULE_DEVICE_TABLE(of, gpu_cc_kona_match_table);
 
-static void gpu_cc_kona_fixup_konav2(struct regmap *regmap)
-{
-	clk_lucid_pll_configure(&gpu_cc_pll0, regmap,
-		&gpu_cc_pll0_config_sm8250_v2);
-}
-
-static int gpu_cc_kona_fixup(struct platform_device *pdev,
-	struct regmap *regmap)
-{
-	const char *compat = NULL;
-	int compatlen = 0;
-
-	compat = of_get_property(pdev->dev.of_node, "compatible", &compatlen);
-	if (!compat || (compatlen <= 0))
-		return -EINVAL;
-
-	if (!strcmp(compat, "qcom,gpucc-kona-v2"))
-		gpu_cc_kona_fixup_konav2(regmap);
-
-	return 0;
-}
-
 static int gpu_cc_kona_probe(struct platform_device *pdev)
 {
 	struct regmap *regmap;
@@ -504,9 +435,6 @@
 	value = 0xf << CX_GMU_CBCR_WAKE_SHIFT | 0xf << CX_GMU_CBCR_SLEEP_SHIFT;
 	regmap_update_bits(regmap, gpu_cc_cx_gmu_clk.clkr.enable_reg,
 							mask, value);
-	ret = gpu_cc_kona_fixup(pdev, regmap);
-	if (ret)
-		return ret;
 
 	ret = qcom_cc_really_probe(pdev, &gpu_cc_kona_desc, regmap);
 	if (ret) {
diff --git a/drivers/clk/qcom/gpucc-lagoon.c b/drivers/clk/qcom/gpucc-lagoon.c
index 8c7e09b..ec1bbcf 100644
--- a/drivers/clk/qcom/gpucc-lagoon.c
+++ b/drivers/clk/qcom/gpucc-lagoon.c
@@ -18,7 +18,7 @@
 #include "clk-rcg.h"
 #include "common.h"
 #include "clk-regmap-mux.h"
-#include "vdd-level-lito.h"
+#include "vdd-level-lagoon.h"
 
 static DEFINE_VDD_REGULATORS(vdd_cx, VDD_NUM, 1, vdd_corner);
 static DEFINE_VDD_REGULATORS(vdd_gx, VDD_GX_NUM, 1, vdd_corner);
@@ -122,7 +122,7 @@
 
 static struct clk_fixed_factor crc_div = {
 	.mult = 1,
-	.div = 1,
+	.div = 2,
 	.hw.init = &(struct clk_init_data){
 		.name = "crc_div",
 		.parent_names = (const char *[]){ "gpu_cc_pll0" },
diff --git a/drivers/clk/qcom/gpucc-scuba.c b/drivers/clk/qcom/gpucc-scuba.c
new file mode 100644
index 0000000..1f6836b
--- /dev/null
+++ b/drivers/clk/qcom/gpucc-scuba.c
@@ -0,0 +1,429 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2020, The Linux Foundation. All rights reserved.
+ */
+
+#include <linux/clk.h>
+#include <linux/clk-provider.h>
+#include <linux/err.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/of_device.h>
+#include <linux/of.h>
+#include <linux/regmap.h>
+
+#include <dt-bindings/clock/qcom,gpucc-scuba.h>
+
+#include "clk-alpha-pll.h"
+#include "clk-branch.h"
+#include "clk-pll.h"
+#include "clk-rcg.h"
+#include "clk-regmap.h"
+#include "clk-regmap-divider.h"
+#include "clk-regmap-mux.h"
+#include "common.h"
+#include "reset.h"
+#include "vdd-level.h"
+
+static DEFINE_VDD_REGULATORS(vdd_cx, VDD_NUM, 1, vdd_corner);
+
+enum {
+	P_BI_TCXO,
+	P_CORE_BI_PLL_TEST_SE,
+	P_GPLL0_OUT_MAIN,
+	P_GPLL0_OUT_MAIN_DIV,
+	P_GPU_CC_PLL0_2X_DIV_CLK_SRC,
+	P_GPU_CC_PLL0_OUT_AUX,
+	P_GPU_CC_PLL0_OUT_AUX2,
+	P_GPU_CC_PLL0_OUT_MAIN,
+};
+
+static const struct parent_map gpu_cc_parent_map_0[] = {
+	{ P_BI_TCXO, 0 },
+	{ P_GPU_CC_PLL0_OUT_MAIN, 1 },
+	{ P_GPLL0_OUT_MAIN, 5 },
+	{ P_GPLL0_OUT_MAIN_DIV, 6 },
+	{ P_CORE_BI_PLL_TEST_SE, 7 },
+};
+
+static const char * const gpu_cc_parent_names_0[] = {
+	"bi_tcxo",
+	"gpu_cc_pll0",
+	"gpll0",
+	"gpll0_out_main_div",
+	"core_bi_pll_test_se",
+};
+
+static const struct parent_map gpu_cc_parent_map_1[] = {
+	{ P_BI_TCXO, 0 },
+	{ P_GPU_CC_PLL0_2X_DIV_CLK_SRC, 1 },
+	{ P_GPU_CC_PLL0_OUT_AUX2, 2 },
+	{ P_GPU_CC_PLL0_OUT_AUX, 3 },
+	{ P_GPLL0_OUT_MAIN, 5 },
+	{ P_CORE_BI_PLL_TEST_SE, 7 },
+};
+
+static const char * const gpu_cc_parent_names_1[] = {
+	"bi_tcxo",
+	"gpu_cc_pll0",
+	"gpu_cc_pll0",
+	"gpu_cc_pll0",
+	"gpll0",
+	"core_bi_pll_test_se",
+};
+
+static const u8 clk_alpha_pll_regs_offset[][PLL_OFF_MAX_REGS] = {
+	[CLK_ALPHA_PLL_TYPE_HUAYRA] =  {
+		[PLL_OFF_L_VAL] = 0x04,
+		[PLL_OFF_ALPHA_VAL] = 0x08,
+		[PLL_OFF_USER_CTL] = 0x0c,
+		[PLL_OFF_CONFIG_CTL] = 0x10,
+		[PLL_OFF_CONFIG_CTL_U] = 0x14,
+		[PLL_OFF_CONFIG_CTL_U1] = 0x18,
+		[PLL_OFF_TEST_CTL] = 0x1c,
+		[PLL_OFF_TEST_CTL_U] = 0x20,
+		[PLL_OFF_TEST_CTL_U1] = 0x24,
+		[PLL_OFF_OPMODE] = 0x28,
+		[PLL_OFF_STATUS] = 0x38,
+	},
+};
+
+static const struct alpha_pll_config gpu_cc_pll0_config = {
+	.l = 0x25,
+	.config_ctl_val = 0x200D4828,
+	.config_ctl_hi_val = 0x6,
+	.test_ctl_val = 0x1C000000,
+	.test_ctl_hi_val = 0x00004000,
+	.user_ctl_val = 0xF,
+};
+
+static struct clk_alpha_pll gpu_cc_pll0 = {
+	.offset = 0x0,
+	.regs = clk_alpha_pll_regs_offset[CLK_ALPHA_PLL_TYPE_HUAYRA],
+	.clkr = {
+		.hw.init = &(struct clk_init_data){
+			.name = "gpu_cc_pll0",
+			.parent_names = (const char *[]){ "bi_tcxo" },
+			.num_parents = 1,
+			.ops = &clk_alpha_pll_huayra_ops,
+			.vdd_class = &vdd_cx,
+			.num_rate_max = VDD_NUM,
+			.rate_max = (unsigned long[VDD_NUM]) {
+				[VDD_MIN] = 1200000000,
+				[VDD_LOWER] = 2400000000,
+				[VDD_LOW] = 3000000000,
+				[VDD_NOMINAL] = 3300000000},
+		},
+	},
+};
+
+static const struct freq_tbl ftbl_gpu_cc_gmu_clk_src[] = {
+	F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
+	{ }
+};
+
+static struct clk_rcg2 gpu_cc_gmu_clk_src = {
+	.cmd_rcgr = 0x1120,
+	.mnd_width = 0,
+	.hid_width = 5,
+	.parent_map = gpu_cc_parent_map_0,
+	.freq_tbl = ftbl_gpu_cc_gmu_clk_src,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "gpu_cc_gmu_clk_src",
+		.parent_names = gpu_cc_parent_names_0,
+		.num_parents = 5,
+		.ops = &clk_rcg2_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_LOWER] = 200000000},
+	},
+};
+
+static const struct freq_tbl ftbl_gpu_cc_gx_gfx3d_clk_src[] = {
+	F(355200000, P_GPU_CC_PLL0_OUT_AUX, 2, 0, 0),
+	F(537600000, P_GPU_CC_PLL0_OUT_AUX2, 2, 0, 0),
+	F(672000000, P_GPU_CC_PLL0_OUT_AUX2, 2, 0, 0),
+	F(844800000, P_GPU_CC_PLL0_OUT_AUX2, 2, 0, 0),
+	F(921600000, P_GPU_CC_PLL0_OUT_AUX2, 2, 0, 0),
+	F(1017600000, P_GPU_CC_PLL0_OUT_AUX2, 2, 0, 0),
+	F(1123200000, P_GPU_CC_PLL0_OUT_AUX2, 2, 0, 0),
+	{ }
+};
+
+static struct clk_rcg2 gpu_cc_gx_gfx3d_clk_src = {
+	.cmd_rcgr = 0x101c,
+	.mnd_width = 0,
+	.hid_width = 5,
+	.parent_map = gpu_cc_parent_map_1,
+	.freq_tbl = ftbl_gpu_cc_gx_gfx3d_clk_src,
+	.clkr.hw.init = &(struct clk_init_data){
+		.name = "gpu_cc_gx_gfx3d_clk_src",
+		.parent_names = gpu_cc_parent_names_1,
+		.num_parents = 6,
+		.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
+		.ops = &clk_rcg2_ops,
+		.vdd_class = &vdd_cx,
+		.num_rate_max = VDD_NUM,
+		.rate_max = (unsigned long[VDD_NUM]) {
+			[VDD_LOWER] = 355200000,
+			[VDD_LOW] = 537600000,
+			[VDD_LOW_L1] = 672000000,
+			[VDD_NOMINAL] = 844800000,
+			[VDD_NOMINAL_L1] = 921600000,
+			[VDD_HIGH] = 1017600000,
+			[VDD_HIGH_L1] = 1123200000},
+	},
+};
+
+static struct clk_branch gpu_cc_ahb_clk = {
+	.halt_reg = 0x1078,
+	.halt_check = BRANCH_HALT_DELAY,
+	.clkr = {
+		.enable_reg = 0x1078,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gpu_cc_ahb_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gpu_cc_crc_ahb_clk = {
+	.halt_reg = 0x107c,
+	.halt_check = BRANCH_HALT_DELAY,
+	.clkr = {
+		.enable_reg = 0x107c,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gpu_cc_crc_ahb_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gpu_cc_cx_gfx3d_clk = {
+	.halt_reg = 0x10a4,
+	.halt_check = BRANCH_HALT_DELAY,
+	.clkr = {
+		.enable_reg = 0x10a4,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gpu_cc_cx_gfx3d_clk",
+			.parent_names = (const char *[]){
+				"gpu_cc_gx_gfx3d_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gpu_cc_cx_gmu_clk = {
+	.halt_reg = 0x1098,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x1098,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gpu_cc_cx_gmu_clk",
+			.parent_names = (const char *[]){
+				"gpu_cc_gmu_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gpu_cc_cx_snoc_dvm_clk = {
+	.halt_reg = 0x108c,
+	.halt_check = BRANCH_HALT_DELAY,
+	.clkr = {
+		.enable_reg = 0x108c,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gpu_cc_cx_snoc_dvm_clk",
+			.parent_names = (const char *[]){
+				"gcc_gpu_bimc_axi_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gpu_cc_cxo_aon_clk = {
+	.halt_reg = 0x1004,
+	.halt_check = BRANCH_HALT_DELAY,
+	.clkr = {
+		.enable_reg = 0x1004,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gpu_cc_cxo_aon_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gpu_cc_cxo_clk = {
+	.halt_reg = 0x109c,
+	.halt_check = BRANCH_HALT,
+	.clkr = {
+		.enable_reg = 0x109c,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gpu_cc_cxo_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gpu_cc_gx_cxo_clk = {
+	.halt_reg = 0x1060,
+	.halt_check = BRANCH_HALT_DELAY,
+	.clkr = {
+		.enable_reg = 0x1060,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gpu_cc_gx_cxo_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gpu_cc_gx_gfx3d_clk = {
+	.halt_reg = 0x1054,
+	.halt_check = BRANCH_HALT_DELAY,
+	.clkr = {
+		.enable_reg = 0x1054,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gpu_cc_gx_gfx3d_clk",
+			.parent_names = (const char *[]){
+				"gpu_cc_gx_gfx3d_clk_src",
+			},
+			.num_parents = 1,
+			.flags = CLK_SET_RATE_PARENT,
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gpu_cc_hlos1_vote_gpu_smmu_clk = {
+	.halt_reg = 0x5000,
+	.halt_check = BRANCH_VOTED,
+	.clkr = {
+		.enable_reg = 0x5000,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			 .name = "gpu_cc_hlos1_vote_gpu_smmu_clk",
+			 .ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_branch gpu_cc_sleep_clk = {
+	.halt_reg = 0x1090,
+	.halt_check = BRANCH_VOTED,
+	.clkr = {
+		.enable_reg = 0x1090,
+		.enable_mask = BIT(0),
+		.hw.init = &(struct clk_init_data){
+			.name = "gpu_cc_sleep_clk",
+			.ops = &clk_branch2_ops,
+		},
+	},
+};
+
+static struct clk_regmap *gpu_cc_scuba_clocks[] = {
+	[GPU_CC_AHB_CLK] = &gpu_cc_ahb_clk.clkr,
+	[GPU_CC_CRC_AHB_CLK] = &gpu_cc_crc_ahb_clk.clkr,
+	[GPU_CC_CX_GFX3D_CLK] = &gpu_cc_cx_gfx3d_clk.clkr,
+	[GPU_CC_CX_GMU_CLK] = &gpu_cc_cx_gmu_clk.clkr,
+	[GPU_CC_CX_SNOC_DVM_CLK] = &gpu_cc_cx_snoc_dvm_clk.clkr,
+	[GPU_CC_CXO_AON_CLK] = &gpu_cc_cxo_aon_clk.clkr,
+	[GPU_CC_CXO_CLK] = &gpu_cc_cxo_clk.clkr,
+	[GPU_CC_GMU_CLK_SRC] = &gpu_cc_gmu_clk_src.clkr,
+	[GPU_CC_GX_CXO_CLK] = &gpu_cc_gx_cxo_clk.clkr,
+	[GPU_CC_GX_GFX3D_CLK] = &gpu_cc_gx_gfx3d_clk.clkr,
+	[GPU_CC_GX_GFX3D_CLK_SRC] = &gpu_cc_gx_gfx3d_clk_src.clkr,
+	[GPU_CC_PLL0] = &gpu_cc_pll0.clkr,
+	[GPU_CC_SLEEP_CLK] = &gpu_cc_sleep_clk.clkr,
+	[GPU_CC_HLOS1_VOTE_GPU_SMMU_CLK] = &gpu_cc_hlos1_vote_gpu_smmu_clk.clkr,
+};
+
+static const struct regmap_config gpu_cc_scuba_regmap_config = {
+	.reg_bits = 32,
+	.reg_stride = 4,
+	.val_bits = 32,
+	.max_register = 0x7008,
+	.fast_io = true,
+};
+
+static const struct qcom_cc_desc gpu_cc_scuba_desc = {
+	.config = &gpu_cc_scuba_regmap_config,
+	.clks = gpu_cc_scuba_clocks,
+	.num_clks = ARRAY_SIZE(gpu_cc_scuba_clocks),
+};
+
+static const struct of_device_id gpu_cc_scuba_match_table[] = {
+	{ .compatible = "qcom,scuba-gpucc" },
+	{ }
+};
+MODULE_DEVICE_TABLE(of, gpu_cc_scuba_match_table);
+
+static int gpu_cc_scuba_probe(struct platform_device *pdev)
+{
+	struct regmap *regmap;
+	int ret;
+
+	vdd_cx.regulator[0] = devm_regulator_get(&pdev->dev, "vdd_cx");
+	if (IS_ERR(vdd_cx.regulator[0])) {
+		if (PTR_ERR(vdd_cx.regulator[0]) != -EPROBE_DEFER)
+			dev_err(&pdev->dev, "Unable to get vdd_cx regulator\n");
+		return PTR_ERR(vdd_cx.regulator[0]);
+	}
+
+	regmap = qcom_cc_map(pdev, &gpu_cc_scuba_desc);
+	if (IS_ERR(regmap))
+		return PTR_ERR(regmap);
+
+	clk_huayra_pll_configure(&gpu_cc_pll0, regmap, &gpu_cc_pll0_config);
+
+	ret = qcom_cc_really_probe(pdev, &gpu_cc_scuba_desc, regmap);
+	if (ret) {
+		dev_err(&pdev->dev, "Failed to register GPU CC clocks\n");
+		return ret;
+	}
+
+	dev_info(&pdev->dev, "Registered GPU CC clocks\n");
+
+	return ret;
+}
+
+static struct platform_driver gpu_cc_scuba_driver = {
+	.probe = gpu_cc_scuba_probe,
+	.driver = {
+		.name = "gpu_cc-scuba",
+		.of_match_table = gpu_cc_scuba_match_table,
+	},
+};
+
+static int __init gpu_cc_scuba_init(void)
+{
+	return platform_driver_register(&gpu_cc_scuba_driver);
+}
+subsys_initcall(gpu_cc_scuba_init);
+
+static void __exit gpu_cc_scuba_exit(void)
+{
+	platform_driver_unregister(&gpu_cc_scuba_driver);
+}
+module_exit(gpu_cc_scuba_exit);
+
+MODULE_DESCRIPTION("QTI GPU_CC SCUBA Driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/clk/qcom/npucc-lagoon.c b/drivers/clk/qcom/npucc-lagoon.c
index 3c35830..cd5adaa 100644
--- a/drivers/clk/qcom/npucc-lagoon.c
+++ b/drivers/clk/qcom/npucc-lagoon.c
@@ -17,7 +17,7 @@
 #include "clk-rcg.h"
 #include "common.h"
 #include "reset.h"
-#include "vdd-level-lito.h"
+#include "vdd-level-lagoon.h"
 
 static DEFINE_VDD_REGULATORS(vdd_cx, VDD_NUM, 1, vdd_corner);
 
@@ -585,10 +585,6 @@
 		.enable_mask = BIT(0),
 		.hw.init = &(struct clk_init_data){
 			.name = "npu_cc_xo_clk",
-			.parent_names = (const char *[]){
-				"npu_cc_xo_clk_src",
-			},
-			.num_parents = 1,
 			.flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
 			.ops = &clk_branch2_ops,
 		},
diff --git a/drivers/clk/qcom/vdd-level-lagoon.h b/drivers/clk/qcom/vdd-level-lagoon.h
new file mode 100644
index 0000000..ad5c8b8
--- /dev/null
+++ b/drivers/clk/qcom/vdd-level-lagoon.h
@@ -0,0 +1,58 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (c) 2020, The Linux Foundation. All rights reserved.
+ */
+
+#ifndef __DRIVERS_CLK_QCOM_VDD_LEVEL_LAGOON_H
+#define __DRIVERS_CLK_QCOM_VDD_LEVEL_LAGOON_H
+
+#include <linux/regulator/consumer.h>
+#include <dt-bindings/regulator/qcom,rpmh-regulator-levels.h>
+
+enum vdd_levels {
+	VDD_NONE,
+	VDD_MIN,		/* MIN SVS */
+	VDD_LOWER,		/* SVS2 */
+	VDD_LOW,		/* SVS */
+	VDD_LOW_L1,		/* SVSL1 */
+	VDD_NOMINAL,		/* NOM */
+	VDD_HIGH,		/* TURBO */
+	VDD_NUM,
+};
+
+static int vdd_corner[] = {
+	[VDD_NONE]    = 0,
+	[VDD_MIN]     = RPMH_REGULATOR_LEVEL_MIN_SVS,
+	[VDD_LOWER]   = RPMH_REGULATOR_LEVEL_LOW_SVS,
+	[VDD_LOW]     = RPMH_REGULATOR_LEVEL_SVS,
+	[VDD_LOW_L1]  = RPMH_REGULATOR_LEVEL_SVS_L1,
+	[VDD_NOMINAL] = RPMH_REGULATOR_LEVEL_NOM,
+	[VDD_HIGH]    = RPMH_REGULATOR_LEVEL_TURBO,
+};
+
+enum vdd_gx_levels {
+	VDD_GX_NONE,
+	VDD_GX_MIN,		/* MIN SVS */
+	VDD_GX_LOWER,		/* SVS2 */
+	VDD_GX_LOW,		/* SVS */
+	VDD_GX_LOW_L1,		/* SVSL1 */
+	VDD_GX_NOMINAL,		/* NOM */
+	VDD_GX_NOMINAL_L1,	/* NOM1 */
+	VDD_GX_HIGH,		/* TURBO */
+	VDD_GX_HIGH_L1,		/* TURBO1 */
+	VDD_GX_NUM,
+};
+
+static int vdd_gx_corner[] = {
+	[VDD_GX_NONE]    = 0,
+	[VDD_GX_MIN]     = RPMH_REGULATOR_LEVEL_MIN_SVS,
+	[VDD_GX_LOWER]   = RPMH_REGULATOR_LEVEL_LOW_SVS,
+	[VDD_GX_LOW]     = RPMH_REGULATOR_LEVEL_SVS,
+	[VDD_GX_LOW_L1]  = RPMH_REGULATOR_LEVEL_SVS_L1,
+	[VDD_GX_NOMINAL] = RPMH_REGULATOR_LEVEL_NOM,
+	[VDD_GX_NOMINAL_L1] = RPMH_REGULATOR_LEVEL_NOM_L1,
+	[VDD_GX_HIGH]    = RPMH_REGULATOR_LEVEL_TURBO,
+	[VDD_GX_HIGH_L1]    = RPMH_REGULATOR_LEVEL_TURBO_L1,
+};
+
+#endif
diff --git a/drivers/clk/qcom/videocc-lagoon.c b/drivers/clk/qcom/videocc-lagoon.c
index 453223b..32838a6 100644
--- a/drivers/clk/qcom/videocc-lagoon.c
+++ b/drivers/clk/qcom/videocc-lagoon.c
@@ -23,7 +23,7 @@
 #include "clk-regmap.h"
 #include "common.h"
 #include "reset.h"
-#include "vdd-level-lito.h"
+#include "vdd-level-lagoon.h"
 
 static DEFINE_VDD_REGULATORS(vdd_cx, VDD_NUM, 1, vdd_corner);
 
@@ -325,12 +325,6 @@
 	[VIDEO_PLL0_OUT_EVEN] = &video_pll0_out_even.clkr,
 };
 
-static const struct qcom_reset_map video_cc_lito_resets[] = {
-	[VCODEC_VIDEO_CC_INTERFACE_BCR] = { 0x8000 },
-	[VCODEC_VIDEO_CC_MVS0_BCR] = { 0x3000 },
-	[VCODEC_VIDEO_CC_MVSC_BCR] = { 0x2000 },
-};
-
 static const struct regmap_config video_cc_lagoon_regmap_config = {
 	.reg_bits = 32,
 	.reg_stride = 4,
diff --git a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig
index 25e2967..1cdd836 100644
--- a/drivers/clocksource/Kconfig
+++ b/drivers/clocksource/Kconfig
@@ -366,6 +366,16 @@
 	  The workaround will be dynamically enabled when an affected
 	  core is detected.
 
+config ARM_ERRATUM_858921
+	bool "Workaround for Cortex-A73(AArch32) erratum 858921"
+	default y
+	depends on ARM_ARCH_TIMER && ARM
+	help
+	  This option enables a workaround applicable to AArch32 Cortex-A73
+	  (all versions), whose counter may return incorrect values.
+	  The workaround will be dynamically enabled when an affected
+	  core is detected.
+
 config SUN50I_ERRATUM_UNKNOWN1
 	bool "Workaround for Allwinner A64 erratum UNKNOWN1"
 	default y
diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c
index c7f38cf..ebc5c13 100644
--- a/drivers/clocksource/arm_arch_timer.c
+++ b/drivers/clocksource/arm_arch_timer.c
@@ -31,6 +31,7 @@
 #include <asm/arch_timer.h>
 #include <asm/traps.h>
 #include <asm/virt.h>
+#include <asm/cputype.h>
 
 #include <clocksource/arm_arch_timer.h>
 
@@ -193,6 +194,25 @@
 	u32 oem_revision;
 };
 
+#ifdef CONFIG_ARM_ERRATUM_858921
+DEFINE_PER_CPU(bool, timer_erratum_858921_workaround_enabled);
+EXPORT_PER_CPU_SYMBOL(timer_erratum_858921_workaround_enabled);
+static void arch_timer_check_858921_workaround(void)
+{
+	unsigned int cpuid_part;
+
+	cpuid_part = read_cpuid_part();
+	if (cpuid_part == ARM_CPU_PART_CORTEX_A73 ||
+	    cpuid_part == QCOM_CPU_PART_KRYO2XX_GOLD) {
+		this_cpu_write(timer_erratum_858921_workaround_enabled, true);
+	} else {
+		this_cpu_write(timer_erratum_858921_workaround_enabled, false);
+	}
+}
+#else
+#define arch_timer_check_858921_workaround()	do { } while (0)
+#endif
+
 #ifdef CONFIG_FSL_ERRATUM_A008585
 /*
  * The number of retries is an arbitrary value well beyond the highest number
@@ -803,6 +823,7 @@
 		}
 
 		arch_timer_check_ool_workaround(ate_match_local_cap_id, NULL);
+		arch_timer_check_858921_workaround();
 	} else {
 		clk->features |= CLOCK_EVT_FEAT_DYNIRQ;
 		clk->name = "arch_mem_timer";
diff --git a/drivers/cpufreq/Kconfig b/drivers/cpufreq/Kconfig
index 14a1cd0..d49ac20 100644
--- a/drivers/cpufreq/Kconfig
+++ b/drivers/cpufreq/Kconfig
@@ -245,6 +245,15 @@
 
 	  If in doubt, say N.
 
+config CPUFREQ_DUMMY
+	tristate "Dummy CPU frequency driver"
+	help
+	  This option adds a generic dummy CPUfreq driver, which sets a fake
+	  2-frequency table when initializing each policy and otherwise does
+	  nothing.
+
+	  If in doubt, say N
+
 if X86
 source "drivers/cpufreq/Kconfig.x86"
 endif
diff --git a/drivers/cpufreq/Makefile b/drivers/cpufreq/Makefile
index addf17b..9dfd353 100644
--- a/drivers/cpufreq/Makefile
+++ b/drivers/cpufreq/Makefile
@@ -21,6 +21,8 @@
 obj-$(CONFIG_CPUFREQ_DT)		+= cpufreq-dt.o
 obj-$(CONFIG_CPUFREQ_DT_PLATDEV)	+= cpufreq-dt-platdev.o
 
+obj-$(CONFIG_CPUFREQ_DUMMY)		+= dummy-cpufreq.o
+
 ##################################################################################
 # x86 drivers.
 # Link order matters. K8 is preferred to ACPI because of firmware bugs in early
diff --git a/drivers/cpufreq/cpufreq_times.c b/drivers/cpufreq/cpufreq_times.c
index 5b5248a..210742e 100644
--- a/drivers/cpufreq/cpufreq_times.c
+++ b/drivers/cpufreq/cpufreq_times.c
@@ -523,13 +523,14 @@
 	struct uid_entry *uid_entry;
 	struct hlist_node *tmp;
 	unsigned long flags;
+	u64 uid;
 
 	spin_lock_irqsave(&uid_lock, flags);
 
-	for (; uid_start <= uid_end; uid_start++) {
+	for (uid = uid_start; uid <= uid_end; uid++) {
 		hash_for_each_possible_safe(uid_hash_table, uid_entry, tmp,
-			hash, uid_start) {
-			if (uid_start == uid_entry->uid) {
+			hash, uid) {
+			if (uid == uid_entry->uid) {
 				hash_del_rcu(&uid_entry->hash);
 				call_rcu(&uid_entry->rcu, uid_entry_reclaim);
 			}
diff --git a/drivers/cpufreq/dummy-cpufreq.c b/drivers/cpufreq/dummy-cpufreq.c
new file mode 100644
index 0000000..ea40d5c
--- /dev/null
+++ b/drivers/cpufreq/dummy-cpufreq.c
@@ -0,0 +1,60 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2019 Google, Inc.
+ */
+#include <linux/cpufreq.h>
+#include <linux/module.h>
+
+static struct cpufreq_frequency_table freq_table[] = {
+	{ .frequency = 1 },
+	{ .frequency = 2 },
+	{ .frequency = CPUFREQ_TABLE_END },
+};
+
+static int dummy_cpufreq_target_index(struct cpufreq_policy *policy,
+				   unsigned int index)
+{
+	return 0;
+}
+
+static int dummy_cpufreq_driver_init(struct cpufreq_policy *policy)
+{
+	policy->freq_table = freq_table;
+	return 0;
+}
+
+static unsigned int dummy_cpufreq_get(unsigned int cpu)
+{
+	return 1;
+}
+
+static int dummy_cpufreq_verify(struct cpufreq_policy *policy)
+{
+	return 0;
+}
+
+static struct cpufreq_driver dummy_cpufreq_driver = {
+	.name = "dummy",
+	.target_index = dummy_cpufreq_target_index,
+	.init = dummy_cpufreq_driver_init,
+	.get = dummy_cpufreq_get,
+	.verify = dummy_cpufreq_verify,
+	.attr = cpufreq_generic_attr,
+};
+
+static int __init dummy_cpufreq_init(void)
+{
+	return cpufreq_register_driver(&dummy_cpufreq_driver);
+}
+
+static void __exit dummy_cpufreq_exit(void)
+{
+	cpufreq_unregister_driver(&dummy_cpufreq_driver);
+}
+
+module_init(dummy_cpufreq_init);
+module_exit(dummy_cpufreq_exit);
+
+MODULE_AUTHOR("Connor O'Brien <connoro@google.com>");
+MODULE_DESCRIPTION("dummy cpufreq driver");
+MODULE_LICENSE("GPL");
diff --git a/drivers/crypto/msm/qcedev.c b/drivers/crypto/msm/qcedev.c
index fccbc93..dd7cbbb 100644
--- a/drivers/crypto/msm/qcedev.c
+++ b/drivers/crypto/msm/qcedev.c
@@ -2,7 +2,7 @@
 /*
  * QTI CE device driver.
  *
- * Copyright (c) 2010-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2010-2020, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/mman.h>
@@ -1936,6 +1936,11 @@
 				goto exit_free_qcedev_areq;
 			}
 
+			if (map_buf.num_fds > QCEDEV_MAX_BUFFERS) {
+				err = -EINVAL;
+				goto exit_free_qcedev_areq;
+			}
+
 			for (i = 0; i < map_buf.num_fds; i++) {
 				err = qcedev_check_and_map_buffer(handle,
 						map_buf.fd[i],
diff --git a/drivers/devfreq/governor_bw_hwmon.c b/drivers/devfreq/governor_bw_hwmon.c
index f20b6cf..1076d3c 100644
--- a/drivers/devfreq/governor_bw_hwmon.c
+++ b/drivers/devfreq/governor_bw_hwmon.c
@@ -713,8 +713,11 @@
 {
 	struct hwmon_node *node = df->data;
 
+	if (!node)
+		return -EINVAL;
+
 	/* Suspend/resume sequence */
-	if ((node && !node->mon_started) || df->dev_suspended) {
+	if (!node->mon_started || df->dev_suspended) {
 		*freq = node->resume_freq;
 		*node->dev_ab = node->resume_ab;
 		return 0;
diff --git a/drivers/devfreq/governor_msm_adreno_tz.c b/drivers/devfreq/governor_msm_adreno_tz.c
index 39a58ac..3cd103b 100644
--- a/drivers/devfreq/governor_msm_adreno_tz.c
+++ b/drivers/devfreq/governor_msm_adreno_tz.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2010-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2010-2020, The Linux Foundation. All rights reserved.
  */
 #include <linux/errno.h>
 #include <linux/module.h>
@@ -470,11 +470,14 @@
 	unsigned int tz_pwrlevels[MSM_ADRENO_MAX_PWRLEVELS + 1];
 	int i, out, ret;
 	unsigned int version;
+	struct msm_adreno_extended_profile *gpu_profile;
 
-	struct msm_adreno_extended_profile *gpu_profile = container_of(
-					(devfreq->profile),
-					struct msm_adreno_extended_profile,
-					profile);
+	if (partner_gpu_profile)
+		return -EEXIST;
+
+	gpu_profile = container_of(devfreq->profile,
+			struct msm_adreno_extended_profile,
+			profile);
 
 	/*
 	 * Assuming that we have only one instance of the adreno device
@@ -495,6 +498,7 @@
 		tz_pwrlevels[0] = i;
 	} else {
 		pr_err(TAG "tz_pwrlevels[] is too short\n");
+		partner_gpu_profile = NULL;
 		return -EINVAL;
 	}
 
@@ -511,6 +515,7 @@
 				sizeof(version));
 	if (ret != 0 || version > MAX_TZ_VERSION) {
 		pr_err(TAG "tz_init failed\n");
+		partner_gpu_profile = NULL;
 		return ret;
 	}
 
@@ -606,7 +611,7 @@
 		break;
 	}
 
-	if (partner_gpu_profile && partner_gpu_profile->bus_devfreq)
+	if (!result && partner_gpu_profile && partner_gpu_profile->bus_devfreq)
 		switch (event) {
 		case DEVFREQ_GOV_START:
 			queue_work(workqueue,
diff --git a/drivers/dma-buf/Kconfig b/drivers/dma-buf/Kconfig
index 0dece83..c122231 100644
--- a/drivers/dma-buf/Kconfig
+++ b/drivers/dma-buf/Kconfig
@@ -3,7 +3,6 @@
 config SYNC_FILE
 	bool "Explicit Synchronization Framework"
 	default n
-	select ANON_INODES
 	select DMA_SHARED_BUFFER
 	---help---
 	  The Sync File Framework adds explicit syncronization via
diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
index f5ba771..75b024c 100644
--- a/drivers/dma-buf/dma-buf.c
+++ b/drivers/dma-buf/dma-buf.c
@@ -40,7 +40,10 @@
 #include <linux/fdtable.h>
 #include <linux/list_sort.h>
 #include <linux/hashtable.h>
+#include <linux/mount.h>
+
 #include <uapi/linux/dma-buf.h>
+#include <uapi/linux/magic.h>
 
 static atomic_long_t name_counter;
 
@@ -66,6 +69,41 @@
 
 static struct dma_buf_list db_list;
 
+static char *dmabuffs_dname(struct dentry *dentry, char *buffer, int buflen)
+{
+	struct dma_buf *dmabuf;
+	char name[DMA_BUF_NAME_LEN];
+	size_t ret = 0;
+
+	dmabuf = dentry->d_fsdata;
+	mutex_lock(&dmabuf->lock);
+	if (dmabuf->name)
+		ret = strlcpy(name, dmabuf->name, DMA_BUF_NAME_LEN);
+	mutex_unlock(&dmabuf->lock);
+
+	return dynamic_dname(dentry, buffer, buflen, "/%s:%s",
+			     dentry->d_name.name, ret > 0 ? name : "");
+}
+
+static const struct dentry_operations dma_buf_dentry_ops = {
+	.d_dname = dmabuffs_dname,
+};
+
+static struct vfsmount *dma_buf_mnt;
+
+static struct dentry *dma_buf_fs_mount(struct file_system_type *fs_type,
+		int flags, const char *name, void *data)
+{
+	return mount_pseudo(fs_type, "dmabuf:", NULL, &dma_buf_dentry_ops,
+			DMA_BUF_MAGIC);
+}
+
+static struct file_system_type dma_buf_fs_type = {
+	.name = "dmabuf",
+	.mount = dma_buf_fs_mount,
+	.kill_sb = kill_anon_super,
+};
+
 static int dma_buf_release(struct inode *inode, struct file *file)
 {
 	struct dma_buf *dmabuf;
@@ -99,7 +137,7 @@
 		dmabuf->ops->release(dmabuf);
 	else
 		pr_warn_ratelimited("Leaking dmabuf %s because destructor failed error:%d\n",
-				    dmabuf->name, dtor_ret);
+				    dmabuf->buf_name, dtor_ret);
 
 	dma_buf_ref_destroy(dmabuf);
 
@@ -107,7 +145,7 @@
 		reservation_object_fini(dmabuf->resv);
 
 	module_put(dmabuf->owner);
-	kfree(dmabuf->name);
+	kfree(dmabuf->buf_name);
 	kfree(dmabuf);
 	return 0;
 }
@@ -314,6 +352,43 @@
 static int dma_buf_end_cpu_access_umapped(struct dma_buf *dmabuf,
 					  enum dma_data_direction direction);
 
+/**
+ * dma_buf_set_name - Set a name to a specific dma_buf to track the usage.
+ * The name of the dma-buf buffer can only be set when the dma-buf is not
+ * attached to any devices. It could theoritically support changing the
+ * name of the dma-buf if the same piece of memory is used for multiple
+ * purpose between different devices.
+ *
+ * @dmabuf [in]     dmabuf buffer that will be renamed.
+ * @buf:   [in]     A piece of userspace memory that contains the name of
+ *                  the dma-buf.
+ *
+ * Returns 0 on success. If the dma-buf buffer is already attached to
+ * devices, return -EBUSY.
+ *
+ */
+static long dma_buf_set_name(struct dma_buf *dmabuf, const char __user *buf)
+{
+	char *name = strndup_user(buf, DMA_BUF_NAME_LEN);
+	long ret = 0;
+
+	if (IS_ERR(name))
+		return PTR_ERR(name);
+
+	mutex_lock(&dmabuf->lock);
+	if (!list_empty(&dmabuf->attachments)) {
+		ret = -EBUSY;
+		kfree(name);
+		goto out_unlock;
+	}
+	kfree(dmabuf->name);
+	dmabuf->name = name;
+
+out_unlock:
+	mutex_unlock(&dmabuf->lock);
+	return ret;
+}
+
 static long dma_buf_ioctl(struct file *file,
 			  unsigned int cmd, unsigned long arg)
 {
@@ -360,11 +435,29 @@
 				ret = dma_buf_begin_cpu_access(dmabuf, dir);
 
 		return ret;
+
+	case DMA_BUF_SET_NAME:
+		return dma_buf_set_name(dmabuf, (const char __user *)arg);
+
 	default:
 		return -ENOTTY;
 	}
 }
 
+static void dma_buf_show_fdinfo(struct seq_file *m, struct file *file)
+{
+	struct dma_buf *dmabuf = file->private_data;
+
+	seq_printf(m, "size:\t%zu\n", dmabuf->size);
+	/* Don't count the temporary reference taken inside procfs seq_show */
+	seq_printf(m, "count:\t%ld\n", file_count(dmabuf->file) - 1);
+	seq_printf(m, "exp_name:\t%s\n", dmabuf->exp_name);
+	mutex_lock(&dmabuf->lock);
+	if (dmabuf->name)
+		seq_printf(m, "name:\t%s\n", dmabuf->name);
+	mutex_unlock(&dmabuf->lock);
+}
+
 static const struct file_operations dma_buf_fops = {
 	.release	= dma_buf_release,
 	.mmap		= dma_buf_mmap_internal,
@@ -374,6 +467,7 @@
 #ifdef CONFIG_COMPAT
 	.compat_ioctl	= dma_buf_ioctl,
 #endif
+	.show_fdinfo	= dma_buf_show_fdinfo,
 };
 
 /*
@@ -384,6 +478,32 @@
 	return file->f_op == &dma_buf_fops;
 }
 
+static struct file *dma_buf_getfile(struct dma_buf *dmabuf, int flags)
+{
+	struct file *file;
+	struct inode *inode = alloc_anon_inode(dma_buf_mnt->mnt_sb);
+
+	if (IS_ERR(inode))
+		return ERR_CAST(inode);
+
+	inode->i_size = dmabuf->size;
+	inode_set_bytes(inode, dmabuf->size);
+
+	file = alloc_file_pseudo(inode, dma_buf_mnt, "dmabuf",
+				 flags, &dma_buf_fops);
+	if (IS_ERR(file))
+		goto err_alloc_file;
+	file->f_flags = flags & (O_ACCMODE | O_NONBLOCK);
+	file->private_data = dmabuf;
+	file->f_path.dentry->d_fsdata = dmabuf;
+
+	return file;
+
+err_alloc_file:
+	iput(inode);
+	return file;
+}
+
 /**
  * DOC: dma buf device access
  *
@@ -482,7 +602,7 @@
 	init_waitqueue_head(&dmabuf->poll);
 	dmabuf->cb_excl.poll = dmabuf->cb_shared.poll = &dmabuf->poll;
 	dmabuf->cb_excl.active = dmabuf->cb_shared.active = 0;
-	dmabuf->name = bufname;
+	dmabuf->buf_name = bufname;
 	dmabuf->ktime = ktime_get();
 
 	if (!resv) {
@@ -491,8 +611,7 @@
 	}
 	dmabuf->resv = resv;
 
-	file = anon_inode_getfile(bufname, &dma_buf_fops, dmabuf,
-					exp_info->flags);
+	file = dma_buf_getfile(dmabuf, exp_info->flags);
 	if (IS_ERR(file)) {
 		ret = PTR_ERR(file);
 		goto err_dmabuf;
@@ -1178,8 +1297,9 @@
 		return ret;
 
 	seq_puts(s, "\nDma-buf Objects:\n");
-	seq_printf(s, "%-8s\t%-8s\t%-8s\t%-8s\t%-12s\t%-s\n",
-		   "size", "flags", "mode", "count", "exp_name", "buf name");
+	seq_printf(s, "%-8s\t%-8s\t%-8s\t%-8s\t%-12s\t%-s\t%-8s\n",
+		   "size", "flags", "mode", "count", "exp_name",
+		   "buf name", "ino");
 
 	list_for_each_entry(buf_obj, &db_list.head, list_node) {
 		ret = mutex_lock_interruptible(&buf_obj->lock);
@@ -1190,11 +1310,13 @@
 			continue;
 		}
 
-		seq_printf(s, "%08zu\t%08x\t%08x\t%08ld\t%-12s\t%-s\n",
+		seq_printf(s, "%08zu\t%08x\t%08x\t%08ld\t%-12s\t%-s\t%08lu\t%s\n",
 				buf_obj->size,
 				buf_obj->file->f_flags, buf_obj->file->f_mode,
 				file_count(buf_obj->file),
-				buf_obj->exp_name, buf_obj->name);
+				buf_obj->exp_name, buf_obj->buf_name,
+				file_inode(buf_obj->file)->i_ino,
+				buf_obj->name ?: "");
 
 		robj = buf_obj->resv;
 		while (true) {
@@ -1303,7 +1425,7 @@
 
 		elapmstime = ktime_divns(elapmstime, MSEC_PER_SEC);
 		seq_printf(s, "%-8s\t%-8ld\t%-8lld\n",
-				dmabuf->name,
+				dmabuf->buf_name,
 				dmabuf->size / SZ_1K,
 				elapmstime);
 	}
@@ -1449,6 +1571,10 @@
 
 static int __init dma_buf_init(void)
 {
+	dma_buf_mnt = kern_mount(&dma_buf_fs_type);
+	if (IS_ERR(dma_buf_mnt))
+		return PTR_ERR(dma_buf_mnt);
+
 	mutex_init(&db_list.lock);
 	INIT_LIST_HEAD(&db_list.head);
 	dma_buf_init_debugfs();
@@ -1459,5 +1585,6 @@
 static void __exit dma_buf_deinit(void)
 {
 	dma_buf_uninit_debugfs();
+	kern_unmount(dma_buf_mnt);
 }
 __exitcall(dma_buf_deinit);
diff --git a/drivers/dma/qcom/gpi.c b/drivers/dma/qcom/gpi.c
index d9eeab1..22cbca7 100644
--- a/drivers/dma/qcom/gpi.c
+++ b/drivers/dma/qcom/gpi.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/atomic.h>
@@ -582,7 +582,7 @@
 	struct gpi_reg_table dbg_reg_table;
 	bool reg_table_dump;
 	u32 dbg_gpi_irq_cnt;
-	bool ieob_set;
+	bool unlock_tre_set;
 };
 
 struct gpi_desc {
@@ -1449,6 +1449,22 @@
 			      client_info->cb_param);
 }
 
+/* free gpi_desc for the specified channel */
+static void gpi_free_chan_desc(struct gpii_chan *gpii_chan)
+{
+	struct virt_dma_desc *vd;
+	struct gpi_desc *gpi_desc;
+	unsigned long flags;
+
+	spin_lock_irqsave(&gpii_chan->vc.lock, flags);
+	vd = vchan_next_desc(&gpii_chan->vc);
+	gpi_desc = to_gpi_desc(vd);
+	list_del(&vd->node);
+	spin_unlock_irqrestore(&gpii_chan->vc.lock, flags);
+	kfree(gpi_desc);
+	gpi_desc = NULL;
+}
+
 /* process DMA Immediate completion data events */
 static void gpi_process_imed_data_event(struct gpii_chan *gpii_chan,
 					struct immediate_data_event *imed_event)
@@ -1462,6 +1478,7 @@
 	struct msm_gpi_dma_async_tx_cb_param *tx_cb_param;
 	unsigned long flags;
 	u32 chid;
+	struct gpii_chan *gpii_tx_chan = &gpii->gpii_chan[GPI_TX_CHAN];
 
 	/*
 	 * If channel not active don't process event but let
@@ -1514,12 +1531,33 @@
 	/* make sure rp updates are immediately visible to all cores */
 	smp_wmb();
 
+	/*
+	 * If unlock tre is present, don't send transfer callback on
+	 * on IEOT, wait for unlock IEOB. Free the respective channel
+	 * descriptors.
+	 * If unlock is not present, IEOB indicates freeing the descriptor
+	 * and IEOT indicates channel transfer completion.
+	 */
 	chid = imed_event->chid;
-	if (imed_event->code == MSM_GPI_TCE_EOT && gpii->ieob_set) {
-		if (chid == GPI_RX_CHAN)
-			goto gpi_free_desc;
-		else
+	if (gpii->unlock_tre_set) {
+		if (chid == GPI_RX_CHAN) {
+			if (imed_event->code == MSM_GPI_TCE_EOT)
+				goto gpi_free_desc;
+			else if (imed_event->code == MSM_GPI_TCE_UNEXP_ERR)
+				/*
+				 * In case of an error in a read transfer on a
+				 * shared se, unlock tre will not be processed
+				 * as channels go to bad state so tx desc should
+				 * be freed manually.
+				 */
+				gpi_free_chan_desc(gpii_tx_chan);
+			else
+				return;
+		} else if (imed_event->code == MSM_GPI_TCE_EOT) {
 			return;
+		}
+	} else if (imed_event->code == MSM_GPI_TCE_EOB) {
+		goto gpi_free_desc;
 	}
 
 	tx_cb_param = vd->tx.callback_param;
@@ -1539,11 +1577,7 @@
 	}
 
 gpi_free_desc:
-	spin_lock_irqsave(&gpii_chan->vc.lock, flags);
-	list_del(&vd->node);
-	spin_unlock_irqrestore(&gpii_chan->vc.lock, flags);
-	kfree(gpi_desc);
-	gpi_desc = NULL;
+	gpi_free_chan_desc(gpii_chan);
 }
 
 /* processing transfer completion events */
@@ -1558,6 +1592,7 @@
 	struct gpi_desc *gpi_desc;
 	unsigned long flags;
 	u32 chid;
+	struct gpii_chan *gpii_tx_chan = &gpii->gpii_chan[GPI_TX_CHAN];
 
 	/* only process events on active channel */
 	if (unlikely(gpii_chan->pm_state != ACTIVE_STATE)) {
@@ -1602,12 +1637,33 @@
 	/* update must be visible to other cores */
 	smp_wmb();
 
+	/*
+	 * If unlock tre is present, don't send transfer callback on
+	 * on IEOT, wait for unlock IEOB. Free the respective channel
+	 * descriptors.
+	 * If unlock is not present, IEOB indicates freeing the descriptor
+	 * and IEOT indicates channel transfer completion.
+	 */
 	chid = compl_event->chid;
-	if (compl_event->code == MSM_GPI_TCE_EOT && gpii->ieob_set) {
-		if (chid == GPI_RX_CHAN)
-			goto gpi_free_desc;
-		else
+	if (gpii->unlock_tre_set) {
+		if (chid == GPI_RX_CHAN) {
+			if (compl_event->code == MSM_GPI_TCE_EOT)
+				goto gpi_free_desc;
+			else if (compl_event->code == MSM_GPI_TCE_UNEXP_ERR)
+				/*
+				 * In case of an error in a read transfer on a
+				 * shared se, unlock tre will not be processed
+				 * as channels go to bad state so tx desc should
+				 * be freed manually.
+				 */
+				gpi_free_chan_desc(gpii_tx_chan);
+			else
+				return;
+		} else if (compl_event->code == MSM_GPI_TCE_EOT) {
 			return;
+		}
+	} else if (compl_event->code == MSM_GPI_TCE_EOB) {
+		goto gpi_free_desc;
 	}
 
 	tx_cb_param = vd->tx.callback_param;
@@ -1623,11 +1679,7 @@
 	}
 
 gpi_free_desc:
-	spin_lock_irqsave(&gpii_chan->vc.lock, flags);
-	list_del(&vd->node);
-	spin_unlock_irqrestore(&gpii_chan->vc.lock, flags);
-	kfree(gpi_desc);
-	gpi_desc = NULL;
+	gpi_free_chan_desc(gpii_chan);
 
 }
 
@@ -2325,7 +2377,7 @@
 	void *tre, *wp = NULL;
 	const gfp_t gfp = GFP_ATOMIC;
 	struct gpi_desc *gpi_desc;
-	gpii->ieob_set = false;
+	u32 tre_type;
 
 	GPII_VERB(gpii, gpii_chan->chid, "enter\n");
 
@@ -2362,13 +2414,12 @@
 	for_each_sg(sgl, sg, sg_len, i) {
 		tre = sg_virt(sg);
 
-		/* Check if last tre has ieob set */
+		/* Check if last tre is an unlock tre */
 		if (i == sg_len - 1) {
-			if ((((struct msm_gpi_tre *)tre)->dword[3] &
-					GPI_IEOB_BMSK) >> GPI_IEOB_BMSK_SHIFT)
-				gpii->ieob_set = true;
-			else
-				gpii->ieob_set = false;
+			tre_type =
+			MSM_GPI_TRE_TYPE(((struct msm_gpi_tre *)tre));
+			gpii->unlock_tre_set =
+			tre_type == MSM_GPI_TRE_UNLOCK ? true : false;
 		}
 
 		for (j = 0; j < sg->length;
diff --git a/drivers/edac/kryo_arm64_edac.c b/drivers/edac/kryo_arm64_edac.c
index eaa333f..f9e4ab5 100644
--- a/drivers/edac/kryo_arm64_edac.c
+++ b/drivers/edac/kryo_arm64_edac.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2020, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/kernel.h>
@@ -11,6 +11,7 @@
 #include <linux/cpu.h>
 #include <linux/cpu_pm.h>
 #include <linux/interrupt.h>
+#include <linux/notifier.h>
 #include <linux/of_irq.h>
 
 #include <asm/cputype.h>
@@ -136,6 +137,7 @@
 	struct edac_device_ctl_info *edev_ctl;
 	struct erp_drvdata __percpu **erp_cpu_drvdata;
 	struct notifier_block nb_pm;
+	struct notifier_block nb_panic;
 	int ppi;
 };
 
@@ -403,6 +405,21 @@
 			edev_ctl, 0);
 }
 
+static int kryo_cpu_panic_notify(struct notifier_block *this,
+				unsigned long event, void *ptr)
+{
+	struct edac_device_ctl_info *edev_ctl =
+				panic_handler_drvdata->edev_ctl;
+
+	edev_ctl->panic_on_ce = 0;
+	edev_ctl->panic_on_ue = 0;
+
+	kryo_check_l3_scu_error(edev_ctl);
+	kryo_check_l1_l2_ecc(edev_ctl);
+
+	return NOTIFY_OK;
+}
+
 static irqreturn_t kryo_l1_l2_handler(int irq, void *drvdata)
 {
 	kryo_check_l1_l2_ecc(panic_handler_drvdata->edev_ctl);
@@ -488,6 +505,9 @@
 	drv->edev_ctl->panic_on_ce = ARM64_ERP_PANIC_ON_CE;
 	drv->edev_ctl->panic_on_ue = ARM64_ERP_PANIC_ON_UE;
 	drv->nb_pm.notifier_call = kryo_pmu_cpu_pm_notify;
+	drv->nb_panic.notifier_call = kryo_cpu_panic_notify;
+	atomic_notifier_chain_register(&panic_notifier_list,
+				       &drv->nb_panic);
 	platform_set_drvdata(pdev, drv);
 
 	rc = edac_device_add_device(drv->edev_ctl);
diff --git a/drivers/gnss/Kconfig b/drivers/gnss/Kconfig
index 6abc885..73482e8 100644
--- a/drivers/gnss/Kconfig
+++ b/drivers/gnss/Kconfig
@@ -40,4 +40,19 @@
 
 	  If unsure, say N.
 
+config GNSS_CMDLINE_SERIAL
+	tristate "Command line test driver for GNSS"
+	depends on SERIAL_DEV_BUS
+	select GNSS_SERIAL
+	---help---
+	  Say Y here if you want to test the GNSS subsystem but do not have a
+	  way to communicate a binding through firmware such as DT or ACPI.
+	  The correct serdev device and protocol type must be specified on
+	  the module command line.
+
+	  To compile this driver as a module, choose M here: the module will
+	  be called gnss-cmdline.
+
+	  If unsure, say N.
+
 endif # GNSS
diff --git a/drivers/gnss/Makefile b/drivers/gnss/Makefile
index 5cf0ebe..d517c30 100644
--- a/drivers/gnss/Makefile
+++ b/drivers/gnss/Makefile
@@ -14,3 +14,6 @@
 
 obj-$(CONFIG_GNSS_UBX_SERIAL)		+= gnss-ubx.o
 gnss-ubx-y := ubx.o
+
+obj-$(CONFIG_GNSS_CMDLINE_SERIAL)	+= gnss-cmdline.o
+gnss-cmdline-y := cmdline.o
diff --git a/drivers/gnss/cmdline.c b/drivers/gnss/cmdline.c
new file mode 100644
index 0000000..3e1d2463
--- /dev/null
+++ b/drivers/gnss/cmdline.c
@@ -0,0 +1,139 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Test driver for GNSS. This driver requires the serdev binding and protocol
+ * type to be specified on the module command line.
+ *
+ * Copyright 2019 Google LLC
+ */
+
+#include <linux/device.h>
+#include <linux/gnss.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/serdev.h>
+#include <linux/slab.h>
+#include <linux/string.h>
+
+#include "serial.h"
+
+#define GNSS_CMDLINE_MODULE_NAME "gnss-cmdline"
+
+#define gnss_cmdline_err(...) \
+	pr_err(GNSS_CMDLINE_MODULE_NAME ": " __VA_ARGS__)
+
+static char *serdev;
+module_param(serdev, charp, 0644);
+MODULE_PARM_DESC(serdev, "serial device to wrap");
+
+static int type;
+module_param(type, int, 0644);
+MODULE_PARM_DESC(serdev, "GNSS protocol type (see 'enum gnss_type')");
+
+static struct serdev_device *serdev_device;
+
+static int name_match(struct device *dev, void *data)
+{
+	return strstr(dev_name(dev), data) != NULL;
+}
+
+static int __init gnss_cmdline_init(void)
+{
+	struct device *serial_dev, *port_dev, *serdev_dev;
+	char *driver_name, *port_name, *serdev_name;
+	char *serdev_dup, *serdev_dup_sep;
+	struct gnss_serial *gserial;
+	int err = -ENODEV;
+
+	/* User did not set the serdev module parameter */
+	if (!serdev)
+		return 0;
+
+	if (type < 0 || type >= GNSS_TYPE_COUNT) {
+		gnss_cmdline_err("invalid gnss type '%d'\n", type);
+		return -EINVAL;
+	}
+
+	serdev_dup = serdev_dup_sep = kstrdup(serdev, GFP_KERNEL);
+	if (!serdev_dup)
+		return -ENOMEM;
+
+	driver_name = strsep(&serdev_dup_sep, "/");
+	if (!driver_name) {
+		gnss_cmdline_err("driver name missing\n");
+		goto err_free_serdev_dup;
+	}
+
+	port_name = strsep(&serdev_dup_sep, "/");
+	if (!port_name) {
+		gnss_cmdline_err("port name missing\n");
+		goto err_free_serdev_dup;
+	}
+
+	serdev_name = strsep(&serdev_dup_sep, "/");
+	if (!serdev_name) {
+		gnss_cmdline_err("serdev name missing\n");
+		goto err_free_serdev_dup;
+	}
+
+	/* Find the driver device instance (e.g. serial8250) */
+	serial_dev = bus_find_device_by_name(&platform_bus_type,
+					     NULL, driver_name);
+	if (!serial_dev) {
+		gnss_cmdline_err("no device '%s'\n", driver_name);
+		goto err_free_serdev_dup;
+	}
+
+	/* Find the port device instance (e.g. serial0) */
+	port_dev = device_find_child(serial_dev, port_name, name_match);
+	if (!port_dev) {
+		gnss_cmdline_err("no port '%s'\n", port_name);
+		goto err_free_serdev_dup;
+	}
+
+	/* Find the serdev device instance (e.g. serial0-0) */
+	serdev_dev = device_find_child(port_dev, serdev_name, name_match);
+	if (!serdev_dev) {
+		gnss_cmdline_err("no serdev '%s'\n", serdev_name);
+		goto err_free_serdev_dup;
+	}
+
+	gserial = gnss_serial_allocate(to_serdev_device(serdev_dev), 0);
+	if (IS_ERR(gserial)) {
+		err = PTR_ERR(gserial);
+		goto err_free_serdev_dup;
+	}
+
+	gserial->gdev->type = type;
+
+	err = gnss_serial_register(gserial);
+	if (err) {
+		gnss_serial_free(gserial);
+		goto err_free_serdev_dup;
+	}
+
+	serdev_device = to_serdev_device(serdev_dev);
+	err = 0;
+err_free_serdev_dup:
+	kfree(serdev_dup);
+	return err;
+}
+
+static void __exit gnss_cmdline_exit(void)
+{
+	struct gnss_serial *gserial;
+
+	if (!serdev_device)
+		return;
+
+	gserial = serdev_device_get_drvdata(serdev_device);
+
+	gnss_serial_deregister(gserial);
+	gnss_serial_free(gserial);
+}
+
+module_init(gnss_cmdline_init);
+module_exit(gnss_cmdline_exit);
+
+MODULE_AUTHOR("Alistair Delva <adelva@google.com>");
+MODULE_DESCRIPTION("GNSS command line driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig
index ed51221..4877999 100644
--- a/drivers/gpio/Kconfig
+++ b/drivers/gpio/Kconfig
@@ -12,7 +12,6 @@
 
 menuconfig GPIOLIB
 	bool "GPIO Support"
-	select ANON_INODES
 	help
 	  This enables GPIO support through the generic GPIO library.
 	  You only need to enable this, if you also want to enable
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
index f92597c..40339d0 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
@@ -1158,7 +1158,7 @@
 		alloc_flags = 0;
 		if (!offset || !*offset)
 			return -EINVAL;
-		user_addr = *offset;
+		user_addr = untagged_addr(*offset);
 	} else {
 		return -EINVAL;
 	}
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
index 71792d8..b542384 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
@@ -299,6 +299,8 @@
 	uint32_t handle;
 	int r;
 
+	args->addr = untagged_addr(args->addr);
+
 	if (offset_in_page(args->addr | args->size))
 		return -EINVAL;
 
diff --git a/drivers/gpu/drm/bridge/lt9611uxc.c b/drivers/gpu/drm/bridge/lt9611uxc.c
index cbe9572..8c27c26 100644
--- a/drivers/gpu/drm/bridge/lt9611uxc.c
+++ b/drivers/gpu/drm/bridge/lt9611uxc.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2020, The Linux Foundation. All rights reserved.
  */
 
 #define pr_fmt(fmt) "%s: " fmt, __func__
@@ -17,6 +17,7 @@
 #include <linux/gpio.h>
 #include <linux/interrupt.h>
 #include <linux/component.h>
+#include <linux/workqueue.h>
 #include <linux/of_gpio.h>
 #include <linux/of_graph.h>
 #include <linux/of_irq.h>
@@ -39,8 +40,6 @@
 #define EDID_SEG_SIZE 256
 #define READ_BUF_MAX_SIZE 64
 #define WRITE_BUF_MAX_SIZE 64
-#define HPD_UEVENT_BUFFER_SIZE 30
-#define VERSION_NUM	0x32
 
 struct lt9611_reg_cfg {
 	u8 reg;
@@ -119,6 +118,9 @@
 	struct drm_display_mode curr_mode;
 	struct lt9611_video_cfg video_cfg;
 
+	struct workqueue_struct *wq;
+	struct work_struct work;
+
 	u8 edid_buf[EDID_SEG_SIZE];
 	u8 i2c_wbuf[WRITE_BUF_MAX_SIZE];
 	u8 i2c_rbuf[READ_BUF_MAX_SIZE];
@@ -146,6 +148,41 @@
 	{0xffff, 0xffff, 0xff, 0xff, 0xff},
 };
 
+void lt9611_hpd_work(struct work_struct *work)
+{
+	char name[32], status[32];
+	char *envp[5];
+	char *event_string = "HOTPLUG=1";
+	enum drm_connector_status last_status;
+	struct drm_device *dev = NULL;
+	struct lt9611 *pdata = container_of(work, struct lt9611, work);
+
+	if (!pdata || !pdata->connector.funcs ||
+		!pdata->connector.funcs->detect)
+		return;
+
+	dev = pdata->connector.dev;
+	last_status = pdata->connector.status;
+	pdata->connector.status =
+		pdata->connector.funcs->detect(&pdata->connector, true);
+
+	if (last_status == pdata->connector.status)
+		return;
+
+	scnprintf(name, 32, "name=%s",
+		  pdata->connector.name);
+	scnprintf(status, 32, "status=%s",
+		  drm_get_connector_status_name(pdata->connector.status));
+	pr_debug("[%s]:[%s]\n", name, status);
+	envp[0] = name;
+	envp[1] = status;
+	envp[2] = event_string;
+	envp[3] = NULL;
+	envp[4] = NULL;
+	kobject_uevent_env(&dev->primary->kdev->kobj, KOBJ_CHANGE,
+			   envp);
+}
+
 static struct lt9611 *bridge_to_lt9611(struct drm_bridge *bridge)
 {
 	return container_of(bridge, struct lt9611, bridge);
@@ -290,6 +327,7 @@
 
 	lt9611_write_byte(pdata, 0xFF, 0x80);
 	lt9611_write_byte(pdata, 0xEE, 0x00);
+	msleep(50);
 
 	return revison;
 }
@@ -813,13 +851,35 @@
 
 	lt9611_write_byte(pdata, 0xFF, 0x80);
 	lt9611_write_byte(pdata, 0xEE, 0x00);
+	msleep(50);
 
 	return ret;
 }
 
 static irqreturn_t lt9611_irq_thread_handler(int irq, void *dev_id)
 {
-	pr_debug("irq_thread_handler\n");
+	u8 irq_status = 0, hpd_status = 0;
+	struct lt9611 *pdata = (struct lt9611 *)dev_id;
+
+	lt9611_write_byte(pdata, 0xFF, 0x80);
+	lt9611_write_byte(pdata, 0xEE, 0x01);
+	lt9611_write_byte(pdata, 0xFF, 0xB0);
+	if (!lt9611_read(pdata, 0x22, &irq_status, 1)) {
+		pr_debug("irq status 0x%x\n", irq_status);
+		if (irq_status) {
+			lt9611_write_byte(pdata, 0x22, 0);
+			lt9611_read(pdata, 0x23, &hpd_status, 1);
+			pr_debug("irq hpd status 0x%x\n", hpd_status);
+		}
+	} else
+		pr_err("get irq status failed\n");
+	lt9611_write_byte(pdata, 0xFF, 0x80);
+	lt9611_write_byte(pdata, 0xEE, 0x00);
+
+	msleep(50);
+	if (irq_status & (BIT(0) | BIT(1)))
+		queue_work(pdata->wq, &pdata->work);
+
 	return IRQ_HANDLED;
 }
 
@@ -832,7 +892,7 @@
 		gpio_set_value(pdata->reset_gpio, 0);
 		msleep(20);
 		gpio_set_value(pdata->reset_gpio, 1);
-		msleep(20);
+		msleep(300);
 	} else {
 		gpio_set_value(pdata->reset_gpio, 0);
 	}
@@ -1238,7 +1298,24 @@
 static enum drm_connector_status
 lt9611_connector_detect(struct drm_connector *connector, bool force)
 {
+	u8 hpd_status = 0;
 	struct lt9611 *pdata = connector_to_lt9611(connector);
+
+	pdata->status = connector_status_disconnected;
+	if (force) {
+		lt9611_write_byte(pdata, 0xFF, 0x80);
+		lt9611_write_byte(pdata, 0xEE, 0x01);
+		lt9611_write_byte(pdata, 0xFF, 0xB0);
+		if (!lt9611_read(pdata, 0x23, &hpd_status, 1)) {
+			if (hpd_status & BIT(1))
+				pdata->status = connector_status_connected;
+			pr_debug("hpd status %x\n", hpd_status);
+		} else
+			pr_err("read hpd status failed\n");
+		lt9611_write_byte(pdata, 0xFF, 0x80);
+		lt9611_write_byte(pdata, 0xEE, 0x00);
+		msleep(50);
+	} else
 		pdata->status = connector_status_connected;
 
 	return pdata->status;
@@ -1638,26 +1715,22 @@
 
 	lt9611_reset(pdata, true);
 
-	pdata->irq = gpio_to_irq(pdata->irq_gpio);
-	ret = request_threaded_irq(pdata->irq, NULL, lt9611_irq_thread_handler,
-		IRQF_TRIGGER_FALLING | IRQF_ONESHOT, "lt9611", pdata);
-	if (ret) {
-		pr_err("failed to request irq\n");
-		goto err_i2c_prog;
-	}
-
 	ret = lt9611_read_device_id(pdata);
 	if (ret) {
 		pr_err("failed to read chip rev\n");
-		goto err_sysfs_init;
+		goto err_i2c_prog;
 	}
 
-	msleep(200);
-
 	i2c_set_clientdata(client, pdata);
 	dev_set_drvdata(&client->dev, pdata);
 
-	if (lt9611_get_version(pdata) == VERSION_NUM) {
+	ret = lt9611_sysfs_init(&client->dev);
+	if (ret) {
+		pr_err("sysfs init failed\n");
+		goto err_i2c_prog;
+	}
+
+	if (lt9611_get_version(pdata)) {
 		pr_info("LT9611 works, no need to upgrade FW\n");
 	} else {
 		ret = request_firmware_nowait(THIS_MODULE, true,
@@ -1666,17 +1739,11 @@
 		if (ret) {
 			dev_err(&client->dev,
 				"Failed to invoke firmware loader: %d\n", ret);
-			goto err_sysfs_init;
+			goto err_i2c_prog;
 		} else
 			return 0;
 	}
 
-	ret = lt9611_sysfs_init(&client->dev);
-	if (ret) {
-		pr_err("sysfs init failed\n");
-		goto err_sysfs_init;
-	}
-
 #if IS_ENABLED(CONFIG_OF)
 	pdata->bridge.of_node = client->dev.of_node;
 #endif
@@ -1684,11 +1751,23 @@
 	pdata->bridge.funcs = &lt9611_bridge_funcs;
 	drm_bridge_add(&pdata->bridge);
 
+	pdata->wq = create_singlethread_workqueue("lt9611_wk");
+	if (!pdata->wq) {
+		pr_err("Error creating lt9611 wq\n");
+		goto err_i2c_prog;
+	}
+	INIT_WORK(&pdata->work, lt9611_hpd_work);
+
+	pdata->irq = gpio_to_irq(pdata->irq_gpio);
+	ret = request_threaded_irq(pdata->irq, NULL, lt9611_irq_thread_handler,
+		IRQF_TRIGGER_FALLING | IRQF_ONESHOT, "lt9611_irq", pdata);
+	if (ret) {
+		pr_err("failed to request irq\n");
+		goto err_i2c_prog;
+	}
+
 	return 0;
 
-err_sysfs_init:
-	disable_irq(pdata->irq);
-	free_irq(pdata->irq, pdata);
 err_i2c_prog:
 	lt9611_gpio_configure(pdata, false);
 err_dt_supply:
@@ -1729,7 +1808,8 @@
 	}
 
 	devm_kfree(&client->dev, pdata);
-
+	if (pdata->wq)
+		destroy_workqueue(pdata->wq);
 end:
 	return ret;
 }
diff --git a/drivers/gpu/drm/drm_client.c b/drivers/gpu/drm/drm_client.c
index df31c38..d394469 100644
--- a/drivers/gpu/drm/drm_client.c
+++ b/drivers/gpu/drm/drm_client.c
@@ -60,7 +60,6 @@
 
 	drm_file_free(client->file);
 }
-EXPORT_SYMBOL(drm_client_close);
 
 /**
  * drm_client_init - Initialise a DRM client
diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
index 7300adb..0d6bdaf 100644
--- a/drivers/gpu/drm/drm_connector.c
+++ b/drivers/gpu/drm/drm_connector.c
@@ -256,9 +256,7 @@
 
 	if (connector_type != DRM_MODE_CONNECTOR_VIRTUAL &&
 	    connector_type != DRM_MODE_CONNECTOR_WRITEBACK)
-		drm_object_attach_property(&connector->base,
-					      config->edid_property,
-					      0);
+		drm_connector_attach_edid_property(connector);
 
 	drm_object_attach_property(&connector->base,
 				      config->dpms_property, 0);
@@ -291,6 +289,25 @@
 EXPORT_SYMBOL(drm_connector_init);
 
 /**
+ * drm_connector_attach_edid_property - attach edid property.
+ * @dev: DRM device
+ * @connector: the connector
+ *
+ * Some connector types like DRM_MODE_CONNECTOR_VIRTUAL do not get a
+ * edid property attached by default.  This function can be used to
+ * explicitly enable the edid property in these cases.
+ */
+void drm_connector_attach_edid_property(struct drm_connector *connector)
+{
+	struct drm_mode_config *config = &connector->dev->mode_config;
+
+	drm_object_attach_property(&connector->base,
+				   config->edid_property,
+				   0);
+}
+EXPORT_SYMBOL(drm_connector_attach_edid_property);
+
+/**
  * drm_connector_attach_encoder - attach a connector to an encoder
  * @connector: connector to attach
  * @encoder: encoder to attach @connector to
diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c
index ba129b6..aa6b551 100644
--- a/drivers/gpu/drm/drm_ioctl.c
+++ b/drivers/gpu/drm/drm_ioctl.c
@@ -650,9 +650,9 @@
 	DRM_IOCTL_DEF(DRM_IOCTL_MODE_RMFB, drm_mode_rmfb_ioctl, DRM_UNLOCKED),
 	DRM_IOCTL_DEF(DRM_IOCTL_MODE_PAGE_FLIP, drm_mode_page_flip_ioctl, DRM_MASTER|DRM_UNLOCKED),
 	DRM_IOCTL_DEF(DRM_IOCTL_MODE_DIRTYFB, drm_mode_dirtyfb_ioctl, DRM_MASTER|DRM_UNLOCKED),
-	DRM_IOCTL_DEF(DRM_IOCTL_MODE_CREATE_DUMB, drm_mode_create_dumb_ioctl, DRM_UNLOCKED),
-	DRM_IOCTL_DEF(DRM_IOCTL_MODE_MAP_DUMB, drm_mode_mmap_dumb_ioctl, DRM_UNLOCKED),
-	DRM_IOCTL_DEF(DRM_IOCTL_MODE_DESTROY_DUMB, drm_mode_destroy_dumb_ioctl, DRM_UNLOCKED),
+	DRM_IOCTL_DEF(DRM_IOCTL_MODE_CREATE_DUMB, drm_mode_create_dumb_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW),
+	DRM_IOCTL_DEF(DRM_IOCTL_MODE_MAP_DUMB, drm_mode_mmap_dumb_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW),
+	DRM_IOCTL_DEF(DRM_IOCTL_MODE_DESTROY_DUMB, drm_mode_destroy_dumb_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW),
 	DRM_IOCTL_DEF(DRM_IOCTL_MODE_OBJ_GETPROPERTIES, drm_mode_obj_get_properties_ioctl, DRM_UNLOCKED),
 	DRM_IOCTL_DEF(DRM_IOCTL_MODE_OBJ_SETPROPERTY, drm_mode_obj_set_property_ioctl, DRM_MASTER|DRM_UNLOCKED),
 	DRM_IOCTL_DEF(DRM_IOCTL_MODE_CURSOR2, drm_mode_cursor2_ioctl, DRM_MASTER|DRM_UNLOCKED),
diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
index 186db2e..1c32b70 100644
--- a/drivers/gpu/drm/drm_prime.c
+++ b/drivers/gpu/drm/drm_prime.c
@@ -679,6 +679,43 @@
 EXPORT_SYMBOL(drm_gem_prime_handle_to_fd);
 
 /**
+ * drm_gem_prime_mmap - PRIME mmap function for GEM drivers
+ * @obj: GEM object
+ * @vma: Virtual address range
+ *
+ * This function sets up a userspace mapping for PRIME exported buffers using
+ * the same codepath that is used for regular GEM buffer mapping on the DRM fd.
+ * The fake GEM offset is added to vma->vm_pgoff and &drm_driver->fops->mmap is
+ * called to set up the mapping.
+ *
+ * Drivers can use this as their &drm_driver.gem_prime_mmap callback.
+ */
+int drm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)
+{
+	/* Used by drm_gem_mmap() to lookup the GEM object */
+	struct drm_file priv = {
+		.minor = obj->dev->primary,
+	};
+	struct file fil = {
+		.private_data = &priv,
+	};
+	int ret;
+
+	ret = drm_vma_node_allow(&obj->vma_node, &priv);
+	if (ret)
+		return ret;
+
+	vma->vm_pgoff += drm_vma_node_start(&obj->vma_node);
+
+	ret = obj->dev->driver->fops->mmap(&fil, vma);
+
+	drm_vma_node_revoke(&obj->vma_node, &priv);
+
+	return ret;
+}
+EXPORT_SYMBOL(drm_gem_prime_mmap);
+
+/**
  * drm_gem_prime_import_dev - core implementation of the import callback
  * @dev: drm_device to import into
  * @dma_buf: dma-buf object to import
diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
index f08c547..5289481 100644
--- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
+++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
@@ -1604,7 +1604,9 @@
 		 * happened we would make the mistake of assuming that the
 		 * relocations were valid.
 		 */
-		user_access_begin();
+		if (!user_access_begin(VERIFY_WRITE, urelocs, size))
+			goto end_user;
+
 		for (copied = 0; copied < nreloc; copied++)
 			unsafe_put_user(-1,
 					&urelocs[copied].presumed_offset,
@@ -2649,7 +2651,17 @@
 		unsigned int i;
 
 		/* Copy the new buffer offsets back to the user's exec list. */
-		user_access_begin();
+		/*
+		 * Note: count * sizeof(*user_exec_list) does not overflow,
+		 * because we checked 'count' in check_buffer_count().
+		 *
+		 * And this range already got effectively checked earlier
+		 * when we did the "copy_from_user()" above.
+		 */
+		if (!user_access_begin(VERIFY_WRITE, user_exec_list,
+				       count * sizeof(*user_exec_list)))
+			goto end_user;
+
 		for (i = 0; i < args->buffer_count; i++) {
 			if (!(exec2_list[i].offset & UPDATE))
 				continue;
diff --git a/drivers/gpu/drm/radeon/radeon_gem.c b/drivers/gpu/drm/radeon/radeon_gem.c
index 27d8e7d..8572caf 100644
--- a/drivers/gpu/drm/radeon/radeon_gem.c
+++ b/drivers/gpu/drm/radeon/radeon_gem.c
@@ -291,6 +291,8 @@
 	uint32_t handle;
 	int r;
 
+	args->addr = untagged_addr(args->addr);
+
 	if (offset_in_page(args->addr | args->size))
 		return -EINVAL;
 
diff --git a/drivers/gpu/drm/virtio/Makefile b/drivers/gpu/drm/virtio/Makefile
index f29deec..11e25e9 100644
--- a/drivers/gpu/drm/virtio/Makefile
+++ b/drivers/gpu/drm/virtio/Makefile
@@ -6,6 +6,6 @@
 virtio-gpu-y := virtgpu_drv.o virtgpu_kms.o virtgpu_drm_bus.o virtgpu_gem.o \
 	virtgpu_fb.o virtgpu_display.o virtgpu_vq.o virtgpu_ttm.o \
 	virtgpu_fence.o virtgpu_object.o virtgpu_debugfs.o virtgpu_plane.o \
-	virtgpu_ioctl.o virtgpu_prime.o
+	virtgpu_ioctl.o virtgpu_prime.o virtgpu_trace_points.o
 
 obj-$(CONFIG_DRM_VIRTIO_GPU) += virtio-gpu.o
diff --git a/drivers/gpu/drm/virtio/virtgpu_debugfs.c b/drivers/gpu/drm/virtio/virtgpu_debugfs.c
index 73dc990..ed0fcda 100644
--- a/drivers/gpu/drm/virtio/virtgpu_debugfs.c
+++ b/drivers/gpu/drm/virtio/virtgpu_debugfs.c
@@ -28,6 +28,30 @@
 
 #include "virtgpu_drv.h"
 
+static void virtio_add_bool(struct seq_file *m, const char *name,
+				    bool value)
+{
+	seq_printf(m, "%-16s : %s\n", name, value ? "yes" : "no");
+}
+
+static void virtio_add_int(struct seq_file *m, const char *name,
+				   int value)
+{
+	seq_printf(m, "%-16s : %d\n", name, value);
+}
+
+static int virtio_gpu_features(struct seq_file *m, void *data)
+{
+	struct drm_info_node *node = (struct drm_info_node *) m->private;
+	struct virtio_gpu_device *vgdev = node->minor->dev->dev_private;
+
+	virtio_add_bool(m, "virgl", vgdev->has_virgl_3d);
+	virtio_add_bool(m, "edid", vgdev->has_edid);
+	virtio_add_int(m, "cap sets", vgdev->num_capsets);
+	virtio_add_int(m, "scanouts", vgdev->num_scanouts);
+	return 0;
+}
+
 static int
 virtio_gpu_debugfs_irq_info(struct seq_file *m, void *data)
 {
@@ -41,7 +65,8 @@
 }
 
 static struct drm_info_list virtio_gpu_debugfs_list[] = {
-	{ "irq_fence", virtio_gpu_debugfs_irq_info, 0, NULL },
+	{ "virtio-gpu-features", virtio_gpu_features },
+	{ "virtio-gpu-irq-fence", virtio_gpu_debugfs_irq_info, 0, NULL },
 };
 
 #define VIRTIO_GPU_DEBUGFS_ENTRIES ARRAY_SIZE(virtio_gpu_debugfs_list)
diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c b/drivers/gpu/drm/virtio/virtgpu_display.c
index 25503b9..d168fb6 100644
--- a/drivers/gpu/drm/virtio/virtgpu_display.c
+++ b/drivers/gpu/drm/virtio/virtgpu_display.c
@@ -75,12 +75,9 @@
 			    struct drm_gem_object *obj)
 {
 	int ret;
-	struct virtio_gpu_object *bo;
 
 	vgfb->base.obj[0] = obj;
 
-	bo = gem_to_virtio_gpu_obj(obj);
-
 	drm_helper_mode_fill_fb_struct(dev, &vgfb->base, mode_cmd);
 
 	ret = drm_framebuffer_init(dev, &vgfb->base, &virtio_gpu_fb_funcs);
@@ -109,6 +106,9 @@
 static void virtio_gpu_crtc_atomic_enable(struct drm_crtc *crtc,
 					  struct drm_crtc_state *old_state)
 {
+	struct virtio_gpu_output *output = drm_crtc_to_virtio_gpu_output(crtc);
+
+	output->enabled = true;
 }
 
 static void virtio_gpu_crtc_atomic_disable(struct drm_crtc *crtc,
@@ -119,6 +119,7 @@
 	struct virtio_gpu_output *output = drm_crtc_to_virtio_gpu_output(crtc);
 
 	virtio_gpu_cmd_set_scanout(vgdev, output->index, 0, 0, 0, 0, 0);
+	output->enabled = false;
 }
 
 static int virtio_gpu_crtc_atomic_check(struct drm_crtc *crtc,
@@ -168,6 +169,12 @@
 	struct drm_display_mode *mode = NULL;
 	int count, width, height;
 
+	if (output->edid) {
+		count = drm_add_edid_modes(connector, output->edid);
+		if (count)
+			return count;
+	}
+
 	width  = le32_to_cpu(output->info.r.width);
 	height = le32_to_cpu(output->info.r.height);
 	count = drm_add_modes_noedid(connector, XRES_MAX, YRES_MAX);
@@ -236,12 +243,8 @@
 
 static void virtio_gpu_conn_destroy(struct drm_connector *connector)
 {
-	struct virtio_gpu_output *virtio_gpu_output =
-		drm_connector_to_virtio_gpu_output(connector);
-
 	drm_connector_unregister(connector);
 	drm_connector_cleanup(connector);
-	kfree(virtio_gpu_output);
 }
 
 static const struct drm_connector_funcs virtio_gpu_connector_funcs = {
@@ -286,6 +289,8 @@
 	drm_connector_init(dev, connector, &virtio_gpu_connector_funcs,
 			   DRM_MODE_CONNECTOR_VIRTUAL);
 	drm_connector_helper_add(connector, &virtio_gpu_conn_helper_funcs);
+	if (vgdev->has_edid)
+		drm_connector_attach_edid_property(connector);
 
 	drm_encoder_init(dev, encoder, &virtio_gpu_enc_funcs,
 			 DRM_MODE_ENCODER_VIRTUAL, NULL);
@@ -372,6 +377,10 @@
 
 void virtio_gpu_modeset_fini(struct virtio_gpu_device *vgdev)
 {
-	virtio_gpu_fbdev_fini(vgdev);
+	int i;
+
+	for (i = 0 ; i < vgdev->num_scanouts; ++i)
+		kfree(vgdev->outputs[i].edid);
+	drm_atomic_helper_shutdown(vgdev->ddev);
 	drm_mode_config_cleanup(vgdev->ddev);
 }
diff --git a/drivers/gpu/drm/virtio/virtgpu_drm_bus.c b/drivers/gpu/drm/virtio/virtgpu_drm_bus.c
index 7df8d0c..b61e323 100644
--- a/drivers/gpu/drm/virtio/virtgpu_drm_bus.c
+++ b/drivers/gpu/drm/virtio/virtgpu_drm_bus.c
@@ -71,6 +71,37 @@
 		if (vga)
 			virtio_pci_kick_out_firmware_fb(pdev);
 
+		/*
+		 * Normally the drm_dev_set_unique() call is done by core DRM.
+		 * The following comment covers, why virtio cannot rely on it.
+		 *
+		 * Unlike the other virtual GPU drivers, virtio abstracts the
+		 * underlying bus type by using struct virtio_device.
+		 *
+		 * Hence the dev_is_pci() check, used in core DRM, will fail
+		 * and the unique returned will be the virtio_device "virtio0",
+		 * while a "pci:..." one is required.
+		 *
+		 * A few other ideas were considered:
+		 * - Extend the dev_is_pci() check [in drm_set_busid] to
+		 *   consider virtio.
+		 *   Seems like a bigger hack than what we have already.
+		 *
+		 * - Point drm_device::dev to the parent of the virtio_device
+		 *   Semantic changes:
+		 *   * Using the wrong device for i2c, framebuffer_alloc and
+		 *     prime import.
+		 *   Visual changes:
+		 *   * Helpers such as DRM_DEV_ERROR, dev_info, drm_printer,
+		 *     will print the wrong information.
+		 *
+		 * We could address the latter issues, by introducing
+		 * drm_device::bus_dev, ... which would be used solely for this.
+		 *
+		 * So for the moment keep things as-is, with a bulky comment
+		 * for the next person who feels like removing this
+		 * drm_dev_set_unique() quirk.
+		 */
 		snprintf(unique, sizeof(unique), "pci:%s", pname);
 		ret = drm_dev_set_unique(dev, unique);
 		if (ret)
@@ -85,6 +116,6 @@
 	return 0;
 
 err_free:
-	drm_dev_unref(dev);
+	drm_dev_put(dev);
 	return ret;
 }
diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.c b/drivers/gpu/drm/virtio/virtgpu_drv.c
index d9287c1..1fd1046 100644
--- a/drivers/gpu/drm/virtio/virtgpu_drv.c
+++ b/drivers/gpu/drm/virtio/virtgpu_drv.c
@@ -42,13 +42,20 @@
 
 static int virtio_gpu_probe(struct virtio_device *vdev)
 {
+	int ret;
+
 	if (vgacon_text_force() && virtio_gpu_modeset == -1)
 		return -EINVAL;
 
 	if (virtio_gpu_modeset == 0)
 		return -EINVAL;
 
-	return drm_virtio_init(&driver, vdev);
+	ret = drm_virtio_init(&driver, vdev);
+	if (ret)
+		return ret;
+
+	drm_fbdev_generic_setup(vdev->priv, 32);
+	return 0;
 }
 
 static void virtio_gpu_remove(struct virtio_device *vdev)
@@ -80,6 +87,7 @@
 	 */
 	VIRTIO_GPU_F_VIRGL,
 #endif
+	VIRTIO_GPU_F_EDID,
 };
 static struct virtio_driver virtio_gpu_driver = {
 	.feature_table = features,
@@ -130,8 +138,6 @@
 	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
 	.gem_prime_export = drm_gem_prime_export,
 	.gem_prime_import = drm_gem_prime_import,
-	.gem_prime_pin = virtgpu_gem_prime_pin,
-	.gem_prime_unpin = virtgpu_gem_prime_unpin,
 	.gem_prime_get_sg_table = virtgpu_gem_prime_get_sg_table,
 	.gem_prime_import_sg_table = virtgpu_gem_prime_import_sg_table,
 	.gem_prime_vmap = virtgpu_gem_prime_vmap,
diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h
index 65605e2..a9aa023 100644
--- a/drivers/gpu/drm/virtio/virtgpu_drv.h
+++ b/drivers/gpu/drm/virtio/virtgpu_drv.h
@@ -36,6 +36,7 @@
 #include <drm/drm_atomic.h>
 #include <drm/drm_crtc_helper.h>
 #include <drm/drm_encoder.h>
+#include <drm/drm_fb_helper.h>
 #include <drm/ttm/ttm_bo_api.h>
 #include <drm/ttm/ttm_bo_driver.h>
 #include <drm/ttm/ttm_placement.h>
@@ -46,23 +47,42 @@
 #define DRIVER_DATE "0"
 
 #define DRIVER_MAJOR 0
-#define DRIVER_MINOR 0
-#define DRIVER_PATCHLEVEL 1
+#define DRIVER_MINOR 1
+#define DRIVER_PATCHLEVEL 0
 
 /* virtgpu_drm_bus.c */
 int drm_virtio_init(struct drm_driver *driver, struct virtio_device *vdev);
 
+struct virtio_gpu_object_params {
+	uint32_t format;
+	uint32_t width;
+	uint32_t height;
+	unsigned long size;
+	bool dumb;
+	/* 3d */
+	bool virgl;
+	uint32_t target;
+	uint32_t bind;
+	uint32_t depth;
+	uint32_t array_size;
+	uint32_t last_level;
+	uint32_t nr_samples;
+	uint32_t flags;
+};
+
 struct virtio_gpu_object {
 	struct drm_gem_object gem_base;
 	uint32_t hw_res_handle;
 
 	struct sg_table *pages;
+	uint32_t mapped;
 	void *vmap;
 	bool dumb;
 	struct ttm_place                placement_code;
 	struct ttm_placement		placement;
 	struct ttm_buffer_object	tbo;
 	struct ttm_bo_kmap_obj		kmap;
+	bool created;
 };
 #define gem_to_virtio_gpu_obj(gobj) \
 	container_of((gobj), struct virtio_gpu_object, gem_base)
@@ -85,7 +105,6 @@
 	struct dma_fence f;
 	struct virtio_gpu_fence_driver *drv;
 	struct list_head node;
-	uint64_t seq;
 };
 #define to_virtio_fence(x) \
 	container_of(x, struct virtio_gpu_fence, f)
@@ -112,8 +131,10 @@
 	struct drm_encoder enc;
 	struct virtio_gpu_display_one info;
 	struct virtio_gpu_update_cursor cursor;
+	struct edid *edid;
 	int cur_x;
 	int cur_y;
+	bool enabled;
 };
 #define drm_crtc_to_virtio_gpu_output(x) \
 	container_of(x, struct virtio_gpu_output, crtc)
@@ -127,6 +148,7 @@
 	int x1, y1, x2, y2; /* dirty rect */
 	spinlock_t dirty_lock;
 	uint32_t hw_res_handle;
+	struct virtio_gpu_fence *fence;
 };
 #define to_virtio_gpu_framebuffer(x) \
 	container_of(x, struct virtio_gpu_framebuffer, base)
@@ -138,8 +160,6 @@
 	struct ttm_bo_device		bdev;
 };
 
-struct virtio_gpu_fbdev;
-
 struct virtio_gpu_queue {
 	struct virtqueue *vq;
 	spinlock_t qlock;
@@ -170,8 +190,6 @@
 
 	struct virtio_gpu_mman mman;
 
-	/* pointer to fbdev info structure */
-	struct virtio_gpu_fbdev *vgfbdev;
 	struct virtio_gpu_output outputs[VIRTIO_GPU_MAX_SCANOUTS];
 	uint32_t num_scanouts;
 
@@ -180,8 +198,7 @@
 	struct kmem_cache *vbufs;
 	bool vqs_ready;
 
-	struct idr	resource_idr;
-	spinlock_t resource_idr_lock;
+	struct ida	resource_ida;
 
 	wait_queue_head_t resp_wq;
 	/* current display info */
@@ -190,10 +207,10 @@
 
 	struct virtio_gpu_fence_driver fence_drv;
 
-	struct idr	ctx_id_idr;
-	spinlock_t ctx_id_idr_lock;
+	struct ida	ctx_id_ida;
 
 	bool has_virgl_3d;
+	bool has_edid;
 
 	struct work_struct config_changed_work;
 
@@ -209,6 +226,9 @@
 /* virtio_ioctl.c */
 #define DRM_VIRTIO_NUM_IOCTLS 10
 extern struct drm_ioctl_desc virtio_gpu_ioctls[DRM_VIRTIO_NUM_IOCTLS];
+int virtio_gpu_object_list_validate(struct ww_acquire_ctx *ticket,
+				    struct list_head *head);
+void virtio_gpu_unref_list(struct list_head *head);
 
 /* virtio_kms.c */
 int virtio_gpu_driver_load(struct drm_device *dev, unsigned long flags);
@@ -222,16 +242,17 @@
 void virtio_gpu_gem_fini(struct virtio_gpu_device *vgdev);
 int virtio_gpu_gem_create(struct drm_file *file,
 			  struct drm_device *dev,
-			  uint64_t size,
+			  struct virtio_gpu_object_params *params,
 			  struct drm_gem_object **obj_p,
 			  uint32_t *handle_p);
 int virtio_gpu_gem_object_open(struct drm_gem_object *obj,
 			       struct drm_file *file);
 void virtio_gpu_gem_object_close(struct drm_gem_object *obj,
 				 struct drm_file *file);
-struct virtio_gpu_object *virtio_gpu_alloc_object(struct drm_device *dev,
-						  size_t size, bool kernel,
-						  bool pinned);
+struct virtio_gpu_object*
+virtio_gpu_alloc_object(struct drm_device *dev,
+			struct virtio_gpu_object_params *params,
+			struct virtio_gpu_fence *fence);
 int virtio_gpu_mode_dumb_create(struct drm_file *file_priv,
 				struct drm_device *dev,
 				struct drm_mode_create_dumb *args);
@@ -240,30 +261,24 @@
 			      uint32_t handle, uint64_t *offset_p);
 
 /* virtio_fb */
-#define VIRTIO_GPUFB_CONN_LIMIT 1
-int virtio_gpu_fbdev_init(struct virtio_gpu_device *vgdev);
-void virtio_gpu_fbdev_fini(struct virtio_gpu_device *vgdev);
 int virtio_gpu_surface_dirty(struct virtio_gpu_framebuffer *qfb,
 			     struct drm_clip_rect *clips,
 			     unsigned int num_clips);
 /* virtio vg */
 int virtio_gpu_alloc_vbufs(struct virtio_gpu_device *vgdev);
 void virtio_gpu_free_vbufs(struct virtio_gpu_device *vgdev);
-void virtio_gpu_resource_id_get(struct virtio_gpu_device *vgdev,
-			       uint32_t *resid);
-void virtio_gpu_resource_id_put(struct virtio_gpu_device *vgdev, uint32_t id);
 void virtio_gpu_cmd_create_resource(struct virtio_gpu_device *vgdev,
-				    uint32_t resource_id,
-				    uint32_t format,
-				    uint32_t width,
-				    uint32_t height);
+				    struct virtio_gpu_object *bo,
+				    struct virtio_gpu_object_params *params,
+				    struct virtio_gpu_fence *fence);
 void virtio_gpu_cmd_unref_resource(struct virtio_gpu_device *vgdev,
 				   uint32_t resource_id);
 void virtio_gpu_cmd_transfer_to_host_2d(struct virtio_gpu_device *vgdev,
-					uint32_t resource_id, uint64_t offset,
+					struct virtio_gpu_object *bo,
+					uint64_t offset,
 					__le32 width, __le32 height,
 					__le32 x, __le32 y,
-					struct virtio_gpu_fence **fence);
+					struct virtio_gpu_fence *fence);
 void virtio_gpu_cmd_resource_flush(struct virtio_gpu_device *vgdev,
 				   uint32_t resource_id,
 				   uint32_t x, uint32_t y,
@@ -274,19 +289,19 @@
 				uint32_t x, uint32_t y);
 int virtio_gpu_object_attach(struct virtio_gpu_device *vgdev,
 			     struct virtio_gpu_object *obj,
-			     uint32_t resource_id,
-			     struct virtio_gpu_fence **fence);
+			     struct virtio_gpu_fence *fence);
+void virtio_gpu_object_detach(struct virtio_gpu_device *vgdev,
+			      struct virtio_gpu_object *obj);
 int virtio_gpu_attach_status_page(struct virtio_gpu_device *vgdev);
 int virtio_gpu_detach_status_page(struct virtio_gpu_device *vgdev);
 void virtio_gpu_cursor_ping(struct virtio_gpu_device *vgdev,
 			    struct virtio_gpu_output *output);
 int virtio_gpu_cmd_get_display_info(struct virtio_gpu_device *vgdev);
-void virtio_gpu_cmd_resource_inval_backing(struct virtio_gpu_device *vgdev,
-					   uint32_t resource_id);
 int virtio_gpu_cmd_get_capset_info(struct virtio_gpu_device *vgdev, int idx);
 int virtio_gpu_cmd_get_capset(struct virtio_gpu_device *vgdev,
 			      int idx, int version,
 			      struct virtio_gpu_drv_cap_cache **cache_p);
+int virtio_gpu_cmd_get_edids(struct virtio_gpu_device *vgdev);
 void virtio_gpu_cmd_context_create(struct virtio_gpu_device *vgdev, uint32_t id,
 				   uint32_t nlen, const char *name);
 void virtio_gpu_cmd_context_destroy(struct virtio_gpu_device *vgdev,
@@ -299,21 +314,23 @@
 					    uint32_t resource_id);
 void virtio_gpu_cmd_submit(struct virtio_gpu_device *vgdev,
 			   void *data, uint32_t data_size,
-			   uint32_t ctx_id, struct virtio_gpu_fence **fence);
+			   uint32_t ctx_id, struct virtio_gpu_fence *fence);
 void virtio_gpu_cmd_transfer_from_host_3d(struct virtio_gpu_device *vgdev,
 					  uint32_t resource_id, uint32_t ctx_id,
 					  uint64_t offset, uint32_t level,
 					  struct virtio_gpu_box *box,
-					  struct virtio_gpu_fence **fence);
+					  struct virtio_gpu_fence *fence);
 void virtio_gpu_cmd_transfer_to_host_3d(struct virtio_gpu_device *vgdev,
-					uint32_t resource_id, uint32_t ctx_id,
+					struct virtio_gpu_object *bo,
+					uint32_t ctx_id,
 					uint64_t offset, uint32_t level,
 					struct virtio_gpu_box *box,
-					struct virtio_gpu_fence **fence);
+					struct virtio_gpu_fence *fence);
 void
 virtio_gpu_cmd_resource_create_3d(struct virtio_gpu_device *vgdev,
-				  struct virtio_gpu_resource_create_3d *rc_3d,
-				  struct virtio_gpu_fence **fence);
+				  struct virtio_gpu_object *bo,
+				  struct virtio_gpu_object_params *params,
+				  struct virtio_gpu_fence *fence);
 void virtio_gpu_ctrl_ack(struct virtqueue *vq);
 void virtio_gpu_cursor_ack(struct virtqueue *vq);
 void virtio_gpu_fence_ack(struct virtqueue *vq);
@@ -341,25 +358,28 @@
 int virtio_gpu_mmap(struct file *filp, struct vm_area_struct *vma);
 
 /* virtio_gpu_fence.c */
-int virtio_gpu_fence_emit(struct virtio_gpu_device *vgdev,
+bool virtio_fence_signaled(struct dma_fence *f);
+struct virtio_gpu_fence *virtio_gpu_fence_alloc(
+	struct virtio_gpu_device *vgdev);
+void virtio_gpu_fence_emit(struct virtio_gpu_device *vgdev,
 			  struct virtio_gpu_ctrl_hdr *cmd_hdr,
-			  struct virtio_gpu_fence **fence);
+			  struct virtio_gpu_fence *fence);
 void virtio_gpu_fence_event_process(struct virtio_gpu_device *vdev,
 				    u64 last_seq);
 
 /* virtio_gpu_object */
 int virtio_gpu_object_create(struct virtio_gpu_device *vgdev,
-			     unsigned long size, bool kernel, bool pinned,
-			     struct virtio_gpu_object **bo_ptr);
-int virtio_gpu_object_kmap(struct virtio_gpu_object *bo, void **ptr);
+			     struct virtio_gpu_object_params *params,
+			     struct virtio_gpu_object **bo_ptr,
+			     struct virtio_gpu_fence *fence);
+void virtio_gpu_object_kunmap(struct virtio_gpu_object *bo);
+int virtio_gpu_object_kmap(struct virtio_gpu_object *bo);
 int virtio_gpu_object_get_sg_table(struct virtio_gpu_device *qdev,
 				   struct virtio_gpu_object *bo);
 void virtio_gpu_object_free_sg_table(struct virtio_gpu_object *bo);
 int virtio_gpu_object_wait(struct virtio_gpu_object *bo, bool no_wait);
 
 /* virtgpu_prime.c */
-int virtgpu_gem_prime_pin(struct drm_gem_object *obj);
-void virtgpu_gem_prime_unpin(struct drm_gem_object *obj);
 struct sg_table *virtgpu_gem_prime_get_sg_table(struct drm_gem_object *obj);
 struct drm_gem_object *virtgpu_gem_prime_import_sg_table(
 	struct drm_device *dev, struct dma_buf_attachment *attach,
@@ -372,7 +392,7 @@
 static inline struct virtio_gpu_object*
 virtio_gpu_object_ref(struct virtio_gpu_object *bo)
 {
-	ttm_bo_reference(&bo->tbo);
+	ttm_bo_get(&bo->tbo);
 	return bo;
 }
 
@@ -383,9 +403,8 @@
 	if ((*bo) == NULL)
 		return;
 	tbo = &((*bo)->tbo);
-	ttm_bo_unref(&tbo);
-	if (tbo == NULL)
-		*bo = NULL;
+	ttm_bo_put(tbo);
+	*bo = NULL;
 }
 
 static inline u64 virtio_gpu_object_mmap_offset(struct virtio_gpu_object *bo)
diff --git a/drivers/gpu/drm/virtio/virtgpu_fb.c b/drivers/gpu/drm/virtio/virtgpu_fb.c
index a121b1c..b07584b 100644
--- a/drivers/gpu/drm/virtio/virtgpu_fb.c
+++ b/drivers/gpu/drm/virtio/virtgpu_fb.c
@@ -27,15 +27,6 @@
 #include <drm/drm_fb_helper.h>
 #include "virtgpu_drv.h"
 
-#define VIRTIO_GPU_FBCON_POLL_PERIOD (HZ / 60)
-
-struct virtio_gpu_fbdev {
-	struct drm_fb_helper           helper;
-	struct virtio_gpu_framebuffer  vgfb;
-	struct virtio_gpu_device       *vgdev;
-	struct delayed_work            work;
-};
-
 static int virtio_gpu_dirty_update(struct virtio_gpu_framebuffer *fb,
 				   bool store, int x, int y,
 				   int width, int height)
@@ -102,7 +93,7 @@
 
 		offset = (y * fb->base.pitches[0]) + x * bpp;
 
-		virtio_gpu_cmd_transfer_to_host_2d(vgdev, obj->hw_res_handle,
+		virtio_gpu_cmd_transfer_to_host_2d(vgdev, obj,
 						   offset,
 						   cpu_to_le32(w),
 						   cpu_to_le32(h),
@@ -157,199 +148,3 @@
 				      left, top, right - left, bottom - top);
 	return 0;
 }
-
-static void virtio_gpu_fb_dirty_work(struct work_struct *work)
-{
-	struct delayed_work *delayed_work = to_delayed_work(work);
-	struct virtio_gpu_fbdev *vfbdev =
-		container_of(delayed_work, struct virtio_gpu_fbdev, work);
-	struct virtio_gpu_framebuffer *vgfb = &vfbdev->vgfb;
-
-	virtio_gpu_dirty_update(&vfbdev->vgfb, false, vgfb->x1, vgfb->y1,
-				vgfb->x2 - vgfb->x1, vgfb->y2 - vgfb->y1);
-}
-
-static void virtio_gpu_3d_fillrect(struct fb_info *info,
-				   const struct fb_fillrect *rect)
-{
-	struct virtio_gpu_fbdev *vfbdev = info->par;
-
-	drm_fb_helper_sys_fillrect(info, rect);
-	virtio_gpu_dirty_update(&vfbdev->vgfb, true, rect->dx, rect->dy,
-			     rect->width, rect->height);
-	schedule_delayed_work(&vfbdev->work, VIRTIO_GPU_FBCON_POLL_PERIOD);
-}
-
-static void virtio_gpu_3d_copyarea(struct fb_info *info,
-				   const struct fb_copyarea *area)
-{
-	struct virtio_gpu_fbdev *vfbdev = info->par;
-
-	drm_fb_helper_sys_copyarea(info, area);
-	virtio_gpu_dirty_update(&vfbdev->vgfb, true, area->dx, area->dy,
-			   area->width, area->height);
-	schedule_delayed_work(&vfbdev->work, VIRTIO_GPU_FBCON_POLL_PERIOD);
-}
-
-static void virtio_gpu_3d_imageblit(struct fb_info *info,
-				    const struct fb_image *image)
-{
-	struct virtio_gpu_fbdev *vfbdev = info->par;
-
-	drm_fb_helper_sys_imageblit(info, image);
-	virtio_gpu_dirty_update(&vfbdev->vgfb, true, image->dx, image->dy,
-			     image->width, image->height);
-	schedule_delayed_work(&vfbdev->work, VIRTIO_GPU_FBCON_POLL_PERIOD);
-}
-
-static struct fb_ops virtio_gpufb_ops = {
-	.owner = THIS_MODULE,
-	DRM_FB_HELPER_DEFAULT_OPS,
-	.fb_fillrect = virtio_gpu_3d_fillrect,
-	.fb_copyarea = virtio_gpu_3d_copyarea,
-	.fb_imageblit = virtio_gpu_3d_imageblit,
-};
-
-static int virtio_gpu_vmap_fb(struct virtio_gpu_device *vgdev,
-			      struct virtio_gpu_object *obj)
-{
-	return virtio_gpu_object_kmap(obj, NULL);
-}
-
-static int virtio_gpufb_create(struct drm_fb_helper *helper,
-			       struct drm_fb_helper_surface_size *sizes)
-{
-	struct virtio_gpu_fbdev *vfbdev =
-		container_of(helper, struct virtio_gpu_fbdev, helper);
-	struct drm_device *dev = helper->dev;
-	struct virtio_gpu_device *vgdev = dev->dev_private;
-	struct fb_info *info;
-	struct drm_framebuffer *fb;
-	struct drm_mode_fb_cmd2 mode_cmd = {};
-	struct virtio_gpu_object *obj;
-	uint32_t resid, format, size;
-	int ret;
-
-	mode_cmd.width = sizes->surface_width;
-	mode_cmd.height = sizes->surface_height;
-	mode_cmd.pitches[0] = mode_cmd.width * 4;
-	mode_cmd.pixel_format = drm_mode_legacy_fb_format(32, 24);
-
-	format = virtio_gpu_translate_format(mode_cmd.pixel_format);
-	if (format == 0)
-		return -EINVAL;
-
-	size = mode_cmd.pitches[0] * mode_cmd.height;
-	obj = virtio_gpu_alloc_object(dev, size, false, true);
-	if (IS_ERR(obj))
-		return PTR_ERR(obj);
-
-	virtio_gpu_resource_id_get(vgdev, &resid);
-	virtio_gpu_cmd_create_resource(vgdev, resid, format,
-				       mode_cmd.width, mode_cmd.height);
-
-	ret = virtio_gpu_vmap_fb(vgdev, obj);
-	if (ret) {
-		DRM_ERROR("failed to vmap fb %d\n", ret);
-		goto err_obj_vmap;
-	}
-
-	/* attach the object to the resource */
-	ret = virtio_gpu_object_attach(vgdev, obj, resid, NULL);
-	if (ret)
-		goto err_obj_attach;
-
-	info = drm_fb_helper_alloc_fbi(helper);
-	if (IS_ERR(info)) {
-		ret = PTR_ERR(info);
-		goto err_fb_alloc;
-	}
-
-	info->par = helper;
-
-	ret = virtio_gpu_framebuffer_init(dev, &vfbdev->vgfb,
-					  &mode_cmd, &obj->gem_base);
-	if (ret)
-		goto err_fb_alloc;
-
-	fb = &vfbdev->vgfb.base;
-
-	vfbdev->helper.fb = fb;
-
-	strcpy(info->fix.id, "virtiodrmfb");
-	info->fbops = &virtio_gpufb_ops;
-	info->pixmap.flags = FB_PIXMAP_SYSTEM;
-
-	info->screen_buffer = obj->vmap;
-	info->screen_size = obj->gem_base.size;
-	drm_fb_helper_fill_fix(info, fb->pitches[0], fb->format->depth);
-	drm_fb_helper_fill_var(info, &vfbdev->helper,
-			       sizes->fb_width, sizes->fb_height);
-
-	info->fix.mmio_start = 0;
-	info->fix.mmio_len = 0;
-	return 0;
-
-err_fb_alloc:
-	virtio_gpu_cmd_resource_inval_backing(vgdev, resid);
-err_obj_attach:
-err_obj_vmap:
-	virtio_gpu_gem_free_object(&obj->gem_base);
-	return ret;
-}
-
-static int virtio_gpu_fbdev_destroy(struct drm_device *dev,
-				    struct virtio_gpu_fbdev *vgfbdev)
-{
-	struct virtio_gpu_framebuffer *vgfb = &vgfbdev->vgfb;
-
-	drm_fb_helper_unregister_fbi(&vgfbdev->helper);
-
-	if (vgfb->base.obj[0])
-		vgfb->base.obj[0] = NULL;
-	drm_fb_helper_fini(&vgfbdev->helper);
-	drm_framebuffer_cleanup(&vgfb->base);
-
-	return 0;
-}
-static const struct drm_fb_helper_funcs virtio_gpu_fb_helper_funcs = {
-	.fb_probe = virtio_gpufb_create,
-};
-
-int virtio_gpu_fbdev_init(struct virtio_gpu_device *vgdev)
-{
-	struct virtio_gpu_fbdev *vgfbdev;
-	int bpp_sel = 32; /* TODO: parameter from somewhere? */
-	int ret;
-
-	vgfbdev = kzalloc(sizeof(struct virtio_gpu_fbdev), GFP_KERNEL);
-	if (!vgfbdev)
-		return -ENOMEM;
-
-	vgfbdev->vgdev = vgdev;
-	vgdev->vgfbdev = vgfbdev;
-	INIT_DELAYED_WORK(&vgfbdev->work, virtio_gpu_fb_dirty_work);
-
-	drm_fb_helper_prepare(vgdev->ddev, &vgfbdev->helper,
-			      &virtio_gpu_fb_helper_funcs);
-	ret = drm_fb_helper_init(vgdev->ddev, &vgfbdev->helper,
-				 VIRTIO_GPUFB_CONN_LIMIT);
-	if (ret) {
-		kfree(vgfbdev);
-		return ret;
-	}
-
-	drm_fb_helper_single_add_all_connectors(&vgfbdev->helper);
-	drm_fb_helper_initial_config(&vgfbdev->helper, bpp_sel);
-	return 0;
-}
-
-void virtio_gpu_fbdev_fini(struct virtio_gpu_device *vgdev)
-{
-	if (!vgdev->vgfbdev)
-		return;
-
-	virtio_gpu_fbdev_destroy(vgdev->ddev, vgdev->vgfbdev);
-	kfree(vgdev->vgfbdev);
-	vgdev->vgfbdev = NULL;
-}
diff --git a/drivers/gpu/drm/virtio/virtgpu_fence.c b/drivers/gpu/drm/virtio/virtgpu_fence.c
index 00c742a..6dce548 100644
--- a/drivers/gpu/drm/virtio/virtgpu_fence.c
+++ b/drivers/gpu/drm/virtio/virtgpu_fence.c
@@ -24,6 +24,7 @@
  */
 
 #include <drm/drmP.h>
+#include <trace/events/dma_fence.h>
 #include "virtgpu_drv.h"
 
 static const char *virtio_get_driver_name(struct dma_fence *f)
@@ -36,20 +37,18 @@
 	return "controlq";
 }
 
-static bool virtio_signaled(struct dma_fence *f)
+bool virtio_fence_signaled(struct dma_fence *f)
 {
 	struct virtio_gpu_fence *fence = to_virtio_fence(f);
 
-	if (atomic64_read(&fence->drv->last_seq) >= fence->seq)
+	if (atomic64_read(&fence->drv->last_seq) >= fence->f.seqno)
 		return true;
 	return false;
 }
 
 static void virtio_fence_value_str(struct dma_fence *f, char *str, int size)
 {
-	struct virtio_gpu_fence *fence = to_virtio_fence(f);
-
-	snprintf(str, size, "%llu", fence->seq);
+	snprintf(str, size, "%llu", (long long unsigned int) f->seqno);
 }
 
 static void virtio_timeline_value_str(struct dma_fence *f, char *str, int size)
@@ -62,34 +61,47 @@
 static const struct dma_fence_ops virtio_fence_ops = {
 	.get_driver_name     = virtio_get_driver_name,
 	.get_timeline_name   = virtio_get_timeline_name,
-	.signaled            = virtio_signaled,
+	.signaled            = virtio_fence_signaled,
 	.fence_value_str     = virtio_fence_value_str,
 	.timeline_value_str  = virtio_timeline_value_str,
 };
 
-int virtio_gpu_fence_emit(struct virtio_gpu_device *vgdev,
+struct virtio_gpu_fence *virtio_gpu_fence_alloc(struct virtio_gpu_device *vgdev)
+{
+	struct virtio_gpu_fence_driver *drv = &vgdev->fence_drv;
+	struct virtio_gpu_fence *fence = kzalloc(sizeof(struct virtio_gpu_fence),
+							GFP_KERNEL);
+	if (!fence)
+		return fence;
+
+	fence->drv = drv;
+
+	/* This only partially initializes the fence because the seqno is
+	 * unknown yet.  The fence must not be used outside of the driver
+	 * until virtio_gpu_fence_emit is called.
+	 */
+	dma_fence_init(&fence->f, &virtio_fence_ops, &drv->lock, drv->context, 0);
+
+	return fence;
+}
+
+void virtio_gpu_fence_emit(struct virtio_gpu_device *vgdev,
 			  struct virtio_gpu_ctrl_hdr *cmd_hdr,
-			  struct virtio_gpu_fence **fence)
+			  struct virtio_gpu_fence *fence)
 {
 	struct virtio_gpu_fence_driver *drv = &vgdev->fence_drv;
 	unsigned long irq_flags;
 
-	*fence = kmalloc(sizeof(struct virtio_gpu_fence), GFP_ATOMIC);
-	if ((*fence) == NULL)
-		return -ENOMEM;
-
 	spin_lock_irqsave(&drv->lock, irq_flags);
-	(*fence)->drv = drv;
-	(*fence)->seq = ++drv->sync_seq;
-	dma_fence_init(&(*fence)->f, &virtio_fence_ops, &drv->lock,
-		       drv->context, (*fence)->seq);
-	dma_fence_get(&(*fence)->f);
-	list_add_tail(&(*fence)->node, &drv->fences);
+	fence->f.seqno = ++drv->sync_seq;
+	dma_fence_get(&fence->f);
+	list_add_tail(&fence->node, &drv->fences);
 	spin_unlock_irqrestore(&drv->lock, irq_flags);
 
+	trace_dma_fence_emit(&fence->f);
+
 	cmd_hdr->flags |= cpu_to_le32(VIRTIO_GPU_FLAG_FENCE);
-	cmd_hdr->fence_id = cpu_to_le64((*fence)->seq);
-	return 0;
+	cmd_hdr->fence_id = cpu_to_le64(fence->f.seqno);
 }
 
 void virtio_gpu_fence_event_process(struct virtio_gpu_device *vgdev,
@@ -102,7 +114,7 @@
 	spin_lock_irqsave(&drv->lock, irq_flags);
 	atomic64_set(&vgdev->fence_drv.last_seq, last_seq);
 	list_for_each_entry_safe(fence, tmp, &drv->fences, node) {
-		if (last_seq < fence->seq)
+		if (last_seq < fence->f.seqno)
 			continue;
 		dma_fence_signal_locked(&fence->f);
 		list_del(&fence->node);
diff --git a/drivers/gpu/drm/virtio/virtgpu_gem.c b/drivers/gpu/drm/virtio/virtgpu_gem.c
index 0f2768e..a607bd1 100644
--- a/drivers/gpu/drm/virtio/virtgpu_gem.c
+++ b/drivers/gpu/drm/virtio/virtgpu_gem.c
@@ -34,15 +34,16 @@
 		virtio_gpu_object_unref(&obj);
 }
 
-struct virtio_gpu_object *virtio_gpu_alloc_object(struct drm_device *dev,
-						  size_t size, bool kernel,
-						  bool pinned)
+struct virtio_gpu_object*
+virtio_gpu_alloc_object(struct drm_device *dev,
+			struct virtio_gpu_object_params *params,
+			struct virtio_gpu_fence *fence)
 {
 	struct virtio_gpu_device *vgdev = dev->dev_private;
 	struct virtio_gpu_object *obj;
 	int ret;
 
-	ret = virtio_gpu_object_create(vgdev, size, kernel, pinned, &obj);
+	ret = virtio_gpu_object_create(vgdev, params, &obj, fence);
 	if (ret)
 		return ERR_PTR(ret);
 
@@ -51,7 +52,7 @@
 
 int virtio_gpu_gem_create(struct drm_file *file,
 			  struct drm_device *dev,
-			  uint64_t size,
+			  struct virtio_gpu_object_params *params,
 			  struct drm_gem_object **obj_p,
 			  uint32_t *handle_p)
 {
@@ -59,7 +60,7 @@
 	int ret;
 	u32 handle;
 
-	obj = virtio_gpu_alloc_object(dev, size, false, false);
+	obj = virtio_gpu_alloc_object(dev, params, NULL);
 	if (IS_ERR(obj))
 		return PTR_ERR(obj);
 
@@ -82,35 +83,25 @@
 				struct drm_device *dev,
 				struct drm_mode_create_dumb *args)
 {
-	struct virtio_gpu_device *vgdev = dev->dev_private;
 	struct drm_gem_object *gobj;
-	struct virtio_gpu_object *obj;
+	struct virtio_gpu_object_params params = { 0 };
 	int ret;
 	uint32_t pitch;
-	uint32_t resid;
-	uint32_t format;
 
 	pitch = args->width * ((args->bpp + 1) / 8);
 	args->size = pitch * args->height;
 	args->size = ALIGN(args->size, PAGE_SIZE);
 
-	ret = virtio_gpu_gem_create(file_priv, dev, args->size, &gobj,
+	params.format = virtio_gpu_translate_format(DRM_FORMAT_HOST_XRGB8888);
+	params.width = args->width;
+	params.height = args->height;
+	params.size = args->size;
+	params.dumb = true;
+	ret = virtio_gpu_gem_create(file_priv, dev, &params, &gobj,
 				    &args->handle);
 	if (ret)
 		goto fail;
 
-	format = virtio_gpu_translate_format(DRM_FORMAT_XRGB8888);
-	virtio_gpu_resource_id_get(vgdev, &resid);
-	virtio_gpu_cmd_create_resource(vgdev, resid, format,
-				       args->width, args->height);
-
-	/* attach the object to the resource */
-	obj = gem_to_virtio_gpu_obj(gobj);
-	ret = virtio_gpu_object_attach(vgdev, obj, resid, NULL);
-	if (ret)
-		goto fail;
-
-	obj->dumb = true;
 	args->pitch = pitch;
 	return ret;
 
diff --git a/drivers/gpu/drm/virtio/virtgpu_ioctl.c b/drivers/gpu/drm/virtio/virtgpu_ioctl.c
index 8d2f5de..c0ba1ea 100644
--- a/drivers/gpu/drm/virtio/virtgpu_ioctl.c
+++ b/drivers/gpu/drm/virtio/virtgpu_ioctl.c
@@ -28,6 +28,7 @@
 #include <drm/drmP.h>
 #include <drm/virtgpu_drm.h>
 #include <drm/ttm/ttm_execbuf_util.h>
+#include <linux/sync_file.h>
 
 #include "virtgpu_drv.h"
 
@@ -53,8 +54,8 @@
 					 &virtio_gpu_map->offset);
 }
 
-static int virtio_gpu_object_list_validate(struct ww_acquire_ctx *ticket,
-					   struct list_head *head)
+int virtio_gpu_object_list_validate(struct ww_acquire_ctx *ticket,
+				    struct list_head *head)
 {
 	struct ttm_operation_ctx ctx = { false, false };
 	struct ttm_validate_buffer *buf;
@@ -78,7 +79,7 @@
 	return 0;
 }
 
-static void virtio_gpu_unref_list(struct list_head *head)
+void virtio_gpu_unref_list(struct list_head *head)
 {
 	struct ttm_validate_buffer *buf;
 	struct ttm_buffer_object *bo;
@@ -105,7 +106,7 @@
 	struct virtio_gpu_device *vgdev = dev->dev_private;
 	struct virtio_gpu_fpriv *vfpriv = drm_file->driver_priv;
 	struct drm_gem_object *gobj;
-	struct virtio_gpu_fence *fence;
+	struct virtio_gpu_fence *out_fence;
 	struct virtio_gpu_object *qobj;
 	int ret;
 	uint32_t *bo_handles = NULL;
@@ -114,11 +115,46 @@
 	struct ttm_validate_buffer *buflist = NULL;
 	int i;
 	struct ww_acquire_ctx ticket;
+	struct sync_file *sync_file;
+	int in_fence_fd = exbuf->fence_fd;
+	int out_fence_fd = -1;
 	void *buf;
 
 	if (vgdev->has_virgl_3d == false)
 		return -ENOSYS;
 
+	if ((exbuf->flags & ~VIRTGPU_EXECBUF_FLAGS))
+		return -EINVAL;
+
+	exbuf->fence_fd = -1;
+
+	if (exbuf->flags & VIRTGPU_EXECBUF_FENCE_FD_IN) {
+		struct dma_fence *in_fence;
+
+		in_fence = sync_file_get_fence(in_fence_fd);
+
+		if (!in_fence)
+			return -EINVAL;
+
+		/*
+		 * Wait if the fence is from a foreign context, or if the fence
+		 * array contains any fence from a foreign context.
+		 */
+		ret = 0;
+		if (!dma_fence_match_context(in_fence, vgdev->fence_drv.context))
+			ret = dma_fence_wait(in_fence, true);
+
+		dma_fence_put(in_fence);
+		if (ret)
+			return ret;
+	}
+
+	if (exbuf->flags & VIRTGPU_EXECBUF_FENCE_FD_OUT) {
+		out_fence_fd = get_unused_fd_flags(O_CLOEXEC);
+		if (out_fence_fd < 0)
+			return out_fence_fd;
+	}
+
 	INIT_LIST_HEAD(&validate_list);
 	if (exbuf->num_bo_handles) {
 
@@ -128,26 +164,22 @@
 					   sizeof(struct ttm_validate_buffer),
 					   GFP_KERNEL | __GFP_ZERO);
 		if (!bo_handles || !buflist) {
-			kvfree(bo_handles);
-			kvfree(buflist);
-			return -ENOMEM;
+			ret = -ENOMEM;
+			goto out_unused_fd;
 		}
 
-		user_bo_handles = (void __user *)(uintptr_t)exbuf->bo_handles;
+		user_bo_handles = u64_to_user_ptr(exbuf->bo_handles);
 		if (copy_from_user(bo_handles, user_bo_handles,
 				   exbuf->num_bo_handles * sizeof(uint32_t))) {
 			ret = -EFAULT;
-			kvfree(bo_handles);
-			kvfree(buflist);
-			return ret;
+			goto out_unused_fd;
 		}
 
 		for (i = 0; i < exbuf->num_bo_handles; i++) {
 			gobj = drm_gem_object_lookup(drm_file, bo_handles[i]);
 			if (!gobj) {
-				kvfree(bo_handles);
-				kvfree(buflist);
-				return -ENOENT;
+				ret = -ENOENT;
+				goto out_unused_fd;
 			}
 
 			qobj = gem_to_virtio_gpu_obj(gobj);
@@ -156,34 +188,60 @@
 			list_add(&buflist[i].head, &validate_list);
 		}
 		kvfree(bo_handles);
+		bo_handles = NULL;
 	}
 
 	ret = virtio_gpu_object_list_validate(&ticket, &validate_list);
 	if (ret)
 		goto out_free;
 
-	buf = memdup_user((void __user *)(uintptr_t)exbuf->command,
-			  exbuf->size);
+	buf = memdup_user(u64_to_user_ptr(exbuf->command), exbuf->size);
 	if (IS_ERR(buf)) {
 		ret = PTR_ERR(buf);
 		goto out_unresv;
 	}
-	virtio_gpu_cmd_submit(vgdev, buf, exbuf->size,
-			      vfpriv->ctx_id, &fence);
 
-	ttm_eu_fence_buffer_objects(&ticket, &validate_list, &fence->f);
+	out_fence = virtio_gpu_fence_alloc(vgdev);
+	if(!out_fence) {
+		ret = -ENOMEM;
+		goto out_memdup;
+	}
+
+	if (out_fence_fd >= 0) {
+		sync_file = sync_file_create(&out_fence->f);
+		if (!sync_file) {
+			dma_fence_put(&out_fence->f);
+			ret = -ENOMEM;
+			goto out_memdup;
+		}
+
+		exbuf->fence_fd = out_fence_fd;
+		fd_install(out_fence_fd, sync_file->file);
+	}
+
+	virtio_gpu_cmd_submit(vgdev, buf, exbuf->size,
+			      vfpriv->ctx_id, out_fence);
+
+	ttm_eu_fence_buffer_objects(&ticket, &validate_list, &out_fence->f);
 
 	/* fence the command bo */
 	virtio_gpu_unref_list(&validate_list);
 	kvfree(buflist);
-	dma_fence_put(&fence->f);
 	return 0;
 
+out_memdup:
+	kfree(buf);
 out_unresv:
 	ttm_eu_backoff_reservation(&ticket, &validate_list);
 out_free:
 	virtio_gpu_unref_list(&validate_list);
+out_unused_fd:
+	kvfree(bo_handles);
 	kvfree(buflist);
+
+	if (out_fence_fd >= 0)
+		put_unused_fd(out_fence_fd);
+
 	return ret;
 }
 
@@ -204,10 +262,9 @@
 	default:
 		return -EINVAL;
 	}
-	if (copy_to_user((void __user *)(unsigned long)param->value,
-			 &value, sizeof(int))) {
+	if (copy_to_user(u64_to_user_ptr(param->value), &value, sizeof(int)))
 		return -EFAULT;
-	}
+
 	return 0;
 }
 
@@ -216,17 +273,12 @@
 {
 	struct virtio_gpu_device *vgdev = dev->dev_private;
 	struct drm_virtgpu_resource_create *rc = data;
+	struct virtio_gpu_fence *fence;
 	int ret;
-	uint32_t res_id;
 	struct virtio_gpu_object *qobj;
 	struct drm_gem_object *obj;
 	uint32_t handle = 0;
-	uint32_t size;
-	struct list_head validate_list;
-	struct ttm_validate_buffer mainbuf;
-	struct virtio_gpu_fence *fence = NULL;
-	struct ww_acquire_ctx ticket;
-	struct virtio_gpu_resource_create_3d rc_3d;
+	struct virtio_gpu_object_params params = { 0 };
 
 	if (vgdev->has_virgl_3d == false) {
 		if (rc->depth > 1)
@@ -241,94 +293,43 @@
 			return -EINVAL;
 	}
 
-	INIT_LIST_HEAD(&validate_list);
-	memset(&mainbuf, 0, sizeof(struct ttm_validate_buffer));
-
-	virtio_gpu_resource_id_get(vgdev, &res_id);
-
-	size = rc->size;
-
+	params.format = rc->format;
+	params.width = rc->width;
+	params.height = rc->height;
+	params.size = rc->size;
+	if (vgdev->has_virgl_3d) {
+		params.virgl = true;
+		params.target = rc->target;
+		params.bind = rc->bind;
+		params.depth = rc->depth;
+		params.array_size = rc->array_size;
+		params.last_level = rc->last_level;
+		params.nr_samples = rc->nr_samples;
+		params.flags = rc->flags;
+	}
 	/* allocate a single page size object */
-	if (size == 0)
-		size = PAGE_SIZE;
+	if (params.size == 0)
+		params.size = PAGE_SIZE;
 
-	qobj = virtio_gpu_alloc_object(dev, size, false, false);
-	if (IS_ERR(qobj)) {
-		ret = PTR_ERR(qobj);
-		goto fail_id;
-	}
+	fence = virtio_gpu_fence_alloc(vgdev);
+	if (!fence)
+		return -ENOMEM;
+	qobj = virtio_gpu_alloc_object(dev, &params, fence);
+	dma_fence_put(&fence->f);
+	if (IS_ERR(qobj))
+		return PTR_ERR(qobj);
 	obj = &qobj->gem_base;
 
-	if (!vgdev->has_virgl_3d) {
-		virtio_gpu_cmd_create_resource(vgdev, res_id, rc->format,
-					       rc->width, rc->height);
-
-		ret = virtio_gpu_object_attach(vgdev, qobj, res_id, NULL);
-	} else {
-		/* use a gem reference since unref list undoes them */
-		drm_gem_object_get(&qobj->gem_base);
-		mainbuf.bo = &qobj->tbo;
-		list_add(&mainbuf.head, &validate_list);
-
-		ret = virtio_gpu_object_list_validate(&ticket, &validate_list);
-		if (ret) {
-			DRM_DEBUG("failed to validate\n");
-			goto fail_unref;
-		}
-
-		rc_3d.resource_id = cpu_to_le32(res_id);
-		rc_3d.target = cpu_to_le32(rc->target);
-		rc_3d.format = cpu_to_le32(rc->format);
-		rc_3d.bind = cpu_to_le32(rc->bind);
-		rc_3d.width = cpu_to_le32(rc->width);
-		rc_3d.height = cpu_to_le32(rc->height);
-		rc_3d.depth = cpu_to_le32(rc->depth);
-		rc_3d.array_size = cpu_to_le32(rc->array_size);
-		rc_3d.last_level = cpu_to_le32(rc->last_level);
-		rc_3d.nr_samples = cpu_to_le32(rc->nr_samples);
-		rc_3d.flags = cpu_to_le32(rc->flags);
-
-		virtio_gpu_cmd_resource_create_3d(vgdev, &rc_3d, NULL);
-		ret = virtio_gpu_object_attach(vgdev, qobj, res_id, &fence);
-		if (ret) {
-			ttm_eu_backoff_reservation(&ticket, &validate_list);
-			goto fail_unref;
-		}
-		ttm_eu_fence_buffer_objects(&ticket, &validate_list, &fence->f);
-	}
-
-	qobj->hw_res_handle = res_id;
-
 	ret = drm_gem_handle_create(file_priv, obj, &handle);
 	if (ret) {
-
 		drm_gem_object_release(obj);
-		if (vgdev->has_virgl_3d) {
-			virtio_gpu_unref_list(&validate_list);
-			dma_fence_put(&fence->f);
-		}
 		return ret;
 	}
 	drm_gem_object_put_unlocked(obj);
 
-	rc->res_handle = res_id; /* similiar to a VM address */
+	rc->res_handle = qobj->hw_res_handle; /* similiar to a VM address */
 	rc->bo_handle = handle;
-
-	if (vgdev->has_virgl_3d) {
-		virtio_gpu_unref_list(&validate_list);
-		dma_fence_put(&fence->f);
-	}
 	return 0;
-fail_unref:
-	if (vgdev->has_virgl_3d) {
-		virtio_gpu_unref_list(&validate_list);
-		dma_fence_put(&fence->f);
-	}
-//fail_obj:
-//	drm_gem_object_handle_unreference_unlocked(obj);
-fail_id:
-	virtio_gpu_resource_id_put(vgdev, res_id);
-	return ret;
 }
 
 static int virtio_gpu_resource_info_ioctl(struct drm_device *dev, void *data,
@@ -383,10 +384,16 @@
 		goto out_unres;
 
 	convert_to_hw_box(&box, &args->box);
+
+	fence = virtio_gpu_fence_alloc(vgdev);
+	if (!fence) {
+		ret = -ENOMEM;
+		goto out_unres;
+	}
 	virtio_gpu_cmd_transfer_from_host_3d
 		(vgdev, qobj->hw_res_handle,
 		 vfpriv->ctx_id, offset, args->level,
-		 &box, &fence);
+		 &box, fence);
 	reservation_object_add_excl_fence(qobj->tbo.resv,
 					  &fence->f);
 
@@ -429,13 +436,18 @@
 	convert_to_hw_box(&box, &args->box);
 	if (!vgdev->has_virgl_3d) {
 		virtio_gpu_cmd_transfer_to_host_2d
-			(vgdev, qobj->hw_res_handle, offset,
+			(vgdev, qobj, offset,
 			 box.w, box.h, box.x, box.y, NULL);
 	} else {
+		fence = virtio_gpu_fence_alloc(vgdev);
+		if (!fence) {
+			ret = -ENOMEM;
+			goto out_unres;
+		}
 		virtio_gpu_cmd_transfer_to_host_3d
-			(vgdev, qobj->hw_res_handle,
+			(vgdev, qobj,
 			 vfpriv ? vfpriv->ctx_id : 0, offset,
-			 args->level, &box, &fence);
+			 args->level, &box, fence);
 		reservation_object_add_excl_fence(qobj->tbo.resv,
 						  &fence->f);
 		dma_fence_put(&fence->f);
@@ -512,7 +524,6 @@
 	list_for_each_entry(cache_ent, &vgdev->cap_cache, head) {
 		if (cache_ent->id == args->cap_set_id &&
 		    cache_ent->version == args->cap_set_ver) {
-			ptr = cache_ent->caps_cache;
 			spin_unlock(&vgdev->display_info_lock);
 			goto copy_exit;
 		}
@@ -523,6 +534,7 @@
 	virtio_gpu_cmd_get_capset(vgdev, found_valid, args->cap_set_ver,
 				  &cache_ent);
 
+copy_exit:
 	ret = wait_event_timeout(vgdev->resp_wq,
 				 atomic_read(&cache_ent->is_valid), 5 * HZ);
 	if (!ret)
@@ -533,8 +545,7 @@
 
 	ptr = cache_ent->caps_cache;
 
-copy_exit:
-	if (copy_to_user((void __user *)(unsigned long)args->addr, ptr, size))
+	if (copy_to_user(u64_to_user_ptr(args->addr), ptr, size))
 		return -EFAULT;
 
 	return 0;
@@ -542,34 +553,34 @@
 
 struct drm_ioctl_desc virtio_gpu_ioctls[DRM_VIRTIO_NUM_IOCTLS] = {
 	DRM_IOCTL_DEF_DRV(VIRTGPU_MAP, virtio_gpu_map_ioctl,
-			  DRM_AUTH | DRM_UNLOCKED | DRM_RENDER_ALLOW),
+			  DRM_AUTH | DRM_RENDER_ALLOW),
 
 	DRM_IOCTL_DEF_DRV(VIRTGPU_EXECBUFFER, virtio_gpu_execbuffer_ioctl,
-			  DRM_AUTH | DRM_UNLOCKED | DRM_RENDER_ALLOW),
+			  DRM_AUTH | DRM_RENDER_ALLOW),
 
 	DRM_IOCTL_DEF_DRV(VIRTGPU_GETPARAM, virtio_gpu_getparam_ioctl,
-			  DRM_AUTH | DRM_UNLOCKED | DRM_RENDER_ALLOW),
+			  DRM_AUTH | DRM_RENDER_ALLOW),
 
 	DRM_IOCTL_DEF_DRV(VIRTGPU_RESOURCE_CREATE,
 			  virtio_gpu_resource_create_ioctl,
-			  DRM_AUTH | DRM_UNLOCKED | DRM_RENDER_ALLOW),
+			  DRM_AUTH | DRM_RENDER_ALLOW),
 
 	DRM_IOCTL_DEF_DRV(VIRTGPU_RESOURCE_INFO, virtio_gpu_resource_info_ioctl,
-			  DRM_AUTH | DRM_UNLOCKED | DRM_RENDER_ALLOW),
+			  DRM_AUTH | DRM_RENDER_ALLOW),
 
 	/* make transfer async to the main ring? - no sure, can we
 	 * thread these in the underlying GL
 	 */
 	DRM_IOCTL_DEF_DRV(VIRTGPU_TRANSFER_FROM_HOST,
 			  virtio_gpu_transfer_from_host_ioctl,
-			  DRM_AUTH | DRM_UNLOCKED | DRM_RENDER_ALLOW),
+			  DRM_AUTH | DRM_RENDER_ALLOW),
 	DRM_IOCTL_DEF_DRV(VIRTGPU_TRANSFER_TO_HOST,
 			  virtio_gpu_transfer_to_host_ioctl,
-			  DRM_AUTH | DRM_UNLOCKED | DRM_RENDER_ALLOW),
+			  DRM_AUTH | DRM_RENDER_ALLOW),
 
 	DRM_IOCTL_DEF_DRV(VIRTGPU_WAIT, virtio_gpu_wait_ioctl,
-			  DRM_AUTH | DRM_UNLOCKED | DRM_RENDER_ALLOW),
+			  DRM_AUTH | DRM_RENDER_ALLOW),
 
 	DRM_IOCTL_DEF_DRV(VIRTGPU_GET_CAPS, virtio_gpu_get_caps_ioctl,
-			  DRM_AUTH | DRM_UNLOCKED | DRM_RENDER_ALLOW),
+			  DRM_AUTH | DRM_RENDER_ALLOW),
 };
diff --git a/drivers/gpu/drm/virtio/virtgpu_kms.c b/drivers/gpu/drm/virtio/virtgpu_kms.c
index 65060c0..c340be2 100644
--- a/drivers/gpu/drm/virtio/virtgpu_kms.c
+++ b/drivers/gpu/drm/virtio/virtgpu_kms.c
@@ -28,11 +28,6 @@
 #include <drm/drmP.h>
 #include "virtgpu_drv.h"
 
-static int virtio_gpu_fbdev = 1;
-
-MODULE_PARM_DESC(fbdev, "Disable/Enable framebuffer device & console");
-module_param_named(fbdev, virtio_gpu_fbdev, int, 0400);
-
 static void virtio_gpu_config_changed_work_func(struct work_struct *work)
 {
 	struct virtio_gpu_device *vgdev =
@@ -44,6 +39,8 @@
 	virtio_cread(vgdev->vdev, struct virtio_gpu_config,
 		     events_read, &events_read);
 	if (events_read & VIRTIO_GPU_EVENT_DISPLAY) {
+		if (vgdev->has_edid)
+			virtio_gpu_cmd_get_edids(vgdev);
 		virtio_gpu_cmd_get_display_info(vgdev);
 		drm_helper_hpd_irq_event(vgdev->ddev);
 		events_clear |= VIRTIO_GPU_EVENT_DISPLAY;
@@ -52,39 +49,23 @@
 		      events_clear, &events_clear);
 }
 
-static void virtio_gpu_ctx_id_get(struct virtio_gpu_device *vgdev,
-				  uint32_t *resid)
+static int virtio_gpu_context_create(struct virtio_gpu_device *vgdev,
+				      uint32_t nlen, const char *name)
 {
-	int handle;
+	int handle = ida_alloc(&vgdev->ctx_id_ida, GFP_KERNEL);
 
-	idr_preload(GFP_KERNEL);
-	spin_lock(&vgdev->ctx_id_idr_lock);
-	handle = idr_alloc(&vgdev->ctx_id_idr, NULL, 1, 0, 0);
-	spin_unlock(&vgdev->ctx_id_idr_lock);
-	idr_preload_end();
-	*resid = handle;
-}
-
-static void virtio_gpu_ctx_id_put(struct virtio_gpu_device *vgdev, uint32_t id)
-{
-	spin_lock(&vgdev->ctx_id_idr_lock);
-	idr_remove(&vgdev->ctx_id_idr, id);
-	spin_unlock(&vgdev->ctx_id_idr_lock);
-}
-
-static void virtio_gpu_context_create(struct virtio_gpu_device *vgdev,
-				      uint32_t nlen, const char *name,
-				      uint32_t *ctx_id)
-{
-	virtio_gpu_ctx_id_get(vgdev, ctx_id);
-	virtio_gpu_cmd_context_create(vgdev, *ctx_id, nlen, name);
+	if (handle < 0)
+		return handle;
+	handle += 1;
+	virtio_gpu_cmd_context_create(vgdev, handle, nlen, name);
+	return handle;
 }
 
 static void virtio_gpu_context_destroy(struct virtio_gpu_device *vgdev,
 				      uint32_t ctx_id)
 {
 	virtio_gpu_cmd_context_destroy(vgdev, ctx_id);
-	virtio_gpu_ctx_id_put(vgdev, ctx_id);
+	ida_free(&vgdev->ctx_id_ida, ctx_id - 1);
 }
 
 static void virtio_gpu_init_vq(struct virtio_gpu_queue *vgvq,
@@ -151,10 +132,8 @@
 	vgdev->dev = dev->dev;
 
 	spin_lock_init(&vgdev->display_info_lock);
-	spin_lock_init(&vgdev->ctx_id_idr_lock);
-	idr_init(&vgdev->ctx_id_idr);
-	spin_lock_init(&vgdev->resource_idr_lock);
-	idr_init(&vgdev->resource_idr);
+	ida_init(&vgdev->ctx_id_ida);
+	ida_init(&vgdev->resource_ida);
 	init_waitqueue_head(&vgdev->resp_wq);
 	virtio_gpu_init_vq(&vgdev->ctrlq, virtio_gpu_dequeue_ctrl_func);
 	virtio_gpu_init_vq(&vgdev->cursorq, virtio_gpu_dequeue_cursor_func);
@@ -174,6 +153,10 @@
 #else
 	DRM_INFO("virgl 3d acceleration not supported by guest\n");
 #endif
+	if (virtio_has_feature(vgdev->vdev, VIRTIO_GPU_F_EDID)) {
+		vgdev->has_edid = true;
+		DRM_INFO("EDID support available.\n");
+	}
 
 	ret = virtio_find_vqs(vgdev->vdev, 2, vqs, callbacks, names, NULL);
 	if (ret) {
@@ -219,12 +202,11 @@
 
 	if (num_capsets)
 		virtio_gpu_get_capsets(vgdev, num_capsets);
+	if (vgdev->has_edid)
+		virtio_gpu_cmd_get_edids(vgdev);
 	virtio_gpu_cmd_get_display_info(vgdev);
 	wait_event_timeout(vgdev->resp_wq, !vgdev->display_info_pending,
 			   5 * HZ);
-	if (virtio_gpu_fbdev)
-		virtio_gpu_fbdev_init(vgdev);
-
 	return 0;
 
 err_modeset:
@@ -257,6 +239,7 @@
 	flush_work(&vgdev->ctrlq.dequeue_work);
 	flush_work(&vgdev->cursorq.dequeue_work);
 	flush_work(&vgdev->config_changed_work);
+	vgdev->vdev->config->reset(vgdev->vdev);
 	vgdev->vdev->config->del_vqs(vgdev->vdev);
 
 	virtio_gpu_modeset_fini(vgdev);
@@ -271,7 +254,7 @@
 {
 	struct virtio_gpu_device *vgdev = dev->dev_private;
 	struct virtio_gpu_fpriv *vfpriv;
-	uint32_t id;
+	int id;
 	char dbgname[TASK_COMM_LEN];
 
 	/* can't create contexts without 3d renderer */
@@ -284,7 +267,11 @@
 		return -ENOMEM;
 
 	get_task_comm(dbgname, current);
-	virtio_gpu_context_create(vgdev, strlen(dbgname), dbgname, &id);
+	id = virtio_gpu_context_create(vgdev, strlen(dbgname), dbgname);
+	if (id < 0) {
+		kfree(vfpriv);
+		return id;
+	}
 
 	vfpriv->ctx_id = id;
 	file->driver_priv = vfpriv;
diff --git a/drivers/gpu/drm/virtio/virtgpu_object.c b/drivers/gpu/drm/virtio/virtgpu_object.c
index 9f2f470..aaeceb7 100644
--- a/drivers/gpu/drm/virtio/virtgpu_object.c
+++ b/drivers/gpu/drm/virtio/virtgpu_object.c
@@ -23,8 +23,40 @@
  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 
+#include <drm/ttm/ttm_execbuf_util.h>
+
 #include "virtgpu_drv.h"
 
+static int virtio_gpu_resource_id_get(struct virtio_gpu_device *vgdev,
+				       uint32_t *resid)
+{
+#if 0
+	int handle = ida_alloc(&vgdev->resource_ida, GFP_KERNEL);
+
+	if (handle < 0)
+		return handle;
+#else
+	static int handle;
+
+	/*
+	 * FIXME: dirty hack to avoid re-using IDs, virglrenderer
+	 * can't deal with that.  Needs fixing in virglrenderer, also
+	 * should figure a better way to handle that in the guest.
+	 */
+	handle++;
+#endif
+
+	*resid = handle + 1;
+	return 0;
+}
+
+static void virtio_gpu_resource_id_put(struct virtio_gpu_device *vgdev, uint32_t id)
+{
+#if 0
+	ida_free(&vgdev->resource_ida, id - 1);
+#endif
+}
+
 static void virtio_gpu_ttm_bo_destroy(struct ttm_buffer_object *tbo)
 {
 	struct virtio_gpu_object *bo;
@@ -33,88 +65,130 @@
 	bo = container_of(tbo, struct virtio_gpu_object, tbo);
 	vgdev = (struct virtio_gpu_device *)bo->gem_base.dev->dev_private;
 
-	if (bo->hw_res_handle)
+	if (bo->created)
 		virtio_gpu_cmd_unref_resource(vgdev, bo->hw_res_handle);
 	if (bo->pages)
 		virtio_gpu_object_free_sg_table(bo);
 	drm_gem_object_release(&bo->gem_base);
+	virtio_gpu_resource_id_put(vgdev, bo->hw_res_handle);
 	kfree(bo);
 }
 
-static void virtio_gpu_init_ttm_placement(struct virtio_gpu_object *vgbo,
-					  bool pinned)
+static void virtio_gpu_init_ttm_placement(struct virtio_gpu_object *vgbo)
 {
 	u32 c = 1;
-	u32 pflag = pinned ? TTM_PL_FLAG_NO_EVICT : 0;
 
 	vgbo->placement.placement = &vgbo->placement_code;
 	vgbo->placement.busy_placement = &vgbo->placement_code;
 	vgbo->placement_code.fpfn = 0;
 	vgbo->placement_code.lpfn = 0;
 	vgbo->placement_code.flags =
-		TTM_PL_MASK_CACHING | TTM_PL_FLAG_TT | pflag;
+		TTM_PL_MASK_CACHING | TTM_PL_FLAG_TT |
+		TTM_PL_FLAG_NO_EVICT;
 	vgbo->placement.num_placement = c;
 	vgbo->placement.num_busy_placement = c;
 
 }
 
 int virtio_gpu_object_create(struct virtio_gpu_device *vgdev,
-			     unsigned long size, bool kernel, bool pinned,
-			     struct virtio_gpu_object **bo_ptr)
+			     struct virtio_gpu_object_params *params,
+			     struct virtio_gpu_object **bo_ptr,
+			     struct virtio_gpu_fence *fence)
 {
 	struct virtio_gpu_object *bo;
-	enum ttm_bo_type type;
 	size_t acc_size;
 	int ret;
 
-	if (kernel)
-		type = ttm_bo_type_kernel;
-	else
-		type = ttm_bo_type_device;
 	*bo_ptr = NULL;
 
-	acc_size = ttm_bo_dma_acc_size(&vgdev->mman.bdev, size,
+	acc_size = ttm_bo_dma_acc_size(&vgdev->mman.bdev, params->size,
 				       sizeof(struct virtio_gpu_object));
 
 	bo = kzalloc(sizeof(struct virtio_gpu_object), GFP_KERNEL);
 	if (bo == NULL)
 		return -ENOMEM;
-	size = roundup(size, PAGE_SIZE);
-	ret = drm_gem_object_init(vgdev->ddev, &bo->gem_base, size);
-	if (ret != 0) {
+	ret = virtio_gpu_resource_id_get(vgdev, &bo->hw_res_handle);
+	if (ret < 0) {
 		kfree(bo);
 		return ret;
 	}
-	bo->dumb = false;
-	virtio_gpu_init_ttm_placement(bo, pinned);
+	params->size = roundup(params->size, PAGE_SIZE);
+	ret = drm_gem_object_init(vgdev->ddev, &bo->gem_base, params->size);
+	if (ret != 0) {
+		virtio_gpu_resource_id_put(vgdev, bo->hw_res_handle);
+		kfree(bo);
+		return ret;
+	}
+	bo->dumb = params->dumb;
 
-	ret = ttm_bo_init(&vgdev->mman.bdev, &bo->tbo, size, type,
-			  &bo->placement, 0, !kernel, acc_size,
-			  NULL, NULL, &virtio_gpu_ttm_bo_destroy);
+	if (params->virgl) {
+		virtio_gpu_cmd_resource_create_3d(vgdev, bo, params, fence);
+	} else {
+		virtio_gpu_cmd_create_resource(vgdev, bo, params, fence);
+	}
+
+	virtio_gpu_init_ttm_placement(bo);
+	ret = ttm_bo_init(&vgdev->mman.bdev, &bo->tbo, params->size,
+			  ttm_bo_type_device, &bo->placement, 0,
+			  true, acc_size, NULL, NULL,
+			  &virtio_gpu_ttm_bo_destroy);
 	/* ttm_bo_init failure will call the destroy */
 	if (ret != 0)
 		return ret;
 
+	if (fence) {
+		struct virtio_gpu_fence_driver *drv = &vgdev->fence_drv;
+		struct list_head validate_list;
+		struct ttm_validate_buffer mainbuf;
+		struct ww_acquire_ctx ticket;
+		unsigned long irq_flags;
+		bool signaled;
+
+		INIT_LIST_HEAD(&validate_list);
+		memset(&mainbuf, 0, sizeof(struct ttm_validate_buffer));
+
+		/* use a gem reference since unref list undoes them */
+		drm_gem_object_get(&bo->gem_base);
+		mainbuf.bo = &bo->tbo;
+		list_add(&mainbuf.head, &validate_list);
+
+		ret = virtio_gpu_object_list_validate(&ticket, &validate_list);
+		if (ret == 0) {
+			spin_lock_irqsave(&drv->lock, irq_flags);
+			signaled = virtio_fence_signaled(&fence->f);
+			if (!signaled)
+				/* virtio create command still in flight */
+				ttm_eu_fence_buffer_objects(&ticket, &validate_list,
+							    &fence->f);
+			spin_unlock_irqrestore(&drv->lock, irq_flags);
+			if (signaled)
+				/* virtio create command finished */
+				ttm_eu_backoff_reservation(&ticket, &validate_list);
+		}
+		virtio_gpu_unref_list(&validate_list);
+	}
+
 	*bo_ptr = bo;
 	return 0;
 }
 
-int virtio_gpu_object_kmap(struct virtio_gpu_object *bo, void **ptr)
+void virtio_gpu_object_kunmap(struct virtio_gpu_object *bo)
+{
+	bo->vmap = NULL;
+	ttm_bo_kunmap(&bo->kmap);
+}
+
+int virtio_gpu_object_kmap(struct virtio_gpu_object *bo)
 {
 	bool is_iomem;
 	int r;
 
-	if (bo->vmap) {
-		if (ptr)
-			*ptr = bo->vmap;
-		return 0;
-	}
+	WARN_ON(bo->vmap);
+
 	r = ttm_bo_kmap(&bo->tbo, 0, bo->tbo.num_pages, &bo->kmap);
 	if (r)
 		return r;
 	bo->vmap = ttm_kmap_obj_virtual(&bo->kmap, &is_iomem);
-	if (ptr)
-		*ptr = bo->vmap;
 	return 0;
 }
 
diff --git a/drivers/gpu/drm/virtio/virtgpu_plane.c b/drivers/gpu/drm/virtio/virtgpu_plane.c
index dc5b5b2..7eaac3b 100644
--- a/drivers/gpu/drm/virtio/virtgpu_plane.c
+++ b/drivers/gpu/drm/virtio/virtgpu_plane.c
@@ -152,13 +152,13 @@
 	if (WARN_ON(!output))
 		return;
 
-	if (plane->state->fb) {
+	if (plane->state->fb && output->enabled) {
 		vgfb = to_virtio_gpu_framebuffer(plane->state->fb);
 		bo = gem_to_virtio_gpu_obj(vgfb->base.obj[0]);
 		handle = bo->hw_res_handle;
 		if (bo->dumb) {
 			virtio_gpu_cmd_transfer_to_host_2d
-				(vgdev, handle, 0,
+				(vgdev, bo, 0,
 				 cpu_to_le32(plane->state->src_w >> 16),
 				 cpu_to_le32(plane->state->src_h >> 16),
 				 cpu_to_le32(plane->state->src_x >> 16),
@@ -180,11 +180,49 @@
 				   plane->state->src_h >> 16,
 				   plane->state->src_x >> 16,
 				   plane->state->src_y >> 16);
-	virtio_gpu_cmd_resource_flush(vgdev, handle,
-				      plane->state->src_x >> 16,
-				      plane->state->src_y >> 16,
-				      plane->state->src_w >> 16,
-				      plane->state->src_h >> 16);
+	if (handle)
+		virtio_gpu_cmd_resource_flush(vgdev, handle,
+					      plane->state->src_x >> 16,
+					      plane->state->src_y >> 16,
+					      plane->state->src_w >> 16,
+					      plane->state->src_h >> 16);
+}
+
+static int virtio_gpu_cursor_prepare_fb(struct drm_plane *plane,
+					struct drm_plane_state *new_state)
+{
+	struct drm_device *dev = plane->dev;
+	struct virtio_gpu_device *vgdev = dev->dev_private;
+	struct virtio_gpu_framebuffer *vgfb;
+	struct virtio_gpu_object *bo;
+
+	if (!new_state->fb)
+		return 0;
+
+	vgfb = to_virtio_gpu_framebuffer(new_state->fb);
+	bo = gem_to_virtio_gpu_obj(vgfb->base.obj[0]);
+	if (bo && bo->dumb && (plane->state->fb != new_state->fb)) {
+		vgfb->fence = virtio_gpu_fence_alloc(vgdev);
+		if (!vgfb->fence)
+			return -ENOMEM;
+	}
+
+	return 0;
+}
+
+static void virtio_gpu_cursor_cleanup_fb(struct drm_plane *plane,
+					 struct drm_plane_state *old_state)
+{
+	struct virtio_gpu_framebuffer *vgfb;
+
+	if (!plane->state->fb)
+		return;
+
+	vgfb = to_virtio_gpu_framebuffer(plane->state->fb);
+	if (vgfb->fence) {
+		dma_fence_put(&vgfb->fence->f);
+		vgfb->fence = NULL;
+	}
 }
 
 static void virtio_gpu_cursor_plane_update(struct drm_plane *plane,
@@ -194,7 +232,6 @@
 	struct virtio_gpu_device *vgdev = dev->dev_private;
 	struct virtio_gpu_output *output = NULL;
 	struct virtio_gpu_framebuffer *vgfb;
-	struct virtio_gpu_fence *fence = NULL;
 	struct virtio_gpu_object *bo = NULL;
 	uint32_t handle;
 	int ret = 0;
@@ -217,16 +254,16 @@
 	if (bo && bo->dumb && (plane->state->fb != old_state->fb)) {
 		/* new cursor -- update & wait */
 		virtio_gpu_cmd_transfer_to_host_2d
-			(vgdev, handle, 0,
+			(vgdev, bo, 0,
 			 cpu_to_le32(plane->state->crtc_w),
 			 cpu_to_le32(plane->state->crtc_h),
-			 0, 0, &fence);
+			 0, 0, vgfb->fence);
 		ret = virtio_gpu_object_reserve(bo, false);
 		if (!ret) {
 			reservation_object_add_excl_fence(bo->tbo.resv,
-							  &fence->f);
-			dma_fence_put(&fence->f);
-			fence = NULL;
+							  &vgfb->fence->f);
+			dma_fence_put(&vgfb->fence->f);
+			vgfb->fence = NULL;
 			virtio_gpu_object_unreserve(bo);
 			virtio_gpu_object_wait(bo, false);
 		}
@@ -268,6 +305,8 @@
 };
 
 static const struct drm_plane_helper_funcs virtio_gpu_cursor_helper_funcs = {
+	.prepare_fb		= virtio_gpu_cursor_prepare_fb,
+	.cleanup_fb		= virtio_gpu_cursor_cleanup_fb,
 	.atomic_check		= virtio_gpu_plane_atomic_check,
 	.atomic_update		= virtio_gpu_cursor_plane_update,
 };
diff --git a/drivers/gpu/drm/virtio/virtgpu_prime.c b/drivers/gpu/drm/virtio/virtgpu_prime.c
index d27a168..4bbdaed 100644
--- a/drivers/gpu/drm/virtio/virtgpu_prime.c
+++ b/drivers/gpu/drm/virtio/virtgpu_prime.c
@@ -28,21 +28,16 @@
  * device that might share buffers with virtgpu
  */
 
-int virtgpu_gem_prime_pin(struct drm_gem_object *obj)
-{
-	WARN_ONCE(1, "not implemented");
-	return -ENODEV;
-}
-
-void virtgpu_gem_prime_unpin(struct drm_gem_object *obj)
-{
-	WARN_ONCE(1, "not implemented");
-}
-
 struct sg_table *virtgpu_gem_prime_get_sg_table(struct drm_gem_object *obj)
 {
-	WARN_ONCE(1, "not implemented");
-	return ERR_PTR(-ENODEV);
+	struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj);
+
+	if (!bo->tbo.ttm->pages || !bo->tbo.ttm->num_pages)
+		/* should not happen */
+		return ERR_PTR(-EINVAL);
+
+	return drm_prime_pages_to_sg(bo->tbo.ttm->pages,
+				     bo->tbo.ttm->num_pages);
 }
 
 struct drm_gem_object *virtgpu_gem_prime_import_sg_table(
@@ -55,17 +50,25 @@
 
 void *virtgpu_gem_prime_vmap(struct drm_gem_object *obj)
 {
-	WARN_ONCE(1, "not implemented");
-	return ERR_PTR(-ENODEV);
+	struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj);
+	int ret;
+
+	ret = virtio_gpu_object_kmap(bo);
+	if (ret)
+		return NULL;
+	return bo->vmap;
 }
 
 void virtgpu_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr)
 {
-	WARN_ONCE(1, "not implemented");
+	virtio_gpu_object_kunmap(gem_to_virtio_gpu_obj(obj));
 }
 
 int virtgpu_gem_prime_mmap(struct drm_gem_object *obj,
-		       struct vm_area_struct *area)
+			   struct vm_area_struct *vma)
 {
-	return -ENODEV;
+	struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj);
+
+	bo->gem_base.vma_node.vm_node.start = bo->tbo.vma_node.vm_node.start;
+	return drm_gem_prime_mmap(obj, vma);
 }
diff --git a/drivers/gpu/drm/virtio/virtgpu_trace.h b/drivers/gpu/drm/virtio/virtgpu_trace.h
new file mode 100644
index 0000000..711ecc2
--- /dev/null
+++ b/drivers/gpu/drm/virtio/virtgpu_trace.h
@@ -0,0 +1,52 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#if !defined(_VIRTGPU_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
+#define _VIRTGPU_TRACE_H_
+
+#include <linux/tracepoint.h>
+
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM virtio_gpu
+#define TRACE_INCLUDE_FILE virtgpu_trace
+
+DECLARE_EVENT_CLASS(virtio_gpu_cmd,
+	TP_PROTO(struct virtqueue *vq, struct virtio_gpu_ctrl_hdr *hdr),
+	TP_ARGS(vq, hdr),
+	TP_STRUCT__entry(
+			 __field(int, dev)
+			 __field(unsigned int, vq)
+			 __field(const char *, name)
+			 __field(u32, type)
+			 __field(u32, flags)
+			 __field(u64, fence_id)
+			 __field(u32, ctx_id)
+			 ),
+	TP_fast_assign(
+		       __entry->dev = vq->vdev->index;
+		       __entry->vq = vq->index;
+		       __entry->name = vq->name;
+		       __entry->type = le32_to_cpu(hdr->type);
+		       __entry->flags = le32_to_cpu(hdr->flags);
+		       __entry->fence_id = le64_to_cpu(hdr->fence_id);
+		       __entry->ctx_id = le32_to_cpu(hdr->ctx_id);
+		       ),
+	TP_printk("vdev=%d vq=%u name=%s type=0x%x flags=0x%x fence_id=%llu ctx_id=%u",
+		  __entry->dev, __entry->vq, __entry->name,
+		  __entry->type, __entry->flags, __entry->fence_id,
+		  __entry->ctx_id)
+);
+
+DEFINE_EVENT(virtio_gpu_cmd, virtio_gpu_cmd_queue,
+	TP_PROTO(struct virtqueue *vq, struct virtio_gpu_ctrl_hdr *hdr),
+	TP_ARGS(vq, hdr)
+);
+
+DEFINE_EVENT(virtio_gpu_cmd, virtio_gpu_cmd_response,
+	TP_PROTO(struct virtqueue *vq, struct virtio_gpu_ctrl_hdr *hdr),
+	TP_ARGS(vq, hdr)
+);
+
+#endif
+
+#undef TRACE_INCLUDE_PATH
+#define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/virtio
+#include <trace/define_trace.h>
diff --git a/drivers/gpu/drm/virtio/virtgpu_trace_points.c b/drivers/gpu/drm/virtio/virtgpu_trace_points.c
new file mode 100644
index 0000000..1970cb6
--- /dev/null
+++ b/drivers/gpu/drm/virtio/virtgpu_trace_points.c
@@ -0,0 +1,5 @@
+// SPDX-License-Identifier: GPL-2.0
+#include "virtgpu_drv.h"
+
+#define CREATE_TRACE_POINTS
+#include "virtgpu_trace.h"
diff --git a/drivers/gpu/drm/virtio/virtgpu_ttm.c b/drivers/gpu/drm/virtio/virtgpu_ttm.c
index 11f8ae5..8f78002 100644
--- a/drivers/gpu/drm/virtio/virtgpu_ttm.c
+++ b/drivers/gpu/drm/virtio/virtgpu_ttm.c
@@ -106,29 +106,6 @@
 	}
 }
 
-#if 0
-/*
- * Hmm, seems to not do anything useful.  Leftover debug hack?
- * Something like printing pagefaults to kernel log?
- */
-static struct vm_operations_struct virtio_gpu_ttm_vm_ops;
-static const struct vm_operations_struct *ttm_vm_ops;
-
-static int virtio_gpu_ttm_fault(struct vm_fault *vmf)
-{
-	struct ttm_buffer_object *bo;
-	struct virtio_gpu_device *vgdev;
-	int r;
-
-	bo = (struct ttm_buffer_object *)vmf->vma->vm_private_data;
-	if (bo == NULL)
-		return VM_FAULT_NOPAGE;
-	vgdev = virtio_gpu_get_vgdev(bo->bdev);
-	r = ttm_vm_ops->fault(vmf);
-	return r;
-}
-#endif
-
 int virtio_gpu_mmap(struct file *filp, struct vm_area_struct *vma)
 {
 	struct drm_file *file_priv;
@@ -143,19 +120,8 @@
 		return -EINVAL;
 	}
 	r = ttm_bo_mmap(filp, vma, &vgdev->mman.bdev);
-#if 0
-	if (unlikely(r != 0))
-		return r;
-	if (unlikely(ttm_vm_ops == NULL)) {
-		ttm_vm_ops = vma->vm_ops;
-		virtio_gpu_ttm_vm_ops = *ttm_vm_ops;
-		virtio_gpu_ttm_vm_ops.fault = &virtio_gpu_ttm_fault;
-	}
-	vma->vm_ops = &virtio_gpu_ttm_vm_ops;
-	return 0;
-#else
+
 	return r;
-#endif
 }
 
 static int virtio_gpu_invalidate_caches(struct ttm_bo_device *bdev,
@@ -206,10 +172,6 @@
 static int virtio_gpu_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
 				    struct ttm_mem_type_manager *man)
 {
-	struct virtio_gpu_device *vgdev;
-
-	vgdev = virtio_gpu_get_vgdev(bdev);
-
 	switch (type) {
 	case TTM_PL_SYSTEM:
 		/* System memory */
@@ -284,42 +246,45 @@
  */
 struct virtio_gpu_ttm_tt {
 	struct ttm_dma_tt		ttm;
-	struct virtio_gpu_device	*vgdev;
-	u64				offset;
+	struct virtio_gpu_object        *obj;
 };
 
-static int virtio_gpu_ttm_backend_bind(struct ttm_tt *ttm,
-				       struct ttm_mem_reg *bo_mem)
+static int virtio_gpu_ttm_tt_bind(struct ttm_tt *ttm,
+				  struct ttm_mem_reg *bo_mem)
 {
-	struct virtio_gpu_ttm_tt *gtt = (void *)ttm;
+	struct virtio_gpu_ttm_tt *gtt =
+		container_of(ttm, struct virtio_gpu_ttm_tt, ttm.ttm);
+	struct virtio_gpu_device *vgdev =
+		virtio_gpu_get_vgdev(gtt->obj->tbo.bdev);
 
-	gtt->offset = (unsigned long)(bo_mem->start << PAGE_SHIFT);
-	if (!ttm->num_pages)
-		WARN(1, "nothing to bind %lu pages for mreg %p back %p!\n",
-		     ttm->num_pages, bo_mem, ttm);
-
-	/* Not implemented */
+	virtio_gpu_object_attach(vgdev, gtt->obj, NULL);
 	return 0;
 }
 
-static int virtio_gpu_ttm_backend_unbind(struct ttm_tt *ttm)
+static int virtio_gpu_ttm_tt_unbind(struct ttm_tt *ttm)
 {
-	/* Not implemented */
+	struct virtio_gpu_ttm_tt *gtt =
+		container_of(ttm, struct virtio_gpu_ttm_tt, ttm.ttm);
+	struct virtio_gpu_device *vgdev =
+		virtio_gpu_get_vgdev(gtt->obj->tbo.bdev);
+
+	virtio_gpu_object_detach(vgdev, gtt->obj);
 	return 0;
 }
 
-static void virtio_gpu_ttm_backend_destroy(struct ttm_tt *ttm)
+static void virtio_gpu_ttm_tt_destroy(struct ttm_tt *ttm)
 {
-	struct virtio_gpu_ttm_tt *gtt = (void *)ttm;
+	struct virtio_gpu_ttm_tt *gtt =
+		container_of(ttm, struct virtio_gpu_ttm_tt, ttm.ttm);
 
 	ttm_dma_tt_fini(&gtt->ttm);
 	kfree(gtt);
 }
 
-static struct ttm_backend_func virtio_gpu_backend_func = {
-	.bind = &virtio_gpu_ttm_backend_bind,
-	.unbind = &virtio_gpu_ttm_backend_unbind,
-	.destroy = &virtio_gpu_ttm_backend_destroy,
+static struct ttm_backend_func virtio_gpu_tt_func = {
+	.bind = &virtio_gpu_ttm_tt_bind,
+	.unbind = &virtio_gpu_ttm_tt_unbind,
+	.destroy = &virtio_gpu_ttm_tt_destroy,
 };
 
 static struct ttm_tt *virtio_gpu_ttm_tt_create(struct ttm_buffer_object *bo,
@@ -332,8 +297,8 @@
 	gtt = kzalloc(sizeof(struct virtio_gpu_ttm_tt), GFP_KERNEL);
 	if (gtt == NULL)
 		return NULL;
-	gtt->ttm.ttm.func = &virtio_gpu_backend_func;
-	gtt->vgdev = vgdev;
+	gtt->ttm.ttm.func = &virtio_gpu_tt_func;
+	gtt->obj = container_of(bo, struct virtio_gpu_object, tbo);
 	if (ttm_dma_tt_init(&gtt->ttm, bo, page_flags)) {
 		kfree(gtt);
 		return NULL;
@@ -341,60 +306,11 @@
 	return &gtt->ttm.ttm;
 }
 
-static void virtio_gpu_move_null(struct ttm_buffer_object *bo,
-				 struct ttm_mem_reg *new_mem)
-{
-	struct ttm_mem_reg *old_mem = &bo->mem;
-
-	BUG_ON(old_mem->mm_node != NULL);
-	*old_mem = *new_mem;
-	new_mem->mm_node = NULL;
-}
-
-static int virtio_gpu_bo_move(struct ttm_buffer_object *bo, bool evict,
-			      struct ttm_operation_ctx *ctx,
-			      struct ttm_mem_reg *new_mem)
-{
-	int ret;
-
-	ret = ttm_bo_wait(bo, ctx->interruptible, ctx->no_wait_gpu);
-	if (ret)
-		return ret;
-
-	virtio_gpu_move_null(bo, new_mem);
-	return 0;
-}
-
-static void virtio_gpu_bo_move_notify(struct ttm_buffer_object *tbo,
-				      bool evict,
-				      struct ttm_mem_reg *new_mem)
-{
-	struct virtio_gpu_object *bo;
-	struct virtio_gpu_device *vgdev;
-
-	bo = container_of(tbo, struct virtio_gpu_object, tbo);
-	vgdev = (struct virtio_gpu_device *)bo->gem_base.dev->dev_private;
-
-	if (!new_mem || (new_mem->placement & TTM_PL_FLAG_SYSTEM)) {
-		if (bo->hw_res_handle)
-			virtio_gpu_cmd_resource_inval_backing(vgdev,
-							   bo->hw_res_handle);
-
-	} else if (new_mem->placement & TTM_PL_FLAG_TT) {
-		if (bo->hw_res_handle) {
-			virtio_gpu_object_attach(vgdev, bo, bo->hw_res_handle,
-						 NULL);
-		}
-	}
-}
-
 static void virtio_gpu_bo_swap_notify(struct ttm_buffer_object *tbo)
 {
 	struct virtio_gpu_object *bo;
-	struct virtio_gpu_device *vgdev;
 
 	bo = container_of(tbo, struct virtio_gpu_object, tbo);
-	vgdev = (struct virtio_gpu_device *)bo->gem_base.dev->dev_private;
 
 	if (bo->pages)
 		virtio_gpu_object_free_sg_table(bo);
@@ -406,11 +322,9 @@
 	.init_mem_type = &virtio_gpu_init_mem_type,
 	.eviction_valuable = ttm_bo_eviction_valuable,
 	.evict_flags = &virtio_gpu_evict_flags,
-	.move = &virtio_gpu_bo_move,
 	.verify_access = &virtio_gpu_verify_access,
 	.io_mem_reserve = &virtio_gpu_ttm_io_mem_reserve,
 	.io_mem_free = &virtio_gpu_ttm_io_mem_free,
-	.move_notify = &virtio_gpu_bo_move_notify,
 	.swap_notify = &virtio_gpu_bo_swap_notify,
 };
 
diff --git a/drivers/gpu/drm/virtio/virtgpu_vq.c b/drivers/gpu/drm/virtio/virtgpu_vq.c
index c8a581b..981ee16 100644
--- a/drivers/gpu/drm/virtio/virtgpu_vq.c
+++ b/drivers/gpu/drm/virtio/virtgpu_vq.c
@@ -28,6 +28,7 @@
 
 #include <drm/drmP.h>
 #include "virtgpu_drv.h"
+#include "virtgpu_trace.h"
 #include <linux/virtio.h>
 #include <linux/virtio_config.h>
 #include <linux/virtio_ring.h>
@@ -38,26 +39,6 @@
 			       + MAX_INLINE_CMD_SIZE		 \
 			       + MAX_INLINE_RESP_SIZE)
 
-void virtio_gpu_resource_id_get(struct virtio_gpu_device *vgdev,
-				uint32_t *resid)
-{
-	int handle;
-
-	idr_preload(GFP_KERNEL);
-	spin_lock(&vgdev->resource_idr_lock);
-	handle = idr_alloc(&vgdev->resource_idr, NULL, 1, 0, GFP_NOWAIT);
-	spin_unlock(&vgdev->resource_idr_lock);
-	idr_preload_end();
-	*resid = handle;
-}
-
-void virtio_gpu_resource_id_put(struct virtio_gpu_device *vgdev, uint32_t id)
-{
-	spin_lock(&vgdev->resource_idr_lock);
-	idr_remove(&vgdev->resource_idr, id);
-	spin_unlock(&vgdev->resource_idr_lock);
-}
-
 void virtio_gpu_ctrl_ack(struct virtqueue *vq)
 {
 	struct drm_device *dev = vq->vdev->priv;
@@ -98,10 +79,9 @@
 {
 	struct virtio_gpu_vbuffer *vbuf;
 
-	vbuf = kmem_cache_alloc(vgdev->vbufs, GFP_KERNEL);
+	vbuf = kmem_cache_zalloc(vgdev->vbufs, GFP_KERNEL);
 	if (!vbuf)
 		return ERR_PTR(-ENOMEM);
-	memset(vbuf, 0, VBUFFER_SIZE);
 
 	BUG_ON(size > MAX_INLINE_CMD_SIZE);
 	vbuf->buf = (void *)vbuf + sizeof(*vbuf);
@@ -213,8 +193,19 @@
 
 	list_for_each_entry_safe(entry, tmp, &reclaim_list, list) {
 		resp = (struct virtio_gpu_ctrl_hdr *)entry->resp_buf;
-		if (resp->type != cpu_to_le32(VIRTIO_GPU_RESP_OK_NODATA))
-			DRM_DEBUG("response 0x%x\n", le32_to_cpu(resp->type));
+
+		trace_virtio_gpu_cmd_response(vgdev->ctrlq.vq, resp);
+
+		if (resp->type != cpu_to_le32(VIRTIO_GPU_RESP_OK_NODATA)) {
+			if (resp->type >= cpu_to_le32(VIRTIO_GPU_RESP_ERR_UNSPEC)) {
+				struct virtio_gpu_ctrl_hdr *cmd;
+				cmd = (struct virtio_gpu_ctrl_hdr *)entry->buf;
+				DRM_ERROR("response 0x%x (command 0x%x)\n",
+					  le32_to_cpu(resp->type),
+					  le32_to_cpu(cmd->type));
+			} else
+				DRM_DEBUG("response 0x%x\n", le32_to_cpu(resp->type));
+		}
 		if (resp->flags & cpu_to_le32(VIRTIO_GPU_FLAG_FENCE)) {
 			u64 f = le64_to_cpu(resp->fence_id);
 
@@ -297,6 +288,9 @@
 		spin_lock(&vgdev->ctrlq.qlock);
 		goto retry;
 	} else {
+		trace_virtio_gpu_cmd_queue(vq,
+			(struct virtio_gpu_ctrl_hdr *)vbuf->buf);
+
 		virtqueue_kick(vq);
 	}
 
@@ -319,7 +313,7 @@
 static int virtio_gpu_queue_fenced_ctrl_buffer(struct virtio_gpu_device *vgdev,
 					       struct virtio_gpu_vbuffer *vbuf,
 					       struct virtio_gpu_ctrl_hdr *hdr,
-					       struct virtio_gpu_fence **fence)
+					       struct virtio_gpu_fence *fence)
 {
 	struct virtqueue *vq = vgdev->ctrlq.vq;
 	int rc;
@@ -372,6 +366,9 @@
 		spin_lock(&vgdev->cursorq.qlock);
 		goto retry;
 	} else {
+		trace_virtio_gpu_cmd_queue(vq,
+			(struct virtio_gpu_ctrl_hdr *)vbuf->buf);
+
 		virtqueue_kick(vq);
 	}
 
@@ -388,10 +385,9 @@
 
 /* create a basic resource */
 void virtio_gpu_cmd_create_resource(struct virtio_gpu_device *vgdev,
-				    uint32_t resource_id,
-				    uint32_t format,
-				    uint32_t width,
-				    uint32_t height)
+				    struct virtio_gpu_object *bo,
+				    struct virtio_gpu_object_params *params,
+				    struct virtio_gpu_fence *fence)
 {
 	struct virtio_gpu_resource_create_2d *cmd_p;
 	struct virtio_gpu_vbuffer *vbuf;
@@ -400,12 +396,13 @@
 	memset(cmd_p, 0, sizeof(*cmd_p));
 
 	cmd_p->hdr.type = cpu_to_le32(VIRTIO_GPU_CMD_RESOURCE_CREATE_2D);
-	cmd_p->resource_id = cpu_to_le32(resource_id);
-	cmd_p->format = cpu_to_le32(format);
-	cmd_p->width = cpu_to_le32(width);
-	cmd_p->height = cpu_to_le32(height);
+	cmd_p->resource_id = cpu_to_le32(bo->hw_res_handle);
+	cmd_p->format = cpu_to_le32(params->format);
+	cmd_p->width = cpu_to_le32(params->width);
+	cmd_p->height = cpu_to_le32(params->height);
 
-	virtio_gpu_queue_ctrl_buffer(vgdev, vbuf);
+	virtio_gpu_queue_fenced_ctrl_buffer(vgdev, vbuf, &cmd_p->hdr, fence);
+	bo->created = true;
 }
 
 void virtio_gpu_cmd_unref_resource(struct virtio_gpu_device *vgdev,
@@ -423,8 +420,9 @@
 	virtio_gpu_queue_ctrl_buffer(vgdev, vbuf);
 }
 
-void virtio_gpu_cmd_resource_inval_backing(struct virtio_gpu_device *vgdev,
-					   uint32_t resource_id)
+static void virtio_gpu_cmd_resource_inval_backing(struct virtio_gpu_device *vgdev,
+						  uint32_t resource_id,
+						  struct virtio_gpu_fence *fence)
 {
 	struct virtio_gpu_resource_detach_backing *cmd_p;
 	struct virtio_gpu_vbuffer *vbuf;
@@ -435,7 +433,7 @@
 	cmd_p->hdr.type = cpu_to_le32(VIRTIO_GPU_CMD_RESOURCE_DETACH_BACKING);
 	cmd_p->resource_id = cpu_to_le32(resource_id);
 
-	virtio_gpu_queue_ctrl_buffer(vgdev, vbuf);
+	virtio_gpu_queue_fenced_ctrl_buffer(vgdev, vbuf, &cmd_p->hdr, fence);
 }
 
 void virtio_gpu_cmd_set_scanout(struct virtio_gpu_device *vgdev,
@@ -482,19 +480,26 @@
 }
 
 void virtio_gpu_cmd_transfer_to_host_2d(struct virtio_gpu_device *vgdev,
-					uint32_t resource_id, uint64_t offset,
+					struct virtio_gpu_object *bo,
+					uint64_t offset,
 					__le32 width, __le32 height,
 					__le32 x, __le32 y,
-					struct virtio_gpu_fence **fence)
+					struct virtio_gpu_fence *fence)
 {
 	struct virtio_gpu_transfer_to_host_2d *cmd_p;
 	struct virtio_gpu_vbuffer *vbuf;
+	bool use_dma_api = !virtio_has_iommu_quirk(vgdev->vdev);
+
+	if (use_dma_api)
+		dma_sync_sg_for_device(vgdev->vdev->dev.parent,
+				       bo->pages->sgl, bo->pages->nents,
+				       DMA_TO_DEVICE);
 
 	cmd_p = virtio_gpu_alloc_cmd(vgdev, &vbuf, sizeof(*cmd_p));
 	memset(cmd_p, 0, sizeof(*cmd_p));
 
 	cmd_p->hdr.type = cpu_to_le32(VIRTIO_GPU_CMD_TRANSFER_TO_HOST_2D);
-	cmd_p->resource_id = cpu_to_le32(resource_id);
+	cmd_p->resource_id = cpu_to_le32(bo->hw_res_handle);
 	cmd_p->offset = cpu_to_le64(offset);
 	cmd_p->r.width = width;
 	cmd_p->r.height = height;
@@ -509,7 +514,7 @@
 				       uint32_t resource_id,
 				       struct virtio_gpu_mem_entry *ents,
 				       uint32_t nents,
-				       struct virtio_gpu_fence **fence)
+				       struct virtio_gpu_fence *fence)
 {
 	struct virtio_gpu_resource_attach_backing *cmd_p;
 	struct virtio_gpu_vbuffer *vbuf;
@@ -595,6 +600,45 @@
 		}
 	}
 	spin_unlock(&vgdev->display_info_lock);
+	wake_up_all(&vgdev->resp_wq);
+}
+
+static int virtio_get_edid_block(void *data, u8 *buf,
+				 unsigned int block, size_t len)
+{
+	struct virtio_gpu_resp_edid *resp = data;
+	size_t start = block * EDID_LENGTH;
+
+	if (start + len > le32_to_cpu(resp->size))
+		return -1;
+	memcpy(buf, resp->edid + start, len);
+	return 0;
+}
+
+static void virtio_gpu_cmd_get_edid_cb(struct virtio_gpu_device *vgdev,
+				       struct virtio_gpu_vbuffer *vbuf)
+{
+	struct virtio_gpu_cmd_get_edid *cmd =
+		(struct virtio_gpu_cmd_get_edid *)vbuf->buf;
+	struct virtio_gpu_resp_edid *resp =
+		(struct virtio_gpu_resp_edid *)vbuf->resp_buf;
+	uint32_t scanout = le32_to_cpu(cmd->scanout);
+	struct virtio_gpu_output *output;
+	struct edid *new_edid, *old_edid;
+
+	if (scanout >= vgdev->num_scanouts)
+		return;
+	output = vgdev->outputs + scanout;
+
+	new_edid = drm_do_get_edid(&output->conn, virtio_get_edid_block, resp);
+	drm_connector_update_edid_property(&output->conn, new_edid);
+
+	spin_lock(&vgdev->display_info_lock);
+	old_edid = output->edid;
+	output->edid = new_edid;
+	spin_unlock(&vgdev->display_info_lock);
+
+	kfree(old_edid);
 	wake_up(&vgdev->resp_wq);
 }
 
@@ -650,11 +694,14 @@
 {
 	struct virtio_gpu_get_capset *cmd_p;
 	struct virtio_gpu_vbuffer *vbuf;
-	int max_size = vgdev->capsets[idx].max_size;
+	int max_size;
 	struct virtio_gpu_drv_cap_cache *cache_ent;
+	struct virtio_gpu_drv_cap_cache *search_ent;
 	void *resp_buf;
 
-	if (idx > vgdev->num_capsets)
+	*cache_p = NULL;
+
+	if (idx >= vgdev->num_capsets)
 		return -EINVAL;
 
 	if (version > vgdev->capsets[idx].max_version)
@@ -664,6 +711,7 @@
 	if (!cache_ent)
 		return -ENOMEM;
 
+	max_size = vgdev->capsets[idx].max_size;
 	cache_ent->caps_cache = kmalloc(max_size, GFP_KERNEL);
 	if (!cache_ent->caps_cache) {
 		kfree(cache_ent);
@@ -683,9 +731,26 @@
 	atomic_set(&cache_ent->is_valid, 0);
 	cache_ent->size = max_size;
 	spin_lock(&vgdev->display_info_lock);
-	list_add_tail(&cache_ent->head, &vgdev->cap_cache);
+	/* Search while under lock in case it was added by another task. */
+	list_for_each_entry(search_ent, &vgdev->cap_cache, head) {
+		if (search_ent->id == vgdev->capsets[idx].id &&
+		    search_ent->version == version) {
+			*cache_p = search_ent;
+			break;
+		}
+	}
+	if (!*cache_p)
+		list_add_tail(&cache_ent->head, &vgdev->cap_cache);
 	spin_unlock(&vgdev->display_info_lock);
 
+	if (*cache_p) {
+		/* Entry was found, so free everything that was just created. */
+		kfree(resp_buf);
+		kfree(cache_ent->caps_cache);
+		kfree(cache_ent);
+		return 0;
+	}
+
 	cmd_p = virtio_gpu_alloc_cmd_resp
 		(vgdev, &virtio_gpu_cmd_capset_cb, &vbuf, sizeof(*cmd_p),
 		 sizeof(struct virtio_gpu_resp_capset) + max_size,
@@ -699,6 +764,34 @@
 	return 0;
 }
 
+int virtio_gpu_cmd_get_edids(struct virtio_gpu_device *vgdev)
+{
+	struct virtio_gpu_cmd_get_edid *cmd_p;
+	struct virtio_gpu_vbuffer *vbuf;
+	void *resp_buf;
+	int scanout;
+
+	if (WARN_ON(!vgdev->has_edid))
+		return -EINVAL;
+
+	for (scanout = 0; scanout < vgdev->num_scanouts; scanout++) {
+		resp_buf = kzalloc(sizeof(struct virtio_gpu_resp_edid),
+				   GFP_KERNEL);
+		if (!resp_buf)
+			return -ENOMEM;
+
+		cmd_p = virtio_gpu_alloc_cmd_resp
+			(vgdev, &virtio_gpu_cmd_get_edid_cb, &vbuf,
+			 sizeof(*cmd_p), sizeof(struct virtio_gpu_resp_edid),
+			 resp_buf);
+		cmd_p->hdr.type = cpu_to_le32(VIRTIO_GPU_CMD_GET_EDID);
+		cmd_p->scanout = cpu_to_le32(scanout);
+		virtio_gpu_queue_ctrl_buffer(vgdev, vbuf);
+	}
+
+	return 0;
+}
+
 void virtio_gpu_cmd_context_create(struct virtio_gpu_device *vgdev, uint32_t id,
 				   uint32_t nlen, const char *name)
 {
@@ -765,8 +858,9 @@
 
 void
 virtio_gpu_cmd_resource_create_3d(struct virtio_gpu_device *vgdev,
-				  struct virtio_gpu_resource_create_3d *rc_3d,
-				  struct virtio_gpu_fence **fence)
+				  struct virtio_gpu_object *bo,
+				  struct virtio_gpu_object_params *params,
+				  struct virtio_gpu_fence *fence)
 {
 	struct virtio_gpu_resource_create_3d *cmd_p;
 	struct virtio_gpu_vbuffer *vbuf;
@@ -774,28 +868,46 @@
 	cmd_p = virtio_gpu_alloc_cmd(vgdev, &vbuf, sizeof(*cmd_p));
 	memset(cmd_p, 0, sizeof(*cmd_p));
 
-	*cmd_p = *rc_3d;
 	cmd_p->hdr.type = cpu_to_le32(VIRTIO_GPU_CMD_RESOURCE_CREATE_3D);
-	cmd_p->hdr.flags = 0;
+	cmd_p->resource_id = cpu_to_le32(bo->hw_res_handle);
+	cmd_p->format = cpu_to_le32(params->format);
+	cmd_p->width = cpu_to_le32(params->width);
+	cmd_p->height = cpu_to_le32(params->height);
+
+	cmd_p->target = cpu_to_le32(params->target);
+	cmd_p->bind = cpu_to_le32(params->bind);
+	cmd_p->depth = cpu_to_le32(params->depth);
+	cmd_p->array_size = cpu_to_le32(params->array_size);
+	cmd_p->last_level = cpu_to_le32(params->last_level);
+	cmd_p->nr_samples = cpu_to_le32(params->nr_samples);
+	cmd_p->flags = cpu_to_le32(params->flags);
 
 	virtio_gpu_queue_fenced_ctrl_buffer(vgdev, vbuf, &cmd_p->hdr, fence);
+	bo->created = true;
 }
 
 void virtio_gpu_cmd_transfer_to_host_3d(struct virtio_gpu_device *vgdev,
-					uint32_t resource_id, uint32_t ctx_id,
+					struct virtio_gpu_object *bo,
+					uint32_t ctx_id,
 					uint64_t offset, uint32_t level,
 					struct virtio_gpu_box *box,
-					struct virtio_gpu_fence **fence)
+					struct virtio_gpu_fence *fence)
 {
 	struct virtio_gpu_transfer_host_3d *cmd_p;
 	struct virtio_gpu_vbuffer *vbuf;
+	bool use_dma_api = !virtio_has_iommu_quirk(vgdev->vdev);
+
+	if (use_dma_api)
+		dma_sync_sg_for_device(vgdev->vdev->dev.parent,
+				       bo->pages->sgl, bo->pages->nents,
+				       DMA_TO_DEVICE);
 
 	cmd_p = virtio_gpu_alloc_cmd(vgdev, &vbuf, sizeof(*cmd_p));
 	memset(cmd_p, 0, sizeof(*cmd_p));
 
 	cmd_p->hdr.type = cpu_to_le32(VIRTIO_GPU_CMD_TRANSFER_TO_HOST_3D);
 	cmd_p->hdr.ctx_id = cpu_to_le32(ctx_id);
-	cmd_p->resource_id = cpu_to_le32(resource_id);
+	cmd_p->resource_id = cpu_to_le32(bo->hw_res_handle);
 	cmd_p->box = *box;
 	cmd_p->offset = cpu_to_le64(offset);
 	cmd_p->level = cpu_to_le32(level);
@@ -807,7 +919,7 @@
 					  uint32_t resource_id, uint32_t ctx_id,
 					  uint64_t offset, uint32_t level,
 					  struct virtio_gpu_box *box,
-					  struct virtio_gpu_fence **fence)
+					  struct virtio_gpu_fence *fence)
 {
 	struct virtio_gpu_transfer_host_3d *cmd_p;
 	struct virtio_gpu_vbuffer *vbuf;
@@ -827,7 +939,7 @@
 
 void virtio_gpu_cmd_submit(struct virtio_gpu_device *vgdev,
 			   void *data, uint32_t data_size,
-			   uint32_t ctx_id, struct virtio_gpu_fence **fence)
+			   uint32_t ctx_id, struct virtio_gpu_fence *fence)
 {
 	struct virtio_gpu_cmd_submit *cmd_p;
 	struct virtio_gpu_vbuffer *vbuf;
@@ -847,12 +959,15 @@
 
 int virtio_gpu_object_attach(struct virtio_gpu_device *vgdev,
 			     struct virtio_gpu_object *obj,
-			     uint32_t resource_id,
-			     struct virtio_gpu_fence **fence)
+			     struct virtio_gpu_fence *fence)
 {
+	bool use_dma_api = !virtio_has_iommu_quirk(vgdev->vdev);
 	struct virtio_gpu_mem_entry *ents;
 	struct scatterlist *sg;
-	int si;
+	int si, nents;
+
+	if (WARN_ON_ONCE(!obj->created))
+		return -EINVAL;
 
 	if (!obj->pages) {
 		int ret;
@@ -862,28 +977,59 @@
 			return ret;
 	}
 
+	if (use_dma_api) {
+		obj->mapped = dma_map_sg(vgdev->vdev->dev.parent,
+					 obj->pages->sgl, obj->pages->nents,
+					 DMA_TO_DEVICE);
+		nents = obj->mapped;
+	} else {
+		nents = obj->pages->nents;
+	}
+
 	/* gets freed when the ring has consumed it */
-	ents = kmalloc_array(obj->pages->nents,
-			     sizeof(struct virtio_gpu_mem_entry),
+	ents = kmalloc_array(nents, sizeof(struct virtio_gpu_mem_entry),
 			     GFP_KERNEL);
 	if (!ents) {
 		DRM_ERROR("failed to allocate ent list\n");
 		return -ENOMEM;
 	}
 
-	for_each_sg(obj->pages->sgl, sg, obj->pages->nents, si) {
-		ents[si].addr = cpu_to_le64(sg_phys(sg));
+	for_each_sg(obj->pages->sgl, sg, nents, si) {
+		ents[si].addr = cpu_to_le64(use_dma_api
+					    ? sg_dma_address(sg)
+					    : sg_phys(sg));
 		ents[si].length = cpu_to_le32(sg->length);
 		ents[si].padding = 0;
 	}
 
-	virtio_gpu_cmd_resource_attach_backing(vgdev, resource_id,
-					       ents, obj->pages->nents,
+	virtio_gpu_cmd_resource_attach_backing(vgdev, obj->hw_res_handle,
+					       ents, nents,
 					       fence);
-	obj->hw_res_handle = resource_id;
 	return 0;
 }
 
+void virtio_gpu_object_detach(struct virtio_gpu_device *vgdev,
+			      struct virtio_gpu_object *obj)
+{
+	bool use_dma_api = !virtio_has_iommu_quirk(vgdev->vdev);
+
+	if (use_dma_api && obj->mapped) {
+		struct virtio_gpu_fence *fence = virtio_gpu_fence_alloc(vgdev);
+		/* detach backing and wait for the host process it ... */
+		virtio_gpu_cmd_resource_inval_backing(vgdev, obj->hw_res_handle, fence);
+		dma_fence_wait(&fence->f, true);
+		dma_fence_put(&fence->f);
+
+		/* ... then tear down iommu mappings */
+		dma_unmap_sg(vgdev->vdev->dev.parent,
+			     obj->pages->sgl, obj->mapped,
+			     DMA_TO_DEVICE);
+		obj->mapped = 0;
+	} else {
+		virtio_gpu_cmd_resource_inval_backing(vgdev, obj->hw_res_handle, NULL);
+	}
+}
+
 void virtio_gpu_cursor_ping(struct virtio_gpu_device *vgdev,
 			    struct virtio_gpu_output *output)
 {
diff --git a/drivers/gpu/msm/Kconfig b/drivers/gpu/msm/Kconfig
index b0e45d5..5e983e1 100644
--- a/drivers/gpu/msm/Kconfig
+++ b/drivers/gpu/msm/Kconfig
@@ -26,3 +26,12 @@
 config QCOM_KGSL_IOMMU
 	bool
 	default y if QCOM_KGSL && (MSM_IOMMU || ARM_SMMU)
+
+config QCOM_KGSL_USE_SHMEM
+	bool "Enable using shmem for memory allocations"
+	depends on QCOM_KGSL
+	help
+	  Say 'Y' to enable using shmem for memory allocations. If enabled,
+	  there will be no support for the memory pools and higher order pages.
+	  But using shmem will help in making kgsl pages available for
+	  reclaiming.
diff --git a/drivers/gpu/msm/Makefile b/drivers/gpu/msm/Makefile
index 1e25523..d0fae73 100644
--- a/drivers/gpu/msm/Makefile
+++ b/drivers/gpu/msm/Makefile
@@ -12,7 +12,6 @@
 	kgsl_mmu.o \
 	kgsl_snapshot.o \
 	kgsl_events.o \
-	kgsl_pool.o \
 	kgsl_gmu_core.o \
 	kgsl_gmu.o \
 	kgsl_rgmu.o \
@@ -23,6 +22,10 @@
 msm_kgsl_core-$(CONFIG_SYNC_FILE) += kgsl_sync.o
 msm_kgsl_core-$(CONFIG_COMPAT) += kgsl_compat.o
 
+ifndef CONFIG_QCOM_KGSL_USE_SHMEM
+	msm_kgsl_core-y += kgsl_pool.o
+endif
+
 msm_adreno-y += \
 	adreno_ioctl.o \
 	adreno_ringbuffer.o \
diff --git a/drivers/gpu/msm/a6xx_reg.h b/drivers/gpu/msm/a6xx_reg.h
index ea56fe5..cb67d71 100644
--- a/drivers/gpu/msm/a6xx_reg.h
+++ b/drivers/gpu/msm/a6xx_reg.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0 */
 /*
- * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
  */
 
 #ifndef _A6XX_REG_H
@@ -391,6 +391,38 @@
 #define A6XX_RBBM_PERFCTR_RBBM_SEL_2             0x509
 #define A6XX_RBBM_PERFCTR_RBBM_SEL_3             0x50A
 #define A6XX_RBBM_PERFCTR_GPU_BUSY_MASKED        0x50B
+#define A6XX_RBBM_PERFCTR_MHUB_0_LO              0x512
+#define A6XX_RBBM_PERFCTR_MHUB_0_HI              0x513
+#define A6XX_RBBM_PERFCTR_MHUB_1_LO              0x514
+#define A6XX_RBBM_PERFCTR_MHUB_1_HI              0x515
+#define A6XX_RBBM_PERFCTR_MHUB_2_LO              0x516
+#define A6XX_RBBM_PERFCTR_MHUB_2_HI              0x517
+#define A6XX_RBBM_PERFCTR_MHUB_3_LO              0x518
+#define A6XX_RBBM_PERFCTR_MHUB_3_HI              0x519
+#define A6XX_RBBM_PERFCTR_FCHE_0_LO              0x51A
+#define A6XX_RBBM_PERFCTR_FCHE_0_HI              0x51B
+#define A6XX_RBBM_PERFCTR_FCHE_1_LO              0x51C
+#define A6XX_RBBM_PERFCTR_FCHE_1_HI              0x51D
+#define A6XX_RBBM_PERFCTR_FCHE_2_LO              0x51E
+#define A6XX_RBBM_PERFCTR_FCHE_2_HI              0x51F
+#define A6XX_RBBM_PERFCTR_FCHE_3_LO              0x520
+#define A6XX_RBBM_PERFCTR_FCHE_3_HI              0x521
+#define A6XX_RBBM_PERFCTR_GLC_0_LO               0x522
+#define A6XX_RBBM_PERFCTR_GLC_0_HI               0x523
+#define A6XX_RBBM_PERFCTR_GLC_1_LO               0x524
+#define A6XX_RBBM_PERFCTR_GLC_1_HI               0x525
+#define A6XX_RBBM_PERFCTR_GLC_2_LO               0x526
+#define A6XX_RBBM_PERFCTR_GLC_2_HI               0x527
+#define A6XX_RBBM_PERFCTR_GLC_3_LO               0x528
+#define A6XX_RBBM_PERFCTR_GLC_3_HI               0x529
+#define A6XX_RBBM_PERFCTR_GLC_4_LO               0x52A
+#define A6XX_RBBM_PERFCTR_GLC_4_HI               0x52B
+#define A6XX_RBBM_PERFCTR_GLC_5_LO               0x52C
+#define A6XX_RBBM_PERFCTR_GLC_5_HI               0x52D
+#define A6XX_RBBM_PERFCTR_GLC_6_LO               0x52E
+#define A6XX_RBBM_PERFCTR_GLC_6_HI               0x52F
+#define A6XX_RBBM_PERFCTR_GLC_7_LO               0x530
+#define A6XX_RBBM_PERFCTR_GLC_7_HI               0x531
 
 #define A6XX_RBBM_ISDB_CNT                       0x533
 #define A6XX_RBBM_NC_MODE_CNTL                   0X534
@@ -527,6 +559,15 @@
 #define A6XX_RBBM_CLOCK_MODE_HLSQ	 0x0011b
 #define A6XX_RBBM_CLOCK_DELAY_HLSQ       0x0011c
 #define A6XX_RBBM_CLOCK_HYST_HLSQ        0x0011d
+#define A6XX_RBBM_CLOCK_CNTL_FCHE        0x00123
+#define A6XX_RBBM_CLOCK_DELAY_FCHE       0x00124
+#define A6XX_RBBM_CLOCK_HYST_FCHE        0x00125
+#define A6XX_RBBM_CLOCK_CNTL_GLC         0x0012B
+#define A6XX_RBBM_CLOCK_DELAY_GLC        0x00129
+#define A6XX_RBBM_CLOCK_HYST_GLC         0x0012A
+#define A6XX_RBBM_CLOCK_CNTL_MHUB        0x00126
+#define A6XX_RBBM_CLOCK_DELAY_MHUB       0x00127
+#define A6XX_RBBM_CLOCK_HYST_MHUB        0x00128
 
 /* DBGC_CFG registers */
 #define A6XX_DBGC_CFG_DBGBUS_SEL_A                  0x600
@@ -646,6 +687,22 @@
 #define A6XX_RB_RB_SUB_BLOCK_SEL_CNTL_HOST  0x8E3B
 #define A6XX_RB_RB_SUB_BLOCK_SEL_CNTL_CD    0x8E3D
 #define A6XX_RB_CONTEXT_SWITCH_GMEM_SAVE_RESTORE 0x8E50
+#define A6XX_RB_PERFCTR_GLC_SEL_0            0x8E90
+#define A6XX_RB_PERFCTR_GLC_SEL_1            0x8E91
+#define A6XX_RB_PERFCTR_GLC_SEL_2            0x8E92
+#define A6XX_RB_PERFCTR_GLC_SEL_3            0x8E93
+#define A6XX_RB_PERFCTR_GLC_SEL_4            0x8E94
+#define A6XX_RB_PERFCTR_GLC_SEL_5            0x8E95
+#define A6XX_RB_PERFCTR_GLC_SEL_6            0x8E96
+#define A6XX_RB_PERFCTR_GLC_SEL_7            0x8E97
+#define A6XX_RB_PERFCTR_MHUB_SEL_0           0x8EA0
+#define A6XX_RB_PERFCTR_MHUB_SEL_1           0x8EA1
+#define A6XX_RB_PERFCTR_MHUB_SEL_2           0x8EA2
+#define A6XX_RB_PERFCTR_MHUB_SEL_3           0x8EA3
+#define A6XX_RB_PERFCTR_FCHE_SEL_0           0x8EB0
+#define A6XX_RB_PERFCTR_FCHE_SEL_1           0x8EB1
+#define A6XX_RB_PERFCTR_FCHE_SEL_2           0x8EB2
+#define A6XX_RB_PERFCTR_FCHE_SEL_3           0x8EB3
 
 /* PC registers */
 #define A6XX_PC_DBG_ECO_CNTL                0x9E00
diff --git a/drivers/gpu/msm/adreno-gpulist.h b/drivers/gpu/msm/adreno-gpulist.h
index 30a730c..af16e73 100644
--- a/drivers/gpu/msm/adreno-gpulist.h
+++ b/drivers/gpu/msm/adreno-gpulist.h
@@ -771,7 +771,6 @@
 		.bus_width = 32,
 	},
 	.prim_fifo_threshold = 0x0018000,
-	.pdc_address_offset = 0x00030080,
 	.gmu_major = 1,
 	.gmu_minor = 3,
 	.sqefw_name = "a630_sqe.fw",
@@ -869,7 +868,6 @@
 		.bus_width = 32,
 	},
 	.prim_fifo_threshold = 0x0018000,
-	.pdc_address_offset = 0x00030080,
 	.gmu_major = 1,
 	.gmu_minor = 3,
 	.sqefw_name = "a630_sqe.fw",
@@ -895,7 +893,6 @@
 		.bus_width = 32,
 	},
 	.prim_fifo_threshold = 0x0018000,
-	.pdc_address_offset = 0x00030090,
 	.gmu_major = 1,
 	.gmu_minor = 7,
 	.sqefw_name = "a630_sqe.fw",
@@ -921,7 +918,6 @@
 		.bus_width = 32,
 	},
 	.prim_fifo_threshold = 0x0018000,
-	.pdc_address_offset = 0x00030090,
 	.gmu_major = 1,
 	.gmu_minor = 9,
 	.sqefw_name = "a630_sqe.fw",
@@ -1049,7 +1045,6 @@
 		.bus_width = 32,
 	},
 	.prim_fifo_threshold = 0x0010000,
-	.pdc_address_offset = 0x000300a0,
 	.gmu_major = 2,
 	.gmu_minor = 0,
 	.sqefw_name = "a650_sqe.fw",
@@ -1117,7 +1112,7 @@
 	{A6XX_RBBM_CLOCK_HYST_GMU_GX, 0x00000555},
 };
 
-/* These apply to a640, a680, a612 and a610 */
+/* These apply to a640, a680, a612, a610 and a702 */
 static const struct adreno_reglist a640_vbif_regs[] = {
 	{A6XX_GBIF_QSB_SIDE0, 0x00071620},
 	{A6XX_GBIF_QSB_SIDE1, 0x00071620},
@@ -1138,7 +1133,6 @@
 		.bus_width = 32,
 	},
 	.prim_fifo_threshold = 0x00200000,
-	.pdc_address_offset = 0x00030090,
 	.gmu_major = 2,
 	.gmu_minor = 0,
 	.sqefw_name = "a630_sqe.fw",
@@ -1217,7 +1211,6 @@
 		.bus_width = 32,
 	},
 	.prim_fifo_threshold = 0x00300000,
-	.pdc_address_offset = 0x000300A0,
 	.gmu_major = 2,
 	.gmu_minor = 0,
 	.sqefw_name = "a650_sqe.fw",
@@ -1247,7 +1240,6 @@
 		.bus_width = 32,
 	},
 	.prim_fifo_threshold = 0x00300000,
-	.pdc_address_offset = 0x000300A0,
 	.gmu_major = 2,
 	.gmu_minor = 0,
 	.sqefw_name = "a650_sqe.fw",
@@ -1274,7 +1266,6 @@
 		.bus_width = 32,
 	},
 	.prim_fifo_threshold = 0x00400000,
-	.pdc_address_offset = 0x00030090,
 	.gmu_major = 2,
 	.gmu_minor = 0,
 	.sqefw_name = "a630_sqe.fw",
@@ -1350,7 +1341,6 @@
 		.bus_width = 32,
 	},
 	.prim_fifo_threshold = 0x00080000,
-	.pdc_address_offset = 0x00030080,
 	.sqefw_name = "a630_sqe.fw",
 	.gmufw_name = "a612_rgmu.bin",
 	.zap_name = "a612_zap",
@@ -1374,7 +1364,6 @@
 		.bus_width = 32,
 	},
 	.prim_fifo_threshold = 0x0018000,
-	.pdc_address_offset = 0x00030080,
 	.gmu_major = 1,
 	.gmu_minor = 3,
 	.sqefw_name = "a630_sqe.fw",
@@ -1409,6 +1398,85 @@
 	.protected_regs = a630_protected_regs,
 };
 
+static const struct adreno_reglist a702_hwcg_regs[] = {
+	{A6XX_RBBM_CLOCK_CNTL_SP0, 0x22222222},
+	{A6XX_RBBM_CLOCK_CNTL2_SP0, 0x02222220},
+	{A6XX_RBBM_CLOCK_DELAY_SP0, 0x00000081},
+	{A6XX_RBBM_CLOCK_HYST_SP0, 0x0000F3CF},
+	{A6XX_RBBM_CLOCK_CNTL_TP0, 0x22222222},
+	{A6XX_RBBM_CLOCK_CNTL2_TP0, 0x22222222},
+	{A6XX_RBBM_CLOCK_CNTL3_TP0, 0x22222222},
+	{A6XX_RBBM_CLOCK_CNTL4_TP0, 0x00022222},
+	{A6XX_RBBM_CLOCK_DELAY_TP0, 0x11111111},
+	{A6XX_RBBM_CLOCK_DELAY2_TP0, 0x11111111},
+	{A6XX_RBBM_CLOCK_DELAY3_TP0, 0x11111111},
+	{A6XX_RBBM_CLOCK_DELAY4_TP0, 0x00011111},
+	{A6XX_RBBM_CLOCK_HYST_TP0, 0x77777777},
+	{A6XX_RBBM_CLOCK_HYST2_TP0, 0x77777777},
+	{A6XX_RBBM_CLOCK_HYST3_TP0, 0x77777777},
+	{A6XX_RBBM_CLOCK_HYST4_TP0, 0x00077777},
+	{A6XX_RBBM_CLOCK_CNTL_RB0, 0x22222222},
+	{A6XX_RBBM_CLOCK_CNTL2_RB0, 0x01202222},
+	{A6XX_RBBM_CLOCK_CNTL_CCU0, 0x00002220},
+	{A6XX_RBBM_CLOCK_HYST_RB_CCU0, 0x00040F00},
+	{A6XX_RBBM_CLOCK_CNTL_RAC, 0x05522022},
+	{A6XX_RBBM_CLOCK_CNTL2_RAC, 0x00005555},
+	{A6XX_RBBM_CLOCK_DELAY_RAC, 0x00000011},
+	{A6XX_RBBM_CLOCK_HYST_RAC, 0x00445044},
+	{A6XX_RBBM_CLOCK_CNTL_TSE_RAS_RBBM, 0x04222222},
+	{A6XX_RBBM_CLOCK_MODE_VFD, 0x00002222},
+	{A6XX_RBBM_CLOCK_MODE_GPC, 0x02222222},
+	{A6XX_RBBM_CLOCK_DELAY_HLSQ_2, 0x00000002},
+	{A6XX_RBBM_CLOCK_MODE_HLSQ, 0x00002222},
+	{A6XX_RBBM_CLOCK_DELAY_TSE_RAS_RBBM, 0x00004000},
+	{A6XX_RBBM_CLOCK_DELAY_VFD, 0x00002222},
+	{A6XX_RBBM_CLOCK_DELAY_GPC, 0x00000200},
+	{A6XX_RBBM_CLOCK_DELAY_HLSQ, 0x00000000},
+	{A6XX_RBBM_CLOCK_HYST_TSE_RAS_RBBM, 0x00000000},
+	{A6XX_RBBM_CLOCK_HYST_VFD, 0x00000000},
+	{A6XX_RBBM_CLOCK_HYST_GPC, 0x04104004},
+	{A6XX_RBBM_CLOCK_HYST_HLSQ, 0x00000000},
+	{A6XX_RBBM_CLOCK_CNTL_UCHE, 0x22222222},
+	{A6XX_RBBM_CLOCK_HYST_UCHE, 0x00000004},
+	{A6XX_RBBM_CLOCK_DELAY_UCHE, 0x00000002},
+	{A6XX_RBBM_ISDB_CNT, 0x00000182},
+	{A6XX_RBBM_RAC_THRESHOLD_CNT, 0x00000000},
+	{A6XX_RBBM_SP_HYST_CNT, 0x00000000},
+	{A6XX_RBBM_CLOCK_CNTL_GMU_GX, 0x00000222},
+	{A6XX_RBBM_CLOCK_DELAY_GMU_GX, 0x00000111},
+	{A6XX_RBBM_CLOCK_HYST_GMU_GX, 0x00000555},
+	{A6XX_RBBM_CLOCK_CNTL_FCHE, 0x00000222},
+	{A6XX_RBBM_CLOCK_DELAY_FCHE, 0x00000000},
+	{A6XX_RBBM_CLOCK_HYST_FCHE, 0x00000000},
+	{A6XX_RBBM_CLOCK_CNTL_GLC, 0x00222222},
+	{A6XX_RBBM_CLOCK_DELAY_GLC, 0x00000000},
+	{A6XX_RBBM_CLOCK_HYST_GLC, 0x00000000},
+	{A6XX_RBBM_CLOCK_CNTL_MHUB, 0x00000002},
+	{A6XX_RBBM_CLOCK_DELAY_MHUB, 0x00000000},
+	{A6XX_RBBM_CLOCK_HYST_MHUB, 0x00000000},
+};
+
+static const struct adreno_a6xx_core adreno_gpu_core_a702 = {
+	.base = {
+		DEFINE_ADRENO_REV(ADRENO_REV_A702, 7, 0, 2, ANY_ID),
+		.features = ADRENO_64BIT | ADRENO_CONTENT_PROTECTION |
+			ADRENO_APRIV,
+		.gpudev = &adreno_a6xx_gpudev,
+		.gmem_size = SZ_128K,
+		.busy_mask = 0xfffffffe,
+		.bus_width = 32,
+	},
+	.prim_fifo_threshold = 0x0000c000,
+	.sqefw_name = "a702_sqe.fw",
+	.zap_name = "a702_zap",
+	.hwcg = a702_hwcg_regs,
+	.hwcg_count = ARRAY_SIZE(a702_hwcg_regs),
+	.vbif = a640_vbif_regs,
+	.vbif_count = ARRAY_SIZE(a640_vbif_regs),
+	.hang_detect_cycles = 0x3ffff,
+	.protected_regs = a620_protected_regs,
+};
+
 static const struct adreno_gpu_core *adreno_gpulist[] = {
 	&adreno_gpu_core_a306.base,
 	&adreno_gpu_core_a306a.base,
@@ -1440,4 +1508,5 @@
 	&adreno_gpu_core_a612.base,
 	&adreno_gpu_core_a616.base,
 	&adreno_gpu_core_a610.base,
+	&adreno_gpu_core_a702.base,
 };
diff --git a/drivers/gpu/msm/adreno.c b/drivers/gpu/msm/adreno.c
index b545b4d..e849e2f 100644
--- a/drivers/gpu/msm/adreno.c
+++ b/drivers/gpu/msm/adreno.c
@@ -59,8 +59,7 @@
 	.long_ib_detect = 1,
 	.input_work = __WORK_INITIALIZER(device_3d0.input_work,
 		adreno_input_work),
-	.pwrctrl_flag = BIT(ADRENO_SPTP_PC_CTRL) |
-		BIT(ADRENO_THROTTLING_CTRL) | BIT(ADRENO_HWCG_CTRL),
+	.pwrctrl_flag = BIT(ADRENO_THROTTLING_CTRL) | BIT(ADRENO_HWCG_CTRL),
 	.profile.enabled = false,
 	.active_list = LIST_HEAD_INIT(device_3d0.active_list),
 	.active_list_lock = __SPIN_LOCK_UNLOCKED(device_3d0.active_list_lock),
@@ -1440,6 +1439,9 @@
 	if (adreno_support_64bit(adreno_dev))
 		device->mmu.features |= KGSL_MMU_64BIT;
 
+	if (adreno_is_a6xx(adreno_dev))
+		device->mmu.features |= KGSL_MMU_SMMU_APERTURE;
+
 	device->pwrctrl.bus_width = adreno_dev->gpucore->bus_width;
 
 	status = kgsl_device_platform_probe(device);
diff --git a/drivers/gpu/msm/adreno.h b/drivers/gpu/msm/adreno.h
index 3edab23..ab2f94b 100644
--- a/drivers/gpu/msm/adreno.h
+++ b/drivers/gpu/msm/adreno.h
@@ -206,6 +206,7 @@
 	ADRENO_REV_A640 = 640,
 	ADRENO_REV_A650 = 650,
 	ADRENO_REV_A680 = 680,
+	ADRENO_REV_A702 = 702,
 };
 
 #define ADRENO_SOFT_FAULT BIT(0)
@@ -1161,8 +1162,9 @@
 
 static inline int adreno_is_a6xx(struct adreno_device *adreno_dev)
 {
-	return ADRENO_GPUREV(adreno_dev) >= 600 &&
-			ADRENO_GPUREV(adreno_dev) < 700;
+	int rev = ADRENO_GPUREV(adreno_dev);
+
+	return (rev >= 600 && rev < 700) || (rev == 702);
 }
 
 ADRENO_TARGET(a610, ADRENO_REV_A610)
@@ -1174,6 +1176,7 @@
 ADRENO_TARGET(a640, ADRENO_REV_A640)
 ADRENO_TARGET(a650, ADRENO_REV_A650)
 ADRENO_TARGET(a680, ADRENO_REV_A680)
+ADRENO_TARGET(a702, ADRENO_REV_A702)
 
 /*
  * All the derived chipsets from A615 needs to be added to this
diff --git a/drivers/gpu/msm/adreno_a5xx.c b/drivers/gpu/msm/adreno_a5xx.c
index b13bc05..00faed6 100644
--- a/drivers/gpu/msm/adreno_a5xx.c
+++ b/drivers/gpu/msm/adreno_a5xx.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2014-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2014-2020, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/clk/qcom.h>
@@ -149,6 +149,9 @@
 	/* Set the GPU busy counter to use for frequency scaling */
 	adreno_dev->perfctr_pwr_lo = A5XX_RBBM_PERFCTR_RBBM_0_LO;
 
+	if (ADRENO_FEATURE(adreno_dev, ADRENO_SPTP_PC))
+		set_bit(ADRENO_SPTP_PC_CTRL, &adreno_dev->pwrctrl_flag);
+
 	/* Check efuse bits for various capabilties */
 	a5xx_check_features(adreno_dev);
 }
diff --git a/drivers/gpu/msm/adreno_a6xx.c b/drivers/gpu/msm/adreno_a6xx.c
index d97a03f..24857c9 100644
--- a/drivers/gpu/msm/adreno_a6xx.c
+++ b/drivers/gpu/msm/adreno_a6xx.c
@@ -228,6 +228,8 @@
 		return 0x8AA8AA02;
 	else if (adreno_is_a612(adreno_dev) || adreno_is_a610(adreno_dev))
 		return 0xAAA8AA82;
+	else if (adreno_is_a702(adreno_dev))
+		return 0xAAAAAA82;
 	else
 		return 0x8AA8AA82;
 }
@@ -310,7 +312,7 @@
 	 */
 
 	if (gmu_core_isenabled(device) && !adreno_is_a612(adreno_dev) &&
-		!adreno_is_a610(adreno_dev))
+		!adreno_is_a610(adreno_dev) && !(adreno_is_a702(adreno_dev)))
 		gmu_core_regrmw(device,
 			A6XX_GPU_GMU_GX_SPTPRAC_CLOCK_CONTROL, 1, 0);
 
@@ -324,7 +326,7 @@
 	 * Hence skip GMU_GX registers for A612.
 	 */
 	if (gmu_core_isenabled(device) && !adreno_is_a612(adreno_dev) &&
-		!adreno_is_a610(adreno_dev))
+		!adreno_is_a610(adreno_dev) && !adreno_is_a702(adreno_dev))
 		gmu_core_regrmw(device,
 			A6XX_GPU_GMU_GX_SPTPRAC_CLOCK_CONTROL, 0, 1);
 
@@ -458,11 +460,12 @@
 	kgsl_regwrite(device, A6XX_UCHE_FILTER_CNTL, 0x804);
 	kgsl_regwrite(device, A6XX_UCHE_CACHE_WAYS, 0x4);
 
-	/* ROQ sizes are twice as big on a640/a680 than on a630 */
-	if (ADRENO_GPUREV(adreno_dev) >= ADRENO_REV_A640) {
+	if (adreno_is_a640_family(adreno_dev) ||
+		adreno_is_a650_family(adreno_dev)) {
 		kgsl_regwrite(device, A6XX_CP_ROQ_THRESHOLDS_2, 0x02000140);
 		kgsl_regwrite(device, A6XX_CP_ROQ_THRESHOLDS_1, 0x8040362C);
-	} else if (adreno_is_a612(adreno_dev) || adreno_is_a610(adreno_dev)) {
+	} else if (adreno_is_a612(adreno_dev) || adreno_is_a610(adreno_dev) ||
+			adreno_is_a702(adreno_dev)) {
 		kgsl_regwrite(device, A6XX_CP_ROQ_THRESHOLDS_2, 0x00800060);
 		kgsl_regwrite(device, A6XX_CP_ROQ_THRESHOLDS_1, 0x40201b16);
 	} else {
@@ -474,6 +477,9 @@
 		/* For A612 and A610 Mem pool size is reduced to 48 */
 		kgsl_regwrite(device, A6XX_CP_MEM_POOL_SIZE, 48);
 		kgsl_regwrite(device, A6XX_CP_MEM_POOL_DBG_ADDR, 47);
+	} else if (adreno_is_a702(adreno_dev)) {
+		kgsl_regwrite(device, A6XX_CP_MEM_POOL_SIZE, 64);
+		kgsl_regwrite(device, A6XX_CP_MEM_POOL_DBG_ADDR, 63);
 	} else {
 		kgsl_regwrite(device, A6XX_CP_MEM_POOL_SIZE, 128);
 	}
@@ -576,6 +582,13 @@
 	if (a6xx_core->disable_tseskip)
 		kgsl_regrmw(device, A6XX_PC_DBG_ECO_CNTL, 0, (1 << 9));
 
+	/*
+	 * Set the bit HLSQCluster3ContextDis for A702 as HLSQ doesn't
+	 * have context buffer for third context
+	 */
+	if (adreno_is_a702(adreno_dev))
+		kgsl_regwrite(device, A6XX_CP_CHICKEN_DBG, (1 << 24));
+
 	/* Enable the GMEM save/restore feature for preemption */
 	if (adreno_is_preemption_enabled(adreno_dev))
 		kgsl_regwrite(device, A6XX_RB_CONTEXT_SWITCH_GMEM_SAVE_RESTORE,
@@ -1892,7 +1905,7 @@
 
 static struct adreno_perfcount_register a6xx_perfcounters_rbbm[] = {
 	{ KGSL_PERFCOUNTER_NOT_USED, 0, 0, A6XX_RBBM_PERFCTR_RBBM_0_LO,
-		A6XX_RBBM_PERFCTR_RBBM_0_HI, 15, A6XX_RBBM_PERFCTR_RBBM_SEL_0 },
+		A6XX_RBBM_PERFCTR_RBBM_0_HI, 14, A6XX_RBBM_PERFCTR_RBBM_SEL_0 },
 	{ KGSL_PERFCOUNTER_NOT_USED, 0, 0, A6XX_RBBM_PERFCTR_RBBM_1_LO,
 		A6XX_RBBM_PERFCTR_RBBM_1_HI, 15, A6XX_RBBM_PERFCTR_RBBM_SEL_1 },
 	{ KGSL_PERFCOUNTER_NOT_USED, 0, 0, A6XX_RBBM_PERFCTR_RBBM_2_LO,
@@ -2205,6 +2218,47 @@
 		A6XX_CP_ALWAYS_ON_COUNTER_HI, -1 },
 };
 
+static struct adreno_perfcount_register a6xx_perfcounters_glc[] = {
+	{ KGSL_PERFCOUNTER_NOT_USED, 0, 0, A6XX_RBBM_PERFCTR_GLC_0_LO,
+		A6XX_RBBM_PERFCTR_GLC_0_HI, -1, A6XX_RB_PERFCTR_GLC_SEL_0 },
+	{ KGSL_PERFCOUNTER_NOT_USED, 0, 0, A6XX_RBBM_PERFCTR_GLC_1_LO,
+		A6XX_RBBM_PERFCTR_GLC_1_HI, -1, A6XX_RB_PERFCTR_GLC_SEL_1 },
+	{ KGSL_PERFCOUNTER_NOT_USED, 0, 0, A6XX_RBBM_PERFCTR_GLC_2_LO,
+		A6XX_RBBM_PERFCTR_GLC_2_HI, -1, A6XX_RB_PERFCTR_GLC_SEL_2 },
+	{ KGSL_PERFCOUNTER_NOT_USED, 0, 0, A6XX_RBBM_PERFCTR_GLC_3_LO,
+		A6XX_RBBM_PERFCTR_GLC_3_HI, -1, A6XX_RB_PERFCTR_GLC_SEL_3 },
+	{ KGSL_PERFCOUNTER_NOT_USED, 0, 0, A6XX_RBBM_PERFCTR_GLC_4_LO,
+		A6XX_RBBM_PERFCTR_GLC_4_HI, -1, A6XX_RB_PERFCTR_GLC_SEL_4 },
+	{ KGSL_PERFCOUNTER_NOT_USED, 0, 0, A6XX_RBBM_PERFCTR_GLC_5_LO,
+		A6XX_RBBM_PERFCTR_GLC_5_HI, -1, A6XX_RB_PERFCTR_GLC_SEL_5 },
+	{ KGSL_PERFCOUNTER_NOT_USED, 0, 0, A6XX_RBBM_PERFCTR_GLC_6_LO,
+		A6XX_RBBM_PERFCTR_GLC_6_HI, -1, A6XX_RB_PERFCTR_GLC_SEL_6 },
+	{ KGSL_PERFCOUNTER_NOT_USED, 0, 0, A6XX_RBBM_PERFCTR_GLC_7_LO,
+		A6XX_RBBM_PERFCTR_GLC_7_HI, -1, A6XX_RB_PERFCTR_GLC_SEL_7 },
+};
+
+static struct adreno_perfcount_register a6xx_perfcounters_fche[] = {
+	{ KGSL_PERFCOUNTER_NOT_USED, 0, 0, A6XX_RBBM_PERFCTR_FCHE_0_LO,
+		A6XX_RBBM_PERFCTR_FCHE_0_HI, -1, A6XX_RB_PERFCTR_FCHE_SEL_0 },
+	{ KGSL_PERFCOUNTER_NOT_USED, 0, 0, A6XX_RBBM_PERFCTR_FCHE_1_LO,
+		A6XX_RBBM_PERFCTR_FCHE_1_HI, -1, A6XX_RB_PERFCTR_FCHE_SEL_1 },
+	{ KGSL_PERFCOUNTER_NOT_USED, 0, 0, A6XX_RBBM_PERFCTR_FCHE_2_LO,
+		A6XX_RBBM_PERFCTR_FCHE_2_HI, -1, A6XX_RB_PERFCTR_FCHE_SEL_2 },
+	{ KGSL_PERFCOUNTER_NOT_USED, 0, 0, A6XX_RBBM_PERFCTR_FCHE_3_LO,
+		A6XX_RBBM_PERFCTR_FCHE_3_HI, -1, A6XX_RB_PERFCTR_FCHE_SEL_3 },
+};
+
+static struct adreno_perfcount_register a6xx_perfcounters_mhub[] = {
+	{ KGSL_PERFCOUNTER_NOT_USED, 0, 0, A6XX_RBBM_PERFCTR_MHUB_0_LO,
+		A6XX_RBBM_PERFCTR_MHUB_0_HI, -1, A6XX_RB_PERFCTR_MHUB_SEL_0 },
+	{ KGSL_PERFCOUNTER_NOT_USED, 0, 0, A6XX_RBBM_PERFCTR_MHUB_1_LO,
+		A6XX_RBBM_PERFCTR_MHUB_1_HI, -1, A6XX_RB_PERFCTR_MHUB_SEL_1 },
+	{ KGSL_PERFCOUNTER_NOT_USED, 0, 0, A6XX_RBBM_PERFCTR_MHUB_2_LO,
+		A6XX_RBBM_PERFCTR_MHUB_2_HI, -1, A6XX_RB_PERFCTR_MHUB_SEL_2 },
+	{ KGSL_PERFCOUNTER_NOT_USED, 0, 0, A6XX_RBBM_PERFCTR_MHUB_3_LO,
+		A6XX_RBBM_PERFCTR_MHUB_3_HI, -1, A6XX_RB_PERFCTR_MHUB_SEL_3 },
+};
+
 /*
  * ADRENO_PERFCOUNTER_GROUP_RESTORE flag is enabled by default
  * because most of the perfcounter groups need to be restored
@@ -2311,6 +2365,23 @@
 		gpudev->vbif_xin_halt_ctrl0_mask =
 				A6XX_VBIF_XIN_HALT_CTRL0_MASK;
 
+	if (adreno_is_a702(adreno_dev)) {
+		a6xx_perfcounter_groups[KGSL_PERFCOUNTER_GROUP_GLC].regs =
+				a6xx_perfcounters_glc;
+		a6xx_perfcounter_groups[KGSL_PERFCOUNTER_GROUP_GLC].reg_count
+				= ARRAY_SIZE(a6xx_perfcounters_glc);
+
+		a6xx_perfcounter_groups[KGSL_PERFCOUNTER_GROUP_FCHE].regs =
+				a6xx_perfcounters_fche;
+		a6xx_perfcounter_groups[KGSL_PERFCOUNTER_GROUP_FCHE].reg_count
+				= ARRAY_SIZE(a6xx_perfcounters_fche);
+
+		a6xx_perfcounter_groups[KGSL_PERFCOUNTER_GROUP_MHUB].regs =
+				a6xx_perfcounters_mhub;
+		a6xx_perfcounter_groups[KGSL_PERFCOUNTER_GROUP_MHUB].reg_count
+				= ARRAY_SIZE(a6xx_perfcounters_mhub);
+	}
+
 	/* Set the GPU busy counter for frequency scaling */
 	adreno_dev->perfctr_pwr_lo = A6XX_GMU_CX_GMU_POWER_COUNTER_XOCLK_0_L;
 
@@ -2319,6 +2390,9 @@
 		adreno_dev->perfctr_ifpc_lo =
 			A6XX_GMU_CX_GMU_POWER_COUNTER_XOCLK_4_L;
 
+	if (ADRENO_FEATURE(adreno_dev, ADRENO_SPTP_PC))
+		set_bit(ADRENO_SPTP_PC_CTRL, &adreno_dev->pwrctrl_flag);
+
 	/* Check efuse bits for various capabilties */
 	a6xx_check_features(adreno_dev);
 }
diff --git a/drivers/gpu/msm/adreno_a6xx.h b/drivers/gpu/msm/adreno_a6xx.h
index d9b104e..78cba49 100644
--- a/drivers/gpu/msm/adreno_a6xx.h
+++ b/drivers/gpu/msm/adreno_a6xx.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
 /*
- * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
  */
 
 #ifndef _ADRENO_A6XX_H_
@@ -42,8 +42,6 @@
 	u32 gmu_minor;
 	/** @prim_fifo_threshold: target specific value for PC_DBG_ECO_CNTL */
 	unsigned int prim_fifo_threshold;
-	/** @pdc_address_offset: Offset for the PDC region for the target */
-	unsigned int pdc_address_offset;
 	/** @sqefw_name: Name of the SQE microcode file */
 	const char *sqefw_name;
 	/** @gmufw_name: Name of the GMU firmware file */
diff --git a/drivers/gpu/msm/adreno_a6xx_gmu.c b/drivers/gpu/msm/adreno_a6xx_gmu.c
index b6a1b13..a5f9628 100644
--- a/drivers/gpu/msm/adreno_a6xx_gmu.c
+++ b/drivers/gpu/msm/adreno_a6xx_gmu.c
@@ -120,7 +120,27 @@
 	void __iomem *cfg = NULL, *seq = NULL;
 	const struct adreno_a6xx_core *a6xx_core = to_a6xx_core(adreno_dev);
 	u32 vrm_resource_addr = cmd_db_read_addr("vrm.soc");
+	u32 xo_resource_addr = cmd_db_read_addr("xo.lvl");
+	u32 cx_res_addr = cmd_db_read_addr("cx.lvl");
+	u32 mx_res_addr = cmd_db_read_addr("mx.lvl");
 
+	if (!xo_resource_addr) {
+		dev_err(&gmu->pdev->dev,
+				"Failed to get 'xo.lvl' addr from cmd_db\n");
+		return -ENOENT;
+	}
+
+	if (!cx_res_addr) {
+		dev_err(&gmu->pdev->dev,
+				"Failed to get 'cx.lvl' addr from cmd_db\n");
+		return -ENOENT;
+	}
+
+	if (!mx_res_addr) {
+		dev_err(&gmu->pdev->dev,
+				"Failed to get 'mx.lvl' addr from cmd_db\n");
+		return -ENOENT;
+	}
 	/*
 	 * Older A6x platforms specified PDC registers in the DT using a
 	 * single base pointer that encompassed the entire PDC range. Current
@@ -198,15 +218,15 @@
 	_regwrite(cfg, PDC_GPU_TCS1_CMD_WAIT_FOR_CMPL_BANK, 0);
 	_regwrite(cfg, PDC_GPU_TCS1_CONTROL, 0);
 	_regwrite(cfg, PDC_GPU_TCS1_CMD0_MSGID, 0x10108);
-	_regwrite(cfg, PDC_GPU_TCS1_CMD0_ADDR, 0x30010);
+	_regwrite(cfg, PDC_GPU_TCS1_CMD0_ADDR, mx_res_addr);
 	_regwrite(cfg, PDC_GPU_TCS1_CMD0_DATA, 1);
 	_regwrite(cfg, PDC_GPU_TCS1_CMD0_MSGID + PDC_CMD_OFFSET, 0x10108);
-	_regwrite(cfg, PDC_GPU_TCS1_CMD0_ADDR + PDC_CMD_OFFSET, 0x30000);
+	_regwrite(cfg, PDC_GPU_TCS1_CMD0_ADDR + PDC_CMD_OFFSET, cx_res_addr);
 	_regwrite(cfg, PDC_GPU_TCS1_CMD0_DATA + PDC_CMD_OFFSET, 0x0);
 	_regwrite(cfg, PDC_GPU_TCS1_CMD0_MSGID + PDC_CMD_OFFSET * 2, 0x10108);
 
 	_regwrite(cfg, PDC_GPU_TCS1_CMD0_ADDR + PDC_CMD_OFFSET * 2,
-			a6xx_core->pdc_address_offset);
+			xo_resource_addr);
 
 	_regwrite(cfg, PDC_GPU_TCS1_CMD0_DATA + PDC_CMD_OFFSET * 2, 0x0);
 
@@ -223,10 +243,10 @@
 	_regwrite(cfg, PDC_GPU_TCS3_CMD_WAIT_FOR_CMPL_BANK, 0);
 	_regwrite(cfg, PDC_GPU_TCS3_CONTROL, 0);
 	_regwrite(cfg, PDC_GPU_TCS3_CMD0_MSGID, 0x10108);
-	_regwrite(cfg, PDC_GPU_TCS3_CMD0_ADDR, 0x30010);
+	_regwrite(cfg, PDC_GPU_TCS3_CMD0_ADDR, mx_res_addr);
 	_regwrite(cfg, PDC_GPU_TCS3_CMD0_DATA, 2);
 	_regwrite(cfg, PDC_GPU_TCS3_CMD0_MSGID + PDC_CMD_OFFSET, 0x10108);
-	_regwrite(cfg, PDC_GPU_TCS3_CMD0_ADDR + PDC_CMD_OFFSET, 0x30000);
+	_regwrite(cfg, PDC_GPU_TCS3_CMD0_ADDR + PDC_CMD_OFFSET, cx_res_addr);
 
 	if (adreno_is_a618(adreno_dev) || adreno_is_a619(adreno_dev) ||
 			adreno_is_a650_family(adreno_dev))
@@ -237,7 +257,7 @@
 	_regwrite(cfg, PDC_GPU_TCS3_CMD0_MSGID + PDC_CMD_OFFSET * 2, 0x10108);
 
 	_regwrite(cfg, PDC_GPU_TCS3_CMD0_ADDR + PDC_CMD_OFFSET * 2,
-			a6xx_core->pdc_address_offset);
+			xo_resource_addr);
 
 	_regwrite(cfg, PDC_GPU_TCS3_CMD0_DATA + PDC_CMD_OFFSET * 2, 0x3);
 
diff --git a/drivers/gpu/msm/adreno_a6xx_snapshot.c b/drivers/gpu/msm/adreno_a6xx_snapshot.c
index 715750b..ef4c8f2 100644
--- a/drivers/gpu/msm/adreno_a6xx_snapshot.c
+++ b/drivers/gpu/msm/adreno_a6xx_snapshot.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
  */
 
 #include "adreno.h"
@@ -345,7 +345,7 @@
 	0x0540, 0x0555,
 	/* CP */
 	0x0800, 0x0803, 0x0806, 0x0808, 0x0810, 0x0813, 0x0820, 0x0821,
-	0x0823, 0x0824, 0x0826, 0x0827, 0x0830, 0x0833, 0x0840, 0x0843,
+	0x0823, 0x0824, 0x0826, 0x0827, 0x0830, 0x0833, 0x0840, 0x0845,
 	0x084F, 0x086F, 0x0880, 0x088A, 0x08A0, 0x08AB, 0x08C0, 0x08C4,
 	0x08D0, 0x08DD, 0x08F0, 0x08F3, 0x0900, 0x0903, 0x0908, 0x0911,
 	0x0928, 0x093E, 0x0942, 0x094D, 0x0980, 0x0984, 0x098D, 0x0996,
diff --git a/drivers/gpu/msm/adreno_perfcounter.c b/drivers/gpu/msm/adreno_perfcounter.c
index 5b4ae58..026ba54 100644
--- a/drivers/gpu/msm/adreno_perfcounter.c
+++ b/drivers/gpu/msm/adreno_perfcounter.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2002,2007-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2002,2007-2020, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/slab.h>
@@ -126,6 +126,9 @@
 	struct adreno_perfcount_group *group;
 	unsigned int counter, groupid;
 
+	if (adreno_is_a702(adreno_dev))
+		return;
+
 	if (counters == NULL)
 		return;
 
@@ -159,6 +162,9 @@
 	struct adreno_perfcount_group *group;
 	unsigned int counter, groupid;
 
+	if (adreno_is_a702(adreno_dev))
+		return;
+
 	if (counters == NULL)
 		return;
 
diff --git a/drivers/gpu/msm/kgsl.c b/drivers/gpu/msm/kgsl.c
index 4125053..6d2c272 100644
--- a/drivers/gpu/msm/kgsl.c
+++ b/drivers/gpu/msm/kgsl.c
@@ -295,7 +295,7 @@
 	if (meta != NULL) {
 		remove_dmabuf_list(meta);
 		dma_buf_unmap_attachment(meta->attach, meta->table,
-			DMA_FROM_DEVICE);
+			DMA_BIDIRECTIONAL);
 		dma_buf_detach(meta->dmabuf, meta->attach);
 		dma_buf_put(meta->dmabuf);
 		kfree(meta);
@@ -2895,7 +2895,7 @@
 	entry->memdesc.flags &= ~((uint64_t) KGSL_MEMFLAGS_USE_CPU_MAP);
 	entry->memdesc.flags |= (uint64_t)KGSL_MEMFLAGS_USERMEM_ION;
 
-	sg_table = dma_buf_map_attachment(attach, DMA_TO_DEVICE);
+	sg_table = dma_buf_map_attachment(attach, DMA_BIDIRECTIONAL);
 
 	if (IS_ERR_OR_NULL(sg_table)) {
 		ret = PTR_ERR(sg_table);
diff --git a/drivers/gpu/msm/kgsl.h b/drivers/gpu/msm/kgsl.h
index e263c31..70b6a73 100644
--- a/drivers/gpu/msm/kgsl.h
+++ b/drivers/gpu/msm/kgsl.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
 /*
- * Copyright (c) 2008-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2008-2020, The Linux Foundation. All rights reserved.
  */
 #ifndef __KGSL_H
 #define __KGSL_H
@@ -211,6 +211,7 @@
  * @pages: An array of pointers to allocated pages
  * @page_count: Total number of pages allocated
  * @cur_bindings: Number of sparse pages actively bound
+ * @shmem_filp: Pointer to the shmem file backing this memdesc
  */
 struct kgsl_memdesc {
 	struct kgsl_pagetable *pagetable;
@@ -230,6 +231,7 @@
 	struct page **pages;
 	unsigned int page_count;
 	unsigned int cur_bindings;
+	struct file *shmem_filp;
 };
 
 /*
diff --git a/drivers/gpu/msm/kgsl_gmu.c b/drivers/gpu/msm/kgsl_gmu.c
index ea0cce6..0f1b2b5 100644
--- a/drivers/gpu/msm/kgsl_gmu.c
+++ b/drivers/gpu/msm/kgsl_gmu.c
@@ -282,6 +282,7 @@
 	struct platform_device *pdev = of_find_device_by_node(node);
 	struct device *dev;
 	int ret;
+	int no_stall = 1;
 
 	dev = &pdev->dev;
 	of_dma_configure(dev, node, true);
@@ -294,6 +295,14 @@
 		return -ENODEV;
 	}
 
+	/*
+	 * Disable stall on fault for the GMU context bank.
+	 * This sets SCTLR.CFCFG = 0.
+	 * Also note that, the smmu driver sets SCTLR.HUPCF = 0 by default.
+	 */
+	iommu_domain_set_attr(ctx->domain,
+		DOMAIN_ATTR_FAULT_MODEL_NO_STALL, &no_stall);
+
 	ret = iommu_attach_device(ctx->domain, dev);
 	if (ret) {
 		dev_err(&gmu->pdev->dev, "gmu iommu fail to attach %s device\n",
diff --git a/drivers/gpu/msm/kgsl_iommu.c b/drivers/gpu/msm/kgsl_iommu.c
index f6f633bb..e411f7e 100644
--- a/drivers/gpu/msm/kgsl_iommu.c
+++ b/drivers/gpu/msm/kgsl_iommu.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2011-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2020, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/compat.h>
@@ -1203,8 +1203,8 @@
 		goto done;
 	}
 
-	if (!MMU_FEATURE(mmu, KGSL_MMU_GLOBAL_PAGETABLE) &&
-		scm_is_call_available(SCM_SVC_MP, CP_SMMU_APERTURE_ID)) {
+	if (kgsl_mmu_is_perprocess(mmu) && MMU_FEATURE(mmu,
+				KGSL_MMU_SMMU_APERTURE)) {
 		struct scm_desc desc = {0};
 
 		desc.args[0] = 0xFFFF0000 | ((CP_APERTURE_REG & 0xff) << 8) |
@@ -1222,7 +1222,7 @@
 			dev_err(device->dev,
 				"SMMU aperture programming call failed with error %d\n",
 				ret);
-			return ret;
+			goto done;
 		}
 	}
 
diff --git a/drivers/gpu/msm/kgsl_mmu.h b/drivers/gpu/msm/kgsl_mmu.h
index 7cc3321..3eb84f9 100644
--- a/drivers/gpu/msm/kgsl_mmu.h
+++ b/drivers/gpu/msm/kgsl_mmu.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
 /*
- * Copyright (c) 2002,2007-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2002,2007-2020, The Linux Foundation. All rights reserved.
  */
 #ifndef __KGSL_MMU_H
 #define __KGSL_MMU_H
@@ -135,6 +135,8 @@
 #define KGSL_MMU_NEED_GUARD_PAGE BIT(9)
 /* The device supports IO coherency */
 #define KGSL_MMU_IO_COHERENT BIT(10)
+/* The device supports aperture programming from secure world */
+#define KGSL_MMU_SMMU_APERTURE BIT(11)
 
 /**
  * struct kgsl_mmu - Master definition for KGSL MMU devices
diff --git a/drivers/gpu/msm/kgsl_pool.c b/drivers/gpu/msm/kgsl_pool.c
index 5970692..a6906b8 100644
--- a/drivers/gpu/msm/kgsl_pool.c
+++ b/drivers/gpu/msm/kgsl_pool.c
@@ -57,34 +57,18 @@
 	return NULL;
 }
 
-/* Map the page into kernel and zero it out */
-static void
-_kgsl_pool_zero_page(struct page *p, unsigned int pool_order)
-{
-	int i;
-
-	for (i = 0; i < (1 << pool_order); i++) {
-		struct page *page = nth_page(p, i);
-		void *addr = kmap_atomic(page);
-
-		memset(addr, 0, PAGE_SIZE);
-		dmac_flush_range(addr, addr + PAGE_SIZE);
-		kunmap_atomic(addr);
-	}
-}
-
 /* Add a page to specified pool */
 static void
 _kgsl_pool_add_page(struct kgsl_page_pool *pool, struct page *p)
 {
-	_kgsl_pool_zero_page(p, pool->pool_order);
+	kgsl_zero_page(p, pool->pool_order);
 
 	spin_lock(&pool->list_lock);
 	list_add_tail(&p->lru, &pool->page_list);
 	pool->page_count++;
 	spin_unlock(&pool->list_lock);
-	mod_node_page_state(page_pgdat(p), NR_INDIRECTLY_RECLAIMABLE_BYTES,
-				(PAGE_SIZE << pool->pool_order));
+	mod_node_page_state(page_pgdat(p), NR_KERNEL_MISC_RECLAIMABLE,
+			    (1 << pool->pool_order));
 }
 
 /* Returns a page from specified pool */
@@ -103,8 +87,9 @@
 
 	if (p != NULL)
 		mod_node_page_state(page_pgdat(p),
-				NR_INDIRECTLY_RECLAIMABLE_BYTES,
-				-(PAGE_SIZE << pool->pool_order));
+				    NR_KERNEL_MISC_RECLAIMABLE,
+				    -(1 << pool->pool_order));
+
 	return p;
 }
 
@@ -208,43 +193,6 @@
 }
 
 /**
- * kgsl_pool_free_sgt() - Free scatter-gather list
- * @sgt: pointer of the sg list
- *
- * Free the sg list by collapsing any physical adjacent pages.
- * Pages are added back to the pool, if pool has sufficient space
- * otherwise they are given back to system.
- */
-
-void kgsl_pool_free_sgt(struct sg_table *sgt)
-{
-	int i;
-	struct scatterlist *sg;
-
-	for_each_sg(sgt->sgl, sg, sgt->nents, i) {
-		/*
-		 * sg_alloc_table_from_pages() will collapse any physically
-		 * adjacent pages into a single scatterlist entry. We cannot
-		 * just call __free_pages() on the entire set since we cannot
-		 * ensure that the size is a whole order. Instead, free each
-		 * page or compound page group individually.
-		 */
-		struct page *p = sg_page(sg), *next;
-		unsigned int count;
-		unsigned int j = 0;
-
-		while (j < (sg->length/PAGE_SIZE)) {
-			count = 1 << compound_order(p);
-			next = nth_page(p, count);
-			kgsl_pool_free_page(p);
-
-			p = next;
-			j += count;
-		}
-	}
-}
-
-/**
  * kgsl_pool_free_pages() - Free pages in the pages array
  * @pages: pointer of the pages array
  *
@@ -299,22 +247,6 @@
 	return 0;
 }
 
-static unsigned int kgsl_gfp_mask(unsigned int page_order)
-{
-	unsigned int gfp_mask = __GFP_HIGHMEM;
-
-	if (page_order > 0) {
-		gfp_mask |= __GFP_COMP | __GFP_NORETRY | __GFP_NOWARN;
-		gfp_mask &= ~__GFP_RECLAIM;
-	} else
-		gfp_mask |= GFP_KERNEL;
-
-	if (kgsl_sharedmem_get_noretry())
-		gfp_mask |= __GFP_NORETRY | __GFP_NOWARN;
-
-	return gfp_mask;
-}
-
 /**
  * kgsl_pool_alloc_page() - Allocate a page of requested size
  * @page_size: Size of the page to be allocated
@@ -353,7 +285,7 @@
 			} else
 				return -ENOMEM;
 		}
-		_kgsl_pool_zero_page(page, order);
+		kgsl_zero_page(page, order);
 		goto done;
 	}
 
@@ -373,7 +305,7 @@
 			page = alloc_pages(gfp_mask, order);
 			if (page == NULL)
 				return -ENOMEM;
-			_kgsl_pool_zero_page(page, order);
+			kgsl_zero_page(page, order);
 			goto done;
 		}
 	}
@@ -404,7 +336,7 @@
 				return -ENOMEM;
 		}
 
-		_kgsl_pool_zero_page(page, order);
+		kgsl_zero_page(page, order);
 	}
 
 done:
diff --git a/drivers/gpu/msm/kgsl_pool.h b/drivers/gpu/msm/kgsl_pool.h
index 1bfa323..4643c7a 100644
--- a/drivers/gpu/msm/kgsl_pool.h
+++ b/drivers/gpu/msm/kgsl_pool.h
@@ -1,17 +1,21 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
 /*
- * Copyright (c) 2016-2017,2019 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2017, 2019-2020, The Linux Foundation. All rights reserved.
  */
 #ifndef __KGSL_POOL_H
 #define __KGSL_POOL_H
 
-void kgsl_pool_free_sgt(struct sg_table *sgt);
-void kgsl_pool_free_pages(struct page **pages, unsigned int page_count);
+#ifdef CONFIG_QCOM_KGSL_USE_SHMEM
+static inline void kgsl_init_page_pools(struct platform_device *pdev) { }
+static inline void kgsl_exit_page_pools(void) { }
+#else
 void kgsl_init_page_pools(struct platform_device *pdev);
 void kgsl_exit_page_pools(void);
+void kgsl_pool_free_pages(struct page **pages, unsigned int page_count);
 int kgsl_pool_alloc_page(int *page_size, struct page **pages,
 			unsigned int pages_len, unsigned int *align);
 void kgsl_pool_free_page(struct page *p);
 bool kgsl_pool_avaialable(int size);
+#endif
 #endif /* __KGSL_POOL_H */
 
diff --git a/drivers/gpu/msm/kgsl_pwrctrl.c b/drivers/gpu/msm/kgsl_pwrctrl.c
index e60d1a5..fda9c03 100644
--- a/drivers/gpu/msm/kgsl_pwrctrl.c
+++ b/drivers/gpu/msm/kgsl_pwrctrl.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2010-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2010-2020, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/msm-bus.h>
@@ -15,6 +15,7 @@
 #include "kgsl_device.h"
 #include "kgsl_pwrscale.h"
 #include "kgsl_trace.h"
+#include "kgsl_trace_power.h"
 
 #define KGSL_PWRFLAGS_POWER_ON 0
 #define KGSL_PWRFLAGS_CLK_ON   1
@@ -616,6 +617,8 @@
 			pwr->previous_pwrlevel,
 			pwr->pwrlevels[old_level].gpu_freq);
 
+	trace_gpu_frequency(pwrlevel->gpu_freq/1000, 0);
+
 	/*
 	 * Some targets do not support the bandwidth requirement of
 	 * GPU at TURBO, for such targets we need to set GPU-BIMC
@@ -2664,6 +2667,7 @@
 {
 	struct kgsl_pwrctrl *pwr = &device->pwrctrl;
 	int status = 0;
+	unsigned int state = device->state;
 
 	switch (device->state) {
 	case KGSL_STATE_SUSPEND:
@@ -2690,6 +2694,9 @@
 		/* Turn on the core clocks */
 		kgsl_pwrctrl_clk(device, KGSL_PWRFLAGS_ON, KGSL_STATE_ACTIVE);
 
+		if (state == KGSL_STATE_SLUMBER || state == KGSL_STATE_SUSPEND)
+			trace_gpu_frequency(
+			pwr->pwrlevels[pwr->active_pwrlevel].gpu_freq/1000, 0);
 		/*
 		 * No need to turn on/off irq here as it no longer affects
 		 * power collapse
@@ -2895,6 +2902,7 @@
 		kgsl_pwrctrl_clk_set_options(device, false);
 		kgsl_pwrctrl_disable(device);
 		kgsl_pwrscale_sleep(device);
+		trace_gpu_frequency(0, 0);
 		kgsl_pwrctrl_set_state(device, KGSL_STATE_SLUMBER);
 		pm_qos_update_request(&device->pwrctrl.pm_qos_req_dma,
 						PM_QOS_DEFAULT_VALUE);
@@ -2910,6 +2918,7 @@
 		break;
 	case KGSL_STATE_AWARE:
 		kgsl_pwrctrl_disable(device);
+		trace_gpu_frequency(0, 0);
 		kgsl_pwrctrl_set_state(device, KGSL_STATE_SLUMBER);
 		break;
 	default:
diff --git a/drivers/gpu/msm/kgsl_sharedmem.c b/drivers/gpu/msm/kgsl_sharedmem.c
index e93d565..6079b70 100644
--- a/drivers/gpu/msm/kgsl_sharedmem.c
+++ b/drivers/gpu/msm/kgsl_sharedmem.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2002,2007-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2002,2007-2020, The Linux Foundation. All rights reserved.
  */
 
 #include <asm/cacheflush.h>
@@ -8,6 +8,7 @@
 #include <linux/slab.h>
 #include <soc/qcom/scm.h>
 #include <soc/qcom/secure_buffer.h>
+#include <linux/shmem_fs.h>
 
 #include "kgsl_device.h"
 #include "kgsl_sharedmem.h"
@@ -505,12 +506,10 @@
 
 static int kgsl_lock_sgt(struct sg_table *sgt, u64 size)
 {
-	struct scatterlist *sg;
 	int dest_perms = PERM_READ | PERM_WRITE;
 	int source_vm = VMID_HLOS;
 	int dest_vm = VMID_CP_PIXEL;
 	int ret;
-	int i;
 
 	do {
 		ret = hyp_assign_table(sgt, &source_vm, 1, &dest_vm,
@@ -532,10 +531,6 @@
 		return ret;
 	}
 
-	/* Set private bit for each sg to indicate that its secured */
-	for_each_sg(sgt->sgl, sg, sgt->nents, i)
-		SetPagePrivate(sg_page(sg));
-
 	return 0;
 }
 
@@ -545,7 +540,6 @@
 	int source_vm = VMID_CP_PIXEL;
 	int dest_vm = VMID_HLOS;
 	int ret;
-	struct sg_page_iter sg_iter;
 
 	do {
 		ret = hyp_assign_table(sgt, &source_vm, 1, &dest_vm,
@@ -555,8 +549,6 @@
 	if (ret)
 		return ret;
 
-	for_each_sg_page(sgt->sgl, &sg_iter, sgt->nents, 0)
-		ClearPagePrivate(sg_page_iter_page(&sg_iter));
 	return 0;
 }
 
@@ -590,10 +582,14 @@
 
 	/* Free pages using the pages array for non secure paged memory */
 	if (memdesc->pages != NULL)
-		kgsl_pool_free_pages(memdesc->pages, memdesc->page_count);
+		kgsl_free_pages(memdesc);
 	else
-		kgsl_pool_free_sgt(memdesc->sgt);
+		kgsl_free_pages_from_sgt(memdesc);
 
+	if (memdesc->shmem_filp) {
+		fput(memdesc->shmem_filp);
+		memdesc->shmem_filp = NULL;
+	}
 }
 
 /*
@@ -880,6 +876,109 @@
 	kgsl_memdesc_set_align(memdesc, align);
 }
 
+#ifdef CONFIG_QCOM_KGSL_USE_SHMEM
+static int kgsl_alloc_page(int *page_size, struct page **pages,
+			unsigned int pages_len, unsigned int *align,
+			struct file *shmem_filp, unsigned int page_off)
+{
+	struct page *page;
+
+	if (pages == NULL)
+		return -EINVAL;
+
+	page = shmem_read_mapping_page_gfp(shmem_filp->f_mapping, page_off,
+			kgsl_gfp_mask(0));
+	if (IS_ERR(page))
+		return PTR_ERR(page);
+
+	kgsl_zero_page(page, 0);
+
+	*pages = page;
+
+	return 1;
+}
+
+void kgsl_free_pages(struct kgsl_memdesc *memdesc)
+{
+	int i;
+
+	for (i = 0; i < memdesc->page_count; i++)
+		put_page(memdesc->pages[i]);
+}
+
+static void kgsl_free_page(struct page *p)
+{
+	put_page(p);
+}
+
+static int kgsl_memdesc_file_setup(struct kgsl_memdesc *memdesc, uint64_t size)
+{
+	int ret;
+
+	memdesc->shmem_filp = shmem_file_setup("kgsl-3d0", size,
+			VM_NORESERVE);
+	if (IS_ERR(memdesc->shmem_filp)) {
+		ret = PTR_ERR(memdesc->shmem_filp);
+		pr_err("kgsl: unable to setup shmem file err %d\n",
+				ret);
+		memdesc->shmem_filp = NULL;
+		return ret;
+	}
+
+	return 0;
+}
+#else
+static int kgsl_alloc_page(int *page_size, struct page **pages,
+			unsigned int pages_len, unsigned int *align,
+			struct file *shmem_filp, unsigned int page_off)
+{
+	return kgsl_pool_alloc_page(page_size, pages, pages_len, align);
+}
+
+void kgsl_free_pages(struct kgsl_memdesc *memdesc)
+{
+	kgsl_pool_free_pages(memdesc->pages, memdesc->page_count);
+}
+
+static void kgsl_free_page(struct page *p)
+{
+	kgsl_pool_free_page(p);
+}
+
+static int kgsl_memdesc_file_setup(struct kgsl_memdesc *memdesc, uint64_t size)
+{
+	return 0;
+}
+#endif
+
+void kgsl_free_pages_from_sgt(struct kgsl_memdesc *memdesc)
+{
+	int i;
+	struct scatterlist *sg;
+
+	for_each_sg(memdesc->sgt->sgl, sg, memdesc->sgt->nents, i) {
+		/*
+		 * sg_alloc_table_from_pages() will collapse any physically
+		 * adjacent pages into a single scatterlist entry. We cannot
+		 * just call __free_pages() on the entire set since we cannot
+		 * ensure that the size is a whole order. Instead, free each
+		 * page or compound page group individually.
+		 */
+		struct page *p = sg_page(sg), *next;
+		unsigned int count;
+		unsigned int j = 0;
+
+		while (j < (sg->length/PAGE_SIZE)) {
+			count = 1 << compound_order(p);
+			next = nth_page(p, count);
+			kgsl_free_page(p);
+
+			p = next;
+			j += count;
+		}
+	}
+}
+
 int
 kgsl_sharedmem_page_alloc_user(struct kgsl_memdesc *memdesc,
 			uint64_t size)
@@ -954,13 +1053,17 @@
 
 	len = size;
 
+	ret = kgsl_memdesc_file_setup(memdesc, size);
+	if (ret)
+		goto done;
+
 	while (len > 0) {
 		int page_count;
 
-		page_count = kgsl_pool_alloc_page(&page_size,
+		page_count = kgsl_alloc_page(&page_size,
 					memdesc->pages + pcount,
 					len_alloc - pcount,
-					&align);
+					&align, memdesc->shmem_filp, pcount);
 		if (page_count <= 0) {
 			if (page_count == -EAGAIN)
 				continue;
@@ -1055,11 +1158,13 @@
 
 			for (j = 0; j < pcount; j += count) {
 				count = 1 << compound_order(memdesc->pages[j]);
-				kgsl_pool_free_page(memdesc->pages[j]);
+				kgsl_free_page(memdesc->pages[j]);
 			}
 		}
 
 		kvfree(memdesc->pages);
+		if (memdesc->shmem_filp)
+			fput(memdesc->shmem_filp);
 		memset(memdesc, 0, sizeof(*memdesc));
 	}
 
@@ -1475,9 +1580,6 @@
 	if (result != 0)
 		goto err;
 
-	/* Set the private bit to indicate that we've secured this */
-	SetPagePrivate(sg_page(memdesc->sgt->sgl));
-
 	memdesc->priv |= KGSL_MEMDESC_TZ_LOCKED;
 
 	/* Record statistics */
@@ -1502,8 +1604,7 @@
 	if (memdesc->size == 0 || !(memdesc->priv & KGSL_MEMDESC_TZ_LOCKED))
 		return;
 
-	if (!scm_lock_chunk(memdesc, 0))
-		ClearPagePrivate(sg_page(memdesc->sgt->sgl));
+	scm_lock_chunk(memdesc, 0);
 }
 
 void kgsl_sharedmem_set_noretry(bool val)
@@ -1515,3 +1616,33 @@
 {
 	return sharedmem_noretry_flag;
 }
+
+void kgsl_zero_page(struct page *p, unsigned int order)
+{
+	int i;
+
+	for (i = 0; i < (1 << order); i++) {
+		struct page *page = nth_page(p, i);
+		void *addr = kmap_atomic(page);
+
+		memset(addr, 0, PAGE_SIZE);
+		dmac_flush_range(addr, addr + PAGE_SIZE);
+		kunmap_atomic(addr);
+	}
+}
+
+unsigned int kgsl_gfp_mask(unsigned int page_order)
+{
+	unsigned int gfp_mask = __GFP_HIGHMEM;
+
+	if (page_order > 0) {
+		gfp_mask |= __GFP_COMP | __GFP_NORETRY | __GFP_NOWARN;
+		gfp_mask &= ~__GFP_RECLAIM;
+	} else
+		gfp_mask |= GFP_KERNEL;
+
+	if (kgsl_sharedmem_get_noretry())
+		gfp_mask |= __GFP_NORETRY | __GFP_NOWARN;
+
+	return gfp_mask;
+}
diff --git a/drivers/gpu/msm/kgsl_sharedmem.h b/drivers/gpu/msm/kgsl_sharedmem.h
index d7bc8be..6569332 100644
--- a/drivers/gpu/msm/kgsl_sharedmem.h
+++ b/drivers/gpu/msm/kgsl_sharedmem.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
 /*
- * Copyright (c) 2002,2007-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2002, 2007-2020, The Linux Foundation. All rights reserved.
  */
 #ifndef __KGSL_SHAREDMEM_H
 #define __KGSL_SHAREDMEM_H
@@ -75,6 +75,28 @@
 
 struct page *kgsl_alloc_secure_page(void);
 
+/**
+ * kgsl_free_pages() - Free pages in the pages array
+ * @memdesc: memdesc that has the array to be freed
+ *
+ * Free the pages in the pages array of memdesc. If pool
+ * is configured, pages are added back to the pool.
+ * If shmem is used for allocation, kgsl refcount on the page
+ * is decremented.
+ */
+void kgsl_free_pages(struct kgsl_memdesc *memdesc);
+
+/**
+ * kgsl_free_pages_from_sgt() - Free scatter-gather list
+ * @memdesc: pointer of the memdesc which has the sgt to be freed
+ *
+ * Free the sg list by collapsing any physical adjacent pages.
+ * If pool is configured, pages are added back to the pool.
+ * If shmem is used for allocation, kgsl refcount on the page
+ * is decremented.
+ */
+void kgsl_free_pages_from_sgt(struct kgsl_memdesc *memdesc);
+
 #define MEMFLAGS(_flags, _mask, _shift) \
 	((unsigned int) (((_flags) & (_mask)) >> (_shift)))
 
@@ -333,7 +355,8 @@
  *
  * Return supported pagesize
  */
-#ifndef CONFIG_ALLOC_BUFFERS_IN_4K_CHUNKS
+#if !defined(CONFIG_QCOM_KGSL_USE_SHMEM) && \
+	!defined(CONFIG_ALLOC_BUFFERS_IN_4K_CHUNKS)
 static inline int kgsl_get_page_size(size_t size, unsigned int align)
 {
 	if (align >= ilog2(SZ_1M) && size >= SZ_1M &&
@@ -355,4 +378,24 @@
 }
 #endif
 
+/**
+ * kgsl_gfp_mask() - get gfp_mask to be used
+ * @page_order: order of the page
+ *
+ * Get the gfp_mask to be used for page allocation
+ * based on the order of the page
+ *
+ * Return appropriate gfp_mask
+ */
+unsigned int kgsl_gfp_mask(unsigned int page_order);
+
+/**
+ * kgsl_zero_page() - zero out a page
+ * @p: pointer to the struct page
+ * @order: order of the page
+ *
+ * Map a page into kernel and zero it out
+ */
+void kgsl_zero_page(struct page *page, unsigned int order);
+
 #endif /* __KGSL_SHAREDMEM_H */
diff --git a/drivers/gpu/msm/kgsl_trace.c b/drivers/gpu/msm/kgsl_trace.c
index 30a7bcb..2ba50fe 100644
--- a/drivers/gpu/msm/kgsl_trace.c
+++ b/drivers/gpu/msm/kgsl_trace.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2011,2013,2015,2019 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011,2013,2015,2019-2020 The Linux Foundation. All rights reserved.
  */
 
 #include <linux/module.h>
@@ -10,8 +10,11 @@
 /* Instantiate tracepoints */
 #define CREATE_TRACE_POINTS
 #include "kgsl_trace.h"
+#include "kgsl_trace_power.h"
 
 EXPORT_TRACEPOINT_SYMBOL(kgsl_regwrite);
 EXPORT_TRACEPOINT_SYMBOL(kgsl_issueibcmds);
 EXPORT_TRACEPOINT_SYMBOL(kgsl_user_pwrlevel_constraint);
 EXPORT_TRACEPOINT_SYMBOL(kgsl_constraint);
+
+EXPORT_TRACEPOINT_SYMBOL(gpu_frequency);
diff --git a/drivers/gpu/msm/kgsl_trace_power.h b/drivers/gpu/msm/kgsl_trace_power.h
new file mode 100644
index 0000000..971beb2
--- /dev/null
+++ b/drivers/gpu/msm/kgsl_trace_power.h
@@ -0,0 +1,41 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (c) 2020, The Linux Foundation. All rights reserved.
+ */
+
+#if !defined(_KGSL_TRACE_POWER_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _KGSL_TRACE_POWER_H
+
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM power
+#undef TRACE_INCLUDE_FILE
+#define TRACE_INCLUDE_FILE kgsl_trace_power
+
+#include <linux/tracepoint.h>
+
+/**
+ * gpu_frequency - Reports frequency changes in GPU clock domains
+ * @state:  New frequency (in KHz)
+ * @gpu_id: GPU clock domain
+ */
+TRACE_EVENT(gpu_frequency,
+	TP_PROTO(unsigned int state, unsigned int gpu_id),
+	TP_ARGS(state, gpu_id),
+	TP_STRUCT__entry(
+		__field(unsigned int, state)
+		__field(unsigned int, gpu_id)
+	),
+	TP_fast_assign(
+		__entry->state = state;
+		__entry->gpu_id = gpu_id;
+	),
+
+	TP_printk("state=%lu gpu_id=%lu",
+		(unsigned long)__entry->state,
+		(unsigned long)__entry->gpu_id)
+);
+
+#endif /* _KGSL_TRACE_POWER_H */
+
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/drivers/hid/hid-qvr.c b/drivers/hid/hid-qvr.c
index 8ece1d7..b5e51b2 100644
--- a/drivers/hid/hid-qvr.c
+++ b/drivers/hid/hid-qvr.c
@@ -498,6 +498,14 @@
 	struct qvr_external_sensor *sensor = &qvr_external_sensor;
 	int ret;
 	char *node_name = "qcom,smp2p-interrupt-qvrexternal-5-out";
+
+	//For devices with non-standard HID report descriptors, it is
+	//required to force the registration of an input device.
+	hdev->quirks |= HID_QUIRK_HIDINPUT_FORCE;
+
+	//Devices with non-standard incoming events need to use this quirk.
+	hdev->quirks |= HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE;
+
 	sensor->hdev = hdev;
 
 	ret = register_smp2p(&hdev->dev, node_name, &sensor->gpio_info_out);
diff --git a/drivers/hwtracing/coresight/Kconfig b/drivers/hwtracing/coresight/Kconfig
index dfb5638..bd00194 100644
--- a/drivers/hwtracing/coresight/Kconfig
+++ b/drivers/hwtracing/coresight/Kconfig
@@ -75,6 +75,7 @@
 config CORESIGHT_SOURCE_ETM4X
 	bool "CoreSight Embedded Trace Macrocell 4.x driver"
 	select CORESIGHT_LINKS_AND_SINKS
+	select PID_IN_CONTEXTIDR
 	help
 	  This driver provides support for the ETM4.x tracer module, tracing the
 	  instructions that a processor is executing. This is primarily useful
diff --git a/drivers/hwtracing/coresight/coresight-byte-cntr.c b/drivers/hwtracing/coresight/coresight-byte-cntr.c
index e0454e7..48ca137 100644
--- a/drivers/hwtracing/coresight/coresight-byte-cntr.c
+++ b/drivers/hwtracing/coresight/coresight-byte-cntr.c
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: GPL-2.0-only
-/* Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
  *
  * Description: CoreSight Trace Memory Controller driver
  */
@@ -328,7 +328,8 @@
 	w_offset = tmc_sg_get_rwp_offset(tmcdrvdata);
 	req_size = ((w_offset < drvdata->offset) ? etr_buf->size : 0) +
 				w_offset - drvdata->offset;
-	req_size = (req_size < USB_BLK_SIZE) ? req_size : USB_BLK_SIZE;
+	req_size = ((req_size + *small_size) < USB_BLK_SIZE) ? req_size :
+		(USB_BLK_SIZE - *small_size);
 
 	while (req_size > 0) {
 
@@ -339,6 +340,8 @@
 			goto out;
 		}
 
+		init_completion(&usb_req->write_done);
+
 		actual = tmc_etr_buf_get_data(etr_buf, drvdata->offset,
 					req_size, &usb_req->buf);
 		usb_req->length = actual;
@@ -422,6 +425,7 @@
 						sizeof(*usb_req), GFP_KERNEL);
 			if (!usb_req)
 				return;
+			init_completion(&usb_req->write_done);
 			usb_req->sg = devm_kzalloc(tmcdrvdata->dev,
 					sizeof(*(usb_req->sg)) * req_sg_num,
 					GFP_KERNEL);
diff --git a/drivers/hwtracing/coresight/coresight-catu.h b/drivers/hwtracing/coresight/coresight-catu.h
index 5713b75..1564767 100644
--- a/drivers/hwtracing/coresight/coresight-catu.h
+++ b/drivers/hwtracing/coresight/coresight-catu.h
@@ -110,11 +110,6 @@
 	return true;
 }
 
-#ifdef CONFIG_CORESIGHT_CATU
 extern const struct etr_buf_operations etr_catu_buf_ops;
-#else
-/* Dummy declaration for the CATU ops */
-static const struct etr_buf_operations etr_catu_buf_ops;
-#endif
 
 #endif
diff --git a/drivers/hwtracing/coresight/coresight-cti.c b/drivers/hwtracing/coresight/coresight-cti.c
index 431e555..afec7dd 100644
--- a/drivers/hwtracing/coresight/coresight-cti.c
+++ b/drivers/hwtracing/coresight/coresight-cti.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2013-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2020, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/kernel.h>
@@ -56,6 +56,7 @@
 #define ITTRIGOUTACK		(0xEF0)
 #define ITCHIN			(0xEF4)
 #define ITTRIGIN		(0xEF8)
+#define DEVID			(0xFC8)
 
 #define CTI_MAX_TRIGGERS	(32)
 #define CTI_MAX_CHANNELS	(4)
@@ -86,6 +87,8 @@
 	struct coresight_cti		cti;
 	int				refcnt;
 	int				cpu;
+	unsigned int			trig_num_max;
+	unsigned int			ch_num_max;
 	bool				cti_save;
 	bool				cti_hwclk;
 	bool				l2_off;
@@ -373,7 +376,7 @@
 	 */
 	if (drvdata->refcnt == 0) {
 		ret = pm_runtime_get_sync(drvdata->dev);
-		if (ret)
+		if (ret < 0)
 			goto err1;
 		ret = coresight_enable_reg_clk(drvdata->csdev);
 		if (ret)
@@ -464,7 +467,7 @@
 	 */
 	if (drvdata->refcnt == 0) {
 		ret = pm_runtime_get_sync(drvdata->dev);
-		if (ret)
+		if (ret < 0)
 			goto err1;
 		ret = coresight_enable_reg_clk(drvdata->csdev);
 		if (ret)
@@ -1353,6 +1356,19 @@
 }
 static DEVICE_ATTR_WO(disable_gate);
 
+static ssize_t show_info_show(struct device *dev, struct device_attribute *attr,
+				char *buf)
+{
+	struct cti_drvdata *drvdata = dev_get_drvdata(dev->parent);
+	ssize_t size = 0;
+
+	size = scnprintf(&buf[size], PAGE_SIZE, "%d %d\n",
+			drvdata->trig_num_max, drvdata->ch_num_max);
+
+	return size;
+}
+static DEVICE_ATTR_RO(show_info);
+
 static struct attribute *cti_attrs[] = {
 	&dev_attr_show_trigin.attr,
 	&dev_attr_show_trigout.attr,
@@ -1369,6 +1385,7 @@
 	&dev_attr_show_gate.attr,
 	&dev_attr_enable_gate.attr,
 	&dev_attr_disable_gate.attr,
+	&dev_attr_show_info.attr,
 	NULL,
 };
 
@@ -1458,7 +1475,7 @@
 	}
 	if (drvdata->cti_save && !drvdata->cti_hwclk) {
 		ret = pm_runtime_get_sync(drvdata->dev);
-		if (ret)
+		if (ret < 0)
 			return ret;
 	}
 
@@ -1468,6 +1485,7 @@
 static int cti_probe(struct amba_device *adev, const struct amba_id *id)
 {
 	int ret;
+	unsigned int ctidevid;
 	struct device *dev = &adev->dev;
 	struct coresight_platform_data *pdata;
 	struct cti_drvdata *drvdata;
@@ -1539,6 +1557,9 @@
 		registered++;
 	}
 	pm_runtime_put(&adev->dev);
+	ctidevid = cti_readl(drvdata, DEVID);
+	drvdata->trig_num_max = (ctidevid & GENMASK(15, 8)) >> 8;
+	drvdata->ch_num_max = (ctidevid & GENMASK(21, 16)) >> 16;
 	dev_dbg(dev, "CTI initialized\n");
 	return 0;
 err:
diff --git a/drivers/hwtracing/coresight/coresight-dummy.c b/drivers/hwtracing/coresight/coresight-dummy.c
index 21300cb..d2abdd4 100644
--- a/drivers/hwtracing/coresight/coresight-dummy.c
+++ b/drivers/hwtracing/coresight/coresight-dummy.c
@@ -35,7 +35,8 @@
 	dev_info(drvdata->dev, "Dummy source disabled\n");
 }
 
-static int dummy_sink_enable(struct coresight_device *csdev, u32 mode)
+static int dummy_sink_enable(struct coresight_device *csdev, u32 mode,
+			     void *data)
 {
 	struct dummy_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
 
@@ -44,11 +45,13 @@
 	return 0;
 }
 
-static void dummy_sink_disable(struct coresight_device *csdev)
+static int dummy_sink_disable(struct coresight_device *csdev)
 {
 	struct dummy_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
 
 	dev_info(drvdata->dev, "Dummy sink disabled\n");
+
+	return 0;
 }
 
 static int dummy_trace_id(struct coresight_device *csdev)
diff --git a/drivers/hwtracing/coresight/coresight-dynamic-replicator.c b/drivers/hwtracing/coresight/coresight-dynamic-replicator.c
index d31f1d8..8be9ed1 100644
--- a/drivers/hwtracing/coresight/coresight-dynamic-replicator.c
+++ b/drivers/hwtracing/coresight/coresight-dynamic-replicator.c
@@ -26,12 +26,14 @@
  * @dev:	the device entity associated with this component
  * @atclk:	optional clock for the core parts of the replicator.
  * @csdev:	component vitals needed by the framework
+ * @spinlock:	serialize enable/disable operations.
  */
 struct replicator_state {
 	void __iomem		*base;
 	struct device		*dev;
 	struct clk		*atclk;
 	struct coresight_device	*csdev;
+	spinlock_t		spinlock;
 };
 
 /*
@@ -41,17 +43,20 @@
 {
 	CS_UNLOCK(drvdata->base);
 
-	writel_relaxed(0xff, drvdata->base + REPLICATOR_IDFILTER0);
-	writel_relaxed(0xff, drvdata->base + REPLICATOR_IDFILTER1);
+	if (!coresight_claim_device_unlocked(drvdata->base)) {
+		writel_relaxed(0xff, drvdata->base + REPLICATOR_IDFILTER0);
+		writel_relaxed(0xff, drvdata->base + REPLICATOR_IDFILTER1);
+		coresight_disclaim_device_unlocked(drvdata->base);
+	}
 
 	CS_LOCK(drvdata->base);
 }
 
-static int replicator_enable(struct coresight_device *csdev, int inport,
-			      int outport)
+static int dynamic_replicator_enable(struct replicator_state *drvdata,
+				     int inport, int outport)
 {
+	int rc = 0;
 	u32 reg;
-	struct replicator_state *drvdata = dev_get_drvdata(csdev->dev.parent);
 
 	switch (outport) {
 	case 0:
@@ -67,20 +72,45 @@
 
 	CS_UNLOCK(drvdata->base);
 
+	if ((readl_relaxed(drvdata->base + REPLICATOR_IDFILTER0) == 0xff) &&
+	    (readl_relaxed(drvdata->base + REPLICATOR_IDFILTER1) == 0xff))
+		rc = coresight_claim_device_unlocked(drvdata->base);
 
 	/* Ensure that the outport is enabled. */
-	writel_relaxed(0x00, drvdata->base + reg);
+	if (!rc)
+		writel_relaxed(0x00, drvdata->base + reg);
 	CS_LOCK(drvdata->base);
 
-	dev_info(drvdata->dev, "REPLICATOR enabled\n");
-	return 0;
+	return rc;
 }
 
-static void replicator_disable(struct coresight_device *csdev, int inport,
-				int outport)
+static int replicator_enable(struct coresight_device *csdev, int inport,
+			     int outport)
+{
+	int rc = 0;
+	struct replicator_state *drvdata = dev_get_drvdata(csdev->dev.parent);
+	unsigned long flags;
+	bool first_enable = false;
+
+	spin_lock_irqsave(&drvdata->spinlock, flags);
+	if (atomic_read(&csdev->refcnt[outport]) == 0) {
+		rc = dynamic_replicator_enable(drvdata, inport, outport);
+		if (!rc)
+			first_enable = true;
+	}
+	if (!rc)
+		atomic_inc(&csdev->refcnt[outport]);
+	spin_unlock_irqrestore(&drvdata->spinlock, flags);
+
+	if (first_enable)
+		dev_dbg(&csdev->dev, "REPLICATOR enabled\n");
+	return rc;
+}
+
+static void dynamic_replicator_disable(struct replicator_state *drvdata,
+				       int inport, int outport)
 {
 	u32 reg;
-	struct replicator_state *drvdata = dev_get_drvdata(csdev->dev.parent);
 
 	switch (outport) {
 	case 0:
@@ -99,9 +129,28 @@
 	/* disable the flow of ATB data through port */
 	writel_relaxed(0xff, drvdata->base + reg);
 
+	if ((readl_relaxed(drvdata->base + REPLICATOR_IDFILTER0) == 0xff) &&
+	    (readl_relaxed(drvdata->base + REPLICATOR_IDFILTER1) == 0xff))
+		coresight_disclaim_device_unlocked(drvdata->base);
 	CS_LOCK(drvdata->base);
+}
 
-	dev_info(drvdata->dev, "REPLICATOR disabled\n");
+static void replicator_disable(struct coresight_device *csdev, int inport,
+				int outport)
+{
+	struct replicator_state *drvdata = dev_get_drvdata(csdev->dev.parent);
+	unsigned long flags;
+	bool last_disable = false;
+
+	spin_lock_irqsave(&drvdata->spinlock, flags);
+	if (atomic_dec_return(&csdev->refcnt[outport]) == 0) {
+		dynamic_replicator_disable(drvdata, inport, outport);
+		last_disable = true;
+	}
+	spin_unlock_irqrestore(&drvdata->spinlock, flags);
+
+	if (last_disable)
+		dev_dbg(drvdata->dev, "REPLICATOR disabled\n");
 }
 
 static const struct coresight_ops_link replicator_link_ops = {
@@ -174,6 +223,7 @@
 	dev_set_drvdata(dev, drvdata);
 	pm_runtime_put(&adev->dev);
 
+	spin_lock_init(&drvdata->spinlock);
 	desc.type = CORESIGHT_DEV_TYPE_LINK;
 	desc.subtype.link_subtype = CORESIGHT_DEV_SUBTYPE_LINK_SPLIT;
 	desc.ops = &replicator_cs_ops;
diff --git a/drivers/hwtracing/coresight/coresight-etb10.c b/drivers/hwtracing/coresight/coresight-etb10.c
index 77fbf9b..31fcbc3 100644
--- a/drivers/hwtracing/coresight/coresight-etb10.c
+++ b/drivers/hwtracing/coresight/coresight-etb10.c
@@ -5,7 +5,7 @@
  * Description: CoreSight Embedded Trace Buffer driver
  */
 
-#include <asm/local.h>
+#include <linux/atomic.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/types.h>
@@ -28,6 +28,7 @@
 
 
 #include "coresight-priv.h"
+#include "coresight-etm-perf.h"
 
 #define ETB_RAM_DEPTH_REG	0x004
 #define ETB_STATUS_REG		0x00c
@@ -71,8 +72,8 @@
  * @miscdev:	specifics to handle "/dev/xyz.etb" entry.
  * @spinlock:	only one at a time pls.
  * @reading:	synchronise user space access to etb buffer.
- * @mode:	this ETB is being used.
  * @buf:	area of memory where ETB buffer content gets sent.
+ * @mode:	this ETB is being used.
  * @buffer_depth: size of @buf.
  * @trigger_cntr: amount of words to store after a trigger.
  */
@@ -84,12 +85,15 @@
 	struct miscdevice	miscdev;
 	spinlock_t		spinlock;
 	local_t			reading;
-	local_t			mode;
 	u8			*buf;
+	u32			mode;
 	u32			buffer_depth;
 	u32			trigger_cntr;
 };
 
+static int etb_set_buffer(struct coresight_device *csdev,
+			  struct perf_output_handle *handle);
+
 static unsigned int etb_get_buffer_depth(struct etb_drvdata *drvdata)
 {
 	u32 depth = 0;
@@ -103,7 +107,7 @@
 	return depth;
 }
 
-static void etb_enable_hw(struct etb_drvdata *drvdata)
+static void __etb_enable_hw(struct etb_drvdata *drvdata)
 {
 	int i;
 	u32 depth;
@@ -131,40 +135,104 @@
 	CS_LOCK(drvdata->base);
 }
 
-static int etb_enable(struct coresight_device *csdev, u32 mode)
+static int etb_enable_hw(struct etb_drvdata *drvdata)
 {
-	u32 val;
-	unsigned long flags;
-	struct etb_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
+	int rc = coresight_claim_device(drvdata->base);
 
-	val = local_cmpxchg(&drvdata->mode,
-			    CS_MODE_DISABLED, mode);
-	/*
-	 * When accessing from Perf, a HW buffer can be handled
-	 * by a single trace entity.  In sysFS mode many tracers
-	 * can be logging to the same HW buffer.
-	 */
-	if (val == CS_MODE_PERF)
-		return -EBUSY;
+	if (rc)
+		return rc;
 
-	/* Don't let perf disturb sysFS sessions */
-	if (val == CS_MODE_SYSFS && mode == CS_MODE_PERF)
-		return -EBUSY;
-
-	/* Nothing to do, the tracer is already enabled. */
-	if (val == CS_MODE_SYSFS)
-		goto out;
-
-	spin_lock_irqsave(&drvdata->spinlock, flags);
-	etb_enable_hw(drvdata);
-	spin_unlock_irqrestore(&drvdata->spinlock, flags);
-
-out:
-	dev_info(drvdata->dev, "ETB enabled\n");
+	__etb_enable_hw(drvdata);
 	return 0;
 }
 
-static void etb_disable_hw(struct etb_drvdata *drvdata)
+static int etb_enable_sysfs(struct coresight_device *csdev)
+{
+	int ret = 0;
+	unsigned long flags;
+	struct etb_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
+
+	spin_lock_irqsave(&drvdata->spinlock, flags);
+
+	/* Don't messup with perf sessions. */
+	if (drvdata->mode == CS_MODE_PERF) {
+		ret = -EBUSY;
+		goto out;
+	}
+
+	if (drvdata->mode == CS_MODE_DISABLED) {
+		ret = etb_enable_hw(drvdata);
+		if (ret)
+			goto out;
+
+		drvdata->mode = CS_MODE_SYSFS;
+	}
+
+	atomic_inc(csdev->refcnt);
+out:
+	spin_unlock_irqrestore(&drvdata->spinlock, flags);
+	return ret;
+}
+
+static int etb_enable_perf(struct coresight_device *csdev, void *data)
+{
+	int ret = 0;
+	unsigned long flags;
+	struct etb_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
+
+	spin_lock_irqsave(&drvdata->spinlock, flags);
+
+	/* No need to continue if the component is already in use. */
+	if (drvdata->mode != CS_MODE_DISABLED) {
+		ret = -EBUSY;
+		goto out;
+	}
+
+	/*
+	 * We don't have an internal state to clean up if we fail to setup
+	 * the perf buffer. So we can perform the step before we turn the
+	 * ETB on and leave without cleaning up.
+	 */
+	ret = etb_set_buffer(csdev, (struct perf_output_handle *)data);
+	if (ret)
+		goto out;
+
+	ret = etb_enable_hw(drvdata);
+	if (!ret) {
+		drvdata->mode = CS_MODE_PERF;
+		atomic_inc(csdev->refcnt);
+	}
+
+out:
+	spin_unlock_irqrestore(&drvdata->spinlock, flags);
+	return ret;
+}
+
+static int etb_enable(struct coresight_device *csdev, u32 mode, void *data)
+{
+	int ret;
+	struct etb_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
+
+	switch (mode) {
+	case CS_MODE_SYSFS:
+		ret = etb_enable_sysfs(csdev);
+		break;
+	case CS_MODE_PERF:
+		ret = etb_enable_perf(csdev, data);
+		break;
+	default:
+		ret = -EINVAL;
+		break;
+	}
+
+	if (ret)
+		return ret;
+
+	dev_dbg(drvdata->dev, "ETB enabled\n");
+	return 0;
+}
+
+static void __etb_disable_hw(struct etb_drvdata *drvdata)
 {
 	u32 ffcr;
 
@@ -254,25 +322,40 @@
 	CS_LOCK(drvdata->base);
 }
 
-static void etb_disable(struct coresight_device *csdev)
+static void etb_disable_hw(struct etb_drvdata *drvdata)
+{
+	__etb_disable_hw(drvdata);
+	etb_dump_hw(drvdata);
+	coresight_disclaim_device(drvdata->base);
+}
+
+static int etb_disable(struct coresight_device *csdev)
 {
 	struct etb_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
 	unsigned long flags;
 
 	spin_lock_irqsave(&drvdata->spinlock, flags);
+
+	if (atomic_dec_return(csdev->refcnt)) {
+		spin_unlock_irqrestore(&drvdata->spinlock, flags);
+		return -EBUSY;
+	}
+
+	/* Complain if we (somehow) got out of sync */
+	WARN_ON_ONCE(drvdata->mode == CS_MODE_DISABLED);
 	etb_disable_hw(drvdata);
-	etb_dump_hw(drvdata);
+	drvdata->mode = CS_MODE_DISABLED;
 	spin_unlock_irqrestore(&drvdata->spinlock, flags);
 
-	local_set(&drvdata->mode, CS_MODE_DISABLED);
-
-	dev_info(drvdata->dev, "ETB disabled\n");
+	dev_dbg(drvdata->dev, "ETB disabled\n");
+	return 0;
 }
 
-static void *etb_alloc_buffer(struct coresight_device *csdev, int cpu,
-			      void **pages, int nr_pages, bool overwrite)
+static void *etb_alloc_buffer(struct coresight_device *csdev,
+			      struct perf_event *event, void **pages,
+			      int nr_pages, bool overwrite)
 {
-	int node;
+	int node, cpu = event->cpu;
 	struct cs_buffers *buf;
 
 	if (cpu == -1)
@@ -298,12 +381,14 @@
 }
 
 static int etb_set_buffer(struct coresight_device *csdev,
-			  struct perf_output_handle *handle,
-			  void *sink_config)
+			  struct perf_output_handle *handle)
 {
 	int ret = 0;
 	unsigned long head;
-	struct cs_buffers *buf = sink_config;
+	struct cs_buffers *buf = etm_perf_sink_config(handle);
+
+	if (!buf)
+		return -EINVAL;
 
 	/* wrap head around to the amount of space we have */
 	head = handle->head & ((buf->nr_pages << PAGE_SHIFT) - 1);
@@ -319,37 +404,7 @@
 	return ret;
 }
 
-static unsigned long etb_reset_buffer(struct coresight_device *csdev,
-				      struct perf_output_handle *handle,
-				      void *sink_config)
-{
-	unsigned long size = 0;
-	struct cs_buffers *buf = sink_config;
-
-	if (buf) {
-		/*
-		 * In snapshot mode ->data_size holds the new address of the
-		 * ring buffer's head.  The size itself is the whole address
-		 * range since we want the latest information.
-		 */
-		if (buf->snapshot)
-			handle->head = local_xchg(&buf->data_size,
-						  buf->nr_pages << PAGE_SHIFT);
-
-		/*
-		 * Tell the tracer PMU how much we got in this run and if
-		 * something went wrong along the way.  Nobody else can use
-		 * this cs_buffers instance until we are done.  As such
-		 * resetting parameters here and squaring off with the ring
-		 * buffer API in the tracer PMU is fine.
-		 */
-		size = local_xchg(&buf->data_size, 0);
-	}
-
-	return size;
-}
-
-static void etb_update_buffer(struct coresight_device *csdev,
+static unsigned long etb_update_buffer(struct coresight_device *csdev,
 			      struct perf_output_handle *handle,
 			      void *sink_config)
 {
@@ -358,17 +413,18 @@
 	u8 *buf_ptr;
 	const u32 *barrier;
 	u32 read_ptr, write_ptr, capacity;
-	u32 status, read_data, to_read;
-	unsigned long offset;
+	u32 status, read_data;
+	unsigned long offset, to_read, flags;
 	struct cs_buffers *buf = sink_config;
 	struct etb_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
 
 	if (!buf)
-		return;
+		return 0;
 
 	capacity = drvdata->buffer_depth * ETB_FRAME_SIZE_WORDS;
 
-	etb_disable_hw(drvdata);
+	spin_lock_irqsave(&drvdata->spinlock, flags);
+	__etb_disable_hw(drvdata);
 	CS_UNLOCK(drvdata->base);
 
 	/* unit is in words, not bytes */
@@ -433,7 +489,13 @@
 		lost = true;
 	}
 
-	if (lost)
+	/*
+	 * Don't set the TRUNCATED flag in snapshot mode because 1) the
+	 * captured buffer is expected to be truncated and 2) a full buffer
+	 * prevents the event from being re-enabled by the perf core,
+	 * resulting in stale data being send to user space.
+	 */
+	if (!buf->snapshot && lost)
 		perf_aux_output_flag(handle, PERF_AUX_FLAG_TRUNCATED);
 
 	/* finally tell HW where we want to start reading from */
@@ -469,18 +531,18 @@
 	writel_relaxed(0x0, drvdata->base + ETB_RAM_WRITE_POINTER);
 
 	/*
-	 * In snapshot mode all we have to do is communicate to
-	 * perf_aux_output_end() the address of the current head.  In full
-	 * trace mode the same function expects a size to move rb->aux_head
-	 * forward.
+	 * In snapshot mode we have to update the handle->head to point
+	 * to the new location.
 	 */
-	if (buf->snapshot)
-		local_set(&buf->data_size, (cur * PAGE_SIZE) + offset);
-	else
-		local_add(to_read, &buf->data_size);
-
-	etb_enable_hw(drvdata);
+	if (buf->snapshot) {
+		handle->head = (cur * PAGE_SIZE) + offset;
+		to_read = buf->nr_pages << PAGE_SHIFT;
+	}
+	__etb_enable_hw(drvdata);
 	CS_LOCK(drvdata->base);
+	spin_unlock_irqrestore(&drvdata->spinlock, flags);
+
+	return to_read;
 }
 
 static const struct coresight_ops_sink etb_sink_ops = {
@@ -488,8 +550,6 @@
 	.disable	= etb_disable,
 	.alloc_buffer	= etb_alloc_buffer,
 	.free_buffer	= etb_free_buffer,
-	.set_buffer	= etb_set_buffer,
-	.reset_buffer	= etb_reset_buffer,
 	.update_buffer	= etb_update_buffer,
 };
 
@@ -502,14 +562,14 @@
 	unsigned long flags;
 
 	spin_lock_irqsave(&drvdata->spinlock, flags);
-	if (local_read(&drvdata->mode) == CS_MODE_SYSFS) {
-		etb_disable_hw(drvdata);
+	if (drvdata->mode == CS_MODE_SYSFS) {
+		__etb_disable_hw(drvdata);
 		etb_dump_hw(drvdata);
-		etb_enable_hw(drvdata);
+		__etb_enable_hw(drvdata);
 	}
 	spin_unlock_irqrestore(&drvdata->spinlock, flags);
 
-	dev_info(drvdata->dev, "ETB dumped\n");
+	dev_dbg(drvdata->dev, "ETB dumped\n");
 }
 
 static int etb_open(struct inode *inode, struct file *file)
diff --git a/drivers/hwtracing/coresight/coresight-etm-perf.c b/drivers/hwtracing/coresight/coresight-etm-perf.c
index 284fbb3..a327db8 100644
--- a/drivers/hwtracing/coresight/coresight-etm-perf.c
+++ b/drivers/hwtracing/coresight/coresight-etm-perf.c
@@ -14,6 +14,7 @@
 #include <linux/perf_event.h>
 #include <linux/percpu-defs.h>
 #include <linux/slab.h>
+#include <linux/stringhash.h>
 #include <linux/types.h>
 #include <linux/workqueue.h>
 
@@ -23,32 +24,23 @@
 static struct pmu etm_pmu;
 static bool etm_perf_up;
 
-/**
- * struct etm_event_data - Coresight specifics associated to an event
- * @work:		Handle to free allocated memory outside IRQ context.
- * @mask:		Hold the CPU(s) this event was set for.
- * @snk_config:		The sink configuration.
- * @path:		An array of path, each slot for one CPU.
- */
-struct etm_event_data {
-	struct work_struct work;
-	cpumask_t mask;
-	void *snk_config;
-	struct list_head * __percpu *path;
-};
-
 static DEFINE_PER_CPU(struct perf_output_handle, ctx_handle);
 static DEFINE_PER_CPU(struct coresight_device *, csdev_src);
 
 /* ETMv3.5/PTM's ETMCR is 'config' */
 PMU_FORMAT_ATTR(cycacc,		"config:" __stringify(ETM_OPT_CYCACC));
+PMU_FORMAT_ATTR(contextid,	"config:" __stringify(ETM_OPT_CTXTID));
 PMU_FORMAT_ATTR(timestamp,	"config:" __stringify(ETM_OPT_TS));
 PMU_FORMAT_ATTR(retstack,	"config:" __stringify(ETM_OPT_RETSTK));
+/* Sink ID - same for all ETMs */
+PMU_FORMAT_ATTR(sinkid,		"config2:0-31");
 
 static struct attribute *etm_config_formats_attr[] = {
 	&format_attr_cycacc.attr,
+	&format_attr_contextid.attr,
 	&format_attr_timestamp.attr,
 	&format_attr_retstack.attr,
+	&format_attr_sinkid.attr,
 	NULL,
 };
 
@@ -57,8 +49,18 @@
 	.attrs  = etm_config_formats_attr,
 };
 
+static struct attribute *etm_config_sinks_attr[] = {
+	NULL,
+};
+
+static const struct attribute_group etm_pmu_sinks_group = {
+	.name   = "sinks",
+	.attrs  = etm_config_sinks_attr,
+};
+
 static const struct attribute_group *etm_pmu_attr_groups[] = {
 	&etm_pmu_format_group,
+	&etm_pmu_sinks_group,
 	NULL,
 };
 
@@ -118,31 +120,44 @@
 	return ret;
 }
 
+static void free_sink_buffer(struct etm_event_data *event_data)
+{
+	int cpu;
+	cpumask_t *mask = &event_data->mask;
+	struct coresight_device *sink;
+
+	if (WARN_ON(cpumask_empty(mask)))
+		return;
+
+	if (!event_data->snk_config)
+		return;
+
+	cpu = cpumask_first(mask);
+	sink = coresight_get_sink(etm_event_cpu_path(event_data, cpu));
+	sink_ops(sink)->free_buffer(event_data->snk_config);
+}
+
 static void free_event_data(struct work_struct *work)
 {
 	int cpu;
 	cpumask_t *mask;
 	struct etm_event_data *event_data;
-	struct coresight_device *sink;
 	struct coresight_device *source;
 
 	event_data = container_of(work, struct etm_event_data, work);
 	mask = &event_data->mask;
-	/*
-	 * First deal with the sink configuration.  See comment in
-	 * etm_setup_aux() about why we take the first available path.
-	 */
-	if (event_data->snk_config) {
-		cpu = cpumask_first(mask);
-		sink = coresight_get_sink(etm_event_cpu_path(event_data, cpu));
-		if (sink_ops(sink)->free_buffer)
-			sink_ops(sink)->free_buffer(event_data->snk_config);
-	}
+
+	/* Free the sink buffers, if there are any */
+	free_sink_buffer(event_data);
 
 	for_each_cpu(cpu, mask) {
+		struct list_head **ppath;
+
+		ppath = etm_event_cpu_path_ptr(event_data, cpu);
 		source = coresight_get_source(event_data->path[cpu]);
-		if (!(IS_ERR_OR_NULL(event_data->path[cpu])))
-			coresight_release_path(source, event_data->path[cpu]);
+		if (!(IS_ERR_OR_NULL(*ppath)))
+			coresight_release_path(source, *ppath);
+		*ppath = NULL;
 	}
 
 	free_percpu(event_data->path);
@@ -159,15 +174,12 @@
 	if (!event_data)
 		return NULL;
 
-	/* Make sure nothing disappears under us */
-	get_online_cpus();
 
 	mask = &event_data->mask;
 	if (cpu != -1)
 		cpumask_set_cpu(cpu, mask);
 	else
-		cpumask_copy(mask, cpu_online_mask);
-	put_online_cpus();
+		cpumask_copy(mask, cpu_present_mask);
 
 	/*
 	 * Each CPU has a single path between source and destination.  As such
@@ -197,6 +209,7 @@
 static void *etm_setup_aux(struct perf_event *event, void **pages,
 			   int nr_pages, bool overwrite)
 {
+	u32 id;
 	int cpu = event->cpu;
 	cpumask_t *mask;
 	struct coresight_device *sink;
@@ -207,31 +220,40 @@
 		return NULL;
 	INIT_WORK(&event_data->work, free_event_data);
 
-	/*
-	 * In theory nothing prevent tracers in a trace session from being
-	 * associated with different sinks, nor having a sink per tracer.  But
-	 * until we have HW with this kind of topology we need to assume tracers
-	 * in a trace session are using the same sink.  Therefore go through
-	 * the coresight bus and pick the first enabled sink.
-	 *
-	 * When operated from sysFS users are responsible to enable the sink
-	 * while from perf, the perf tools will do it based on the choice made
-	 * on the cmd line.  As such the "enable_sink" flag in sysFS is reset.
-	 */
-	sink = coresight_get_enabled_sink(true);
+	/* First get the selected sink from user space. */
+	if (event->attr.config2) {
+		id = (u32)event->attr.config2;
+		sink = coresight_get_sink_by_id(id);
+	} else {
+		sink = coresight_get_enabled_sink(true);
+	}
+
 	if (!sink)
 		goto err;
 
 	mask = &event_data->mask;
 
-	/* Setup the path for each CPU in a trace session */
+	/*
+	 * Setup the path for each CPU in a trace session. We try to build
+	 * trace path for each CPU in the mask. If we don't find an ETM
+	 * for the CPU or fail to build a path, we clear the CPU from the
+	 * mask and continue with the rest. If ever we try to trace on those
+	 * CPUs, we can handle it and fail the session.
+	 */
 	for_each_cpu(cpu, mask) {
 		struct list_head *path;
 		struct coresight_device *csdev;
 
 		csdev = per_cpu(csdev_src, cpu);
-		if (!csdev)
-			goto err;
+		/*
+		 * If there is no ETM associated with this CPU clear it from
+		 * the mask and continue with the rest. If ever we try to trace
+		 * on this CPU, we handle it accordingly.
+		 */
+		if (!csdev) {
+			cpumask_clear_cpu(cpu, mask);
+			continue;
+		}
 
 		/*
 		 * Building a path doesn't enable it, it simply builds a
@@ -239,19 +261,25 @@
 		 * referenced later when the path is actually needed.
 		 */
 		path = coresight_build_path(csdev, sink);
-		if (IS_ERR(path))
-			goto err;
+		if (IS_ERR(path)) {
+			cpumask_clear_cpu(cpu, mask);
+			continue;
+		}
 
 		*etm_event_cpu_path_ptr(event_data, cpu) = path;
 	}
 
-	if (!sink_ops(sink)->alloc_buffer)
+	/* If we don't have any CPUs ready for tracing, abort */
+	cpu = cpumask_first(mask);
+	if (cpu >= nr_cpu_ids)
 		goto err;
 
-	cpu = cpumask_first(mask);
-	/* Get the AUX specific data from the sink buffer */
+	if (!sink_ops(sink)->alloc_buffer || !sink_ops(sink)->free_buffer)
+		goto err;
+
+	/* Allocate the sink buffer for this session */
 	event_data->snk_config =
-			sink_ops(sink)->alloc_buffer(sink, cpu, pages,
+			sink_ops(sink)->alloc_buffer(sink, event, pages,
 						     nr_pages, overwrite);
 	if (!event_data->snk_config)
 		goto err;
@@ -287,16 +315,11 @@
 	path = etm_event_cpu_path(event_data, cpu);
 	/* We need a sink, no need to continue without one */
 	sink = coresight_get_sink(path);
-	if (WARN_ON_ONCE(!sink || !sink_ops(sink)->set_buffer))
-		goto fail_end_stop;
-
-	/* Configure the sink */
-	if (sink_ops(sink)->set_buffer(sink, handle,
-				       event_data->snk_config))
+	if (WARN_ON_ONCE(!sink))
 		goto fail_end_stop;
 
 	/* Nothing will happen without a path */
-	if (coresight_enable_path(path, CS_MODE_PERF))
+	if (coresight_enable_path(path, CS_MODE_PERF, handle))
 		goto fail_end_stop;
 
 	/* Tell the perf core the event is alive */
@@ -356,15 +379,8 @@
 		if (!sink_ops(sink)->update_buffer)
 			return;
 
-		sink_ops(sink)->update_buffer(sink, handle,
+		size = sink_ops(sink)->update_buffer(sink, handle,
 					      event_data->snk_config);
-
-		if (!sink_ops(sink)->reset_buffer)
-			return;
-
-		size = sink_ops(sink)->reset_buffer(sink, handle,
-						    event_data->snk_config);
-
 		perf_aux_output_end(handle, size);
 	}
 
@@ -435,15 +451,16 @@
 static void etm_addr_filters_sync(struct perf_event *event)
 {
 	struct perf_addr_filters_head *head = perf_event_addr_filters(event);
-	unsigned long start, stop, *offs = event->addr_filters_offs;
+	unsigned long start, stop;
+	struct perf_addr_filter_range *fr = event->addr_filter_ranges;
 	struct etm_filters *filters = event->hw.addr_filters;
 	struct etm_filter *etm_filter;
 	struct perf_addr_filter *filter;
 	int i = 0;
 
 	list_for_each_entry(filter, &head->list, entry) {
-		start = filter->offset + offs[i];
-		stop = start + filter->size;
+		start = fr[i].start;
+		stop = start + fr[i].size;
 		etm_filter = &filters->etm_filter[i];
 
 		switch (filter->action) {
@@ -492,11 +509,84 @@
 	return 0;
 }
 
+static ssize_t etm_perf_sink_name_show(struct device *dev,
+				       struct device_attribute *dattr,
+				       char *buf)
+{
+	struct dev_ext_attribute *ea;
+
+	ea = container_of(dattr, struct dev_ext_attribute, attr);
+	return scnprintf(buf, PAGE_SIZE, "0x%lx\n", (unsigned long)(ea->var));
+}
+
+int etm_perf_add_symlink_sink(struct coresight_device *csdev)
+{
+	int ret;
+	unsigned long hash;
+	const char *name;
+	struct device *pmu_dev = etm_pmu.dev;
+	struct device *dev = &csdev->dev;
+	struct dev_ext_attribute *ea;
+
+	if (csdev->type != CORESIGHT_DEV_TYPE_SINK &&
+	    csdev->type != CORESIGHT_DEV_TYPE_LINKSINK)
+		return -EINVAL;
+
+	if (csdev->ea != NULL)
+		return -EINVAL;
+
+	if (!etm_perf_up)
+		return -EPROBE_DEFER;
+
+	ea = devm_kzalloc(dev, sizeof(*ea), GFP_KERNEL);
+	if (!ea)
+		return -ENOMEM;
+
+	name = dev_name(dev);
+	/* See function coresight_get_sink_by_id() to know where this is used */
+	hash = hashlen_hash(hashlen_string(NULL, name));
+
+	sysfs_attr_init(&ea->attr.attr);
+	ea->attr.attr.name = devm_kstrdup(dev, name, GFP_KERNEL);
+	if (!ea->attr.attr.name)
+		return -ENOMEM;
+
+	ea->attr.attr.mode = 0444;
+	ea->attr.show = etm_perf_sink_name_show;
+	ea->var = (unsigned long *)hash;
+
+	ret = sysfs_add_file_to_group(&pmu_dev->kobj,
+				      &ea->attr.attr, "sinks");
+
+	if (!ret)
+		csdev->ea = ea;
+
+	return ret;
+}
+
+void etm_perf_del_symlink_sink(struct coresight_device *csdev)
+{
+	struct device *pmu_dev = etm_pmu.dev;
+	struct dev_ext_attribute *ea = csdev->ea;
+
+	if (csdev->type != CORESIGHT_DEV_TYPE_SINK &&
+	    csdev->type != CORESIGHT_DEV_TYPE_LINKSINK)
+		return;
+
+	if (!ea)
+		return;
+
+	sysfs_remove_file_from_group(&pmu_dev->kobj,
+				     &ea->attr.attr, "sinks");
+	csdev->ea = NULL;
+}
+
 static int __init etm_perf_init(void)
 {
 	int ret;
 
-	etm_pmu.capabilities		= PERF_PMU_CAP_EXCLUSIVE;
+	etm_pmu.capabilities		= (PERF_PMU_CAP_EXCLUSIVE |
+					   PERF_PMU_CAP_ITRACE);
 
 	etm_pmu.attr_groups		= etm_pmu_attr_groups;
 	etm_pmu.task_ctx_nr		= perf_sw_context;
diff --git a/drivers/hwtracing/coresight/coresight-etm-perf.h b/drivers/hwtracing/coresight/coresight-etm-perf.h
index 4197df4..015213a 100644
--- a/drivers/hwtracing/coresight/coresight-etm-perf.h
+++ b/drivers/hwtracing/coresight/coresight-etm-perf.h
@@ -7,6 +7,7 @@
 #ifndef _CORESIGHT_ETM_PERF_H
 #define _CORESIGHT_ETM_PERF_H
 
+#include <linux/percpu-defs.h>
 #include "coresight-priv.h"
 
 struct coresight_device;
@@ -42,13 +43,42 @@
 	bool			ssstatus;
 };
 
+/**
+ * struct etm_event_data - Coresight specifics associated to an event
+ * @work:		Handle to free allocated memory outside IRQ context.
+ * @mask:		Hold the CPU(s) this event was set for.
+ * @snk_config:		The sink configuration.
+ * @path:		An array of path, each slot for one CPU.
+ */
+struct etm_event_data {
+	struct work_struct work;
+	cpumask_t mask;
+	void *snk_config;
+	struct list_head * __percpu *path;
+};
 
 #ifdef CONFIG_CORESIGHT
 int etm_perf_symlink(struct coresight_device *csdev, bool link);
+int etm_perf_add_symlink_sink(struct coresight_device *csdev);
+void etm_perf_del_symlink_sink(struct coresight_device *csdev);
+static inline void *etm_perf_sink_config(struct perf_output_handle *handle)
+{
+	struct etm_event_data *data = perf_get_aux(handle);
 
+	if (data)
+		return data->snk_config;
+	return NULL;
+}
 #else
 static inline int etm_perf_symlink(struct coresight_device *csdev, bool link)
 { return -EINVAL; }
+int etm_perf_add_symlink_sink(struct coresight_device *csdev)
+{ return -EINVAL; }
+void etm_perf_del_symlink_sink(struct coresight_device *csdev) {}
+static inline void *etm_perf_sink_config(struct perf_output_handle *handle)
+{
+	return NULL;
+}
 
 #endif /* CONFIG_CORESIGHT */
 
diff --git a/drivers/hwtracing/coresight/coresight-etm3x.c b/drivers/hwtracing/coresight/coresight-etm3x.c
index 7c74263..fd5c4cc 100644
--- a/drivers/hwtracing/coresight/coresight-etm3x.c
+++ b/drivers/hwtracing/coresight/coresight-etm3x.c
@@ -355,11 +355,10 @@
 	return 0;
 }
 
-static void etm_enable_hw(void *info)
+static int etm_enable_hw(struct etm_drvdata *drvdata)
 {
-	int i;
+	int i, rc;
 	u32 etmcr;
-	struct etm_drvdata *drvdata = info;
 	struct etm_config *config = &drvdata->config;
 
 	CS_UNLOCK(drvdata->base);
@@ -370,6 +369,9 @@
 	etm_set_pwrup(drvdata);
 	/* Make sure all registers are accessible */
 	etm_os_unlock(drvdata);
+	rc = coresight_claim_device_unlocked(drvdata->base);
+	if (rc)
+		goto done;
 
 	etm_set_prog(drvdata);
 
@@ -418,9 +420,29 @@
 	etm_writel(drvdata, 0x0, ETMVMIDCVR);
 
 	etm_clr_prog(drvdata);
+
+done:
+	if (rc)
+		etm_set_pwrdwn(drvdata);
 	CS_LOCK(drvdata->base);
 
-	dev_dbg(drvdata->dev, "cpu: %d enable smp call done\n", drvdata->cpu);
+	dev_dbg(drvdata->dev, "cpu: %d enable smp call done: %d\n",
+		drvdata->cpu, rc);
+	return rc;
+}
+
+struct etm_enable_arg {
+	struct etm_drvdata *drvdata;
+	int rc;
+};
+
+static void etm_enable_hw_smp_call(void *info)
+{
+	struct etm_enable_arg *arg = info;
+
+	if (WARN_ON(!arg))
+		return;
+	arg->rc = etm_enable_hw(arg->drvdata);
 }
 
 static int etm_cpu_id(struct coresight_device *csdev)
@@ -475,14 +497,13 @@
 	/* Configure the tracer based on the session's specifics */
 	etm_parse_event_config(drvdata, event);
 	/* And enable it */
-	etm_enable_hw(drvdata);
-
-	return 0;
+	return etm_enable_hw(drvdata);
 }
 
 static int etm_enable_sysfs(struct coresight_device *csdev)
 {
 	struct etm_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
+	struct etm_enable_arg arg = { 0 };
 	int ret;
 
 	spin_lock(&drvdata->spinlock);
@@ -492,20 +513,21 @@
 	 * hw configuration will take place on the local CPU during bring up.
 	 */
 	if (cpu_online(drvdata->cpu)) {
+		arg.drvdata = drvdata;
 		ret = smp_call_function_single(drvdata->cpu,
-					       etm_enable_hw, drvdata, 1);
-		if (ret)
-			goto err;
+					       etm_enable_hw_smp_call, &arg, 1);
+		if (!ret)
+			ret = arg.rc;
+		if (!ret)
+			drvdata->sticky_enable = true;
+	} else {
+		ret = -ENODEV;
 	}
 
-	drvdata->sticky_enable = true;
 	spin_unlock(&drvdata->spinlock);
 
-	dev_info(drvdata->dev, "ETM tracing enabled\n");
-	return 0;
-
-err:
-	spin_unlock(&drvdata->spinlock);
+	if (!ret)
+		dev_dbg(drvdata->dev, "ETM tracing enabled\n");
 	return ret;
 }
 
@@ -555,6 +577,8 @@
 	for (i = 0; i < drvdata->nr_cntr; i++)
 		config->cntr_val[i] = etm_readl(drvdata, ETMCNTVRn(i));
 
+	coresight_disclaim_device_unlocked(drvdata->base);
+
 	etm_set_pwrdwn(drvdata);
 	CS_LOCK(drvdata->base);
 
@@ -604,7 +628,7 @@
 	spin_unlock(&drvdata->spinlock);
 	cpus_read_unlock();
 
-	dev_info(drvdata->dev, "ETM tracing disabled\n");
+	dev_dbg(drvdata->dev, "ETM tracing disabled\n");
 }
 
 static void etm_disable(struct coresight_device *csdev,
diff --git a/drivers/hwtracing/coresight/coresight-etm4x.c b/drivers/hwtracing/coresight/coresight-etm4x.c
index 3f4b0b4..7b900f7 100644
--- a/drivers/hwtracing/coresight/coresight-etm4x.c
+++ b/drivers/hwtracing/coresight/coresight-etm4x.c
@@ -18,6 +18,7 @@
 #include <linux/stat.h>
 #include <linux/clk.h>
 #include <linux/cpu.h>
+#include <linux/cpu_pm.h>
 #include <linux/coresight.h>
 #include <linux/coresight-pmu.h>
 #include <linux/of.h>
@@ -27,6 +28,7 @@
 #include <linux/uaccess.h>
 #include <linux/perf_event.h>
 #include <linux/pm_runtime.h>
+#include <linux/property.h>
 #include <asm/sections.h>
 #include <asm/local.h>
 #include <asm/virt.h>
@@ -37,6 +39,15 @@
 static int boot_enable;
 module_param_named(boot_enable, boot_enable, int, S_IRUGO);
 
+#define PARAM_PM_SAVE_FIRMWARE	  0 /* save self-hosted state as per firmware */
+#define PARAM_PM_SAVE_NEVER	  1 /* never save any state */
+#define PARAM_PM_SAVE_SELF_HOSTED 2 /* save self-hosted state only */
+
+static int pm_save_enable = PARAM_PM_SAVE_FIRMWARE;
+module_param(pm_save_enable, int, 0444);
+MODULE_PARM_DESC(pm_save_enable,
+	"Save/restore state on power down: 1 = never, 2 = self-hosted");
+
 /* The number of ETMv4 currently registered */
 static int etm4_count;
 static struct etmv4_drvdata *etmdrvdata[NR_CPUS];
@@ -54,6 +65,14 @@
 	isb();
 }
 
+static void etm4_os_lock(struct etmv4_drvdata *drvdata)
+{
+	/* Writing 0x1 to TRCOSLAR locks the trace registers */
+	writel_relaxed(0x1, drvdata->base + TRCOSLAR);
+	drvdata->os_unlock = false;
+	isb();
+}
+
 static bool etm4_arch_supported(u8 arch)
 {
 	switch (arch) {
@@ -79,16 +98,24 @@
 	return drvdata->trcid;
 }
 
-static void etm4_enable_hw(void *info)
+struct etm4_enable_arg {
+	struct etmv4_drvdata *drvdata;
+	int rc;
+};
+
+static int etm4_enable_hw(struct etmv4_drvdata *drvdata)
 {
-	int i;
-	struct etmv4_drvdata *drvdata = info;
+	int i, rc;
 	struct etmv4_config *config = &drvdata->config;
 
 	CS_UNLOCK(drvdata->base);
 
 	etm4_os_unlock(drvdata);
 
+	rc = coresight_claim_device_unlocked(drvdata->base);
+	if (rc)
+		goto done;
+
 	/* Disable the trace unit before programming trace registers */
 	writel_relaxed(0, drvdata->base + TRCPRGCTLR);
 
@@ -130,8 +157,11 @@
 			       drvdata->base + TRCCNTVRn(i));
 	}
 
-	/* Resource selector pair 0 is always implemented and reserved */
-	for (i = 0; i < drvdata->nr_resource * 2; i++)
+	/*
+	 * Resource selector pair 0 is always implemented and reserved.  As
+	 * such start at 2.
+	 */
+	for (i = 2; i < drvdata->nr_resource * 2; i++)
 		writel_relaxed(config->res_ctrl[i],
 			       drvdata->base + TRCRSCTLRn(i));
 
@@ -184,9 +214,106 @@
 	dsb(sy);
 	isb();
 
+done:
 	CS_LOCK(drvdata->base);
 
-	dev_dbg(drvdata->dev, "cpu: %d enable smp call done\n", drvdata->cpu);
+	dev_dbg(drvdata->dev, "cpu: %d enable smp call done: %d\n",
+		drvdata->cpu, rc);
+	return rc;
+}
+
+static void etm4_enable_hw_smp_call(void *info)
+{
+	struct etm4_enable_arg *arg = info;
+
+	if (WARN_ON(!arg))
+		return;
+	arg->rc = etm4_enable_hw(arg->drvdata);
+}
+
+/*
+ * The goal of function etm4_config_timestamp_event() is to configure a
+ * counter that will tell the tracer to emit a timestamp packet when it
+ * reaches zero.  This is done in order to get a more fine grained idea
+ * of when instructions are executed so that they can be correlated
+ * with execution on other CPUs.
+ *
+ * To do this the counter itself is configured to self reload and
+ * TRCRSCTLR1 (always true) used to get the counter to decrement.  From
+ * there a resource selector is configured with the counter and the
+ * timestamp control register to use the resource selector to trigger the
+ * event that will insert a timestamp packet in the stream.
+ */
+static int etm4_config_timestamp_event(struct etmv4_drvdata *drvdata)
+{
+	int ctridx, ret = -EINVAL;
+	int counter, rselector;
+	u32 val = 0;
+	struct etmv4_config *config = &drvdata->config;
+
+	/* No point in trying if we don't have at least one counter */
+	if (!drvdata->nr_cntr)
+		goto out;
+
+	/* Find a counter that hasn't been initialised */
+	for (ctridx = 0; ctridx < drvdata->nr_cntr; ctridx++)
+		if (config->cntr_val[ctridx] == 0)
+			break;
+
+	/* All the counters have been configured already, bail out */
+	if (ctridx == drvdata->nr_cntr) {
+		pr_debug("%s: no available counter found\n", __func__);
+		ret = -ENOSPC;
+		goto out;
+	}
+
+	/*
+	 * Searching for an available resource selector to use, starting at
+	 * '2' since every implementation has at least 2 resource selector.
+	 * ETMIDR4 gives the number of resource selector _pairs_,
+	 * hence multiply by 2.
+	 */
+	for (rselector = 2; rselector < drvdata->nr_resource * 2; rselector++)
+		if (!config->res_ctrl[rselector])
+			break;
+
+	if (rselector == drvdata->nr_resource * 2) {
+		pr_debug("%s: no available resource selector found\n",
+			 __func__);
+		ret = -ENOSPC;
+		goto out;
+	}
+
+	/* Remember what counter we used */
+	counter = 1 << ctridx;
+
+	/*
+	 * Initialise original and reload counter value to the smallest
+	 * possible value in order to get as much precision as we can.
+	 */
+	config->cntr_val[ctridx] = 1;
+	config->cntrldvr[ctridx] = 1;
+
+	/* Set the trace counter control register */
+	val =  0x1 << 16	|  /* Bit 16, reload counter automatically */
+	       0x0 << 7		|  /* Select single resource selector */
+	       0x1;		   /* Resource selector 1, i.e always true */
+
+	config->cntr_ctrl[ctridx] = val;
+
+	val = 0x2 << 16		| /* Group 0b0010 - Counter and sequencers */
+	      counter << 0;	  /* Counter to use */
+
+	config->res_ctrl[rselector] = val;
+
+	val = 0x0 << 7		| /* Select single resource selector */
+	      rselector;	  /* Resource selector */
+
+	config->ts_ctrl = val;
+
+	ret = 0;
+out:
+	return ret;
 }
 
 static int etm4_parse_event_config(struct etmv4_drvdata *drvdata,
@@ -224,9 +351,29 @@
 		/* TRM: Must program this for cycacc to work */
 		config->ccctlr = ETM_CYC_THRESHOLD_DEFAULT;
 	}
-	if (attr->config & BIT(ETM_OPT_TS))
+	if (attr->config & BIT(ETM_OPT_TS)) {
+		/*
+		 * Configure timestamps to be emitted at regular intervals in
+		 * order to correlate instructions executed on different CPUs
+		 * (CPU-wide trace scenarios).
+		 */
+		ret = etm4_config_timestamp_event(drvdata);
+
+		/*
+		 * No need to go further if timestamp intervals can't
+		 * be configured.
+		 */
+		if (ret)
+			goto out;
+
 		/* bit[11], Global timestamp tracing bit */
 		config->cfg |= BIT(11);
+	}
+
+	if (attr->config & BIT(ETM_OPT_CTXTID))
+		/* bit[6], Context ID tracing bit */
+		config->cfg |= BIT(ETM4_CFG_BIT_CTXTID);
+
 	/* return stack - enable if selected and supported */
 	if ((attr->config & BIT(ETM_OPT_RETSTK)) && drvdata->retstack)
 		/* bit[12], Return stack enable bit */
@@ -252,7 +399,7 @@
 	if (ret)
 		goto out;
 	/* And enable it */
-	etm4_enable_hw(drvdata);
+	ret = etm4_enable_hw(drvdata);
 
 out:
 	return ret;
@@ -261,6 +408,7 @@
 static int etm4_enable_sysfs(struct coresight_device *csdev)
 {
 	struct etmv4_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
+	struct etm4_enable_arg arg = { 0 };
 	int ret;
 
 	spin_lock(&drvdata->spinlock);
@@ -269,19 +417,17 @@
 	 * Executing etm4_enable_hw on the cpu whose ETM is being enabled
 	 * ensures that register writes occur when cpu is powered.
 	 */
+	arg.drvdata = drvdata;
 	ret = smp_call_function_single(drvdata->cpu,
-				       etm4_enable_hw, drvdata, 1);
-	if (ret)
-		goto err;
-
-	drvdata->sticky_enable = true;
+				       etm4_enable_hw_smp_call, &arg, 1);
+	if (!ret)
+		ret = arg.rc;
+	if (!ret)
+		drvdata->sticky_enable = true;
 	spin_unlock(&drvdata->spinlock);
 
-	dev_info(drvdata->dev, "ETM tracing enabled\n");
-	return 0;
-
-err:
-	spin_unlock(&drvdata->spinlock);
+	if (!ret)
+		dev_dbg(drvdata->dev, "ETM tracing enabled\n");
 	return ret;
 }
 
@@ -344,6 +490,8 @@
 	isb();
 	writel_relaxed(control, drvdata->base + TRCPRGCTLR);
 
+	coresight_disclaim_device_unlocked(drvdata->base);
+
 	CS_LOCK(drvdata->base);
 
 	dev_dbg(drvdata->dev, "cpu: %d disable smp call done\n", drvdata->cpu);
@@ -396,7 +544,7 @@
 	spin_unlock(&drvdata->spinlock);
 	cpus_read_unlock();
 
-	dev_info(drvdata->dev, "ETM tracing disabled\n");
+	dev_dbg(drvdata->dev, "ETM tracing disabled\n");
 }
 
 static void etm4_disable(struct coresight_device *csdev,
@@ -958,6 +1106,288 @@
 	drvdata->trcid = coresight_get_trace_id(drvdata->cpu);
 }
 
+#ifdef CONFIG_CPU_PM
+static int etm4_cpu_save(struct etmv4_drvdata *drvdata)
+{
+	int i, ret = 0;
+	struct etmv4_save_state *state;
+	struct device *etm_dev = &drvdata->csdev->dev;
+
+	/*
+	 * As recommended by 3.4.1 ("The procedure when powering down the PE")
+	 * of ARM IHI 0064D
+	 */
+	dsb(sy);
+	isb();
+
+	CS_UNLOCK(drvdata->base);
+
+	/* Lock the OS lock to disable trace and external debugger access */
+	etm4_os_lock(drvdata);
+
+	/* wait for TRCSTATR.PMSTABLE to go up */
+	if (coresight_timeout(drvdata->base, TRCSTATR,
+			      TRCSTATR_PMSTABLE_BIT, 1)) {
+		dev_err(etm_dev,
+			"timeout while waiting for PM Stable Status\n");
+		etm4_os_unlock(drvdata);
+		ret = -EBUSY;
+		goto out;
+	}
+
+	state = drvdata->save_state;
+
+	state->trcprgctlr = readl(drvdata->base + TRCPRGCTLR);
+	state->trcprocselr = readl(drvdata->base + TRCPROCSELR);
+	state->trcconfigr = readl(drvdata->base + TRCCONFIGR);
+	state->trcauxctlr = readl(drvdata->base + TRCAUXCTLR);
+	state->trceventctl0r = readl(drvdata->base + TRCEVENTCTL0R);
+	state->trceventctl1r = readl(drvdata->base + TRCEVENTCTL1R);
+	state->trcstallctlr = readl(drvdata->base + TRCSTALLCTLR);
+	state->trctsctlr = readl(drvdata->base + TRCTSCTLR);
+	state->trcsyncpr = readl(drvdata->base + TRCSYNCPR);
+	state->trcccctlr = readl(drvdata->base + TRCCCCTLR);
+	state->trcbbctlr = readl(drvdata->base + TRCBBCTLR);
+	state->trctraceidr = readl(drvdata->base + TRCTRACEIDR);
+	state->trcqctlr = readl(drvdata->base + TRCQCTLR);
+
+	state->trcvictlr = readl(drvdata->base + TRCVICTLR);
+	state->trcviiectlr = readl(drvdata->base + TRCVIIECTLR);
+	state->trcvissctlr = readl(drvdata->base + TRCVISSCTLR);
+	state->trcvipcssctlr = readl(drvdata->base + TRCVIPCSSCTLR);
+	state->trcvdctlr = readl(drvdata->base + TRCVDCTLR);
+	state->trcvdsacctlr = readl(drvdata->base + TRCVDSACCTLR);
+	state->trcvdarcctlr = readl(drvdata->base + TRCVDARCCTLR);
+
+	for (i = 0; i < drvdata->nrseqstate; i++)
+		state->trcseqevr[i] = readl(drvdata->base + TRCSEQEVRn(i));
+
+	state->trcseqrstevr = readl(drvdata->base + TRCSEQRSTEVR);
+	state->trcseqstr = readl(drvdata->base + TRCSEQSTR);
+	state->trcextinselr = readl(drvdata->base + TRCEXTINSELR);
+
+	for (i = 0; i < drvdata->nr_cntr; i++) {
+		state->trccntrldvr[i] = readl(drvdata->base + TRCCNTRLDVRn(i));
+		state->trccntctlr[i] = readl(drvdata->base + TRCCNTCTLRn(i));
+		state->trccntvr[i] = readl(drvdata->base + TRCCNTVRn(i));
+	}
+
+	for (i = 0; i < drvdata->nr_resource * 2; i++)
+		state->trcrsctlr[i] = readl(drvdata->base + TRCRSCTLRn(i));
+
+	for (i = 0; i < drvdata->nr_ss_cmp; i++) {
+		state->trcssccr[i] = readl(drvdata->base + TRCSSCCRn(i));
+		state->trcsscsr[i] = readl(drvdata->base + TRCSSCSRn(i));
+		state->trcsspcicr[i] = readl(drvdata->base + TRCSSPCICRn(i));
+	}
+
+	for (i = 0; i < drvdata->nr_addr_cmp * 2; i++) {
+		state->trcacvr[i] = readl(drvdata->base + TRCACVRn(i));
+		state->trcacatr[i] = readl(drvdata->base + TRCACATRn(i));
+	}
+
+	/*
+	 * Data trace stream is architecturally prohibited for A profile cores
+	 * so we don't save (or later restore) trcdvcvr and trcdvcmr - As per
+	 * section 1.3.4 ("Possible functional configurations of an ETMv4 trace
+	 * unit") of ARM IHI 0064D.
+	 */
+
+	for (i = 0; i < drvdata->numcidc; i++)
+		state->trccidcvr[i] = readl(drvdata->base + TRCCIDCVRn(i));
+
+	for (i = 0; i < drvdata->numvmidc; i++)
+		state->trcvmidcvr[i] = readl(drvdata->base + TRCVMIDCVRn(i));
+
+	state->trccidcctlr0 = readl(drvdata->base + TRCCIDCCTLR0);
+	state->trccidcctlr1 = readl(drvdata->base + TRCCIDCCTLR1);
+
+	state->trcvmidcctlr0 = readl(drvdata->base + TRCVMIDCCTLR0);
+	state->trcvmidcctlr0 = readl(drvdata->base + TRCVMIDCCTLR1);
+
+	state->trcclaimset = readl(drvdata->base + TRCCLAIMCLR);
+
+	state->trcpdcr = readl(drvdata->base + TRCPDCR);
+
+	/* wait for TRCSTATR.IDLE to go up */
+	if (coresight_timeout(drvdata->base, TRCSTATR, TRCSTATR_IDLE_BIT, 1)) {
+		dev_err(etm_dev,
+			"timeout while waiting for Idle Trace Status\n");
+		etm4_os_unlock(drvdata);
+		ret = -EBUSY;
+		goto out;
+	}
+
+	drvdata->state_needs_restore = true;
+
+	/*
+	 * Power can be removed from the trace unit now. We do this to
+	 * potentially save power on systems that respect the TRCPDCR_PU
+	 * despite requesting software to save/restore state.
+	 */
+	writel_relaxed((state->trcpdcr & ~TRCPDCR_PU),
+			drvdata->base + TRCPDCR);
+
+out:
+	CS_LOCK(drvdata->base);
+	return ret;
+}
+
+static void etm4_cpu_restore(struct etmv4_drvdata *drvdata)
+{
+	int i;
+	struct etmv4_save_state *state = drvdata->save_state;
+
+	CS_UNLOCK(drvdata->base);
+
+	writel_relaxed(state->trcclaimset, drvdata->base + TRCCLAIMSET);
+
+	writel_relaxed(state->trcprgctlr, drvdata->base + TRCPRGCTLR);
+	writel_relaxed(state->trcprocselr, drvdata->base + TRCPROCSELR);
+	writel_relaxed(state->trcconfigr, drvdata->base + TRCCONFIGR);
+	writel_relaxed(state->trcauxctlr, drvdata->base + TRCAUXCTLR);
+	writel_relaxed(state->trceventctl0r, drvdata->base + TRCEVENTCTL0R);
+	writel_relaxed(state->trceventctl1r, drvdata->base + TRCEVENTCTL1R);
+	writel_relaxed(state->trcstallctlr, drvdata->base + TRCSTALLCTLR);
+	writel_relaxed(state->trctsctlr, drvdata->base + TRCTSCTLR);
+	writel_relaxed(state->trcsyncpr, drvdata->base + TRCSYNCPR);
+	writel_relaxed(state->trcccctlr, drvdata->base + TRCCCCTLR);
+	writel_relaxed(state->trcbbctlr, drvdata->base + TRCBBCTLR);
+	writel_relaxed(state->trctraceidr, drvdata->base + TRCTRACEIDR);
+	writel_relaxed(state->trcqctlr, drvdata->base + TRCQCTLR);
+
+	writel_relaxed(state->trcvictlr, drvdata->base + TRCVICTLR);
+	writel_relaxed(state->trcviiectlr, drvdata->base + TRCVIIECTLR);
+	writel_relaxed(state->trcvissctlr, drvdata->base + TRCVISSCTLR);
+	writel_relaxed(state->trcvipcssctlr, drvdata->base + TRCVIPCSSCTLR);
+	writel_relaxed(state->trcvdctlr, drvdata->base + TRCVDCTLR);
+	writel_relaxed(state->trcvdsacctlr, drvdata->base + TRCVDSACCTLR);
+	writel_relaxed(state->trcvdarcctlr, drvdata->base + TRCVDARCCTLR);
+
+	for (i = 0; i < drvdata->nrseqstate; i++)
+		writel_relaxed(state->trcseqevr[i],
+			       drvdata->base + TRCSEQEVRn(i));
+
+	writel_relaxed(state->trcseqrstevr, drvdata->base + TRCSEQRSTEVR);
+	writel_relaxed(state->trcseqstr, drvdata->base + TRCSEQSTR);
+	writel_relaxed(state->trcextinselr, drvdata->base + TRCEXTINSELR);
+
+	for (i = 0; i < drvdata->nr_cntr; i++) {
+		writel_relaxed(state->trccntrldvr[i],
+			       drvdata->base + TRCCNTRLDVRn(i));
+		writel_relaxed(state->trccntctlr[i],
+			       drvdata->base + TRCCNTCTLRn(i));
+		writel_relaxed(state->trccntvr[i],
+			       drvdata->base + TRCCNTVRn(i));
+	}
+
+	for (i = 0; i < drvdata->nr_resource * 2; i++)
+		writel_relaxed(state->trcrsctlr[i],
+			       drvdata->base + TRCRSCTLRn(i));
+
+	for (i = 0; i < drvdata->nr_ss_cmp; i++) {
+		writel_relaxed(state->trcssccr[i],
+			       drvdata->base + TRCSSCCRn(i));
+		writel_relaxed(state->trcsscsr[i],
+			       drvdata->base + TRCSSCSRn(i));
+		writel_relaxed(state->trcsspcicr[i],
+			       drvdata->base + TRCSSPCICRn(i));
+	}
+
+	for (i = 0; i < drvdata->nr_addr_cmp * 2; i++) {
+		writel_relaxed(state->trcacvr[i],
+			       drvdata->base + TRCACVRn(i));
+		writel_relaxed(state->trcacatr[i],
+			       drvdata->base + TRCACATRn(i));
+	}
+
+	for (i = 0; i < drvdata->numcidc; i++)
+		writel_relaxed(state->trccidcvr[i],
+			       drvdata->base + TRCCIDCVRn(i));
+
+	for (i = 0; i < drvdata->numvmidc; i++)
+		writel_relaxed(state->trcvmidcvr[i],
+			       drvdata->base + TRCVMIDCVRn(i));
+
+	writel_relaxed(state->trccidcctlr0, drvdata->base + TRCCIDCCTLR0);
+	writel_relaxed(state->trccidcctlr1, drvdata->base + TRCCIDCCTLR1);
+
+	writel_relaxed(state->trcvmidcctlr0, drvdata->base + TRCVMIDCCTLR0);
+	writel_relaxed(state->trcvmidcctlr0, drvdata->base + TRCVMIDCCTLR1);
+
+	writel_relaxed(state->trcclaimset, drvdata->base + TRCCLAIMSET);
+
+	writel_relaxed(state->trcpdcr, drvdata->base + TRCPDCR);
+
+	drvdata->state_needs_restore = false;
+
+	/*
+	 * As recommended by section 4.3.7 ("Synchronization when using the
+	 * memory-mapped interface") of ARM IHI 0064D
+	 */
+	dsb(sy);
+	isb();
+
+	/* Unlock the OS lock to re-enable trace and external debug access */
+	etm4_os_unlock(drvdata);
+	CS_LOCK(drvdata->base);
+}
+
+static int etm4_cpu_pm_notify(struct notifier_block *nb, unsigned long cmd,
+			      void *v)
+{
+	struct etmv4_drvdata *drvdata;
+	unsigned int cpu = smp_processor_id();
+
+	if (!etmdrvdata[cpu])
+		return NOTIFY_OK;
+
+	drvdata = etmdrvdata[cpu];
+
+	if (!drvdata->save_state)
+		return NOTIFY_OK;
+
+	if (WARN_ON_ONCE(drvdata->cpu != cpu))
+		return NOTIFY_BAD;
+
+	switch (cmd) {
+	case CPU_PM_ENTER:
+		/* save the state if self-hosted coresight is in use */
+		if (local_read(&drvdata->mode))
+			if (etm4_cpu_save(drvdata))
+				return NOTIFY_BAD;
+		break;
+	case CPU_PM_EXIT:
+		/* fallthrough */
+	case CPU_PM_ENTER_FAILED:
+		if (drvdata->state_needs_restore)
+			etm4_cpu_restore(drvdata);
+		break;
+	default:
+		return NOTIFY_DONE;
+	}
+
+	return NOTIFY_OK;
+}
+
+static struct notifier_block etm4_cpu_pm_nb = {
+	.notifier_call = etm4_cpu_pm_notify,
+};
+
+static int etm4_cpu_pm_register(void)
+{
+	return cpu_pm_register_notifier(&etm4_cpu_pm_nb);
+}
+
+static void etm4_cpu_pm_unregister(void)
+{
+	cpu_pm_unregister_notifier(&etm4_cpu_pm_nb);
+}
+#else
+static int etm4_cpu_pm_register(void) { return 0; }
+static void etm4_cpu_pm_unregister(void) { }
+#endif
+
 static int etm4_probe(struct amba_device *adev, const struct amba_id *id)
 {
 	int ret;
@@ -983,6 +1413,17 @@
 	drvdata->dev = &adev->dev;
 	dev_set_drvdata(dev, drvdata);
 
+	if (pm_save_enable == PARAM_PM_SAVE_FIRMWARE)
+		pm_save_enable = coresight_loses_context_with_cpu(dev) ?
+			       PARAM_PM_SAVE_SELF_HOSTED : PARAM_PM_SAVE_NEVER;
+
+	if (pm_save_enable != PARAM_PM_SAVE_NEVER) {
+		drvdata->save_state = devm_kmalloc(dev,
+				sizeof(struct etmv4_save_state), GFP_KERNEL);
+		if (!drvdata->save_state)
+			return -ENOMEM;
+	}
+
 	/* Validity for the resource is already checked by the AMBA core */
 	base = devm_ioremap_resource(dev, res);
 	if (IS_ERR(base))
@@ -1019,6 +1460,10 @@
 		if (ret < 0)
 			goto err_arch_supported;
 		hp_online = ret;
+
+		ret = etm4_cpu_pm_register();
+		if (ret)
+			goto err_arch_supported;
 	}
 
 	cpus_read_unlock();
@@ -1064,6 +1509,8 @@
 
 err_arch_supported:
 	if (--etm4_count == 0) {
+		etm4_cpu_pm_unregister();
+
 		cpuhp_remove_state_nocalls(CPUHP_AP_ARM_CORESIGHT_STARTING);
 		if (hp_online)
 			cpuhp_remove_state_nocalls(hp_online);
diff --git a/drivers/hwtracing/coresight/coresight-etm4x.h b/drivers/hwtracing/coresight/coresight-etm4x.h
index be7f94b..3ee1661 100644
--- a/drivers/hwtracing/coresight/coresight-etm4x.h
+++ b/drivers/hwtracing/coresight/coresight-etm4x.h
@@ -175,6 +175,7 @@
 					 ETM_MODE_EXCL_USER)
 
 #define TRCSTATR_IDLE_BIT		0
+#define TRCSTATR_PMSTABLE_BIT		1
 #define ETM_DEFAULT_ADDR_COMP		0
 
 /* PowerDown Control Register bits */
@@ -282,6 +283,65 @@
 };
 
 /**
+ * struct etm4_save_state - state to be preserved when ETM is without power
+ */
+struct etmv4_save_state {
+	u32	trcprgctlr;
+	u32	trcprocselr;
+	u32	trcconfigr;
+	u32	trcauxctlr;
+	u32	trceventctl0r;
+	u32	trceventctl1r;
+	u32	trcstallctlr;
+	u32	trctsctlr;
+	u32	trcsyncpr;
+	u32	trcccctlr;
+	u32	trcbbctlr;
+	u32	trctraceidr;
+	u32	trcqctlr;
+
+	u32	trcvictlr;
+	u32	trcviiectlr;
+	u32	trcvissctlr;
+	u32	trcvipcssctlr;
+	u32	trcvdctlr;
+	u32	trcvdsacctlr;
+	u32	trcvdarcctlr;
+
+	u32	trcseqevr[ETM_MAX_SEQ_STATES];
+	u32	trcseqrstevr;
+	u32	trcseqstr;
+	u32	trcextinselr;
+	u32	trccntrldvr[ETMv4_MAX_CNTR];
+	u32	trccntctlr[ETMv4_MAX_CNTR];
+	u32	trccntvr[ETMv4_MAX_CNTR];
+
+	u32	trcrsctlr[ETM_MAX_RES_SEL * 2];
+
+	u32	trcssccr[ETM_MAX_SS_CMP];
+	u32	trcsscsr[ETM_MAX_SS_CMP];
+	u32	trcsspcicr[ETM_MAX_SS_CMP];
+
+	u64	trcacvr[ETM_MAX_SINGLE_ADDR_CMP];
+	u64	trcacatr[ETM_MAX_SINGLE_ADDR_CMP];
+	u64	trccidcvr[ETMv4_MAX_CTXID_CMP];
+	u32	trcvmidcvr[ETM_MAX_VMID_CMP];
+	u32	trccidcctlr0;
+	u32	trccidcctlr1;
+	u32	trcvmidcctlr0;
+	u32	trcvmidcctlr1;
+
+	u32	trcclaimset;
+
+	u32	cntr_val[ETMv4_MAX_CNTR];
+	u32	seq_state;
+	u32	vinst_ctrl;
+	u32	ss_status[ETM_MAX_SS_CMP];
+
+	u32	trcpdcr;
+};
+
+/**
  * struct etm4_drvdata - specifics associated to an ETM component
  * @base:       Memory mapped base address for this component.
  * @dev:        The device entity associated to this component.
@@ -338,6 +398,8 @@
  * @lpoverride:	If the implementation can support low-power state over.
  * @tupwr_disable:	If disable the support of keeping trace unit powered.
  * @config:	structure holding configuration parameters.
+ * @save_state:	State to be preserved across power loss
+ * @state_needs_restore: True when there is context to restore after PM exit
  */
 struct etmv4_drvdata {
 	void __iomem			*base;
@@ -385,6 +447,8 @@
 	bool				lpoverride;
 	bool				tupwr_disable;
 	struct etmv4_config		config;
+	struct etmv4_save_state		*save_state;
+	bool				state_needs_restore;
 };
 
 /* Address comparator access types */
diff --git a/drivers/hwtracing/coresight/coresight-funnel.c b/drivers/hwtracing/coresight/coresight-funnel.c
index d217c21..6f4158b 100644
--- a/drivers/hwtracing/coresight/coresight-funnel.c
+++ b/drivers/hwtracing/coresight/coresight-funnel.c
@@ -12,6 +12,8 @@
 #include <linux/err.h>
 #include <linux/fs.h>
 #include <linux/slab.h>
+#include <linux/of.h>
+#include <linux/platform_device.h>
 #include <linux/pm_runtime.h>
 #include <linux/coresight.h>
 #include <linux/amba/bus.h>
@@ -26,6 +28,7 @@
 #define FUNNEL_HOLDTIME_MASK	0xf00
 #define FUNNEL_HOLDTIME_SHFT	0x8
 #define FUNNEL_HOLDTIME		(0x7 << FUNNEL_HOLDTIME_SHFT)
+#define FUNNEL_ENSx_MASK	0xff
 
 /**
  * struct funnel_drvdata - specifics associated to a funnel component
@@ -34,6 +37,7 @@
  * @atclk:	optional clock for the core parts of the funnel.
  * @csdev:	component vitals needed by the framework.
  * @priority:	port selection order.
+ * @spinlock:	serialize enable/disable operations.
  */
 struct funnel_drvdata {
 	void __iomem		*base;
@@ -41,36 +45,60 @@
 	struct clk		*atclk;
 	struct coresight_device	*csdev;
 	unsigned long		priority;
+	spinlock_t		spinlock;
 };
 
-static void funnel_enable_hw(struct funnel_drvdata *drvdata, int port)
+static int dynamic_funnel_enable_hw(struct funnel_drvdata *drvdata, int port)
 {
 	u32 functl;
+	int rc = 0;
 
 	CS_UNLOCK(drvdata->base);
 
 	functl = readl_relaxed(drvdata->base + FUNNEL_FUNCTL);
+	/* Claim the device only when we enable the first slave */
+	if (!(functl & FUNNEL_ENSx_MASK)) {
+		rc = coresight_claim_device_unlocked(drvdata->base);
+		if (rc)
+			goto done;
+	}
+
 	functl &= ~FUNNEL_HOLDTIME_MASK;
 	functl |= FUNNEL_HOLDTIME;
 	functl |= (1 << port);
 	writel_relaxed(functl, drvdata->base + FUNNEL_FUNCTL);
 	writel_relaxed(drvdata->priority, drvdata->base + FUNNEL_PRICTL);
-
+done:
 	CS_LOCK(drvdata->base);
+	return rc;
 }
 
 static int funnel_enable(struct coresight_device *csdev, int inport,
 			 int outport)
 {
+	int rc = 0;
 	struct funnel_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
+	unsigned long flags;
+	bool first_enable = false;
 
-	funnel_enable_hw(drvdata, inport);
+	spin_lock_irqsave(&drvdata->spinlock, flags);
+	if (atomic_read(&csdev->refcnt[inport]) == 0) {
+		if (drvdata->base)
+			rc = dynamic_funnel_enable_hw(drvdata, inport);
+		if (!rc)
+			first_enable = true;
+	}
+	if (!rc)
+		atomic_inc(&csdev->refcnt[inport]);
+	spin_unlock_irqrestore(&drvdata->spinlock, flags);
 
-	dev_info(drvdata->dev, "FUNNEL inport %d enabled\n", inport);
-	return 0;
+	if (first_enable)
+		dev_info(drvdata->dev, "FUNNEL inport %d enabled\n", inport);
+	return rc;
 }
 
-static void funnel_disable_hw(struct funnel_drvdata *drvdata, int inport)
+static void dynamic_funnel_disable_hw(struct funnel_drvdata *drvdata,
+				      int inport)
 {
 	u32 functl;
 
@@ -80,6 +108,10 @@
 	functl &= ~(1 << inport);
 	writel_relaxed(functl, drvdata->base + FUNNEL_FUNCTL);
 
+	/* Disclaim the device if none of the slaves are now active */
+	if (!(functl & FUNNEL_ENSx_MASK))
+		coresight_disclaim_device_unlocked(drvdata->base);
+
 	CS_LOCK(drvdata->base);
 }
 
@@ -87,10 +119,19 @@
 			   int outport)
 {
 	struct funnel_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
+	unsigned long flags;
+	bool last_disable = false;
 
-	funnel_disable_hw(drvdata, inport);
+	spin_lock_irqsave(&drvdata->spinlock, flags);
+	if (atomic_dec_return(&csdev->refcnt[inport]) == 0) {
+		if (drvdata->base)
+			dynamic_funnel_disable_hw(drvdata, inport);
+		last_disable = true;
+	}
+	spin_unlock_irqrestore(&drvdata->spinlock, flags);
 
-	dev_info(drvdata->dev, "FUNNEL inport %d disabled\n", inport);
+	if (last_disable)
+		dev_dbg(drvdata->dev, "FUNNEL inport %d disabled\n", inport);
 }
 
 static const struct coresight_ops_link funnel_link_ops = {
@@ -185,37 +226,38 @@
 	return of_address_to_resource(np, index, res);
 }
 
-static int funnel_probe(struct amba_device *adev, const struct amba_id *id)
+static int funnel_probe(struct device *dev, struct resource *res)
 {
 	int ret;
 	void __iomem *base;
-	struct device *dev = &adev->dev;
 	struct coresight_platform_data *pdata = NULL;
 	struct funnel_drvdata *drvdata;
-	struct resource *res;
 	struct resource res_real;
 	struct coresight_desc desc = { 0 };
-	struct device_node *np = adev->dev.of_node;
+	struct device_node *np = dev->of_node;
 
 	if (np) {
 		pdata = of_get_coresight_platform_data(dev, np);
 		if (IS_ERR(pdata))
 			return PTR_ERR(pdata);
-		adev->dev.platform_data = pdata;
+		dev->platform_data = pdata;
 	}
 
+	if (of_device_is_compatible(np, "arm,coresight-funnel"))
+		pr_warn_once("Uses OBSOLETE CoreSight funnel binding\n");
+
 	drvdata = devm_kzalloc(dev, sizeof(*drvdata), GFP_KERNEL);
 	if (!drvdata)
 		return -ENOMEM;
 
-	drvdata->dev = &adev->dev;
-	drvdata->atclk = devm_clk_get(&adev->dev, "atclk"); /* optional */
+	drvdata->dev = dev;
+	drvdata->atclk = devm_clk_get(dev, "atclk"); /* optional */
 	if (!IS_ERR(drvdata->atclk)) {
 		ret = clk_prepare_enable(drvdata->atclk);
 		if (ret)
 			return ret;
 	}
-	dev_set_drvdata(dev, drvdata);
+
 
 	if (of_property_read_bool(np, "qcom,duplicate-funnel")) {
 		ret = funnel_get_resource_byname(np, "funnel-base-real",
@@ -223,28 +265,49 @@
 		if (ret)
 			return ret;
 
+
 		res = &res_real;
 		base = devm_ioremap(dev, res->start, resource_size(res));
-	} else {
-		/* Validity of resource is already checked by the AMBA core */
-		res = &adev->res;
+		if (IS_ERR(base)) {
+			ret = PTR_ERR(base);
+			goto out_disable_clk;
+		}
+		drvdata->base = base;
+		desc.groups = coresight_funnel_groups;
+	} else if (res) {
+		/*
+		 * Map the device base for dynamic-funnel, which has been
+		 * validated by AMBA core.
+		 */
 		base = devm_ioremap_resource(dev, res);
+		if (IS_ERR(base)) {
+			ret = PTR_ERR(base);
+			goto out_disable_clk;
+		}
+		drvdata->base = base;
+		desc.groups = coresight_funnel_groups;
 	}
-	if (IS_ERR(base))
-		return PTR_ERR(base);
 
-	drvdata->base = base;
-	pm_runtime_put(&adev->dev);
+	dev_set_drvdata(dev, drvdata);
 
+	spin_lock_init(&drvdata->spinlock);
 	desc.type = CORESIGHT_DEV_TYPE_LINK;
 	desc.subtype.link_subtype = CORESIGHT_DEV_SUBTYPE_LINK_MERG;
 	desc.ops = &funnel_cs_ops;
 	desc.pdata = pdata;
 	desc.dev = dev;
-	desc.groups = coresight_funnel_groups;
 	drvdata->csdev = coresight_register(&desc);
+	if (IS_ERR(drvdata->csdev)) {
+		ret = PTR_ERR(drvdata->csdev);
+		goto out_disable_clk;
+	}
 
-	return PTR_ERR_OR_ZERO(drvdata->csdev);
+	pm_runtime_put(dev);
+
+out_disable_clk:
+	if (ret && !IS_ERR_OR_NULL(drvdata->atclk))
+		clk_disable_unprepare(drvdata->atclk);
+	return ret;
 }
 
 #ifdef CONFIG_PM
@@ -273,7 +336,48 @@
 	SET_RUNTIME_PM_OPS(funnel_runtime_suspend, funnel_runtime_resume, NULL)
 };
 
-static const struct amba_id funnel_ids[] = {
+static int static_funnel_probe(struct platform_device *pdev)
+{
+	int ret;
+
+	pm_runtime_get_noresume(&pdev->dev);
+	pm_runtime_set_active(&pdev->dev);
+	pm_runtime_enable(&pdev->dev);
+
+	/* Static funnel do not have programming base */
+	ret = funnel_probe(&pdev->dev, NULL);
+
+	if (ret) {
+		pm_runtime_put_noidle(&pdev->dev);
+		pm_runtime_disable(&pdev->dev);
+	}
+
+	return ret;
+}
+
+static const struct of_device_id static_funnel_match[] = {
+	{.compatible = "arm,coresight-static-funnel"},
+	{}
+};
+
+static struct platform_driver static_funnel_driver = {
+	.probe          = static_funnel_probe,
+	.driver         = {
+		.name   = "coresight-static-funnel",
+		.of_match_table = static_funnel_match,
+		.pm	= &funnel_dev_pm_ops,
+		.suppress_bind_attrs = true,
+	},
+};
+builtin_platform_driver(static_funnel_driver);
+
+static int dynamic_funnel_probe(struct amba_device *adev,
+				const struct amba_id *id)
+{
+	return funnel_probe(&adev->dev, &adev->res);
+}
+
+static const struct amba_id dynamic_funnel_ids[] = {
 	{
 		.id     = 0x000bb908,
 		.mask   = 0x000fffff,
@@ -286,14 +390,14 @@
 	{ 0, 0},
 };
 
-static struct amba_driver funnel_driver = {
+static struct amba_driver dynamic_funnel_driver = {
 	.drv = {
-		.name	= "coresight-funnel",
+		.name	= "coresight-dynamic-funnel",
 		.owner	= THIS_MODULE,
 		.pm	= &funnel_dev_pm_ops,
 		.suppress_bind_attrs = true,
 	},
-	.probe		= funnel_probe,
-	.id_table	= funnel_ids,
+	.probe		= dynamic_funnel_probe,
+	.id_table	= dynamic_funnel_ids,
 };
-builtin_amba_driver(funnel_driver);
+builtin_amba_driver(dynamic_funnel_driver);
diff --git a/drivers/hwtracing/coresight/coresight-ost.c b/drivers/hwtracing/coresight/coresight-ost.c
index de3513e..b1990fe 100644
--- a/drivers/hwtracing/coresight/coresight-ost.c
+++ b/drivers/hwtracing/coresight/coresight-ost.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2012-2018, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2018, 2020 The Linux Foundation. All rights reserved.
  */
 
 #include <linux/device.h>
@@ -172,9 +172,6 @@
 	uint32_t ch;
 	void __iomem *ch_addr;
 
-	if (!(drvdata && drvdata->master_enable))
-		return 0;
-
 	/* allocate channel and get the channel address */
 	ch = stm_channel_alloc();
 	if (unlikely(ch >= drvdata->numsp)) {
diff --git a/drivers/hwtracing/coresight/coresight-priv.h b/drivers/hwtracing/coresight/coresight-priv.h
index 6f11fee0..7498e38 100644
--- a/drivers/hwtracing/coresight/coresight-priv.h
+++ b/drivers/hwtracing/coresight/coresight-priv.h
@@ -26,6 +26,13 @@
 #define CORESIGHT_DEVID		0xfc8
 #define CORESIGHT_DEVTYPE	0xfcc
 
+
+/*
+ * Coresight device CLAIM protocol.
+ * See PSCI - ARM DEN 0022D, Section: 6.8.1 Debug and Trace save and restore.
+ */
+#define CORESIGHT_CLAIM_SELF_HOSTED	BIT(1)
+
 #define TIMEOUT_US		100
 #define BMVAL(val, lsb, msb)	((val & GENMASK(msb, lsb)) >> lsb)
 
@@ -138,9 +145,10 @@
 }
 
 void coresight_disable_path(struct list_head *path);
-int coresight_enable_path(struct list_head *path, u32 mode);
+int coresight_enable_path(struct list_head *path, u32 mode, void *sink_data);
 struct coresight_device *coresight_get_sink(struct list_head *path);
 struct coresight_device *coresight_get_enabled_sink(bool reset);
+struct coresight_device *coresight_get_sink_by_id(u32 id);
 struct list_head *coresight_build_path(struct coresight_device *csdev,
 				       struct coresight_device *sink);
 struct coresight_device *coresight_get_source(struct list_head *path);
diff --git a/drivers/hwtracing/coresight/coresight-replicator.c b/drivers/hwtracing/coresight/coresight-replicator.c
index 8d2eaaa..344e73e 100644
--- a/drivers/hwtracing/coresight/coresight-replicator.c
+++ b/drivers/hwtracing/coresight/coresight-replicator.c
@@ -35,7 +35,8 @@
 {
 	struct replicator_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
 
-	dev_info(drvdata->dev, "REPLICATOR enabled\n");
+	if (atomic_inc_return(&csdev->refcnt[outport]) == 1)
+		dev_dbg(drvdata->dev, "REPLICATOR enabled\n");
 	return 0;
 }
 
@@ -44,7 +45,8 @@
 {
 	struct replicator_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
 
-	dev_info(drvdata->dev, "REPLICATOR disabled\n");
+	if (atomic_dec_return(&csdev->refcnt[outport]) == 0)
+		dev_dbg(drvdata->dev, "REPLICATOR disabled\n");
 }
 
 static const struct coresight_ops_link replicator_link_ops = {
diff --git a/drivers/hwtracing/coresight/coresight-stm.c b/drivers/hwtracing/coresight/coresight-stm.c
index e835cf6..4e8fd28 100644
--- a/drivers/hwtracing/coresight/coresight-stm.c
+++ b/drivers/hwtracing/coresight/coresight-stm.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Copyright (c) 2015-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2015-2020, The Linux Foundation. All rights reserved.
  *
  * Description: CoreSight System Trace Macrocell driver
  *
@@ -26,7 +26,6 @@
 #include <linux/perf_event.h>
 #include <linux/pm_runtime.h>
 #include <linux/stm.h>
-#include <linux/nvmem-consumer.h>
 
 #include "coresight-ost.h"
 #include "coresight-priv.h"
@@ -73,9 +72,6 @@
 /* Reserve the first 10 channels for kernel usage */
 #define STM_CHANNEL_OFFSET		0
 
-#define APPS_NIDEN_SHIFT			17
-#define APPS_DBGEN_SHIFT			16
-
 static int boot_nr_channel;
 
 /*
@@ -361,9 +357,6 @@
 	if (!(drvdata && local_read(&drvdata->mode)))
 		return -EACCES;
 
-	if (!drvdata->master_enable)
-		return -EPERM;
-
 	if (channel >= drvdata->numsp)
 		return -EINVAL;
 
@@ -779,13 +772,6 @@
 	drvdata->stm.set_options = stm_generic_set_options;
 }
 
-static bool is_apps_debug_disabled(u32 val)
-{
-	val &= BIT(APPS_NIDEN_SHIFT);
-
-	return val == 0;
-}
-
 static int stm_probe(struct amba_device *adev, const struct amba_id *id)
 {
 	int ret;
@@ -796,11 +782,9 @@
 	struct stm_drvdata *drvdata;
 	struct resource *res = &adev->res;
 	struct resource ch_res;
-	struct resource debug_ch_res;
 	size_t res_size, bitmap_size;
 	struct coresight_desc desc = { 0 };
 	struct device_node *np = adev->dev.of_node;
-	u32 val;
 
 	if (np) {
 		pdata = of_get_coresight_platform_data(dev, np);
@@ -836,29 +820,6 @@
 		return PTR_ERR(base);
 	drvdata->chs.base = base;
 
-	ret = stm_get_resource_byname(np, "stm-debug-status", &debug_ch_res);
-	/*
-	 * By default, master enable is true, means not controlled
-	 * by debug status register
-	 */
-	if (!ret) {
-		drvdata->debug_status_chs.phys = debug_ch_res.start;
-		base = devm_ioremap_resource(dev, &debug_ch_res);
-		if (!IS_ERR(base)) {
-			drvdata->debug_status_chs.base = base;
-			val = readl_relaxed(drvdata->debug_status_chs.base);
-			drvdata->master_enable =
-				!is_apps_debug_disabled(val);
-		}
-	} else {
-		ret = nvmem_cell_read_u32(&adev->dev, "debug_fuse", &val);
-		if (!ret) {
-			drvdata->master_enable =
-				!is_apps_debug_disabled(val);
-		} else
-			drvdata->master_enable = true;
-	}
-
 	drvdata->write_bytes = stm_fundamental_data_size(drvdata);
 
 	if (boot_nr_channel) {
@@ -907,8 +868,7 @@
 
 	pm_runtime_put(&adev->dev);
 
-	dev_info(dev, "%s initialized with master %s\n", (char *)id->data,
-		       drvdata->master_enable ? "Enabled" : "Disabled");
+	dev_info(dev, "%s initialized\n", (char *)id->data);
 	return 0;
 
 stm_unregister:
diff --git a/drivers/hwtracing/coresight/coresight-tmc-etf.c b/drivers/hwtracing/coresight/coresight-tmc-etf.c
index 594d987..5ae8c65 100644
--- a/drivers/hwtracing/coresight/coresight-tmc-etf.c
+++ b/drivers/hwtracing/coresight/coresight-tmc-etf.c
@@ -4,14 +4,19 @@
  * Author: Mathieu Poirier <mathieu.poirier@linaro.org>
  */
 
+#include <linux/atomic.h>
 #include <linux/circ_buf.h>
 #include <linux/coresight.h>
 #include <linux/perf_event.h>
 #include <linux/slab.h>
 #include "coresight-priv.h"
 #include "coresight-tmc.h"
+#include "coresight-etm-perf.h"
 
-static void tmc_etb_enable_hw(struct tmc_drvdata *drvdata)
+static int tmc_set_etf_buffer(struct coresight_device *csdev,
+			      struct perf_output_handle *handle);
+
+static void __tmc_etb_enable_hw(struct tmc_drvdata *drvdata)
 {
 	CS_UNLOCK(drvdata->base);
 
@@ -30,6 +35,17 @@
 	CS_LOCK(drvdata->base);
 }
 
+static int tmc_etb_enable_hw(struct tmc_drvdata *drvdata)
+{
+	int rc = coresight_claim_device(drvdata->base);
+
+	if (rc)
+		return rc;
+
+	__tmc_etb_enable_hw(drvdata);
+	return 0;
+}
+
 static void tmc_etb_dump_hw(struct tmc_drvdata *drvdata)
 {
 	char *bufp;
@@ -56,7 +72,7 @@
 	return;
 }
 
-static void tmc_etb_disable_hw(struct tmc_drvdata *drvdata)
+static void __tmc_etb_disable_hw(struct tmc_drvdata *drvdata)
 {
 	CS_UNLOCK(drvdata->base);
 
@@ -72,7 +88,13 @@
 	CS_LOCK(drvdata->base);
 }
 
-static void tmc_etf_enable_hw(struct tmc_drvdata *drvdata)
+static void tmc_etb_disable_hw(struct tmc_drvdata *drvdata)
+{
+	coresight_disclaim_device(drvdata);
+	__tmc_etb_disable_hw(drvdata);
+}
+
+static void __tmc_etf_enable_hw(struct tmc_drvdata *drvdata)
 {
 	CS_UNLOCK(drvdata->base);
 
@@ -88,13 +110,24 @@
 	CS_LOCK(drvdata->base);
 }
 
+static int tmc_etf_enable_hw(struct tmc_drvdata *drvdata)
+{
+	int rc = coresight_claim_device(drvdata->base);
+
+	if (rc)
+		return rc;
+
+	__tmc_etf_enable_hw(drvdata);
+	return 0;
+}
+
 static void tmc_etf_disable_hw(struct tmc_drvdata *drvdata)
 {
 	CS_UNLOCK(drvdata->base);
 
 	tmc_flush_and_stop(drvdata);
 	tmc_disable_hw(drvdata);
-
+	coresight_disclaim_device_unlocked(drvdata->base);
 	CS_LOCK(drvdata->base);
 }
 
@@ -151,8 +184,10 @@
 	 * sink is already enabled no memory is needed and the HW need not be
 	 * touched.
 	 */
-	if (drvdata->mode == CS_MODE_SYSFS)
+	if (drvdata->mode == CS_MODE_SYSFS) {
+		atomic_inc(csdev->refcnt);
 		goto out;
+	}
 
 	/*
 	 * If drvdata::buf isn't NULL, memory was allocated for a previous
@@ -170,8 +205,14 @@
 		drvdata->buf = buf;
 	}
 
-	drvdata->mode = CS_MODE_SYSFS;
-	tmc_etb_enable_hw(drvdata);
+	ret = tmc_etb_enable_hw(drvdata);
+	if (!ret) {
+		drvdata->mode = CS_MODE_SYSFS;
+		atomic_inc(csdev->refcnt);
+	} else {
+		/* Free up the buffer if we failed to enable */
+		used = false;
+	}
 out:
 	spin_unlock_irqrestore(&drvdata->spinlock, flags);
 
@@ -188,37 +229,42 @@
 	return ret;
 }
 
-static int tmc_enable_etf_sink_perf(struct coresight_device *csdev)
+static int tmc_enable_etf_sink_perf(struct coresight_device *csdev, void *data)
 {
 	int ret = 0;
 	unsigned long flags;
 	struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
+	struct perf_output_handle *handle = data;
 
 	spin_lock_irqsave(&drvdata->spinlock, flags);
-	if (drvdata->reading) {
+	do {
 		ret = -EINVAL;
-		goto out;
-	}
+		if (drvdata->reading)
+			break;
+		/*
+		 * In Perf mode there can be only one writer per sink.  There
+		 * is also no need to continue if the ETB/ETF is already
+		 * operated from sysFS.
+		 */
+		if (drvdata->mode != CS_MODE_DISABLED)
+			break;
 
-	/*
-	 * In Perf mode there can be only one writer per sink.  There
-	 * is also no need to continue if the ETB/ETR is already operated
-	 * from sysFS.
-	 */
-	if (drvdata->mode != CS_MODE_DISABLED) {
-		ret = -EINVAL;
-		goto out;
-	}
-
-	drvdata->mode = CS_MODE_PERF;
-	tmc_etb_enable_hw(drvdata);
-out:
+		ret = tmc_set_etf_buffer(csdev, handle);
+		if (ret)
+			break;
+		ret  = tmc_etb_enable_hw(drvdata);
+		if (!ret) {
+			drvdata->mode = CS_MODE_PERF;
+			atomic_inc(csdev->refcnt);
+		}
+	} while (0);
 	spin_unlock_irqrestore(&drvdata->spinlock, flags);
 
 	return ret;
 }
 
-static int tmc_enable_etf_sink(struct coresight_device *csdev, u32 mode)
+static int tmc_enable_etf_sink(struct coresight_device *csdev,
+			       u32 mode, void *data)
 {
 	int ret;
 	struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
@@ -228,7 +274,7 @@
 		ret = tmc_enable_etf_sink_sysfs(csdev);
 		break;
 	case CS_MODE_PERF:
-		ret = tmc_enable_etf_sink_perf(csdev);
+		ret = tmc_enable_etf_sink_perf(csdev, data);
 		break;
 	/* We shouldn't be here */
 	default:
@@ -239,40 +285,48 @@
 	if (ret)
 		return ret;
 
-	dev_info(drvdata->dev, "TMC-ETB/ETF enabled\n");
+	dev_dbg(drvdata->dev, "TMC-ETB/ETF enabled\n");
 	return 0;
 }
 
-static void tmc_disable_etf_sink(struct coresight_device *csdev)
+static int tmc_disable_etf_sink(struct coresight_device *csdev)
 {
 	unsigned long flags;
 	struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
 
 	spin_lock_irqsave(&drvdata->spinlock, flags);
+
 	if (drvdata->reading) {
 		spin_unlock_irqrestore(&drvdata->spinlock, flags);
-		return;
+		return -EBUSY;
 	}
 
-	/* Disable the TMC only if it needs to */
-	if (drvdata->mode != CS_MODE_DISABLED) {
-		tmc_etb_disable_hw(drvdata);
-		drvdata->mode = CS_MODE_DISABLED;
+	if (atomic_dec_return(csdev->refcnt)) {
+		spin_unlock_irqrestore(&drvdata->spinlock, flags);
+		return -EBUSY;
 	}
 
+	/* Complain if we (somehow) got out of sync */
+	WARN_ON_ONCE(drvdata->mode == CS_MODE_DISABLED);
+	tmc_etb_disable_hw(drvdata);
+	drvdata->mode = CS_MODE_DISABLED;
+
 	spin_unlock_irqrestore(&drvdata->spinlock, flags);
 
 	coresight_cti_unmap_trigin(drvdata->cti_reset, 0, 0);
 	coresight_cti_unmap_trigout(drvdata->cti_flush, 1, 0);
 
-	dev_info(drvdata->dev, "TMC-ETB/ETF disabled\n");
+	dev_dbg(drvdata->dev, "TMC-ETB/ETF disabled\n");
+	return 0;
 }
 
 static int tmc_enable_etf_link(struct coresight_device *csdev,
 			       int inport, int outport)
 {
+	int ret = 0;
 	unsigned long flags;
 	struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
+	bool first_enable = false;
 
 	spin_lock_irqsave(&drvdata->spinlock, flags);
 	if (drvdata->reading) {
@@ -280,12 +334,20 @@
 		return -EBUSY;
 	}
 
-	tmc_etf_enable_hw(drvdata);
-	drvdata->mode = CS_MODE_SYSFS;
+	if (atomic_read(&csdev->refcnt[0]) == 0) {
+		ret = tmc_etf_enable_hw(drvdata);
+		if (!ret) {
+			drvdata->mode = CS_MODE_SYSFS;
+			first_enable = true;
+		}
+	}
+	if (!ret)
+		atomic_inc(&csdev->refcnt[0]);
 	spin_unlock_irqrestore(&drvdata->spinlock, flags);
 
-	dev_info(drvdata->dev, "TMC-ETF enabled\n");
-	return 0;
+	if (first_enable)
+		dev_dbg(drvdata->dev, "TMC-ETF enabled\n");
+	return ret;
 }
 
 static void tmc_disable_etf_link(struct coresight_device *csdev,
@@ -293,6 +355,7 @@
 {
 	unsigned long flags;
 	struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
+	bool last_disable = false;
 
 	spin_lock_irqsave(&drvdata->spinlock, flags);
 	if (drvdata->reading) {
@@ -300,17 +363,22 @@
 		return;
 	}
 
-	tmc_etf_disable_hw(drvdata);
-	drvdata->mode = CS_MODE_DISABLED;
+	if (atomic_dec_return(&csdev->refcnt[0]) == 0) {
+		tmc_etf_disable_hw(drvdata);
+		drvdata->mode = CS_MODE_DISABLED;
+		last_disable = true;
+	}
 	spin_unlock_irqrestore(&drvdata->spinlock, flags);
 
-	dev_info(drvdata->dev, "TMC-ETF disabled\n");
+	if (last_disable)
+		dev_dbg(drvdata->dev, "TMC-ETF disabled\n");
 }
 
-static void *tmc_alloc_etf_buffer(struct coresight_device *csdev, int cpu,
-				  void **pages, int nr_pages, bool overwrite)
+static void *tmc_alloc_etf_buffer(struct coresight_device *csdev,
+				  struct perf_event *event, void **pages,
+				  int nr_pages, bool overwrite)
 {
-	int node;
+	int node, cpu = event->cpu;
 	struct cs_buffers *buf;
 
 	if (cpu == -1)
@@ -337,12 +405,14 @@
 }
 
 static int tmc_set_etf_buffer(struct coresight_device *csdev,
-			      struct perf_output_handle *handle,
-			      void *sink_config)
+			      struct perf_output_handle *handle)
 {
 	int ret = 0;
 	unsigned long head;
-	struct cs_buffers *buf = sink_config;
+	struct cs_buffers *buf = etm_perf_sink_config(handle);
+
+	if (!buf)
+		return -EINVAL;
 
 	/* wrap head around to the amount of space we have */
 	head = handle->head & ((buf->nr_pages << PAGE_SHIFT) - 1);
@@ -358,36 +428,7 @@
 	return ret;
 }
 
-static unsigned long tmc_reset_etf_buffer(struct coresight_device *csdev,
-					  struct perf_output_handle *handle,
-					  void *sink_config)
-{
-	long size = 0;
-	struct cs_buffers *buf = sink_config;
-
-	if (buf) {
-		/*
-		 * In snapshot mode ->data_size holds the new address of the
-		 * ring buffer's head.  The size itself is the whole address
-		 * range since we want the latest information.
-		 */
-		if (buf->snapshot)
-			handle->head = local_xchg(&buf->data_size,
-						  buf->nr_pages << PAGE_SHIFT);
-		/*
-		 * Tell the tracer PMU how much we got in this run and if
-		 * something went wrong along the way.  Nobody else can use
-		 * this cs_buffers instance until we are done.  As such
-		 * resetting parameters here and squaring off with the ring
-		 * buffer API in the tracer PMU is fine.
-		 */
-		size = local_xchg(&buf->data_size, 0);
-	}
-
-	return size;
-}
-
-static void tmc_update_etf_buffer(struct coresight_device *csdev,
+static unsigned long tmc_update_etf_buffer(struct coresight_device *csdev,
 				  struct perf_output_handle *handle,
 				  void *sink_config)
 {
@@ -396,18 +437,19 @@
 	const u32 *barrier;
 	u32 *buf_ptr;
 	u64 read_ptr, write_ptr;
-	u32 status, to_read;
-	unsigned long offset;
+	u32 status;
+	unsigned long offset, to_read, flags;
 	struct cs_buffers *buf = sink_config;
 	struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
 
 	if (!buf)
-		return;
+		return 0;
 
 	/* This shouldn't happen */
 	if (WARN_ON_ONCE(drvdata->mode != CS_MODE_PERF))
-		return;
+		return 0;
 
+	spin_lock_irqsave(&drvdata->spinlock, flags);
 	CS_UNLOCK(drvdata->base);
 
 	tmc_flush_and_stop(drvdata);
@@ -430,33 +472,16 @@
 	/*
 	 * The TMC RAM buffer may be bigger than the space available in the
 	 * perf ring buffer (handle->size).  If so advance the RRP so that we
-	 * get the latest trace data.
+	 * get the latest trace data.  In snapshot mode none of that matters
+	 * since we are expected to clobber stale data in favour of the latest
+	 * traces.
 	 */
-	if (to_read > handle->size) {
-		u32 mask = 0;
-
-		/*
-		 * The value written to RRP must be byte-address aligned to
-		 * the width of the trace memory databus _and_ to a frame
-		 * boundary (16 byte), whichever is the biggest. For example,
-		 * for 32-bit, 64-bit and 128-bit wide trace memory, the four
-		 * LSBs must be 0s. For 256-bit wide trace memory, the five
-		 * LSBs must be 0s.
-		 */
-		switch (drvdata->memwidth) {
-		case TMC_MEM_INTF_WIDTH_32BITS:
-		case TMC_MEM_INTF_WIDTH_64BITS:
-		case TMC_MEM_INTF_WIDTH_128BITS:
-			mask = GENMASK(31, 4);
-			break;
-		case TMC_MEM_INTF_WIDTH_256BITS:
-			mask = GENMASK(31, 5);
-			break;
-		}
+	if (!buf->snapshot && to_read > handle->size) {
+		u32 mask = tmc_get_memwidth_mask(drvdata);
 
 		/*
 		 * Make sure the new size is aligned in accordance with the
-		 * requirement explained above.
+		 * requirement explained in function tmc_get_memwidth_mask().
 		 */
 		to_read = handle->size & mask;
 		/* Move the RAM read pointer up */
@@ -469,7 +494,13 @@
 		lost = true;
 	}
 
-	if (lost)
+	/*
+	 * Don't set the TRUNCATED flag in snapshot mode because 1) the
+	 * captured buffer is expected to be truncated and 2) a full buffer
+	 * prevents the event from being re-enabled by the perf core,
+	 * resulting in stale data being send to user space.
+	 */
+	if (!buf->snapshot && lost)
 		perf_aux_output_flag(handle, PERF_AUX_FLAG_TRUNCATED);
 
 	cur = buf->cur;
@@ -495,18 +526,15 @@
 		}
 	}
 
-	/*
-	 * In snapshot mode all we have to do is communicate to
-	 * perf_aux_output_end() the address of the current head.  In full
-	 * trace mode the same function expects a size to move rb->aux_head
-	 * forward.
-	 */
-	if (buf->snapshot)
-		local_set(&buf->data_size, (cur * PAGE_SIZE) + offset);
-	else
-		local_add(to_read, &buf->data_size);
-
+	/* In snapshot mode we have to update the head */
+	if (buf->snapshot) {
+		handle->head = (cur * PAGE_SIZE) + offset;
+		to_read = buf->nr_pages << PAGE_SHIFT;
+	}
 	CS_LOCK(drvdata->base);
+	spin_unlock_irqrestore(&drvdata->spinlock, flags);
+
+	return to_read;
 }
 
 static const struct coresight_ops_sink tmc_etf_sink_ops = {
@@ -514,8 +542,6 @@
 	.disable	= tmc_disable_etf_sink,
 	.alloc_buffer	= tmc_alloc_etf_buffer,
 	.free_buffer	= tmc_free_etf_buffer,
-	.set_buffer	= tmc_set_etf_buffer,
-	.reset_buffer	= tmc_reset_etf_buffer,
 	.update_buffer	= tmc_update_etf_buffer,
 };
 
@@ -577,7 +603,7 @@
 		spin_unlock_irqrestore(&drvdata->spinlock, flags);
 		coresight_disable_all_source_link();
 		spin_lock_irqsave(&drvdata->spinlock, flags);
-		tmc_etb_disable_hw(drvdata);
+		__tmc_etb_disable_hw(drvdata);
 	}
 	drvdata->reading = true;
 out:
@@ -620,7 +646,7 @@
 		 * can't be NULL.
 		 */
 		memset(drvdata->buf, 0, drvdata->size);
-		tmc_etb_enable_hw(drvdata);
+		__tmc_etb_enable_hw(drvdata);
 		spin_unlock_irqrestore(&drvdata->spinlock, flags);
 		coresight_enable_all_source_link();
 		spin_lock_irqsave(&drvdata->spinlock, flags);
diff --git a/drivers/hwtracing/coresight/coresight-tmc-etr.c b/drivers/hwtracing/coresight/coresight-tmc-etr.c
index 37139ef..e2a2990 100644
--- a/drivers/hwtracing/coresight/coresight-tmc-etr.c
+++ b/drivers/hwtracing/coresight/coresight-tmc-etr.c
@@ -4,16 +4,48 @@
  * Author: Mathieu Poirier <mathieu.poirier@linaro.org>
  */
 
+#include <linux/atomic.h>
 #include <linux/coresight.h>
 #include <linux/dma-mapping.h>
 #include <linux/iommu.h>
+#include <linux/idr.h>
+#include <linux/mutex.h>
+#include <linux/refcount.h>
 #include <linux/slab.h>
+#include <linux/types.h>
 #include <linux/vmalloc.h>
 #include "coresight-catu.h"
+#include "coresight-etm-perf.h"
 #include "coresight-priv.h"
 #include "coresight-tmc.h"
 
 /*
+ * etr_perf_buffer - Perf buffer used for ETR
+ * @drvdata		- The ETR drvdaga this buffer has been allocated for.
+ * @etr_buf		- Actual buffer used by the ETR
+ * @pid			- The PID this etr_perf_buffer belongs to.
+ * @snaphost		- Perf session mode
+ * @head		- handle->head at the beginning of the session.
+ * @nr_pages		- Number of pages in the ring buffer.
+ * @pages		- Array of Pages in the ring buffer.
+ */
+struct etr_perf_buffer {
+	struct tmc_drvdata	*drvdata;
+	struct etr_buf		*etr_buf;
+	pid_t			pid;
+	bool			snapshot;
+	unsigned long		head;
+	int			nr_pages;
+	void			**pages;
+};
+
+/* Convert the perf index to an offset within the ETR buffer */
+#define PERF_IDX2OFF(idx, buf)	((idx) % ((buf)->nr_pages << PAGE_SHIFT))
+
+/* Lower limit for ETR hardware buffer */
+#define TMC_ETR_PERF_MIN_BUF_SIZE	SZ_1M
+
+/*
  * The TMC ETR SG has a page size of 4K. The SG table contains pointers
  * to 4KB buffers. However, the OS may use a PAGE_SIZE different from
  * 4K (i.e, 16KB or 64KB). This implies that a single OS page could
@@ -736,12 +768,14 @@
 	return NULL;
 }
 
-static inline void tmc_etr_enable_catu(struct tmc_drvdata *drvdata)
+static inline int tmc_etr_enable_catu(struct tmc_drvdata *drvdata,
+				      struct etr_buf *etr_buf)
 {
 	struct coresight_device *catu = tmc_etr_get_catu_device(drvdata);
 
 	if (catu && helper_ops(catu)->enable)
-		helper_ops(catu)->enable(catu, drvdata->etr_buf);
+		return helper_ops(catu)->enable(catu, etr_buf);
+	return 0;
 }
 
 static inline void tmc_etr_disable_catu(struct tmc_drvdata *drvdata)
@@ -755,7 +789,8 @@
 static const struct etr_buf_operations *etr_buf_ops[] = {
 	[ETR_MODE_FLAT] = &etr_flat_buf_ops,
 	[ETR_MODE_ETR_SG] = &etr_sg_buf_ops,
-	[ETR_MODE_CATU] = &etr_catu_buf_ops,
+	[ETR_MODE_CATU] = IS_ENABLED(CONFIG_CORESIGHT_CATU)
+						? &etr_catu_buf_ops : NULL,
 };
 
 static inline int tmc_etr_mode_alloc_buf(int mode,
@@ -769,7 +804,7 @@
 	case ETR_MODE_FLAT:
 	case ETR_MODE_ETR_SG:
 	case ETR_MODE_CATU:
-		if (etr_buf_ops[mode]->alloc)
+		if (etr_buf_ops[mode] && etr_buf_ops[mode]->alloc)
 			rc = etr_buf_ops[mode]->alloc(drvdata, etr_buf,
 						      node, pages);
 		if (!rc)
@@ -850,6 +885,7 @@
 		return ERR_PTR(rc);
 	}
 
+	refcount_set(&etr_buf->refcount, 1);
 	dev_dbg(drvdata->dev, "allocated buffer of size %ldKB in mode %d\n",
 		(unsigned long)size >> 10, etr_buf->mode);
 	return etr_buf;
@@ -906,6 +942,19 @@
 	rrp = tmc_read_rrp(drvdata);
 	rwp = tmc_read_rwp(drvdata);
 	status = readl_relaxed(drvdata->base + TMC_STS);
+
+	/*
+	 * If there were memory errors in the session, truncate the
+	 * buffer.
+	 */
+	if (WARN_ON_ONCE(status & TMC_STS_MEMERR)) {
+		dev_dbg(&drvdata->csdev->dev,
+			"tmc memory error detected, truncating buffer\n");
+		etr_buf->len = 0;
+		etr_buf->full = 0;
+		return;
+	}
+
 	etr_buf->full = status & TMC_STS_FULL;
 
 	WARN_ON(!etr_buf->ops || !etr_buf->ops->sync);
@@ -917,21 +966,10 @@
 		tmc_etr_buf_insert_barrier_packet(etr_buf, etr_buf->offset);
 }
 
-void tmc_etr_enable_hw(struct tmc_drvdata *drvdata,
-		       struct etr_buf *etr_buf)
+static void __tmc_etr_enable_hw(struct tmc_drvdata *drvdata)
 {
 	u32 axictl, sts;
-
-	/* Callers should provide an appropriate buffer for use */
-	if (WARN_ON(!etr_buf || drvdata->etr_buf))
-		return;
-	drvdata->etr_buf = etr_buf;
-
-	/*
-	 * If this ETR is connected to a CATU, enable it before we turn
-	 * this on
-	 */
-	tmc_etr_enable_catu(drvdata);
+	struct etr_buf *etr_buf = drvdata->etr_buf;
 
 	CS_UNLOCK(drvdata->base);
 
@@ -951,11 +989,8 @@
 		axictl |= TMC_AXICTL_ARCACHE_OS;
 	}
 
-	if (etr_buf->mode == ETR_MODE_ETR_SG) {
-		if (WARN_ON(!tmc_etr_has_cap(drvdata, TMC_ETR_SG)))
-			return;
+	if (etr_buf->mode == ETR_MODE_ETR_SG)
 		axictl |= TMC_AXICTL_SCT_GAT_MODE;
-	}
 
 	axictl = (axictl &
 		  ~(TMC_AXICTL_CACHE_CTL_B0 | TMC_AXICTL_CACHE_CTL_B1 |
@@ -989,6 +1024,38 @@
 	CS_LOCK(drvdata->base);
 }
 
+static int tmc_etr_enable_hw(struct tmc_drvdata *drvdata,
+			     struct etr_buf *etr_buf)
+{
+	int rc;
+
+	/* Callers should provide an appropriate buffer for use */
+	if (WARN_ON(!etr_buf))
+		return -EINVAL;
+
+	if ((etr_buf->mode == ETR_MODE_ETR_SG) &&
+	    WARN_ON(!tmc_etr_has_cap(drvdata, TMC_ETR_SG)))
+		return -EINVAL;
+
+	if (WARN_ON(drvdata->etr_buf))
+		return -EBUSY;
+
+	/*
+	 * If this ETR is connected to a CATU, enable it before we turn
+	 * this on.
+	 */
+	rc = tmc_etr_enable_catu(drvdata, etr_buf);
+	if (rc)
+		return rc;
+	rc = coresight_claim_device(drvdata->base);
+	if (!rc) {
+		drvdata->etr_buf = etr_buf;
+		__tmc_etr_enable_hw(drvdata);
+	}
+
+	return rc;
+}
+
 /*
  * Return the available trace data in the buffer (starts at etr_buf->offset,
  * limited by etr_buf->len) from @pos, with a maximum limit of @len,
@@ -1041,10 +1108,17 @@
 		drvdata->sysfs_buf = NULL;
 	} else {
 		tmc_sync_etr_buf(drvdata);
+		/*
+		 * Insert barrier packets at the beginning, if there was
+		 * an overflow.
+		 */
+		if (etr_buf->full)
+			tmc_etr_buf_insert_barrier_packet(etr_buf,
+							  etr_buf->offset);
 	}
 }
 
-void tmc_etr_disable_hw(struct tmc_drvdata *drvdata)
+static void __tmc_etr_disable_hw(struct tmc_drvdata *drvdata)
 {
 	CS_UNLOCK(drvdata->base);
 
@@ -1060,8 +1134,14 @@
 
 	CS_LOCK(drvdata->base);
 
+}
+
+static void tmc_etr_disable_hw(struct tmc_drvdata *drvdata)
+{
+	__tmc_etr_disable_hw(drvdata);
 	/* Disable CATU device if this ETR is connected to one */
 	tmc_etr_disable_catu(drvdata);
+	coresight_disclaim_device(drvdata->base);
 	/* Reset the ETR buf used by hardware */
 	drvdata->etr_buf = NULL;
 }
@@ -1355,7 +1435,8 @@
 	 */
 	spin_lock_irqsave(&drvdata->spinlock, flags);
 	sysfs_buf = READ_ONCE(drvdata->sysfs_buf);
-	if (!sysfs_buf || (sysfs_buf->size != drvdata->size)) {
+	if (!sysfs_buf || (sysfs_buf->size != drvdata->size)
+			|| !drvdata->usbch) {
 		spin_unlock_irqrestore(&drvdata->spinlock, flags);
 
 		if (drvdata->out_mode == TMC_ETR_OUT_MODE_MEM) {
@@ -1413,8 +1494,10 @@
 	 * sink is already enabled no memory is needed and the HW need not be
 	 * touched, even if the buffer size has changed.
 	 */
-	if (drvdata->mode == CS_MODE_SYSFS)
+	if (drvdata->mode == CS_MODE_SYSFS) {
+		atomic_inc(csdev->refcnt);
 		goto out;
+	}
 
 	/*
 	 * If we don't have a buffer or it doesn't match the requested size,
@@ -1426,12 +1509,16 @@
 		drvdata->sysfs_buf = new_buf;
 	}
 
-	drvdata->mode = CS_MODE_SYSFS;
-
 	if (drvdata->out_mode == TMC_ETR_OUT_MODE_MEM ||
 	    (drvdata->out_mode == TMC_ETR_OUT_MODE_USB
-	     && drvdata->byte_cntr->sw_usb))
-		tmc_etr_enable_hw(drvdata, drvdata->sysfs_buf);
+	     && drvdata->byte_cntr->sw_usb)) {
+		ret = tmc_etr_enable_hw(drvdata, drvdata->sysfs_buf);
+		if (ret)
+			goto out;
+	}
+
+	drvdata->mode = CS_MODE_SYSFS;
+	atomic_inc(csdev->refcnt);
 
 	drvdata->enable = true;
 out:
@@ -1441,22 +1528,436 @@
 	if (free_buf)
 		tmc_etr_free_sysfs_buf(free_buf);
 
-	if (drvdata->out_mode == TMC_ETR_OUT_MODE_MEM)
-		tmc_etr_byte_cntr_start(drvdata->byte_cntr);
-
-	if (!ret)
+	if (!ret) {
+		if (drvdata->out_mode == TMC_ETR_OUT_MODE_MEM)
+			tmc_etr_byte_cntr_start(drvdata->byte_cntr);
 		dev_info(drvdata->dev, "TMC-ETR enabled\n");
+	}
 
 	return ret;
 }
 
-static int tmc_enable_etr_sink_perf(struct coresight_device *csdev)
+/*
+ * alloc_etr_buf: Allocate ETR buffer for use by perf.
+ * The size of the hardware buffer is dependent on the size configured
+ * via sysfs and the perf ring buffer size. We prefer to allocate the
+ * largest possible size, scaling down the size by half until it
+ * reaches a minimum limit (1M), beyond which we give up.
+ */
+static struct etr_buf *
+alloc_etr_buf(struct tmc_drvdata *drvdata, struct perf_event *event,
+	      int nr_pages, void **pages, bool snapshot)
 {
-	/* We don't support perf mode yet ! */
-	return -EINVAL;
+	int node;
+	struct etr_buf *etr_buf;
+	unsigned long size;
+
+	node = (event->cpu == -1) ? NUMA_NO_NODE : cpu_to_node(event->cpu);
+	/*
+	 * Try to match the perf ring buffer size if it is larger
+	 * than the size requested via sysfs.
+	 */
+	if ((nr_pages << PAGE_SHIFT) > drvdata->size) {
+		etr_buf = tmc_alloc_etr_buf(drvdata, (nr_pages << PAGE_SHIFT),
+					    0, node, NULL);
+		if (!IS_ERR(etr_buf))
+			goto done;
+	}
+
+	/*
+	 * Else switch to configured size for this ETR
+	 * and scale down until we hit the minimum limit.
+	 */
+	size = drvdata->size;
+	do {
+		etr_buf = tmc_alloc_etr_buf(drvdata, size, 0, node, NULL);
+		if (!IS_ERR(etr_buf))
+			goto done;
+		size /= 2;
+	} while (size >= TMC_ETR_PERF_MIN_BUF_SIZE);
+
+	return ERR_PTR(-ENOMEM);
+
+done:
+	return etr_buf;
 }
 
-static int tmc_enable_etr_sink(struct coresight_device *csdev, u32 mode)
+static struct etr_buf *
+get_perf_etr_buf_cpu_wide(struct tmc_drvdata *drvdata,
+			  struct perf_event *event, int nr_pages,
+			  void **pages, bool snapshot)
+{
+	int ret;
+	pid_t pid = task_pid_nr(event->owner);
+	struct etr_buf *etr_buf;
+
+retry:
+	/*
+	 * An etr_perf_buffer is associated with an event and holds a reference
+	 * to the AUX ring buffer that was created for that event.  In CPU-wide
+	 * N:1 mode multiple events (one per CPU), each with its own AUX ring
+	 * buffer, share a sink.  As such an etr_perf_buffer is created for each
+	 * event but a single etr_buf associated with the ETR is shared between
+	 * them.  The last event in a trace session will copy the content of the
+	 * etr_buf to its AUX ring buffer.  Ring buffer associated to other
+	 * events are simply not used an freed as events are destoyed.  We still
+	 * need to allocate a ring buffer for each event since we don't know
+	 * which event will be last.
+	 */
+
+	/*
+	 * The first thing to do here is check if an etr_buf has already been
+	 * allocated for this session.  If so it is shared with this event,
+	 * otherwise it is created.
+	 */
+	mutex_lock(&drvdata->idr_mutex);
+	etr_buf = idr_find(&drvdata->idr, pid);
+	if (etr_buf) {
+		refcount_inc(&etr_buf->refcount);
+		mutex_unlock(&drvdata->idr_mutex);
+		return etr_buf;
+	}
+
+	/* If we made it here no buffer has been allocated, do so now. */
+	mutex_unlock(&drvdata->idr_mutex);
+
+	etr_buf = alloc_etr_buf(drvdata, event, nr_pages, pages, snapshot);
+	if (IS_ERR(etr_buf))
+		return etr_buf;
+
+	/* Now that we have a buffer, add it to the IDR. */
+	mutex_lock(&drvdata->idr_mutex);
+	ret = idr_alloc(&drvdata->idr, etr_buf, pid, pid + 1, GFP_KERNEL);
+	mutex_unlock(&drvdata->idr_mutex);
+
+	/* Another event with this session ID has allocated this buffer. */
+	if (ret == -ENOSPC) {
+		tmc_free_etr_buf(etr_buf);
+		goto retry;
+	}
+
+	/* The IDR can't allocate room for a new session, abandon ship. */
+	if (ret == -ENOMEM) {
+		tmc_free_etr_buf(etr_buf);
+		return ERR_PTR(ret);
+	}
+
+
+	return etr_buf;
+}
+
+static struct etr_buf *
+get_perf_etr_buf_per_thread(struct tmc_drvdata *drvdata,
+			    struct perf_event *event, int nr_pages,
+			    void **pages, bool snapshot)
+{
+	/*
+	 * In per-thread mode the etr_buf isn't shared, so just go ahead
+	 * with memory allocation.
+	 */
+	return alloc_etr_buf(drvdata, event, nr_pages, pages, snapshot);
+}
+
+static struct etr_buf *
+get_perf_etr_buf(struct tmc_drvdata *drvdata, struct perf_event *event,
+		 int nr_pages, void **pages, bool snapshot)
+{
+	if (event->cpu == -1)
+		return get_perf_etr_buf_per_thread(drvdata, event, nr_pages,
+						   pages, snapshot);
+
+	return get_perf_etr_buf_cpu_wide(drvdata, event, nr_pages,
+					 pages, snapshot);
+}
+
+static struct etr_perf_buffer *
+tmc_etr_setup_perf_buf(struct tmc_drvdata *drvdata, struct perf_event *event,
+		       int nr_pages, void **pages, bool snapshot)
+{
+	int node;
+	struct etr_buf *etr_buf;
+	struct etr_perf_buffer *etr_perf;
+
+	node = (event->cpu == -1) ? NUMA_NO_NODE : cpu_to_node(event->cpu);
+
+	etr_perf = kzalloc_node(sizeof(*etr_perf), GFP_KERNEL, node);
+	if (!etr_perf)
+		return ERR_PTR(-ENOMEM);
+
+	etr_buf = get_perf_etr_buf(drvdata, event, nr_pages, pages, snapshot);
+	if (!IS_ERR(etr_buf))
+		goto done;
+
+	kfree(etr_perf);
+	return ERR_PTR(-ENOMEM);
+
+done:
+	/*
+	 * Keep a reference to the ETR this buffer has been allocated for
+	 * in order to have access to the IDR in tmc_free_etr_buffer().
+	 */
+	etr_perf->drvdata = drvdata;
+	etr_perf->etr_buf = etr_buf;
+
+	return etr_perf;
+}
+
+
+static void *tmc_alloc_etr_buffer(struct coresight_device *csdev,
+				  struct perf_event *event, void **pages,
+				  int nr_pages, bool snapshot)
+{
+	struct etr_perf_buffer *etr_perf;
+	struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
+
+	etr_perf = tmc_etr_setup_perf_buf(drvdata, event,
+					  nr_pages, pages, snapshot);
+	if (IS_ERR(etr_perf)) {
+		dev_dbg(drvdata->dev, "Unable to allocate ETR buffer\n");
+		return NULL;
+	}
+
+	etr_perf->pid = task_pid_nr(event->owner);
+	etr_perf->snapshot = snapshot;
+	etr_perf->nr_pages = nr_pages;
+	etr_perf->pages = pages;
+
+	return etr_perf;
+}
+
+static void tmc_free_etr_buffer(void *config)
+{
+	struct etr_perf_buffer *etr_perf = config;
+	struct tmc_drvdata *drvdata = etr_perf->drvdata;
+	struct etr_buf *buf, *etr_buf = etr_perf->etr_buf;
+
+	if (!etr_buf)
+		goto free_etr_perf_buffer;
+
+	mutex_lock(&drvdata->idr_mutex);
+	/* If we are not the last one to use the buffer, don't touch it. */
+	if (!refcount_dec_and_test(&etr_buf->refcount)) {
+		mutex_unlock(&drvdata->idr_mutex);
+		goto free_etr_perf_buffer;
+	}
+
+	/* We are the last one, remove from the IDR and free the buffer. */
+	buf = idr_remove(&drvdata->idr, etr_perf->pid);
+	mutex_unlock(&drvdata->idr_mutex);
+
+	/*
+	 * Something went very wrong if the buffer associated with this ID
+	 * is not the same in the IDR.  Leak to avoid use after free.
+	 */
+	if (buf && WARN_ON(buf != etr_buf))
+		goto free_etr_perf_buffer;
+
+	tmc_free_etr_buf(etr_perf->etr_buf);
+
+free_etr_perf_buffer:
+	kfree(etr_perf);
+}
+
+/*
+ * tmc_etr_sync_perf_buffer: Copy the actual trace data from the hardware
+ * buffer to the perf ring buffer.
+ */
+static void tmc_etr_sync_perf_buffer(struct etr_perf_buffer *etr_perf,
+				     unsigned long src_offset,
+				     unsigned long to_copy)
+{
+	long bytes;
+	long pg_idx, pg_offset;
+	unsigned long head = etr_perf->head;
+	char **dst_pages, *src_buf;
+	struct etr_buf *etr_buf = etr_perf->etr_buf;
+
+	head = etr_perf->head;
+	pg_idx = head >> PAGE_SHIFT;
+	pg_offset = head & (PAGE_SIZE - 1);
+	dst_pages = (char **)etr_perf->pages;
+
+	while (to_copy > 0) {
+		/*
+		 * In one iteration, we can copy minimum of :
+		 *  1) what is available in the source buffer,
+		 *  2) what is available in the source buffer, before it
+		 *     wraps around.
+		 *  3) what is available in the destination page.
+		 * in one iteration.
+		 */
+		if (src_offset >= etr_buf->size)
+			src_offset -= etr_buf->size;
+		bytes = tmc_etr_buf_get_data(etr_buf, src_offset, to_copy,
+					     &src_buf);
+		if (WARN_ON_ONCE(bytes <= 0))
+			break;
+		bytes = min(bytes, (long)(PAGE_SIZE - pg_offset));
+
+		memcpy(dst_pages[pg_idx] + pg_offset, src_buf, bytes);
+
+		to_copy -= bytes;
+
+		/* Move destination pointers */
+		pg_offset += bytes;
+		if (pg_offset == PAGE_SIZE) {
+			pg_offset = 0;
+			if (++pg_idx == etr_perf->nr_pages)
+				pg_idx = 0;
+		}
+
+		/* Move source pointers */
+		src_offset += bytes;
+	}
+}
+
+/*
+ * tmc_update_etr_buffer : Update the perf ring buffer with the
+ * available trace data. We use software double buffering at the moment.
+ *
+ * TODO: Add support for reusing the perf ring buffer.
+ */
+static unsigned long
+tmc_update_etr_buffer(struct coresight_device *csdev,
+		      struct perf_output_handle *handle,
+		      void *config)
+{
+	bool lost = false;
+	unsigned long flags, offset, size = 0;
+	struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
+	struct etr_perf_buffer *etr_perf = config;
+	struct etr_buf *etr_buf = etr_perf->etr_buf;
+
+	spin_lock_irqsave(&drvdata->spinlock, flags);
+
+	/* Don't do anything if another tracer is using this sink */
+	if (atomic_read(csdev->refcnt) != 1) {
+		spin_unlock_irqrestore(&drvdata->spinlock, flags);
+		goto out;
+	}
+
+	if (WARN_ON(drvdata->perf_buf != etr_buf)) {
+		lost = true;
+		spin_unlock_irqrestore(&drvdata->spinlock, flags);
+		goto out;
+	}
+
+	CS_UNLOCK(drvdata->base);
+
+	tmc_flush_and_stop(drvdata);
+	tmc_sync_etr_buf(drvdata);
+
+	CS_LOCK(drvdata->base);
+	spin_unlock_irqrestore(&drvdata->spinlock, flags);
+
+	lost = etr_buf->full;
+	offset = etr_buf->offset;
+	size = etr_buf->len;
+
+	/*
+	 * The ETR buffer may be bigger than the space available in the
+	 * perf ring buffer (handle->size).  If so advance the offset so that we
+	 * get the latest trace data.  In snapshot mode none of that matters
+	 * since we are expected to clobber stale data in favour of the latest
+	 * traces.
+	 */
+	if (!etr_perf->snapshot && size > handle->size) {
+		u32 mask = tmc_get_memwidth_mask(drvdata);
+
+		/*
+		 * Make sure the new size is aligned in accordance with the
+		 * requirement explained in function tmc_get_memwidth_mask().
+		 */
+		size = handle->size & mask;
+		offset = etr_buf->offset + etr_buf->len - size;
+
+		if (offset >= etr_buf->size)
+			offset -= etr_buf->size;
+		lost = true;
+	}
+
+	/* Insert barrier packets at the beginning, if there was an overflow */
+	if (lost)
+		tmc_etr_buf_insert_barrier_packet(etr_buf, etr_buf->offset);
+	tmc_etr_sync_perf_buffer(etr_perf, offset, size);
+
+	/*
+	 * In snapshot mode we simply increment the head by the number of byte
+	 * that were written.  User space function  cs_etm_find_snapshot() will
+	 * figure out how many bytes to get from the AUX buffer based on the
+	 * position of the head.
+	 */
+	if (etr_perf->snapshot)
+		handle->head += size;
+out:
+	/*
+	 * Don't set the TRUNCATED flag in snapshot mode because 1) the
+	 * captured buffer is expected to be truncated and 2) a full buffer
+	 * prevents the event from being re-enabled by the perf core,
+	 * resulting in stale data being send to user space.
+	 */
+	if (!etr_perf->snapshot && lost)
+		perf_aux_output_flag(handle, PERF_AUX_FLAG_TRUNCATED);
+	return size;
+}
+
+static int tmc_enable_etr_sink_perf(struct coresight_device *csdev, void *data)
+{
+	int rc = 0;
+	pid_t pid;
+	unsigned long flags;
+	struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
+	struct perf_output_handle *handle = data;
+	struct etr_perf_buffer *etr_perf = etm_perf_sink_config(handle);
+
+	spin_lock_irqsave(&drvdata->spinlock, flags);
+	 /* Don't use this sink if it is already claimed by sysFS */
+	if (drvdata->mode == CS_MODE_SYSFS) {
+		rc = -EBUSY;
+		goto unlock_out;
+	}
+
+	if (WARN_ON(!etr_perf || !etr_perf->etr_buf)) {
+		rc = -EINVAL;
+		goto unlock_out;
+	}
+
+	/* Get a handle on the pid of the process to monitor */
+	pid = etr_perf->pid;
+
+	/* Do not proceed if this device is associated with another session */
+	if (drvdata->pid != -1 && drvdata->pid != pid) {
+		rc = -EBUSY;
+		goto unlock_out;
+	}
+
+	etr_perf->head = PERF_IDX2OFF(handle->head, etr_perf);
+
+	/*
+	 * No HW configuration is needed if the sink is already in
+	 * use for this session.
+	 */
+	if (drvdata->pid == pid) {
+		atomic_inc(csdev->refcnt);
+		goto unlock_out;
+	}
+
+	rc = tmc_etr_enable_hw(drvdata, etr_perf->etr_buf);
+	if (!rc) {
+		/* Associate with monitored process. */
+		drvdata->pid = pid;
+		drvdata->mode = CS_MODE_PERF;
+		drvdata->perf_buf = etr_perf->etr_buf;
+		atomic_inc(csdev->refcnt);
+	}
+
+unlock_out:
+	spin_unlock_irqrestore(&drvdata->spinlock, flags);
+	return rc;
+}
+
+static int tmc_enable_etr_sink(struct coresight_device *csdev,
+			       u32 mode, void *data)
 {
 	struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
 	int ret = 0;
@@ -1469,36 +1970,47 @@
 		return ret;
 
 	case CS_MODE_PERF:
-		return tmc_enable_etr_sink_perf(csdev);
+		return tmc_enable_etr_sink_perf(csdev, data);
 	}
 	/* We shouldn't be here */
 	return -EINVAL;
 }
 
-static void _tmc_disable_etr_sink(struct coresight_device *csdev)
+static int _tmc_disable_etr_sink(struct coresight_device *csdev)
 {
 	unsigned long flags;
 	struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
 
 	spin_lock_irqsave(&drvdata->spinlock, flags);
+
 	if (drvdata->reading) {
 		spin_unlock_irqrestore(&drvdata->spinlock, flags);
-		return;
+		return -EBUSY;
 	}
 
-	/* Disable the TMC only if it needs to */
+	if (atomic_dec_return(csdev->refcnt)) {
+		spin_unlock_irqrestore(&drvdata->spinlock, flags);
+		return -EBUSY;
+	}
+
+	/* Complain if we (somehow) got out of sync */
+	WARN_ON_ONCE(drvdata->mode == CS_MODE_DISABLED);
 	if (drvdata->mode != CS_MODE_DISABLED) {
 		if (drvdata->out_mode == TMC_ETR_OUT_MODE_USB) {
 			if (!drvdata->byte_cntr->sw_usb) {
 				__tmc_etr_disable_to_bam(drvdata);
 				spin_unlock_irqrestore(&drvdata->spinlock,
-								flags);
+					flags);
 				tmc_etr_bam_disable(drvdata);
 				usb_qdss_close(drvdata->usbch);
+				drvdata->usbch = NULL;
 				drvdata->mode = CS_MODE_DISABLED;
 				goto out;
 			} else {
+				spin_unlock_irqrestore(&drvdata->spinlock,
+					flags);
 				usb_qdss_close(drvdata->usbch);
+				spin_lock_irqsave(&drvdata->spinlock, flags);
 				tmc_etr_disable_hw(drvdata);
 			}
 		} else {
@@ -1507,12 +2019,19 @@
 		drvdata->mode = CS_MODE_DISABLED;
 	}
 
+	/* Dissociate from monitored process. */
+	drvdata->pid = -1;
+	drvdata->mode = CS_MODE_DISABLED;
+	/* Reset perf specific data */
+	drvdata->perf_buf = NULL;
+
 	spin_unlock_irqrestore(&drvdata->spinlock, flags);
 
 	if (drvdata->out_mode == TMC_ETR_OUT_MODE_USB
 		&& drvdata->byte_cntr->sw_usb) {
 		usb_bypass_stop(drvdata->byte_cntr);
 		flush_workqueue(drvdata->byte_cntr->usb_wq);
+		drvdata->usbch = NULL;
 		coresight_cti_unmap_trigin(drvdata->cti_reset, 2, 0);
 		coresight_cti_unmap_trigout(drvdata->cti_flush, 3, 0);
 		/* Free memory outside the spinlock if need be */
@@ -1534,15 +2053,18 @@
 	}
 out:
 	dev_info(drvdata->dev, "TMC-ETR disabled\n");
+	return 0;
 }
 
-static void tmc_disable_etr_sink(struct coresight_device *csdev)
+static int tmc_disable_etr_sink(struct coresight_device *csdev)
 {
 	struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
+	int ret;
 
 	mutex_lock(&drvdata->mem_lock);
-	_tmc_disable_etr_sink(csdev);
+	ret = _tmc_disable_etr_sink(csdev);
 	mutex_unlock(&drvdata->mem_lock);
+	return ret;
 }
 
 int tmc_etr_switch_mode(struct tmc_drvdata *drvdata, const char *out_mode)
@@ -1593,6 +2115,9 @@
 static const struct coresight_ops_sink tmc_etr_sink_ops = {
 	.enable		= tmc_enable_etr_sink,
 	.disable	= tmc_disable_etr_sink,
+	.alloc_buffer	= tmc_alloc_etr_buffer,
+	.update_buffer	= tmc_update_etr_buffer,
+	.free_buffer	= tmc_free_etr_buffer,
 };
 
 const struct coresight_ops tmc_etr_cs_ops = {
@@ -1619,13 +2144,11 @@
 		ret = -EINVAL;
 		goto out;
 	}
-	/* Don't interfere if operated from Perf */
-	if (drvdata->mode == CS_MODE_PERF) {
-		ret = -EINVAL;
-		goto out;
-	}
-
-	/* If sysfs_buf is NULL the trace data has been read already */
+	/*
+	 * We can safely allow reads even if the ETR is operating in PERF mode,
+	 * since the sysfs session is captured in mode specific data.
+	 * If drvdata::sysfs_data is NULL the trace data has been read already.
+	 */
 	if (!drvdata->sysfs_buf) {
 		ret = -EINVAL;
 		goto out;
@@ -1642,7 +2165,7 @@
 		coresight_disable_all_source_link();
 		spin_lock_irqsave(&drvdata->spinlock, flags);
 
-		tmc_etr_disable_hw(drvdata);
+		__tmc_etr_disable_hw(drvdata);
 	}
 	drvdata->reading = true;
 out:
@@ -1671,7 +2194,7 @@
 		 * buffer. Since the tracer is still enabled drvdata::buf can't
 		 * be NULL.
 		 */
-		tmc_etr_enable_hw(drvdata, drvdata->sysfs_buf);
+		__tmc_etr_enable_hw(drvdata);
 
 		spin_unlock_irqrestore(&drvdata->spinlock, flags);
 		coresight_enable_all_source_link();
diff --git a/drivers/hwtracing/coresight/coresight-tmc.c b/drivers/hwtracing/coresight/coresight-tmc.c
index bb2d461..de95774 100644
--- a/drivers/hwtracing/coresight/coresight-tmc.c
+++ b/drivers/hwtracing/coresight/coresight-tmc.c
@@ -8,10 +8,12 @@
 #include <linux/init.h>
 #include <linux/types.h>
 #include <linux/device.h>
+#include <linux/idr.h>
 #include <linux/io.h>
 #include <linux/err.h>
 #include <linux/fs.h>
 #include <linux/miscdevice.h>
+#include <linux/mutex.h>
 #include <linux/property.h>
 #include <linux/uaccess.h>
 #include <linux/slab.h>
@@ -66,6 +68,34 @@
 	writel_relaxed(0x0, drvdata->base + TMC_CTL);
 }
 
+u32 tmc_get_memwidth_mask(struct tmc_drvdata *drvdata)
+{
+	u32 mask = 0;
+
+	/*
+	 * When moving RRP or an offset address forward, the new values must
+	 * be byte-address aligned to the width of the trace memory databus
+	 * _and_ to a frame boundary (16 byte), whichever is the biggest. For
+	 * example, for 32-bit, 64-bit and 128-bit wide trace memory, the four
+	 * LSBs must be 0s. For 256-bit wide trace memory, the five LSBs must
+	 * be 0s.
+	 */
+	switch (drvdata->memwidth) {
+	case TMC_MEM_INTF_WIDTH_32BITS:
+	/* fallthrough */
+	case TMC_MEM_INTF_WIDTH_64BITS:
+	/* fallthrough */
+	case TMC_MEM_INTF_WIDTH_128BITS:
+		mask = GENMASK(31, 4);
+		break;
+	case TMC_MEM_INTF_WIDTH_256BITS:
+		mask = GENMASK(31, 5);
+		break;
+	}
+
+	return mask;
+}
+
 static int tmc_read_prepare(struct tmc_drvdata *drvdata)
 {
 	int ret = 0;
@@ -86,7 +116,7 @@
 	}
 
 	if (!ret)
-		dev_info(drvdata->dev, "TMC read start\n");
+		dev_dbg(drvdata->dev, "TMC read start\n");
 
 	return ret;
 }
@@ -108,7 +138,7 @@
 	}
 
 	if (!ret)
-		dev_info(drvdata->dev, "TMC read end\n");
+		dev_dbg(drvdata->dev, "TMC read end\n");
 
 	return ret;
 }
@@ -239,6 +269,7 @@
 coresight_tmc_reg(mode, TMC_MODE);
 coresight_tmc_reg(pscr, TMC_PSCR);
 coresight_tmc_reg(axictl, TMC_AXICTL);
+coresight_tmc_reg(authstatus, TMC_AUTHSTATUS);
 coresight_tmc_reg(devid, CORESIGHT_DEVID);
 coresight_tmc_reg64(rrp, TMC_RRP, TMC_RRPHI);
 coresight_tmc_reg64(rwp, TMC_RWP, TMC_RWPHI);
@@ -258,6 +289,7 @@
 	&dev_attr_devid.attr,
 	&dev_attr_dba.attr,
 	&dev_attr_axictl.attr,
+	&dev_attr_authstatus.attr,
 	NULL,
 };
 
@@ -451,12 +483,24 @@
 				       "arm,scatter-gather");
 }
 
+static inline bool tmc_etr_has_non_secure_access(struct tmc_drvdata *drvdata)
+{
+	u32 auth = readl_relaxed(drvdata->base + TMC_AUTHSTATUS);
+
+	return (auth & TMC_AUTH_NSID_MASK) == 0x3;
+}
+
 /* Detect and initialise the capabilities of a TMC ETR */
 static int tmc_etr_setup_caps(struct tmc_drvdata *drvdata,
 			     u32 devid, void *dev_caps)
 {
+	int rc;
+
 	u32 dma_mask = 0;
 
+	if (!tmc_etr_has_non_secure_access(drvdata))
+		return -EACCES;
+
 	/* Set the unadvertised capabilities */
 	tmc_etr_init_caps(drvdata, (u32)(unsigned long)dev_caps);
 
@@ -484,7 +528,10 @@
 		dma_mask = 40;
 	}
 
-	return dma_set_mask_and_coherent(drvdata->dev, DMA_BIT_MASK(dma_mask));
+	rc = dma_set_mask_and_coherent(drvdata->dev, DMA_BIT_MASK(dma_mask));
+	if (rc)
+		dev_err(drvdata->dev, "Failed to setup DMA mask: %d\n", rc);
+	return rc;
 }
 
 static int tmc_config_desc(struct tmc_drvdata *drvdata,
@@ -504,6 +551,8 @@
 		desc->subtype.sink_subtype = CORESIGHT_DEV_SUBTYPE_SINK_BUFFER;
 		desc->groups = coresight_tmc_etr_groups;
 		desc->ops = &tmc_etr_cs_ops;
+		idr_init(&drvdata->idr);
+		mutex_init(&drvdata->idr_mutex);
 		break;
 	case TMC_CONFIG_TYPE_ETF:
 		desc->type = CORESIGHT_DEV_TYPE_LINKSINK;
@@ -561,6 +610,8 @@
 	devid = readl_relaxed(drvdata->base + CORESIGHT_DEVID);
 	drvdata->config_type = BMVAL(devid, 6, 7);
 	drvdata->memwidth = tmc_get_memwidth(devid);
+	/* This device is not associated with a session */
+	drvdata->pid = -1;
 
 	if (drvdata->config_type == TMC_CONFIG_TYPE_ETR) {
 		drvdata->out_mode = TMC_ETR_OUT_MODE_MEM;
diff --git a/drivers/hwtracing/coresight/coresight-tmc.h b/drivers/hwtracing/coresight/coresight-tmc.h
index b3cdae3..1ca22dd 100644
--- a/drivers/hwtracing/coresight/coresight-tmc.h
+++ b/drivers/hwtracing/coresight/coresight-tmc.h
@@ -8,6 +8,7 @@
 #define _CORESIGHT_TMC_H
 
 #include <linux/dma-mapping.h>
+#include <linux/idr.h>
 #include <linux/miscdevice.h>
 #include <linux/delay.h>
 #include <asm/cacheflush.h>
@@ -19,6 +20,8 @@
 #include <linux/coresight-cti.h>
 
 #include "coresight-byte-cntr.h"
+#include <linux/mutex.h>
+#include <linux/refcount.h>
 
 #define TMC_RSZ			0x004
 #define TMC_STS			0x00c
@@ -46,6 +49,7 @@
 #define TMC_ITATBCTR2		0xef0
 #define TMC_ITATBCTR1		0xef4
 #define TMC_ITATBCTR0		0xef8
+#define TMC_AUTHSTATUS		0xfb8
 
 /* register description */
 /* TMC_CTL - 0x020 */
@@ -54,6 +58,7 @@
 #define TMC_STS_TMCREADY_BIT	2
 #define TMC_STS_FULL		BIT(0)
 #define TMC_STS_TRIGGERED	BIT(1)
+#define TMC_STS_MEMERR		BIT(5)
 /*
  * TMC_AXICTL - 0x110
  *
@@ -102,6 +107,8 @@
 #define TMC_ETR_BAM_PIPE_INDEX	0
 #define TMC_ETR_BAM_NR_PIPES	2
 
+#define TMC_AUTH_NSID_MASK	GENMASK(1, 0)
+
 enum tmc_config_type {
 	TMC_CONFIG_TYPE_ETB,
 	TMC_CONFIG_TYPE_ETR,
@@ -180,6 +187,7 @@
 
 /**
  * struct etr_buf - Details of the buffer used by ETR
+ * refcount	; Number of sources currently using this etr_buf.
  * @mode	: Mode of the ETR buffer, contiguous, Scatter Gather etc.
  * @full	: Trace data overflow
  * @size	: Size of the buffer.
@@ -190,6 +198,7 @@
  * @private	: Backend specific information for the buf
  */
 struct etr_buf {
+	refcount_t			refcount;
 	enum etr_mode			mode;
 	bool				full;
 	ssize_t				size;
@@ -207,6 +216,8 @@
  * @csdev:	component vitals needed by the framework.
  * @miscdev:	specifics to handle "/dev/xyz.tmc" entry.
  * @spinlock:	only one at a time pls.
+ * @pid:	Process ID of the process being monitored by the session
+ *		that is using this component.
  * @buf:	Snapshot of the trace data for ETF/ETB.
  * @etr_buf:	details of buffer used in TMC-ETR
  * @len:	size of the available trace for ETF/ETB.
@@ -217,7 +228,10 @@
  * @trigger_cntr: amount of words to store after a trigger.
  * @etr_caps:	Bitmask of capabilities of the TMC ETR, inferred from the
  *		device configuration register (DEVID)
- * @sysfs_data:	SYSFS buffer for ETR.
+ * @idr:	Holds etr_bufs allocated for this ETR.
+ * @idr_mutex:	Access serialisation for idr.
+ * @sysfs_buf:	SYSFS buffer for ETR.
+ * @perf_buf:	PERF buffer for ETR.
  */
 struct tmc_drvdata {
 	void __iomem		*base;
@@ -225,6 +239,7 @@
 	struct coresight_device	*csdev;
 	struct miscdevice	miscdev;
 	spinlock_t		spinlock;
+	pid_t			pid;
 	bool			reading;
 	union {
 		char		*buf;		/* TMC ETB */
@@ -250,6 +265,9 @@
 	enum tmc_etr_out_mode	out_mode;
 	struct byte_cntr	*byte_cntr;
 	struct dma_iommu_mapping *iommu_mapping;
+	struct idr		idr;
+	struct mutex		idr_mutex;
+	struct etr_buf		*perf_buf;
 };
 
 struct etr_buf_operations {
@@ -298,6 +316,7 @@
 void tmc_flush_and_stop(struct tmc_drvdata *drvdata);
 void tmc_enable_hw(struct tmc_drvdata *drvdata);
 void tmc_disable_hw(struct tmc_drvdata *drvdata);
+u32 tmc_get_memwidth_mask(struct tmc_drvdata *drvdata);
 
 /* ETB/ETF functions */
 int tmc_read_prepare_etb(struct tmc_drvdata *drvdata);
@@ -313,8 +332,6 @@
 void tmc_free_etr_buf(struct etr_buf *etr_buf);
 void __tmc_etr_disable_to_bam(struct tmc_drvdata *drvdata);
 void tmc_etr_bam_disable(struct tmc_drvdata *drvdata);
-void tmc_etr_enable_hw(struct tmc_drvdata *drvdata, struct etr_buf *etr_buf);
-void tmc_etr_disable_hw(struct tmc_drvdata *drvdata);
 void usb_notifier(void *priv, unsigned int event, struct qdss_request *d_req,
 		  struct usb_qdss_ch *ch);
 int tmc_etr_bam_init(struct amba_device *adev,
diff --git a/drivers/hwtracing/coresight/coresight-tpdm.c b/drivers/hwtracing/coresight/coresight-tpdm.c
index 8c928f2..8744b2b 100644
--- a/drivers/hwtracing/coresight/coresight-tpdm.c
+++ b/drivers/hwtracing/coresight/coresight-tpdm.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2014-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2014-2020, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/kernel.h>
@@ -4333,8 +4333,10 @@
 	u32 scm_ret = 0;
 
 	pdata = of_get_coresight_platform_data(dev, adev->dev.of_node);
-	if (IS_ERR(pdata))
-		return PTR_ERR(pdata);
+	if (IS_ERR(pdata)) {
+		dev_dbg(dev, "failed to get pdata, defer probe\n");
+		return -EPROBE_DEFER;
+	}
 	adev->dev.platform_data = pdata;
 
 	if (of_property_read_bool(adev->dev.of_node, "qcom,hw-enable-check")) {
diff --git a/drivers/hwtracing/coresight/coresight-tpiu.c b/drivers/hwtracing/coresight/coresight-tpiu.c
index 459ef93..7acbeff 100644
--- a/drivers/hwtracing/coresight/coresight-tpiu.c
+++ b/drivers/hwtracing/coresight/coresight-tpiu.c
@@ -5,6 +5,7 @@
  * Description: CoreSight Trace Port Interface Unit driver
  */
 
+#include <linux/atomic.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/device.h>
@@ -68,13 +69,13 @@
 	CS_LOCK(drvdata->base);
 }
 
-static int tpiu_enable(struct coresight_device *csdev, u32 mode)
+static int tpiu_enable(struct coresight_device *csdev, u32 mode, void *__unused)
 {
 	struct tpiu_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
 
 	tpiu_enable_hw(drvdata);
-
-	dev_info(drvdata->dev, "TPIU enabled\n");
+	atomic_inc(csdev->refcnt);
+	dev_dbg(drvdata->dev, "TPIU enabled\n");
 	return 0;
 }
 
@@ -94,13 +95,17 @@
 	CS_LOCK(drvdata->base);
 }
 
-static void tpiu_disable(struct coresight_device *csdev)
+static int tpiu_disable(struct coresight_device *csdev)
 {
 	struct tpiu_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
 
+	if (atomic_dec_return(csdev->refcnt))
+		return -EBUSY;
+
 	tpiu_disable_hw(drvdata);
 
-	dev_info(drvdata->dev, "TPIU disabled\n");
+	dev_dbg(drvdata->dev, "TPIU disabled\n");
+	return 0;
 }
 
 static const struct coresight_ops_sink tpiu_sink_ops = {
diff --git a/drivers/hwtracing/coresight/coresight.c b/drivers/hwtracing/coresight/coresight.c
index fdbd088..d8e69f8 100644
--- a/drivers/hwtracing/coresight/coresight.c
+++ b/drivers/hwtracing/coresight/coresight.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Copyright (c) 2012, 2017-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012, 2017-2020, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/kernel.h>
@@ -11,6 +11,7 @@
 #include <linux/err.h>
 #include <linux/export.h>
 #include <linux/slab.h>
+#include <linux/stringhash.h>
 #include <linux/mutex.h>
 #include <linux/clk.h>
 #include <dt-bindings/clock/qcom,aop-qmp.h>
@@ -20,6 +21,7 @@
 #include <linux/pm_runtime.h>
 #include <linux/regulator/consumer.h>
 
+#include "coresight-etm-perf.h"
 #include "coresight-priv.h"
 
 static int coresight_source_filter(struct list_head *path,
@@ -133,7 +135,10 @@
 	int ret;
 	int i, j;
 
-	if (IS_ERR_OR_NULL(reg_clk))
+	if (!reg_clk)
+		return 0;
+
+	if (IS_ERR(reg_clk))
 		return -EINVAL;
 
 	for (i = 0; i < reg_clk->nr_reg; i++) {
@@ -264,7 +269,94 @@
 	}
 }
 
-static int coresight_enable_sink(struct coresight_device *csdev, u32 mode)
+static inline u32 coresight_read_claim_tags(void __iomem *base)
+{
+	return readl_relaxed(base + CORESIGHT_CLAIMCLR);
+}
+
+static inline bool coresight_is_claimed_self_hosted(void __iomem *base)
+{
+	return coresight_read_claim_tags(base) == CORESIGHT_CLAIM_SELF_HOSTED;
+}
+
+static inline bool coresight_is_claimed_any(void __iomem *base)
+{
+	return coresight_read_claim_tags(base) != 0;
+}
+
+static inline void coresight_set_claim_tags(void __iomem *base)
+{
+	writel_relaxed(CORESIGHT_CLAIM_SELF_HOSTED, base + CORESIGHT_CLAIMSET);
+	isb();
+}
+
+static inline void coresight_clear_claim_tags(void __iomem *base)
+{
+	writel_relaxed(CORESIGHT_CLAIM_SELF_HOSTED, base + CORESIGHT_CLAIMCLR);
+	isb();
+}
+
+/*
+ * coresight_claim_device_unlocked : Claim the device for self-hosted usage
+ * to prevent an external tool from touching this device. As per PSCI
+ * standards, section "Preserving the execution context" => "Debug and Trace
+ * save and Restore", DBGCLAIM[1] is reserved for Self-hosted debug/trace and
+ * DBGCLAIM[0] is reserved for external tools.
+ *
+ * Called with CS_UNLOCKed for the component.
+ * Returns : 0 on success
+ */
+int coresight_claim_device_unlocked(void __iomem *base)
+{
+	if (coresight_is_claimed_any(base))
+		return -EBUSY;
+
+	coresight_set_claim_tags(base);
+	if (coresight_is_claimed_self_hosted(base))
+		return 0;
+	/* There was a race setting the tags, clean up and fail */
+	coresight_clear_claim_tags(base);
+	return -EBUSY;
+}
+
+int coresight_claim_device(void __iomem *base)
+{
+	int rc;
+
+	CS_UNLOCK(base);
+	rc = coresight_claim_device_unlocked(base);
+	CS_LOCK(base);
+
+	return rc;
+}
+
+/*
+ * coresight_disclaim_device_unlocked : Clear the claim tags for the device.
+ * Called with CS_UNLOCKed for the component.
+ */
+void coresight_disclaim_device_unlocked(void __iomem *base)
+{
+
+	if (coresight_is_claimed_self_hosted(base))
+		coresight_clear_claim_tags(base);
+	else
+		/*
+		 * The external agent may have not honoured our claim
+		 * and has manipulated it. Or something else has seriously
+		 * gone wrong in our driver.
+		 */
+		WARN_ON_ONCE(1);
+}
+
+void coresight_disclaim_device(void __iomem *base)
+{
+	CS_UNLOCK(base);
+	coresight_disclaim_device_unlocked(base);
+	CS_LOCK(base);
+}
+
+static int coresight_enable_sink(struct coresight_device *csdev,
+				 u32 mode, void *data)
 {
 	int ret;
 
@@ -272,36 +364,35 @@
 	 * We need to make sure the "new" session is compatible with the
 	 * existing "mode" of operation.
 	 */
-	if (sink_ops(csdev)->enable) {
-		ret = coresight_enable_reg_clk(csdev);
-		if (ret)
-			return ret;
+	if (!sink_ops(csdev)->enable)
+		return -EINVAL;
 
-		ret = sink_ops(csdev)->enable(csdev, mode);
-		if (ret) {
-			coresight_disable_reg_clk(csdev);
-			return ret;
-		}
-		csdev->enable = true;
+	coresight_enable_reg_clk(csdev);
+	ret = sink_ops(csdev)->enable(csdev, mode, data);
+	if (ret) {
+		coresight_disable_reg_clk(csdev);
+		return ret;
 	}
-
-	atomic_inc(csdev->refcnt);
+	csdev->enable = true;
 
 	return 0;
 }
 
 static void coresight_disable_sink(struct coresight_device *csdev)
 {
-	if (atomic_dec_return(csdev->refcnt) == 0) {
-		if (sink_ops(csdev)->disable) {
-			sink_ops(csdev)->disable(csdev);
-			coresight_disable_reg_clk(csdev);
-			if (coresight_link_late_disable())
-				coresight_disable_links();
-			csdev->enable = false;
-			csdev->activated = false;
-		}
-	}
+	int ret;
+
+	if (!sink_ops(csdev)->disable)
+		return;
+
+	ret = sink_ops(csdev)->disable(csdev);
+	if (ret)
+		return;
+	coresight_disable_reg_clk(csdev);
+	if (coresight_link_late_disable())
+		coresight_disable_links();
+	csdev->activated = false;
+	csdev->enable = false;
 }
 
 static int coresight_enable_link(struct coresight_device *csdev,
@@ -309,9 +400,9 @@
 				 struct coresight_device *child,
 				 struct list_head *path)
 {
-	int ret;
+	int ret = 0;
 	int link_subtype;
-	int refport, inport, outport;
+	int inport, outport;
 
 	if (!parent || !child)
 		return -EINVAL;
@@ -320,34 +411,21 @@
 	outport = coresight_find_link_outport(csdev, child, path);
 	link_subtype = csdev->subtype.link_subtype;
 
-	if (link_subtype == CORESIGHT_DEV_SUBTYPE_LINK_MERG)
-		refport = inport;
-	else if (link_subtype == CORESIGHT_DEV_SUBTYPE_LINK_SPLIT)
-		refport = outport;
-	else
-		refport = 0;
+	if (link_subtype == CORESIGHT_DEV_SUBTYPE_LINK_MERG && inport < 0)
+		return inport;
+	if (link_subtype == CORESIGHT_DEV_SUBTYPE_LINK_SPLIT && outport < 0)
+		return outport;
 
-	if (refport < 0)
-		return refport;
-
-	if (atomic_inc_return(&csdev->refcnt[refport]) == 1) {
-		if (link_ops(csdev)->enable) {
-			ret = coresight_enable_reg_clk(csdev);
-			if (ret)
-				return ret;
-
-			ret = link_ops(csdev)->enable(csdev, inport, outport);
-			if (ret) {
-				coresight_disable_reg_clk(csdev);
-				atomic_dec(&csdev->refcnt[refport]);
-				return ret;
-			}
-		}
+	if (link_ops(csdev)->enable) {
+		coresight_enable_reg_clk(csdev);
+		ret = link_ops(csdev)->enable(csdev, inport, outport);
+		if (ret)
+			coresight_disable_reg_clk(csdev);
 	}
+	if (!ret)
+		csdev->enable = true;
 
-	csdev->enable = true;
-
-	return 0;
+	return ret;
 }
 
 static void coresight_disable_link(struct coresight_device *csdev,
@@ -357,7 +435,7 @@
 {
 	int i, nr_conns;
 	int link_subtype;
-	int refport, inport, outport;
+	int inport, outport;
 
 	if (!parent || !child)
 		return;
@@ -367,23 +445,18 @@
 	link_subtype = csdev->subtype.link_subtype;
 
 	if (link_subtype == CORESIGHT_DEV_SUBTYPE_LINK_MERG) {
-		refport = inport;
 		nr_conns = csdev->nr_inport;
 	} else if (link_subtype == CORESIGHT_DEV_SUBTYPE_LINK_SPLIT) {
-		refport = outport;
 		nr_conns = csdev->nr_outport;
 	} else {
-		refport = 0;
 		nr_conns = 1;
 	}
 
-	if (atomic_dec_return(&csdev->refcnt[refport]) == 0) {
-		if (coresight_link_late_disable()) {
-			coresight_add_disabled_link(csdev, inport, outport);
-		} else if (link_ops(csdev)->disable) {
-			link_ops(csdev)->disable(csdev, inport, outport);
-			coresight_disable_reg_clk(csdev);
-		}
+	if (coresight_link_late_disable()) {
+		coresight_add_disabled_link(csdev, inport, outport);
+	} else if (link_ops(csdev)->disable) {
+		link_ops(csdev)->disable(csdev, inport, outport);
+		coresight_disable_reg_clk(csdev);
 	}
 
 	for (i = 0; i < nr_conns; i++)
@@ -443,70 +516,64 @@
 	return !csdev->enable;
 }
 
-static void coresight_disable_list_node(struct list_head *path,
+/*
+ * coresight_disable_path_from : Disable components in the given path beyond
+ * @nd in the list. If @nd is NULL, all the components, except the SOURCE are
+ * disabled.
+ */
+static void coresight_disable_path_from(struct list_head *path,
 					struct coresight_node *nd)
 {
 	u32 type;
 	struct coresight_device *csdev, *parent, *child;
 
-	csdev = nd->csdev;
-	type = csdev->type;
-
-	/*
-	 * ETF devices are tricky... They can be a link or a sink,
-	 * depending on how they are configured.  If an ETF has been
-	 * "activated" it will be configured as a sink, otherwise
-	 * go ahead with the link configuration.
-	 */
-	if (type == CORESIGHT_DEV_TYPE_LINKSINK)
-		type = (csdev == coresight_get_sink(path)) ?
-					CORESIGHT_DEV_TYPE_SINK :
-					CORESIGHT_DEV_TYPE_LINK;
-
-	switch (type) {
-	case CORESIGHT_DEV_TYPE_SINK:
-		coresight_disable_sink(csdev);
-		break;
-	case CORESIGHT_DEV_TYPE_SOURCE:
-		/* sources are disabled from either sysFS or Perf */
-		break;
-	case CORESIGHT_DEV_TYPE_LINK:
-		parent = list_prev_entry(nd, link)->csdev;
-		child = list_next_entry(nd, link)->csdev;
-		coresight_disable_link(csdev, parent, child, path);
-		break;
-	default:
-		break;
-	}
-}
-
-/**
- * During enabling path, if it is failed, then only those enabled
- * devices need to be disabled. This function is to disable devices
- * which is enabled before the failed device.
- *
- * @path the head of the list
- * @nd the failed device node
- */
-static void coresight_disable_previous_devs(struct list_head *path,
-					struct coresight_node *nd)
-{
+	if (!nd)
+		nd = list_first_entry(path, struct coresight_node, link);
 
 	list_for_each_entry_continue(nd, path, link) {
-		coresight_disable_list_node(path, nd);
+		csdev = nd->csdev;
+		type = csdev->type;
+
+		/*
+		 * ETF devices are tricky... They can be a link or a sink,
+		 * depending on how they are configured.  If an ETF has been
+		 * "activated" it will be configured as a sink, otherwise
+		 * go ahead with the link configuration.
+		 */
+		if (type == CORESIGHT_DEV_TYPE_LINKSINK)
+			type = (csdev == coresight_get_sink(path)) ?
+						CORESIGHT_DEV_TYPE_SINK :
+						CORESIGHT_DEV_TYPE_LINK;
+
+		switch (type) {
+		case CORESIGHT_DEV_TYPE_SINK:
+			coresight_disable_sink(csdev);
+			break;
+		case CORESIGHT_DEV_TYPE_SOURCE:
+			/*
+			 * We skip the first node in the path assuming that it
+			 * is the source. So we don't expect a source device in
+			 * the middle of a path.
+			 */
+			WARN_ON(1);
+			break;
+		case CORESIGHT_DEV_TYPE_LINK:
+			parent = list_prev_entry(nd, link)->csdev;
+			child = list_next_entry(nd, link)->csdev;
+			coresight_disable_link(csdev, parent, child, path);
+			break;
+		default:
+			break;
+		}
 	}
 }
 
 void coresight_disable_path(struct list_head *path)
 {
-	struct coresight_node *nd;
-
-	list_for_each_entry(nd, path, link) {
-		coresight_disable_list_node(path, nd);
-	}
+	coresight_disable_path_from(path, NULL);
 }
 
-int coresight_enable_path(struct list_head *path, u32 mode)
+int coresight_enable_path(struct list_head *path, u32 mode, void *sink_data)
 {
 
 	int ret = 0;
@@ -531,7 +598,7 @@
 
 		switch (type) {
 		case CORESIGHT_DEV_TYPE_SINK:
-			ret = coresight_enable_sink(csdev, mode);
+			ret = coresight_enable_sink(csdev, mode, sink_data);
 			/*
 			 * Sink is the first component turned on. If we
 			 * failed to enable the sink, there are no components
@@ -559,7 +626,7 @@
 out:
 	return ret;
 err:
-	coresight_disable_previous_devs(path, nd);
+	coresight_disable_path_from(path, nd);
 	goto out;
 }
 
@@ -638,6 +705,47 @@
 	return dev ? to_coresight_device(dev) : NULL;
 }
 
+static int coresight_sink_by_id(struct device *dev, void *data)
+{
+	struct coresight_device *csdev = to_coresight_device(dev);
+	unsigned long hash;
+
+	if (csdev->type == CORESIGHT_DEV_TYPE_SINK ||
+	     csdev->type == CORESIGHT_DEV_TYPE_LINKSINK) {
+
+		if (!csdev->ea)
+			return 0;
+		/*
+		 * See function etm_perf_add_symlink_sink() to know where
+		 * this comes from.
+		 */
+		hash = (unsigned long)csdev->ea->var;
+
+		if ((u32)hash == *(u32 *)data)
+			return 1;
+	}
+
+	return 0;
+}
+
+/**
+ * coresight_get_sink_by_id - returns the sink that matches the id
+ * @id: Id of the sink to match
+ *
+ * The name of a sink is unique, whether it is found on the AMBA bus or
+ * otherwise.  As such the hash of that name can easily be used to identify
+ * a sink.
+ */
+struct coresight_device *coresight_get_sink_by_id(u32 id)
+{
+	struct device *dev = NULL;
+
+	dev = bus_find_device(&coresight_bustype, NULL, &id,
+			      coresight_sink_by_id);
+
+	return dev ? to_coresight_device(dev) : NULL;
+}
+
 /*
  * coresight_grab_device - Power up this device and any of the helper
  * devices connected to it for trace operation. Since the helper devices
@@ -908,7 +1016,6 @@
 
 	return;
 err:
-	coresight_disable_previous_devs(path, nd);
 	coresight_release_path(csdev, path);
 }
 
@@ -1026,7 +1133,7 @@
 		goto out;
 	}
 
-	ret = coresight_enable_path(path, CS_MODE_SYSFS);
+	ret = coresight_enable_path(path, CS_MODE_SYSFS, NULL);
 	if (ret)
 		goto err_path;
 
@@ -1194,7 +1301,6 @@
 {
 	struct coresight_device *csdev = to_coresight_device(dev);
 
-	kfree(csdev->conns);
 	kfree(csdev->refcnt);
 	kfree(csdev);
 }
@@ -1431,7 +1537,7 @@
 	csdev = kzalloc(sizeof(*csdev), GFP_KERNEL);
 	if (!csdev) {
 		ret = -ENOMEM;
-		goto err_kzalloc_csdev;
+		goto err_out;
 	}
 
 	if (desc->type == CORESIGHT_DEV_TYPE_LINK ||
@@ -1447,7 +1553,7 @@
 	refcnts = kcalloc(nr_refcnts, sizeof(*refcnts), GFP_KERNEL);
 	if (!refcnts) {
 		ret = -ENOMEM;
-		goto err_kzalloc_refcnts;
+		goto err_free_csdev;
 	}
 
 	csdev->refcnt = refcnts;
@@ -1460,7 +1566,7 @@
 		conns = kcalloc(csdev->nr_outport, sizeof(*conns), GFP_KERNEL);
 		if (!conns) {
 			ret = -ENOMEM;
-			goto err_kzalloc_conns;
+			goto err_free_refcnts;
 		}
 
 		for (i = 0; i < csdev->nr_outport; i++) {
@@ -1489,7 +1595,27 @@
 	ret = device_register(&csdev->dev);
 	if (ret) {
 		put_device(&csdev->dev);
-		goto err_kzalloc_csdev;
+		/*
+		 * All resources are free'd explicitly via
+		 * coresight_device_release(), triggered from put_device().
+		 */
+		goto err_out;
+	}
+
+	if (csdev->type == CORESIGHT_DEV_TYPE_SINK ||
+	    csdev->type == CORESIGHT_DEV_TYPE_LINKSINK) {
+		ret = etm_perf_add_symlink_sink(csdev);
+
+		if (ret) {
+			device_unregister(&csdev->dev);
+			/*
+			 * As with the above, all resources are free'd
+			 * explicitly via coresight_device_release() triggered
+			 * from put_device(), which is in turn called from
+			 * function device_unregister().
+			 */
+			goto err_out;
+		}
 	}
 
 	mutex_lock(&coresight_mutex);
@@ -1501,19 +1627,26 @@
 
 	return csdev;
 
-err_kzalloc_conns:
+err_free_refcnts:
 	kfree(refcnts);
-err_kzalloc_refcnts:
+err_free_csdev:
 	kfree(csdev);
-err_kzalloc_csdev:
+err_out:
 	return ERR_PTR(ret);
 }
 EXPORT_SYMBOL_GPL(coresight_register);
 
 void coresight_unregister(struct coresight_device *csdev)
 {
+	etm_perf_del_symlink_sink(csdev);
 	/* Remove references of that device in the topology */
 	coresight_remove_conns(csdev);
 	device_unregister(&csdev->dev);
 }
 EXPORT_SYMBOL_GPL(coresight_unregister);
+
+bool coresight_loses_context_with_cpu(struct device *dev)
+{
+	return fwnode_property_present(dev_fwnode(dev),
+				       "arm,coresight-loses-context-with-cpu");
+}
diff --git a/drivers/hwtracing/coresight/of_coresight.c b/drivers/hwtracing/coresight/of_coresight.c
index 29dbf52..32ac255 100644
--- a/drivers/hwtracing/coresight/of_coresight.c
+++ b/drivers/hwtracing/coresight/of_coresight.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Copyright (c) 2012,2017-2018 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012,2017-2018,2020 The Linux Foundation. All rights reserved.
  */
 
 #include <linux/types.h>
@@ -131,7 +131,8 @@
 
 	nr_reg = of_property_count_strings(node, "qcom,proxy-regs");
 	nr_clk = of_property_count_strings(node, "qcom,proxy-clks");
-	if (!nr_reg && !nr_clk)
+
+	if (nr_reg <= 0 && nr_clk <= 0)
 		return NULL;
 
 	reg_clk = devm_kzalloc(dev, sizeof(*reg_clk), GFP_KERNEL);
@@ -175,18 +176,91 @@
 	return reg_clk;
 }
 
+/*
+ * of_coresight_parse_endpoint : Parse the given output endpoint @ep
+ * and fill the connection information in @pdata[@i].
+ *
+ * Parses the local port, remote device name and the remote port.
+ *
+ * Returns :
+ *	 1	- If the parsing is successful and a connection record
+ *		  was created for an output connection.
+ *	 0	- If the parsing completed without any fatal errors.
+ *	-Errno	- Fatal error, abort the scanning.
+ */
+static int of_coresight_parse_endpoint(struct device *dev,
+				       struct device_node *ep,
+				       struct coresight_platform_data *pdata,
+				       int i)
+{
+	int ret = 0;
+	struct of_endpoint endpoint, rendpoint;
+	struct device_node *rparent = NULL;
+	struct device_node *rep = NULL;
+	struct device *rdev = NULL;
+	struct device_node *sn = NULL;
+
+	do {
+		/* Parse the local port details */
+		if (of_graph_parse_endpoint(ep, &endpoint))
+			break;
+		/*
+		 * Get a handle on the remote endpoint and the device it is
+		 * attached to.
+		 */
+		rep = of_graph_get_remote_endpoint(ep);
+		if (!rep)
+			break;
+		rparent = of_graph_get_port_parent(rep);
+		if (!rparent)
+			break;
+		if (of_graph_parse_endpoint(rep, &rendpoint))
+			break;
+
+		/* If the remote device is not available, defer probing */
+		rdev = of_coresight_get_endpoint_device(rparent);
+		if (!rdev) {
+			ret = -EPROBE_DEFER;
+			break;
+		}
+
+		pdata->outports[i] = endpoint.port;
+		ret = of_property_read_string(rparent, "coresight-name",
+						&pdata->child_names[i]);
+		if (ret)
+			pdata->child_names[i] = devm_kstrdup(dev,
+						     dev_name(rdev),
+						     GFP_KERNEL);
+		pdata->child_ports[i] = rendpoint.port;
+
+		pdata->source_names[i] = NULL;
+		sn = of_parse_phandle(ep, "source", 0);
+		if (sn) {
+			ret = of_property_read_string(sn,
+				"coresight-name", &pdata->source_names[i]);
+			of_node_put(sn);
+		}
+		/* Connection record updated */
+		ret = 1;
+	} while (0);
+
+	if (rparent)
+		of_node_put(rparent);
+	if (rep)
+		of_node_put(rep);
+	if (rdev)
+		put_device(rdev);
+
+	return ret;
+}
+
 struct coresight_platform_data *
 of_get_coresight_platform_data(struct device *dev,
 			       const struct device_node *node)
 {
 	int i = 0, ret = 0;
 	struct coresight_platform_data *pdata;
-	struct of_endpoint endpoint, rendpoint;
-	struct device *rdev;
 	struct device_node *ep = NULL;
-	struct device_node *rparent = NULL;
-	struct device_node *rport = NULL;
-	struct device_node *sn = NULL;
 
 	pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
 	if (!pdata)
@@ -197,74 +271,39 @@
 		/* Use device name as sysfs handle */
 		pdata->name = dev_name(dev);
 	}
+	pdata->cpu = of_coresight_get_cpu(node);
+
 	/* Get the number of input and output port for this component */
 	of_coresight_get_ports(node, &pdata->nr_inport, &pdata->nr_outport);
 
-	if (pdata->nr_outport) {
-		ret = of_coresight_alloc_memory(dev, pdata);
-		if (ret)
+	/* If there are no output connections, we are done */
+	if (!pdata->nr_outport)
+		return pdata;
+
+	ret = of_coresight_alloc_memory(dev, pdata);
+	if (ret)
+		return ERR_PTR(ret);
+
+	/* Iterate through each port to discover topology */
+	while ((ep = of_graph_get_next_endpoint(node, ep))) {
+		/*
+		 * No need to deal with input ports, as processing the
+		 * output ports connected to them will process the details.
+		 */
+		if (of_find_property(ep, "slave-mode", NULL))
+			continue;
+
+		ret = of_coresight_parse_endpoint(dev, ep, pdata, i);
+		switch (ret) {
+		case 1:
+			i++;		/* Fall through */
+		case 0:
+			break;
+		default:
 			return ERR_PTR(ret);
-
-		/* Iterate through each port to discover topology */
-		do {
-			/* Get a handle on a port */
-			ep = of_graph_get_next_endpoint(node, ep);
-			if (!ep)
-				break;
-
-			/*
-			 * No need to deal with input ports, processing for as
-			 * processing for output ports will deal with them.
-			 */
-			if (of_find_property(ep, "slave-mode", NULL))
-				continue;
-
-			/* Get a handle on the local endpoint */
-			ret = of_graph_parse_endpoint(ep, &endpoint);
-
-			if (ret)
-				continue;
-
-			/* The local out port number */
-			pdata->outports[i] = endpoint.port;
-
-			/*
-			 * Get a handle on the remote port and parent
-			 * attached to it.
-			 */
-			rparent = of_graph_get_remote_port_parent(ep);
-			rport = of_graph_get_remote_port(ep);
-
-			if (!rparent || !rport)
-				continue;
-
-			if (of_graph_parse_endpoint(rport, &rendpoint))
-				continue;
-
-			rdev = of_coresight_get_endpoint_device(rparent);
-			if (!rdev)
-				return ERR_PTR(-EPROBE_DEFER);
-
-			ret = of_property_read_string(rparent, "coresight-name",
-						&pdata->child_names[i]);
-			if (ret)
-				pdata->child_names[i] = dev_name(rdev);
-			pdata->child_ports[i] = rendpoint.id;
-
-			pdata->source_names[i] = NULL;
-			sn = of_parse_phandle(ep, "source", 0);
-			if (sn) {
-				ret = of_property_read_string(sn,
-				"coresight-name", &pdata->source_names[i]);
-				of_node_put(sn);
-			}
-
-			i++;
-		} while (ep);
+		}
 	}
 
-	pdata->cpu = of_coresight_get_cpu(node);
-
 	pdata->reg_clk = of_coresight_get_reg_clk(dev, node);
 	if (IS_ERR(pdata->reg_clk))
 		return (void *)(pdata->reg_clk);
diff --git a/drivers/i2c/busses/i2c-qcom-geni.c b/drivers/i2c/busses/i2c-qcom-geni.c
index e22df19..f90553b 100644
--- a/drivers/i2c/busses/i2c-qcom-geni.c
+++ b/drivers/i2c/busses/i2c-qcom-geni.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/clk.h>
@@ -405,12 +405,8 @@
 	struct msm_gpi_dma_async_tx_cb_param *tx_cb = ptr;
 	struct geni_i2c_dev *gi2c = tx_cb->userdata;
 
-	if (tx_cb->completion_code == MSM_GPI_TCE_EOB) {
-		complete(&gi2c->xfer);
-	} else if (!(gi2c->cur->flags & I2C_M_RD)) {
-		gi2c_gsi_cb_err(tx_cb, "TX");
-		complete(&gi2c->xfer);
-	}
+	gi2c_gsi_cb_err(tx_cb, "TX");
+	complete(&gi2c->xfer);
 }
 
 static void gi2c_gsi_rx_cb(void *ptr)
@@ -480,7 +476,7 @@
 		lock_t->dword[2] = MSM_GPI_LOCK_TRE_DWORD2;
 		lock_t->dword[3] = MSM_GPI_LOCK_TRE_DWORD3(0, 0, 0, 0, 1);
 
-		/* unlock */
+		/* unlock tre: ieob set */
 		unlock_t->dword[0] = MSM_GPI_UNLOCK_TRE_DWORD0;
 		unlock_t->dword[1] = MSM_GPI_UNLOCK_TRE_DWORD1;
 		unlock_t->dword[2] = MSM_GPI_UNLOCK_TRE_DWORD2;
@@ -535,12 +531,14 @@
 				segs++;
 			sg_init_table(gi2c->tx_sg, segs);
 			if (i == 0)
+				/* Send lock tre for first transfer in a msg */
 				sg_set_buf(&gi2c->tx_sg[index++], &gi2c->lock_t,
 					sizeof(gi2c->lock_t));
 		} else {
 			sg_init_table(gi2c->tx_sg, segs);
 		}
 
+		/* Send cfg tre when cfg not sent already */
 		if (!gi2c->cfg_sent) {
 			sg_set_buf(&gi2c->tx_sg[index++], &gi2c->cfg0_t,
 						sizeof(gi2c->cfg0_t));
@@ -553,12 +551,21 @@
 
 		if (msgs[i].flags & I2C_M_RD) {
 			go_t->dword[2] = MSM_GPI_I2C_GO_TRE_DWORD2(msgs[i].len);
-			go_t->dword[3] = MSM_GPI_I2C_GO_TRE_DWORD3(1, 0, 0, 0,
-									0);
+			/*
+			 * For Rx Go tre: Set ieob for non-shared se and for all
+			 * but last transfer in shared se
+			 */
+			if (!gi2c->is_shared || (gi2c->is_shared && i != num-1))
+				go_t->dword[3] = MSM_GPI_I2C_GO_TRE_DWORD3(1, 0,
+								0, 1, 0);
+			else
+				go_t->dword[3] = MSM_GPI_I2C_GO_TRE_DWORD3(1, 0,
+								0, 0, 0);
 		} else {
+			/* For Tx Go tre: ieob is not set, chain bit is set */
 			go_t->dword[2] = MSM_GPI_I2C_GO_TRE_DWORD2(0);
 			go_t->dword[3] = MSM_GPI_I2C_GO_TRE_DWORD3(0, 0, 0, 0,
-									1);
+								1);
 		}
 
 		sg_set_buf(&gi2c->tx_sg[index++], &gi2c->go_t,
@@ -591,6 +598,7 @@
 				MSM_GPI_DMA_W_BUFFER_TRE_DWORD1(gi2c->rx_ph);
 			gi2c->rx_t.dword[2] =
 				MSM_GPI_DMA_W_BUFFER_TRE_DWORD2(msgs[i].len);
+			/* Set ieot for all Rx/Tx DMA tres */
 			gi2c->rx_t.dword[3] =
 				MSM_GPI_DMA_W_BUFFER_TRE_DWORD3(0, 0, 1, 0, 0);
 
@@ -641,6 +649,10 @@
 			gi2c->tx_t.dword[2] =
 				MSM_GPI_DMA_W_BUFFER_TRE_DWORD2(msgs[i].len);
 			if (gi2c->is_shared && i == num-1)
+				/*
+				 * For Tx: unlock tre is send for last transfer
+				 * so set chain bit for last transfer DMA tre.
+				 */
 				gi2c->tx_t.dword[3] =
 				MSM_GPI_DMA_W_BUFFER_TRE_DWORD3(0, 0, 1, 0, 1);
 			else
@@ -652,6 +664,7 @@
 		}
 
 		if (gi2c->is_shared && i == num-1) {
+			/* Send unlock tre at the end of last transfer */
 			sg_set_buf(&gi2c->tx_sg[index++],
 				&gi2c->unlock_t, sizeof(gi2c->unlock_t));
 		}
@@ -689,6 +702,10 @@
 			dmaengine_terminate_all(gi2c->tx_c);
 			gi2c->cfg_sent = 0;
 		}
+		if (gi2c->is_shared)
+			/* Resend cfg tre for every new message on shared se */
+			gi2c->cfg_sent = 0;
+
 		if (msgs[i].flags & I2C_M_RD)
 			geni_se_iommu_unmap_buf(rx_dev, &gi2c->rx_ph,
 				msgs[i].len, DMA_FROM_DEVICE);
diff --git a/drivers/i2c/i2c-core-of.c b/drivers/i2c/i2c-core-of.c
index 14d4884..5f489a5 100644
--- a/drivers/i2c/i2c-core-of.c
+++ b/drivers/i2c/i2c-core-of.c
@@ -53,6 +53,7 @@
 
 	info->addr = addr;
 	info->of_node = node;
+	info->fwnode = of_fwnode_handle(node);
 
 	if (of_property_read_bool(node, "host-notify"))
 		info->flags |= I2C_CLIENT_HOST_NOTIFY;
diff --git a/drivers/iio/Kconfig b/drivers/iio/Kconfig
index d08aeb4..1dec0fe 100644
--- a/drivers/iio/Kconfig
+++ b/drivers/iio/Kconfig
@@ -4,7 +4,6 @@
 
 menuconfig IIO
 	tristate "Industrial I/O support"
-	select ANON_INODES
 	help
 	  The industrial I/O subsystem provides a unified framework for
 	  drivers for many different types of embedded sensors using a
diff --git a/drivers/iio/adc/qcom-vadc-common.h b/drivers/iio/adc/qcom-vadc-common.h
index e29ea9e..4aa5932 100644
--- a/drivers/iio/adc/qcom-vadc-common.h
+++ b/drivers/iio/adc/qcom-vadc-common.h
@@ -182,16 +182,16 @@
 	SCALE_HW_CALIB_DEFAULT,
 	SCALE_HW_CALIB_THERM_100K_PULLUP,
 	SCALE_HW_CALIB_XOTHERM,
-	SCALE_HW_CALIB_THERM_100K_PU_PM7,
 	SCALE_HW_CALIB_PMIC_THERM,
 	SCALE_HW_CALIB_CUR,
-	SCALE_HW_CALIB_PMIC_THERM_PM7,
 	SCALE_HW_CALIB_PM5_CHG_TEMP,
 	SCALE_HW_CALIB_PM5_SMB_TEMP,
 	SCALE_HW_CALIB_BATT_THERM_100K,
 	SCALE_HW_CALIB_BATT_THERM_30K,
 	SCALE_HW_CALIB_BATT_THERM_400K,
 	SCALE_HW_CALIB_PM5_SMB1398_TEMP,
+	SCALE_HW_CALIB_THERM_100K_PU_PM7,
+	SCALE_HW_CALIB_PMIC_THERM_PM7,
 	SCALE_HW_CALIB_MAX,
 };
 
diff --git a/drivers/infiniband/Kconfig b/drivers/infiniband/Kconfig
index abb6660..176b943 100644
--- a/drivers/infiniband/Kconfig
+++ b/drivers/infiniband/Kconfig
@@ -25,7 +25,6 @@
 
 config INFINIBAND_USER_ACCESS
 	tristate "InfiniBand userspace access (verbs and CM)"
-	select ANON_INODES
 	---help---
 	  Userspace InfiniBand access support.  This enables the
 	  kernel side of userspace verbs and the userspace
diff --git a/drivers/infiniband/core/uverbs_ioctl.c b/drivers/infiniband/core/uverbs_ioctl.c
index 1a6b229..3673ef7 100644
--- a/drivers/infiniband/core/uverbs_ioctl.c
+++ b/drivers/infiniband/core/uverbs_ioctl.c
@@ -126,7 +126,7 @@
 	res = (void *)pbundle->internal_buffer + pbundle->internal_used;
 	pbundle->internal_used =
 		ALIGN(new_used, sizeof(*pbundle->internal_buffer));
-	if (flags & __GFP_ZERO)
+	if (want_init_on_alloc(flags))
 		memset(res, 0, size);
 	return res;
 }
diff --git a/drivers/input/misc/qpnp-power-on.c b/drivers/input/misc/qpnp-power-on.c
index d4a5d1e..0fd3003 100644
--- a/drivers/input/misc/qpnp-power-on.c
+++ b/drivers/input/misc/qpnp-power-on.c
@@ -1971,7 +1971,8 @@
 static int qpnp_pon_read_gen2_pon_off_reason(struct qpnp_pon *pon, u16 *reason,
 					int *reason_index_offset)
 {
-	unsigned int buf[2], reg;
+	unsigned int reg, reg1;
+	u8 buf[2];
 	int rc;
 
 	rc = qpnp_pon_read(pon, QPNP_PON_OFF_REASON(pon), &reg);
@@ -1979,10 +1980,10 @@
 		return rc;
 
 	if (reg & QPNP_GEN2_POFF_SEQ) {
-		rc = qpnp_pon_read(pon, QPNP_POFF_REASON1(pon), buf);
+		rc = qpnp_pon_read(pon, QPNP_POFF_REASON1(pon), &reg1);
 		if (rc)
 			return rc;
-		*reason = (u8)buf[0];
+		*reason = (u8)reg1;
 		*reason_index_offset = 0;
 	} else if (reg & QPNP_GEN2_FAULT_SEQ) {
 		rc = regmap_bulk_read(pon->regmap, QPNP_FAULT_REASON1(pon), buf,
@@ -1992,13 +1993,13 @@
 				QPNP_FAULT_REASON1(pon), rc);
 			return rc;
 		}
-		*reason = (u8)buf[0] | (u16)(buf[1] << 8);
+		*reason = buf[0] | (u16)(buf[1] << 8);
 		*reason_index_offset = POFF_REASON_FAULT_OFFSET;
 	} else if (reg & QPNP_GEN2_S3_RESET_SEQ) {
-		rc = qpnp_pon_read(pon, QPNP_S3_RESET_REASON(pon), buf);
+		rc = qpnp_pon_read(pon, QPNP_S3_RESET_REASON(pon), &reg1);
 		if (rc)
 			return rc;
-		*reason = (u8)buf[0];
+		*reason = (u8)reg1;
 		*reason_index_offset = POFF_REASON_S3_RESET_OFFSET;
 	}
 
@@ -2072,7 +2073,7 @@
 {
 	struct device *dev = pon->dev;
 	unsigned int reg = 0;
-	unsigned int buf[2];
+	u8 buf[2];
 	int reason_index_offset = 0;
 	unsigned int pon_sts = 0;
 	u16 poff_sts = 0;
@@ -2148,10 +2149,11 @@
 				QPNP_POFF_REASON1(pon), rc);
 			return rc;
 		}
-		poff_sts = buf[0] | (buf[1] << 8);
+		poff_sts = buf[0] | (u16)(buf[1] << 8);
 	}
 	index = ffs(poff_sts) - 1 + reason_index_offset;
-	if (index >= ARRAY_SIZE(qpnp_poff_reason) || index < 0) {
+	if (index >= ARRAY_SIZE(qpnp_poff_reason) || index < 0 ||
+					index < reason_index_offset) {
 		dev_info(dev, "PMIC@SID%d: Unknown power-off reason\n",
 			 to_spmi_device(dev->parent)->usid);
 	} else {
diff --git a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig
index d8fd886..d3c215d 100644
--- a/drivers/input/touchscreen/Kconfig
+++ b/drivers/input/touchscreen/Kconfig
@@ -1353,4 +1353,6 @@
 
 source "drivers/input/touchscreen/focaltech_touch/Kconfig"
 
+source "drivers/input/touchscreen/nt36xxx/Kconfig"
+
 endif
diff --git a/drivers/input/touchscreen/Makefile b/drivers/input/touchscreen/Makefile
index d4757cf..8b766e7 100644
--- a/drivers/input/touchscreen/Makefile
+++ b/drivers/input/touchscreen/Makefile
@@ -113,3 +113,4 @@
 obj-$(CONFIG_TOUCHSCREEN_SYNAPTICS_DSX) += synaptics_dsx/
 obj-$(CONFIG_TOUCHSCREEN_SYNAPTICS_TCM)	+= synaptics_tcm/
 obj-$(CONFIG_TOUCHSCREEN_FTS)	+= focaltech_touch/
+obj-$(CONFIG_TOUCHSCREEN_NT36XXX)	+= nt36xxx/
diff --git a/drivers/input/touchscreen/focaltech_touch/focaltech_common.h b/drivers/input/touchscreen/focaltech_touch/focaltech_common.h
index 67415c4..2065760 100644
--- a/drivers/input/touchscreen/focaltech_touch/focaltech_common.h
+++ b/drivers/input/touchscreen/focaltech_touch/focaltech_common.h
@@ -88,6 +88,7 @@
 #define FTS_REG_IDE_PARA_STATUS             0xB6
 #define FTS_REG_GLOVE_MODE_EN               0xC0
 #define FTS_REG_COVER_MODE_EN               0xC1
+#define FTS_REG_REPORT_RATE                 0x88
 #define FTS_REG_CHARGER_MODE_EN             0x8B
 #define FTS_REG_GESTURE_EN                  0xD0
 #define FTS_REG_GESTURE_OUTPUT_ADDRESS      0xD3
diff --git a/drivers/input/touchscreen/focaltech_touch/focaltech_core.c b/drivers/input/touchscreen/focaltech_touch/focaltech_core.c
index e7d6a0f..cf1a406 100644
--- a/drivers/input/touchscreen/focaltech_touch/focaltech_core.c
+++ b/drivers/input/touchscreen/focaltech_touch/focaltech_core.c
@@ -55,8 +55,9 @@
 #define INTERVAL_READ_REG                   200  /* unit:ms */
 #define TIMEOUT_READ_REG                    1000 /* unit:ms */
 #if FTS_POWER_SOURCE_CUST_EN
-#define FTS_VTG_MIN_UV                      2800000
+#define FTS_VTG_MIN_UV                      3000000
 #define FTS_VTG_MAX_UV                      3300000
+#define FTS_LOAD_MAX_UA                     30000
 #define FTS_I2C_VTG_MIN_UV                  1800000
 #define FTS_I2C_VTG_MAX_UV                  1800000
 #endif
@@ -982,6 +983,13 @@
 			regulator_put(ts_data->vdd);
 			return ret;
 		}
+
+		ret = regulator_set_load(ts_data->vdd, FTS_LOAD_MAX_UA);
+		if (ret) {
+			FTS_ERROR("vdd regulator set_load failed ret=%d", ret);
+			regulator_put(ts_data->vdd);
+			return ret;
+		}
 	}
 
 	ts_data->vcc_i2c = regulator_get(ts_data->dev, "vcc_i2c");
diff --git a/drivers/input/touchscreen/focaltech_touch/focaltech_core.h b/drivers/input/touchscreen/focaltech_touch/focaltech_core.h
index 7603a64..c7a8bd3 100644
--- a/drivers/input/touchscreen/focaltech_touch/focaltech_core.h
+++ b/drivers/input/touchscreen/focaltech_touch/focaltech_core.h
@@ -156,7 +156,7 @@
 	struct mutex bus_lock;
 	int irq;
 	int log_level;
-	int fw_is_running;      /* confirm fw is running when using spi:default 0 */
+	int fw_is_running; /* confirm fw is running when using spi:default 0 */
 	int dummy_byte;
 	bool suspended;
 	bool fw_loading;
@@ -165,7 +165,9 @@
 	bool glove_mode;
 	bool cover_mode;
 	bool charger_mode;
-	bool gesture_mode;      /* gesture enable or disable, default: disable */
+	bool gesture_mode; /* gesture enable or disable, default: disable */
+	int report_rate;
+
 	/* multi-touch */
 	struct ts_event *events;
 	u8 *bus_tx_buf;
diff --git a/drivers/input/touchscreen/focaltech_touch/focaltech_ex_mode.c b/drivers/input/touchscreen/focaltech_touch/focaltech_ex_mode.c
index 4727744..54038f8 100644
--- a/drivers/input/touchscreen/focaltech_touch/focaltech_ex_mode.c
+++ b/drivers/input/touchscreen/focaltech_touch/focaltech_ex_mode.c
@@ -45,6 +45,7 @@
 	MODE_GLOVE = 0,
 	MODE_COVER,
 	MODE_CHARGER,
+	REPORT_RATE,
 };
 
 /*****************************************************************************
@@ -61,33 +62,30 @@
 static int fts_ex_mode_switch(enum _ex_mode mode, u8 value)
 {
 	int ret = 0;
-	u8 m_val = 0;
-
-	if (value)
-		m_val = 0x01;
-	else
-		m_val = 0x00;
 
 	switch (mode) {
 	case MODE_GLOVE:
-		ret = fts_write_reg(FTS_REG_GLOVE_MODE_EN, m_val);
-		if (ret < 0) {
-			FTS_ERROR("MODE_GLOVE switch to %d fail", m_val);
-		}
+		ret = fts_write_reg(FTS_REG_GLOVE_MODE_EN, value > 0 ? 1 : 0);
+		if (ret < 0)
+			FTS_ERROR("MODE_GLOVE switch to %d fail", value);
 		break;
 
 	case MODE_COVER:
-		ret = fts_write_reg(FTS_REG_COVER_MODE_EN, m_val);
-		if (ret < 0) {
-			FTS_ERROR("MODE_COVER switch to %d fail", m_val);
-		}
+		ret = fts_write_reg(FTS_REG_COVER_MODE_EN, value > 0 ? 1 : 0);
+		if (ret < 0)
+			FTS_ERROR("MODE_COVER switch to %d fail", value);
 		break;
 
 	case MODE_CHARGER:
-		ret = fts_write_reg(FTS_REG_CHARGER_MODE_EN, m_val);
-		if (ret < 0) {
-			FTS_ERROR("MODE_CHARGER switch to %d fail", m_val);
-		}
+		ret = fts_write_reg(FTS_REG_CHARGER_MODE_EN, value > 0 ? 1 : 0);
+		if (ret < 0)
+			FTS_ERROR("MODE_CHARGER switch to %d fail", value);
+		break;
+
+	case REPORT_RATE:
+		ret = fts_write_reg(FTS_REG_REPORT_RATE, value);
+		if (ret < 0)
+			FTS_ERROR("REPORT_RATE switch to %d fail", value);
 		break;
 
 	default:
@@ -241,6 +239,47 @@
 	return count;
 }
 
+static ssize_t fts_report_rate_show(
+	struct device *dev, struct device_attribute *attr, char *buf)
+{
+	int count = 0;
+	u8 val = 0;
+	struct fts_ts_data *ts_data = fts_data;
+	struct input_dev *input_dev = ts_data->input_dev;
+
+	mutex_lock(&input_dev->mutex);
+	fts_read_reg(FTS_REG_REPORT_RATE, &val);
+	count = scnprintf(buf + count, PAGE_SIZE, "Report Rate:%d\n",
+			ts_data->report_rate);
+	count += scnprintf(buf + count, PAGE_SIZE,
+			"Report Rate Reg(0x88):%d\n", val);
+	mutex_unlock(&input_dev->mutex);
+
+	return count;
+}
+
+static ssize_t fts_report_rate_store(
+	struct device *dev,
+	struct device_attribute *attr, const char *buf, size_t count)
+{
+	int ret = 0;
+	struct fts_ts_data *ts_data = fts_data;
+	int rate;
+
+	ret = kstrtoint(buf, 16, &rate);
+	if (ret)
+		return ret;
+
+	if (rate != ts_data->report_rate) {
+		ret = fts_ex_mode_switch(REPORT_RATE, (u8)rate);
+		if (ret >= 0)
+			ts_data->report_rate = rate;
+	}
+
+	FTS_DEBUG("report rate:%d", ts_data->report_rate);
+	return count;
+}
+
 
 /* read and write charger mode
  * read example: cat fts_glove_mode        ---read  glove mode
@@ -255,10 +294,13 @@
 static DEVICE_ATTR(fts_charger_mode, S_IRUGO | S_IWUSR,
 			fts_charger_mode_show, fts_charger_mode_store);
 
+static DEVICE_ATTR_RW(fts_report_rate);
+
 static struct attribute *fts_touch_mode_attrs[] = {
 	&dev_attr_fts_glove_mode.attr,
 	&dev_attr_fts_cover_mode.attr,
 	&dev_attr_fts_charger_mode.attr,
+	&dev_attr_fts_report_rate.attr,
 	NULL,
 };
 
@@ -280,6 +322,9 @@
 		fts_ex_mode_switch(MODE_CHARGER, ENABLE);
 	}
 
+	if (ts_data->report_rate > 0)
+		fts_ex_mode_switch(REPORT_RATE, ts_data->report_rate);
+
 	return 0;
 }
 
@@ -290,6 +335,7 @@
 	ts_data->glove_mode = DISABLE;
 	ts_data->cover_mode = DISABLE;
 	ts_data->charger_mode = DISABLE;
+	ts_data->report_rate = 0;
 
 	ret = sysfs_create_group(&ts_data->dev->kobj, &fts_touch_mode_group);
 	if (ret < 0) {
diff --git a/drivers/input/touchscreen/nt36xxx/Kconfig b/drivers/input/touchscreen/nt36xxx/Kconfig
new file mode 100644
index 0000000..fbdf03f
--- /dev/null
+++ b/drivers/input/touchscreen/nt36xxx/Kconfig
@@ -0,0 +1,11 @@
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# Novatek NT36xxx touchscreen driver configuration
+#
+config TOUCHSCREEN_NT36XXX
+	bool "Novatek NT36xxx"
+	help
+	  Say Y here if you have a Novatek NT36xxx touchscreen connected
+	  to your system.
+
+	  If unsure, say N.
diff --git a/drivers/input/touchscreen/nt36xxx/Makefile b/drivers/input/touchscreen/nt36xxx/Makefile
new file mode 100644
index 0000000..ad3fedd
--- /dev/null
+++ b/drivers/input/touchscreen/nt36xxx/Makefile
@@ -0,0 +1,8 @@
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# Makefile for the Novatek NT36xxx touchscreen driver.
+#
+
+# Each configuration option enables a list of files.
+
+obj-$(CONFIG_TOUCHSCREEN_NT36XXX) += nt36xxx.o nt36xxx_fw_update.o nt36xxx_ext_proc.o nt36xxx_mp_ctrlram.o
diff --git a/drivers/input/touchscreen/nt36xxx/nt36xxx.c b/drivers/input/touchscreen/nt36xxx/nt36xxx.c
new file mode 100644
index 0000000..65af379
--- /dev/null
+++ b/drivers/input/touchscreen/nt36xxx/nt36xxx.c
@@ -0,0 +1,1978 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (C) 2010 - 2018 Novatek, Inc.
+ *
+ * $Revision: 47247 $
+ * $Date: 2019-07-10 10:41:36 +0800 (Wed, 10 Jul 2019) $
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ */
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/interrupt.h>
+#include <linux/irq.h>
+#include <linux/gpio.h>
+#include <linux/proc_fs.h>
+#include <linux/input/mt.h>
+#include <linux/of_gpio.h>
+#include <linux/of_irq.h>
+
+#if defined(CONFIG_DRM_PANEL)
+#include <drm/drm_panel.h>
+#elif defined(CONFIG_FB)
+#include <linux/notifier.h>
+#include <linux/fb.h>
+#elif defined(CONFIG_HAS_EARLYSUSPEND)
+#include <linux/earlysuspend.h>
+#endif
+
+#include "nt36xxx.h"
+#if NVT_TOUCH_ESD_PROTECT
+#include <linux/jiffies.h>
+#endif /* #if NVT_TOUCH_ESD_PROTECT */
+
+#if NVT_TOUCH_ESD_PROTECT
+static struct delayed_work nvt_esd_check_work;
+static struct workqueue_struct *nvt_esd_check_wq;
+static unsigned long irq_timer = 0;
+uint8_t esd_check = false;
+uint8_t esd_retry = 0;
+#endif /* #if NVT_TOUCH_ESD_PROTECT */
+
+#if NVT_TOUCH_EXT_PROC
+extern int32_t nvt_extra_proc_init(void);
+extern void nvt_extra_proc_deinit(void);
+#endif
+
+#if NVT_TOUCH_MP
+extern int32_t nvt_mp_proc_init(void);
+extern void nvt_mp_proc_deinit(void);
+#endif
+
+struct nvt_ts_data *ts;
+
+#if defined(CONFIG_DRM_PANEL)
+static struct drm_panel *active_panel;
+#endif
+
+#if BOOT_UPDATE_FIRMWARE
+static struct workqueue_struct *nvt_fwu_wq;
+extern void Boot_Update_Firmware(struct work_struct *work);
+#endif
+
+#if defined(CONFIG_DRM_PANEL)
+static int nvt_drm_notifier_callback(struct notifier_block *self, unsigned long event, void *data);
+#elif defined(CONFIG_FB)
+static int nvt_fb_notifier_callback(struct notifier_block *self, unsigned long event, void *data);
+#elif defined(CONFIG_HAS_EARLYSUSPEND)
+static void nvt_ts_early_suspend(struct early_suspend *h);
+static void nvt_ts_late_resume(struct early_suspend *h);
+#endif
+
+#if TOUCH_KEY_NUM > 0
+const uint16_t touch_key_array[TOUCH_KEY_NUM] = {
+	KEY_BACK,
+	KEY_HOME,
+	KEY_MENU
+};
+#endif
+
+#if WAKEUP_GESTURE
+const uint16_t gesture_key_array[] = {
+	KEY_POWER,  //GESTURE_WORD_C
+	KEY_POWER,  //GESTURE_WORD_W
+	KEY_POWER,  //GESTURE_WORD_V
+	KEY_POWER,  //GESTURE_DOUBLE_CLICK
+	KEY_POWER,  //GESTURE_WORD_Z
+	KEY_POWER,  //GESTURE_WORD_M
+	KEY_POWER,  //GESTURE_WORD_O
+	KEY_POWER,  //GESTURE_WORD_e
+	KEY_POWER,  //GESTURE_WORD_S
+	KEY_POWER,  //GESTURE_SLIDE_UP
+	KEY_POWER,  //GESTURE_SLIDE_DOWN
+	KEY_POWER,  //GESTURE_SLIDE_LEFT
+	KEY_POWER,  //GESTURE_SLIDE_RIGHT
+};
+#endif
+
+static uint8_t bTouchIsAwake = 0;
+
+/*******************************************************
+ * Description:
+ *     Novatek touchscreen irq enable/disable function.
+ *
+ * return:
+ *     n.a.
+ *******************************************************/
+static void nvt_irq_enable(bool enable)
+{
+	struct irq_desc *desc;
+
+	if (enable) {
+		if (!ts->irq_enabled) {
+			enable_irq(ts->client->irq);
+			ts->irq_enabled = true;
+		}
+	} else {
+		if (ts->irq_enabled) {
+			disable_irq(ts->client->irq);
+			ts->irq_enabled = false;
+		}
+	}
+
+	desc = irq_to_desc(ts->client->irq);
+	NVT_LOG("enable=%d, desc->depth=%d\n", enable, desc->depth);
+}
+
+/*******************************************************
+ * Description:
+ *     Novatek touchscreen i2c read function.
+ *
+ * return:
+ *     Executive outcomes. 2---succeed. -5---I/O error
+ *******************************************************/
+int32_t CTP_I2C_READ(struct i2c_client *client, uint16_t address, uint8_t *buf,
+		uint16_t len)
+{
+	struct i2c_msg msgs[2];
+	int32_t ret = -1;
+	int32_t retries = 0;
+
+	mutex_lock(&ts->xbuf_lock);
+
+	msgs[0].flags = !I2C_M_RD;
+	msgs[0].addr  = address;
+	msgs[0].len   = 1;
+	msgs[0].buf   = &buf[0];
+
+	msgs[1].flags = I2C_M_RD;
+	msgs[1].addr  = address;
+	msgs[1].len   = len - 1;
+	msgs[1].buf   = ts->xbuf;
+
+	while (retries < 5) {
+		ret = i2c_transfer(client->adapter, msgs, 2);
+		if (ret == 2)	break;
+		retries++;
+	}
+
+	if (unlikely(retries == 5)) {
+		NVT_ERR("error, ret=%d\n", ret);
+		ret = -EIO;
+	}
+
+	memcpy(buf + 1, ts->xbuf, len - 1);
+
+	mutex_unlock(&ts->xbuf_lock);
+
+	return ret;
+}
+
+/*******************************************************
+ * Description:
+ *     Novatek touchscreen i2c write function.
+ *
+ * return:
+ *     Executive outcomes. 1---succeed. -5---I/O error
+ *******************************************************/
+int32_t CTP_I2C_WRITE(struct i2c_client *client, uint16_t address, uint8_t *buf,
+		uint16_t len)
+{
+	struct i2c_msg msg;
+	int32_t ret = -1;
+	int32_t retries = 0;
+
+	mutex_lock(&ts->xbuf_lock);
+
+	msg.flags = !I2C_M_RD;
+	msg.addr  = address;
+	msg.len   = len;
+	memcpy(ts->xbuf, buf, len);
+	msg.buf   = ts->xbuf;
+
+	while (retries < 5) {
+		ret = i2c_transfer(client->adapter, &msg, 1);
+		if (ret == 1)	break;
+		retries++;
+	}
+
+	if (unlikely(retries == 5)) {
+		NVT_ERR("error, ret=%d\n", ret);
+		ret = -EIO;
+	}
+
+	mutex_unlock(&ts->xbuf_lock);
+
+	return ret;
+}
+
+/*******************************************************
+ * Description:
+ *     Novatek touchscreen set index/page/addr address.
+ *
+ * return:
+ *     Executive outcomes. 0---succeed. -5---access fail.
+ ********************************************************/
+int32_t nvt_set_page(uint16_t i2c_addr, uint32_t addr)
+{
+	uint8_t buf[4] = {0};
+
+	buf[0] = 0xFF;	//set index/page/addr command
+	buf[1] = (addr >> 16) & 0xFF;
+	buf[2] = (addr >> 8) & 0xFF;
+
+	return CTP_I2C_WRITE(ts->client, i2c_addr, buf, 3);
+}
+
+/*******************************************************
+ * Description:
+ *     Novatek touchscreen reset MCU then into idle mode
+ * function.
+ *
+ * return:
+ *     n.a.
+ *******************************************************/
+void nvt_sw_reset_idle(void)
+{
+	uint8_t buf[4]={0};
+
+	//---write i2c cmds to reset idle---
+	buf[0]=0x00;
+	buf[1]=0xA5;
+	CTP_I2C_WRITE(ts->client, I2C_HW_Address, buf, 2);
+
+	msleep(15);
+}
+
+/*******************************************************
+ * Description:
+ *     Novatek touchscreen reset MCU (boot) function.
+ *
+ * return:
+ *     n.a.
+ *******************************************************/
+void nvt_bootloader_reset(void)
+{
+	uint8_t buf[8] = {0};
+
+	NVT_LOG("start\n");
+
+	//---write i2c cmds to reset---
+	buf[0] = 0x00;
+	buf[1] = 0x69;
+	CTP_I2C_WRITE(ts->client, I2C_HW_Address, buf, 2);
+
+	// need 35ms delay after bootloader reset
+	msleep(35);
+
+	NVT_LOG("end\n");
+}
+
+/*******************************************************
+ * Description:
+ *     Novatek touchscreen clear FW status function.
+ *
+ * return:
+ *     Executive outcomes. 0---succeed. -1---fail.
+ *******************************************************/
+int32_t nvt_clear_fw_status(void)
+{
+	uint8_t buf[8] = {0};
+	int32_t i = 0;
+	const int32_t retry = 20;
+
+	for (i = 0; i < retry; i++) {
+		//---set xdata index to EVENT BUF ADDR---
+		nvt_set_page(I2C_FW_Address, ts->mmap->EVENT_BUF_ADDR | EVENT_MAP_HANDSHAKING_or_SUB_CMD_BYTE);
+
+		//---clear fw status---
+		buf[0] = EVENT_MAP_HANDSHAKING_or_SUB_CMD_BYTE;
+		buf[1] = 0x00;
+		CTP_I2C_WRITE(ts->client, I2C_FW_Address, buf, 2);
+
+		//---read fw status---
+		buf[0] = EVENT_MAP_HANDSHAKING_or_SUB_CMD_BYTE;
+		buf[1] = 0xFF;
+		CTP_I2C_READ(ts->client, I2C_FW_Address, buf, 2);
+
+		if (buf[1] == 0x00)
+			break;
+
+		usleep_range(10000, 10000);
+	}
+
+	if (i >= retry) {
+		NVT_ERR("failed, i=%d, buf[1]=0x%02X\n", i, buf[1]);
+		return -1;
+	} else {
+		return 0;
+	}
+}
+
+/*******************************************************
+ * Description:
+ *     Novatek touchscreen check FW status function.
+ *
+ * return:
+ *     Executive outcomes. 0---succeed. -1---failed.
+ *******************************************************/
+int32_t nvt_check_fw_status(void)
+{
+	uint8_t buf[8] = {0};
+	int32_t i = 0;
+	const int32_t retry = 50;
+
+	for (i = 0; i < retry; i++) {
+		//---set xdata index to EVENT BUF ADDR---
+		nvt_set_page(I2C_FW_Address, ts->mmap->EVENT_BUF_ADDR | EVENT_MAP_HANDSHAKING_or_SUB_CMD_BYTE);
+
+		//---read fw status---
+		buf[0] = EVENT_MAP_HANDSHAKING_or_SUB_CMD_BYTE;
+		buf[1] = 0x00;
+		CTP_I2C_READ(ts->client, I2C_FW_Address, buf, 2);
+
+		if ((buf[1] & 0xF0) == 0xA0)
+			break;
+
+		usleep_range(10000, 10000);
+	}
+
+	if (i >= retry) {
+		NVT_ERR("failed, i=%d, buf[1]=0x%02X\n", i, buf[1]);
+		return -1;
+	} else {
+		return 0;
+	}
+}
+
+/*******************************************************
+ * Description:
+ *     Novatek touchscreen check FW reset state function.
+ *
+ * return:
+ *     Executive outcomes. 0---succeed. -1---failed.
+ ******************************************************/
+int32_t nvt_check_fw_reset_state(RST_COMPLETE_STATE check_reset_state)
+{
+	uint8_t buf[8] = {0};
+	int32_t ret = 0;
+	int32_t retry = 0;
+
+	while (1) {
+		usleep_range(10000, 10000);
+
+		//---read reset state---
+		buf[0] = EVENT_MAP_RESET_COMPLETE;
+		buf[1] = 0x00;
+		CTP_I2C_READ(ts->client, I2C_FW_Address, buf, 6);
+
+		if ((buf[1] >= check_reset_state) && (buf[1] <= RESET_STATE_MAX)) {
+			ret = 0;
+			break;
+		}
+
+		retry++;
+		if(unlikely(retry > 100)) {
+			NVT_ERR("error, retry=%d, buf[1]=0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X\n",
+				retry, buf[1], buf[2], buf[3], buf[4], buf[5]);
+			ret = -1;
+			break;
+		}
+	}
+
+	return ret;
+}
+
+/*******************************************************
+ * Description:
+ *     Novatek touchscreen get novatek project id information
+ * function.
+ *
+ * return:
+ *     Executive outcomes. 0---success. -1---fail.
+ *******************************************************/
+int32_t nvt_read_pid(void)
+{
+	uint8_t buf[3] = {0};
+
+	//---set xdata index to EVENT BUF ADDR---
+	nvt_set_page(I2C_FW_Address, ts->mmap->EVENT_BUF_ADDR | EVENT_MAP_PROJECTID);
+
+	//---read project id---
+	buf[0] = EVENT_MAP_PROJECTID;
+	buf[1] = 0x00;
+	buf[2] = 0x00;
+	CTP_I2C_READ(ts->client, I2C_FW_Address, buf, 3);
+
+	ts->nvt_pid = (buf[2] << 8) + buf[1];
+
+	NVT_LOG("PID=%04X\n", ts->nvt_pid);
+
+	return 0;
+}
+
+/*******************************************************
+Description:
+	Novatek touchscreen get firmware related information
+	function.
+
+return:
+	Executive outcomes. 0---success. -1---fail.
+*******************************************************/
+int32_t nvt_get_fw_info(void)
+{
+	uint8_t buf[64] = {0};
+	uint32_t retry_count = 0;
+	int32_t ret = 0;
+
+info_retry:
+	//---set xdata index to EVENT BUF ADDR---
+	nvt_set_page(I2C_FW_Address, ts->mmap->EVENT_BUF_ADDR | EVENT_MAP_FWINFO);
+
+	//---read fw info---
+	buf[0] = EVENT_MAP_FWINFO;
+	CTP_I2C_READ(ts->client, I2C_FW_Address, buf, 17);
+	ts->fw_ver = buf[1];
+	ts->x_num = buf[3];
+	ts->y_num = buf[4];
+	ts->abs_x_max = (uint16_t)((buf[5] << 8) | buf[6]);
+	ts->abs_y_max = (uint16_t)((buf[7] << 8) | buf[8]);
+	ts->max_button_num = buf[11];
+
+	//---clear x_num, y_num if fw info is broken---
+	if ((buf[1] + buf[2]) != 0xFF) {
+		NVT_ERR("FW info is broken! fw_ver=0x%02X, ~fw_ver=0x%02X\n", buf[1], buf[2]);
+		ts->fw_ver = 0;
+		ts->x_num = 18;
+		ts->y_num = 32;
+		ts->abs_x_max = TOUCH_DEFAULT_MAX_WIDTH;
+		ts->abs_y_max = TOUCH_DEFAULT_MAX_HEIGHT;
+		ts->max_button_num = TOUCH_KEY_NUM;
+
+		if(retry_count < 3) {
+			retry_count++;
+			NVT_ERR("retry_count=%d\n", retry_count);
+			goto info_retry;
+		} else {
+			NVT_ERR("Set default fw_ver=%d, x_num=%d, y_num=%d, "
+					"abs_x_max=%d, abs_y_max=%d, max_button_num=%d!\n",
+					ts->fw_ver, ts->x_num, ts->y_num,
+					ts->abs_x_max, ts->abs_y_max, ts->max_button_num);
+			ret = -1;
+		}
+	} else {
+		ret = 0;
+	}
+
+	//---Get Novatek PID---
+	nvt_read_pid();
+
+	return ret;
+}
+
+/*******************************************************
+ * Create Device Node (Proc Entry)
+ *******************************************************/
+#if NVT_TOUCH_PROC
+static struct proc_dir_entry *NVT_proc_entry;
+#define DEVICE_NAME	"NVTflash"
+
+/*******************************************************
+ * Description:
+ *     Novatek touchscreen /proc/NVTflash read function.
+ *
+ * return:
+ *     Executive outcomes. 2---succeed. -5,-14---failed.
+ *******************************************************/
+static ssize_t nvt_flash_read(struct file *file, char __user *buff,
+	size_t count, loff_t *offp)
+{
+	uint8_t str[68] = {0};
+	int32_t ret = -1;
+	int32_t retries = 0;
+	int8_t i2c_wr = 0;
+
+	if (count > sizeof(str)) {
+		NVT_ERR("error count=%zu\n", count);
+		return -EFAULT;
+	}
+
+	if (copy_from_user(str, buff, count)) {
+		NVT_ERR("copy from user error\n");
+		return -EFAULT;
+	}
+
+#if NVT_TOUCH_ESD_PROTECT
+	/*
+	 * stop esd check work to avoid case that 0x77 report righ after here to enable esd check again
+	 * finally lead to trigger esd recovery bootloader reset
+	 */
+	cancel_delayed_work_sync(&nvt_esd_check_work);
+	nvt_esd_check_enable(false);
+#endif /* #if NVT_TOUCH_ESD_PROTECT */
+
+	i2c_wr = str[0] >> 7;
+
+	if (i2c_wr == 0) {	//I2C write
+		while (retries < 20) {
+			ret = CTP_I2C_WRITE(ts->client, (str[0] & 0x7F), &str[2], str[1]);
+			if (ret == 1)
+				break;
+			else
+				NVT_ERR("error, retries=%d, ret=%d\n", retries, ret);
+
+			retries++;
+		}
+
+		if (unlikely(retries == 20)) {
+			NVT_ERR("error, ret = %d\n", ret);
+			return -EIO;
+		}
+
+		return ret;
+	} else if (i2c_wr == 1) {	//I2C read
+		while (retries < 20) {
+			ret = CTP_I2C_READ(ts->client, (str[0] & 0x7F), &str[2], str[1]);
+			if (ret == 2)
+				break;
+			else
+				NVT_ERR("error, retries=%d, ret=%d\n", retries, ret);
+
+			retries++;
+		}
+
+		// copy buff to user if i2c transfer
+		if (retries < 20) {
+			if (copy_to_user(buff, str, count))
+				return -EFAULT;
+		}
+
+		if (unlikely(retries == 20)) {
+			NVT_ERR("error, ret = %d\n", ret);
+			return -EIO;
+		}
+
+		return ret;
+	} else {
+		NVT_ERR("Call error, str[0]=%d\n", str[0]);
+		return -EFAULT;
+	}
+}
+
+/*******************************************************
+ * Description:
+ *     Novatek touchscreen /proc/NVTflash open function.
+ *
+ * return:
+ *     Executive outcomes. 0---succeed. -12---failed.
+ *******************************************************/
+static int32_t nvt_flash_open(struct inode *inode, struct file *file)
+{
+	struct nvt_flash_data *dev;
+
+	dev = kmalloc(sizeof(struct nvt_flash_data), GFP_KERNEL);
+	if (dev == NULL) {
+		NVT_ERR("Failed to allocate memory for nvt flash data\n");
+		return -ENOMEM;
+	}
+
+	rwlock_init(&dev->lock);
+	file->private_data = dev;
+
+	return 0;
+}
+
+/*******************************************************
+ * Description:
+ *     Novatek touchscreen /proc/NVTflash close function.
+ *
+ * return:
+ *     Executive outcomes. 0---succeed.
+ *******************************************************/
+static int32_t nvt_flash_close(struct inode *inode, struct file *file)
+{
+	struct nvt_flash_data *dev = file->private_data;
+
+	kfree(dev);
+
+	return 0;
+}
+
+static const struct file_operations nvt_flash_fops = {
+	.open = nvt_flash_open,
+	.release = nvt_flash_close,
+	.read = nvt_flash_read,
+};
+
+/*******************************************************
+ * Description:
+ *     Novatek touchscreen /proc/NVTflash initial function.
+ *
+ * return:
+ *     Executive outcomes. 0---succeed. -12---failed.
+ *******************************************************/
+static int32_t nvt_flash_proc_init(void)
+{
+	NVT_proc_entry = proc_create(DEVICE_NAME, 0444, NULL,&nvt_flash_fops);
+	if (NVT_proc_entry == NULL) {
+		NVT_ERR("Failed!\n");
+		return -ENOMEM;
+	} else {
+		NVT_LOG("Succeeded!\n");
+	}
+
+	NVT_LOG("==========================================================\n");
+	NVT_LOG("Create /proc/%s\n", DEVICE_NAME);
+	NVT_LOG("==========================================================\n");
+
+	return 0;
+}
+
+/*******************************************************
+ * Description:
+ *     Novatek touchscreen /proc/NVTflash deinitial function.
+ *
+ * return:
+ *     n.a.
+ *******************************************************/
+static void nvt_flash_proc_deinit(void)
+{
+	if (NVT_proc_entry != NULL) {
+		remove_proc_entry(DEVICE_NAME, NULL);
+		NVT_proc_entry = NULL;
+		NVT_LOG("Removed /proc/%s\n", DEVICE_NAME);
+	}
+}
+#endif
+
+#if WAKEUP_GESTURE
+#define GESTURE_WORD_C          12
+#define GESTURE_WORD_W          13
+#define GESTURE_WORD_V          14
+#define GESTURE_DOUBLE_CLICK    15
+#define GESTURE_WORD_Z          16
+#define GESTURE_WORD_M          17
+#define GESTURE_WORD_O          18
+#define GESTURE_WORD_e          19
+#define GESTURE_WORD_S          20
+#define GESTURE_SLIDE_UP        21
+#define GESTURE_SLIDE_DOWN      22
+#define GESTURE_SLIDE_LEFT      23
+#define GESTURE_SLIDE_RIGHT     24
+/* customized gesture id */
+#define DATA_PROTOCOL           30
+
+/* function page definition */
+#define FUNCPAGE_GESTURE         1
+
+/*******************************************************
+ * Description:
+ *     Novatek touchscreen wake up gesture key report function.
+ *
+ * return:
+ *     n.a.
+ *******************************************************/
+void nvt_ts_wakeup_gesture_report(uint8_t gesture_id, uint8_t *data)
+{
+	uint32_t keycode = 0;
+	uint8_t func_type = data[2];
+	uint8_t func_id = data[3];
+
+	/* support fw specifal data protocol */
+	if ((gesture_id == DATA_PROTOCOL) && (func_type == FUNCPAGE_GESTURE)) {
+		gesture_id = func_id;
+	} else if (gesture_id > DATA_PROTOCOL) {
+		NVT_ERR("gesture_id %d is invalid, func_type=%d, func_id=%d\n", gesture_id, func_type, func_id);
+		return;
+	}
+
+	NVT_LOG("gesture_id = %d\n", gesture_id);
+
+	switch (gesture_id) {
+		case GESTURE_WORD_C:
+			NVT_LOG("Gesture : Word-C.\n");
+			keycode = gesture_key_array[0];
+			break;
+		case GESTURE_WORD_W:
+			NVT_LOG("Gesture : Word-W.\n");
+			keycode = gesture_key_array[1];
+			break;
+		case GESTURE_WORD_V:
+			NVT_LOG("Gesture : Word-V.\n");
+			keycode = gesture_key_array[2];
+			break;
+		case GESTURE_DOUBLE_CLICK:
+			NVT_LOG("Gesture : Double Click.\n");
+			keycode = gesture_key_array[3];
+			break;
+		case GESTURE_WORD_Z:
+			NVT_LOG("Gesture : Word-Z.\n");
+			keycode = gesture_key_array[4];
+			break;
+		case GESTURE_WORD_M:
+			NVT_LOG("Gesture : Word-M.\n");
+			keycode = gesture_key_array[5];
+			break;
+		case GESTURE_WORD_O:
+			NVT_LOG("Gesture : Word-O.\n");
+			keycode = gesture_key_array[6];
+			break;
+		case GESTURE_WORD_e:
+			NVT_LOG("Gesture : Word-e.\n");
+			keycode = gesture_key_array[7];
+			break;
+		case GESTURE_WORD_S:
+			NVT_LOG("Gesture : Word-S.\n");
+			keycode = gesture_key_array[8];
+			break;
+		case GESTURE_SLIDE_UP:
+			NVT_LOG("Gesture : Slide UP.\n");
+			keycode = gesture_key_array[9];
+			break;
+		case GESTURE_SLIDE_DOWN:
+			NVT_LOG("Gesture : Slide DOWN.\n");
+			keycode = gesture_key_array[10];
+			break;
+		case GESTURE_SLIDE_LEFT:
+			NVT_LOG("Gesture : Slide LEFT.\n");
+			keycode = gesture_key_array[11];
+			break;
+		case GESTURE_SLIDE_RIGHT:
+			NVT_LOG("Gesture : Slide RIGHT.\n");
+			keycode = gesture_key_array[12];
+			break;
+		default:
+			break;
+	}
+
+	if (keycode > 0) {
+		input_report_key(ts->input_dev, keycode, 1);
+		input_sync(ts->input_dev);
+		input_report_key(ts->input_dev, keycode, 0);
+		input_sync(ts->input_dev);
+	}
+}
+#endif
+
+/*******************************************************
+ * Description:
+ *     Novatek touchscreen parse device tree function.
+ *
+ * return:
+ *     n.a.
+ *******************************************************/
+#ifdef CONFIG_OF
+static void nvt_parse_dt(struct device *dev)
+{
+	struct device_node *np = dev->of_node;
+
+#if NVT_TOUCH_SUPPORT_HW_RST
+	ts->reset_gpio = of_get_named_gpio_flags(np, "novatek,reset-gpio", 0, &ts->reset_flags);
+	NVT_LOG("novatek,reset-gpio=%d\n", ts->reset_gpio);
+#endif
+	ts->irq_gpio = of_get_named_gpio_flags(np, "novatek,irq-gpio", 0, &ts->irq_flags);
+	NVT_LOG("novatek,irq-gpio=%d\n", ts->irq_gpio);
+
+}
+#else
+static void nvt_parse_dt(struct device *dev)
+{
+#if NVT_TOUCH_SUPPORT_HW_RST
+	ts->reset_gpio = NVTTOUCH_RST_PIN;
+#endif
+	ts->irq_gpio = NVTTOUCH_INT_PIN;
+}
+#endif
+
+/*******************************************************
+ * Description:
+ *     Novatek touchscreen config and request gpio
+ *
+ * return:
+ *     Executive outcomes. 0---succeed. not 0---failed.
+ *******************************************************/
+static int nvt_gpio_config(struct nvt_ts_data *ts)
+{
+	int32_t ret = 0;
+
+#if NVT_TOUCH_SUPPORT_HW_RST
+	/* request RST-pin (Output/High) */
+	if (gpio_is_valid(ts->reset_gpio)) {
+		ret = gpio_request_one(ts->reset_gpio, GPIOF_OUT_INIT_HIGH, "NVT-tp-rst");
+		if (ret) {
+			NVT_ERR("Failed to request NVT-tp-rst GPIO\n");
+			goto err_request_reset_gpio;
+		}
+	}
+#endif
+
+	/* request INT-pin (Input) */
+	if (gpio_is_valid(ts->irq_gpio)) {
+		ret = gpio_request_one(ts->irq_gpio, GPIOF_IN, "NVT-int");
+		if (ret) {
+			NVT_ERR("Failed to request NVT-int GPIO\n");
+			goto err_request_irq_gpio;
+		}
+	}
+
+	return ret;
+
+err_request_irq_gpio:
+#if NVT_TOUCH_SUPPORT_HW_RST
+	gpio_free(ts->reset_gpio);
+err_request_reset_gpio:
+#endif
+	return ret;
+}
+
+/*******************************************************
+ * Description:
+ *     Novatek touchscreen deconfig gpio
+ *
+ * return:
+ *     n.a.
+ *******************************************************/
+static void nvt_gpio_deconfig(struct nvt_ts_data *ts)
+{
+	if (gpio_is_valid(ts->irq_gpio))
+		gpio_free(ts->irq_gpio);
+#if NVT_TOUCH_SUPPORT_HW_RST
+	if (gpio_is_valid(ts->reset_gpio))
+		gpio_free(ts->reset_gpio);
+#endif
+}
+
+static uint8_t nvt_fw_recovery(uint8_t *point_data)
+{
+	uint8_t i = 0;
+	uint8_t detected = true;
+
+	/* check pattern */
+	for (i=1 ; i<7 ; i++) {
+		if (point_data[i] != 0x77) {
+			detected = false;
+			break;
+		}
+	}
+
+	return detected;
+}
+
+#if NVT_TOUCH_ESD_PROTECT
+void nvt_esd_check_enable(uint8_t enable)
+{
+	/* update interrupt timer */
+	irq_timer = jiffies;
+	/* clear esd_retry counter, if protect function is enabled */
+	esd_retry = enable ? 0 : esd_retry;
+	/* enable/disable esd check flag */
+	esd_check = enable;
+}
+
+static void nvt_esd_check_func(struct work_struct *work)
+{
+	unsigned int timer = jiffies_to_msecs(jiffies - irq_timer);
+
+	//NVT_ERR("esd_check = %d (retry %d)\n", esd_check, esd_retry);	//DEBUG
+
+	if ((timer > NVT_TOUCH_ESD_CHECK_PERIOD) && esd_check) {
+		mutex_lock(&ts->lock);
+		NVT_ERR("do ESD recovery, timer = %d, retry = %d\n", timer, esd_retry);
+		/* do esd recovery, bootloader reset */
+		nvt_bootloader_reset();
+		mutex_unlock(&ts->lock);
+		/* update interrupt timer */
+		irq_timer = jiffies;
+		/* update esd_retry counter */
+		esd_retry++;
+	}
+
+	queue_delayed_work(nvt_esd_check_wq, &nvt_esd_check_work,
+			msecs_to_jiffies(NVT_TOUCH_ESD_CHECK_PERIOD));
+}
+#endif /* #if NVT_TOUCH_ESD_PROTECT */
+
+#define POINT_DATA_LEN 65
+/*******************************************************
+ * Description:
+ *     Novatek touchscreen work function.
+ *
+ * return:
+ *     n.a.
+ *******************************************************/
+static irqreturn_t nvt_ts_work_func(int irq, void *data)
+{
+	int32_t ret = -1;
+	uint8_t point_data[POINT_DATA_LEN + 1] = {0};
+	uint32_t position = 0;
+	uint32_t input_x = 0;
+	uint32_t input_y = 0;
+	uint32_t input_w = 0;
+	uint32_t input_p = 0;
+	uint8_t input_id = 0;
+#if MT_PROTOCOL_B
+	uint8_t press_id[TOUCH_MAX_FINGER_NUM] = {0};
+#endif /* MT_PROTOCOL_B */
+	int32_t i = 0;
+	int32_t finger_cnt = 0;
+
+#if WAKEUP_GESTURE
+	if (bTouchIsAwake == 0) {
+		pm_wakeup_event(&ts->input_dev->dev, 5000);
+	}
+#endif
+
+	mutex_lock(&ts->lock);
+
+	ret = CTP_I2C_READ(ts->client, I2C_FW_Address, point_data, POINT_DATA_LEN + 1);
+	if (ret < 0) {
+		NVT_ERR("CTP_I2C_READ failed.(%d)\n", ret);
+		goto XFER_ERROR;
+	}
+
+	if (nvt_fw_recovery(point_data)) {
+#if NVT_TOUCH_ESD_PROTECT
+		nvt_esd_check_enable(true);
+#endif /* #if NVT_TOUCH_ESD_PROTECT */
+		goto XFER_ERROR;
+	}
+
+#if WAKEUP_GESTURE
+	if (bTouchIsAwake == 0) {
+		input_id = (uint8_t)(point_data[1] >> 3);
+		nvt_ts_wakeup_gesture_report(input_id, point_data);
+		mutex_unlock(&ts->lock);
+		return IRQ_HANDLED;
+	}
+#endif
+
+	finger_cnt = 0;
+
+	for (i = 0; i < ts->max_touch_num; i++) {
+		position = 1 + 6 * i;
+		input_id = (uint8_t)(point_data[position + 0] >> 3);
+		if ((input_id == 0) || (input_id > ts->max_touch_num))
+			continue;
+
+		if (((point_data[position] & 0x07) == 0x01) || ((point_data[position] & 0x07) == 0x02)) {	//finger down (enter & moving)
+#if NVT_TOUCH_ESD_PROTECT
+			/* update interrupt timer */
+			irq_timer = jiffies;
+#endif /* #if NVT_TOUCH_ESD_PROTECT */
+			input_x = (uint32_t)(point_data[position + 1] << 4) + (uint32_t) (point_data[position + 3] >> 4);
+			input_y = (uint32_t)(point_data[position + 2] << 4) + (uint32_t) (point_data[position + 3] & 0x0F);
+			if ((input_x < 0) || (input_y < 0))
+				continue;
+			if ((input_x > ts->abs_x_max) || (input_y > ts->abs_y_max))
+				continue;
+			input_w = (uint32_t)(point_data[position + 4]);
+			if (input_w == 0)
+				input_w = 1;
+			if (i < 2) {
+				input_p = (uint32_t)(point_data[position + 5]) + (uint32_t)(point_data[i + 63] << 8);
+				if (input_p > TOUCH_FORCE_NUM)
+					input_p = TOUCH_FORCE_NUM;
+			} else {
+				input_p = (uint32_t)(point_data[position + 5]);
+			}
+			if (input_p == 0)
+				input_p = 1;
+
+#if MT_PROTOCOL_B
+			press_id[input_id - 1] = 1;
+			input_mt_slot(ts->input_dev, input_id - 1);
+			input_mt_report_slot_state(ts->input_dev, MT_TOOL_FINGER, true);
+#else /* MT_PROTOCOL_B */
+			input_report_abs(ts->input_dev, ABS_MT_TRACKING_ID, input_id - 1);
+			input_report_key(ts->input_dev, BTN_TOUCH, 1);
+#endif /* MT_PROTOCOL_B */
+
+			input_report_abs(ts->input_dev, ABS_MT_POSITION_X, input_x);
+			input_report_abs(ts->input_dev, ABS_MT_POSITION_Y, input_y);
+			input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, input_w);
+			input_report_abs(ts->input_dev, ABS_MT_PRESSURE, input_p);
+
+#if MT_PROTOCOL_B
+#else /* MT_PROTOCOL_B */
+			input_mt_sync(ts->input_dev);
+#endif /* MT_PROTOCOL_B */
+
+			finger_cnt++;
+		}
+	}
+
+#if MT_PROTOCOL_B
+	for (i = 0; i < ts->max_touch_num; i++) {
+		if (press_id[i] != 1) {
+			input_mt_slot(ts->input_dev, i);
+			input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, 0);
+			input_report_abs(ts->input_dev, ABS_MT_PRESSURE, 0);
+			input_mt_report_slot_state(ts->input_dev, MT_TOOL_FINGER, false);
+		}
+	}
+
+	input_report_key(ts->input_dev, BTN_TOUCH, (finger_cnt > 0));
+#else /* MT_PROTOCOL_B */
+	if (finger_cnt == 0) {
+		input_report_key(ts->input_dev, BTN_TOUCH, 0);
+		input_mt_sync(ts->input_dev);
+	}
+#endif /* MT_PROTOCOL_B */
+
+#if TOUCH_KEY_NUM > 0
+	if (point_data[61] == 0xF8) {
+#if NVT_TOUCH_ESD_PROTECT
+		/* update interrupt timer */
+		irq_timer = jiffies;
+#endif /* #if NVT_TOUCH_ESD_PROTECT */
+		for (i = 0; i < ts->max_button_num; i++) {
+			input_report_key(ts->input_dev, touch_key_array[i], ((point_data[62] >> i) & 0x01));
+		}
+	} else {
+		for (i = 0; i < ts->max_button_num; i++) {
+			input_report_key(ts->input_dev, touch_key_array[i], 0);
+		}
+	}
+#endif
+
+	input_sync(ts->input_dev);
+
+XFER_ERROR:
+
+	mutex_unlock(&ts->lock);
+
+	return IRQ_HANDLED;
+}
+
+/*******************************************************
+ * Description:
+ *     Novatek touchscreen check and stop crc reboot loop.
+ *
+ * return:
+ *     n.a.
+*******************************************************/
+void nvt_stop_crc_reboot(void)
+{
+	uint8_t buf[8] = {0};
+	int32_t retry = 0;
+
+	//read dummy buffer to check CRC fail reboot is happening or not
+
+	//---change I2C index to prevent geting 0xFF, but not 0xFC---
+	nvt_set_page(I2C_BLDR_Address, 0x1F64E);
+
+	//---read to check if buf is 0xFC which means IC is in CRC reboot ---
+	buf[0] = 0x4E;
+	CTP_I2C_READ(ts->client, I2C_BLDR_Address, buf, 4);
+
+	if ((buf[1] == 0xFC) ||
+		((buf[1] == 0xFF) && (buf[2] == 0xFF) && (buf[3] == 0xFF))) {
+
+		//IC is in CRC fail reboot loop, needs to be stopped!
+		for (retry = 5; retry > 0; retry--) {
+
+			//---write i2c cmds to reset idle : 1st---
+			buf[0]=0x00;
+			buf[1]=0xA5;
+			CTP_I2C_WRITE(ts->client, I2C_HW_Address, buf, 2);
+
+			//---write i2c cmds to reset idle : 2rd---
+			buf[0]=0x00;
+			buf[1]=0xA5;
+			CTP_I2C_WRITE(ts->client, I2C_HW_Address, buf, 2);
+			msleep(1);
+
+			//---clear CRC_ERR_FLAG---
+			nvt_set_page(I2C_BLDR_Address, 0x3F135);
+
+			buf[0] = 0x35;
+			buf[1] = 0xA5;
+			CTP_I2C_WRITE(ts->client, I2C_BLDR_Address, buf, 2);
+
+			//---check CRC_ERR_FLAG---
+			nvt_set_page(I2C_BLDR_Address, 0x3F135);
+
+			buf[0] = 0x35;
+			buf[1] = 0x00;
+			CTP_I2C_READ(ts->client, I2C_BLDR_Address, buf, 2);
+
+			if (buf[1] == 0xA5)
+				break;
+		}
+		if (retry == 0)
+			NVT_ERR("CRC auto reboot is not able to be stopped!\n");
+	}
+
+	return;
+}
+
+/*******************************************************
+ * Description:
+ *     Novatek touchscreen check chip version trim function.
+ *
+ * return:
+ *     Executive outcomes. 0---NVT IC. -1---not NVT IC.
+ *******************************************************/
+static int8_t nvt_ts_check_chip_ver_trim(void)
+{
+	uint8_t buf[8] = {0};
+	int32_t retry = 0;
+	int32_t list = 0;
+	int32_t i = 0;
+	int32_t found_nvt_chip = 0;
+	int32_t ret = -1;
+
+	nvt_bootloader_reset(); // NOT in retry loop
+
+	//---Check for 5 times---
+	for (retry = 5; retry > 0; retry--) {
+		nvt_sw_reset_idle();
+
+		buf[0] = 0x00;
+		buf[1] = 0x35;
+		CTP_I2C_WRITE(ts->client, I2C_HW_Address, buf, 2);
+		msleep(10);
+
+		nvt_set_page(I2C_BLDR_Address, 0x1F64E);
+
+		buf[0] = 0x4E;
+		buf[1] = 0x00;
+		buf[2] = 0x00;
+		buf[3] = 0x00;
+		buf[4] = 0x00;
+		buf[5] = 0x00;
+		buf[6] = 0x00;
+		CTP_I2C_READ(ts->client, I2C_BLDR_Address, buf, 7);
+		NVT_LOG("buf[1]=0x%02X, buf[2]=0x%02X, buf[3]=0x%02X, buf[4]=0x%02X, buf[5]=0x%02X, buf[6]=0x%02X\n",
+			buf[1], buf[2], buf[3], buf[4], buf[5], buf[6]);
+
+		//---Stop CRC check to prevent IC auto reboot---
+		if ((buf[1] == 0xFC) ||
+			((buf[1] == 0xFF) && (buf[2] == 0xFF) && (buf[3] == 0xFF))) {
+			nvt_stop_crc_reboot();
+			continue;
+		}
+
+		// compare read chip id on supported list
+		for (list = 0; list < (sizeof(trim_id_table) / sizeof(struct nvt_ts_trim_id_table)); list++) {
+			found_nvt_chip = 0;
+
+			// compare each byte
+			for (i = 0; i < NVT_ID_BYTE_MAX; i++) {
+				if (trim_id_table[list].mask[i]) {
+					if (buf[i + 1] != trim_id_table[list].id[i])
+						break;
+				}
+			}
+
+			if (i == NVT_ID_BYTE_MAX) {
+				found_nvt_chip = 1;
+			}
+
+			if (found_nvt_chip) {
+				NVT_LOG("This is NVT touch IC\n");
+				ts->mmap = trim_id_table[list].mmap;
+				ts->carrier_system = trim_id_table[list].hwinfo->carrier_system;
+				ret = 0;
+				goto out;
+			} else {
+				ts->mmap = NULL;
+				ret = -1;
+			}
+		}
+
+		msleep(10);
+	}
+
+out:
+	return ret;
+}
+
+#if defined(CONFIG_DRM_PANEL)
+static int nvt_ts_check_dt(struct device_node *np)
+{
+	int i;
+	int count;
+	struct device_node *node;
+	struct drm_panel *panel;
+
+	count = of_count_phandle_with_args(np, "panel", NULL);
+	if (count <= 0)
+		return 0;
+
+	for (i = 0; i < count; i++) {
+		node = of_parse_phandle(np, "panel", i);
+		panel = of_drm_find_panel(node);
+		of_node_put(node);
+		if (!IS_ERR(panel)) {
+			active_panel = panel;
+			NVT_LOG(" %s:find\n", __func__);
+			return 0;
+		}
+	}
+
+	NVT_ERR(" %s: not find\n", __func__);
+	return -ENODEV;
+}
+
+static int nvt_ts_check_default_tp(struct device_node *dt, const char *prop)
+{
+	const char **active_tp = NULL;
+	int count, tmp, score = 0;
+	const char *active;
+	int ret, i;
+
+	count = of_property_count_strings(dt->parent, prop);
+	if (count <= 0 || count > 3)
+		return -ENODEV;
+
+	active_tp = kcalloc(count, sizeof(char *),  GFP_KERNEL);
+	if (!active_tp) {
+		NVT_ERR("FTS alloc failed\n");
+		return -ENOMEM;
+	}
+
+	ret = of_property_read_string_array(dt->parent, prop,
+			active_tp, count);
+	if (ret < 0) {
+		NVT_ERR("fail to read %s %d\n", prop, ret);
+		ret = -ENODEV;
+		goto out;
+	}
+
+	for (i = 0; i < count; i++) {
+		active = active_tp[i];
+		if (active != NULL) {
+			tmp = of_device_is_compatible(dt, active);
+			if (tmp > 0)
+				score++;
+		}
+	}
+
+	if (score <= 0) {
+		NVT_ERR("not match this driver\n");
+		ret = -ENODEV;
+		goto out;
+	}
+	ret = 0;
+out:
+	kfree(active_tp);
+	return ret;
+}
+#endif
+
+/*******************************************************
+ * Description:
+ *     Novatek touchscreen driver probe function.
+ *
+ * return:
+ *     Executive outcomes. 0---succeed. negative---failed
+ *******************************************************/
+static int32_t nvt_ts_late_probe(struct i2c_client *client,
+	const struct i2c_device_id *id)
+{
+	int32_t ret = 0;
+#if ((TOUCH_KEY_NUM > 0) || WAKEUP_GESTURE)
+	int32_t retry = 0;
+#endif
+	//---request and config GPIOs---
+	ret = nvt_gpio_config(ts);
+	if (ret) {
+		NVT_ERR("gpio config error!\n");
+		goto err_gpio_config_failed;
+	}
+
+	//---check chip version trim---
+	ret = nvt_ts_check_chip_ver_trim();
+	if (ret) {
+		NVT_ERR("chip is not identified\n");
+		ret = -EINVAL;
+		goto err_chipvertrim_failed;
+	}
+
+	nvt_bootloader_reset();
+	nvt_check_fw_reset_state(RESET_STATE_INIT);
+	nvt_get_fw_info();
+
+	//---allocate input device---
+	ts->input_dev = input_allocate_device();
+	if (ts->input_dev == NULL) {
+		NVT_ERR("allocate input device failed\n");
+		ret = -ENOMEM;
+		goto err_input_dev_alloc_failed;
+	}
+
+	ts->max_touch_num = TOUCH_MAX_FINGER_NUM;
+
+#if TOUCH_KEY_NUM > 0
+	ts->max_button_num = TOUCH_KEY_NUM;
+#endif
+
+	ts->int_trigger_type = INT_TRIGGER_TYPE;
+
+
+	//---set input device info.---
+	ts->input_dev->evbit[0] = BIT_MASK(EV_SYN) | BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS) ;
+	ts->input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);
+	ts->input_dev->propbit[0] = BIT(INPUT_PROP_DIRECT);
+
+#if MT_PROTOCOL_B
+	input_mt_init_slots(ts->input_dev, ts->max_touch_num, 0);
+#endif
+
+	input_set_abs_params(ts->input_dev, ABS_MT_PRESSURE, 0, TOUCH_FORCE_NUM, 0, 0);    //pressure = TOUCH_FORCE_NUM
+
+#if TOUCH_MAX_FINGER_NUM > 1
+	input_set_abs_params(ts->input_dev, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0);    //area = 255
+
+	input_set_abs_params(ts->input_dev, ABS_MT_POSITION_X, 0, ts->abs_x_max, 0, 0);
+	input_set_abs_params(ts->input_dev, ABS_MT_POSITION_Y, 0, ts->abs_y_max, 0, 0);
+#if MT_PROTOCOL_B
+	// no need to set ABS_MT_TRACKING_ID, input_mt_init_slots() already set it
+#else
+	input_set_abs_params(ts->input_dev, ABS_MT_TRACKING_ID, 0, ts->max_touch_num, 0, 0);
+#endif //MT_PROTOCOL_B
+#endif //TOUCH_MAX_FINGER_NUM > 1
+
+#if TOUCH_KEY_NUM > 0
+	for (retry = 0; retry < ts->max_button_num; retry++) {
+		input_set_capability(ts->input_dev, EV_KEY, touch_key_array[retry]);
+	}
+#endif
+
+#if WAKEUP_GESTURE
+	for (retry = 0; retry < ARRAY_SIZE(gesture_key_array); retry++) {
+		input_set_capability(ts->input_dev, EV_KEY, gesture_key_array[retry]);
+	}
+#endif
+
+	snprintf(ts->phys, sizeof(ts->phys), "input/ts");
+	ts->input_dev->name = NVT_TS_NAME;
+	ts->input_dev->phys = ts->phys;
+	ts->input_dev->id.bustype = BUS_I2C;
+
+	//---register input device---
+	ret = input_register_device(ts->input_dev);
+	if (ret) {
+		NVT_ERR("register input device (%s) failed. ret=%d\n", ts->input_dev->name, ret);
+		goto err_input_register_device_failed;
+	}
+
+	//---set int-pin & request irq---
+	client->irq = gpio_to_irq(ts->irq_gpio);
+	if (client->irq) {
+		NVT_LOG("int_trigger_type=%d\n", ts->int_trigger_type);
+		ts->irq_enabled = true;
+		ret = request_threaded_irq(client->irq, NULL, nvt_ts_work_func,
+				ts->int_trigger_type | IRQF_ONESHOT, NVT_I2C_NAME, ts);
+		if (ret != 0) {
+			NVT_ERR("request irq failed. ret=%d\n", ret);
+			goto err_int_request_failed;
+		} else {
+			nvt_irq_enable(false);
+			NVT_LOG("request irq %d succeed\n", client->irq);
+		}
+	}
+
+#if WAKEUP_GESTURE
+	device_init_wakeup(&ts->input_dev->dev, 1);
+#endif
+
+#if BOOT_UPDATE_FIRMWARE
+	nvt_fwu_wq = alloc_workqueue("nvt_fwu_wq", WQ_UNBOUND | WQ_MEM_RECLAIM, 1);
+	if (!nvt_fwu_wq) {
+		NVT_ERR("nvt_fwu_wq create workqueue failed\n");
+		ret = -ENOMEM;
+		goto err_create_nvt_fwu_wq_failed;
+	}
+	INIT_DELAYED_WORK(&ts->nvt_fwu_work, Boot_Update_Firmware);
+	// please make sure boot update start after display reset(RESX) sequence
+	queue_delayed_work(nvt_fwu_wq, &ts->nvt_fwu_work, msecs_to_jiffies(14000));
+#endif
+
+	NVT_LOG("NVT_TOUCH_ESD_PROTECT is %d\n", NVT_TOUCH_ESD_PROTECT);
+#if NVT_TOUCH_ESD_PROTECT
+	INIT_DELAYED_WORK(&nvt_esd_check_work, nvt_esd_check_func);
+	nvt_esd_check_wq = alloc_workqueue("nvt_esd_check_wq", WQ_MEM_RECLAIM, 1);
+	if (!nvt_esd_check_wq) {
+		NVT_ERR("nvt_esd_check_wq create workqueue failed\n");
+		ret = -ENOMEM;
+		goto err_create_nvt_esd_check_wq_failed;
+	}
+	queue_delayed_work(nvt_esd_check_wq, &nvt_esd_check_work,
+			msecs_to_jiffies(NVT_TOUCH_ESD_CHECK_PERIOD));
+#endif /* #if NVT_TOUCH_ESD_PROTECT */
+
+	//---set device node---
+#if NVT_TOUCH_PROC
+	ret = nvt_flash_proc_init();
+	if (ret != 0) {
+		NVT_ERR("nvt flash proc init failed. ret=%d\n", ret);
+		goto err_flash_proc_init_failed;
+	}
+#endif
+
+#if NVT_TOUCH_EXT_PROC
+	ret = nvt_extra_proc_init();
+	if (ret != 0) {
+		NVT_ERR("nvt extra proc init failed. ret=%d\n", ret);
+		goto err_extra_proc_init_failed;
+	}
+#endif
+
+#if NVT_TOUCH_MP
+	ret = nvt_mp_proc_init();
+	if (ret != 0) {
+		NVT_ERR("nvt mp proc init failed. ret=%d\n", ret);
+		goto err_mp_proc_init_failed;
+	}
+#endif
+
+	bTouchIsAwake = 1;
+	NVT_LOG("end\n");
+
+	nvt_irq_enable(true);
+
+	return 0;
+
+#if NVT_TOUCH_MP
+nvt_mp_proc_deinit();
+err_mp_proc_init_failed:
+#endif
+#if NVT_TOUCH_EXT_PROC
+nvt_extra_proc_deinit();
+err_extra_proc_init_failed:
+#endif
+#if NVT_TOUCH_PROC
+nvt_flash_proc_deinit();
+err_flash_proc_init_failed:
+#endif
+#if NVT_TOUCH_ESD_PROTECT
+	if (nvt_esd_check_wq) {
+		cancel_delayed_work_sync(&nvt_esd_check_work);
+		destroy_workqueue(nvt_esd_check_wq);
+		nvt_esd_check_wq = NULL;
+	}
+err_create_nvt_esd_check_wq_failed:
+#endif
+#if BOOT_UPDATE_FIRMWARE
+	if (nvt_fwu_wq) {
+		cancel_delayed_work_sync(&ts->nvt_fwu_work);
+		destroy_workqueue(nvt_fwu_wq);
+		nvt_fwu_wq = NULL;
+	}
+err_create_nvt_fwu_wq_failed:
+#endif
+#if WAKEUP_GESTURE
+	device_init_wakeup(&ts->input_dev->dev, 0);
+#endif
+	free_irq(client->irq, ts);
+err_int_request_failed:
+	input_unregister_device(ts->input_dev);
+	ts->input_dev = NULL;
+err_input_register_device_failed:
+	if (ts->input_dev) {
+		input_free_device(ts->input_dev);
+		ts->input_dev = NULL;
+	}
+err_input_dev_alloc_failed:
+err_chipvertrim_failed:
+err_gpio_config_failed:
+	return ret;
+}
+
+/*******************************************************
+ * Description:
+ *     Novatek touchscreen driver probe function.
+ *
+ * return:
+ *     Executive outcomes. 0---succeed. negative---failed
+ *******************************************************/
+static int32_t nvt_ts_probe(struct i2c_client *client,
+	const struct i2c_device_id *id)
+{
+	int32_t ret = 0;
+#if defined(CONFIG_DRM)
+	struct device_node *dp = client->dev.of_node;
+#endif
+
+	NVT_LOG("start\n");
+
+#if defined(CONFIG_DRM)
+	if (nvt_ts_check_dt(dp)) {
+		if (!nvt_ts_check_default_tp(dp, "qcom,i2c-touch-active"))
+			ret = -EPROBE_DEFER;
+		else
+			ret = -ENODEV;
+
+		return ret;
+	}
+#endif
+
+	ts = devm_kzalloc(&client->dev, sizeof(struct nvt_ts_data), GFP_KERNEL);
+	if (ts == NULL) {
+		NVT_ERR("failed to allocated memory for nvt ts data\n");
+		return -ENOMEM;
+	}
+
+	ts->client = client;
+	i2c_set_clientdata(client, ts);
+
+	//---parse dts---
+	nvt_parse_dt(&client->dev);
+
+	//---check i2c func.---
+	if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
+		NVT_ERR("i2c_check_functionality failed. (no I2C_FUNC_I2C)\n");
+		return  -ENODEV;
+	}
+
+	mutex_init(&ts->lock);
+	mutex_init(&ts->xbuf_lock);
+
+	ts->id = id;
+
+#if defined(CONFIG_DRM)
+	ts->drm_notif.notifier_call = nvt_drm_notifier_callback;
+
+	if (active_panel &&
+		drm_panel_notifier_register(active_panel,
+			&ts->drm_notif) < 0) {
+		NVT_ERR("register notifier failed!\n");
+		goto err_register_drm_notif_failed;
+	}
+#elif defined(CONFIG_HAS_EARLYSUSPEND)
+	ts->early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN + 1;
+	ts->early_suspend.suspend = nvt_ts_early_suspend;
+	ts->early_suspend.resume = nvt_ts_late_resume;
+	ret = register_early_suspend(&ts->early_suspend);
+	if (ret) {
+		NVT_ERR("register early suspend failed. ret=%d\n", ret);
+		goto err_register_early_suspend_failed;
+	}
+#endif
+
+	NVT_LOG("end\n");
+	return 0;
+
+#if defined(CONFIG_DRM)
+	if (active_panel)
+		drm_panel_notifier_unregister(active_panel, &ts->drm_notif);
+err_register_drm_notif_failed:
+
+#elif defined(CONFIG_HAS_EARLYSUSPEND)
+	unregister_early_suspend(&ts->early_suspend);
+err_register_early_suspend_failed:
+#endif
+
+	return -ENODEV;
+}
+
+/*******************************************************
+ * Description:
+ *     Novatek touchscreen driver release function.
+ *
+ * return:
+ *     Executive outcomes. 0---succeed.
+ *******************************************************/
+static int32_t nvt_ts_remove(struct i2c_client *client)
+{
+	NVT_LOG("Removing driver...\n");
+
+#if defined(CONFIG_DRM_PANEL)
+	if (active_panel)
+		drm_panel_notifier_unregister(active_panel, &ts->drm_notif);
+#elif defined(CONFIG_FB)
+	if (fb_unregister_client(&ts->fb_notif))
+		NVT_ERR("Error occurred while unregistering fb_notifier.\n");
+#elif defined(CONFIG_HAS_EARLYSUSPEND)
+	unregister_early_suspend(&ts->early_suspend);
+#endif
+
+#if NVT_TOUCH_MP
+	nvt_mp_proc_deinit();
+#endif
+#if NVT_TOUCH_EXT_PROC
+	nvt_extra_proc_deinit();
+#endif
+#if NVT_TOUCH_PROC
+	nvt_flash_proc_deinit();
+#endif
+
+#if NVT_TOUCH_ESD_PROTECT
+	if (nvt_esd_check_wq) {
+		cancel_delayed_work_sync(&nvt_esd_check_work);
+		nvt_esd_check_enable(false);
+		destroy_workqueue(nvt_esd_check_wq);
+		nvt_esd_check_wq = NULL;
+	}
+#endif
+
+#if BOOT_UPDATE_FIRMWARE
+	if (nvt_fwu_wq) {
+		cancel_delayed_work_sync(&ts->nvt_fwu_work);
+		destroy_workqueue(nvt_fwu_wq);
+		nvt_fwu_wq = NULL;
+	}
+#endif
+
+#if WAKEUP_GESTURE
+	device_init_wakeup(&ts->input_dev->dev, 0);
+#endif
+
+	nvt_irq_enable(false);
+	free_irq(client->irq, ts);
+
+	mutex_destroy(&ts->xbuf_lock);
+	mutex_destroy(&ts->lock);
+
+	nvt_gpio_deconfig(ts);
+
+	if (ts->input_dev) {
+		input_unregister_device(ts->input_dev);
+		ts->input_dev = NULL;
+	}
+
+	i2c_set_clientdata(client, NULL);
+
+	if (ts) {
+		kfree(ts);
+		ts = NULL;
+	}
+
+	return 0;
+}
+
+static void nvt_ts_shutdown(struct i2c_client *client)
+{
+	NVT_LOG("Shutdown driver...\n");
+
+	nvt_irq_enable(false);
+
+#if defined(CONFIG_DRM_PANEL)
+	if (active_panel)
+		drm_panel_notifier_unregister(active_panel, &ts->drm_notif);
+#elif defined(CONFIG_FB)
+	if (fb_unregister_client(&ts->fb_notif))
+		NVT_ERR("Error occurred while unregistering fb_notifier.\n");
+#elif defined(CONFIG_HAS_EARLYSUSPEND)
+	unregister_early_suspend(&ts->early_suspend);
+#endif
+
+#if NVT_TOUCH_MP
+	nvt_mp_proc_deinit();
+#endif
+#if NVT_TOUCH_EXT_PROC
+	nvt_extra_proc_deinit();
+#endif
+#if NVT_TOUCH_PROC
+	nvt_flash_proc_deinit();
+#endif
+
+#if NVT_TOUCH_ESD_PROTECT
+	if (nvt_esd_check_wq) {
+		cancel_delayed_work_sync(&nvt_esd_check_work);
+		nvt_esd_check_enable(false);
+		destroy_workqueue(nvt_esd_check_wq);
+		nvt_esd_check_wq = NULL;
+	}
+#endif /* #if NVT_TOUCH_ESD_PROTECT */
+
+#if BOOT_UPDATE_FIRMWARE
+	if (nvt_fwu_wq) {
+		cancel_delayed_work_sync(&ts->nvt_fwu_work);
+		destroy_workqueue(nvt_fwu_wq);
+		nvt_fwu_wq = NULL;
+	}
+#endif
+
+#if WAKEUP_GESTURE
+	device_init_wakeup(&ts->input_dev->dev, 0);
+#endif
+}
+
+/*******************************************************
+ * Description:
+ *     Novatek touchscreen driver suspend function.
+ *
+ * return:
+ *     Executive outcomes. 0---succeed.
+ *******************************************************/
+static int32_t nvt_ts_suspend(struct device *dev)
+{
+	uint8_t buf[4] = {0};
+#if MT_PROTOCOL_B
+	uint32_t i = 0;
+#endif
+
+	if (!bTouchIsAwake) {
+		NVT_LOG("Touch is already suspend\n");
+		return 0;
+	}
+
+#if !WAKEUP_GESTURE
+	nvt_irq_enable(false);
+#endif
+
+#if NVT_TOUCH_ESD_PROTECT
+	NVT_LOG("cancel delayed work sync\n");
+	cancel_delayed_work_sync(&nvt_esd_check_work);
+	nvt_esd_check_enable(false);
+#endif /* #if NVT_TOUCH_ESD_PROTECT */
+
+	mutex_lock(&ts->lock);
+
+	NVT_LOG("start\n");
+
+	bTouchIsAwake = 0;
+
+#if WAKEUP_GESTURE
+	//---write command to enter "wakeup gesture mode"---
+	buf[0] = EVENT_MAP_HOST_CMD;
+	buf[1] = 0x13;
+	CTP_I2C_WRITE(ts->client, I2C_FW_Address, buf, 2);
+
+	enable_irq_wake(ts->client->irq);
+
+	NVT_LOG("Enabled touch wakeup gesture\n");
+
+#else // WAKEUP_GESTURE
+	//---write command to enter "deep sleep mode"---
+	buf[0] = EVENT_MAP_HOST_CMD;
+	buf[1] = 0x11;
+	CTP_I2C_WRITE(ts->client, I2C_FW_Address, buf, 2);
+#endif // WAKEUP_GESTURE
+
+	mutex_unlock(&ts->lock);
+
+	/* release all touches */
+#if MT_PROTOCOL_B
+	for (i = 0; i < ts->max_touch_num; i++) {
+		input_mt_slot(ts->input_dev, i);
+		input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, 0);
+		input_report_abs(ts->input_dev, ABS_MT_PRESSURE, 0);
+		input_mt_report_slot_state(ts->input_dev, MT_TOOL_FINGER, 0);
+	}
+#endif
+	input_report_key(ts->input_dev, BTN_TOUCH, 0);
+#if !MT_PROTOCOL_B
+	input_mt_sync(ts->input_dev);
+#endif
+	input_sync(ts->input_dev);
+
+	msleep(50);
+
+	NVT_LOG("end\n");
+
+	return 0;
+}
+
+/*******************************************************
+ * Description:
+ *     Novatek touchscreen driver resume function.
+ *
+ * return:
+ *     Executive outcomes. 0---succeed.
+ *******************************************************/
+static int32_t nvt_ts_resume(struct device *dev)
+{
+	NVT_LOG("start\n");
+
+	if (bTouchIsAwake || ts->fw_ver == 0) {
+		nvt_ts_late_probe(ts->client, ts->id);
+		NVT_LOG("nvt_ts_late_probe\n");
+		return 0;
+	}
+
+	mutex_lock(&ts->lock);
+
+	// make sure display reset(RESX) sequence and dsi cmds sent before this
+#if NVT_TOUCH_SUPPORT_HW_RST
+	gpio_set_value(ts->reset_gpio, 1);
+#endif
+
+	// NT36772 IC due to no boot-load when RESX/TP_RESX
+	// nvt_bootloader_reset();
+	if (nvt_check_fw_reset_state(RESET_STATE_REK)) {
+		NVT_ERR("FW is not ready! Try to bootloader reset...\n");
+		nvt_bootloader_reset();
+		nvt_check_fw_reset_state(RESET_STATE_REK);
+	}
+
+#if !WAKEUP_GESTURE
+	nvt_irq_enable(true);
+#endif
+
+#if NVT_TOUCH_ESD_PROTECT
+	nvt_esd_check_enable(false);
+	queue_delayed_work(nvt_esd_check_wq, &nvt_esd_check_work,
+			msecs_to_jiffies(NVT_TOUCH_ESD_CHECK_PERIOD));
+#endif /* #if NVT_TOUCH_ESD_PROTECT */
+
+	bTouchIsAwake = 1;
+
+	mutex_unlock(&ts->lock);
+
+	NVT_LOG("end\n");
+
+	return 0;
+}
+
+#if defined(CONFIG_DRM_PANEL)
+static int nvt_drm_notifier_callback(struct notifier_block *self,
+	unsigned long event, void *data)
+{
+	struct drm_panel_notifier *evdata = data;
+	int *blank;
+	struct nvt_ts_data *ts =
+		container_of(self, struct nvt_ts_data, drm_notif);
+
+	if (!evdata || !evdata->data || !ts)
+		return 0;
+
+	blank = evdata->data;
+
+	if (event == DRM_PANEL_EARLY_EVENT_BLANK) {
+		if (*blank == DRM_PANEL_BLANK_POWERDOWN) {
+			NVT_LOG("event=%lu, *blank=%d\n", event, *blank);
+			nvt_ts_suspend(&ts->client->dev);
+		}
+	} else if (event == DRM_PANEL_EVENT_BLANK) {
+		if (*blank == DRM_PANEL_BLANK_UNBLANK) {
+			NVT_LOG("event=%lu, *blank=%d\n", event, *blank);
+			nvt_ts_resume(&ts->client->dev);
+		}
+	}
+
+	return 0;
+}
+
+#elif defined(CONFIG_FB)
+
+static int nvt_fb_notifier_callback(struct notifier_block *self,
+	unsigned long event, void *data)
+{
+	struct fb_event *evdata = data;
+	int *blank;
+	struct nvt_ts_data *ts =
+		container_of(self, struct nvt_ts_data, fb_notif);
+
+	if (evdata && evdata->data && event == FB_EARLY_EVENT_BLANK) {
+		blank = evdata->data;
+		if (*blank == FB_BLANK_POWERDOWN) {
+			NVT_LOG("event=%lu, *blank=%d\n", event, *blank);
+			nvt_ts_suspend(&ts->client->dev);
+		}
+	} else if (evdata && evdata->data && event == FB_EVENT_BLANK) {
+		blank = evdata->data;
+		if (*blank == FB_BLANK_UNBLANK) {
+			NVT_LOG("event=%lu, *blank=%d\n", event, *blank);
+			nvt_ts_resume(&ts->client->dev);
+		}
+	}
+
+	return 0;
+}
+
+#elif defined(CONFIG_HAS_EARLYSUSPEND)
+/*******************************************************
+ * Description:
+ *     Novatek touchscreen driver early suspend function.
+ *
+ * return:
+ *     n.a.
+ *******************************************************/
+static void nvt_ts_early_suspend(struct early_suspend *h)
+{
+	nvt_ts_suspend(ts->client, PMSG_SUSPEND);
+}
+
+/*******************************************************
+ * Description:
+ *     Novatek touchscreen driver late resume function.
+ *
+ * return:
+ *     n.a.
+ * *******************************************************/
+static void nvt_ts_late_resume(struct early_suspend *h)
+{
+	nvt_ts_resume(ts->client);
+}
+#endif
+
+static const struct i2c_device_id nvt_ts_id[] = {
+	{ NVT_I2C_NAME, 0 },
+	{ }
+};
+
+#ifdef CONFIG_OF
+static struct of_device_id nvt_match_table[] = {
+	{ .compatible = "novatek,NVT-ts",},
+	{ },
+};
+#endif
+
+static struct i2c_driver nvt_i2c_driver = {
+	.probe		= nvt_ts_probe,
+	.remove		= nvt_ts_remove,
+	.shutdown	= nvt_ts_shutdown,
+	.id_table	= nvt_ts_id,
+	.driver = {
+		.name	= NVT_I2C_NAME,
+#ifdef CONFIG_OF
+		.of_match_table = nvt_match_table,
+#endif
+	},
+};
+
+/*******************************************************
+ * Description:
+ *     Driver Install function.
+ *
+ * return:
+ *     Executive Outcomes. 0---succeed. not 0---failed.
+ ********************************************************/
+static int32_t __init nvt_driver_init(void)
+{
+	int32_t ret = 0;
+
+	NVT_LOG("start\n");
+	//---add i2c driver---
+	ret = i2c_add_driver(&nvt_i2c_driver);
+	if (ret) {
+		NVT_ERR("failed to add i2c driver");
+		goto err_driver;
+	}
+
+	NVT_LOG("finished\n");
+
+err_driver:
+	return ret;
+}
+
+/*******************************************************
+ * Description:
+ *     Driver uninstall function.
+ *
+ * return:
+ *     n.a.
+ ********************************************************/
+static void __exit nvt_driver_exit(void)
+{
+	i2c_del_driver(&nvt_i2c_driver);
+}
+
+late_initcall(nvt_driver_init);
+//module_init(nvt_driver_init);
+module_exit(nvt_driver_exit);
+
+MODULE_DESCRIPTION("Novatek Touchscreen Driver");
diff --git a/drivers/input/touchscreen/nt36xxx/nt36xxx.h b/drivers/input/touchscreen/nt36xxx/nt36xxx.h
new file mode 100644
index 0000000..438c28b
--- /dev/null
+++ b/drivers/input/touchscreen/nt36xxx/nt36xxx.h
@@ -0,0 +1,168 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (C) 2010 - 2018 Novatek, Inc.
+ *
+ * $Revision: 47247 $
+ * $Date: 2019-07-10 10:41:36 +0800 (Wed, 10 Jul 2019) $
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ */
+#ifndef 	_LINUX_NVT_TOUCH_H
+#define		_LINUX_NVT_TOUCH_H
+
+#include <linux/delay.h>
+#include <linux/i2c.h>
+#include <linux/input.h>
+#include <linux/uaccess.h>
+
+#ifdef CONFIG_HAS_EARLYSUSPEND
+#include <linux/earlysuspend.h>
+#endif
+
+#include "nt36xxx_mem_map.h"
+
+#define NVT_DEBUG 1
+
+//---GPIO number---
+#define NVTTOUCH_RST_PIN 980
+#define NVTTOUCH_INT_PIN 943
+
+
+//---INT trigger mode---
+//#define IRQ_TYPE_EDGE_RISING 1
+//#define IRQ_TYPE_EDGE_FALLING 2
+#define INT_TRIGGER_TYPE IRQ_TYPE_EDGE_RISING
+
+
+//---I2C driver info.---
+#define NVT_I2C_NAME "NVT-ts"
+#define I2C_BLDR_Address 0x01
+#define I2C_FW_Address 0x01
+#define I2C_HW_Address 0x62
+
+#if NVT_DEBUG
+#define NVT_LOG(fmt, args...)    pr_err("[%s] %s %d: " fmt, NVT_I2C_NAME, __func__, __LINE__, ##args)
+#else
+#define NVT_LOG(fmt, args...)    pr_info("[%s] %s %d: " fmt, NVT_I2C_NAME, __func__, __LINE__, ##args)
+#endif
+#define NVT_ERR(fmt, args...)    pr_err("[%s] %s %d: " fmt, NVT_I2C_NAME, __func__, __LINE__, ##args)
+
+//---Input device info.---
+#define NVT_TS_NAME "NVTCapacitiveTouchScreen"
+
+
+//---Touch info.---
+#define TOUCH_DEFAULT_MAX_WIDTH 1080
+#define TOUCH_DEFAULT_MAX_HEIGHT 1920
+#define TOUCH_MAX_FINGER_NUM 10
+#define TOUCH_KEY_NUM 0
+#if TOUCH_KEY_NUM > 0
+extern const uint16_t touch_key_array[TOUCH_KEY_NUM];
+#endif
+#define TOUCH_FORCE_NUM 1000
+
+/* Enable only when module have tp reset pin and connected to host */
+#define NVT_TOUCH_SUPPORT_HW_RST 1
+
+//---Customerized func.---
+#define NVT_TOUCH_PROC 1
+#define NVT_TOUCH_EXT_PROC 1
+#define NVT_TOUCH_MP 1
+#define MT_PROTOCOL_B 1
+#define WAKEUP_GESTURE 1
+#if WAKEUP_GESTURE
+extern const uint16_t gesture_key_array[];
+#endif
+#define BOOT_UPDATE_FIRMWARE 0
+#define BOOT_UPDATE_FIRMWARE_NAME "novatek_ts_fw.bin"
+
+//---ESD Protect.---
+#define NVT_TOUCH_ESD_PROTECT 0
+#define NVT_TOUCH_ESD_CHECK_PERIOD 1500	/* ms */
+
+struct nvt_ts_data {
+	struct i2c_client *client;
+	struct input_dev *input_dev;
+	struct delayed_work nvt_fwu_work;
+	uint16_t addr;
+	int8_t phys[32];
+	const struct i2c_device_id *id;
+#if defined(CONFIG_DRM_PANEL)
+	struct notifier_block drm_notif;
+#elif defined(CONFIG_FB)
+	struct notifier_block fb_notif;
+#elif defined(CONFIG_HAS_EARLYSUSPEND)
+	struct early_suspend early_suspend;
+#endif
+	uint8_t fw_ver;
+	uint8_t x_num;
+	uint8_t y_num;
+	uint16_t abs_x_max;
+	uint16_t abs_y_max;
+	uint8_t max_touch_num;
+	uint8_t max_button_num;
+	uint32_t int_trigger_type;
+	int32_t irq_gpio;
+	uint32_t irq_flags;
+	int32_t reset_gpio;
+	uint32_t reset_flags;
+	struct mutex lock;
+	const struct nvt_ts_mem_map *mmap;
+	uint8_t carrier_system;
+	uint16_t nvt_pid;
+	uint8_t xbuf[1025];
+	struct mutex xbuf_lock;
+	bool irq_enabled;
+};
+
+#if NVT_TOUCH_PROC
+struct nvt_flash_data{
+	rwlock_t lock;
+	struct i2c_client *client;
+};
+#endif
+
+typedef enum {
+	RESET_STATE_INIT = 0xA0,// IC reset
+	RESET_STATE_REK,        // ReK baseline
+	RESET_STATE_REK_FINISH, // baseline is ready
+	RESET_STATE_NORMAL_RUN, // normal run
+	RESET_STATE_MAX  = 0xAF
+} RST_COMPLETE_STATE;
+
+typedef enum {
+    EVENT_MAP_HOST_CMD                      = 0x50,
+    EVENT_MAP_HANDSHAKING_or_SUB_CMD_BYTE   = 0x51,
+    EVENT_MAP_RESET_COMPLETE                = 0x60,
+    EVENT_MAP_FWINFO                        = 0x78,
+    EVENT_MAP_PROJECTID                     = 0x9A,
+} I2C_EVENT_MAP;
+
+//---extern structures---
+extern struct nvt_ts_data *ts;
+
+//---extern functions---
+extern int32_t CTP_I2C_READ(struct i2c_client *client, uint16_t address, uint8_t *buf, uint16_t len);
+extern int32_t CTP_I2C_WRITE(struct i2c_client *client, uint16_t address, uint8_t *buf, uint16_t len);
+extern void nvt_bootloader_reset(void);
+extern void nvt_sw_reset_idle(void);
+extern int32_t nvt_check_fw_reset_state(RST_COMPLETE_STATE check_reset_state);
+extern int32_t nvt_get_fw_info(void);
+extern int32_t nvt_clear_fw_status(void);
+extern int32_t nvt_check_fw_status(void);
+extern int32_t nvt_set_page(uint16_t i2c_addr, uint32_t addr);
+#if NVT_TOUCH_ESD_PROTECT
+extern void nvt_esd_check_enable(uint8_t enable);
+#endif /* #if NVT_TOUCH_ESD_PROTECT */
+extern void nvt_stop_crc_reboot(void);
+
+#endif /* _LINUX_NVT_TOUCH_H */
diff --git a/drivers/input/touchscreen/nt36xxx/nt36xxx_ext_proc.c b/drivers/input/touchscreen/nt36xxx/nt36xxx_ext_proc.c
new file mode 100644
index 0000000..d58c037
--- /dev/null
+++ b/drivers/input/touchscreen/nt36xxx/nt36xxx_ext_proc.c
@@ -0,0 +1,595 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (C) 2010 - 2018 Novatek, Inc.
+ *
+ * $Revision: 47247 $
+ * $Date: 2019-07-10 10:41:36 +0800 (Wed, 10 Jul 2019) $
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ */
+
+
+#include <linux/proc_fs.h>
+#include <linux/seq_file.h>
+
+#include "nt36xxx.h"
+
+#if NVT_TOUCH_EXT_PROC
+#define NVT_FW_VERSION "nvt_fw_version"
+#define NVT_BASELINE "nvt_baseline"
+#define NVT_RAW "nvt_raw"
+#define NVT_DIFF "nvt_diff"
+
+#define BUS_TRANSFER_LENGTH  64
+
+#define NORMAL_MODE 0x00
+#define TEST_MODE_1 0x21
+#define TEST_MODE_2 0x22
+#define HANDSHAKING_HOST_READY 0xBB
+
+#define XDATA_SECTOR_SIZE   256
+
+static uint8_t xdata_tmp[2048] = {0};
+static int32_t xdata[2048] = {0};
+
+static struct proc_dir_entry *NVT_proc_fw_version_entry;
+static struct proc_dir_entry *NVT_proc_baseline_entry;
+static struct proc_dir_entry *NVT_proc_raw_entry;
+static struct proc_dir_entry *NVT_proc_diff_entry;
+
+/*******************************************************
+Description:
+	Novatek touchscreen change mode function.
+
+return:
+	n.a.
+*******************************************************/
+void nvt_change_mode(uint8_t mode)
+{
+	uint8_t buf[8] = {0};
+
+	//---set xdata index to EVENT BUF ADDR---
+	nvt_set_page(I2C_FW_Address, ts->mmap->EVENT_BUF_ADDR | EVENT_MAP_HOST_CMD);
+
+	//---set mode---
+	buf[0] = EVENT_MAP_HOST_CMD;
+	buf[1] = mode;
+	CTP_I2C_WRITE(ts->client, I2C_FW_Address, buf, 2);
+
+	if (mode == NORMAL_MODE) {
+		buf[0] = EVENT_MAP_HANDSHAKING_or_SUB_CMD_BYTE;
+		buf[1] = HANDSHAKING_HOST_READY;
+		CTP_I2C_WRITE(ts->client, I2C_FW_Address, buf, 2);
+		msleep(20);
+	}
+}
+
+/*******************************************************
+Description:
+	Novatek touchscreen get firmware pipe function.
+
+return:
+	Executive outcomes. 0---pipe 0. 1---pipe 1.
+*******************************************************/
+uint8_t nvt_get_fw_pipe(void)
+{
+	uint8_t buf[8]= {0};
+
+	//---set xdata index to EVENT BUF ADDR---
+	nvt_set_page(I2C_FW_Address, ts->mmap->EVENT_BUF_ADDR | EVENT_MAP_HANDSHAKING_or_SUB_CMD_BYTE);
+
+	//---read fw status---
+	buf[0] = EVENT_MAP_HANDSHAKING_or_SUB_CMD_BYTE;
+	buf[1] = 0x00;
+	CTP_I2C_READ(ts->client, I2C_FW_Address, buf, 2);
+
+	//NVT_LOG("FW pipe=%d, buf[1]=0x%02X\n", (buf[1]&0x01), buf[1]);
+
+	return (buf[1] & 0x01);
+}
+
+/*******************************************************
+Description:
+	Novatek touchscreen read meta data function.
+
+return:
+	n.a.
+*******************************************************/
+void nvt_read_mdata(uint32_t xdata_addr, uint32_t xdata_btn_addr)
+{
+	int32_t i = 0;
+	int32_t j = 0;
+	int32_t k = 0;
+	uint8_t buf[BUS_TRANSFER_LENGTH + 1] = {0};
+	uint32_t head_addr = 0;
+	int32_t dummy_len = 0;
+	int32_t data_len = 0;
+	int32_t residual_len = 0;
+
+	//---set xdata sector address & length---
+	head_addr = xdata_addr - (xdata_addr % XDATA_SECTOR_SIZE);
+	dummy_len = xdata_addr - head_addr;
+	data_len = ts->x_num * ts->y_num * 2;
+	residual_len = (head_addr + dummy_len + data_len) % XDATA_SECTOR_SIZE;
+
+	//printk("head_addr=0x%05X, dummy_len=0x%05X, data_len=0x%05X, residual_len=0x%05X\n", head_addr, dummy_len, data_len, residual_len);
+
+	//read xdata : step 1
+	for (i = 0; i < ((dummy_len + data_len) / XDATA_SECTOR_SIZE); i++) {
+		//---change xdata index---
+		nvt_set_page(I2C_FW_Address, head_addr + XDATA_SECTOR_SIZE * i);
+
+		//---read xdata by BUS_TRANSFER_LENGTH
+		for (j = 0; j < (XDATA_SECTOR_SIZE / BUS_TRANSFER_LENGTH); j++) {
+			//---read data---
+			buf[0] = BUS_TRANSFER_LENGTH * j;
+			CTP_I2C_READ(ts->client, I2C_FW_Address, buf, BUS_TRANSFER_LENGTH + 1);
+
+			//---copy buf to xdata_tmp---
+			for (k = 0; k < BUS_TRANSFER_LENGTH; k++) {
+				xdata_tmp[XDATA_SECTOR_SIZE * i + BUS_TRANSFER_LENGTH * j + k] = buf[k + 1];
+				//printk("0x%02X, 0x%04X\n", buf[k+1], (XDATA_SECTOR_SIZE*i + BUS_TRANSFER_LENGTH*j + k));
+			}
+		}
+		//printk("addr=0x%05X\n", (head_addr+XDATA_SECTOR_SIZE*i));
+	}
+
+	//read xdata : step2
+	if (residual_len != 0) {
+		//---change xdata index---
+		nvt_set_page(I2C_FW_Address, xdata_addr + data_len - residual_len);
+
+		//---read xdata by BUS_TRANSFER_LENGTH
+		for (j = 0; j < (residual_len / BUS_TRANSFER_LENGTH + 1); j++) {
+			//---read data---
+			buf[0] = BUS_TRANSFER_LENGTH * j;
+			CTP_I2C_READ(ts->client, I2C_FW_Address, buf, BUS_TRANSFER_LENGTH + 1);
+
+			//---copy buf to xdata_tmp---
+			for (k = 0; k < BUS_TRANSFER_LENGTH; k++) {
+				xdata_tmp[(dummy_len + data_len - residual_len) + BUS_TRANSFER_LENGTH * j + k] = buf[k + 1];
+				//printk("0x%02X, 0x%04x\n", buf[k+1], ((dummy_len+data_len-residual_len) + BUS_TRANSFER_LENGTH*j + k));
+			}
+		}
+		//printk("addr=0x%05X\n", (xdata_addr+data_len-residual_len));
+	}
+
+	//---remove dummy data and 2bytes-to-1data---
+	for (i = 0; i < (data_len / 2); i++) {
+		xdata[i] = (int16_t)(xdata_tmp[dummy_len + i * 2] + 256 * xdata_tmp[dummy_len + i * 2 + 1]);
+	}
+
+#if TOUCH_KEY_NUM > 0
+	//read button xdata : step3
+	//---change xdata index---
+	nvt_set_page(I2C_FW_Address, xdata_btn_addr);
+
+	//---read data---
+	buf[0] = (xdata_btn_addr & 0xFF);
+	CTP_I2C_READ(ts->client, I2C_FW_Address, buf, (TOUCH_KEY_NUM * 2 + 1));
+
+	//---2bytes-to-1data---
+	for (i = 0; i < TOUCH_KEY_NUM; i++) {
+		xdata[ts->x_num * ts->y_num + i] = (int16_t)(buf[1 + i * 2] + 256 * buf[1 + i * 2 + 1]);
+	}
+#endif
+
+	//---set xdata index to EVENT BUF ADDR---
+	nvt_set_page(I2C_FW_Address, ts->mmap->EVENT_BUF_ADDR);
+}
+
+/*******************************************************
+Description:
+    Novatek touchscreen get meta data function.
+
+return:
+    n.a.
+*******************************************************/
+void nvt_get_mdata(int32_t *buf, uint8_t *m_x_num, uint8_t *m_y_num)
+{
+    *m_x_num = ts->x_num;
+    *m_y_num = ts->y_num;
+    memcpy(buf, xdata, ((ts->x_num * ts->y_num + TOUCH_KEY_NUM) * sizeof(int32_t)));
+}
+
+/*******************************************************
+Description:
+	Novatek touchscreen firmware version show function.
+
+return:
+	Executive outcomes. 0---succeed.
+*******************************************************/
+static int32_t c_fw_version_show(struct seq_file *m, void *v)
+{
+	seq_printf(m, "fw_ver=%d, x_num=%d, y_num=%d, button_num=%d\n", ts->fw_ver, ts->x_num, ts->y_num, ts->max_button_num);
+	return 0;
+}
+
+/*******************************************************
+Description:
+	Novatek touchscreen xdata sequence print show
+	function.
+
+return:
+	Executive outcomes. 0---succeed.
+*******************************************************/
+static int32_t c_show(struct seq_file *m, void *v)
+{
+	int32_t i = 0;
+	int32_t j = 0;
+
+	for (i = 0; i < ts->y_num; i++) {
+		for (j = 0; j < ts->x_num; j++) {
+			seq_printf(m, "%5d, ", xdata[i * ts->x_num + j]);
+		}
+		seq_puts(m, "\n");
+	}
+
+#if TOUCH_KEY_NUM > 0
+	for (i = 0; i < TOUCH_KEY_NUM; i++) {
+		seq_printf(m, "%5d, ", xdata[ts->x_num * ts->y_num + i]);
+	}
+	seq_puts(m, "\n");
+#endif
+
+	seq_printf(m, "\n\n");
+	return 0;
+}
+
+/*******************************************************
+Description:
+	Novatek touchscreen xdata sequence print start
+	function.
+
+return:
+	Executive outcomes. 1---call next function.
+	NULL---not call next function and sequence loop
+	stop.
+*******************************************************/
+static void *c_start(struct seq_file *m, loff_t *pos)
+{
+	return *pos < 1 ? (void *)1 : NULL;
+}
+
+/*******************************************************
+Description:
+	Novatek touchscreen xdata sequence print next
+	function.
+
+return:
+	Executive outcomes. NULL---no next and call sequence
+	stop function.
+*******************************************************/
+static void *c_next(struct seq_file *m, void *v, loff_t *pos)
+{
+	++*pos;
+	return NULL;
+}
+
+/*******************************************************
+Description:
+	Novatek touchscreen xdata sequence print stop
+	function.
+
+return:
+	n.a.
+*******************************************************/
+static void c_stop(struct seq_file *m, void *v)
+{
+	return;
+}
+
+const struct seq_operations nvt_fw_version_seq_ops = {
+	.start  = c_start,
+	.next   = c_next,
+	.stop   = c_stop,
+	.show   = c_fw_version_show
+};
+
+const struct seq_operations nvt_seq_ops = {
+	.start  = c_start,
+	.next   = c_next,
+	.stop   = c_stop,
+	.show   = c_show
+};
+
+/*******************************************************
+Description:
+	Novatek touchscreen /proc/nvt_fw_version open
+	function.
+
+return:
+	n.a.
+*******************************************************/
+static int32_t nvt_fw_version_open(struct inode *inode, struct file *file)
+{
+	if (mutex_lock_interruptible(&ts->lock)) {
+		return -ERESTARTSYS;
+	}
+
+	NVT_LOG("++\n");
+
+#if NVT_TOUCH_ESD_PROTECT
+	nvt_esd_check_enable(false);
+#endif /* #if NVT_TOUCH_ESD_PROTECT */
+
+	if (nvt_get_fw_info()) {
+		mutex_unlock(&ts->lock);
+		return -EAGAIN;
+	}
+
+	mutex_unlock(&ts->lock);
+
+	NVT_LOG("--\n");
+
+	return seq_open(file, &nvt_fw_version_seq_ops);
+}
+
+static const struct file_operations nvt_fw_version_fops = {
+	.owner = THIS_MODULE,
+	.open = nvt_fw_version_open,
+	.read = seq_read,
+	.llseek = seq_lseek,
+	.release = seq_release,
+};
+
+/*******************************************************
+Description:
+	Novatek touchscreen /proc/nvt_baseline open function.
+
+return:
+	Executive outcomes. 0---succeed.
+*******************************************************/
+static int32_t nvt_baseline_open(struct inode *inode, struct file *file)
+{
+	if (mutex_lock_interruptible(&ts->lock)) {
+		return -ERESTARTSYS;
+	}
+
+	NVT_LOG("++\n");
+
+#if NVT_TOUCH_ESD_PROTECT
+	nvt_esd_check_enable(false);
+#endif /* #if NVT_TOUCH_ESD_PROTECT */
+
+	if (nvt_clear_fw_status()) {
+		mutex_unlock(&ts->lock);
+		return -EAGAIN;
+	}
+
+	nvt_change_mode(TEST_MODE_2);
+
+	if (nvt_check_fw_status()) {
+		mutex_unlock(&ts->lock);
+		return -EAGAIN;
+	}
+
+	if (nvt_get_fw_info()) {
+		mutex_unlock(&ts->lock);
+		return -EAGAIN;
+	}
+
+	nvt_read_mdata(ts->mmap->BASELINE_ADDR, ts->mmap->BASELINE_BTN_ADDR);
+
+	nvt_change_mode(NORMAL_MODE);
+
+	mutex_unlock(&ts->lock);
+
+	NVT_LOG("--\n");
+
+	return seq_open(file, &nvt_seq_ops);
+}
+
+static const struct file_operations nvt_baseline_fops = {
+	.owner = THIS_MODULE,
+	.open = nvt_baseline_open,
+	.read = seq_read,
+	.llseek = seq_lseek,
+	.release = seq_release,
+};
+
+/*******************************************************
+Description:
+	Novatek touchscreen /proc/nvt_raw open function.
+
+return:
+	Executive outcomes. 0---succeed.
+*******************************************************/
+static int32_t nvt_raw_open(struct inode *inode, struct file *file)
+{
+	if (mutex_lock_interruptible(&ts->lock)) {
+		return -ERESTARTSYS;
+	}
+
+	NVT_LOG("++\n");
+
+#if NVT_TOUCH_ESD_PROTECT
+	nvt_esd_check_enable(false);
+#endif /* #if NVT_TOUCH_ESD_PROTECT */
+
+	if (nvt_clear_fw_status()) {
+		mutex_unlock(&ts->lock);
+		return -EAGAIN;
+	}
+
+	nvt_change_mode(TEST_MODE_2);
+
+	if (nvt_check_fw_status()) {
+		mutex_unlock(&ts->lock);
+		return -EAGAIN;
+	}
+
+	if (nvt_get_fw_info()) {
+		mutex_unlock(&ts->lock);
+		return -EAGAIN;
+	}
+
+	if (nvt_get_fw_pipe() == 0)
+		nvt_read_mdata(ts->mmap->RAW_PIPE0_ADDR, ts->mmap->RAW_BTN_PIPE0_ADDR);
+	else
+		nvt_read_mdata(ts->mmap->RAW_PIPE1_ADDR, ts->mmap->RAW_BTN_PIPE1_ADDR);
+
+	nvt_change_mode(NORMAL_MODE);
+
+	mutex_unlock(&ts->lock);
+
+	NVT_LOG("--\n");
+
+	return seq_open(file, &nvt_seq_ops);
+}
+
+static const struct file_operations nvt_raw_fops = {
+	.owner = THIS_MODULE,
+	.open = nvt_raw_open,
+	.read = seq_read,
+	.llseek = seq_lseek,
+	.release = seq_release,
+};
+
+/*******************************************************
+Description:
+	Novatek touchscreen /proc/nvt_diff open function.
+
+return:
+	Executive outcomes. 0---succeed. negative---failed.
+*******************************************************/
+static int32_t nvt_diff_open(struct inode *inode, struct file *file)
+{
+	if (mutex_lock_interruptible(&ts->lock)) {
+		return -ERESTARTSYS;
+	}
+
+	NVT_LOG("++\n");
+
+#if NVT_TOUCH_ESD_PROTECT
+	nvt_esd_check_enable(false);
+#endif /* #if NVT_TOUCH_ESD_PROTECT */
+
+	if (nvt_clear_fw_status()) {
+		mutex_unlock(&ts->lock);
+		return -EAGAIN;
+	}
+
+	nvt_change_mode(TEST_MODE_2);
+
+	if (nvt_check_fw_status()) {
+		mutex_unlock(&ts->lock);
+		return -EAGAIN;
+	}
+
+	if (nvt_get_fw_info()) {
+		mutex_unlock(&ts->lock);
+		return -EAGAIN;
+	}
+
+	if (nvt_get_fw_pipe() == 0)
+		nvt_read_mdata(ts->mmap->DIFF_PIPE0_ADDR, ts->mmap->DIFF_BTN_PIPE0_ADDR);
+	else
+		nvt_read_mdata(ts->mmap->DIFF_PIPE1_ADDR, ts->mmap->DIFF_BTN_PIPE1_ADDR);
+
+	nvt_change_mode(NORMAL_MODE);
+
+	mutex_unlock(&ts->lock);
+
+	NVT_LOG("--\n");
+
+	return seq_open(file, &nvt_seq_ops);
+}
+
+static const struct file_operations nvt_diff_fops = {
+	.owner = THIS_MODULE,
+	.open = nvt_diff_open,
+	.read = seq_read,
+	.llseek = seq_lseek,
+	.release = seq_release,
+};
+
+/*******************************************************
+Description:
+	Novatek touchscreen extra function proc. file node
+	initial function.
+
+return:
+	Executive outcomes. 0---succeed. -12---failed.
+*******************************************************/
+int32_t nvt_extra_proc_init(void)
+{
+	NVT_proc_fw_version_entry = proc_create(NVT_FW_VERSION, 0444, NULL,&nvt_fw_version_fops);
+	if (NVT_proc_fw_version_entry == NULL) {
+		NVT_ERR("create proc/%s Failed!\n", NVT_FW_VERSION);
+		return -ENOMEM;
+	} else {
+		NVT_LOG("create proc/%s Succeeded!\n", NVT_FW_VERSION);
+	}
+
+	NVT_proc_baseline_entry = proc_create(NVT_BASELINE, 0444, NULL,&nvt_baseline_fops);
+	if (NVT_proc_baseline_entry == NULL) {
+		NVT_ERR("create proc/%s Failed!\n", NVT_BASELINE);
+		return -ENOMEM;
+	} else {
+		NVT_LOG("create proc/%s Succeeded!\n", NVT_BASELINE);
+	}
+
+	NVT_proc_raw_entry = proc_create(NVT_RAW, 0444, NULL,&nvt_raw_fops);
+	if (NVT_proc_raw_entry == NULL) {
+		NVT_ERR("create proc/%s Failed!\n", NVT_RAW);
+		return -ENOMEM;
+	} else {
+		NVT_LOG("create proc/%s Succeeded!\n", NVT_RAW);
+	}
+
+	NVT_proc_diff_entry = proc_create(NVT_DIFF, 0444, NULL,&nvt_diff_fops);
+	if (NVT_proc_diff_entry == NULL) {
+		NVT_ERR("create proc/%s Failed!\n", NVT_DIFF);
+		return -ENOMEM;
+	} else {
+		NVT_LOG("create proc/%s Succeeded!\n", NVT_DIFF);
+	}
+
+	return 0;
+}
+
+/*******************************************************
+Description:
+	Novatek touchscreen extra function proc. file node
+	deinitial function.
+
+return:
+	n.a.
+*******************************************************/
+void nvt_extra_proc_deinit(void)
+{
+	if (NVT_proc_fw_version_entry != NULL) {
+		remove_proc_entry(NVT_FW_VERSION, NULL);
+		NVT_proc_fw_version_entry = NULL;
+		NVT_LOG("Removed /proc/%s\n", NVT_FW_VERSION);
+	}
+
+	if (NVT_proc_baseline_entry != NULL) {
+		remove_proc_entry(NVT_BASELINE, NULL);
+		NVT_proc_baseline_entry = NULL;
+		NVT_LOG("Removed /proc/%s\n", NVT_BASELINE);
+	}
+
+	if (NVT_proc_raw_entry != NULL) {
+		remove_proc_entry(NVT_RAW, NULL);
+		NVT_proc_raw_entry = NULL;
+		NVT_LOG("Removed /proc/%s\n", NVT_RAW);
+	}
+
+	if (NVT_proc_diff_entry != NULL) {
+		remove_proc_entry(NVT_DIFF, NULL);
+		NVT_proc_diff_entry = NULL;
+		NVT_LOG("Removed /proc/%s\n", NVT_DIFF);
+	}
+}
+#endif
diff --git a/drivers/input/touchscreen/nt36xxx/nt36xxx_fw_update.c b/drivers/input/touchscreen/nt36xxx/nt36xxx_fw_update.c
new file mode 100644
index 0000000..52086dc
--- /dev/null
+++ b/drivers/input/touchscreen/nt36xxx/nt36xxx_fw_update.c
@@ -0,0 +1,1037 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (C) 2010 - 2018 Novatek, Inc.
+ *
+ * $Revision: 47247 $
+ * $Date: 2019-07-10 10:41:36 +0800 (Wed, 10 Jul 2019) $
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ */
+
+#include <linux/firmware.h>
+
+#include "nt36xxx.h"
+
+#if BOOT_UPDATE_FIRMWARE
+
+#define SIZE_4KB 4096
+#define FLASH_SECTOR_SIZE SIZE_4KB
+#define SIZE_64KB 65536
+#define BLOCK_64KB_NUM 4
+#define FW_BIN_VER_OFFSET (fw_need_write_size - SIZE_4KB)
+#define FW_BIN_VER_BAR_OFFSET (FW_BIN_VER_OFFSET + 1)
+
+#define NVT_FLASH_END_FLAG_LEN 3
+#define NVT_FLASH_END_FLAG_ADDR (fw_need_write_size - NVT_FLASH_END_FLAG_LEN)
+
+const struct firmware *fw_entry = NULL;
+static size_t fw_need_write_size = 0;
+
+static int32_t nvt_get_fw_need_write_size(const struct firmware *fw_entry)
+{
+	int32_t i = 0;
+	int32_t total_sectors_to_check = 0;
+
+	total_sectors_to_check = fw_entry->size / FLASH_SECTOR_SIZE;
+	/* printk("total_sectors_to_check = %d\n", total_sectors_to_check); */
+
+	for (i = total_sectors_to_check; i > 0; i--) {
+		/* printk("current end flag address checked = 0x%X\n", i * FLASH_SECTOR_SIZE - NVT_FLASH_END_FLAG_LEN); */
+		/* check if there is end flag "NVT" at the end of this sector */
+		if (memcmp(&fw_entry->data[i * FLASH_SECTOR_SIZE - NVT_FLASH_END_FLAG_LEN], "NVT", NVT_FLASH_END_FLAG_LEN) == 0) {
+			fw_need_write_size = i * FLASH_SECTOR_SIZE;
+			NVT_LOG("fw_need_write_size = %zu(0x%zx)\n", fw_need_write_size, fw_need_write_size);
+			return 0;
+		}
+	}
+
+	NVT_ERR("end flag \"NVT\" not found!\n");
+	return -1;
+}
+
+/*******************************************************
+Description:
+	Novatek touchscreen request update firmware function.
+
+return:
+	Executive outcomes. 0---succeed. -1,-22---failed.
+*******************************************************/
+int32_t update_firmware_request(char *filename)
+{
+	int32_t ret = 0;
+
+	if (NULL == filename) {
+		return -1;
+	}
+
+	NVT_LOG("filename is %s\n", filename);
+
+	ret = request_firmware_nowarn(&fw_entry, filename, &ts->client->dev);
+	if (ret) {
+		NVT_ERR("firmware load failed, ret=%d\n", ret);
+		return ret;
+	}
+
+	// check FW need to write size
+	if (nvt_get_fw_need_write_size(fw_entry)) {
+		NVT_ERR("get fw need to write size fail!\n");
+		return -EINVAL;
+	}
+
+	// check if FW version add FW version bar equals 0xFF
+	if (*(fw_entry->data + FW_BIN_VER_OFFSET) + *(fw_entry->data + FW_BIN_VER_BAR_OFFSET) != 0xFF) {
+		NVT_ERR("bin file FW_VER + FW_VER_BAR should be 0xFF!\n");
+		NVT_ERR("FW_VER=0x%02X, FW_VER_BAR=0x%02X\n", *(fw_entry->data+FW_BIN_VER_OFFSET), *(fw_entry->data+FW_BIN_VER_BAR_OFFSET));
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+/*******************************************************
+Description:
+	Novatek touchscreen release update firmware function.
+
+return:
+	n.a.
+*******************************************************/
+void update_firmware_release(void)
+{
+	if (fw_entry) {
+		release_firmware(fw_entry);
+	}
+	fw_entry=NULL;
+}
+
+/*******************************************************
+Description:
+	Novatek touchscreen check firmware version function.
+
+return:
+	Executive outcomes. 0---need update. 1---need not
+	update.
+*******************************************************/
+int32_t Check_FW_Ver(void)
+{
+	uint8_t buf[16] = {0};
+	int32_t ret = 0;
+
+	//write i2c index to EVENT BUF ADDR
+	ret = nvt_set_page(I2C_BLDR_Address, ts->mmap->EVENT_BUF_ADDR | EVENT_MAP_FWINFO);
+	if (ret < 0) {
+		NVT_ERR("i2c write error!(%d)\n", ret);
+		return ret;
+	}
+
+	//read Firmware Version
+	buf[0] = EVENT_MAP_FWINFO;
+	buf[1] = 0x00;
+	buf[2] = 0x00;
+	ret = CTP_I2C_READ(ts->client, I2C_BLDR_Address, buf, 3);
+	if (ret < 0) {
+		NVT_ERR("i2c read error!(%d)\n", ret);
+		return ret;
+	}
+
+	NVT_LOG("IC FW Ver = 0x%02X, FW Ver Bar = 0x%02X\n", buf[1], buf[2]);
+	NVT_LOG("Bin FW Ver = 0x%02X, FW ver Bar = 0x%02X\n",
+			fw_entry->data[FW_BIN_VER_OFFSET], fw_entry->data[FW_BIN_VER_BAR_OFFSET]);
+
+	// check IC FW_VER + FW_VER_BAR equals 0xFF or not, need to update if not
+	if ((buf[1] + buf[2]) != 0xFF) {
+		NVT_ERR("IC FW_VER + FW_VER_BAR not equals to 0xFF!\n");
+		return 0;
+	}
+
+	// compare IC and binary FW version
+	if (buf[1] > fw_entry->data[FW_BIN_VER_OFFSET])
+		return 1;
+	else
+		return 0;
+}
+
+/*******************************************************
+Description:
+	Novatek touchscreen resume from deep power down function.
+
+return:
+	Executive outcomes. 0---succeed. negative---failed.
+*******************************************************/
+int32_t Resume_PD(void)
+{
+	uint8_t buf[8] = {0};
+	int32_t ret = 0;
+	int32_t retry = 0;
+
+	// Resume Command
+	buf[0] = 0x00;
+	buf[1] = 0xAB;
+	ret = CTP_I2C_WRITE(ts->client, I2C_HW_Address, buf, 2);
+	if (ret < 0) {
+		NVT_ERR("Write Enable error!!(%d)\n", ret);
+		return ret;
+	}
+
+	// Check 0xAA (Resume Command)
+	retry = 0;
+	while(1) {
+		msleep(1);
+		buf[0] = 0x00;
+		buf[1] = 0x00;
+		ret = CTP_I2C_READ(ts->client, I2C_HW_Address, buf, 2);
+		if (ret < 0) {
+			NVT_ERR("Check 0xAA (Resume Command) error!!(%d)\n", ret);
+			return ret;
+		}
+		if (buf[1] == 0xAA) {
+			break;
+		}
+		retry++;
+		if (unlikely(retry > 20)) {
+			NVT_ERR("Check 0xAA (Resume Command) error!! status=0x%02X\n", buf[1]);
+			return -1;
+		}
+	}
+	msleep(10);
+
+	NVT_LOG("Resume PD OK\n");
+	return 0;
+}
+
+/*******************************************************
+Description:
+	Novatek touchscreen check firmware checksum function.
+
+return:
+	Executive outcomes. 0---checksum not match.
+	1---checksum match. -1--- checksum read failed.
+*******************************************************/
+int32_t Check_CheckSum(void)
+{
+	uint8_t buf[64] = {0};
+	uint32_t XDATA_Addr = ts->mmap->READ_FLASH_CHECKSUM_ADDR;
+	int32_t ret = 0;
+	int32_t i = 0;
+	int32_t k = 0;
+	uint16_t WR_Filechksum[BLOCK_64KB_NUM] = {0};
+	uint16_t RD_Filechksum[BLOCK_64KB_NUM] = {0};
+	size_t len_in_blk = 0;
+	int32_t retry = 0;
+
+	if (Resume_PD()) {
+		NVT_ERR("Resume PD error!!\n");
+		return -1;
+	}
+
+	for (i = 0; i < BLOCK_64KB_NUM; i++) {
+		if (fw_need_write_size > (i * SIZE_64KB)) {
+			// Calculate WR_Filechksum of each 64KB block
+			len_in_blk = min(fw_need_write_size - i * SIZE_64KB, (size_t)SIZE_64KB);
+			WR_Filechksum[i] = i + 0x00 + 0x00 + (((len_in_blk - 1) >> 8) & 0xFF) + ((len_in_blk - 1) & 0xFF);
+			for (k = 0; k < len_in_blk; k++) {
+				WR_Filechksum[i] += fw_entry->data[k + i * SIZE_64KB];
+			}
+			WR_Filechksum[i] = 65535 - WR_Filechksum[i] + 1;
+
+			// Fast Read Command
+			buf[0] = 0x00;
+			buf[1] = 0x07;
+			buf[2] = i;
+			buf[3] = 0x00;
+			buf[4] = 0x00;
+			buf[5] = ((len_in_blk - 1) >> 8) & 0xFF;
+			buf[6] = (len_in_blk - 1) & 0xFF;
+			ret = CTP_I2C_WRITE(ts->client, I2C_HW_Address, buf, 7);
+			if (ret < 0) {
+				NVT_ERR("Fast Read Command error!!(%d)\n", ret);
+				return ret;
+			}
+			// Check 0xAA (Fast Read Command)
+			retry = 0;
+			while (1) {
+				msleep(80);
+				buf[0] = 0x00;
+				buf[1] = 0x00;
+				ret = CTP_I2C_READ(ts->client, I2C_HW_Address, buf, 2);
+				if (ret < 0) {
+					NVT_ERR("Check 0xAA (Fast Read Command) error!!(%d)\n", ret);
+					return ret;
+				}
+				if (buf[1] == 0xAA) {
+					break;
+				}
+				retry++;
+				if (unlikely(retry > 5)) {
+					NVT_ERR("Check 0xAA (Fast Read Command) failed, buf[1]=0x%02X, retry=%d\n", buf[1], retry);
+					return -1;
+				}
+			}
+			// Read Checksum (write addr high byte & middle byte)
+			ret = nvt_set_page(I2C_BLDR_Address, XDATA_Addr);
+			if (ret < 0) {
+				NVT_ERR("Read Checksum (write addr high byte & middle byte) error!!(%d)\n", ret);
+				return ret;
+			}
+			// Read Checksum
+			buf[0] = (XDATA_Addr) & 0xFF;
+			buf[1] = 0x00;
+			buf[2] = 0x00;
+			ret = CTP_I2C_READ(ts->client, I2C_BLDR_Address, buf, 3);
+			if (ret < 0) {
+				NVT_ERR("Read Checksum error!!(%d)\n", ret);
+				return ret;
+			}
+
+			RD_Filechksum[i] = (uint16_t)((buf[2] << 8) | buf[1]);
+			if (WR_Filechksum[i] != RD_Filechksum[i]) {
+				NVT_ERR("RD_Filechksum[%d]=0x%04X, WR_Filechksum[%d]=0x%04X\n", i, RD_Filechksum[i], i, WR_Filechksum[i]);
+				NVT_ERR("firmware checksum not match!!\n");
+				return 0;
+			}
+		}
+	}
+
+	NVT_LOG("firmware checksum match\n");
+	return 1;
+}
+
+/*******************************************************
+Description:
+	Novatek touchscreen initial bootloader and flash
+	block function.
+
+return:
+	Executive outcomes. 0---succeed. negative---failed.
+*******************************************************/
+int32_t Init_BootLoader(void)
+{
+	uint8_t buf[64] = {0};
+	int32_t ret = 0;
+	int32_t retry = 0;
+
+	// SW Reset & Idle
+	nvt_sw_reset_idle();
+
+	// Initiate Flash Block
+	buf[0] = 0x00;
+	buf[1] = 0x00;
+	buf[2] = I2C_FW_Address;
+	ret = CTP_I2C_WRITE(ts->client, I2C_HW_Address, buf, 3);
+	if (ret < 0) {
+		NVT_ERR("Inittial Flash Block error!!(%d)\n", ret);
+		return ret;
+	}
+
+	// Check 0xAA (Initiate Flash Block)
+	retry = 0;
+	while(1) {
+		msleep(1);
+		buf[0] = 0x00;
+		buf[1] = 0x00;
+		ret = CTP_I2C_READ(ts->client, I2C_HW_Address, buf, 2);
+		if (ret < 0) {
+			NVT_ERR("Check 0xAA (Inittial Flash Block) error!!(%d)\n", ret);
+			return ret;
+		}
+		if (buf[1] == 0xAA) {
+			break;
+		}
+		retry++;
+		if (unlikely(retry > 20)) {
+			NVT_ERR("Check 0xAA (Inittial Flash Block) error!! status=0x%02X\n", buf[1]);
+			return -1;
+		}
+	}
+
+	NVT_LOG("Init OK \n");
+	msleep(20);
+
+	return 0;
+}
+
+/*******************************************************
+Description:
+	Novatek touchscreen erase flash sectors function.
+
+return:
+	Executive outcomes. 0---succeed. negative---failed.
+*******************************************************/
+int32_t Erase_Flash(void)
+{
+	uint8_t buf[64] = {0};
+	int32_t ret = 0;
+	int32_t count = 0;
+	int32_t i = 0;
+	int32_t Flash_Address = 0;
+	int32_t retry = 0;
+
+	// Write Enable
+	buf[0] = 0x00;
+	buf[1] = 0x06;
+	ret = CTP_I2C_WRITE(ts->client, I2C_HW_Address, buf, 2);
+	if (ret < 0) {
+		NVT_ERR("Write Enable (for Write Status Register) error!!(%d)\n", ret);
+		return ret;
+	}
+	// Check 0xAA (Write Enable)
+	retry = 0;
+	while (1) {
+		msleep(1);
+		buf[0] = 0x00;
+		buf[1] = 0x00;
+		ret = CTP_I2C_READ(ts->client, I2C_HW_Address, buf, 2);
+		if (ret < 0) {
+			NVT_ERR("Check 0xAA (Write Enable for Write Status Register) error!!(%d)\n", ret);
+			return ret;
+		}
+		if (buf[1] == 0xAA) {
+			break;
+		}
+		retry++;
+		if (unlikely(retry > 20)) {
+			NVT_ERR("Check 0xAA (Write Enable for Write Status Register) error!! status=0x%02X\n", buf[1]);
+			return -1;
+		}
+	}
+
+	// Write Status Register
+	buf[0] = 0x00;
+	buf[1] = 0x01;
+	buf[2] = 0x00;
+	ret = CTP_I2C_WRITE(ts->client, I2C_HW_Address, buf, 3);
+	if (ret < 0) {
+		NVT_ERR("Write Status Register error!!(%d)\n", ret);
+		return ret;
+	}
+	// Check 0xAA (Write Status Register)
+	retry = 0;
+	while (1) {
+		msleep(1);
+		buf[0] = 0x00;
+		buf[1] = 0x00;
+		ret = CTP_I2C_READ(ts->client, I2C_HW_Address, buf, 2);
+		if (ret < 0) {
+			NVT_ERR("Check 0xAA (Write Status Register) error!!(%d)\n", ret);
+			return ret;
+		}
+		if (buf[1] == 0xAA) {
+			break;
+		}
+		retry++;
+		if (unlikely(retry > 20)) {
+			NVT_ERR("Check 0xAA (Write Status Register) error!! status=0x%02X\n", buf[1]);
+			return -1;
+		}
+	}
+
+	// Read Status
+	retry = 0;
+	while (1) {
+		msleep(5);
+		buf[0] = 0x00;
+		buf[1] = 0x05;
+		ret = CTP_I2C_WRITE(ts->client, I2C_HW_Address, buf, 2);
+		if (ret < 0) {
+			NVT_ERR("Read Status (for Write Status Register) error!!(%d)\n", ret);
+			return ret;
+		}
+
+		// Check 0xAA (Read Status)
+		buf[0] = 0x00;
+		buf[1] = 0x00;
+		buf[2] = 0x00;
+		ret = CTP_I2C_READ(ts->client, I2C_HW_Address, buf, 3);
+		if (ret < 0) {
+			NVT_ERR("Check 0xAA (Read Status for Write Status Register) error!!(%d)\n", ret);
+			return ret;
+		}
+		if ((buf[1] == 0xAA) && (buf[2] == 0x00)) {
+			break;
+		}
+		retry++;
+		if (unlikely(retry > 100)) {
+			NVT_ERR("Check 0xAA (Read Status for Write Status Register) failed, buf[1]=0x%02X, buf[2]=0x%02X, retry=%d\n", buf[1], buf[2], retry);
+			return -1;
+		}
+	}
+
+	if (fw_need_write_size % FLASH_SECTOR_SIZE)
+		count = fw_need_write_size / FLASH_SECTOR_SIZE + 1;
+	else
+		count = fw_need_write_size / FLASH_SECTOR_SIZE;
+
+	for(i = 0; i < count; i++) {
+		// Write Enable
+		buf[0] = 0x00;
+		buf[1] = 0x06;
+		ret = CTP_I2C_WRITE(ts->client, I2C_HW_Address, buf, 2);
+		if (ret < 0) {
+			NVT_ERR("Write Enable error!!(%d,%d)\n", ret, i);
+			return ret;
+		}
+		// Check 0xAA (Write Enable)
+		retry = 0;
+		while (1) {
+			msleep(1);
+			buf[0] = 0x00;
+			buf[1] = 0x00;
+			ret = CTP_I2C_READ(ts->client, I2C_HW_Address, buf, 2);
+			if (ret < 0) {
+				NVT_ERR("Check 0xAA (Write Enable) error!!(%d,%d)\n", ret, i);
+				return ret;
+			}
+			if (buf[1] == 0xAA) {
+				break;
+			}
+			retry++;
+			if (unlikely(retry > 20)) {
+				NVT_ERR("Check 0xAA (Write Enable) error!! status=0x%02X\n", buf[1]);
+				return -1;
+			}
+		}
+
+		Flash_Address = i * FLASH_SECTOR_SIZE;
+
+		// Sector Erase
+		buf[0] = 0x00;
+		buf[1] = 0x20;    // Command : Sector Erase
+		buf[2] = ((Flash_Address >> 16) & 0xFF);
+		buf[3] = ((Flash_Address >> 8) & 0xFF);
+		buf[4] = (Flash_Address & 0xFF);
+		ret = CTP_I2C_WRITE(ts->client, I2C_HW_Address, buf, 5);
+		if (ret < 0) {
+			NVT_ERR("Sector Erase error!!(%d,%d)\n", ret, i);
+			return ret;
+		}
+		// Check 0xAA (Sector Erase)
+		retry = 0;
+		while (1) {
+			msleep(1);
+			buf[0] = 0x00;
+			buf[1] = 0x00;
+			ret = CTP_I2C_READ(ts->client, I2C_HW_Address, buf, 2);
+			if (ret < 0) {
+				NVT_ERR("Check 0xAA (Sector Erase) error!!(%d,%d)\n", ret, i);
+				return ret;
+			}
+			if (buf[1] == 0xAA) {
+				break;
+			}
+			retry++;
+			if (unlikely(retry > 20)) {
+				NVT_ERR("Check 0xAA (Sector Erase) failed, buf[1]=0x%02X, retry=%d\n", buf[1], retry);
+				return -1;
+			}
+		}
+
+		// Read Status
+		retry = 0;
+		while (1) {
+			msleep(5);
+			buf[0] = 0x00;
+			buf[1] = 0x05;
+			ret = CTP_I2C_WRITE(ts->client, I2C_HW_Address, buf, 2);
+			if (ret < 0) {
+				NVT_ERR("Read Status error!!(%d,%d)\n", ret, i);
+				return ret;
+			}
+
+			// Check 0xAA (Read Status)
+			buf[0] = 0x00;
+			buf[1] = 0x00;
+			buf[2] = 0x00;
+			ret = CTP_I2C_READ(ts->client, I2C_HW_Address, buf, 3);
+			if (ret < 0) {
+				NVT_ERR("Check 0xAA (Read Status) error!!(%d,%d)\n", ret, i);
+				return ret;
+			}
+			if ((buf[1] == 0xAA) && (buf[2] == 0x00)) {
+				break;
+			}
+			retry++;
+			if (unlikely(retry > 100)) {
+				NVT_ERR("Check 0xAA (Read Status) failed, buf[1]=0x%02X, buf[2]=0x%02X, retry=%d\n", buf[1], buf[2], retry);
+				return -1;
+			}
+		}
+	}
+
+	NVT_LOG("Erase OK \n");
+	return 0;
+}
+
+/*******************************************************
+Description:
+	Novatek touchscreen write flash sectors function.
+
+return:
+	Executive outcomes. 0---succeed. negative---failed.
+*******************************************************/
+int32_t Write_Flash(void)
+{
+	uint8_t buf[64] = {0};
+	uint32_t XDATA_Addr = ts->mmap->RW_FLASH_DATA_ADDR;
+	uint32_t Flash_Address = 0;
+	int32_t i = 0, j = 0, k = 0;
+	uint8_t tmpvalue = 0;
+	int32_t count = 0;
+	int32_t ret = 0;
+	int32_t retry = 0;
+	int32_t percent = 0;
+	int32_t previous_percent = -1;
+
+	// change I2C buffer index
+	ret = nvt_set_page(I2C_BLDR_Address, XDATA_Addr);
+	if (ret < 0) {
+		NVT_ERR("change I2C buffer index error!!(%d)\n", ret);
+		return ret;
+	}
+
+	if (fw_need_write_size % 256)
+		count = fw_need_write_size / 256 + 1;
+	else
+		count = fw_need_write_size / 256;
+
+	for (i = 0; i < count; i++) {
+		Flash_Address = i * 256;
+
+		// Write Enable
+		buf[0] = 0x00;
+		buf[1] = 0x06;
+		ret = CTP_I2C_WRITE(ts->client, I2C_HW_Address, buf, 2);
+		if (ret < 0) {
+			NVT_ERR("Write Enable error!!(%d)\n", ret);
+			return ret;
+		}
+		// Check 0xAA (Write Enable)
+		retry = 0;
+		while (1) {
+			udelay(100);
+			buf[0] = 0x00;
+			buf[1] = 0x00;
+			ret = CTP_I2C_READ(ts->client, I2C_HW_Address, buf, 2);
+			if (ret < 0) {
+				NVT_ERR("Check 0xAA (Write Enable) error!!(%d,%d)\n", ret, i);
+				return ret;
+			}
+			if (buf[1] == 0xAA) {
+				break;
+			}
+			retry++;
+			if (unlikely(retry > 20)) {
+				NVT_ERR("Check 0xAA (Write Enable) error!! status=0x%02X\n", buf[1]);
+				return -1;
+			}
+		}
+
+		// Write Page : 256 bytes
+		for (j = 0; j < min(fw_need_write_size - i * 256, (size_t)256); j += 32) {
+			buf[0] = (XDATA_Addr + j) & 0xFF;
+			for (k = 0; k < 32; k++) {
+				buf[1 + k] = fw_entry->data[Flash_Address + j + k];
+			}
+			ret = CTP_I2C_WRITE(ts->client, I2C_BLDR_Address, buf, 33);
+			if (ret < 0) {
+				NVT_ERR("Write Page error!!(%d), j=%d\n", ret, j);
+				return ret;
+			}
+		}
+		if (fw_need_write_size - Flash_Address >= 256)
+			tmpvalue=(Flash_Address >> 16) + ((Flash_Address >> 8) & 0xFF) + (Flash_Address & 0xFF) + 0x00 + (255);
+		else
+			tmpvalue=(Flash_Address >> 16) + ((Flash_Address >> 8) & 0xFF) + (Flash_Address & 0xFF) + 0x00 + (fw_need_write_size - Flash_Address - 1);
+
+		for (k = 0; k < min(fw_need_write_size - Flash_Address, (size_t)256); k++)
+			tmpvalue += fw_entry->data[Flash_Address + k];
+
+		tmpvalue = 255 - tmpvalue + 1;
+
+		// Page Program
+		buf[0] = 0x00;
+		buf[1] = 0x02;
+		buf[2] = ((Flash_Address >> 16) & 0xFF);
+		buf[3] = ((Flash_Address >> 8) & 0xFF);
+		buf[4] = (Flash_Address & 0xFF);
+		buf[5] = 0x00;
+		buf[6] = min(fw_need_write_size - Flash_Address, (size_t)256) - 1;
+		buf[7] = tmpvalue;
+		ret = CTP_I2C_WRITE(ts->client, I2C_HW_Address, buf, 8);
+		if (ret < 0) {
+			NVT_ERR("Page Program error!!(%d), i=%d\n", ret, i);
+			return ret;
+		}
+		// Check 0xAA (Page Program)
+		retry = 0;
+		while (1) {
+			msleep(1);
+			buf[0] = 0x00;
+			buf[1] = 0x00;
+			ret = CTP_I2C_READ(ts->client, I2C_HW_Address, buf, 2);
+			if (ret < 0) {
+				NVT_ERR("Page Program error!!(%d)\n", ret);
+				return ret;
+			}
+			if (buf[1] == 0xAA || buf[1] == 0xEA) {
+				break;
+			}
+			retry++;
+			if (unlikely(retry > 20)) {
+				NVT_ERR("Check 0xAA (Page Program) failed, buf[1]=0x%02X, retry=%d\n", buf[1], retry);
+				return -1;
+			}
+		}
+		if (buf[1] == 0xEA) {
+			NVT_ERR("Page Program error!! i=%d\n", i);
+			return -3;
+		}
+
+		// Read Status
+		retry = 0;
+		while (1) {
+			msleep(5);
+			buf[0] = 0x00;
+			buf[1] = 0x05;
+			ret = CTP_I2C_WRITE(ts->client, I2C_HW_Address, buf, 2);
+			if (ret < 0) {
+				NVT_ERR("Read Status error!!(%d)\n", ret);
+				return ret;
+			}
+
+			// Check 0xAA (Read Status)
+			buf[0] = 0x00;
+			buf[1] = 0x00;
+			buf[2] = 0x00;
+			ret = CTP_I2C_READ(ts->client, I2C_HW_Address, buf, 3);
+			if (ret < 0) {
+				NVT_ERR("Check 0xAA (Read Status) error!!(%d)\n", ret);
+				return ret;
+			}
+			if (((buf[1] == 0xAA) && (buf[2] == 0x00)) || (buf[1] == 0xEA)) {
+				break;
+			}
+			retry++;
+			if (unlikely(retry > 100)) {
+				NVT_ERR("Check 0xAA (Read Status) failed, buf[1]=0x%02X, buf[2]=0x%02X, retry=%d\n", buf[1], buf[2], retry);
+				return -1;
+			}
+		}
+		if (buf[1] == 0xEA) {
+			NVT_ERR("Page Program error!! i=%d\n", i);
+			return -4;
+		}
+
+		percent = ((i + 1) * 100) / count;
+		if (((percent % 10) == 0) && (percent != previous_percent)) {
+			NVT_LOG("Programming...%2d%%\n", percent);
+			previous_percent = percent;
+		}
+	}
+
+	NVT_LOG("Program OK         \n");
+	return 0;
+}
+
+/*******************************************************
+Description:
+	Novatek touchscreen verify checksum of written
+	flash function.
+
+return:
+	Executive outcomes. 0---succeed. negative---failed.
+*******************************************************/
+int32_t Verify_Flash(void)
+{
+	uint8_t buf[64] = {0};
+	uint32_t XDATA_Addr = ts->mmap->READ_FLASH_CHECKSUM_ADDR;
+	int32_t ret = 0;
+	int32_t i = 0;
+	int32_t k = 0;
+	uint16_t WR_Filechksum[BLOCK_64KB_NUM] = {0};
+	uint16_t RD_Filechksum[BLOCK_64KB_NUM] = {0};
+	size_t len_in_blk = 0;
+	int32_t retry = 0;
+
+	for (i = 0; i < BLOCK_64KB_NUM; i++) {
+		if (fw_need_write_size > (i * SIZE_64KB)) {
+			// Calculate WR_Filechksum of each 64KB block
+			len_in_blk = min(fw_need_write_size - i * SIZE_64KB, (size_t)SIZE_64KB);
+			WR_Filechksum[i] = i + 0x00 + 0x00 + (((len_in_blk - 1) >> 8) & 0xFF) + ((len_in_blk - 1) & 0xFF);
+			for (k = 0; k < len_in_blk; k++) {
+				WR_Filechksum[i] += fw_entry->data[k + i * SIZE_64KB];
+			}
+			WR_Filechksum[i] = 65535 - WR_Filechksum[i] + 1;
+
+			// Fast Read Command
+			buf[0] = 0x00;
+			buf[1] = 0x07;
+			buf[2] = i;
+			buf[3] = 0x00;
+			buf[4] = 0x00;
+			buf[5] = ((len_in_blk - 1) >> 8) & 0xFF;
+			buf[6] = (len_in_blk - 1) & 0xFF;
+			ret = CTP_I2C_WRITE(ts->client, I2C_HW_Address, buf, 7);
+			if (ret < 0) {
+				NVT_ERR("Fast Read Command error!!(%d)\n", ret);
+				return ret;
+			}
+			// Check 0xAA (Fast Read Command)
+			retry = 0;
+			while (1) {
+				msleep(80);
+				buf[0] = 0x00;
+				buf[1] = 0x00;
+				ret = CTP_I2C_READ(ts->client, I2C_HW_Address, buf, 2);
+				if (ret < 0) {
+					NVT_ERR("Check 0xAA (Fast Read Command) error!!(%d)\n", ret);
+					return ret;
+				}
+				if (buf[1] == 0xAA) {
+					break;
+				}
+				retry++;
+				if (unlikely(retry > 5)) {
+					NVT_ERR("Check 0xAA (Fast Read Command) failed, buf[1]=0x%02X, retry=%d\n", buf[1], retry);
+					return -1;
+				}
+			}
+			// Read Checksum (write addr high byte & middle byte)
+			ret = nvt_set_page(I2C_BLDR_Address, XDATA_Addr);
+			if (ret < 0) {
+				NVT_ERR("Read Checksum (write addr high byte & middle byte) error!!(%d)\n", ret);
+				return ret;
+			}
+			// Read Checksum
+			buf[0] = (XDATA_Addr) & 0xFF;
+			buf[1] = 0x00;
+			buf[2] = 0x00;
+			ret = CTP_I2C_READ(ts->client, I2C_BLDR_Address, buf, 3);
+			if (ret < 0) {
+				NVT_ERR("Read Checksum error!!(%d)\n", ret);
+				return ret;
+			}
+
+			RD_Filechksum[i] = (uint16_t)((buf[2] << 8) | buf[1]);
+			if (WR_Filechksum[i] != RD_Filechksum[i]) {
+				NVT_ERR("Verify Fail%d!!\n", i);
+				NVT_ERR("RD_Filechksum[%d]=0x%04X, WR_Filechksum[%d]=0x%04X\n", i, RD_Filechksum[i], i, WR_Filechksum[i]);
+				return -1;
+			}
+		}
+	}
+
+	NVT_LOG("Verify OK \n");
+	return 0;
+}
+
+/*******************************************************
+Description:
+	Novatek touchscreen update firmware function.
+
+return:
+	Executive outcomes. 0---succeed. negative---failed.
+*******************************************************/
+int32_t Update_Firmware(void)
+{
+	int32_t ret = 0;
+
+	//---Stop CRC check to prevent IC auto reboot---
+	nvt_stop_crc_reboot();
+
+	// Step 1 : initial bootloader
+	ret = Init_BootLoader();
+	if (ret) {
+		return ret;
+	}
+
+	// Step 2 : Resume PD
+	ret = Resume_PD();
+	if (ret) {
+		return ret;
+	}
+
+	// Step 3 : Erase
+	ret = Erase_Flash();
+	if (ret) {
+		return ret;
+	}
+
+	// Step 4 : Program
+	ret = Write_Flash();
+	if (ret) {
+		return ret;
+	}
+
+	// Step 5 : Verify
+	ret = Verify_Flash();
+	if (ret) {
+		return ret;
+	}
+
+	//Step 6 : Bootloader Reset
+	nvt_bootloader_reset();
+	nvt_check_fw_reset_state(RESET_STATE_INIT);
+	nvt_get_fw_info();
+
+	return ret;
+}
+
+/*******************************************************
+Description:
+	Novatek touchscreen check flash end flag function.
+
+return:
+	Executive outcomes. 0---succeed. 1,negative---failed.
+*******************************************************/
+int32_t nvt_check_flash_end_flag(void)
+{
+	uint8_t buf[8] = {0};
+	uint8_t nvt_end_flag[NVT_FLASH_END_FLAG_LEN + 1] = {0};
+	int32_t ret = 0;
+
+	// Step 1 : initial bootloader
+	ret = Init_BootLoader();
+	if (ret) {
+		return ret;
+	}
+
+	// Step 2 : Resume PD
+	ret = Resume_PD();
+	if (ret) {
+		return ret;
+	}
+
+	// Step 3 : unlock
+	buf[0] = 0x00;
+	buf[1] = 0x35;
+	ret = CTP_I2C_WRITE(ts->client, I2C_HW_Address, buf, 2);
+	if (ret < 0) {
+		NVT_ERR("write unlock error!!(%d)\n", ret);
+		return ret;
+	}
+	msleep(10);
+
+	//Step 4 : Flash Read Command
+	buf[0] = 0x00;
+	buf[1] = 0x03;
+	buf[2] = (NVT_FLASH_END_FLAG_ADDR >> 16) & 0xFF; //Addr_H
+	buf[3] = (NVT_FLASH_END_FLAG_ADDR >> 8) & 0xFF; //Addr_M
+	buf[4] = NVT_FLASH_END_FLAG_ADDR & 0xFF; //Addr_L
+	buf[5] = (NVT_FLASH_END_FLAG_LEN >> 8) & 0xFF; //Len_H
+	buf[6] = NVT_FLASH_END_FLAG_LEN & 0xFF; //Len_L
+	ret = CTP_I2C_WRITE(ts->client, I2C_HW_Address, buf, 7);
+	if (ret < 0) {
+		NVT_ERR("write Read Command error!!(%d)\n", ret);
+		return ret;
+	}
+	msleep(10);
+
+	// Check 0xAA (Read Command)
+	buf[0] = 0x00;
+	buf[1] = 0x00;
+	ret = CTP_I2C_READ(ts->client, I2C_HW_Address, buf, 2);
+	if (ret < 0) {
+		NVT_ERR("Check 0xAA (Read Command) error!!(%d)\n", ret);
+		return ret;
+	}
+	if (buf[1] != 0xAA) {
+		NVT_ERR("Check 0xAA (Read Command) error!! status=0x%02X\n", buf[1]);
+		return -1;
+	}
+
+	msleep(10);
+
+	//Step 5 : Read Flash Data
+	ret = nvt_set_page(I2C_BLDR_Address, ts->mmap->READ_FLASH_CHECKSUM_ADDR);
+	if (ret < 0) {
+		NVT_ERR("change index error!! (%d)\n", ret);
+		return ret;
+	}
+	msleep(10);
+
+	// Read Back
+	buf[0] = ts->mmap->READ_FLASH_CHECKSUM_ADDR & 0xFF;
+	ret = CTP_I2C_READ(ts->client, I2C_BLDR_Address, buf, 6);
+	if (ret < 0) {
+		NVT_ERR("Read Back error!! (%d)\n", ret);
+		return ret;
+	}
+
+	//buf[3:5] => NVT End Flag
+	strlcpy(nvt_end_flag, &buf[3], NVT_FLASH_END_FLAG_LEN);
+	NVT_LOG("nvt_end_flag=%s (%02X %02X %02X)\n", nvt_end_flag, buf[3], buf[4], buf[5]);
+
+	if (memcmp(nvt_end_flag, "NVT", NVT_FLASH_END_FLAG_LEN) == 0) {
+		return 0;
+	} else {
+		NVT_ERR("\"NVT\" end flag not found!\n");
+		return 1;
+	}
+}
+
+/*******************************************************
+Description:
+	Novatek touchscreen update firmware when booting
+	function.
+
+return:
+	n.a.
+*******************************************************/
+void Boot_Update_Firmware(struct work_struct *work)
+{
+	int32_t ret = 0;
+
+	char firmware_name[256] = "";
+
+	snprintf(firmware_name, sizeof(firmware_name),
+			BOOT_UPDATE_FIRMWARE_NAME);
+
+	// request bin file in "/etc/firmware"
+	ret = update_firmware_request(firmware_name);
+	if (ret) {
+		NVT_ERR("update_firmware_request failed. (%d)\n", ret);
+		return;
+	}
+
+	mutex_lock(&ts->lock);
+
+#if NVT_TOUCH_ESD_PROTECT
+	nvt_esd_check_enable(false);
+#endif /* #if NVT_TOUCH_ESD_PROTECT */
+
+	nvt_sw_reset_idle();
+
+	ret = Check_CheckSum();
+
+	if (ret < 0) {	// read firmware checksum failed
+		NVT_ERR("read firmware checksum failed\n");
+		Update_Firmware();
+	} else if ((ret == 0) && (Check_FW_Ver() == 0)) { // (fw checksum not match) && (bin fw version >= ic fw version)
+		NVT_LOG("firmware version not match\n");
+		Update_Firmware();
+	} else if (nvt_check_flash_end_flag()) {
+		NVT_LOG("check flash end flag failed\n");
+		Update_Firmware();
+	} else {
+		// Bootloader Reset
+		nvt_bootloader_reset();
+		ret = nvt_check_fw_reset_state(RESET_STATE_INIT);
+		if (ret) {
+			NVT_LOG("check fw reset state failed\n");
+			Update_Firmware();
+		}
+	}
+
+	mutex_unlock(&ts->lock);
+
+	update_firmware_release();
+}
+#endif /* BOOT_UPDATE_FIRMWARE */
diff --git a/drivers/input/touchscreen/nt36xxx/nt36xxx_mem_map.h b/drivers/input/touchscreen/nt36xxx/nt36xxx_mem_map.h
new file mode 100644
index 0000000..94040a4
--- /dev/null
+++ b/drivers/input/touchscreen/nt36xxx/nt36xxx_mem_map.h
@@ -0,0 +1,220 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (C) 2010 - 2018 Novatek, Inc.
+ *
+ * $Revision: 48764 $
+ * $Date: 2019-08-08 14:52:12 +0800 (Thu, 08 Aug 2019) $
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ */
+
+struct nvt_ts_mem_map {
+	uint32_t EVENT_BUF_ADDR;
+	uint32_t RAW_PIPE0_ADDR;
+	uint32_t RAW_PIPE1_ADDR;
+	uint32_t BASELINE_ADDR;
+	uint32_t BASELINE_BTN_ADDR;
+	uint32_t DIFF_PIPE0_ADDR;
+	uint32_t DIFF_PIPE1_ADDR;
+	uint32_t RAW_BTN_PIPE0_ADDR;
+	uint32_t RAW_BTN_PIPE1_ADDR;
+	uint32_t DIFF_BTN_PIPE0_ADDR;
+	uint32_t DIFF_BTN_PIPE1_ADDR;
+	uint32_t READ_FLASH_CHECKSUM_ADDR;
+	uint32_t RW_FLASH_DATA_ADDR;
+};
+
+struct nvt_ts_hw_info {
+	uint8_t carrier_system;
+	uint8_t hw_crc;
+};
+
+static const struct nvt_ts_mem_map NT36526_memory_map = {
+	.EVENT_BUF_ADDR           = 0x22D00,
+	.RAW_PIPE0_ADDR           = 0x24000,
+	.RAW_PIPE1_ADDR           = 0x24000,
+	.BASELINE_ADDR            = 0x21758,
+	.BASELINE_BTN_ADDR        = 0,
+	.DIFF_PIPE0_ADDR          = 0x20AB0,
+	.DIFF_PIPE1_ADDR          = 0x24AB0,
+	.RAW_BTN_PIPE0_ADDR       = 0,
+	.RAW_BTN_PIPE1_ADDR       = 0,
+	.DIFF_BTN_PIPE0_ADDR      = 0,
+	.DIFF_BTN_PIPE1_ADDR      = 0,
+	.READ_FLASH_CHECKSUM_ADDR = 0x24000,
+	.RW_FLASH_DATA_ADDR       = 0x24002,
+};
+
+static const struct nvt_ts_mem_map NT36675_memory_map = {
+	.EVENT_BUF_ADDR           = 0x22D00,
+	.RAW_PIPE0_ADDR           = 0x24000,
+	.RAW_PIPE1_ADDR           = 0x24000,
+	.BASELINE_ADDR            = 0x21B90,
+	.BASELINE_BTN_ADDR        = 0,
+	.DIFF_PIPE0_ADDR          = 0x20C60,
+	.DIFF_PIPE1_ADDR          = 0x24C60,
+	.RAW_BTN_PIPE0_ADDR       = 0,
+	.RAW_BTN_PIPE1_ADDR       = 0,
+	.DIFF_BTN_PIPE0_ADDR      = 0,
+	.DIFF_BTN_PIPE1_ADDR      = 0,
+	.READ_FLASH_CHECKSUM_ADDR = 0x24000,
+	.RW_FLASH_DATA_ADDR       = 0x24002,
+};
+
+static const struct nvt_ts_mem_map NT36672A_memory_map = {
+	.EVENT_BUF_ADDR           = 0x21C00,
+	.RAW_PIPE0_ADDR           = 0x20000,
+	.RAW_PIPE1_ADDR           = 0x23000,
+	.BASELINE_ADDR            = 0x20BFC,
+	.BASELINE_BTN_ADDR        = 0x23BFC,
+	.DIFF_PIPE0_ADDR          = 0x206DC,
+	.DIFF_PIPE1_ADDR          = 0x236DC,
+	.RAW_BTN_PIPE0_ADDR       = 0x20510,
+	.RAW_BTN_PIPE1_ADDR       = 0x23510,
+	.DIFF_BTN_PIPE0_ADDR      = 0x20BF0,
+	.DIFF_BTN_PIPE1_ADDR      = 0x23BF0,
+	.READ_FLASH_CHECKSUM_ADDR = 0x24000,
+	.RW_FLASH_DATA_ADDR       = 0x24002,
+};
+
+static const struct nvt_ts_mem_map NT36772_memory_map = {
+	.EVENT_BUF_ADDR           = 0x11E00,
+	.RAW_PIPE0_ADDR           = 0x10000,
+	.RAW_PIPE1_ADDR           = 0x12000,
+	.BASELINE_ADDR            = 0x10E70,
+	.BASELINE_BTN_ADDR        = 0x12E70,
+	.DIFF_PIPE0_ADDR          = 0x10830,
+	.DIFF_PIPE1_ADDR          = 0x12830,
+	.RAW_BTN_PIPE0_ADDR       = 0x10E60,
+	.RAW_BTN_PIPE1_ADDR       = 0x12E60,
+	.DIFF_BTN_PIPE0_ADDR      = 0x10E68,
+	.DIFF_BTN_PIPE1_ADDR      = 0x12E68,
+	.READ_FLASH_CHECKSUM_ADDR = 0x14000,
+	.RW_FLASH_DATA_ADDR       = 0x14002,
+};
+
+static const struct nvt_ts_mem_map NT36525_memory_map = {
+	.EVENT_BUF_ADDR           = 0x11A00,
+	.RAW_PIPE0_ADDR           = 0x10000,
+	.RAW_PIPE1_ADDR           = 0x12000,
+	.BASELINE_ADDR            = 0x10B08,
+	.BASELINE_BTN_ADDR        = 0x12B08,
+	.DIFF_PIPE0_ADDR          = 0x1064C,
+	.DIFF_PIPE1_ADDR          = 0x1264C,
+	.RAW_BTN_PIPE0_ADDR       = 0x10634,
+	.RAW_BTN_PIPE1_ADDR       = 0x12634,
+	.DIFF_BTN_PIPE0_ADDR      = 0x10AFC,
+	.DIFF_BTN_PIPE1_ADDR      = 0x12AFC,
+	.READ_FLASH_CHECKSUM_ADDR = 0x14000,
+	.RW_FLASH_DATA_ADDR       = 0x14002,
+};
+
+static const struct nvt_ts_mem_map NT36676F_memory_map = {
+	.EVENT_BUF_ADDR           = 0x11A00,
+	.RAW_PIPE0_ADDR           = 0x10000,
+	.RAW_PIPE1_ADDR           = 0x12000,
+	.BASELINE_ADDR            = 0x10B08,
+	.BASELINE_BTN_ADDR        = 0x12B08,
+	.DIFF_PIPE0_ADDR          = 0x1064C,
+	.DIFF_PIPE1_ADDR          = 0x1264C,
+	.RAW_BTN_PIPE0_ADDR       = 0x10634,
+	.RAW_BTN_PIPE1_ADDR       = 0x12634,
+	.DIFF_BTN_PIPE0_ADDR      = 0x10AFC,
+	.DIFF_BTN_PIPE1_ADDR      = 0x12AFC,
+	.READ_FLASH_CHECKSUM_ADDR = 0x14000,
+	.RW_FLASH_DATA_ADDR       = 0x14002,
+};
+
+static struct nvt_ts_hw_info NT36526_hw_info = {
+	.carrier_system = 2,
+	.hw_crc         = 2,
+};
+
+static struct nvt_ts_hw_info NT36675_hw_info = {
+	.carrier_system = 2,
+	.hw_crc         = 2,
+};
+
+static struct nvt_ts_hw_info NT36672A_hw_info = {
+	.carrier_system = 0,
+	.hw_crc         = 1,
+};
+
+static struct nvt_ts_hw_info NT36772_hw_info = {
+	.carrier_system = 0,
+	.hw_crc         = 0,
+};
+
+static struct nvt_ts_hw_info NT36525_hw_info = {
+	.carrier_system = 0,
+	.hw_crc         = 0,
+};
+
+static struct nvt_ts_hw_info NT36676F_hw_info = {
+	.carrier_system = 0,
+	.hw_crc         = 0,
+};
+
+#define NVT_ID_BYTE_MAX 6
+struct nvt_ts_trim_id_table {
+	uint8_t id[NVT_ID_BYTE_MAX];
+	uint8_t mask[NVT_ID_BYTE_MAX];
+	const struct nvt_ts_mem_map *mmap;
+	const struct nvt_ts_hw_info *hwinfo;
+};
+
+static const struct nvt_ts_trim_id_table trim_id_table[] = {
+	{.id = {0x0C, 0xFF, 0xFF, 0x72, 0x66, 0x03}, .mask = {1, 0, 0, 1, 1, 1},
+		.mmap = &NT36675_memory_map,  .hwinfo = &NT36675_hw_info},
+	{.id = {0xFF, 0xFF, 0xFF, 0x26, 0x65, 0x03}, .mask = {0, 0, 0, 1, 1, 1},
+		.mmap = &NT36526_memory_map,  .hwinfo = &NT36526_hw_info},
+	{.id = {0xFF, 0xFF, 0xFF, 0x75, 0x66, 0x03}, .mask = {0, 0, 0, 1, 1, 1},
+		.mmap = &NT36675_memory_map,  .hwinfo = &NT36675_hw_info},
+	{.id = {0x0B, 0xFF, 0xFF, 0x72, 0x66, 0x03}, .mask = {1, 0, 0, 1, 1, 1},
+		.mmap = &NT36672A_memory_map, .hwinfo = &NT36672A_hw_info},
+	{.id = {0x0B, 0xFF, 0xFF, 0x82, 0x66, 0x03}, .mask = {1, 0, 0, 1, 1, 1},
+		.mmap = &NT36672A_memory_map, .hwinfo = &NT36672A_hw_info},
+	{.id = {0x0B, 0xFF, 0xFF, 0x25, 0x65, 0x03}, .mask = {1, 0, 0, 1, 1, 1},
+		.mmap = &NT36672A_memory_map, .hwinfo = &NT36672A_hw_info},
+	{.id = {0x0A, 0xFF, 0xFF, 0x72, 0x65, 0x03}, .mask = {1, 0, 0, 1, 1, 1},
+		.mmap = &NT36672A_memory_map, .hwinfo = &NT36672A_hw_info},
+	{.id = {0x0A, 0xFF, 0xFF, 0x72, 0x66, 0x03}, .mask = {1, 0, 0, 1, 1, 1},
+		.mmap = &NT36672A_memory_map, .hwinfo = &NT36672A_hw_info},
+	{.id = {0x0A, 0xFF, 0xFF, 0x82, 0x66, 0x03}, .mask = {1, 0, 0, 1, 1, 1},
+		.mmap = &NT36672A_memory_map, .hwinfo = &NT36672A_hw_info},
+	{.id = {0x0A, 0xFF, 0xFF, 0x70, 0x66, 0x03}, .mask = {1, 0, 0, 1, 1, 1},
+		.mmap = &NT36672A_memory_map, .hwinfo = &NT36672A_hw_info},
+	{.id = {0x0B, 0xFF, 0xFF, 0x70, 0x66, 0x03}, .mask = {1, 0, 0, 1, 1, 1},
+		.mmap = &NT36672A_memory_map, .hwinfo = &NT36672A_hw_info},
+	{.id = {0x0A, 0xFF, 0xFF, 0x72, 0x67, 0x03}, .mask = {1, 0, 0, 1, 1, 1},
+		.mmap = &NT36672A_memory_map, .hwinfo = &NT36672A_hw_info},
+	{.id = {0x55, 0x00, 0xFF, 0x00, 0x00, 0x00}, .mask = {1, 1, 0, 1, 1, 1},
+		.mmap = &NT36772_memory_map,  .hwinfo = &NT36772_hw_info},
+	{.id = {0x55, 0x72, 0xFF, 0x00, 0x00, 0x00}, .mask = {1, 1, 0, 1, 1, 1},
+		.mmap = &NT36772_memory_map,  .hwinfo = &NT36772_hw_info},
+	{.id = {0xAA, 0x00, 0xFF, 0x00, 0x00, 0x00}, .mask = {1, 1, 0, 1, 1, 1},
+		.mmap = &NT36772_memory_map,  .hwinfo = &NT36772_hw_info},
+	{.id = {0xAA, 0x72, 0xFF, 0x00, 0x00, 0x00}, .mask = {1, 1, 0, 1, 1, 1},
+		.mmap = &NT36772_memory_map,  .hwinfo = &NT36772_hw_info},
+	{.id = {0xFF, 0xFF, 0xFF, 0x72, 0x67, 0x03}, .mask = {0, 0, 0, 1, 1, 1},
+		.mmap = &NT36772_memory_map,  .hwinfo = &NT36772_hw_info},
+	{.id = {0xFF, 0xFF, 0xFF, 0x70, 0x66, 0x03}, .mask = {0, 0, 0, 1, 1, 1},
+		.mmap = &NT36772_memory_map,  .hwinfo = &NT36772_hw_info},
+	{.id = {0xFF, 0xFF, 0xFF, 0x70, 0x67, 0x03}, .mask = {0, 0, 0, 1, 1, 1},
+		.mmap = &NT36772_memory_map,  .hwinfo = &NT36772_hw_info},
+	{.id = {0xFF, 0xFF, 0xFF, 0x72, 0x66, 0x03}, .mask = {0, 0, 0, 1, 1, 1},
+		.mmap = &NT36772_memory_map,  .hwinfo = &NT36772_hw_info},
+	{.id = {0xFF, 0xFF, 0xFF, 0x25, 0x65, 0x03}, .mask = {0, 0, 0, 1, 1, 1},
+		.mmap = &NT36525_memory_map,  .hwinfo = &NT36525_hw_info},
+	{.id = {0xFF, 0xFF, 0xFF, 0x76, 0x66, 0x03}, .mask = {0, 0, 0, 1, 1, 1},
+		.mmap = &NT36676F_memory_map, .hwinfo = &NT36676F_hw_info}
+};
diff --git a/drivers/input/touchscreen/nt36xxx/nt36xxx_mp_ctrlram.c b/drivers/input/touchscreen/nt36xxx/nt36xxx_mp_ctrlram.c
new file mode 100644
index 0000000..c14b0c8
--- /dev/null
+++ b/drivers/input/touchscreen/nt36xxx/nt36xxx_mp_ctrlram.c
@@ -0,0 +1,1481 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (C) 2010 - 2018 Novatek, Inc.
+ *
+ * $Revision: 47247 $
+ * $Date: 2019-07-10 10:41:36 +0800 (Wed, 10 Jul 2019) $
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ */
+
+#include <linux/proc_fs.h>
+#include <linux/seq_file.h>
+#include <linux/slab.h>
+
+#include "nt36xxx.h"
+#include "nt36xxx_mp_ctrlram.h"
+
+#if NVT_TOUCH_MP
+
+#define NORMAL_MODE 0x00
+#define TEST_MODE_1 0x21
+#define TEST_MODE_2 0x22
+#define MP_MODE_CC 0x41
+#define FREQ_HOP_DISABLE 0x66
+#define FREQ_HOP_ENABLE 0x65
+
+#define SHORT_TEST_CSV_FILE "/data/local/tmp/ShortTest.csv"
+#define OPEN_TEST_CSV_FILE "/data/local/tmp/OpenTest.csv"
+#define FW_RAWDATA_CSV_FILE "/data/local/tmp/FWMutualTest.csv"
+#define FW_CC_CSV_FILE "/data/local/tmp/FWCCTest.csv"
+#define NOISE_TEST_CSV_FILE "/data/local/tmp/NoiseTest.csv"
+
+#define nvt_mp_seq_printf(m, fmt, args...) do {	\
+	seq_printf(m, fmt, ##args);	\
+	if (!nvt_mp_test_result_printed)	\
+		printk(fmt, ##args);	\
+} while (0)
+
+static uint8_t *RecordResult_Short = NULL;
+static uint8_t *RecordResult_Open = NULL;
+static uint8_t *RecordResult_FWMutual = NULL;
+static uint8_t *RecordResult_FW_CC = NULL;
+static uint8_t *RecordResult_FW_DiffMax = NULL;
+static uint8_t *RecordResult_FW_DiffMin = NULL;
+
+static int32_t TestResult_Short = 0;
+static int32_t TestResult_Open = 0;
+static int32_t TestResult_FW_Rawdata = 0;
+static int32_t TestResult_FWMutual = 0;
+static int32_t TestResult_FW_CC = 0;
+static int32_t TestResult_Noise = 0;
+static int32_t TestResult_FW_DiffMax = 0;
+static int32_t TestResult_FW_DiffMin = 0;
+
+static int32_t *RawData_Short = NULL;
+static int32_t *RawData_Open = NULL;
+static int32_t *RawData_Diff = NULL;
+static int32_t *RawData_Diff_Min = NULL;
+static int32_t *RawData_Diff_Max = NULL;
+static int32_t *RawData_FWMutual = NULL;
+static int32_t *RawData_FW_CC = NULL;
+
+static struct proc_dir_entry *NVT_proc_selftest_entry = NULL;
+static int8_t nvt_mp_test_result_printed = 0;
+static uint8_t fw_ver = 0;
+
+extern void nvt_change_mode(uint8_t mode);
+extern uint8_t nvt_get_fw_pipe(void);
+extern void nvt_read_mdata(uint32_t xdata_addr, uint32_t xdata_btn_addr);
+extern void nvt_get_mdata(int32_t *buf, uint8_t *m_x_num, uint8_t *m_y_num);
+int32_t nvt_mp_parse_dt(struct device_node *root, const char *node_compatible);
+
+/*******************************************************
+Description:
+	Novatek touchscreen allocate buffer for mp selftest.
+
+return:
+	Executive outcomes. 0---succeed. -12---Out of memory
+*******************************************************/
+static int nvt_mp_buffer_init(void)
+{
+	size_t RecordResult_BufSize = IC_X_CFG_SIZE * IC_Y_CFG_SIZE + IC_KEY_CFG_SIZE;
+	size_t RawData_BufSize = (IC_X_CFG_SIZE * IC_Y_CFG_SIZE + IC_KEY_CFG_SIZE) * sizeof(int32_t);
+
+	RecordResult_Short = kzalloc(RecordResult_BufSize, GFP_KERNEL);
+	if (!RecordResult_Short) {
+		NVT_ERR("kzalloc for RecordResult_Short failed!\n");
+		return -ENOMEM;
+	}
+
+	RecordResult_Open = kzalloc(RecordResult_BufSize, GFP_KERNEL);
+	if (!RecordResult_Open) {
+		NVT_ERR("kzalloc for RecordResult_Open failed!\n");
+		return -ENOMEM;
+	}
+
+	RecordResult_FWMutual = kzalloc(RecordResult_BufSize, GFP_KERNEL);
+	if (!RecordResult_FWMutual) {
+		NVT_ERR("kzalloc for RecordResult_FWMutual failed!\n");
+		return -ENOMEM;
+	}
+
+	RecordResult_FW_CC = kzalloc(RecordResult_BufSize, GFP_KERNEL);
+	if (!RecordResult_FW_CC) {
+		NVT_ERR("kzalloc for RecordResult_FW_CC failed!\n");
+		return -ENOMEM;
+	}
+
+	RecordResult_FW_DiffMax = kzalloc(RecordResult_BufSize, GFP_KERNEL);
+	if (!RecordResult_FW_DiffMax) {
+		NVT_ERR("kzalloc for RecordResult_FW_DiffMax failed!\n");
+		return -ENOMEM;
+	}
+
+	RecordResult_FW_DiffMin = kzalloc(RecordResult_BufSize, GFP_KERNEL);
+	if (!RecordResult_FW_DiffMin) {
+		NVT_ERR("kzalloc for RecordResult_FW_DiffMin failed!\n");
+		return -ENOMEM;
+	}
+
+	RawData_Short = kzalloc(RawData_BufSize, GFP_KERNEL);
+	if (!RawData_Short) {
+		NVT_ERR("kzalloc for RawData_Short failed!\n");
+		return -ENOMEM;
+	}
+
+	RawData_Open = kzalloc(RawData_BufSize, GFP_KERNEL);
+	if (!RawData_Open) {
+		NVT_ERR("kzalloc for RawData_Open failed!\n");
+		return -ENOMEM;
+	}
+
+	RawData_Diff = kzalloc(RawData_BufSize, GFP_KERNEL);
+	if (!RawData_Diff) {
+		NVT_ERR("kzalloc for RawData_Diff failed!\n");
+		return -ENOMEM;
+	}
+
+	RawData_Diff_Min = kzalloc(RawData_BufSize, GFP_KERNEL);
+	if (!RawData_Diff_Min) {
+		NVT_ERR("kzalloc for RawData_Diff_Min failed!\n");
+		return -ENOMEM;
+	}
+
+	RawData_Diff_Max = kzalloc(RawData_BufSize, GFP_KERNEL);
+	if (!RawData_Diff_Max) {
+		NVT_ERR("kzalloc for RawData_Diff_Max failed!\n");
+		return -ENOMEM;
+	}
+
+	RawData_FWMutual = kzalloc(RawData_BufSize, GFP_KERNEL);
+	if (!RawData_FWMutual) {
+		NVT_ERR("kzalloc for RawData_FWMutual failed!\n");
+		return -ENOMEM;
+	}
+
+	RawData_FW_CC = kzalloc(RawData_BufSize, GFP_KERNEL);
+	if (!RawData_FW_CC) {
+		NVT_ERR("kzalloc for RawData_FW_CC failed!\n");
+		return -ENOMEM;
+	}
+
+	return 0;
+}
+
+/*******************************************************
+Description:
+	Novatek touchscreen free buffer for mp selftest.
+
+return:
+	n.a.
+*******************************************************/
+static void nvt_mp_buffer_deinit(void)
+{
+	if (RecordResult_Short) {
+		kfree(RecordResult_Short);
+		RecordResult_Short = NULL;
+	}
+
+	if (RecordResult_Open) {
+		kfree(RecordResult_Open);
+		RecordResult_Open = NULL;
+	}
+
+	if (RecordResult_FWMutual) {
+		kfree(RecordResult_FWMutual);
+		RecordResult_FWMutual = NULL;
+	}
+
+	if (RecordResult_FW_CC) {
+		kfree(RecordResult_FW_CC);
+		RecordResult_FW_CC = NULL;
+	}
+
+	if (RecordResult_FW_DiffMax) {
+		kfree(RecordResult_FW_DiffMax);
+		RecordResult_FW_DiffMax = NULL;
+	}
+
+	if (RecordResult_FW_DiffMin) {
+		kfree(RecordResult_FW_DiffMin);
+		RecordResult_FW_DiffMin = NULL;
+	}
+
+	if (RawData_Short) {
+		kfree(RawData_Short);
+		RawData_Short = NULL;
+	}
+
+	if (RawData_Open) {
+		kfree(RawData_Open);
+		RawData_Open = NULL;
+	}
+
+	if (RawData_Diff) {
+		kfree(RawData_Diff);
+		RawData_Diff = NULL;
+	}
+
+	if (RawData_Diff_Min) {
+		kfree(RawData_Diff_Min);
+		RawData_Diff_Min = NULL;
+	}
+
+	if (RawData_Diff_Max) {
+		kfree(RawData_Diff_Max);
+		RawData_Diff_Max = NULL;
+	}
+
+	if (RawData_FWMutual) {
+		kfree(RawData_FWMutual);
+		RawData_FWMutual = NULL;
+	}
+
+	if (RawData_FW_CC) {
+		kfree(RawData_FW_CC);
+		RawData_FW_CC = NULL;
+	}
+}
+
+static void nvt_print_data_log_in_one_line(int32_t *data, int32_t data_num)
+{
+	char *tmp_log = NULL;
+	int32_t i = 0;
+	int32_t count = data_num * 7 + 1;
+
+	tmp_log = kzalloc(count, GFP_KERNEL);
+	if (!tmp_log) {
+		NVT_ERR("kzalloc for tmp_log failed!\n ");
+		return;
+	}
+
+	for (i = 0; i < data_num; i++) {
+		snprintf(tmp_log + i * 7, count - i * 7, "%5d, ", data[i]);
+	}
+	tmp_log[data_num * 7] = '\0';
+	printk("%s", tmp_log);
+	if (tmp_log) {
+		kfree(tmp_log);
+		tmp_log = NULL;
+	}
+
+	return;
+}
+
+static void nvt_print_result_log_in_one_line(uint8_t *result, int32_t result_num)
+{
+	char *tmp_log = NULL;
+	int32_t i = 0;
+	int32_t count = 0;
+
+	count = result_num * 6 + 1;
+	tmp_log = kzalloc(count, GFP_KERNEL);
+	if (!tmp_log) {
+		NVT_ERR("kzalloc for tmp_log failed!\n ");
+		return;
+	}
+
+	for (i = 0; i < result_num; i++) {
+		snprintf(tmp_log + i * 6, count - i * 6, "0x%02X, ", result[i]);
+	}
+	tmp_log[result_num * 6] = '\0';
+	printk("%s", tmp_log);
+	if (tmp_log) {
+		kfree(tmp_log);
+		tmp_log = NULL;
+	}
+
+	return;
+}
+
+/*******************************************************
+Description:
+	Novatek touchscreen self-test criteria print function.
+
+return:
+	n.a.
+*******************************************************/
+static void nvt_print_lmt_array(int32_t *array, int32_t x_ch, int32_t y_ch)
+{
+	int32_t j = 0;
+
+	for (j = 0; j < y_ch; j++) {
+		nvt_print_data_log_in_one_line(array + j * x_ch, x_ch);
+		printk("\n");
+	}
+#if TOUCH_KEY_NUM > 0
+	nvt_print_data_log_in_one_line(array + y_ch * x_ch, Key_Channel);
+	printk("\n");
+#endif /* #if TOUCH_KEY_NUM > 0 */
+}
+
+static void nvt_print_criteria(void)
+{
+	NVT_LOG("++\n");
+
+	//---PS_Config_Lmt_Short_Rawdata---
+	printk("PS_Config_Lmt_Short_Rawdata_P:\n");
+	nvt_print_lmt_array(PS_Config_Lmt_Short_Rawdata_P, X_Channel, Y_Channel);
+	printk("PS_Config_Lmt_Short_Rawdata_N:\n");
+	nvt_print_lmt_array(PS_Config_Lmt_Short_Rawdata_N, X_Channel, Y_Channel);
+
+	//---PS_Config_Lmt_Open_Rawdata---
+	printk("PS_Config_Lmt_Open_Rawdata_P:\n");
+	nvt_print_lmt_array(PS_Config_Lmt_Open_Rawdata_P, X_Channel, Y_Channel);
+	printk("PS_Config_Lmt_Open_Rawdata_N:\n");
+	nvt_print_lmt_array(PS_Config_Lmt_Open_Rawdata_N, X_Channel, Y_Channel);
+
+	//---PS_Config_Lmt_FW_Rawdata---
+	printk("PS_Config_Lmt_FW_Rawdata_P:\n");
+	nvt_print_lmt_array(PS_Config_Lmt_FW_Rawdata_P, X_Channel, Y_Channel);
+	printk("PS_Config_Lmt_FW_Rawdata_N:\n");
+	nvt_print_lmt_array(PS_Config_Lmt_FW_Rawdata_N, X_Channel, Y_Channel);
+
+	//---PS_Config_Lmt_FW_CC---
+	printk("PS_Config_Lmt_FW_CC_P:\n");
+	nvt_print_lmt_array(PS_Config_Lmt_FW_CC_P, X_Channel, Y_Channel);
+	printk("PS_Config_Lmt_FW_CC_N:\n");
+	nvt_print_lmt_array(PS_Config_Lmt_FW_CC_N, X_Channel, Y_Channel);
+
+	//---PS_Config_Lmt_FW_Diff---
+	printk("PS_Config_Lmt_FW_Diff_P:\n");
+	nvt_print_lmt_array(PS_Config_Lmt_FW_Diff_P, X_Channel, Y_Channel);
+	printk("PS_Config_Lmt_FW_Diff_N:\n");
+	nvt_print_lmt_array(PS_Config_Lmt_FW_Diff_N, X_Channel, Y_Channel);
+
+	NVT_LOG("--\n");
+}
+
+static int32_t nvt_polling_hand_shake_status(void)
+{
+	uint8_t buf[8] = {0};
+	int32_t i = 0;
+	const int32_t retry = 70;
+
+	for (i = 0; i < retry; i++) {
+		//---set xdata index to EVENT BUF ADDR---
+		nvt_set_page(I2C_FW_Address, ts->mmap->EVENT_BUF_ADDR | EVENT_MAP_HANDSHAKING_or_SUB_CMD_BYTE);
+
+		//---read fw status---
+		buf[0] = EVENT_MAP_HANDSHAKING_or_SUB_CMD_BYTE;
+		buf[1] = 0x00;
+		CTP_I2C_READ(ts->client, I2C_FW_Address, buf, 2);
+
+		if ((buf[1] == 0xA0) || (buf[1] == 0xA1))
+			break;
+
+		usleep_range(10000, 10000);
+	}
+
+	if (i >= retry) {
+		NVT_ERR("polling hand shake status failed, buf[1]=0x%02X\n", buf[1]);
+
+		// Read back 5 bytes from offset EVENT_MAP_HOST_CMD for debug check
+		nvt_set_page(I2C_FW_Address, ts->mmap->EVENT_BUF_ADDR | EVENT_MAP_HOST_CMD);
+
+		buf[0] = EVENT_MAP_HOST_CMD;
+		buf[1] = 0x00;
+		buf[2] = 0x00;
+		buf[3] = 0x00;
+		buf[4] = 0x00;
+		buf[5] = 0x00;
+		CTP_I2C_READ(ts->client, I2C_FW_Address, buf, 6);
+		NVT_ERR("Read back 5 bytes from offset EVENT_MAP_HOST_CMD: 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X\n", buf[1], buf[2], buf[3], buf[4], buf[5]);
+
+		return -1;
+	} else {
+		return 0;
+	}
+}
+
+static int8_t nvt_switch_FreqHopEnDis(uint8_t FreqHopEnDis)
+{
+	uint8_t buf[8] = {0};
+	uint8_t retry = 0;
+	int8_t ret = 0;
+
+	NVT_LOG("++\n");
+
+	for (retry = 0; retry < 20; retry++) {
+		//---set xdata index to EVENT BUF ADDR---
+		nvt_set_page(I2C_FW_Address, ts->mmap->EVENT_BUF_ADDR | EVENT_MAP_HOST_CMD);
+
+		//---switch FreqHopEnDis---
+		buf[0] = EVENT_MAP_HOST_CMD;
+		buf[1] = FreqHopEnDis;
+		CTP_I2C_WRITE(ts->client, I2C_FW_Address, buf, 2);
+
+		msleep(35);
+
+		buf[0] = EVENT_MAP_HOST_CMD;
+		buf[1] = 0xFF;
+		CTP_I2C_READ(ts->client, I2C_FW_Address, buf, 2);
+
+		if (buf[1] == 0x00)
+			break;
+	}
+
+	if (unlikely(retry == 20)) {
+		NVT_ERR("switch FreqHopEnDis 0x%02X failed, buf[1]=0x%02X\n", FreqHopEnDis, buf[1]);
+		ret = -1;
+	}
+
+	NVT_LOG("--\n");
+
+	return ret;
+}
+
+static int32_t nvt_read_baseline(int32_t *xdata)
+{
+	uint8_t x_num = 0;
+	uint8_t y_num = 0;
+	uint32_t x = 0;
+	uint32_t y = 0;
+	int32_t iArrayIndex = 0;
+#if TOUCH_KEY_NUM > 0
+	int32_t k = 0;
+#endif /* #if TOUCH_KEY_NUM > 0 */
+
+	NVT_LOG("++\n");
+
+	nvt_read_mdata(ts->mmap->BASELINE_ADDR, ts->mmap->BASELINE_BTN_ADDR);
+
+	nvt_get_mdata(xdata, &x_num, &y_num);
+
+	for (y = 0; y < y_num; y++) {
+		for (x = 0; x < x_num; x++) {
+			iArrayIndex = y * x_num + x;
+			xdata[iArrayIndex] = (int16_t)xdata[iArrayIndex];
+		}
+	}
+#if TOUCH_KEY_NUM > 0
+	for (k = 0; k < Key_Channel; k++) {
+		iArrayIndex = Y_Channel * X_Channel + k;
+		xdata[iArrayIndex] = (int16_t)xdata[iArrayIndex];
+	}
+#endif /* #if TOUCH_KEY_NUM > 0 */
+
+	NVT_LOG("--\n");
+
+	return 0;
+}
+
+static int32_t nvt_read_CC(int32_t *xdata)
+{
+	uint8_t x_num = 0;
+	uint8_t y_num = 0;
+	uint32_t x = 0;
+	uint32_t y = 0;
+	int32_t iArrayIndex = 0;
+#if TOUCH_KEY_NUM > 0
+	int32_t k = 0;
+#endif /* #if TOUCH_KEY_NUM > 0 */
+
+	NVT_LOG("++\n");
+
+	if (nvt_get_fw_pipe() == 0)
+		nvt_read_mdata(ts->mmap->DIFF_PIPE1_ADDR, ts->mmap->DIFF_BTN_PIPE1_ADDR);
+	else
+		nvt_read_mdata(ts->mmap->DIFF_PIPE0_ADDR, ts->mmap->DIFF_BTN_PIPE0_ADDR);
+
+	nvt_get_mdata(xdata, &x_num, &y_num);
+
+	for (y = 0; y < y_num; y++) {
+		for (x = 0; x < x_num; x++) {
+			iArrayIndex = y * x_num + x;
+			xdata[iArrayIndex] = (int16_t)xdata[iArrayIndex];
+		}
+	}
+#if TOUCH_KEY_NUM > 0
+	for (k = 0; k < Key_Channel; k++) {
+		iArrayIndex = Y_Channel * X_Channel + k;
+		xdata[iArrayIndex] = (int16_t)xdata[iArrayIndex];
+	}
+#endif /* #if TOUCH_KEY_NUM > 0 */
+
+	NVT_LOG("--\n");
+
+	return 0;
+}
+
+static void nvt_enable_noise_collect(int32_t frame_num)
+{
+	uint8_t buf[8] = {0};
+
+	//---set xdata index to EVENT BUF ADDR---
+	nvt_set_page(I2C_FW_Address, ts->mmap->EVENT_BUF_ADDR | EVENT_MAP_HOST_CMD);
+
+	//---enable noise collect---
+	buf[0] = EVENT_MAP_HOST_CMD;
+	buf[1] = 0x47;
+	buf[2] = 0xAA;
+	buf[3] = frame_num;
+	buf[4] = 0x00;
+	CTP_I2C_WRITE(ts->client, I2C_FW_Address, buf, 5);
+}
+
+static int32_t nvt_read_fw_noise(int32_t *xdata)
+{
+	uint8_t x_num = 0;
+	uint8_t y_num = 0;
+	uint32_t x = 0;
+	uint32_t y = 0;
+	int32_t iArrayIndex = 0;
+	int32_t frame_num = 0;
+#if TOUCH_KEY_NUM > 0
+	int32_t k = 0;
+#endif /* #if TOUCH_KEY_NUM > 0 */
+
+	NVT_LOG("++\n");
+
+	//---Enter Test Mode---
+	if (nvt_clear_fw_status()) {
+		return -EAGAIN;
+	}
+
+	frame_num = PS_Config_Diff_Test_Frame / 10;
+	if (frame_num <= 0)
+		frame_num = 1;
+	printk("%s: frame_num=%d\n", __func__, frame_num);
+	nvt_enable_noise_collect(frame_num);
+	// need wait PS_Config_Diff_Test_Frame * 8.3ms
+	msleep(frame_num * 83);
+
+	if (nvt_polling_hand_shake_status()) {
+		return -EAGAIN;
+	}
+
+	if (nvt_get_fw_info()) {
+		return -EAGAIN;
+	}
+
+	if (nvt_get_fw_pipe() == 0)
+		nvt_read_mdata(ts->mmap->DIFF_PIPE0_ADDR, ts->mmap->DIFF_BTN_PIPE0_ADDR);
+	else
+		nvt_read_mdata(ts->mmap->DIFF_PIPE1_ADDR, ts->mmap->DIFF_BTN_PIPE1_ADDR);
+
+	nvt_get_mdata(xdata, &x_num, &y_num);
+
+	for (y = 0; y < y_num; y++) {
+		for (x = 0; x < x_num; x++) {
+			iArrayIndex = y * x_num + x;
+			RawData_Diff_Max[iArrayIndex] = (int8_t)((xdata[iArrayIndex] >> 8) & 0xFF);
+			RawData_Diff_Min[iArrayIndex] = (int8_t)(xdata[iArrayIndex] & 0xFF);
+		}
+	}
+#if TOUCH_KEY_NUM > 0
+	for (k = 0; k < Key_Channel; k++) {
+		iArrayIndex = Y_Channel * X_Channel + k;
+		RawData_Diff_Max[iArrayIndex] = (int8_t)((xdata[iArrayIndex] >> 8) & 0xFF);
+		RawData_Diff_Min[iArrayIndex] = (int8_t)(xdata[iArrayIndex] & 0xFF);
+	}
+#endif /* #if TOUCH_KEY_NUM > 0 */
+
+	//---Leave Test Mode---
+	nvt_change_mode(NORMAL_MODE);
+
+	NVT_LOG("--\n");
+
+	return 0;
+}
+
+static void nvt_enable_open_test(void)
+{
+	uint8_t buf[8] = {0};
+
+	//---set xdata index to EVENT BUF ADDR---
+	nvt_set_page(I2C_FW_Address, ts->mmap->EVENT_BUF_ADDR | EVENT_MAP_HOST_CMD);
+
+	//---enable open test---
+	buf[0] = EVENT_MAP_HOST_CMD;
+	buf[1] = 0x45;
+	buf[2] = 0xAA;
+	buf[3] = 0x02;
+	buf[4] = 0x00;
+	CTP_I2C_WRITE(ts->client, I2C_FW_Address, buf, 5);
+}
+
+static void nvt_enable_short_test(void)
+{
+	uint8_t buf[8] = {0};
+
+	//---set xdata index to EVENT BUF ADDR---
+	nvt_set_page(I2C_FW_Address, ts->mmap->EVENT_BUF_ADDR | EVENT_MAP_HOST_CMD);
+
+	//---enable short test---
+	buf[0] = EVENT_MAP_HOST_CMD;
+	buf[1] = 0x43;
+	buf[2] = 0xAA;
+	buf[3] = 0x02;
+	buf[4] = 0x00;
+	CTP_I2C_WRITE(ts->client, I2C_FW_Address, buf, 5);
+}
+
+static int32_t nvt_read_fw_open(int32_t *xdata)
+{
+	uint32_t raw_pipe_addr = 0;
+	uint8_t *rawdata_buf = NULL;
+	uint32_t x = 0;
+	uint32_t y = 0;
+	uint8_t buf[128] = {0};
+#if TOUCH_KEY_NUM > 0
+	uint32_t raw_btn_pipe_addr = 0;
+	int32_t k = 0;
+#endif /* #if TOUCH_KEY_NUM > 0 */
+
+	NVT_LOG("++\n");
+
+	//---Enter Test Mode---
+	if (nvt_clear_fw_status()) {
+		return -EAGAIN;
+	}
+
+	nvt_enable_open_test();
+
+	if (nvt_polling_hand_shake_status()) {
+		return -EAGAIN;
+	}
+
+#if TOUCH_KEY_NUM > 0
+	rawdata_buf = kzalloc((IC_X_CFG_SIZE * IC_Y_CFG_SIZE + IC_KEY_CFG_SIZE) * 2, GFP_KERNEL);
+#else
+	rawdata_buf = kzalloc(IC_X_CFG_SIZE * IC_Y_CFG_SIZE * 2, GFP_KERNEL);
+#endif /* #if TOUCH_KEY_NUM > 0 */
+	if (!rawdata_buf) {
+		NVT_ERR("kzalloc for rawdata_buf failed!\n");
+		return -ENOMEM;
+	}
+
+	if (nvt_get_fw_pipe() == 0)
+		raw_pipe_addr = ts->mmap->RAW_PIPE0_ADDR;
+	else
+		raw_pipe_addr = ts->mmap->RAW_PIPE1_ADDR;
+
+	for (y = 0; y < IC_Y_CFG_SIZE; y++) {
+		//---change xdata index---
+		nvt_set_page(I2C_FW_Address, raw_pipe_addr + y * IC_X_CFG_SIZE * 2);
+		buf[0] = (uint8_t)((raw_pipe_addr + y * IC_X_CFG_SIZE * 2) & 0xFF);
+		CTP_I2C_READ(ts->client, I2C_FW_Address, buf, IC_X_CFG_SIZE * 2 + 1);
+		memcpy(rawdata_buf + y * IC_X_CFG_SIZE * 2, buf + 1, IC_X_CFG_SIZE * 2);
+	}
+#if TOUCH_KEY_NUM > 0
+	if (nvt_get_fw_pipe() == 0)
+		raw_btn_pipe_addr = ts->mmap->RAW_BTN_PIPE0_ADDR;
+	else
+		raw_btn_pipe_addr = ts->mmap->RAW_BTN_PIPE1_ADDR;
+
+	//---change xdata index---
+	nvt_set_page(I2C_FW_Address, raw_btn_pipe_addr);
+	buf[0] = (uint8_t)(raw_btn_pipe_addr & 0xFF);
+	CTP_I2C_READ(ts->client, I2C_FW_Address, buf, IC_KEY_CFG_SIZE * 2 + 1);
+	memcpy(rawdata_buf + IC_Y_CFG_SIZE * IC_X_CFG_SIZE * 2, buf + 1, IC_KEY_CFG_SIZE * 2);
+#endif /* #if TOUCH_KEY_NUM > 0 */
+
+	for (y = 0; y < IC_Y_CFG_SIZE; y++) {
+		for (x = 0; x < IC_X_CFG_SIZE; x++) {
+			if ((AIN_Y[y] != 0xFF) && (AIN_X[x] != 0xFF)) {
+				xdata[AIN_Y[y] * X_Channel + AIN_X[x]] = (int16_t)((rawdata_buf[(y * IC_X_CFG_SIZE + x) * 2] + 256 * rawdata_buf[(y * IC_X_CFG_SIZE + x) * 2 + 1]));
+			}
+		}
+	}
+#if TOUCH_KEY_NUM > 0
+	for (k = 0; k < IC_KEY_CFG_SIZE; k++) {
+		if (AIN_KEY[k] != 0xFF)
+			xdata[Y_Channel * X_Channel + AIN_KEY[k]] = (int16_t)(rawdata_buf[(IC_Y_CFG_SIZE * IC_X_CFG_SIZE + k) * 2] + 256 * rawdata_buf[(IC_Y_CFG_SIZE * IC_X_CFG_SIZE + k) * 2 + 1]);
+	}
+#endif /* #if TOUCH_KEY_NUM > 0 */
+
+	if (rawdata_buf) {
+		kfree(rawdata_buf);
+		rawdata_buf = NULL;
+	}
+
+	//---Leave Test Mode---
+	nvt_change_mode(NORMAL_MODE);
+
+	NVT_LOG("--\n");
+
+	return 0;
+}
+
+static int32_t nvt_read_fw_short(int32_t *xdata)
+{
+	uint32_t raw_pipe_addr = 0;
+	uint8_t *rawdata_buf = NULL;
+	uint32_t x = 0;
+	uint32_t y = 0;
+	uint8_t buf[128] = {0};
+	int32_t iArrayIndex = 0;
+#if TOUCH_KEY_NUM > 0
+	uint32_t raw_btn_pipe_addr = 0;
+	int32_t k = 0;
+#endif /* #if TOUCH_KEY_NUM > 0 */
+
+	NVT_LOG("++\n");
+
+	//---Enter Test Mode---
+	if (nvt_clear_fw_status()) {
+		return -EAGAIN;
+	}
+
+	nvt_enable_short_test();
+
+	if (nvt_polling_hand_shake_status()) {
+		return -EAGAIN;
+	}
+
+#if TOUCH_KEY_NUM > 0
+    rawdata_buf = kzalloc((X_Channel * Y_Channel + Key_Channel) * 2, GFP_KERNEL);
+#else
+    rawdata_buf = kzalloc(X_Channel * Y_Channel * 2, GFP_KERNEL);
+#endif /* #if TOUCH_KEY_NUM > 0 */
+	if (!rawdata_buf) {
+		NVT_ERR("kzalloc for rawdata_buf failed!\n");
+		return -ENOMEM;
+	}
+
+	if (nvt_get_fw_pipe() == 0)
+		raw_pipe_addr = ts->mmap->RAW_PIPE0_ADDR;
+	else
+		raw_pipe_addr = ts->mmap->RAW_PIPE1_ADDR;
+
+	for (y = 0; y < Y_Channel; y++) {
+		//---change xdata index---
+		nvt_set_page(I2C_FW_Address, raw_pipe_addr + y * X_Channel * 2);
+		buf[0] = (uint8_t)((raw_pipe_addr + y * X_Channel * 2) & 0xFF);
+		CTP_I2C_READ(ts->client, I2C_FW_Address, buf, X_Channel * 2 + 1);
+		memcpy(rawdata_buf + y * X_Channel * 2, buf + 1, X_Channel * 2);
+	}
+#if TOUCH_KEY_NUM > 0
+	if (nvt_get_fw_pipe() == 0)
+		raw_btn_pipe_addr = ts->mmap->RAW_BTN_PIPE0_ADDR;
+	else
+		raw_btn_pipe_addr = ts->mmap->RAW_BTN_PIPE1_ADDR;
+
+    //---change xdata index---
+	nvt_set_page(I2C_FW_Address, raw_btn_pipe_addr);
+	buf[0] = (uint8_t)(raw_btn_pipe_addr & 0xFF);
+	CTP_I2C_READ(ts->client, I2C_FW_Address, buf, Key_Channel * 2 + 1);
+	memcpy(rawdata_buf + Y_Channel * X_Channel * 2, buf + 1, Key_Channel * 2);
+#endif /* #if TOUCH_KEY_NUM > 0 */
+
+	for (y = 0; y < Y_Channel; y++) {
+		for (x = 0; x < X_Channel; x++) {
+			iArrayIndex = y * X_Channel + x;
+			xdata[iArrayIndex] = (int16_t)(rawdata_buf[iArrayIndex * 2] + 256 * rawdata_buf[iArrayIndex * 2 + 1]);
+		}
+	}
+#if TOUCH_KEY_NUM > 0
+	for (k = 0; k < Key_Channel; k++) {
+		iArrayIndex = Y_Channel * X_Channel + k;
+		xdata[iArrayIndex] = (int16_t)(rawdata_buf[iArrayIndex * 2] + 256 * rawdata_buf[iArrayIndex * 2 + 1]);
+	}
+#endif /* #if TOUCH_KEY_NUM > 0 */
+
+	if (rawdata_buf) {
+		kfree(rawdata_buf);
+		rawdata_buf = NULL;
+	}
+
+	//---Leave Test Mode---
+	nvt_change_mode(NORMAL_MODE);
+
+	NVT_LOG("--\n");
+
+	return 0;
+}
+
+/*******************************************************
+Description:
+	Novatek touchscreen raw data test for each single point function.
+
+return:
+	Executive outcomes. 0---passed. negative---failed.
+*******************************************************/
+static int32_t RawDataTest_SinglePoint_Sub(int32_t rawdata[], uint8_t RecordResult[], uint8_t x_ch, uint8_t y_ch, int32_t Rawdata_Limit_Postive[], int32_t Rawdata_Limit_Negative[])
+{
+	int32_t i = 0;
+	int32_t j = 0;
+#if TOUCH_KEY_NUM > 0
+    int32_t k = 0;
+#endif /* #if TOUCH_KEY_NUM > 0 */
+	int32_t iArrayIndex = 0;
+	bool isPass = true;
+
+	for (j = 0; j < y_ch; j++) {
+		for (i = 0; i < x_ch; i++) {
+			iArrayIndex = j * x_ch + i;
+
+			RecordResult[iArrayIndex] = 0x00; // default value for PASS
+
+			if(rawdata[iArrayIndex] > Rawdata_Limit_Postive[iArrayIndex])
+				RecordResult[iArrayIndex] |= 0x01;
+
+			if(rawdata[iArrayIndex] < Rawdata_Limit_Negative[iArrayIndex])
+				RecordResult[iArrayIndex] |= 0x02;
+		}
+	}
+#if TOUCH_KEY_NUM > 0
+	for (k = 0; k < Key_Channel; k++) {
+		iArrayIndex = y_ch * x_ch + k;
+
+		RecordResult[iArrayIndex] = 0x00; // default value for PASS
+
+		if(rawdata[iArrayIndex] > Rawdata_Limit_Postive[iArrayIndex])
+			RecordResult[iArrayIndex] |= 0x01;
+
+		if(rawdata[iArrayIndex] < Rawdata_Limit_Negative[iArrayIndex])
+			RecordResult[iArrayIndex] |= 0x02;
+	}
+#endif /* #if TOUCH_KEY_NUM > 0 */
+
+	//---Check RecordResult---
+	for (j = 0; j < y_ch; j++) {
+		for (i = 0; i < x_ch; i++) {
+			if (RecordResult[j * x_ch + i] != 0) {
+				isPass = false;
+				break;
+			}
+		}
+	}
+#if TOUCH_KEY_NUM > 0
+	for (k = 0; k < Key_Channel; k++) {
+		iArrayIndex = y_ch * x_ch + k;
+		if (RecordResult[iArrayIndex] != 0) {
+			isPass = false;
+			break;
+		}
+	}
+#endif /* #if TOUCH_KEY_NUM > 0 */
+
+	if (!isPass) {
+		return -1; // FAIL
+	} else {
+		return 0; // PASS
+	}
+}
+
+/*******************************************************
+Description:
+	Novatek touchscreen print self-test result function.
+
+return:
+	n.a.
+*******************************************************/
+void print_selftest_result(struct seq_file *m, int32_t TestResult, uint8_t RecordResult[], int32_t rawdata[], uint8_t x_len, uint8_t y_len)
+{
+	int32_t i = 0;
+	int32_t j = 0;
+	int32_t iArrayIndex = 0;
+#if TOUCH_KEY_NUM > 0
+	int32_t k = 0;
+#endif /* #if TOUCH_KEY_NUM > 0 */
+
+	switch (TestResult) {
+		case 0:
+			nvt_mp_seq_printf(m, " PASS!\n");
+			break;
+
+		case 1:
+			nvt_mp_seq_printf(m, " ERROR! Read Data FAIL!\n");
+			break;
+
+		case -1:
+			nvt_mp_seq_printf(m, " FAIL!\n");
+			nvt_mp_seq_printf(m, "RecordResult:\n");
+			for (i = 0; i < y_len; i++) {
+				for (j = 0; j < x_len; j++) {
+					iArrayIndex = i * x_len + j;
+					seq_printf(m, "0x%02X, ", RecordResult[iArrayIndex]);
+				}
+				if (!nvt_mp_test_result_printed)
+					nvt_print_result_log_in_one_line(RecordResult + i * x_len, x_len);
+				nvt_mp_seq_printf(m, "\n");
+			}
+#if TOUCH_KEY_NUM > 0
+			for (k = 0; k < Key_Channel; k++) {
+				iArrayIndex = y_len * x_len + k;
+				seq_printf(m, "0x%02X, ", RecordResult[iArrayIndex]);
+			}
+			if (!nvt_mp_test_result_printed)
+				nvt_print_result_log_in_one_line(RecordResult + y_len * x_len, Key_Channel);
+			nvt_mp_seq_printf(m, "\n");
+#endif /* #if TOUCH_KEY_NUM > 0 */
+			nvt_mp_seq_printf(m, "ReadData:\n");
+			for (i = 0; i < y_len; i++) {
+				for (j = 0; j < x_len; j++) {
+					iArrayIndex = i * x_len + j;
+					seq_printf(m, "%5d, ", rawdata[iArrayIndex]);
+				}
+				if (!nvt_mp_test_result_printed)
+					nvt_print_data_log_in_one_line(rawdata + i * x_len, x_len);
+				nvt_mp_seq_printf(m, "\n");
+			}
+#if TOUCH_KEY_NUM > 0
+			for (k = 0; k < Key_Channel; k++) {
+				iArrayIndex = y_len * x_len + k;
+				seq_printf(m, "%5d, ", rawdata[iArrayIndex]);
+			}
+			if (!nvt_mp_test_result_printed)
+				nvt_print_data_log_in_one_line(rawdata + y_len * x_len, Key_Channel);
+			nvt_mp_seq_printf(m, "\n");
+#endif /* #if TOUCH_KEY_NUM > 0 */
+			break;
+	}
+	nvt_mp_seq_printf(m, "\n");
+}
+
+/*******************************************************
+Description:
+	Novatek touchscreen self-test sequence print show
+	function.
+
+return:
+	Executive outcomes. 0---succeed.
+*******************************************************/
+static int32_t c_show_selftest(struct seq_file *m, void *v)
+{
+	NVT_LOG("++\n");
+
+	nvt_mp_seq_printf(m, "FW Version: %d\n\n", fw_ver);
+
+	nvt_mp_seq_printf(m, "Short Test");
+
+	print_selftest_result(m, TestResult_Short, RecordResult_Short, RawData_Short, X_Channel, Y_Channel);
+
+	nvt_mp_seq_printf(m, "Open Test");
+	print_selftest_result(m, TestResult_Open, RecordResult_Open, RawData_Open, X_Channel, Y_Channel);
+
+	nvt_mp_seq_printf(m, "FW Rawdata Test");
+	if ((TestResult_FW_Rawdata == 0) || (TestResult_FW_Rawdata == 1)) {
+		 print_selftest_result(m, TestResult_FWMutual, RecordResult_FWMutual, RawData_FWMutual, X_Channel, Y_Channel);
+	} else { // TestResult_FW_Rawdata is -1
+		nvt_mp_seq_printf(m, " FAIL!\n");
+		if (TestResult_FWMutual == -1) {
+			nvt_mp_seq_printf(m, "FW Mutual");
+			print_selftest_result(m, TestResult_FWMutual, RecordResult_FWMutual, RawData_FWMutual, X_Channel, Y_Channel);
+		}
+		if (TestResult_FW_CC == -1) {
+			nvt_mp_seq_printf(m, "FW CC");
+			print_selftest_result(m, TestResult_FW_CC, RecordResult_FW_CC, RawData_FW_CC, X_Channel, Y_Channel);
+		}
+	}
+
+	nvt_mp_seq_printf(m, "Noise Test");
+	if ((TestResult_Noise == 0) || (TestResult_Noise == 1)) {
+		print_selftest_result(m, TestResult_FW_DiffMax, RecordResult_FW_DiffMax, RawData_Diff_Max, X_Channel, Y_Channel);
+	} else { // TestResult_Noise is -1
+		nvt_mp_seq_printf(m, " FAIL!\n");
+
+		if (TestResult_FW_DiffMax == -1) {
+			nvt_mp_seq_printf(m, "FW Diff Max");
+			print_selftest_result(m, TestResult_FW_DiffMax, RecordResult_FW_DiffMax, RawData_Diff_Max, X_Channel, Y_Channel);
+		}
+		if (TestResult_FW_DiffMin == -1) {
+			nvt_mp_seq_printf(m, "FW Diff Min");
+			print_selftest_result(m, TestResult_FW_DiffMin, RecordResult_FW_DiffMin, RawData_Diff_Min, X_Channel, Y_Channel);
+		}
+	}
+
+	nvt_mp_test_result_printed = 1;
+
+	NVT_LOG("--\n");
+
+    return 0;
+}
+
+/*******************************************************
+Description:
+	Novatek touchscreen self-test sequence print start
+	function.
+
+return:
+	Executive outcomes. 1---call next function.
+	NULL---not call next function and sequence loop
+	stop.
+*******************************************************/
+static void *c_start(struct seq_file *m, loff_t *pos)
+{
+	return *pos < 1 ? (void *)1 : NULL;
+}
+
+/*******************************************************
+Description:
+	Novatek touchscreen self-test sequence print next
+	function.
+
+return:
+	Executive outcomes. NULL---no next and call sequence
+	stop function.
+*******************************************************/
+static void *c_next(struct seq_file *m, void *v, loff_t *pos)
+{
+	++*pos;
+	return NULL;
+}
+
+/*******************************************************
+Description:
+	Novatek touchscreen self-test sequence print stop
+	function.
+
+return:
+	n.a.
+*******************************************************/
+static void c_stop(struct seq_file *m, void *v)
+{
+	return;
+}
+
+const struct seq_operations nvt_selftest_seq_ops = {
+	.start  = c_start,
+	.next   = c_next,
+	.stop   = c_stop,
+	.show   = c_show_selftest
+};
+
+/*******************************************************
+Description:
+	Novatek touchscreen /proc/nvt_selftest open function.
+
+return:
+	Executive outcomes. 0---succeed. negative---failed.
+*******************************************************/
+static int32_t nvt_selftest_open(struct inode *inode, struct file *file)
+{
+	struct device_node *np = ts->client->dev.of_node;
+	unsigned char mpcriteria[32] = {0};	//novatek-mp-criteria-default
+
+	TestResult_Short = 0;
+	TestResult_Open = 0;
+	TestResult_FW_Rawdata = 0;
+	TestResult_FWMutual = 0;
+	TestResult_FW_CC = 0;
+	TestResult_Noise = 0;
+	TestResult_FW_DiffMax = 0;
+	TestResult_FW_DiffMin = 0;
+
+	NVT_LOG("++\n");
+
+	if (mutex_lock_interruptible(&ts->lock)) {
+		return -ERESTARTSYS;
+	}
+
+#if NVT_TOUCH_ESD_PROTECT
+	nvt_esd_check_enable(false);
+#endif /* #if NVT_TOUCH_ESD_PROTECT */
+
+	if (nvt_get_fw_info()) {
+		mutex_unlock(&ts->lock);
+		NVT_ERR("get fw info failed!\n");
+		return -EAGAIN;
+	}
+
+	fw_ver = ts->fw_ver;
+
+	/* Parsing criteria from dts */
+	if(of_property_read_bool(np, "novatek,mp-support-dt")) {
+		/*
+		 * Parsing Criteria by Novatek PID
+		 * The string rule is "novatek-mp-criteria-<nvt_pid>"
+		 * nvt_pid is 2 bytes (show hex).
+		 *
+		 * Ex. nvt_pid = 500A
+		 *     mpcriteria = "novatek-mp-criteria-500A"
+		 */
+		snprintf(mpcriteria, PAGE_SIZE, "novatek-mp-criteria-%04X", ts->nvt_pid);
+
+		if (nvt_mp_parse_dt(np, mpcriteria)) {
+			mutex_unlock(&ts->lock);
+			NVT_ERR("mp parse device tree failed!\n");
+			return -EINVAL;
+		}
+	} else {
+		NVT_LOG("Not found novatek,mp-support-dt, use default setting\n");
+		//---Print Test Criteria---
+		nvt_print_criteria();
+	}
+
+	if (nvt_switch_FreqHopEnDis(FREQ_HOP_DISABLE)) {
+		mutex_unlock(&ts->lock);
+		NVT_ERR("switch frequency hopping disable failed!\n");
+		return -EAGAIN;
+	}
+
+	if (nvt_check_fw_reset_state(RESET_STATE_NORMAL_RUN)) {
+		mutex_unlock(&ts->lock);
+		NVT_ERR("check fw reset state failed!\n");
+		return -EAGAIN;
+	}
+
+	msleep(100);
+
+	//---Enter Test Mode---
+	if (nvt_clear_fw_status()) {
+		mutex_unlock(&ts->lock);
+		NVT_ERR("clear fw status failed!\n");
+		return -EAGAIN;
+	}
+
+	nvt_change_mode(MP_MODE_CC);
+
+	if (nvt_check_fw_status()) {
+		mutex_unlock(&ts->lock);
+		NVT_ERR("check fw status failed!\n");
+		return -EAGAIN;
+	}
+
+	//---FW Rawdata Test---
+	if (nvt_read_baseline(RawData_FWMutual) != 0) {
+		TestResult_FWMutual = 1;
+	} else {
+		TestResult_FWMutual = RawDataTest_SinglePoint_Sub(RawData_FWMutual, RecordResult_FWMutual, X_Channel, Y_Channel,
+						PS_Config_Lmt_FW_Rawdata_P, PS_Config_Lmt_FW_Rawdata_N);
+	}
+	if (nvt_read_CC(RawData_FW_CC) != 0) {
+		TestResult_FW_CC = 1;
+	} else {
+		TestResult_FW_CC = RawDataTest_SinglePoint_Sub(RawData_FW_CC, RecordResult_FW_CC, X_Channel, Y_Channel,
+						PS_Config_Lmt_FW_CC_P, PS_Config_Lmt_FW_CC_N);
+	}
+
+	if ((TestResult_FWMutual == 1) || (TestResult_FW_CC == 1)) {
+		TestResult_FW_Rawdata = 1;
+	} else {
+		if ((TestResult_FWMutual == -1) || (TestResult_FW_CC == -1))
+			TestResult_FW_Rawdata = -1;
+		else
+			TestResult_FW_Rawdata = 0;
+	}
+
+	//---Leave Test Mode---
+	nvt_change_mode(NORMAL_MODE);
+
+	//---Noise Test---
+	if (nvt_read_fw_noise(RawData_Diff) != 0) {
+		TestResult_Noise = 1;	// 1: ERROR
+		TestResult_FW_DiffMax = 1;
+		TestResult_FW_DiffMin = 1;
+	} else {
+		TestResult_FW_DiffMax = RawDataTest_SinglePoint_Sub(RawData_Diff_Max, RecordResult_FW_DiffMax, X_Channel, Y_Channel,
+						PS_Config_Lmt_FW_Diff_P, PS_Config_Lmt_FW_Diff_N);
+
+		TestResult_FW_DiffMin = RawDataTest_SinglePoint_Sub(RawData_Diff_Min, RecordResult_FW_DiffMin, X_Channel, Y_Channel,
+						PS_Config_Lmt_FW_Diff_P, PS_Config_Lmt_FW_Diff_N);
+
+		if ((TestResult_FW_DiffMax == -1) || (TestResult_FW_DiffMin == -1))
+			TestResult_Noise = -1;
+		else
+			TestResult_Noise = 0;
+	}
+
+	//--Short Test---
+	if (nvt_read_fw_short(RawData_Short) != 0) {
+		TestResult_Short = 1; // 1:ERROR
+	} else {
+		//---Self Test Check --- // 0:PASS, -1:FAIL
+		TestResult_Short = RawDataTest_SinglePoint_Sub(RawData_Short, RecordResult_Short, X_Channel, Y_Channel,
+						PS_Config_Lmt_Short_Rawdata_P, PS_Config_Lmt_Short_Rawdata_N);
+	}
+
+	//---Open Test---
+	if (nvt_read_fw_open(RawData_Open) != 0) {
+		TestResult_Open = 1;    // 1:ERROR
+	} else {
+		//---Self Test Check --- // 0:PASS, -1:FAIL
+		TestResult_Open = RawDataTest_SinglePoint_Sub(RawData_Open, RecordResult_Open, X_Channel, Y_Channel,
+						PS_Config_Lmt_Open_Rawdata_P, PS_Config_Lmt_Open_Rawdata_N);
+	}
+
+	//---Reset IC---
+	nvt_bootloader_reset();
+
+	mutex_unlock(&ts->lock);
+
+	NVT_LOG("--\n");
+
+	nvt_mp_test_result_printed = 0;
+
+	return seq_open(file, &nvt_selftest_seq_ops);
+}
+
+static const struct file_operations nvt_selftest_fops = {
+	.owner = THIS_MODULE,
+	.open = nvt_selftest_open,
+	.read = seq_read,
+	.llseek = seq_lseek,
+	.release = seq_release,
+};
+
+#ifdef CONFIG_OF
+/*******************************************************
+Description:
+	Novatek touchscreen parse AIN setting for array type.
+
+return:
+	n.a.
+*******************************************************/
+int32_t nvt_mp_parse_ain(struct device_node *np, const char *name, uint8_t *array, int32_t size)
+{
+	struct property *data;
+	int32_t len, ret;
+	int32_t tmp[40];
+	int32_t i;
+
+	data = of_find_property(np, name, &len);
+	len /= sizeof(u32);
+	if ((!data) || (!len) || (len != size)) {
+		NVT_ERR("error find %s. len=%d\n", name, len);
+		return -1;
+	} else {
+		NVT_LOG("%s. len=%d\n", name, len);
+		ret = of_property_read_u32_array(np, name, tmp, len);
+		if (ret) {
+			NVT_ERR("error reading %s. ret=%d\n", name, ret);
+			return -1;
+		}
+
+		for (i = 0; i < len; i++)
+			array[i] = tmp[i];
+
+#if NVT_DEBUG
+		printk("[NVT-ts] %s = ", name);
+		nvt_print_result_log_in_one_line(array, len);
+		printk("\n");
+#endif
+	}
+
+	return 0;
+}
+
+/*******************************************************
+Description:
+	Novatek touchscreen parse criterion for u32 type.
+
+return:
+	n.a.
+*******************************************************/
+int32_t nvt_mp_parse_u32(struct device_node *np, const char *name, int32_t *para)
+{
+	int32_t ret;
+
+	ret = of_property_read_u32(np, name, para);
+	if (ret) {
+		NVT_ERR("error reading %s. ret=%d\n", name, ret);
+		return -1;
+	} else {
+#if NVT_DEBUG
+		NVT_LOG("%s=%d\n", name, *para);
+#endif
+	}
+
+	return 0;
+}
+
+/*******************************************************
+Description:
+	Novatek touchscreen parse criterion for array type.
+
+return:
+	n.a.
+*******************************************************/
+int32_t nvt_mp_parse_array(struct device_node *np, const char *name, int32_t *array,
+		int32_t size)
+{
+	struct property *data;
+	int32_t len, ret;
+#if NVT_DEBUG
+	int32_t j = 0;
+#endif
+
+	data = of_find_property(np, name, &len);
+	len /= sizeof(u32);
+	if ((!data) || (!len) || (len < size)) {
+		NVT_ERR("error find %s. len=%d\n", name, len);
+		return -1;
+	} else {
+		NVT_LOG("%s. len=%d\n", name, len);
+		ret = of_property_read_u32_array(np, name, array, len);
+		if (ret) {
+			NVT_ERR("error reading %s. ret=%d\n", name, ret);
+			return -1;
+		}
+
+#if NVT_DEBUG
+		NVT_LOG("%s =\n", name);
+		for (j = 0; j < Y_Channel; j++) {
+			nvt_print_data_log_in_one_line(array + j * X_Channel, X_Channel);
+			printk("\n");
+		}
+#if TOUCH_KEY_NUM > 0
+		nvt_print_data_log_in_one_line(array + Y_Channel * X_Channel, Key_Channel);
+		printk("\n");
+#endif
+#endif
+	}
+
+	return 0;
+}
+
+/*******************************************************
+Description:
+	Novatek touchscreen parse device tree mp function.
+
+return:
+	n.a.
+*******************************************************/
+int32_t nvt_mp_parse_dt(struct device_node *root, const char *node_compatible)
+{
+	struct device_node *np = root;
+	struct device_node *child = NULL;
+
+	NVT_LOG("Parse mp criteria for node %s\n", node_compatible);
+
+	/* find each MP sub-nodes */
+	for_each_child_of_node(root, child) {
+		/* find the specified node */
+		if (of_device_is_compatible(child, node_compatible)) {
+			NVT_LOG("found child node %s\n", node_compatible);
+			np = child;
+			break;
+		}
+	}
+	if (child == NULL) {
+		NVT_ERR("Not found compatible node %s!\n", node_compatible);
+		return -1;
+	}
+
+	/* MP Config*/
+	if (nvt_mp_parse_u32(np, "IC_X_CFG_SIZE", &IC_X_CFG_SIZE))
+		return -1;
+
+	if (nvt_mp_parse_u32(np, "IC_Y_CFG_SIZE", &IC_Y_CFG_SIZE))
+		return -1;
+
+#if TOUCH_KEY_NUM > 0
+	if (nvt_mp_parse_u32(np, "IC_KEY_CFG_SIZE", &IC_KEY_CFG_SIZE))
+		return -1;
+#endif
+
+	if (nvt_mp_parse_u32(np, "X_Channel", &X_Channel))
+		return -1;
+
+	if (nvt_mp_parse_u32(np, "Y_Channel", &Y_Channel))
+		return -1;
+
+	if (nvt_mp_parse_ain(np, "AIN_X", AIN_X, IC_X_CFG_SIZE))
+		return -1;
+
+	if (nvt_mp_parse_ain(np, "AIN_Y", AIN_Y, IC_Y_CFG_SIZE))
+		return -1;
+
+#if TOUCH_KEY_NUM > 0
+	if (nvt_mp_parse_ain(np, "AIN_KEY", AIN_KEY, IC_KEY_CFG_SIZE))
+		return -1;
+#endif
+
+	/* MP Criteria */
+	if (nvt_mp_parse_array(np, "PS_Config_Lmt_Short_Rawdata_P", PS_Config_Lmt_Short_Rawdata_P,
+			X_Channel * Y_Channel + Key_Channel))
+		return -1;
+
+	if (nvt_mp_parse_array(np, "PS_Config_Lmt_Short_Rawdata_N", PS_Config_Lmt_Short_Rawdata_N,
+			X_Channel * Y_Channel + Key_Channel))
+		return -1;
+
+	if (nvt_mp_parse_array(np, "PS_Config_Lmt_Open_Rawdata_P", PS_Config_Lmt_Open_Rawdata_P,
+			X_Channel * Y_Channel + Key_Channel))
+		return -1;
+
+	if (nvt_mp_parse_array(np, "PS_Config_Lmt_Open_Rawdata_N", PS_Config_Lmt_Open_Rawdata_N,
+			X_Channel * Y_Channel + Key_Channel))
+		return -1;
+
+	if (nvt_mp_parse_array(np, "PS_Config_Lmt_FW_Rawdata_P", PS_Config_Lmt_FW_Rawdata_P,
+			X_Channel * Y_Channel + Key_Channel))
+		return -1;
+
+	if (nvt_mp_parse_array(np, "PS_Config_Lmt_FW_Rawdata_N", PS_Config_Lmt_FW_Rawdata_N,
+			X_Channel * Y_Channel + Key_Channel))
+		return -1;
+
+	if (nvt_mp_parse_array(np, "PS_Config_Lmt_FW_CC_P", PS_Config_Lmt_FW_CC_P,
+			X_Channel * Y_Channel + Key_Channel))
+		return -1;
+
+	if (nvt_mp_parse_array(np, "PS_Config_Lmt_FW_CC_N", PS_Config_Lmt_FW_CC_N,
+			X_Channel * Y_Channel + Key_Channel))
+		return -1;
+
+	if (nvt_mp_parse_array(np, "PS_Config_Lmt_FW_Diff_P", PS_Config_Lmt_FW_Diff_P,
+			X_Channel * Y_Channel + Key_Channel))
+		return -1;
+
+	if (nvt_mp_parse_array(np, "PS_Config_Lmt_FW_Diff_N", PS_Config_Lmt_FW_Diff_N,
+			X_Channel * Y_Channel + Key_Channel))
+		return -1;
+
+	if (nvt_mp_parse_u32(np, "PS_Config_Diff_Test_Frame", &PS_Config_Diff_Test_Frame))
+		return -1;
+
+	NVT_LOG("Parse mp criteria done!\n");
+
+	return 0;
+}
+#endif /* #ifdef CONFIG_OF */
+
+/*******************************************************
+Description:
+	Novatek touchscreen MP function proc. file node
+	initial function.
+
+return:
+	Executive outcomes. 0---succeed. -1---failed.
+*******************************************************/
+int32_t nvt_mp_proc_init(void)
+{
+	NVT_proc_selftest_entry = proc_create("nvt_selftest", 0444, NULL, &nvt_selftest_fops);
+	if (NVT_proc_selftest_entry == NULL) {
+		NVT_ERR("create /proc/nvt_selftest Failed!\n");
+		return -1;
+	} else {
+		if(nvt_mp_buffer_init()) {
+			NVT_ERR("Allocate mp memory failed\n");
+			return -1;
+		}
+		else {
+			NVT_LOG("create /proc/nvt_selftest Succeeded!\n");
+		}
+		return 0;
+	}
+}
+
+/*******************************************************
+Description:
+	Novatek touchscreen MP function proc. file node
+	deinitial function.
+
+return:
+	n.a.
+*******************************************************/
+void nvt_mp_proc_deinit(void)
+{
+	nvt_mp_buffer_deinit();
+
+	if (NVT_proc_selftest_entry != NULL) {
+		remove_proc_entry("nvt_selftest", NULL);
+		NVT_proc_selftest_entry = NULL;
+		NVT_LOG("Removed /proc/%s\n", "nvt_selftest");
+	}
+}
+#endif /* #if NVT_TOUCH_MP */
diff --git a/drivers/input/touchscreen/nt36xxx/nt36xxx_mp_ctrlram.h b/drivers/input/touchscreen/nt36xxx/nt36xxx_mp_ctrlram.h
new file mode 100644
index 0000000..69c27ca
--- /dev/null
+++ b/drivers/input/touchscreen/nt36xxx/nt36xxx_mp_ctrlram.h
@@ -0,0 +1,460 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (C) 2010 - 2018 Novatek, Inc.
+ *
+ * $Revision: 46179 $
+ * $Date: 2019-06-14 13:47:17 +0800 (Fri, 14 Jun 2019) $
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ */
+
+#if NVT_TOUCH_MP
+
+static uint32_t IC_X_CFG_SIZE = 18;
+static uint32_t IC_Y_CFG_SIZE = 36;
+static uint32_t IC_KEY_CFG_SIZE = 4;
+static uint32_t X_Channel = 18;
+static uint32_t Y_Channel = 36;
+static uint32_t Key_Channel = TOUCH_KEY_NUM;
+static uint8_t AIN_X[40] =
+	{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17};
+static uint8_t AIN_Y[40] =
+	{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
+	18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35};
+
+#if TOUCH_KEY_NUM > 0
+static uint8_t AIN_KEY[8] = {0, 1, 2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
+#endif /* #if TOUCH_KEY_NUM > 0 */
+
+static int32_t PS_Config_Lmt_Short_Rawdata_P[40 * 40] = {
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+	14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,
+#if TOUCH_KEY_NUM > 0
+	14008,14008,14008,
+#endif /* #if TOUCH_KEY_NUM > 0 */
+};
+
+static int32_t PS_Config_Lmt_Short_Rawdata_N[40 * 40] = {
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+	10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,
+#if TOUCH_KEY_NUM > 0
+	10000,10000,10000,
+#endif /* #if TOUCH_KEY_NUM > 0 */
+};
+
+static int32_t PS_Config_Lmt_Open_Rawdata_P[40 * 40] = {
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+	5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,5120,
+#if TOUCH_KEY_NUM > 0
+	5120,5120,5120,
+#endif /* #if TOUCH_KEY_NUM > 0 */
+};
+
+static int32_t PS_Config_Lmt_Open_Rawdata_N[40 * 40] = {
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+	50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+#if TOUCH_KEY_NUM > 0
+	50,50,50,
+#endif /* #if TOUCH_KEY_NUM > 0 */
+};
+
+static int32_t PS_Config_Lmt_FW_Rawdata_P[40 * 40] = {
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+	2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,2560,
+#if TOUCH_KEY_NUM > 0
+	2560,2560,2560,
+#endif /* #if TOUCH_KEY_NUM > 0 */
+};
+
+static int32_t PS_Config_Lmt_FW_Rawdata_N[40 * 40] = {
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+	240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+#if TOUCH_KEY_NUM > 0
+	240,240,240,
+#endif /* #if TOUCH_KEY_NUM > 0 */
+};
+
+static int32_t PS_Config_Lmt_FW_CC_P[40 * 40] = {
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+	314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+#if TOUCH_KEY_NUM > 0
+	314,314,314,
+#endif /* #if TOUCH_KEY_NUM > 0 */
+};
+
+static int32_t PS_Config_Lmt_FW_CC_N[40 * 40] = {
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+#if TOUCH_KEY_NUM > 0
+	0,0,0,
+#endif /* #if TOUCH_KEY_NUM > 0 */
+};
+
+static int32_t PS_Config_Lmt_FW_Diff_P[40 * 40] = {
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+	75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+#if TOUCH_KEY_NUM > 0
+	75,75,75,
+#endif /* #if TOUCH_KEY_NUM > 0 */
+};
+
+static int32_t PS_Config_Lmt_FW_Diff_N[40 *40] = {
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+	-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,-75,
+#if TOUCH_KEY_NUM > 0
+	-75,-75,-75,
+#endif /* #if TOUCH_KEY_NUM > 0 */
+};
+
+static int32_t PS_Config_Diff_Test_Frame = 50;
+
+#endif /* #if NVT_TOUCH_MP */
diff --git a/drivers/input/touchscreen/synaptics_dsx/synaptics_dsx_core.c b/drivers/input/touchscreen/synaptics_dsx/synaptics_dsx_core.c
index 2206dc0..70cfa21 100644
--- a/drivers/input/touchscreen/synaptics_dsx/synaptics_dsx_core.c
+++ b/drivers/input/touchscreen/synaptics_dsx/synaptics_dsx_core.c
@@ -3,7 +3,7 @@
  *
  * Copyright (C) 2012-2016 Synaptics Incorporated. All rights reserved.
  *
- * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2018-2020 The Linux Foundation. All rights reserved.
  * Copyright (C) 2012 Alexandra Chin <alexandra.chin@tw.synaptics.com>
  * Copyright (C) 2012 Scott Lin <scott.lin@tw.synaptics.com>
  *
@@ -3637,7 +3637,7 @@
 	unsigned char buf[16];
 
 	if (config) {
-		snprintf(buf, PAGE_SIZE, "dsx_gpio_%u\n", gpio);
+		snprintf(buf, sizeof(buf), "dsx_gpio_%u\n", gpio);
 
 		retval = gpio_request(gpio, buf);
 		if (retval) {
diff --git a/drivers/input/touchscreen/synaptics_tcm/synaptics_tcm_core.c b/drivers/input/touchscreen/synaptics_tcm/synaptics_tcm_core.c
index 76efa40..23965b4 100644
--- a/drivers/input/touchscreen/synaptics_tcm/synaptics_tcm_core.c
+++ b/drivers/input/touchscreen/synaptics_tcm/synaptics_tcm_core.c
@@ -50,6 +50,16 @@
 
 /* #define FORCE_RUN_APPLICATION_FIRMWARE */
 
+#define SYNA_VTG_MIN_UV	2800000
+
+#define SYNA_VTG_MAX_UV	3300000
+
+#define SYNA_LOAD_MAX_UA 30000
+
+#define SYNA_VDD_VTG_MIN_UV 1800000
+
+#define SYNA_VDD_VTG_MAX_UV 2000000
+
 #define NOTIFIER_PRIORITY 2
 
 #define RESPONSE_TIMEOUT_MS 3000
@@ -1911,6 +1921,22 @@
 	}
 
 	if (tcm_hcd->bus_reg) {
+		retval = regulator_set_voltage(tcm_hcd->bus_reg,
+				SYNA_VDD_VTG_MIN_UV, SYNA_VDD_VTG_MAX_UV);
+		if (retval) {
+			LOGE(tcm_hcd->pdev->dev.parent,
+				"set bus regulator voltage failed\n");
+			goto exit;
+		}
+
+		retval = regulator_set_load(tcm_hcd->bus_reg,
+						SYNA_LOAD_MAX_UA);
+		if (retval) {
+			LOGE(tcm_hcd->pdev->dev.parent,
+				"set bus regulator load failed\n");
+			goto exit;
+		}
+
 		retval = regulator_enable(tcm_hcd->bus_reg);
 		if (retval < 0) {
 			LOGE(tcm_hcd->pdev->dev.parent,
@@ -1920,6 +1946,23 @@
 	}
 
 	if (tcm_hcd->pwr_reg) {
+		if (regulator_count_voltages(tcm_hcd->pwr_reg) > 0) {
+			retval = regulator_set_voltage(tcm_hcd->pwr_reg,
+				SYNA_VTG_MIN_UV, SYNA_VTG_MAX_UV);
+			if (retval) {
+				LOGE(tcm_hcd->pdev->dev.parent,
+					"set power regulator voltage failed\n");
+				goto disable_bus_reg;
+			}
+			retval = regulator_set_load(tcm_hcd->pwr_reg,
+							SYNA_LOAD_MAX_UA);
+			if (retval) {
+				LOGE(tcm_hcd->pdev->dev.parent,
+					"set power regulator load failed\n");
+				goto disable_bus_reg;
+			}
+		}
+
 		retval = regulator_enable(tcm_hcd->pwr_reg);
 		if (retval < 0) {
 			LOGE(tcm_hcd->pdev->dev.parent,
@@ -1932,12 +1975,22 @@
 	return 0;
 
 disable_pwr_reg:
-	if (tcm_hcd->pwr_reg)
+	if (tcm_hcd->pwr_reg) {
+		if (regulator_count_voltages(tcm_hcd->pwr_reg) > 0) {
+			regulator_set_load(tcm_hcd->pwr_reg, 0);
+			regulator_set_voltage(tcm_hcd->pwr_reg, 0,
+							SYNA_VTG_MAX_UV);
+		}
 		regulator_disable(tcm_hcd->pwr_reg);
+	}
 
 disable_bus_reg:
-	if (tcm_hcd->bus_reg)
+	if (tcm_hcd->bus_reg) {
+		regulator_set_load(tcm_hcd->bus_reg, 0);
+		regulator_set_voltage(tcm_hcd->bus_reg, 0,
+						SYNA_VDD_VTG_MAX_UV);
 		regulator_disable(tcm_hcd->bus_reg);
+	}
 
 exit:
 	return retval;
@@ -2850,6 +2903,12 @@
 		}
 	}
 
+	retval = syna_tcm_enable_regulator(tcm_hcd, true);
+	if (retval < 0) {
+		LOGE(tcm_hcd->pdev->dev.parent,
+				"Failed to enable regulators\n");
+	}
+
 	retval = pinctrl_select_state(
 			tcm_hcd->ts_pinctrl,
 			tcm_hcd->pinctrl_state_active);
@@ -2944,6 +3003,7 @@
 {
 	struct syna_tcm_module_handler *mod_handler;
 	struct syna_tcm_hcd *tcm_hcd = dev_get_drvdata(dev);
+	int retval;
 
 	if (tcm_hcd->in_suspend || !tcm_hcd->init_okay)
 		return 0;
@@ -2966,11 +3026,17 @@
 		}
 	}
 
+	retval = syna_tcm_enable_regulator(tcm_hcd, false);
+	if (retval < 0) {
+		LOGE(tcm_hcd->pdev->dev.parent,
+				"Failed to disable regulators\n");
+	}
+
 	mutex_unlock(&mod_pool.mutex);
 
 	tcm_hcd->in_suspend = true;
 
-	return 0;
+	return retval;
 }
 #endif
 
diff --git a/drivers/iommu/Kconfig b/drivers/iommu/Kconfig
index 91c2fe6..c44bbf3 100644
--- a/drivers/iommu/Kconfig
+++ b/drivers/iommu/Kconfig
@@ -495,6 +495,7 @@
 
 menuconfig IOMMU_DEBUG
 	bool "IOMMU Profiling and Debugging"
+	depends on DEBUG_FS
 	select IOMMU_DEBUGFS
 	help
 	  This option is used to enable profiling and debugging in
diff --git a/drivers/iommu/arm-smmu-regs.h b/drivers/iommu/arm-smmu-regs.h
index 3921487..be5f90e 100644
--- a/drivers/iommu/arm-smmu-regs.h
+++ b/drivers/iommu/arm-smmu-regs.h
@@ -258,6 +258,9 @@
 					 FSR_EF | FSR_PF | FSR_TF | FSR_IGN)
 
 #define FSYNR0_WNR			(1 << 4)
+#define FSYNR0_PNU			(1 << 5)
+#define FSYNR0_IND			(1 << 6)
+#define FSYNR0_NSATTR			(1 << 8)
 
 #define IMPL_DEF1_MICRO_MMU_CTRL	0
 #define MICRO_MMU_CTRL_LOCAL_HALT_REQ	(1 << 2)
diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c
index 52e2686..14946a4 100644
--- a/drivers/iommu/arm-smmu-v3.c
+++ b/drivers/iommu/arm-smmu-v3.c
@@ -29,6 +29,7 @@
 #include <linux/dma-iommu.h>
 #include <linux/err.h>
 #include <linux/interrupt.h>
+#include <linux/io-pgtable.h>
 #include <linux/iommu.h>
 #include <linux/iopoll.h>
 #include <linux/module.h>
@@ -42,8 +43,6 @@
 
 #include <linux/amba/bus.h>
 
-#include "io-pgtable.h"
-
 /* MMIO registers */
 #define ARM_SMMU_IDR0			0x0
 #define IDR0_ST_LVL			GENMASK(28, 27)
diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c
index d80c98f..1e30fc6 100644
--- a/drivers/iommu/arm-smmu.c
+++ b/drivers/iommu/arm-smmu.c
@@ -41,6 +41,7 @@
 #include <linux/io.h>
 #include <linux/io-64-nonatomic-hi-lo.h>
 #include <linux/iommu.h>
+#include <linux/io-pgtable.h>
 #include <linux/iopoll.h>
 #include <linux/module.h>
 #include <linux/of.h>
@@ -64,7 +65,6 @@
 #include <soc/qcom/msm_tz_smmu.h>
 #include <soc/qcom/scm.h>
 #include <asm/dma-iommu.h>
-#include "io-pgtable.h"
 #include "arm-smmu-regs.h"
 #include "arm-smmu-debug.h"
 #include "iommu-logger.h"
@@ -457,7 +457,7 @@
 static phys_addr_t arm_smmu_iova_to_phys(struct iommu_domain *domain,
 					dma_addr_t iova);
 static phys_addr_t arm_smmu_iova_to_phys_hard(struct iommu_domain *domain,
-					      dma_addr_t iova);
+				    dma_addr_t iova, unsigned long trans_flags);
 static void arm_smmu_destroy_domain_context(struct iommu_domain *domain);
 
 static int arm_smmu_prepare_pgtable(void *addr, void *cookie);
@@ -708,7 +708,7 @@
 	int (*init)(struct arm_smmu_device *smmu);
 	void (*device_reset)(struct arm_smmu_device *smmu);
 	phys_addr_t (*iova_to_phys_hard)(struct iommu_domain *domain,
-					 dma_addr_t iova);
+			dma_addr_t iova, unsigned long trans_flags);
 	void (*init_context_bank)(struct arm_smmu_domain *smmu_domain,
 					struct device *dev);
 	int (*device_group)(struct device *dev, struct iommu_group *group);
@@ -1195,7 +1195,18 @@
 	}
 }
 
-static void __arm_smmu_tlb_sync_timeout(struct arm_smmu_device *smmu)
+static void __arm_smmu_tlb_sync_timeout_SMMUV2(struct arm_smmu_device *smmu)
+{
+
+	static DEFINE_RATELIMIT_STATE(_rs,
+				      DEFAULT_RATELIMIT_INTERVAL,
+				      DEFAULT_RATELIMIT_BURST);
+	if (__ratelimit(&_rs))
+		dev_err(smmu->dev,
+			"TLB sync timed out -- SMMUV2 may be deadlocked\n");
+}
+
+static void __arm_smmu_tlb_sync_timeout_SMMUV500(struct arm_smmu_device *smmu)
 {
 	u32 sync_inv_ack, tbu_pwr_status, sync_inv_progress;
 	u32 tbu_inv_pending = 0, tbu_sync_pending = 0;
@@ -1241,7 +1252,7 @@
 		unsigned long tbu_id, tbus_t = tbu_ids;
 
 		dev_err(smmu->dev,
-			"TLB sync timed out -- SMMU may be deadlocked\n"
+			"TLB sync timed out -- SMMUV500 may be deadlocked\n"
 			"TBU ACK 0x%x TBU PWR 0x%x TCU sync_inv 0x%x\n",
 			sync_inv_ack, tbu_pwr_status, sync_inv_progress);
 		dev_err(smmu->dev,
@@ -1274,8 +1285,6 @@
 		/*dump TCU testbus*/
 		arm_smmu_testbus_dump(smmu, U16_MAX);
 	}
-
-	BUG_ON(IS_ENABLED(CONFIG_IOMMU_TLBSYNC_DEBUG));
 }
 
 /* Wait for any pending TLB invalidations to complete */
@@ -1295,7 +1304,12 @@
 			inc *= 2;
 	}
 	trace_tlbsync_timeout(smmu->dev, 0);
-	__arm_smmu_tlb_sync_timeout(smmu);
+	if (smmu->model == QCOM_SMMUV500)
+		__arm_smmu_tlb_sync_timeout_SMMUV500(smmu);
+	else if (smmu->model == QCOM_SMMUV2)
+		__arm_smmu_tlb_sync_timeout_SMMUV2(smmu);
+
+	BUG_ON(IS_ENABLED(CONFIG_IOMMU_TLBSYNC_DEBUG));
 	return -EINVAL;
 }
 
@@ -1599,18 +1613,18 @@
 	dev_err(smmu->dev,
 		"FSR    = 0x%08x [%s%s%s%s%s%s%s%s%s%s]\n",
 		fsr,
-		(fsr & 0x02) ?  (fsynr0 & 0x10 ?
+		(fsr & FSR_TF) ?  (fsynr0 & FSYNR0_WNR ?
 				 "TF W " : "TF R ") : "",
-		(fsr & 0x04) ? "AFF " : "",
-		(fsr & 0x08) ? (fsynr0 & 0x10 ?
+		(fsr & FSR_AFF) ? "AFF " : "",
+		(fsr & FSR_PF) ? (fsynr0 & FSYNR0_WNR ?
 				"PF W " : "PF R ") : "",
-		(fsr & 0x10) ? "EF " : "",
-		(fsr & 0x20) ? "TLBMCF " : "",
-		(fsr & 0x40) ? "TLBLKF " : "",
-		(fsr & 0x80) ? "MHF " : "",
-		(fsr & 0x100) ? "UUT " : "",
-		(fsr & 0x40000000) ? "SS " : "",
-		(fsr & 0x80000000) ? "MULTI " : "");
+		(fsr & FSR_EF) ? "EF " : "",
+		(fsr & FSR_TLBMCF) ? "TLBMCF " : "",
+		(fsr & FSR_TLBLKF) ? "TLBLKF " : "",
+		(fsr & FSR_ASF) ? "ASF " : "",
+		(fsr & FSR_UUT) ? "UUT " : "",
+		(fsr & FSR_SS) ? "SS " : "",
+		(fsr & FSR_MULTI) ? "MULTI " : "");
 
 	if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH32_S) {
 		dev_err(smmu->dev, "TTBR0  = 0x%pK\n",
@@ -1641,24 +1655,56 @@
 }
 
 static phys_addr_t arm_smmu_verify_fault(struct iommu_domain *domain,
-					 dma_addr_t iova, u32 fsr)
+					 dma_addr_t iova, u32 fsr, u32 fsynr0)
 {
 	struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
 	struct arm_smmu_device *smmu = smmu_domain->smmu;
-	phys_addr_t phys;
-	phys_addr_t phys_post_tlbiall;
+	phys_addr_t phys_hard_priv = 0;
+	phys_addr_t phys_stimu, phys_stimu_post_tlbiall;
+	unsigned long flags = 0;
 
-	phys = arm_smmu_iova_to_phys_hard(domain, iova);
+	/* Get the transaction type */
+	if (fsynr0 & FSYNR0_WNR)
+		flags |= IOMMU_TRANS_WRITE;
+	if (fsynr0 & FSYNR0_PNU)
+		flags |= IOMMU_TRANS_PRIV;
+	if (fsynr0 & FSYNR0_IND)
+		flags |= IOMMU_TRANS_INST;
+
+	/* Now replicate the faulty transaction */
+	phys_stimu = arm_smmu_iova_to_phys_hard(domain, iova, flags);
+
+	/*
+	 * If the replicated transaction fails, it could be due to legitimate
+	 * unmapped access (translation fault) or stale TLB with insufficient
+	 * privileges (permission fault). Try ATOS operation with full access
+	 * privileges to rule out stale entry with insufficient privileges case.
+	 */
+	if (!phys_stimu)
+		phys_hard_priv = arm_smmu_iova_to_phys_hard(domain, iova,
+						       IOMMU_TRANS_DEFAULT |
+						       IOMMU_TRANS_PRIV);
+
+	/* Now replicate the faulty transaction post tlbiall */
 	smmu_domain->pgtbl_cfg.tlb->tlb_flush_all(smmu_domain);
-	phys_post_tlbiall = arm_smmu_iova_to_phys_hard(domain, iova);
+	phys_stimu_post_tlbiall = arm_smmu_iova_to_phys_hard(domain, iova,
+							     flags);
 
-	if (phys != phys_post_tlbiall) {
+	if (!phys_stimu && phys_hard_priv) {
 		dev_err(smmu->dev,
-			"ATOS results differed across TLBIALL...\n"
-			"Before: %pa After: %pa\n", &phys, &phys_post_tlbiall);
+			"ATOS results differed across access privileges...\n"
+			"Before: %pa After: %pa\n",
+			&phys_stimu, &phys_hard_priv);
 	}
 
-	return (phys == 0 ? phys_post_tlbiall : phys);
+	if (phys_stimu != phys_stimu_post_tlbiall) {
+		dev_err(smmu->dev,
+			"ATOS results differed across TLBIALL...\n"
+			"Before: %pa After: %pa\n", &phys_stimu,
+						&phys_stimu_post_tlbiall);
+	}
+
+	return (phys_stimu == 0 ? phys_stimu_post_tlbiall : phys_stimu);
 }
 
 static irqreturn_t arm_smmu_context_fault(int irq, void *dev)
@@ -1731,7 +1777,8 @@
 			phys_addr_t phys_atos;
 
 			print_ctx_regs(smmu, cfg, fsr);
-			phys_atos = arm_smmu_verify_fault(domain, iova, fsr);
+			phys_atos = arm_smmu_verify_fault(domain, iova, fsr,
+							  fsynr0);
 			dev_err(smmu->dev,
 				"Unhandled context fault: iova=0x%08lx, cb=%d, fsr=0x%x, fsynr0=0x%x, fsynr1=0x%x\n",
 				iova, cfg->cbndx, fsr, fsynr0, fsynr1);
@@ -2008,14 +2055,15 @@
 	} else
 		reg |= SCTLR_SHCFG_NSH << SCTLR_SHCFG_SHIFT;
 
-	if (attributes & (1 << DOMAIN_ATTR_CB_STALL_DISABLE)) {
-		reg &= ~SCTLR_CFCFG;
-		reg |= SCTLR_HUPCF;
-	}
-
-	if (attributes & (1 << DOMAIN_ATTR_NO_CFRE))
+	if (attributes & (1 << DOMAIN_ATTR_FAULT_MODEL_NO_CFRE))
 		reg &= ~SCTLR_CFRE;
 
+	if (attributes & (1 << DOMAIN_ATTR_FAULT_MODEL_NO_STALL))
+		reg &= ~SCTLR_CFCFG;
+
+	if (attributes & (1 << DOMAIN_ATTR_FAULT_MODEL_HUPCF))
+		reg |= SCTLR_HUPCF;
+
 	if ((!(attributes & (1 << DOMAIN_ATTR_S1_BYPASS)) &&
 	     !(attributes & (1 << DOMAIN_ATTR_EARLY_MAP))) || !stage1)
 		reg |= SCTLR_M;
@@ -2236,6 +2284,7 @@
 		domain->geometry.aperture_end = (1UL << ias) - 1;
 		if (domain->geometry.aperture_end >= SZ_1G * 4ULL)
 			domain->geometry.aperture_end = (SZ_1G * 4ULL) - 1;
+
 	}
 
 	if (arm_smmu_is_slave_side_secure(smmu_domain)) {
@@ -2982,16 +3031,20 @@
 	if (of_property_match_string(np, "qcom,iommu-faults",
 				     "stall-disable") >= 0)
 		__arm_smmu_domain_set_attr(domain,
-			DOMAIN_ATTR_CB_STALL_DISABLE, &attr);
+			DOMAIN_ATTR_FAULT_MODEL_NO_STALL, &attr);
+
+	if (of_property_match_string(np, "qcom,iommu-faults", "no-CFRE") >= 0)
+		__arm_smmu_domain_set_attr(
+			domain, DOMAIN_ATTR_FAULT_MODEL_NO_CFRE, &attr);
+
+	if (of_property_match_string(np, "qcom,iommu-faults", "HUPCF") >= 0)
+		__arm_smmu_domain_set_attr(
+			domain, DOMAIN_ATTR_FAULT_MODEL_HUPCF, &attr);
 
 	if (of_property_match_string(np, "qcom,iommu-faults", "non-fatal") >= 0)
 		__arm_smmu_domain_set_attr(domain,
 			DOMAIN_ATTR_NON_FATAL_FAULTS, &attr);
 
-	if (of_property_match_string(np, "qcom,iommu-faults", "no-CFRE") >= 0)
-		__arm_smmu_domain_set_attr(
-			domain, DOMAIN_ATTR_NO_CFRE, &attr);
-
 	/* Default value: disabled */
 	ret = of_property_read_u32(np, "qcom,iommu-vmid", &val);
 	if (!ret) {
@@ -3038,7 +3091,8 @@
 		}
 
 		geometry.aperture_start = of_read_number(ranges, naddr);
-		geometry.aperture_end = of_read_number(ranges + naddr, nsize);
+		geometry.aperture_end = geometry.aperture_start +
+			of_read_number(ranges + naddr, nsize) - 1;
 		__arm_smmu_domain_set_attr(domain, DOMAIN_ATTR_GEOMETRY,
 					   &geometry);
 	}
@@ -3424,7 +3478,7 @@
  * original iova_to_phys() op.
  */
 static phys_addr_t arm_smmu_iova_to_phys_hard(struct iommu_domain *domain,
-					dma_addr_t iova)
+				    dma_addr_t iova, unsigned long trans_flags)
 {
 	phys_addr_t ret = 0;
 	unsigned long flags;
@@ -3440,7 +3494,7 @@
 	if (smmu_domain->smmu->arch_ops &&
 	    smmu_domain->smmu->arch_ops->iova_to_phys_hard) {
 		ret = smmu_domain->smmu->arch_ops->iova_to_phys_hard(
-						domain, iova);
+						domain, iova, trans_flags);
 		goto out;
 	}
 
@@ -3814,14 +3868,10 @@
 			& (1 << DOMAIN_ATTR_PAGE_TABLE_FORCE_COHERENT));
 		ret = 0;
 		break;
-	case DOMAIN_ATTR_CB_STALL_DISABLE:
-		*((int *)data) = !!(smmu_domain->attributes
-			& (1 << DOMAIN_ATTR_CB_STALL_DISABLE));
-		ret = 0;
-		break;
-	case DOMAIN_ATTR_NO_CFRE:
-		*((int *)data) = !!(smmu_domain->attributes
-			& (1 << DOMAIN_ATTR_NO_CFRE));
+	case DOMAIN_ATTR_FAULT_MODEL_NO_CFRE:
+	case DOMAIN_ATTR_FAULT_MODEL_NO_STALL:
+	case DOMAIN_ATTR_FAULT_MODEL_HUPCF:
+		*((int *)data) = !!(smmu_domain->attributes & (1U << attr));
 		ret = 0;
 		break;
 	default:
@@ -4018,8 +4068,9 @@
 		break;
 	}
 	case DOMAIN_ATTR_BITMAP_IOVA_ALLOCATOR:
-	case DOMAIN_ATTR_CB_STALL_DISABLE:
-	case DOMAIN_ATTR_NO_CFRE:
+	case DOMAIN_ATTR_FAULT_MODEL_NO_CFRE:
+	case DOMAIN_ATTR_FAULT_MODEL_NO_STALL:
+	case DOMAIN_ATTR_FAULT_MODEL_HUPCF:
 		if (*((int *)data))
 			smmu_domain->attributes |=
 				1 << attr;
@@ -4064,17 +4115,23 @@
 			break;
 		}
 
-		if (geometry->aperture_start
-		    < domain->geometry.aperture_start)
+		if (smmu_domain->attributes & (1 << DOMAIN_ATTR_GEOMETRY)) {
+			if (geometry->aperture_start <
+			    domain->geometry.aperture_start)
+				domain->geometry.aperture_start =
+					geometry->aperture_start;
+
+			if (geometry->aperture_end >
+			    domain->geometry.aperture_end)
+				domain->geometry.aperture_end =
+					geometry->aperture_end;
+		} else {
+			smmu_domain->attributes |= 1 << DOMAIN_ATTR_GEOMETRY;
 			domain->geometry.aperture_start =
 				geometry->aperture_start;
+			domain->geometry.aperture_end = geometry->aperture_end;
+		}
 
-		if (geometry->aperture_end
-		    > domain->geometry.aperture_end)
-			domain->geometry.aperture_end =
-				geometry->aperture_end;
-
-		smmu_domain->attributes |= 1 << DOMAIN_ATTR_GEOMETRY;
 		ret = 0;
 		break;
 	}
@@ -4325,7 +4382,7 @@
 }
 
 static phys_addr_t qsmmuv2_iova_to_phys_hard(struct iommu_domain *domain,
-				dma_addr_t iova)
+				dma_addr_t iova, unsigned long trans_flags)
 {
 	struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
 	struct arm_smmu_device *smmu = smmu_domain->smmu;
@@ -5451,8 +5508,14 @@
 
 #define DEBUG_TXN_TRIGG_REG		0x18
 #define DEBUG_TXN_AXPROT_SHIFT		6
+#define DEBUG_TXN_AXPROT_PRIV	(0x1 << DEBUG_TXN_AXPROT_SHIFT)
+#define DEBUG_TXN_AXPROT_UNPRIV	(0x0 << DEBUG_TXN_AXPROT_SHIFT)
+#define DEBUG_TXN_AXPROT_NSEC	(0x2 << DEBUG_TXN_AXPROT_SHIFT)
+#define DEBUG_TXN_AXPROT_SEC	(0x0 << DEBUG_TXN_AXPROT_SHIFT)
+#define DEBUG_TXN_AXPROT_INST	(0x4 << DEBUG_TXN_AXPROT_SHIFT)
+#define DEBUG_TXN_AXPROT_DATA	(0x0 << DEBUG_TXN_AXPROT_SHIFT)
 #define DEBUG_TXN_AXCACHE_SHIFT		2
-#define DEBUG_TRX_WRITE			(0x1 << 1)
+#define DEBUG_TXN_WRITE			(0x1 << 1)
 #define DEBUG_TXN_READ			(0x0 << 1)
 #define DEBUG_TXN_TRIGGER		0x1
 
@@ -5636,7 +5699,8 @@
  * Zero means failure.
  */
 static phys_addr_t qsmmuv500_iova_to_phys(
-		struct iommu_domain *domain, dma_addr_t iova, u32 sid)
+		struct iommu_domain *domain, dma_addr_t iova,
+		u32 sid, unsigned long trans_flags)
 {
 	struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
 	struct arm_smmu_device *smmu = smmu_domain->smmu;
@@ -5714,13 +5778,24 @@
 		DEBUG_AXUSER_CDMID_SHIFT;
 	writeq_relaxed(val, tbu->base + DEBUG_AXUSER_REG);
 
-	/*
-	 * Write-back Read and Write-Allocate
-	 * Priviledged, nonsecure, data transaction
-	 * Read operation.
-	 */
+	/* Write-back Read and Write-Allocate */
 	val = 0xF << DEBUG_TXN_AXCACHE_SHIFT;
-	val |= 0x3 << DEBUG_TXN_AXPROT_SHIFT;
+
+	/* Non-secure Access */
+	val |= DEBUG_TXN_AXPROT_NSEC;
+
+	/* Write or Read Access */
+	if (trans_flags & IOMMU_TRANS_WRITE)
+		val |= DEBUG_TXN_WRITE;
+
+	/* Priviledged or Unpriviledged Access */
+	if (trans_flags & IOMMU_TRANS_PRIV)
+		val |= DEBUG_TXN_AXPROT_PRIV;
+
+	/* Data or Instruction Access */
+	if (trans_flags & IOMMU_TRANS_INST)
+		val |= DEBUG_TXN_AXPROT_INST;
+
 	val |= DEBUG_TXN_TRIGGER;
 	writeq_relaxed(val, tbu->base + DEBUG_TXN_TRIGG_REG);
 
@@ -5800,7 +5875,8 @@
 }
 
 static phys_addr_t qsmmuv500_iova_to_phys_hard(
-		struct iommu_domain *domain, dma_addr_t iova)
+		struct iommu_domain *domain, dma_addr_t iova,
+		unsigned long trans_flags)
 {
 	u16 sid;
 	struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
@@ -5810,7 +5886,6 @@
 	void __iomem *gr1_base;
 	u32 frsynra;
 
-
 	/* Check to see if the domain is associated with the test
 	 * device. If the domain belongs to the test device, then
 	 * pick the SID from fwspec.
@@ -5829,7 +5904,7 @@
 		frsynra &= CBFRSYNRA_SID_MASK;
 		sid      = frsynra;
 	}
-	return qsmmuv500_iova_to_phys(domain, iova, sid);
+	return qsmmuv500_iova_to_phys(domain, iova, sid, trans_flags);
 }
 
 static void qsmmuv500_release_group_iommudata(void *data)
diff --git a/drivers/iommu/dma-mapping-fast.c b/drivers/iommu/dma-mapping-fast.c
index 8c3402d..b1e48ba 100644
--- a/drivers/iommu/dma-mapping-fast.c
+++ b/drivers/iommu/dma-mapping-fast.c
@@ -17,7 +17,8 @@
 #include <linux/dma-iommu.h>
 #include <linux/iova.h>
 #include <trace/events/iommu.h>
-#include "io-pgtable.h"
+
+#include <linux/io-pgtable.h>
 
 /* some redundant definitions... :( TODO: move to io-pgtable-fast.h */
 #define FAST_PAGE_SHIFT		12
diff --git a/drivers/iommu/io-pgtable-arm-v7s.c b/drivers/iommu/io-pgtable-arm-v7s.c
index 48d4709..6a69864 100644
--- a/drivers/iommu/io-pgtable-arm-v7s.c
+++ b/drivers/iommu/io-pgtable-arm-v7s.c
@@ -35,6 +35,7 @@
 #include <linux/atomic.h>
 #include <linux/dma-mapping.h>
 #include <linux/gfp.h>
+#include <linux/io-pgtable.h>
 #include <linux/iommu.h>
 #include <linux/kernel.h>
 #include <linux/kmemleak.h>
@@ -45,8 +46,6 @@
 
 #include <asm/barrier.h>
 
-#include "io-pgtable.h"
-
 /* Struct accessors */
 #define io_pgtable_to_data(x)						\
 	container_of((x), struct arm_v7s_io_pgtable, iop)
diff --git a/drivers/iommu/io-pgtable-arm.c b/drivers/iommu/io-pgtable-arm.c
index 5f2cba7..a6fad3a 100644
--- a/drivers/iommu/io-pgtable-arm.c
+++ b/drivers/iommu/io-pgtable-arm.c
@@ -22,6 +22,7 @@
 
 #include <linux/atomic.h>
 #include <linux/iommu.h>
+#include <linux/io-pgtable.h>
 #include <linux/kernel.h>
 #include <linux/scatterlist.h>
 #include <linux/sizes.h>
@@ -31,8 +32,6 @@
 
 #include <asm/barrier.h>
 
-#include "io-pgtable.h"
-
 #define ARM_LPAE_MAX_ADDR_BITS		48
 #define ARM_LPAE_S2_MAX_CONCAT_PAGES	16
 #define ARM_LPAE_MAX_LEVELS		4
diff --git a/drivers/iommu/io-pgtable-fast.c b/drivers/iommu/io-pgtable-fast.c
index 07c8d38..31596c0 100644
--- a/drivers/iommu/io-pgtable-fast.c
+++ b/drivers/iommu/io-pgtable-fast.c
@@ -12,11 +12,11 @@
 #include <linux/slab.h>
 #include <linux/types.h>
 #include <linux/io-pgtable-fast.h>
+#include <linux/io-pgtable.h>
 #include <linux/mm.h>
 #include <asm/cacheflush.h>
 #include <linux/vmalloc.h>
 
-#include "io-pgtable.h"
 
 #define AV8L_FAST_MAX_ADDR_BITS		48
 
diff --git a/drivers/iommu/io-pgtable-msm-secure.c b/drivers/iommu/io-pgtable-msm-secure.c
index 847e8c3..98990a5 100644
--- a/drivers/iommu/io-pgtable-msm-secure.c
+++ b/drivers/iommu/io-pgtable-msm-secure.c
@@ -15,7 +15,7 @@
 #include <linux/dma-mapping.h>
 #include <asm/cacheflush.h>
 
-#include "io-pgtable.h"
+#include <linux/io-pgtable.h>
 
 #define IOMMU_SECURE_PTBL_SIZE  3
 #define IOMMU_SECURE_PTBL_INIT  4
diff --git a/drivers/iommu/io-pgtable.c b/drivers/iommu/io-pgtable.c
index 541abb2..6bc54ae 100644
--- a/drivers/iommu/io-pgtable.c
+++ b/drivers/iommu/io-pgtable.c
@@ -21,15 +21,14 @@
 #define pr_fmt(fmt)	"io-pgtable: " fmt
 
 #include <linux/bug.h>
+#include <linux/iommu.h>
+#include <linux/io-pgtable.h>
 #include <linux/kernel.h>
 #include <linux/types.h>
-#include <linux/iommu.h>
 #include <linux/debugfs.h>
 #include <linux/atomic.h>
 #include <linux/module.h>
 
-#include "io-pgtable.h"
-
 static const struct io_pgtable_init_fns *
 io_pgtable_init_table[IO_PGTABLE_NUM_FMTS] = {
 #ifdef CONFIG_IOMMU_IO_PGTABLE_LPAE
@@ -72,6 +71,7 @@
 
 	return &iop->ops;
 }
+EXPORT_SYMBOL_GPL(alloc_io_pgtable_ops);
 
 /*
  * It is the IOMMU driver's responsibility to ensure that the page table
@@ -88,6 +88,7 @@
 	io_pgtable_tlb_flush_all(iop);
 	io_pgtable_init_table[iop->fmt]->free(iop);
 }
+EXPORT_SYMBOL_GPL(free_io_pgtable_ops);
 
 static atomic_t pages_allocated;
 
diff --git a/drivers/iommu/iommu-debug.c b/drivers/iommu/iommu-debug.c
index b0533d1..8828951 100644
--- a/drivers/iommu/iommu-debug.c
+++ b/drivers/iommu/iommu-debug.c
@@ -78,8 +78,12 @@
 		return "DOMAIN_ATTR_FAST";
 	case DOMAIN_ATTR_EARLY_MAP:
 		return "DOMAIN_ATTR_EARLY_MAP";
-	case DOMAIN_ATTR_CB_STALL_DISABLE:
-		return "DOMAIN_ATTR_CB_STALL_DISABLE";
+	case DOMAIN_ATTR_FAULT_MODEL_NO_CFRE:
+		return "DOMAIN_ATTR_FAULT_MODEL_NO_CFRE";
+	case DOMAIN_ATTR_FAULT_MODEL_NO_STALL:
+		return "DOMAIN_ATTR_FAULT_MODEL_NO_STALL";
+	case DOMAIN_ATTR_FAULT_MODEL_HUPCF:
+		return "DOMAIN_ATTR_FAULT_MODEL_HUPCF";
 	default:
 		return "Unknown attr!";
 	}
@@ -884,7 +888,8 @@
 static int __check_mapping(struct device *dev, struct iommu_domain *domain,
 			   dma_addr_t iova, phys_addr_t expected)
 {
-	phys_addr_t res = iommu_iova_to_phys_hard(domain, iova);
+	phys_addr_t res = iommu_iova_to_phys_hard(domain, iova,
+						  IOMMU_TRANS_DEFAULT);
 	phys_addr_t res2 = iommu_iova_to_phys(domain, iova);
 
 	WARN(res != res2, "hard/soft iova_to_phys fns don't agree...");
@@ -1109,7 +1114,8 @@
 		memset(data, 0xa5, size);
 		iova = dma_map_single(dev, data, size, DMA_TO_DEVICE);
 		pa = iommu_iova_to_phys(domain, iova);
-		pa2 = iommu_iova_to_phys_hard(domain, iova);
+		pa2 = iommu_iova_to_phys_hard(domain, iova,
+					      IOMMU_TRANS_DEFAULT);
 		if (pa != pa2) {
 			dev_err_ratelimited(dev,
 				"iova_to_phys doesn't match iova_to_phys_hard: %pa != %pa\n",
@@ -1182,7 +1188,8 @@
 		for_each_sg(table.sgl, sg, count, i) {
 			iova = sg_dma_address(sg);
 			pa = iommu_iova_to_phys(domain, iova);
-			pa2 = iommu_iova_to_phys_hard(domain, iova);
+			pa2 = iommu_iova_to_phys_hard(domain, iova,
+						      IOMMU_TRANS_DEFAULT);
 			if (pa != pa2) {
 				dev_err_ratelimited(dev,
 					"iova_to_phys doesn't match iova_to_phys_hard: %pa != %pa\n",
@@ -1193,7 +1200,8 @@
 			/* check mappings at end of buffer */
 			iova += sg_dma_len(sg) - 1;
 			pa = iommu_iova_to_phys(domain, iova);
-			pa2 = iommu_iova_to_phys_hard(domain, iova);
+			pa2 = iommu_iova_to_phys_hard(domain, iova,
+						      IOMMU_TRANS_DEFAULT);
 			if (pa != pa2) {
 				dev_err_ratelimited(dev,
 					"iova_to_phys doesn't match iova_to_phys_hard: %pa != %pa\n",
@@ -1533,7 +1541,8 @@
 
 	memset(buf, 0, 100);
 
-	phys = iommu_iova_to_phys_hard(ddev->domain, ddev->iova);
+	phys = iommu_iova_to_phys_hard(ddev->domain, ddev->iova,
+				       IOMMU_TRANS_DEFAULT);
 	if (!phys) {
 		strlcpy(buf, "FAIL\n", 100);
 		phys = iommu_iova_to_phys(ddev->domain, ddev->iova);
@@ -1576,7 +1585,7 @@
 	memset(buf, 0, sizeof(buf));
 
 	phys = iommu_iova_to_phys_hard(ddev->domain,
-			ddev->iova);
+			ddev->iova, IOMMU_TRANS_DEFAULT);
 	if (!phys)
 		strlcpy(buf, "FAIL\n", sizeof(buf));
 	else
diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
index 436d047..ee4d58e 100644
--- a/drivers/iommu/iommu.c
+++ b/drivers/iommu/iommu.c
@@ -1509,12 +1509,12 @@
 EXPORT_SYMBOL_GPL(iommu_iova_to_phys);
 
 phys_addr_t iommu_iova_to_phys_hard(struct iommu_domain *domain,
-				    dma_addr_t iova)
+				    dma_addr_t iova, unsigned long trans_flags)
 {
 	if (unlikely(domain->ops->iova_to_phys_hard == NULL))
 		return 0;
 
-	return domain->ops->iova_to_phys_hard(domain, iova);
+	return domain->ops->iova_to_phys_hard(domain, iova, trans_flags);
 }
 
 uint64_t iommu_iova_to_pte(struct iommu_domain *domain,
diff --git a/drivers/iommu/ipmmu-vmsa.c b/drivers/iommu/ipmmu-vmsa.c
index d8598e4..afeeb7c9 100644
--- a/drivers/iommu/ipmmu-vmsa.c
+++ b/drivers/iommu/ipmmu-vmsa.c
@@ -16,6 +16,7 @@
 #include <linux/export.h>
 #include <linux/interrupt.h>
 #include <linux/io.h>
+#include <linux/io-pgtable.h>
 #include <linux/iommu.h>
 #include <linux/module.h>
 #include <linux/of.h>
@@ -37,8 +38,6 @@
 #define arm_iommu_detach_device(...)	do {} while (0)
 #endif
 
-#include "io-pgtable.h"
-
 #define IPMMU_CTX_MAX 8
 
 struct ipmmu_features {
diff --git a/drivers/iommu/msm_iommu.c b/drivers/iommu/msm_iommu.c
index fc5f0b5..8419217 100644
--- a/drivers/iommu/msm_iommu.c
+++ b/drivers/iommu/msm_iommu.c
@@ -21,6 +21,7 @@
 #include <linux/platform_device.h>
 #include <linux/errno.h>
 #include <linux/io.h>
+#include <linux/io-pgtable.h>
 #include <linux/interrupt.h>
 #include <linux/list.h>
 #include <linux/spinlock.h>
@@ -35,7 +36,6 @@
 
 #include "msm_iommu_hw-8xxx.h"
 #include "msm_iommu.h"
-#include "io-pgtable.h"
 
 #define MRC(reg, processor, op1, crn, crm, op2)				\
 __asm__ __volatile__ (							\
diff --git a/drivers/iommu/mtk_iommu.h b/drivers/iommu/mtk_iommu.h
index 778498b..62c2c3e 100644
--- a/drivers/iommu/mtk_iommu.h
+++ b/drivers/iommu/mtk_iommu.h
@@ -19,13 +19,12 @@
 #include <linux/component.h>
 #include <linux/device.h>
 #include <linux/io.h>
+#include <linux/io-pgtable.h>
 #include <linux/iommu.h>
 #include <linux/list.h>
 #include <linux/spinlock.h>
 #include <soc/mediatek/smi.h>
 
-#include "io-pgtable.h"
-
 struct mtk_iommu_suspend_reg {
 	u32				standard_axi_mode;
 	u32				dcm_dis;
diff --git a/drivers/iommu/qcom_iommu.c b/drivers/iommu/qcom_iommu.c
index ee70e99..296dbce 100644
--- a/drivers/iommu/qcom_iommu.c
+++ b/drivers/iommu/qcom_iommu.c
@@ -26,6 +26,7 @@
 #include <linux/interrupt.h>
 #include <linux/io.h>
 #include <linux/io-64-nonatomic-hi-lo.h>
+#include <linux/io-pgtable.h>
 #include <linux/iommu.h>
 #include <linux/iopoll.h>
 #include <linux/kconfig.h>
@@ -42,7 +43,6 @@
 #include <linux/slab.h>
 #include <linux/spinlock.h>
 
-#include "io-pgtable.h"
 #include "arm-smmu-regs.h"
 
 #define SMMU_INTR_SEL_NS     0x2000
diff --git a/drivers/irqchip/Makefile b/drivers/irqchip/Makefile
index 73f2dfd..e3a9948 100644
--- a/drivers/irqchip/Makefile
+++ b/drivers/irqchip/Makefile
@@ -88,5 +88,5 @@
 obj-$(CONFIG_GOLDFISH_PIC) 		+= irq-goldfish-pic.o
 obj-$(CONFIG_NDS32)			+= irq-ativic32.o
 obj-$(CONFIG_QCOM_PDC)			+= qcom-pdc.o
-obj-$(CONFIG_QCOM_MPM)			+= qcom-mpm.o qcom-mpm-bengal.o
+obj-$(CONFIG_QCOM_MPM)			+= qcom-mpm.o qcom-mpm-bengal.o qcom-mpm-scuba.o
 obj-$(CONFIG_SIFIVE_PLIC)		+= irq-sifive-plic.o
diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c
index 16c7637..1bbf9a0 100644
--- a/drivers/irqchip/irq-gic-v3.c
+++ b/drivers/irqchip/irq-gic-v3.c
@@ -1340,7 +1340,7 @@
 	gic_set_kvm_info(&gic_v3_kvm_info);
 }
 
-static int __init gic_of_init(struct device_node *node, struct device_node *parent)
+static int __init gicv3_of_init(struct device_node *node, struct device_node *parent)
 {
 	void __iomem *dist_base;
 	struct redist_region *rdist_regs;
@@ -1408,7 +1408,7 @@
 	return err;
 }
 
-IRQCHIP_DECLARE(gic_v3, "arm,gic-v3", gic_of_init);
+IRQCHIP_DECLARE(gic_v3, "arm,gic-v3", gicv3_of_init);
 
 #ifdef CONFIG_ACPI
 static struct
diff --git a/drivers/irqchip/qcom-mpm-scuba.c b/drivers/irqchip/qcom-mpm-scuba.c
new file mode 100644
index 0000000..43b8975
--- /dev/null
+++ b/drivers/irqchip/qcom-mpm-scuba.c
@@ -0,0 +1,17 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2020, The Linux Foundation. All rights reserved.
+ */
+
+#include <soc/qcom/mpm.h>
+
+const struct mpm_pin mpm_scuba_gic_chip_data[] = {
+	{2, 222},
+	{5, 328}, /* lpass_irq_out_sdc */
+	{12, 454}, /* b3_lfps_rxterm_irq */
+	{24, 111}, /* bi_px_lpi_1_aoss_mx */
+	{86, 215}, /* mpm_wake,spmi_m */
+	{90, 292}, /* eud_p0_dpse_int_mx */
+	{91, 292}, /* eud_p0_dmse_int_mx */
+	{-1},
+};
diff --git a/drivers/irqchip/qcom-mpm.c b/drivers/irqchip/qcom-mpm.c
index c2ed53a..f7f4864 100644
--- a/drivers/irqchip/qcom-mpm.c
+++ b/drivers/irqchip/qcom-mpm.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2010-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2010-2020, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/delay.h>
@@ -588,6 +588,10 @@
 		.compatible = "qcom,mpm-gic-bengal",
 		.data = mpm_bengal_gic_chip_data,
 	},
+	{
+		.compatible = "qcom,mpm-gic-scuba",
+		.data = mpm_scuba_gic_chip_data,
+	},
 	{}
 };
 MODULE_DEVICE_TABLE(of, mpm_gic_chip_data_table);
diff --git a/drivers/leds/Makefile b/drivers/leds/Makefile
index 5afeec6..d3900c4 100644
--- a/drivers/leds/Makefile
+++ b/drivers/leds/Makefile
@@ -22,7 +22,7 @@
 obj-$(CONFIG_LEDS_MIKROTIK_RB532)	+= leds-rb532.o
 obj-$(CONFIG_LEDS_S3C24XX)		+= leds-s3c24xx.o
 obj-$(CONFIG_LEDS_NET48XX)		+= leds-net48xx.o
-obj-$(CONFIG_LEDS_QTI_FLASH)		+= leds-qti-flash.o
+obj-$(CONFIG_LEDS_QTI_FLASH)		+= leds-qti-flash.o leds-qpnp-flash-common.o
 obj-$(CONFIG_LEDS_WRAP)			+= leds-wrap.o
 obj-$(CONFIG_LEDS_COBALT_QUBE)		+= leds-cobalt-qube.o
 obj-$(CONFIG_LEDS_COBALT_RAQ)		+= leds-cobalt-raq.o
@@ -80,7 +80,7 @@
 obj-$(CONFIG_LEDS_SC27XX_BLTC)		+= leds-sc27xx-bltc.o
 obj-$(CONFIG_LEDS_LM3601X)		+= leds-lm3601x.o
 obj-$(CONFIG_LEDS_QTI_TRI_LED)		+= leds-qti-tri-led.o
-obj-$(CONFIG_LEDS_QPNP_FLASH_V2)        += leds-qpnp-flash-v2.o
+obj-$(CONFIG_LEDS_QPNP_FLASH_V2)        += leds-qpnp-flash-v2.o leds-qpnp-flash-common.o
 obj-$(CONFIG_LEDS_QPNP_VIBRATOR_LDO)	+= leds-qpnp-vibrator-ldo.o
 
 # LED SPI Drivers
diff --git a/drivers/leds/leds-qpnp-flash-common.c b/drivers/leds/leds-qpnp-flash-common.c
new file mode 100644
index 0000000..e65a00c
--- /dev/null
+++ b/drivers/leds/leds-qpnp-flash-common.c
@@ -0,0 +1,48 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2020, The Linux Foundation. All rights reserved.
+ */
+
+#include "leds.h"
+
+struct flash_data {
+	struct list_head link;
+	struct device *dev;
+	int (*func)(struct led_trigger *trig, int options,
+					int *max_current);
+};
+
+static LIST_HEAD(flash_common_data);
+
+int qpnp_flash_register_led_prepare(struct device *dev, void *data)
+{
+	struct flash_data *flash_data;
+
+	flash_data = devm_kzalloc(dev, sizeof(struct flash_data),
+						GFP_KERNEL);
+	if (!flash_data)
+		return -ENOMEM;
+
+	flash_data->dev = dev;
+	flash_data->func = data;
+
+	list_add(&flash_data->link, &flash_common_data);
+
+	return 0;
+}
+
+int qpnp_flash_led_prepare(struct led_trigger *trig, int options,
+					int *max_current)
+{
+	struct flash_data *flash_data;
+	struct led_classdev *led_cdev;
+	int rc = -ENODEV;
+
+	led_cdev = trigger_to_lcdev(trig);
+	list_for_each_entry(flash_data, &flash_common_data, link) {
+		if (led_cdev->dev->parent == flash_data->dev)
+			rc = flash_data->func(trig, options, max_current);
+	}
+
+	return rc;
+}
diff --git a/drivers/leds/leds-qpnp-flash-v2.c b/drivers/leds/leds-qpnp-flash-v2.c
index 4a2d664..8868a3c 100644
--- a/drivers/leds/leds-qpnp-flash-v2.c
+++ b/drivers/leds/leds-qpnp-flash-v2.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2020, The Linux Foundation. All rights reserved.
  */
 
 #define pr_fmt(fmt)	"flashv2: %s: " fmt, __func__
@@ -1762,7 +1762,7 @@
 	return 0;
 }
 
-int qpnp_flash_led_prepare(struct led_trigger *trig, int options,
+static int qpnp_flash_leds_prepare(struct led_trigger *trig, int options,
 					int *max_current)
 {
 	struct led_classdev *led_cdev;
@@ -3116,6 +3116,13 @@
 		}
 	}
 
+	rc = qpnp_flash_register_led_prepare(&pdev->dev,
+					     qpnp_flash_leds_prepare);
+	if (rc < 0) {
+		pr_err("Failed to register flash_led_prepare, rc=%d\n", rc);
+		goto sysfs_fail;
+	}
+
 	dev_set_drvdata(&pdev->dev, led);
 
 	return 0;
diff --git a/drivers/leds/leds-qti-flash.c b/drivers/leds/leds-qti-flash.c
index ee855c4..fdb903d 100644
--- a/drivers/leds/leds-qti-flash.c
+++ b/drivers/leds/leds-qti-flash.c
@@ -19,6 +19,8 @@
 
 #include "leds.h"
 
+#define FLASH_PERPH_SUBTYPE		0x05
+
 #define FLASH_LED_STATUS1		0x06
 
 #define FLASH_LED_STATUS2		0x07
@@ -59,6 +61,9 @@
 #define  FLASH_LED_ENABLE(id)			BIT(id)
 #define  FLASH_LED_DISABLE		0
 
+#define FORCE_TORCH_MODE		0x68
+#define FORCE_TORCH			BIT(0)
+
 #define MAX_IRES_LEVELS		2
 #define IRES_12P5_MAX_CURR_MA	1500
 #define IRES_5P0_MAX_CURR_MA		640
@@ -139,6 +144,7 @@
 	u16			base;
 	u8		max_channels;
 	u8		ref_count;
+	u8		subtype;
 };
 
 static const u32 flash_led_max_ires_values[MAX_IRES_LEVELS] = {
@@ -336,6 +342,13 @@
 			goto out;
 	}
 
+	if (fnode->type == FLASH_LED_TYPE_TORCH && led->subtype == 0x6) {
+		rc = qti_flash_led_masked_write(led, FORCE_TORCH_MODE,
+					FORCE_TORCH, FORCE_TORCH);
+		if (rc < 0)
+			goto out;
+	}
+
 	fnode->configured = true;
 
 	if ((fnode->strobe_sel == HW_STROBE) &&
@@ -368,6 +381,13 @@
 	if (rc < 0)
 		goto out;
 
+	if (fnode->type == FLASH_LED_TYPE_TORCH && led->subtype == 0x6) {
+		rc = qti_flash_led_masked_write(led, FORCE_TORCH_MODE,
+						FORCE_TORCH, 0);
+		if (rc < 0)
+			goto out;
+	}
+
 	fnode->current_ma = 0;
 
 out:
@@ -601,10 +621,20 @@
 	snode = container_of(led_cdev, struct flash_switch_data, cdev);
 
 	if (options & QUERY_MAX_AVAIL_CURRENT) {
+		if (!max_current) {
+			pr_err("Invalid max_current pointer\n");
+			return -EINVAL;
+		}
 		*max_current = snode->led->max_current;
 		return 0;
 	}
 
+	if (options & ENABLE_REGULATOR)
+		return 0;
+
+	if (options & DISABLE_REGULATOR)
+		return 0;
+
 	return -EINVAL;
 }
 EXPORT_SYMBOL(qti_flash_led_prepare);
@@ -1193,6 +1223,12 @@
 		return rc;
 	}
 
+	rc = qti_flash_led_read(led, FLASH_PERPH_SUBTYPE, &led->subtype, 1);
+	if (rc < 0) {
+		pr_err("Failed to read flash-perph subtype rc=%d\n", rc);
+		return rc;
+	}
+
 	rc = qti_flash_led_setup(led);
 	if (rc < 0) {
 		pr_err("Failed to initialize flash LED, rc=%d\n", rc);
@@ -1205,6 +1241,12 @@
 		return rc;
 	}
 
+	rc = qpnp_flash_register_led_prepare(&pdev->dev, qti_flash_led_prepare);
+	if (rc < 0) {
+		pr_err("Failed to register flash_led_prepare, rc=%d\n", rc);
+		return rc;
+	}
+
 	dev_set_drvdata(&pdev->dev, led);
 
 	return 0;
diff --git a/drivers/md/dm-bufio.c b/drivers/md/dm-bufio.c
index dc385b7..b0db052 100644
--- a/drivers/md/dm-bufio.c
+++ b/drivers/md/dm-bufio.c
@@ -33,7 +33,8 @@
 
 #define DM_BUFIO_MEMORY_PERCENT		2
 #define DM_BUFIO_VMALLOC_PERCENT	25
-#define DM_BUFIO_WRITEBACK_PERCENT	75
+#define DM_BUFIO_WRITEBACK_RATIO	3
+#define DM_BUFIO_LOW_WATERMARK_RATIO	16
 
 /*
  * Check buffer ages in this interval (seconds)
@@ -132,12 +133,14 @@
 struct dm_buffer {
 	struct rb_node node;
 	struct list_head lru_list;
+	struct list_head global_list;
 	sector_t block;
 	void *data;
 	unsigned char data_mode;		/* DATA_MODE_* */
 	unsigned char list_mode;		/* LIST_* */
 	blk_status_t read_error;
 	blk_status_t write_error;
+	unsigned accessed;
 	unsigned hold_count;
 	unsigned long state;
 	unsigned long last_accessed;
@@ -192,7 +195,11 @@
  */
 static unsigned long dm_bufio_cache_size_latch;
 
-static DEFINE_SPINLOCK(param_spinlock);
+static DEFINE_SPINLOCK(global_spinlock);
+
+static LIST_HEAD(global_queue);
+
+static unsigned long global_num = 0;
 
 /*
  * Buffers are freed after this timeout
@@ -209,11 +216,6 @@
 /*----------------------------------------------------------------*/
 
 /*
- * Per-client cache: dm_bufio_cache_size / dm_bufio_client_count
- */
-static unsigned long dm_bufio_cache_size_per_client;
-
-/*
  * The current number of clients.
  */
 static int dm_bufio_client_count;
@@ -224,11 +226,15 @@
 static LIST_HEAD(dm_bufio_all_clients);
 
 /*
- * This mutex protects dm_bufio_cache_size_latch,
- * dm_bufio_cache_size_per_client and dm_bufio_client_count
+ * This mutex protects dm_bufio_cache_size_latch and dm_bufio_client_count
  */
 static DEFINE_MUTEX(dm_bufio_clients_lock);
 
+static struct workqueue_struct *dm_bufio_wq;
+static struct delayed_work dm_bufio_cleanup_old_work;
+static struct work_struct dm_bufio_replacement_work;
+
+
 #ifdef CONFIG_DM_DEBUG_BLOCK_STACK_TRACING
 static void buffer_record_stack(struct dm_buffer *b)
 {
@@ -289,15 +295,23 @@
 
 /*----------------------------------------------------------------*/
 
-static void adjust_total_allocated(unsigned char data_mode, long diff)
+static void adjust_total_allocated(struct dm_buffer *b, bool unlink)
 {
+	unsigned char data_mode;
+	long diff;
+
 	static unsigned long * const class_ptr[DATA_MODE_LIMIT] = {
 		&dm_bufio_allocated_kmem_cache,
 		&dm_bufio_allocated_get_free_pages,
 		&dm_bufio_allocated_vmalloc,
 	};
 
-	spin_lock(&param_spinlock);
+	data_mode = b->data_mode;
+	diff = (long)b->c->block_size;
+	if (unlink)
+		diff = -diff;
+
+	spin_lock(&global_spinlock);
 
 	*class_ptr[data_mode] += diff;
 
@@ -306,7 +320,19 @@
 	if (dm_bufio_current_allocated > dm_bufio_peak_allocated)
 		dm_bufio_peak_allocated = dm_bufio_current_allocated;
 
-	spin_unlock(&param_spinlock);
+	b->accessed = 1;
+
+	if (!unlink) {
+		list_add(&b->global_list, &global_queue);
+		global_num++;
+		if (dm_bufio_current_allocated > dm_bufio_cache_size)
+			queue_work(dm_bufio_wq, &dm_bufio_replacement_work);
+	} else {
+		list_del(&b->global_list);
+		global_num--;
+	}
+
+	spin_unlock(&global_spinlock);
 }
 
 /*
@@ -327,9 +353,6 @@
 			      dm_bufio_default_cache_size);
 		dm_bufio_cache_size_latch = dm_bufio_default_cache_size;
 	}
-
-	dm_bufio_cache_size_per_client = dm_bufio_cache_size_latch /
-					 (dm_bufio_client_count ? : 1);
 }
 
 /*
@@ -435,8 +458,6 @@
 		return NULL;
 	}
 
-	adjust_total_allocated(b->data_mode, (long)c->block_size);
-
 #ifdef CONFIG_DM_DEBUG_BLOCK_STACK_TRACING
 	memset(&b->stack_trace, 0, sizeof(b->stack_trace));
 #endif
@@ -450,8 +471,6 @@
 {
 	struct dm_bufio_client *c = b->c;
 
-	adjust_total_allocated(b->data_mode, -(long)c->block_size);
-
 	free_buffer_data(c, b->data, b->data_mode);
 	kmem_cache_free(c->slab_buffer, b);
 }
@@ -469,6 +488,8 @@
 	list_add(&b->lru_list, &c->lru[dirty]);
 	__insert(b->c, b);
 	b->last_accessed = jiffies;
+
+	adjust_total_allocated(b, false);
 }
 
 /*
@@ -483,6 +504,8 @@
 	c->n_buffers[b->list_mode]--;
 	__remove(b->c, b);
 	list_del(&b->lru_list);
+
+	adjust_total_allocated(b, true);
 }
 
 /*
@@ -492,6 +515,8 @@
 {
 	struct dm_bufio_client *c = b->c;
 
+	b->accessed = 1;
+
 	BUG_ON(!c->n_buffers[b->list_mode]);
 
 	c->n_buffers[b->list_mode]--;
@@ -911,36 +936,6 @@
 }
 
 /*
- * Get writeback threshold and buffer limit for a given client.
- */
-static void __get_memory_limit(struct dm_bufio_client *c,
-			       unsigned long *threshold_buffers,
-			       unsigned long *limit_buffers)
-{
-	unsigned long buffers;
-
-	if (unlikely(READ_ONCE(dm_bufio_cache_size) != dm_bufio_cache_size_latch)) {
-		if (mutex_trylock(&dm_bufio_clients_lock)) {
-			__cache_size_refresh();
-			mutex_unlock(&dm_bufio_clients_lock);
-		}
-	}
-
-	buffers = dm_bufio_cache_size_per_client;
-	if (likely(c->sectors_per_block_bits >= 0))
-		buffers >>= c->sectors_per_block_bits + SECTOR_SHIFT;
-	else
-		buffers /= c->block_size;
-
-	if (buffers < c->minimum_buffers)
-		buffers = c->minimum_buffers;
-
-	*limit_buffers = buffers;
-	*threshold_buffers = mult_frac(buffers,
-				       DM_BUFIO_WRITEBACK_PERCENT, 100);
-}
-
-/*
  * Check if we're over watermark.
  * If we are over threshold_buffers, start freeing buffers.
  * If we're over "limit_buffers", block until we get under the limit.
@@ -948,23 +943,7 @@
 static void __check_watermark(struct dm_bufio_client *c,
 			      struct list_head *write_list)
 {
-	unsigned long threshold_buffers, limit_buffers;
-
-	__get_memory_limit(c, &threshold_buffers, &limit_buffers);
-
-	while (c->n_buffers[LIST_CLEAN] + c->n_buffers[LIST_DIRTY] >
-	       limit_buffers) {
-
-		struct dm_buffer *b = __get_unclaimed_buffer(c);
-
-		if (!b)
-			return;
-
-		__free_buffer_wake(b);
-		cond_resched();
-	}
-
-	if (c->n_buffers[LIST_DIRTY] > threshold_buffers)
+	if (c->n_buffers[LIST_DIRTY] > c->n_buffers[LIST_CLEAN] * DM_BUFIO_WRITEBACK_RATIO)
 		__write_dirty_buffers_async(c, 1, write_list);
 }
 
@@ -1844,6 +1823,74 @@
 	dm_bufio_unlock(c);
 }
 
+static void do_global_cleanup(struct work_struct *w)
+{
+	struct dm_bufio_client *locked_client = NULL;
+	struct dm_bufio_client *current_client;
+	struct dm_buffer *b;
+	unsigned spinlock_hold_count;
+	unsigned long threshold = dm_bufio_cache_size -
+		dm_bufio_cache_size / DM_BUFIO_LOW_WATERMARK_RATIO;
+	unsigned long loops = global_num * 2;
+
+	mutex_lock(&dm_bufio_clients_lock);
+
+	while (1) {
+		cond_resched();
+
+		spin_lock(&global_spinlock);
+		if (unlikely(dm_bufio_current_allocated <= threshold))
+			break;
+
+		spinlock_hold_count = 0;
+get_next:
+		if (!loops--)
+			break;
+		if (unlikely(list_empty(&global_queue)))
+			break;
+		b = list_entry(global_queue.prev, struct dm_buffer, global_list);
+
+		if (b->accessed) {
+			b->accessed = 0;
+			list_move(&b->global_list, &global_queue);
+			if (likely(++spinlock_hold_count < 16))
+				goto get_next;
+			spin_unlock(&global_spinlock);
+			continue;
+		}
+
+		current_client = b->c;
+		if (unlikely(current_client != locked_client)) {
+			if (locked_client)
+				dm_bufio_unlock(locked_client);
+
+			if (!dm_bufio_trylock(current_client)) {
+				spin_unlock(&global_spinlock);
+				dm_bufio_lock(current_client);
+				locked_client = current_client;
+				continue;
+			}
+
+			locked_client = current_client;
+		}
+
+		spin_unlock(&global_spinlock);
+
+		if (unlikely(!__try_evict_buffer(b, GFP_KERNEL))) {
+			spin_lock(&global_spinlock);
+			list_move(&b->global_list, &global_queue);
+			spin_unlock(&global_spinlock);
+		}
+	}
+
+	spin_unlock(&global_spinlock);
+
+	if (locked_client)
+		dm_bufio_unlock(locked_client);
+
+	mutex_unlock(&dm_bufio_clients_lock);
+}
+
 static void cleanup_old_buffers(void)
 {
 	unsigned long max_age_hz = get_max_age_hz();
@@ -1859,14 +1906,11 @@
 	mutex_unlock(&dm_bufio_clients_lock);
 }
 
-static struct workqueue_struct *dm_bufio_wq;
-static struct delayed_work dm_bufio_work;
-
 static void work_fn(struct work_struct *w)
 {
 	cleanup_old_buffers();
 
-	queue_delayed_work(dm_bufio_wq, &dm_bufio_work,
+	queue_delayed_work(dm_bufio_wq, &dm_bufio_cleanup_old_work,
 			   DM_BUFIO_WORK_TIMER_SECS * HZ);
 }
 
@@ -1908,8 +1952,9 @@
 	if (!dm_bufio_wq)
 		return -ENOMEM;
 
-	INIT_DELAYED_WORK(&dm_bufio_work, work_fn);
-	queue_delayed_work(dm_bufio_wq, &dm_bufio_work,
+	INIT_DELAYED_WORK(&dm_bufio_cleanup_old_work, work_fn);
+	INIT_WORK(&dm_bufio_replacement_work, do_global_cleanup);
+	queue_delayed_work(dm_bufio_wq, &dm_bufio_cleanup_old_work,
 			   DM_BUFIO_WORK_TIMER_SECS * HZ);
 
 	return 0;
@@ -1922,7 +1967,8 @@
 {
 	int bug = 0;
 
-	cancel_delayed_work_sync(&dm_bufio_work);
+	cancel_delayed_work_sync(&dm_bufio_cleanup_old_work);
+	flush_workqueue(dm_bufio_wq);
 	destroy_workqueue(dm_bufio_wq);
 
 	if (dm_bufio_client_count) {
diff --git a/drivers/media/dvb-core/dmxdev.c b/drivers/media/dvb-core/dmxdev.c
index 3215948..0975f2a 100644
--- a/drivers/media/dvb-core/dmxdev.c
+++ b/drivers/media/dvb-core/dmxdev.c
@@ -135,7 +135,7 @@
 		feed = list_first_entry(&filter->feed.ts,
 					struct dmxdev_feed, next);
 
-		if (feed->ts->notify_data_read)
+		if (feed->ts && feed->ts->notify_data_read)
 			feed->ts->notify_data_read(
 						feed->ts,
 						bytes_read);
@@ -599,7 +599,8 @@
 		case DMXDEV_TYPE_PES:
 			feed = list_first_entry(&filter->feed.ts,
 						struct dmxdev_feed, next);
-			feed->ts->oob_command(feed->ts, cmd);
+			if (feed->ts && feed->ts->oob_command)
+				feed->ts->oob_command(feed->ts, cmd);
 			break;
 		case DMXDEV_TYPE_NONE:
 			break;
@@ -1351,7 +1352,7 @@
 		feed = list_first_entry(&filter->feed.ts,
 			struct dmxdev_feed, next);
 
-		if (feed->ts->flush_buffer)
+		if (feed->ts && feed->ts->flush_buffer)
 			return feed->ts->flush_buffer(feed->ts, length);
 	} else if (filter->type == DMXDEV_TYPE_SEC &&
 		filter->feed.sec.feed->flush_buffer) {
@@ -2064,7 +2065,7 @@
 			ts_feed = feed;
 			ts_feed->idx_params = *idx_params;
 			if ((dmxdevfilter->state == DMXDEV_STATE_GO) &&
-				ts_feed->ts->set_idx_params)
+				ts_feed->ts && ts_feed->ts->set_idx_params)
 				ret = ts_feed->ts->set_idx_params(
 						ts_feed->ts, idx_params);
 			break;
@@ -2096,7 +2097,7 @@
 
 	list_for_each_entry(feed, &filter->feed.ts, next) {
 		if (feed->pid == scrambling_bits->pid) {
-			if (feed->ts->get_scrambling_bits)
+			if (feed->ts && feed->ts->get_scrambling_bits)
 				return feed->ts->get_scrambling_bits(feed->ts,
 						&scrambling_bits->value);
 			return -EINVAL;
@@ -2131,8 +2132,9 @@
 	mutex_unlock(&ts_buffer->dmxdevfilter->mutex);
 
 	if (ts_buffer->size < free_bytes)
-		ts->ts_insertion_insert_buffer(ts,
-			ts_buffer->buffer, ts_buffer->size);
+		if (ts && ts->ts_insertion_insert_buffer)
+			ts->ts_insertion_insert_buffer(ts,
+				ts_buffer->buffer, ts_buffer->size);
 
 	if (ts_buffer->repetition_time && !ts_buffer->abort)
 		schedule_delayed_work(&ts_buffer->dwork,
@@ -2242,7 +2244,7 @@
 	feed = list_first_entry(&dmxdevfilter->feed.ts,
 				struct dmxdev_feed, next);
 
-	if (first_buffer && feed->ts->ts_insertion_init)
+	if (first_buffer && feed->ts && feed->ts->ts_insertion_init)
 		ret = feed->ts->ts_insertion_init(feed->ts);
 
 	if (!ret) {
@@ -2296,7 +2298,7 @@
 		if (list_empty(&dmxdevfilter->insertion_buffers)) {
 			feed = list_first_entry(&dmxdevfilter->feed.ts,
 						struct dmxdev_feed, next);
-			if (feed->ts->ts_insertion_terminate)
+			if (feed->ts && feed->ts->ts_insertion_terminate)
 				ret = feed->ts->ts_insertion_terminate(
 							feed->ts);
 		}
@@ -2503,7 +2505,7 @@
 					struct dmxdev_feed, next);
 
 		/* Ask for status of decoder's buffer from underlying HW */
-		if (feed->ts->get_decoder_buff_status)
+		if (feed->ts && feed->ts->get_decoder_buff_status)
 			ret = feed->ts->get_decoder_buff_status(
 					feed->ts,
 					dmx_buffer_status);
@@ -3196,7 +3198,8 @@
 				if (!dmxdevfilter->dev->dvr_feeds_count)
 					dmxdevfilter->dev->dvr_feed = NULL;
 			}
-			feed->ts->stop_filtering(feed->ts);
+			if (feed->ts && feed->ts->stop_filtering)
+				feed->ts->stop_filtering(feed->ts);
 		}
 		break;
 	default:
@@ -3219,10 +3222,12 @@
 			filter->feed.sec.feed);
 	case DMXDEV_TYPE_PES:
 		list_for_each_entry(feed, &filter->feed.ts, next) {
-			ret = feed->ts->start_filtering(feed->ts);
-			if (ret < 0) {
-				dvb_dmxdev_feed_stop(filter);
-				return ret;
+			if (feed->ts && feed->ts->start_filtering) {
+				ret = feed->ts->start_filtering(feed->ts);
+				if (ret < 0) {
+					dvb_dmxdev_feed_stop(filter);
+					return ret;
+				}
 			}
 		}
 		break;
@@ -3289,7 +3294,7 @@
 			list_for_each_entry(ts_buffer,
 					&dmxdevfilter->insertion_buffers, next)
 				dvb_dmxdev_cancel_ts_insertion(ts_buffer);
-			if (feed->ts->ts_insertion_terminate)
+			if (feed->ts && feed->ts->ts_insertion_terminate)
 				feed->ts->ts_insertion_terminate(feed->ts);
 		}
 
@@ -3754,7 +3759,7 @@
 			struct dmxdev_feed, next);
 
 		ret = 0;
-		if (feed->ts->ts_insertion_init)
+		if (feed->ts && feed->ts->ts_insertion_init)
 			ret = feed->ts->ts_insertion_init(feed->ts);
 		if (!ret) {
 			list_for_each_entry(ts_buffer,
@@ -3939,7 +3944,7 @@
 
 	list_for_each_entry_safe(feed, tmp, &filter->feed.ts, next) {
 		if (feed->pid == pid) {
-			if (feed->ts != NULL) {
+			if (feed->ts != NULL && feed->ts->stop_filtering) {
 				feed->ts->stop_filtering(feed->ts);
 				filter->dev->demux->release_ts_feed(
 							filter->dev->demux,
@@ -4037,7 +4042,8 @@
 				ts_feed = feed;
 				ts_feed->cipher_ops = *cipher_ops;
 				if (filter->state == DMXDEV_STATE_GO &&
-					ts_feed->ts->set_cipher_ops)
+						ts_feed->ts &&
+						ts_feed->ts->set_cipher_ops)
 					ts_feed->ts->set_cipher_ops(
 						ts_feed->ts, cipher_ops);
 				break;
diff --git a/drivers/media/platform/Kconfig b/drivers/media/platform/Kconfig
index 32bfe00..9a735a2 100644
--- a/drivers/media/platform/Kconfig
+++ b/drivers/media/platform/Kconfig
@@ -152,6 +152,18 @@
 	  In TI Technical Reference Manual this module is referred as
 	  Camera Interface Subsystem (CAMSS).
 
+config VIDEO_V4L2_VIDEOBUF2_CORE
+	tristate "V4L2 Videobuf2 Core"
+	depends on VIDEO_V4L2
+	select VIDEOBUF2_CORE
+	help
+	  This enables videobuf2_core and videobuf2_v4l2
+	  framework.
+
+	  V4L2 videobuf2 core is needed by default for video.
+	  So this will enable v4l2 module dependencies
+	  for video.
+
 endif # V4L_PLATFORM_DRIVERS
 
 menuconfig V4L_MEM2MEM_DRIVERS
diff --git a/drivers/media/platform/msm/cvp/cvp_hfi.c b/drivers/media/platform/msm/cvp/cvp_hfi.c
index 25d71f6..bb520c1 100644
--- a/drivers/media/platform/msm/cvp/cvp_hfi.c
+++ b/drivers/media/platform/msm/cvp/cvp_hfi.c
@@ -826,13 +826,17 @@
 		 */
 		mb();
 		*pb_tx_req_is_set = 0;
-		spin_unlock(&qinfo->hfi_lock);
-		dprintk(CVP_DBG,
-			"%s queue is empty, rx_req = %u, tx_req = %u, read_idx = %u\n",
-			receive_request ? "message" : "debug",
-			queue->qhdr_rx_req, queue->qhdr_tx_req,
-			queue->qhdr_read_idx);
-		return -ENODATA;
+		if (write_idx != queue->qhdr_write_idx) {
+			queue->qhdr_rx_req = 0;
+		} else {
+			spin_unlock(&qinfo->hfi_lock);
+			dprintk(CVP_DBG,
+				"%s queue is empty, rx_req = %u, tx_req = %u, read_idx = %u\n",
+				receive_request ? "message" : "debug",
+				queue->qhdr_rx_req, queue->qhdr_tx_req,
+				queue->qhdr_read_idx);
+			return -ENODATA;
+		}
 	}
 
 	read_ptr = (u32 *)((qinfo->q_array.align_virtual_addr) +
@@ -876,7 +880,7 @@
 		rc = -ENODATA;
 	}
 
-	if (read_idx != write_idx)
+	if (new_read_idx != queue->qhdr_write_idx)
 		queue->qhdr_rx_req = 0;
 	else
 		queue->qhdr_rx_req = receive_request;
@@ -2930,20 +2934,26 @@
 	return -EAGAIN;
 }
 
-static void __process_sys_error(struct iris_hfi_device *device)
+static void print_sfr_message(struct iris_hfi_device *device)
 {
 	struct cvp_hfi_sfr_struct *vsfr = NULL;
+	u32 vsfr_size = 0;
+	void *p = NULL;
 
 	vsfr = (struct cvp_hfi_sfr_struct *)device->sfr.align_virtual_addr;
 	if (vsfr) {
-		void *p = memchr(vsfr->rg_data, '\0', vsfr->bufSize);
+		if (vsfr->bufSize != device->sfr.mem_size) {
+			dprintk(CVP_ERR, "Invalid SFR buf size %d actual %d\n",
+			vsfr->bufSize, device->sfr.mem_size);
+			return;
+		}
+		vsfr_size = vsfr->bufSize - sizeof(u32);
+		p = memchr(vsfr->rg_data, '\0', vsfr_size);
 		/*
 		 * SFR isn't guaranteed to be NULL terminated
-		 * since SYS_ERROR indicates that Iris is in the
-		 * process of crashing.
 		 */
 		if (p == NULL)
-			vsfr->rg_data[vsfr->bufSize - 1] = '\0';
+			vsfr->rg_data[vsfr_size - 1] = '\0';
 
 		dprintk(CVP_ERR, "SFR Message from FW: %s\n",
 				vsfr->rg_data);
@@ -3067,7 +3077,7 @@
 
 	switch (info->response_type) {
 	case HAL_SYS_ERROR:
-		__process_sys_error(device);
+		print_sfr_message(device);
 		break;
 	case HAL_SYS_RELEASE_RESOURCE_DONE:
 		dprintk(CVP_DBG, "Received SYS_RELEASE_RESOURCE\n");
@@ -3194,8 +3204,6 @@
 	}
 
 	if (device->intr_status & CVP_FATAL_INTR_BMSK) {
-		struct cvp_hfi_sfr_struct *vsfr = (struct cvp_hfi_sfr_struct *)
-			device->sfr.align_virtual_addr;
 		struct msm_cvp_cb_info info = {
 			.response_type = HAL_SYS_WATCHDOG_TIMEOUT,
 			.response.cmd = {
@@ -3203,9 +3211,8 @@
 			}
 		};
 
-		if (vsfr)
-			dprintk(CVP_ERR, "SFR Message from FW: %s\n",
-					vsfr->rg_data);
+		print_sfr_message(device);
+
 		if (device->intr_status & CVP_WRAPPER_INTR_MASK_CPU_NOC_BMSK)
 			dprintk(CVP_ERR, "Received Xtensa NOC error\n");
 
diff --git a/drivers/media/platform/msm/cvp/msm_cvp.c b/drivers/media/platform/msm/cvp/msm_cvp.c
index e2a3cb6..36a1375 100644
--- a/drivers/media/platform/msm/cvp/msm_cvp.c
+++ b/drivers/media/platform/msm/cvp/msm_cvp.c
@@ -25,7 +25,7 @@
 		dprintk(tag,
 		"%s: %x : idx %2d fd %d off %d %s size %d flags %#x iova %#x",
 		str, hash32_ptr(inst->session), cbuf->buf.index, cbuf->buf.fd,
-		cbuf->buf.offset, cbuf->smem.dma_buf->name, cbuf->buf.size,
+		cbuf->buf.offset, cbuf->smem.dma_buf->buf_name, cbuf->buf.size,
 		cbuf->buf.flags, cbuf->smem.device_addr);
 	} else {
 		dprintk(tag,
@@ -438,7 +438,7 @@
 
 	dprintk(CVP_DBG,
 	"%s: %x : fd %d %s size %d", "map persist", hash32_ptr(inst->session),
-	cbuf->smem.fd, cbuf->smem.dma_buf->name, cbuf->smem.size);
+	cbuf->smem.fd, cbuf->smem.dma_buf->buf_name, cbuf->smem.size);
 	return rc;
 
 exit:
@@ -2336,7 +2336,7 @@
 				"remove from frame list",
 				hash32_ptr(inst->session),
 				buf->fd, buf->offset, buf->size,
-				buf->dbuf->name);
+				buf->dbuf->buf_name);
 
 			list_del(&frame_buf->list);
 			kmem_cache_free(cvp_driver->frame_buf_cache,
diff --git a/drivers/media/platform/msm/cvp/msm_cvp_common.c b/drivers/media/platform/msm/cvp/msm_cvp_common.c
index f5fa252..f058560 100644
--- a/drivers/media/platform/msm/cvp/msm_cvp_common.c
+++ b/drivers/media/platform/msm/cvp/msm_cvp_common.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2018-2020, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/jiffies.h>
@@ -1825,13 +1825,14 @@
 			dprintk(CVP_DBG,
 			"%s: %x : fd %d %s size %d",
 			"free arp", hash32_ptr(inst->session), buf->smem.fd,
-			buf->smem.dma_buf->name, buf->smem.size);
+			buf->smem.dma_buf->buf_name, buf->smem.size);
 			msm_cvp_smem_free(handle);
 		} else if (buf->buffer_ownership == CLIENT) {
 			dprintk(CVP_DBG,
 			"%s: %x : fd %d %s size %d",
 			"unmap persist", hash32_ptr(inst->session),
-			buf->smem.fd, buf->smem.dma_buf->name, buf->smem.size);
+			buf->smem.fd, buf->smem.dma_buf->buf_name,
+			buf->smem.size);
 			msm_cvp_smem_unmap_dma_buf(inst, &buf->smem);
 		}
 
diff --git a/drivers/media/platform/msm/cvp/msm_v4l2_private.c b/drivers/media/platform/msm/cvp/msm_v4l2_private.c
index b2ad749..a3e65a1 100644
--- a/drivers/media/platform/msm/cvp/msm_v4l2_private.c
+++ b/drivers/media/platform/msm/cvp/msm_v4l2_private.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2018-2020, The Linux Foundation. All rights reserved.
  */
 
 #include "msm_v4l2_private.h"
@@ -612,34 +612,40 @@
 	unsigned int cmd, unsigned long arg)
 {
 	int rc;
-	struct cvp_kmd_arg karg;
+	struct cvp_kmd_arg *karg;
 
 	if (!inst) {
 		dprintk(CVP_ERR, "%s: invalid params\n", __func__);
 		return -EINVAL;
 	}
 
-	memset(&karg, 0, sizeof(struct cvp_kmd_arg));
+	karg = kzalloc(sizeof(*karg), GFP_KERNEL);
+	if (!karg)
+		return -ENOMEM;
 
-	if (convert_from_user(&karg, arg, inst)) {
+	if (convert_from_user(karg, arg, inst)) {
 		dprintk(CVP_ERR, "%s: failed to get from user cmd %x\n",
-			__func__, karg.type);
+			__func__, karg->type);
+		kfree(karg);
 		return -EFAULT;
 	}
 
-	rc = msm_cvp_private((void *)inst, cmd, &karg);
+	rc = msm_cvp_private((void *)inst, cmd, karg);
 	if (rc) {
 		dprintk(CVP_ERR, "%s: failed cmd type %x %d\n",
-			__func__, karg.type, rc);
+			__func__, karg->type, rc);
+		kfree(karg);
 		return rc;
 	}
 
-	if (convert_to_user(&karg, arg)) {
+	if (convert_to_user(karg, arg)) {
 		dprintk(CVP_ERR, "%s: failed to copy to user cmd %x\n",
-			__func__, karg.type);
+			__func__, karg->type);
+		kfree(karg);
 		return -EFAULT;
 	}
 
+	kfree(karg);
 	return rc;
 }
 
diff --git a/drivers/media/platform/msm/dvb/demux/mpq_dmx_plugin_common.c b/drivers/media/platform/msm/dvb/demux/mpq_dmx_plugin_common.c
index d4614dd..c0d4a50 100644
--- a/drivers/media/platform/msm/dvb/demux/mpq_dmx_plugin_common.c
+++ b/drivers/media/platform/msm/dvb/demux/mpq_dmx_plugin_common.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2012-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/init.h>
@@ -1150,8 +1150,8 @@
 		return ret;
 	}
 
-	if (!(dma_buf_flags & ION_FLAG_SECURE) || (sgt->nents != 1)) {
-		MPQ_DVB_ERR_PRINT("Not a contiguous secure buffer\n");
+	if (!(dma_buf_flags & ION_FLAG_SECURE)) {
+		MPQ_DVB_ERR_PRINT("Not a secure buffer\n");
 		return 0;
 	}
 
diff --git a/drivers/media/platform/msm/npu/npu_common.h b/drivers/media/platform/msm/npu/npu_common.h
index 30afa4a..7618c66 100644
--- a/drivers/media/platform/msm/npu/npu_common.h
+++ b/drivers/media/platform/msm/npu/npu_common.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
 /*
- * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
  */
 
 #ifndef _NPU_COMMON_H
@@ -341,5 +341,7 @@
 int unload_fw(struct npu_device *npu_dev);
 int npu_set_bw(struct npu_device *npu_dev, int new_ib, int new_ab);
 int npu_process_kevent(struct npu_client *client, struct npu_kevent *kevt);
-
+int npu_notify_cdsprm_cxlimit_activity(struct npu_device *npu_dev, bool enable);
+int npu_bridge_mbox_send_data(struct npu_host_ctx *host_ctx,
+	struct npu_mbox *mbox, void *data);
 #endif /* _NPU_COMMON_H */
diff --git a/drivers/media/platform/msm/npu/npu_dev.c b/drivers/media/platform/msm/npu/npu_dev.c
index beb1795..f4af1c4 100644
--- a/drivers/media/platform/msm/npu/npu_dev.c
+++ b/drivers/media/platform/msm/npu/npu_dev.c
@@ -17,6 +17,7 @@
 #include <linux/regulator/consumer.h>
 #include <linux/thermal.h>
 #include <linux/soc/qcom/llcc-qcom.h>
+#include <linux/soc/qcom/cdsprm_cxlimit.h>
 #include <soc/qcom/devfreq_devbw.h>
 
 #include "npu_common.h"
@@ -111,7 +112,8 @@
 static int npu_pm_resume(struct device *dev);
 static int __init npu_init(void);
 static void __exit npu_exit(void);
-
+static uint32_t npu_notify_cdsprm_cxlimit_corner(struct npu_device *npu_dev,
+	uint32_t pwr_lvl);
 /* -------------------------------------------------------------------------
  * File Scope Variables
  * -------------------------------------------------------------------------
@@ -387,6 +389,168 @@
  * Power Related
  * -------------------------------------------------------------------------
  */
+static enum npu_power_level cdsprm_corner_to_npu_power_level(
+	enum cdsprm_npu_corner corner)
+{
+	enum npu_power_level pwr_lvl = NPU_PWRLEVEL_TURBO_L1;
+
+	switch (corner) {
+	case CDSPRM_NPU_CLK_OFF:
+		pwr_lvl = NPU_PWRLEVEL_OFF;
+		break;
+	case CDSPRM_NPU_MIN_SVS:
+		pwr_lvl = NPU_PWRLEVEL_MINSVS;
+		break;
+	case CDSPRM_NPU_LOW_SVS:
+		pwr_lvl = NPU_PWRLEVEL_LOWSVS;
+		break;
+	case CDSPRM_NPU_SVS:
+		pwr_lvl = NPU_PWRLEVEL_SVS;
+		break;
+	case CDSPRM_NPU_SVS_L1:
+		pwr_lvl = NPU_PWRLEVEL_SVS_L1;
+		break;
+	case CDSPRM_NPU_NOM:
+		pwr_lvl = NPU_PWRLEVEL_NOM;
+		break;
+	case CDSPRM_NPU_NOM_L1:
+		pwr_lvl = NPU_PWRLEVEL_NOM_L1;
+		break;
+	case CDSPRM_NPU_TURBO:
+		pwr_lvl = NPU_PWRLEVEL_TURBO;
+		break;
+	case CDSPRM_NPU_TURBO_L1:
+	default:
+		pwr_lvl = NPU_PWRLEVEL_TURBO_L1;
+		break;
+	}
+
+	return pwr_lvl;
+}
+
+static enum cdsprm_npu_corner npu_power_level_to_cdsprm_corner(
+	enum npu_power_level pwr_lvl)
+{
+	enum cdsprm_npu_corner corner = CDSPRM_NPU_MIN_SVS;
+
+	switch (pwr_lvl) {
+	case NPU_PWRLEVEL_OFF:
+		corner = CDSPRM_NPU_CLK_OFF;
+		break;
+	case NPU_PWRLEVEL_MINSVS:
+		corner = CDSPRM_NPU_MIN_SVS;
+		break;
+	case NPU_PWRLEVEL_LOWSVS:
+		corner = CDSPRM_NPU_LOW_SVS;
+		break;
+	case NPU_PWRLEVEL_SVS:
+		corner = CDSPRM_NPU_SVS;
+		break;
+	case NPU_PWRLEVEL_SVS_L1:
+		corner = CDSPRM_NPU_SVS_L1;
+		break;
+	case NPU_PWRLEVEL_NOM:
+		corner = CDSPRM_NPU_NOM;
+		break;
+	case NPU_PWRLEVEL_NOM_L1:
+		corner = CDSPRM_NPU_NOM_L1;
+		break;
+	case NPU_PWRLEVEL_TURBO:
+		corner = CDSPRM_NPU_TURBO;
+		break;
+	case NPU_PWRLEVEL_TURBO_L1:
+	default:
+		corner = CDSPRM_NPU_TURBO_L1;
+		break;
+	}
+
+	return corner;
+}
+
+static int npu_set_cdsprm_corner_limit(enum cdsprm_npu_corner corner)
+{
+	struct npu_pwrctrl *pwr;
+	enum npu_power_level pwr_lvl;
+
+	if (!g_npu_dev)
+		return 0;
+
+	pwr = &g_npu_dev->pwrctrl;
+	pwr_lvl = cdsprm_corner_to_npu_power_level(corner);
+	pwr->cdsprm_pwrlevel = pwr_lvl;
+	NPU_DBG("power level from cdsp %d\n", pwr_lvl);
+
+	return npu_set_power_level(g_npu_dev, false);
+}
+
+const struct cdsprm_npu_limit_cbs cdsprm_npu_limit_cbs = {
+	.set_corner_limit = npu_set_cdsprm_corner_limit,
+};
+
+int npu_notify_cdsprm_cxlimit_activity(struct npu_device *npu_dev, bool enable)
+{
+	if (!npu_dev->cxlimit_registered)
+		return 0;
+
+	NPU_DBG("notify cxlimit %s activity\n", enable ? "enable" : "disable");
+
+	return cdsprm_cxlimit_npu_activity_notify(enable ? 1 : 0);
+}
+
+static uint32_t npu_notify_cdsprm_cxlimit_corner(
+	struct npu_device *npu_dev, uint32_t pwr_lvl)
+{
+	uint32_t corner, pwr_lvl_to_set;
+
+	if (!npu_dev->cxlimit_registered)
+		return pwr_lvl;
+
+	corner = npu_power_level_to_cdsprm_corner(pwr_lvl);
+	corner = cdsprm_cxlimit_npu_corner_notify(corner);
+	pwr_lvl_to_set = cdsprm_corner_to_npu_power_level(corner);
+	NPU_DBG("Notify cdsprm %d:%d\n", pwr_lvl,
+			pwr_lvl_to_set);
+
+	return pwr_lvl_to_set;
+}
+
+int npu_cdsprm_cxlimit_init(struct npu_device *npu_dev)
+{
+	bool enabled;
+	int ret = 0;
+
+	enabled = of_property_read_bool(npu_dev->pdev->dev.of_node,
+		"qcom,npu-cxlimit-enable");
+	NPU_DBG("qcom,npu-xclimit-enable is %s\n", enabled ? "true" : "false");
+
+	npu_dev->cxlimit_registered = false;
+	if (enabled) {
+		ret = cdsprm_cxlimit_npu_limit_register(&cdsprm_npu_limit_cbs);
+		if (ret) {
+			NPU_ERR("register cxlimit npu limit failed\n");
+		} else {
+			NPU_DBG("register cxlimit npu limit succeeds\n");
+			npu_dev->cxlimit_registered = true;
+		}
+	}
+
+	return ret;
+}
+
+int npu_cdsprm_cxlimit_deinit(struct npu_device *npu_dev)
+{
+	int ret = 0;
+
+	if (npu_dev->cxlimit_registered) {
+		ret = cdsprm_cxlimit_npu_limit_deregister();
+		if (ret)
+			NPU_ERR("deregister cxlimit npu limit failed\n");
+		npu_dev->cxlimit_registered = false;
+	}
+
+	return ret;
+}
+
 int npu_enable_core_power(struct npu_device *npu_dev)
 {
 	struct npu_pwrctrl *pwr = &npu_dev->pwrctrl;
@@ -530,6 +694,11 @@
 		return 0;
 	}
 
+	/* notify cxlimit to get allowed power level */
+	if ((pwr_level_to_set > pwr->active_pwrlevel) && notify_cxlimit)
+		pwr_level_to_set = npu_notify_cdsprm_cxlimit_corner(
+					npu_dev, pwr_level_to_cdsprm);
+
 	pwr_level_to_set = min(pwr_level_to_set,
 		npu_dev->pwrctrl.cdsprm_pwrlevel);
 
@@ -596,6 +765,12 @@
 		ret = 0;
 	}
 
+	if ((pwr_level_to_cdsprm < pwr->active_pwrlevel) && notify_cxlimit) {
+		npu_notify_cdsprm_cxlimit_corner(npu_dev,
+			pwr_level_to_cdsprm);
+		NPU_DBG("Notify cdsprm(post) %d\n", pwr_level_to_cdsprm);
+	}
+
 	pwr->active_pwrlevel = pwr_level_to_set;
 	return ret;
 }
@@ -708,6 +883,13 @@
 	uint32_t pwrlevel_to_set, pwrlevel_idx;
 
 	pwrlevel_to_set = pwr->active_pwrlevel;
+	if (!post_pil) {
+		pwrlevel_to_set = npu_notify_cdsprm_cxlimit_corner(
+			npu_dev, pwrlevel_to_set);
+		NPU_DBG("Notify cdsprm %d\n", pwrlevel_to_set);
+		pwr->active_pwrlevel = pwrlevel_to_set;
+	}
+
 	pwrlevel_idx = npu_power_level_to_index(npu_dev, pwrlevel_to_set);
 	pwrlevel = &pwr->pwrlevels[pwrlevel_idx];
 	for (i = 0; i < npu_dev->core_clk_num; i++) {
@@ -775,6 +957,11 @@
 	int i, rc = 0;
 	struct npu_clk *core_clks = npu_dev->core_clks;
 
+	if (!post_pil) {
+		npu_notify_cdsprm_cxlimit_corner(npu_dev, NPU_PWRLEVEL_OFF);
+		NPU_DBG("Notify cdsprm clock off\n");
+	}
+
 	for (i = npu_dev->core_clk_num - 1; i >= 0 ; i--) {
 		if (post_pil) {
 			if (!npu_is_post_clock(core_clks[i].clk_name))
@@ -1355,12 +1542,6 @@
 	struct npu_host_ctx *host_ctx = &npu_dev->host_ctx;
 	int rc = 0;
 
-	if (host_ctx->network_num > 0) {
-		NPU_ERR("Need to unload network first\n");
-		mutex_unlock(&npu_dev->dev_lock);
-		return -EINVAL;
-	}
-
 	if (enable) {
 		NPU_DBG("enable fw\n");
 		rc = enable_fw(npu_dev);
@@ -1370,9 +1551,6 @@
 			host_ctx->npu_init_cnt++;
 			NPU_DBG("npu_init_cnt %d\n",
 				host_ctx->npu_init_cnt);
-			/* set npu to lowest power level */
-			if (npu_set_uc_power_level(npu_dev, 1))
-				NPU_WARN("Failed to set uc power level\n");
 		}
 	} else if (host_ctx->npu_init_cnt > 0) {
 		NPU_DBG("disable fw\n");
@@ -1469,7 +1647,7 @@
 	default:
 		ret = npu_host_get_fw_property(client->npu_dev, &prop);
 		if (ret) {
-			NPU_ERR("npu_host_set_fw_property failed\n");
+			NPU_ERR("npu_host_get_fw_property failed\n");
 			return ret;
 		}
 		break;
@@ -2021,6 +2199,10 @@
 	queue_work(host_ctx->wq, &host_ctx->bridge_mbox_work);
 	spin_unlock_irqrestore(&host_ctx->bridge_mbox_lock, flags);
 
+	if (host_ctx->app_crashed)
+		npu_bridge_mbox_send_data(host_ctx,
+					ipcc_mbox_chan->npu_mbox, NULL);
+
 	return 0;
 }
 
@@ -2468,10 +2650,15 @@
 		thermal_cdev_update(tcdev);
 	}
 
+	rc = npu_cdsprm_cxlimit_init(npu_dev);
+	if (rc)
+		goto error_driver_init;
+
 	g_npu_dev = npu_dev;
 
 	return rc;
 error_driver_init:
+	npu_cdsprm_cxlimit_deinit(npu_dev);
 	if (npu_dev->tcdev)
 		thermal_cooling_device_unregister(npu_dev->tcdev);
 	sysfs_remove_group(&npu_dev->device->kobj, &npu_fs_attr_group);
@@ -2496,6 +2683,7 @@
 	npu_dev = platform_get_drvdata(pdev);
 	npu_host_deinit(npu_dev);
 	npu_debugfs_deinit(npu_dev);
+	npu_cdsprm_cxlimit_deinit(npu_dev);
 	if (npu_dev->tcdev)
 		thermal_cooling_device_unregister(npu_dev->tcdev);
 	sysfs_remove_group(&npu_dev->device->kobj, &npu_fs_attr_group);
diff --git a/drivers/media/platform/msm/npu/npu_mgr.c b/drivers/media/platform/msm/npu/npu_mgr.c
index 43c8014..876dc23 100644
--- a/drivers/media/platform/msm/npu/npu_mgr.c
+++ b/drivers/media/platform/msm/npu/npu_mgr.c
@@ -25,9 +25,6 @@
 #define LOG_MSG_TOTAL_SIZE_INDEX 0
 #define LOG_MSG_MSG_ID_INDEX     1
 
-#define NPU_FW_TIMEOUT_POLL_INTERVAL_MS  10
-#define NPU_FW_TIMEOUT_MS                5000
-
 /* -------------------------------------------------------------------------
  * File Scope Function Prototypes
  * -------------------------------------------------------------------------
@@ -39,7 +36,8 @@
 static void npu_update_pwr_work(struct work_struct *work);
 static void turn_off_fw_logging(struct npu_device *npu_dev);
 static int wait_for_status_ready(struct npu_device *npu_dev,
-	uint32_t status_reg, uint32_t status_bits, bool poll);
+	uint32_t status_reg, uint32_t status_bits, uint32_t timeout_ms,
+	bool poll);
 static int wait_npu_cpc_power_off(struct npu_device *npu_dev);
 static struct npu_network *alloc_network(struct npu_host_ctx *ctx,
 	struct npu_client *client);
@@ -87,6 +85,7 @@
 	struct npu_misc_cmd *cmd);
 static struct npu_misc_cmd *npu_find_misc_cmd(struct npu_host_ctx *ctx,
 	uint32_t trans_id);
+static int npu_get_fw_caps(struct npu_device *npu_dev);
 
 /* -------------------------------------------------------------------------
  * Function Definitions - Init / Deinit
@@ -99,7 +98,7 @@
 	uint32_t wait_cnt = 0, max_wait_ms;
 	struct npu_host_ctx *host_ctx = &npu_dev->host_ctx;
 
-	max_wait_ms = NPU_FW_TIMEOUT_MS;
+	max_wait_ms = NPU_FW_ACK_TIMEOUT_MS;
 
 	do {
 		reg_val = npu_tcsr_reg_read(npu_dev, TCSR_NPU_CPC_PWR_ON);
@@ -155,7 +154,8 @@
 
 	/* Keep reading ctrl status until NPU is ready */
 	ret = wait_for_status_ready(npu_dev, REG_NPU_FW_CTRL_STATUS,
-		FW_CTRL_STATUS_MAIN_THREAD_READY_VAL, false);
+		FW_CTRL_STATUS_MAIN_THREAD_READY_VAL,
+		NPU_FW_BRINGUP_TIMEOUT_MS, false);
 	if (ret)
 		goto load_fw_fail;
 
@@ -212,6 +212,37 @@
 	return ret;
 }
 
+static int npu_get_fw_caps(struct npu_device *npu_dev)
+{
+	int ret = 0, i;
+	struct npu_host_ctx *host_ctx = &npu_dev->host_ctx;
+
+	if (host_ctx->fw_caps_valid) {
+		NPU_DBG("cached fw caps available\n");
+		return ret;
+	}
+
+	memset(&host_ctx->fw_caps, 0, sizeof(host_ctx->fw_caps));
+	host_ctx->fw_caps.prop_id = MSM_NPU_PROP_ID_FW_GETCAPS;
+	host_ctx->fw_caps.num_of_params = PROP_PARAM_MAX_SIZE;
+
+	ret = npu_host_get_fw_property(npu_dev, &host_ctx->fw_caps);
+	if (!ret) {
+		NPU_DBG("Get fw caps successfully\n");
+		host_ctx->fw_caps_valid = true;
+
+		for (i = 0; i < host_ctx->fw_caps.num_of_params; i++)
+			NPU_INFO("fw caps %d:%x\n", i,
+				host_ctx->fw_caps.prop_param[i]);
+	} else {
+		/* save the return code */
+		host_ctx->fw_caps_err_code = ret;
+		NPU_ERR("get fw caps failed %d\n", ret);
+	}
+
+	return ret;
+}
+
 static void npu_load_fw_work(struct work_struct *work)
 {
 	int ret;
@@ -225,8 +256,12 @@
 	ret = load_fw_nolock(npu_dev, false);
 	mutex_unlock(&host_ctx->lock);
 
-	if (ret)
+	if (ret) {
 		NPU_ERR("load fw failed %d\n", ret);
+		return;
+	}
+
+	npu_get_fw_caps(npu_dev);
 }
 
 int load_fw(struct npu_device *npu_dev)
@@ -266,6 +301,8 @@
 
 	subsystem_put_local(host_ctx->subsystem_handle);
 	host_ctx->fw_state = FW_UNLOADED;
+	host_ctx->fw_caps_valid = false;
+	host_ctx->fw_caps_err_code = 0;
 	NPU_DBG("fw is unloaded\n");
 	mutex_unlock(&host_ctx->lock);
 
@@ -521,7 +558,8 @@
 		NPU_ERR("NPU_IPC_CMD_NOTIFY_PWR sent failed: %d\n", ret);
 	} else {
 		ret = wait_for_status_ready(npu_dev, REG_NPU_FW_CTRL_STATUS,
-			FW_CTRL_STATUS_PWR_NOTIFY_DONE_VAL, true);
+			FW_CTRL_STATUS_PWR_NOTIFY_DONE_VAL,
+			NPU_FW_ACK_TIMEOUT_MS, true);
 		if (!ret) {
 			reg_val = REGR(npu_dev, REG_NPU_FW_CTRL_STATUS);
 			if (reg_val & FW_CTRL_STATUS_PWR_NOTIFY_ERR_VAL) {
@@ -634,6 +672,25 @@
 	return ret;
 }
 
+static int npu_panic_handler(struct notifier_block *this,
+				unsigned long event, void *ptr)
+{
+	int i;
+	struct npu_host_ctx *host_ctx =
+		container_of(this, struct npu_host_ctx, panic_nb);
+	struct npu_device *npu_dev = host_ctx->npu_dev;
+
+	NPU_INFO("Apps crashed\n");
+
+	for (i = 0; i < NPU_MAX_MBOX_NUM; i++)
+		if (npu_dev->mbox[i].send_data_pending)
+			npu_bridge_mbox_send_data(host_ctx,
+				&npu_dev->mbox[i], NULL);
+
+	host_ctx->app_crashed = true;
+	return NOTIFY_DONE;
+}
+
 static void npu_update_pwr_work(struct work_struct *work)
 {
 	int ret;
@@ -686,6 +743,14 @@
 		goto fail;
 	}
 
+	host_ctx->panic_nb.notifier_call = npu_panic_handler;
+	ret = atomic_notifier_chain_register(&panic_notifier_list,
+		&host_ctx->panic_nb);
+	if (ret) {
+		NPU_ERR("register panic notifier failed\n");
+		goto fail;
+	}
+
 	host_ctx->wq = create_workqueue("npu_general_wq");
 	host_ctx->wq_pri =
 		alloc_workqueue("npu_ipc_wq", WQ_HIGHPRI | WQ_UNBOUND, 0);
@@ -736,6 +801,8 @@
 
 	INIT_LIST_HEAD(&host_ctx->misc_cmd_list);
 	host_ctx->auto_pil_disable = false;
+	host_ctx->fw_caps_valid = false;
+	host_ctx->fw_caps_err_code = 0;
 
 	return 0;
 
@@ -900,7 +967,6 @@
 	ret = subsystem_restart_dev(host_ctx->subsystem_handle);
 	if (ret) {
 		NPU_ERR("npu subsystem restart failed\n");
-		host_ctx->fw_state = FW_UNLOADED;
 		goto fw_start_done;
 	}
 	NPU_INFO("npu subsystem is restarted\n");
@@ -918,7 +984,8 @@
 
 	/* Keep reading ctrl status until NPU is ready */
 	ret = wait_for_status_ready(npu_dev, REG_NPU_FW_CTRL_STATUS,
-		FW_CTRL_STATUS_MAIN_THREAD_READY_VAL, false);
+		FW_CTRL_STATUS_MAIN_THREAD_READY_VAL,
+		NPU_FW_BRINGUP_TIMEOUT_MS, false);
 	if (ret) {
 		NPU_ERR("wait for fw status ready timedout\n");
 		goto fw_start_done;
@@ -930,10 +997,50 @@
 	host_ctx->fw_state = FW_ENABLED;
 
 	ret = npu_enable_irq(npu_dev);
-	if (ret)
+	if (ret) {
 		NPU_ERR("Enable irq failed\n");
+		goto fw_start_done;
+	}
+
+	reinit_completion(&host_ctx->fw_shutdown_done);
+	ret = npu_notify_fw_pwr_state(npu_dev, NPU_PWRLEVEL_OFF, false);
+	if (ret) {
+		NPU_ERR("notify fw pwr off failed\n");
+		goto fw_start_done;
+	}
+
+	ret = wait_for_completion_timeout(
+		&host_ctx->fw_shutdown_done, NW_RSC_TIMEOUT_MS);
+	if (!ret) {
+		NPU_ERR("Wait for fw shutdown timedout\n");
+		goto fw_start_done;
+	} else {
+		ret = wait_npu_cpc_power_off(npu_dev);
+	}
 
 fw_start_done:
+	npu_disable_irq(npu_dev);
+	npu_disable_sys_cache(npu_dev);
+	npu_disable_core_power(npu_dev);
+	npu_notify_aop(npu_dev, false);
+	if (!ret) {
+		host_ctx->fw_state = FW_LOADED;
+	} else {
+		subsystem_put_local(host_ctx->subsystem_handle);
+		host_ctx->fw_state = FW_UNLOADED;
+		host_ctx->wdg_irq_sts = 0;
+		host_ctx->err_irq_sts = 0;
+	}
+
+	/*
+	 * if npu is enabled by mbox, change it to false and
+	 * reduce the ref_cnt accordingly since npu is restarted.
+	 */
+	if (host_ctx->bridge_mbox_pwr_on) {
+		host_ctx->bridge_mbox_pwr_on = false;
+		host_ctx->fw_ref_cnt--;
+	}
+
 	/* mark all existing network to error state */
 	for (i = 0; i < MAX_LOADED_NETWORK; i++) {
 		network = &host_ctx->networks[i];
@@ -1024,7 +1131,7 @@
 	NPU_DBG("Exit disable fw work\n");
 }
 
-static int npu_bridge_mbox_send_data(struct npu_host_ctx *host_ctx,
+int npu_bridge_mbox_send_data(struct npu_host_ctx *host_ctx,
 	struct npu_mbox *mbox, void *data)
 {
 	NPU_DBG("Generating IRQ for client_id: %u; signal_id: %u\n",
@@ -1124,14 +1231,15 @@
 }
 
 static int wait_for_status_ready(struct npu_device *npu_dev,
-	uint32_t status_reg, uint32_t status_bits, bool poll)
+	uint32_t status_reg, uint32_t status_bits, uint32_t timeout_ms,
+	bool poll)
 {
 	uint32_t ctrl_sts = 0;
 	uint32_t wait_cnt = 0, max_wait_ms;
 	struct npu_host_ctx *host_ctx = &npu_dev->host_ctx;
 
 	max_wait_ms = (host_ctx->fw_dbg_mode & FW_DBG_MODE_INC_TIMEOUT) ?
-		NW_DEBUG_TIMEOUT_MS : NPU_FW_TIMEOUT_MS;
+		NW_DEBUG_TIMEOUT_MS : timeout_ms;
 	if (poll)
 		wait_cnt = max_wait_ms * 10;
 	else
@@ -2084,7 +2192,13 @@
 		break;
 	default:
 		NPU_ERR("unsupported property %d\n", property->prop_id);
-		goto set_prop_exit;
+		goto free_prop_packet;
+	}
+
+	ret = enable_fw(npu_dev);
+	if (ret) {
+		NPU_ERR("failed to enable fw\n");
+		goto free_prop_packet;
 	}
 
 	prop_packet->header.cmd_type = NPU_IPC_CMD_SET_PROPERTY;
@@ -2099,16 +2213,17 @@
 	for (i = 0; i < num_of_params; i++)
 		prop_packet->prop_param[i] = property->prop_param[i];
 
-	mutex_lock(&host_ctx->lock);
 	misc_cmd = npu_alloc_misc_cmd(host_ctx);
 	if (!misc_cmd) {
 		NPU_ERR("Can't allocate misc_cmd\n");
 		ret = -ENOMEM;
-		goto set_prop_exit;
+		goto disable_fw;
 	}
 
 	misc_cmd->cmd_type = NPU_IPC_CMD_SET_PROPERTY;
 	misc_cmd->trans_id = prop_packet->header.trans_id;
+
+	mutex_lock(&host_ctx->lock);
 	npu_queue_misc_cmd(host_ctx, misc_cmd);
 
 	ret = npu_send_misc_cmd(npu_dev, IPC_QUEUE_APPS_EXEC,
@@ -2142,10 +2257,13 @@
 
 free_misc_cmd:
 	npu_dequeue_misc_cmd(host_ctx, misc_cmd);
-	npu_free_misc_cmd(host_ctx, misc_cmd);
-set_prop_exit:
 	mutex_unlock(&host_ctx->lock);
+	npu_free_misc_cmd(host_ctx, misc_cmd);
+disable_fw:
+	disable_fw(npu_dev);
+free_prop_packet:
 	kfree(prop_packet);
+
 	return ret;
 }
 
@@ -2163,6 +2281,15 @@
 		NPU_ERR("Not supproted fw property id %x\n",
 			property->prop_id);
 		return -EINVAL;
+	} else if (property->prop_id == MSM_NPU_PROP_ID_FW_GETCAPS) {
+		if (host_ctx->fw_caps_valid) {
+			NPU_DBG("return cached fw_caps\n");
+			memcpy(property, &host_ctx->fw_caps, sizeof(*property));
+			return 0;
+		} else if (host_ctx->fw_caps_err_code) {
+			NPU_DBG("return cached error code\n");
+			return host_ctx->fw_caps_err_code;
+		}
 	}
 
 	num_of_params = min_t(uint32_t, property->num_of_params,
@@ -2173,6 +2300,12 @@
 	if (!prop_packet)
 		return -ENOMEM;
 
+	ret = enable_fw(npu_dev);
+	if (ret) {
+		NPU_ERR("failed to enable fw\n");
+		goto free_prop_packet;
+	}
+
 	prop_packet->header.cmd_type = NPU_IPC_CMD_GET_PROPERTY;
 	prop_packet->header.size = pkt_size;
 	prop_packet->header.trans_id =
@@ -2185,16 +2318,17 @@
 	for (i = 0; i < num_of_params; i++)
 		prop_packet->prop_param[i] = property->prop_param[i];
 
-	mutex_lock(&host_ctx->lock);
 	misc_cmd = npu_alloc_misc_cmd(host_ctx);
 	if (!misc_cmd) {
 		NPU_ERR("Can't allocate misc_cmd\n");
 		ret = -ENOMEM;
-		goto get_prop_exit;
+		goto disable_fw;
 	}
 
 	misc_cmd->cmd_type = NPU_IPC_CMD_GET_PROPERTY;
 	misc_cmd->trans_id = prop_packet->header.trans_id;
+
+	mutex_lock(&host_ctx->lock);
 	npu_queue_misc_cmd(host_ctx, misc_cmd);
 
 	ret = npu_send_misc_cmd(npu_dev, IPC_QUEUE_APPS_EXEC,
@@ -2223,26 +2357,43 @@
 	}
 
 	ret = misc_cmd->ret_status;
+	prop_from_fw = &misc_cmd->u.prop;
 	if (!ret) {
 		/* Return prop data retrieved from fw to user */
-		prop_from_fw = &misc_cmd->u.prop;
 		if (property->prop_id == prop_from_fw->prop_id &&
 			property->network_hdl == prop_from_fw->network_hdl) {
+			num_of_params = min_t(uint32_t,
+				prop_from_fw->num_of_params,
+				(uint32_t)PROP_PARAM_MAX_SIZE);
 			property->num_of_params = num_of_params;
 			for (i = 0; i < num_of_params; i++)
 				property->prop_param[i] =
 					prop_from_fw->prop_param[i];
+		} else {
+			NPU_WARN("Not Match: id %x:%x hdl %x:%x\n",
+				property->prop_id, prop_from_fw->prop_id,
+				property->network_hdl,
+				prop_from_fw->network_hdl);
+			property->num_of_params = 0;
 		}
 	} else {
 		NPU_ERR("get fw property failed %d\n", ret);
+		NPU_ERR("prop_id: %x\n", prop_from_fw->prop_id);
+		NPU_ERR("network_hdl: %x\n", prop_from_fw->network_hdl);
+		NPU_ERR("param_num: %x\n", prop_from_fw->num_of_params);
+		for (i = 0; i < prop_from_fw->num_of_params; i++)
+			NPU_ERR("%x\n", prop_from_fw->prop_param[i]);
 	}
 
 free_misc_cmd:
 	npu_dequeue_misc_cmd(host_ctx, misc_cmd);
-	npu_free_misc_cmd(host_ctx, misc_cmd);
-get_prop_exit:
 	mutex_unlock(&host_ctx->lock);
+	npu_free_misc_cmd(host_ctx, misc_cmd);
+disable_fw:
+	disable_fw(npu_dev);
+free_prop_packet:
 	kfree(prop_packet);
+
 	return ret;
 }
 
@@ -2573,6 +2724,9 @@
 		return -EINVAL;
 	}
 
+	if (atomic_inc_return(&host_ctx->network_execute_cnt) == 1)
+		npu_notify_cdsprm_cxlimit_activity(npu_dev, true);
+
 	if (!network->is_active) {
 		NPU_ERR("network is not active\n");
 		ret = -EINVAL;
@@ -2723,6 +2877,9 @@
 		host_error_hdlr(npu_dev, true);
 	}
 
+	if (atomic_dec_return(&host_ctx->network_execute_cnt) == 0)
+		npu_notify_cdsprm_cxlimit_activity(npu_dev, false);
+
 	return ret;
 }
 
diff --git a/drivers/media/platform/msm/npu/npu_mgr.h b/drivers/media/platform/msm/npu/npu_mgr.h
index 049552a..e44fb38 100644
--- a/drivers/media/platform/msm/npu/npu_mgr.h
+++ b/drivers/media/platform/msm/npu/npu_mgr.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
 /*
- * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
  */
 
 #ifndef _NPU_MGR_H
@@ -28,6 +28,9 @@
 #define NW_DEBUG_TIMEOUT msecs_to_jiffies(NW_DEBUG_TIMEOUT_MS)
 #define NPU_MBOX_IDLE_TIMEOUT_MS 500 /* set for 500ms */
 #define NPU_MBOX_IDLE_TIMEOUT msecs_to_jiffies(NPU_MBOX_IDLE_TIMEOUT_MS)
+#define NPU_FW_TIMEOUT_POLL_INTERVAL_MS 10
+#define NPU_FW_ACK_TIMEOUT_MS 5000
+#define NPU_FW_BRINGUP_TIMEOUT_MS (1000 * 60) /* set for 60 seconds */
 #define FIRMWARE_VERSION 0x00001000
 #define MAX_LOADED_NETWORK 32
 #define NPU_IPC_BUF_LENGTH 4096
@@ -123,18 +126,24 @@
 	uint32_t fw_dbg_mode;
 	uint32_t exec_flags_override;
 	atomic_t ipc_trans_id;
-	atomic_t network_exeute_cnt;
+	atomic_t network_execute_cnt;
 
 	uint32_t err_irq_sts;
 	uint32_t wdg_irq_sts;
 	bool fw_error;
 	bool cancel_work;
+	bool app_crashed;
 	struct notifier_block nb;
+	struct notifier_block panic_nb;
 	void *notif_hdle;
 	spinlock_t bridge_mbox_lock;
 	bool bridge_mbox_pwr_on;
 	void *ipc_msg_buf;
 	struct list_head misc_cmd_list;
+
+	struct msm_npu_property fw_caps;
+	bool fw_caps_valid;
+	uint32_t fw_caps_err_code;
 };
 
 struct npu_device;
diff --git a/drivers/media/radio/rtc6226/radio-rtc6226-common.c b/drivers/media/radio/rtc6226/radio-rtc6226-common.c
index 7b8750a..dfc8096 100644
--- a/drivers/media/radio/rtc6226/radio-rtc6226-common.c
+++ b/drivers/media/radio/rtc6226/radio-rtc6226-common.c
@@ -438,8 +438,10 @@
 		if (!wait_for_completion_timeout(&radio->completion,
 			msecs_to_jiffies(WAIT_TIMEOUT_MSEC)))
 			FMDERR("%s: didn't receive STD for tune\n", __func__);
-		else
+		else {
 			FMDERR("%s: received STD for tune\n", __func__);
+			rtc6226_q_event(radio, RTC6226_EVT_TUNE_SUCC);
+		}
 	}
 seek_cancelled:
 	rtc6226_q_event(radio, RTC6226_EVT_SEEK_COMPLETE);
diff --git a/drivers/media/v4l2-core/videobuf-dma-contig.c b/drivers/media/v4l2-core/videobuf-dma-contig.c
index f461325..a7a9bcc 100644
--- a/drivers/media/v4l2-core/videobuf-dma-contig.c
+++ b/drivers/media/v4l2-core/videobuf-dma-contig.c
@@ -160,6 +160,7 @@
 static int videobuf_dma_contig_user_get(struct videobuf_dma_contig_memory *mem,
 					struct videobuf_buffer *vb)
 {
+	unsigned long untagged_baddr = untagged_addr(vb->baddr);
 	struct mm_struct *mm = current->mm;
 	struct vm_area_struct *vma;
 	unsigned long prev_pfn, this_pfn;
@@ -167,22 +168,22 @@
 	unsigned int offset;
 	int ret;
 
-	offset = vb->baddr & ~PAGE_MASK;
+	offset = untagged_baddr & ~PAGE_MASK;
 	mem->size = PAGE_ALIGN(vb->size + offset);
 	ret = -EINVAL;
 
 	down_read(&mm->mmap_sem);
 
-	vma = find_vma(mm, vb->baddr);
+	vma = find_vma(mm, untagged_baddr);
 	if (!vma)
 		goto out_up;
 
-	if ((vb->baddr + mem->size) > vma->vm_end)
+	if ((untagged_baddr + mem->size) > vma->vm_end)
 		goto out_up;
 
 	pages_done = 0;
 	prev_pfn = 0; /* kill warning */
-	user_address = vb->baddr;
+	user_address = untagged_baddr;
 
 	while (pages_done < (mem->size >> PAGE_SHIFT)) {
 		ret = follow_pfn(vma, user_address, &this_pfn);
diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
index 986061f..1679b66 100644
--- a/drivers/misc/Kconfig
+++ b/drivers/misc/Kconfig
@@ -604,6 +604,15 @@
 	  driver initializes gpios, enables/disables LDOs that are part of
 	  XR standalone reference device.
 
+config QTI_MAXIM_FAN_CONTROLLER
+	tristate "QTI MAXIM fan controller  driver support"
+	help
+	  This driver supports the Maxim(MAX31760) fan controller.
+	  This driver exposes i2c control to control registers for
+	  setting different PWM, different temperature settings etc.
+	  Also, this driver initializes the power for the fan controller
+	  and exposes sysfs node to control different speeds of fan.
+
 source "drivers/misc/c2port/Kconfig"
 source "drivers/misc/eeprom/Kconfig"
 source "drivers/misc/cb710/Kconfig"
@@ -618,6 +627,7 @@
 source "drivers/misc/cxl/Kconfig"
 source "drivers/misc/ocxl/Kconfig"
 source "drivers/misc/cardreader/Kconfig"
+source "drivers/misc/fpr_FingerprintCard/Kconfig"
 endmenu
 
 config OKL4_USER_VIPC
diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
index 4968aeb..b79e632 100644
--- a/drivers/misc/Makefile
+++ b/drivers/misc/Makefile
@@ -72,5 +72,6 @@
 obj-$(CONFIG_OKL4_GUEST)        += okl4-panic.o
 obj-$(CONFIG_OKL4_LINK_SHBUF)    += okl4-link-shbuf.o
 obj-$(CONFIG_WIGIG_SENSING_SPI)	+= wigig_sensing.o
+obj-$(CONFIG_QTI_MAXIM_FAN_CONTROLLER) += max31760.o
 obj-$(CONFIG_QTI_XR_SMRTVWR_MISC) += qxr-stdalonevwr.o
-
+obj-$(CONFIG_FPR_FPC)		+= fpr_FingerprintCard/
diff --git a/drivers/misc/fpr_FingerprintCard/Kconfig b/drivers/misc/fpr_FingerprintCard/Kconfig
new file mode 100644
index 0000000..65b0ba5
--- /dev/null
+++ b/drivers/misc/fpr_FingerprintCard/Kconfig
@@ -0,0 +1,9 @@
+# SPDX-License-Identifier: GPL-2.0-only
+
+config FPR_FPC
+	tristate "FPC fingerprint sensor support"
+	depends on SPI_MASTER
+	help
+	  support fpc1020 and fpc1028.
+	  This driver can also be built as a module.  If so, the module
+	  will be called fpc1020.
diff --git a/drivers/misc/fpr_FingerprintCard/Makefile b/drivers/misc/fpr_FingerprintCard/Makefile
new file mode 100644
index 0000000..58bbc70
--- /dev/null
+++ b/drivers/misc/fpr_FingerprintCard/Makefile
@@ -0,0 +1,6 @@
+# SPDX-License-Identifier: GPL-2.0-only
+
+# Makefile for FingerprintCard fingerprint driver
+
+fpc1020-objs := fpc1020_platform_tee.o
+obj-$(CONFIG_FPR_FPC) += fpc1020.o
diff --git a/drivers/misc/fpr_FingerprintCard/fpc1020_platform_tee.c b/drivers/misc/fpr_FingerprintCard/fpc1020_platform_tee.c
new file mode 100644
index 0000000..d49d857
--- /dev/null
+++ b/drivers/misc/fpr_FingerprintCard/fpc1020_platform_tee.c
@@ -0,0 +1,599 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * FPC1020 Fingerprint sensor device driver
+ *
+ * This driver will control the platform resources that the FPC fingerprint
+ * sensor needs to operate. The major things are probing the sensor to check
+ * that it is actually connected and let the Kernel know this and with that also
+ * enabling and disabling of regulators, controlling GPIOs such as sensor reset
+ * line, sensor IRQ line.
+ *
+ * The driver will expose most of its available functionality in sysfs which
+ * enables dynamic control of these features from eg. a user space process.
+ *
+ * The sensor's IRQ events will be pushed to Kernel's event handling system and
+ * are exposed in the drivers event node.
+ *
+ * This driver will NOT send any commands to the sensor it only controls the
+ * electrical parts.
+ *
+ *
+ * Copyright (c) 2015 Fingerprint Cards AB <tech@fingerprints.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License Version 2
+ * as published by the Free Software Foundation.
+ */
+
+#include <linux/atomic.h>
+#include <linux/delay.h>
+#include <linux/gpio.h>
+#include <linux/interrupt.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/mutex.h>
+#include <linux/of.h>
+#include <linux/of_gpio.h>
+#include <linux/platform_device.h>
+#include <linux/regulator/consumer.h>
+#include <linux/pinctrl/consumer.h>
+
+
+#define FPC_TTW_HOLD_TIME		1000
+#define RESET_LOW_SLEEP_MIN_US		5000
+#define RESET_LOW_SLEEP_MAX_US		(RESET_LOW_SLEEP_MIN_US + 100)
+#define RESET_HIGH_SLEEP1_MIN_US	100
+#define RESET_HIGH_SLEEP1_MAX_US	(RESET_HIGH_SLEEP1_MIN_US + 100)
+#define RESET_HIGH_SLEEP2_MIN_US	5000
+#define RESET_HIGH_SLEEP2_MAX_US	(RESET_HIGH_SLEEP2_MIN_US + 100)
+#define PWR_ON_SLEEP_MIN_US		100
+#define PWR_ON_SLEEP_MAX_US		(PWR_ON_SLEEP_MIN_US + 900)
+#define NUM_PARAMS_REG_ENABLE_SET	2
+
+#define RELEASE_WAKELOCK_W_V		"release_wakelock_with_verification"
+#define RELEASE_WAKELOCK		"release_wakelock"
+#define START_IRQS_RECEIVED_CNT		"start_irqs_received_counter"
+
+static const char * const pctl_names[] = {
+	"fpc1020_reset_reset",
+	"fpc1020_reset_active",
+	"fpc1020_irq_active",
+};
+
+struct vreg_config {
+	char *name;
+	unsigned long vmin;
+	unsigned long vmax;
+	int ua_load;
+};
+
+static const struct vreg_config vreg_conf[] = {
+	{ "vdd_ana", 1800000UL, 1800000UL, 6000, },
+	{ "vcc_spi", 1800000UL, 1800000UL, 10, },
+	{ "vdd_io", 1800000UL, 1800000UL, 6000, },
+};
+
+struct fpc1020_data {
+	struct device *dev;
+	struct pinctrl *fingerprint_pinctrl;
+	struct pinctrl_state *pinctrl_state[ARRAY_SIZE(pctl_names)];
+	struct regulator *vreg[ARRAY_SIZE(vreg_conf)];
+	struct wakeup_source ttw_wl;
+	struct mutex lock; /* To set/get exported values in sysfs */
+	int irq_gpio;
+	int rst_gpio;
+	int nbr_irqs_received;
+	int nbr_irqs_received_counter_start;
+	bool prepared;
+	atomic_t wakeup_enabled; /* Used both in ISR and non-ISR */
+};
+
+static int vreg_setup(struct fpc1020_data *fpc1020, const char *name,
+	bool enable)
+{
+	size_t i;
+	int rc;
+	struct regulator *vreg;
+	struct device *dev = fpc1020->dev;
+
+	for (i = 0; i < ARRAY_SIZE(vreg_conf); i++) {
+		const char *n = vreg_conf[i].name;
+
+		if (!memcmp(n, name, strlen(n)))
+			goto found;
+	}
+
+	dev_err(dev, "Regulator %s not found\n", name);
+
+	return -EINVAL;
+
+found:
+	vreg = fpc1020->vreg[i];
+	if (enable) {
+		if (!vreg) {
+			vreg = devm_regulator_get(dev, name);
+			if (IS_ERR_OR_NULL(vreg)) {
+				dev_info(dev,
+					"No regulator %s, maybe fixed regulator\n",
+					name);
+				return 0;
+			}
+		}
+
+		if (regulator_count_voltages(vreg) > 0) {
+			rc = regulator_set_voltage(vreg, vreg_conf[i].vmin,
+					vreg_conf[i].vmax);
+			if (rc)
+				dev_err(dev,
+					"Unable to set voltage on %s, %d\n",
+					name, rc);
+		}
+
+		rc = regulator_set_load(vreg, vreg_conf[i].ua_load);
+		if (rc < 0)
+			dev_err(dev, "Unable to set current on %s, %d\n",
+					name, rc);
+
+		rc = regulator_enable(vreg);
+		if (rc) {
+			dev_err(dev, "error enabling %s: %d\n", name, rc);
+			vreg = NULL;
+		}
+		fpc1020->vreg[i] = vreg;
+	} else {
+		if (vreg) {
+			if (regulator_is_enabled(vreg)) {
+				regulator_disable(vreg);
+				dev_dbg(dev, "disabled %s\n", name);
+			}
+			fpc1020->vreg[i] = NULL;
+		}
+		rc = 0;
+	}
+
+	return rc;
+}
+
+/*
+ * sysfs node for controlling clocks.
+ *
+ * This is disabled in platform variant of this driver but kept for
+ * backwards compatibility. Only prints a debug print that it is
+ * disabled.
+ */
+static ssize_t clk_enable_store(struct device *dev,
+	struct device_attribute *attr,
+	const char *buf, size_t count)
+{
+	dev_dbg(dev,
+		"clk_enable sysfs node not enabled in platform driver\n");
+
+	return count;
+}
+static DEVICE_ATTR_WO(clk_enable);
+
+/*
+ * Will try to select the set of pins (GPIOS) defined in a pin control node of
+ * the device tree named @p name.
+ *
+ * The node can contain several eg. GPIOs that is controlled when selecting it.
+ * The node may activate or deactivate the pins it contains, the action is
+ * defined in the device tree node itself and not here. The states used
+ * internally is fetched at probe time.
+ *
+ * @see pctl_names
+ * @see fpc1020_probe
+ */
+static int select_pin_ctl(struct fpc1020_data *fpc1020, const char *name)
+{
+	size_t i;
+	int rc;
+	struct device *dev = fpc1020->dev;
+
+	for (i = 0; i < ARRAY_SIZE(pctl_names); i++) {
+		const char *n = pctl_names[i];
+
+		if (!memcmp(n, name, strlen(n))) {
+			rc = pinctrl_select_state(fpc1020->fingerprint_pinctrl,
+					fpc1020->pinctrl_state[i]);
+			if (rc)
+				dev_err(dev, "cannot select '%s'\n", name);
+			else
+				dev_dbg(dev, "Selected '%s'\n", name);
+
+			return rc;
+		}
+	}
+
+	dev_err(dev, "%s:'%s' not found\n", __func__, name);
+	return -EINVAL;
+}
+
+static ssize_t pinctl_set_store(struct device *dev,
+	struct device_attribute *attr, const char *buf, size_t count)
+{
+	struct fpc1020_data *fpc1020 = dev_get_drvdata(dev);
+	int rc;
+
+	mutex_lock(&fpc1020->lock);
+	rc = select_pin_ctl(fpc1020, buf);
+	mutex_unlock(&fpc1020->lock);
+
+	return rc ? rc : count;
+}
+static DEVICE_ATTR_WO(pinctl_set);
+
+static ssize_t regulator_enable_store(struct device *dev,
+	struct device_attribute *attr, const char *buf, size_t count)
+{
+	struct fpc1020_data *fpc1020 = dev_get_drvdata(dev);
+	char op;
+	char name[16];
+	int rc;
+	bool enable;
+
+	if (sscanf(buf, "%15[^,],%c", name, &op) != NUM_PARAMS_REG_ENABLE_SET)
+		return -EINVAL;
+	if (op == 'e')
+		enable = true;
+	else if (op == 'd')
+		enable = false;
+	else
+		return -EINVAL;
+
+	mutex_lock(&fpc1020->lock);
+	rc = vreg_setup(fpc1020, name, enable);
+	mutex_unlock(&fpc1020->lock);
+
+	return rc ? rc : count;
+}
+static DEVICE_ATTR_WO(regulator_enable);
+
+static void hw_reset(struct fpc1020_data *fpc1020)
+{
+	(void)gpio_get_value(fpc1020->irq_gpio);
+
+	select_pin_ctl(fpc1020, "fpc1020_reset_active");
+
+	usleep_range(RESET_HIGH_SLEEP1_MIN_US, RESET_HIGH_SLEEP1_MAX_US);
+
+	select_pin_ctl(fpc1020, "fpc1020_reset_reset");
+
+	usleep_range(RESET_LOW_SLEEP_MIN_US, RESET_LOW_SLEEP_MAX_US);
+
+	select_pin_ctl(fpc1020, "fpc1020_reset_active");
+
+	usleep_range(RESET_HIGH_SLEEP2_MIN_US, RESET_HIGH_SLEEP2_MAX_US);
+
+	(void)gpio_get_value(fpc1020->irq_gpio);
+}
+
+static ssize_t hw_reset_store(struct device *dev,
+	struct device_attribute *attr, const char *buf, size_t count)
+{
+	struct fpc1020_data *fpc1020 = dev_get_drvdata(dev);
+
+	if (!memcmp(buf, "reset", strlen("reset"))) {
+		mutex_lock(&fpc1020->lock);
+		hw_reset(fpc1020);
+		mutex_unlock(&fpc1020->lock);
+		return count;
+	}
+
+	return -EINVAL;
+}
+static DEVICE_ATTR_WO(hw_reset);
+
+/*
+ * Will setup GPIOs, and regulators to correctly initialize the touch sensor to
+ * be ready for work.
+ *
+ * In the correct order according to the sensor spec this function will
+ * enable/disable regulators, and reset line, all to set the sensor in a
+ * correct power on or off state "electrical" wise.
+ *
+ * @see  device_prepare_set
+ * @note This function will not send any commands to the sensor it will only
+ *       control it "electrically".
+ */
+static void device_prepare(struct fpc1020_data *fpc1020, bool enable)
+{
+	mutex_lock(&fpc1020->lock);
+	if (enable && !fpc1020->prepared) {
+		fpc1020->prepared = true;
+		select_pin_ctl(fpc1020, "fpc1020_reset_reset");
+
+		vreg_setup(fpc1020, "vcc_spi", true);
+		vreg_setup(fpc1020, "vdd_io", true);
+		vreg_setup(fpc1020, "vdd_ana", true);
+
+		usleep_range(PWR_ON_SLEEP_MIN_US, PWR_ON_SLEEP_MAX_US);
+
+		select_pin_ctl(fpc1020, "fpc1020_reset_active");
+	} else if (!enable && fpc1020->prepared) {
+		select_pin_ctl(fpc1020, "fpc1020_reset_reset");
+
+		usleep_range(PWR_ON_SLEEP_MIN_US, PWR_ON_SLEEP_MAX_US);
+
+		vreg_setup(fpc1020, "vdd_ana", false);
+		vreg_setup(fpc1020, "vdd_io", false);
+		vreg_setup(fpc1020, "vcc_spi", false);
+
+		fpc1020->prepared = false;
+	}
+	mutex_unlock(&fpc1020->lock);
+}
+
+/*
+ * sysfs node to enable/disable (power up/power down) the touch sensor
+ *
+ * @see device_prepare
+ */
+static ssize_t device_prepare_store(struct device *dev,
+	struct device_attribute *attr, const char *buf, size_t count)
+{
+	int rc = 0;
+	struct fpc1020_data *fpc1020 = dev_get_drvdata(dev);
+
+	if (!memcmp(buf, "enable", strlen("enable")))
+		device_prepare(fpc1020, true);
+	else if (!memcmp(buf, "disable", strlen("disable")))
+		device_prepare(fpc1020, false);
+	else
+		rc = -EINVAL;
+
+	return rc ? rc : count;
+}
+static DEVICE_ATTR_WO(device_prepare);
+
+/**
+ * sysfs node for controlling whether the driver is allowed
+ * to wake up the platform on interrupt.
+ */
+static ssize_t wakeup_enable_store(struct device *dev,
+	struct device_attribute *attr, const char *buf, size_t count)
+{
+	struct fpc1020_data *fpc1020 = dev_get_drvdata(dev);
+	ssize_t ret = count;
+
+	mutex_lock(&fpc1020->lock);
+	if (!memcmp(buf, "enable", strlen("enable")))
+		atomic_set(&fpc1020->wakeup_enabled, 1);
+	else if (!memcmp(buf, "disable", strlen("disable")))
+		atomic_set(&fpc1020->wakeup_enabled, 0);
+	else
+		ret = -EINVAL;
+	mutex_unlock(&fpc1020->lock);
+
+	return ret;
+}
+static DEVICE_ATTR_WO(wakeup_enable);
+
+
+/*
+ * sysfs node for controlling the wakelock.
+ */
+static ssize_t handle_wakelock_store(struct device *dev,
+	struct device_attribute *attr, const char *buf, size_t count)
+{
+	struct  fpc1020_data *fpc1020 = dev_get_drvdata(dev);
+	ssize_t ret = count;
+
+	mutex_lock(&fpc1020->lock);
+	if (!memcmp(buf, RELEASE_WAKELOCK_W_V,
+		min(count, strlen(RELEASE_WAKELOCK_W_V)))) {
+		if (fpc1020->nbr_irqs_received_counter_start ==
+				fpc1020->nbr_irqs_received) {
+			__pm_relax(&fpc1020->ttw_wl);
+		} else {
+			dev_dbg(dev, "Ignore releasing of wakelock %d != %d",
+			fpc1020->nbr_irqs_received_counter_start,
+			fpc1020->nbr_irqs_received);
+		}
+	} else if (!memcmp(buf, RELEASE_WAKELOCK, min(count,
+				strlen(RELEASE_WAKELOCK)))) {
+		__pm_relax(&fpc1020->ttw_wl);
+	} else if (!memcmp(buf, START_IRQS_RECEIVED_CNT,
+			min(count, strlen(START_IRQS_RECEIVED_CNT)))) {
+		fpc1020->nbr_irqs_received_counter_start =
+		fpc1020->nbr_irqs_received;
+	} else
+		ret = -EINVAL;
+	mutex_unlock(&fpc1020->lock);
+
+	return ret;
+}
+static DEVICE_ATTR_WO(handle_wakelock);
+
+/*
+ * sysf node to check the interrupt status of the sensor, the interrupt
+ * handler should perform sysf_notify to allow userland to poll the node.
+ */
+static ssize_t irq_show(struct device *dev,
+	struct device_attribute *attr, char *buf)
+{
+	struct fpc1020_data *fpc1020 = dev_get_drvdata(dev);
+	int irq = gpio_get_value(fpc1020->irq_gpio);
+
+	return scnprintf(buf, PAGE_SIZE, "%i\n", irq);
+}
+static DEVICE_ATTR_RO(irq);
+
+static struct attribute *attributes[] = {
+	&dev_attr_pinctl_set.attr,
+	&dev_attr_device_prepare.attr,
+	&dev_attr_regulator_enable.attr,
+	&dev_attr_hw_reset.attr,
+	&dev_attr_wakeup_enable.attr,
+	&dev_attr_handle_wakelock.attr,
+	&dev_attr_clk_enable.attr,
+	&dev_attr_irq.attr,
+	NULL
+};
+
+static const struct attribute_group attribute_group = {
+	.attrs = attributes,
+};
+
+static irqreturn_t fpc1020_irq_handler(int irq, void *handle)
+{
+	struct fpc1020_data *fpc1020 = handle;
+
+	pr_info("fpc1020 irq handler: %s\n", __func__);
+	mutex_lock(&fpc1020->lock);
+	if (atomic_read(&fpc1020->wakeup_enabled)) {
+		fpc1020->nbr_irqs_received++;
+		__pm_wakeup_event(&fpc1020->ttw_wl,
+					msecs_to_jiffies(FPC_TTW_HOLD_TIME));
+	}
+	mutex_unlock(&fpc1020->lock);
+
+	sysfs_notify(&fpc1020->dev->kobj, NULL, dev_attr_irq.attr.name);
+
+	return IRQ_HANDLED;
+}
+
+static int fpc1020_request_named_gpio(struct fpc1020_data *fpc1020,
+	const char *label, int *gpio)
+{
+	struct device *dev = fpc1020->dev;
+	struct device_node *np = dev->of_node;
+	int rc;
+
+	rc = of_get_named_gpio(np, label, 0);
+
+	if (rc < 0) {
+		dev_err(dev, "failed to get '%s'\n", label);
+		return rc;
+	}
+	*gpio = rc;
+
+	rc = devm_gpio_request(dev, *gpio, label);
+	if (rc) {
+		dev_err(dev, "failed to request gpio %d\n", *gpio);
+		return rc;
+	}
+	dev_dbg(dev, "%s %d\n", label, *gpio);
+
+	return 0;
+}
+
+static int fpc1020_probe(struct platform_device *pdev)
+{
+	struct device *dev = &pdev->dev;
+	struct fpc1020_data *fpc1020;
+	int rc;
+	size_t i;
+	int irqf = 0;
+
+	fpc1020 = devm_kzalloc(dev, sizeof(*fpc1020), GFP_KERNEL);
+	if (!fpc1020)
+		return -ENOMEM;
+
+	fpc1020->dev = dev;
+	platform_set_drvdata(pdev, fpc1020);
+
+	rc = fpc1020_request_named_gpio(fpc1020, "fpc,gpio_irq",
+			&fpc1020->irq_gpio);
+	if (rc)
+		return -EINVAL;
+	rc = fpc1020_request_named_gpio(fpc1020, "fpc,gpio_rst",
+			&fpc1020->rst_gpio);
+	if (rc)
+		return -EINVAL;
+
+	fpc1020->fingerprint_pinctrl = devm_pinctrl_get(dev);
+	if (IS_ERR(fpc1020->fingerprint_pinctrl)) {
+		rc = PTR_ERR(fpc1020->fingerprint_pinctrl);
+		dev_err(dev, "Cannot get pinctrl\n", rc);
+		return rc;
+	}
+
+	for (i = 0; i < ARRAY_SIZE(pctl_names); i++) {
+		const char *n = pctl_names[i];
+		struct pinctrl_state *state =
+			pinctrl_lookup_state(fpc1020->fingerprint_pinctrl, n);
+		if (IS_ERR(state)) {
+			dev_err(dev, "cannot find '%s'\n", n);
+			return PTR_ERR(state);
+		}
+		dev_dbg(dev, "found pin control %s\n", n);
+		fpc1020->pinctrl_state[i] = state;
+	}
+
+	select_pin_ctl(fpc1020, "fpc1020_reset_reset");
+	select_pin_ctl(fpc1020, "fpc1020_irq_active");
+
+	atomic_set(&fpc1020->wakeup_enabled, 0);
+
+	if (of_property_read_bool(dev->of_node, "fpc,enable-wakeup")) {
+		irqf = IRQF_NO_SUSPEND;
+		device_init_wakeup(dev, 1);
+	}
+
+	mutex_init(&fpc1020->lock);
+	rc = devm_request_threaded_irq(dev, gpio_to_irq(fpc1020->irq_gpio),
+			NULL, fpc1020_irq_handler,
+			irqf | IRQF_TRIGGER_RISING | IRQF_ONESHOT,
+			dev_name(dev), fpc1020);
+	if (rc) {
+		dev_err(dev, "could not request irq %d\n",
+				gpio_to_irq(fpc1020->irq_gpio));
+		return rc;
+	}
+
+	dev_dbg(dev, "requested irq %d\n", gpio_to_irq(fpc1020->irq_gpio));
+
+	enable_irq_wake(gpio_to_irq(fpc1020->irq_gpio));
+
+	wakeup_source_init(&fpc1020->ttw_wl, "fpc_ttw_wl");
+
+	rc = sysfs_create_group(&dev->kobj, &attribute_group);
+	if (rc) {
+		dev_err(dev, "could not create sysfs\n");
+		return rc;
+	}
+
+	if (of_property_read_bool(dev->of_node, "fpc,enable-on-boot")) {
+		dev_dbg(dev, "Enabling hardware\n");
+		device_prepare(fpc1020, true);
+	}
+
+	hw_reset(fpc1020);
+
+	return 0;
+}
+
+static int fpc1020_remove(struct platform_device *pdev)
+{
+	struct fpc1020_data *fpc1020 = platform_get_drvdata(pdev);
+
+	sysfs_remove_group(&pdev->dev.kobj, &attribute_group);
+	mutex_destroy(&fpc1020->lock);
+	wakeup_source_trash(&fpc1020->ttw_wl);
+	vreg_setup(fpc1020, "vdd_ana", false);
+	vreg_setup(fpc1020, "vdd_io", false);
+	vreg_setup(fpc1020, "vcc_spi", false);
+
+	return 0;
+}
+
+static const struct of_device_id fpc1020_of_match[] = {
+	{ .compatible = "fpc,fpc1020", },
+	{}
+};
+MODULE_DEVICE_TABLE(of, fpc1020_of_match);
+
+static struct platform_driver fpc1020_driver = {
+	.driver = {
+		.name	= "fpc1020",
+		.of_match_table = fpc1020_of_match,
+	},
+	.probe	= fpc1020_probe,
+	.remove	= fpc1020_remove,
+};
+
+module_platform_driver(fpc1020_driver);
+
+MODULE_DESCRIPTION("FPC1020 Fingerprint sensor device driver.");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/misc/max31760.c b/drivers/misc/max31760.c
new file mode 100644
index 0000000..2479583
--- /dev/null
+++ b/drivers/misc/max31760.c
@@ -0,0 +1,374 @@
+// SPDX-License-Identifier: GPL-2.0-only
+
+/*
+ * Copyright (c) 2020, The Linux Foundation. All rights reserved.
+ */
+
+#include <linux/device.h>
+#include <linux/i2c.h>
+#include <linux/slab.h>
+#include <linux/platform_device.h>
+#include <linux/input.h>
+#include <linux/types.h>
+#include <linux/module.h>
+#include <linux/fs.h>
+#include <linux/of.h>
+#include <linux/of_graph.h>
+#include <linux/kernel.h>
+#include <linux/of_gpio.h>
+#include <linux/gpio.h>
+#include <linux/delay.h>
+#include <linux/regulator/consumer.h>
+#include <linux/rwlock.h>
+#include <linux/uaccess.h>
+#include <linux/regmap.h>
+
+struct max31760 {
+	struct device *dev;
+	u8 i2c_addr;
+	struct regmap *regmap;
+	u32 fan_pwr_en;
+	u32 fan_pwr_bp;
+	struct i2c_client *i2c_client;
+	int pwm;
+	bool fan_off;
+};
+
+static void turn_gpio(struct max31760 *pdata, bool on)
+{
+	if (on) {
+		gpio_direction_output(pdata->fan_pwr_en, 0);
+		gpio_set_value(pdata->fan_pwr_en, 1);
+		pr_debug("%s gpio:%d set to high\n", __func__,
+					pdata->fan_pwr_en);
+		msleep(20);
+		gpio_direction_output(pdata->fan_pwr_bp, 0);
+		gpio_set_value(pdata->fan_pwr_bp, 1);
+		pr_debug("%s gpio:%d set to high\n", __func__,
+					pdata->fan_pwr_bp);
+		msleep(20);
+	} else {
+		gpio_direction_output(pdata->fan_pwr_en, 1);
+		gpio_set_value(pdata->fan_pwr_en, 0);
+		pr_debug("%s gpio:%d set to low\n", __func__,
+					pdata->fan_pwr_en);
+		msleep(20);
+		gpio_direction_output(pdata->fan_pwr_bp, 1);
+		gpio_set_value(pdata->fan_pwr_bp, 0);
+		pr_debug("%s gpio:%d set to low\n", __func__,
+					pdata->fan_pwr_bp);
+		msleep(20);
+	}
+}
+
+static int max31760_i2c_reg_get(struct max31760 *pdata,
+				u8 reg)
+{
+	int ret;
+	u32 val1;
+
+	pr_debug("%s, reg:%x\n", __func__, reg);
+	ret = regmap_read(pdata->regmap, (unsigned int)reg, &val1);
+	if (ret < 0) {
+		pr_err("%s failed reading reg 0x%02x failure\n", __func__, reg);
+		return ret;
+	}
+
+	pr_debug("%s success reading reg 0x%x=0x%x, val1=%x\n",
+					 __func__, reg, val1, val1);
+
+	return 0;
+}
+
+static int max31760_i2c_reg_set(struct max31760 *pdata,
+					u8 reg, u8 val)
+{
+	int ret;
+	int i;
+
+	for (i = 0; i < 10; i++) {
+		ret = regmap_write(pdata->regmap, reg, val);
+		if (ret >= 0)
+			return ret;
+		msleep(20);
+	}
+	if (ret < 0)
+		pr_err("%s loop:%d failed to write reg 0x%02x=0x%02x\n",
+			 __func__, i, reg, val);
+	return ret;
+}
+
+static ssize_t fan_show(struct device *dev, struct device_attribute *attr,
+				char *buf)
+{
+	struct max31760 *pdata;
+	int ret;
+
+	pdata =  dev_get_drvdata(dev);
+	if (!pdata) {
+		pr_err("invalid driver pointer\n");
+		return -ENODEV;
+	}
+
+	if (pdata->fan_off)
+		ret = scnprintf(buf, PAGE_SIZE, "off\n");
+	else
+		ret = scnprintf(buf, PAGE_SIZE, "0x%x\n", pdata->pwm);
+
+	return ret;
+}
+
+static ssize_t fan_store(struct device *dev, struct device_attribute *attr,
+				const char *buf, size_t count)
+{
+	long val;
+	struct max31760 *pdata;
+
+	pdata =  dev_get_drvdata(dev);
+	if (!pdata) {
+		pr_err("invalid driver pointer\n");
+		return -ENODEV;
+	}
+
+	kstrtol(buf, 0, &val);
+	pr_debug("%s, count:%d  val:%lx, buf:%s\n",
+				 __func__, count, val, buf);
+
+	if (val == 0xff) {
+		turn_gpio(pdata, false);
+		pdata->fan_off = true;
+	} else if (val == 0xfe) {
+		pdata->fan_off = false;
+		turn_gpio(pdata, true);
+		max31760_i2c_reg_set(pdata, 0x00, pdata->pwm);
+	} else {
+		max31760_i2c_reg_set(pdata, 0x00, (int)val);
+		pdata->pwm = (int)val;
+	}
+
+	return count;
+}
+
+static DEVICE_ATTR_RW(fan);
+
+static struct attribute *max31760_fs_attrs[] = {
+	&dev_attr_fan.attr,
+	NULL
+};
+
+static struct attribute_group max31760_fs_attr_group = {
+	.attrs = max31760_fs_attrs,
+};
+
+static int max31760_parse_dt(struct device *dev,
+				struct max31760 *pdata)
+{
+	struct device_node *np = dev->of_node;
+	int ret;
+
+	pdata->fan_pwr_en =
+		of_get_named_gpio(np, "qcom,fan-pwr-en", 0);
+	if (!gpio_is_valid(pdata->fan_pwr_en)) {
+		pr_err("%s fan_pwr_en gpio not specified\n", __func__);
+		ret = -EINVAL;
+	} else {
+		ret = gpio_request(pdata->fan_pwr_en, "fan_pwr_en");
+		if (ret) {
+			pr_err("max31760 fan_pwr_en gpio request failed\n");
+			goto error1;
+		}
+	}
+
+	pdata->fan_pwr_bp =
+		of_get_named_gpio(np, "qcom,fan-pwr-bp", 0);
+	if (!gpio_is_valid(pdata->fan_pwr_bp)) {
+		pr_err("%s fan_pwr_bp gpio not specified\n", __func__);
+		ret = -EINVAL;
+	} else
+		ret = gpio_request(pdata->fan_pwr_bp, "fan_pwr_bp");
+		if (ret) {
+			pr_err("max31760 fan_pwr_bp gpio request failed\n");
+			goto error2;
+	}
+	turn_gpio(pdata, true);
+
+	return ret;
+
+error2:
+	gpio_free(pdata->fan_pwr_bp);
+error1:
+	gpio_free(pdata->fan_pwr_en);
+	return ret;
+}
+
+static int max31760_fan_pwr_enable_vregs(struct device *dev,
+				 struct max31760 *pdata)
+{
+	int ret;
+	struct regulator *reg;
+
+	/* Fan Control LDO L10A */
+	reg = devm_regulator_get(dev, "pm8150_l10");
+	if (!IS_ERR(reg)) {
+		regulator_set_load(reg, 600000);
+		ret = regulator_enable(reg);
+		if (ret < 0) {
+			pr_err("%s pm8150_l10 failed\n", __func__);
+			return -EINVAL;
+		}
+	}
+
+	/* Fan Control LDO S4 */
+	reg = devm_regulator_get(dev, "pm8150_s4");
+	if (!IS_ERR(reg)) {
+		regulator_set_load(reg, 600000);
+		ret = regulator_enable(reg);
+		if (ret < 0) {
+			pr_err("%s pm8150_s4 failed\n", __func__);
+			return -EINVAL;
+		}
+	}
+
+	return ret;
+}
+
+static const struct regmap_config max31760_regmap = {
+	.reg_bits = 8,
+	.val_bits = 8,
+	.max_register = 0xFF,
+};
+
+static int max31760_probe(struct i2c_client *client,
+				const struct i2c_device_id *id)
+{
+	int ret;
+	struct max31760 *pdata;
+
+	if (!client || !client->dev.of_node) {
+		pr_err("%s invalid input\n", __func__);
+		return -EINVAL;
+	}
+
+	if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
+		pr_err("%s device doesn't support I2C\n", __func__);
+		return -ENODEV;
+	}
+
+	pdata = devm_kzalloc(&client->dev,
+		sizeof(struct max31760), GFP_KERNEL);
+	if (!pdata)
+		return -ENOMEM;
+
+	pdata->regmap = devm_regmap_init_i2c(client, &max31760_regmap);
+	if (IS_ERR(pdata->regmap)) {
+		ret = PTR_ERR(pdata->regmap);
+		pr_err("%s Failed to allocate regmap: %d\n", __func__, ret);
+		return -EINVAL;
+	}
+
+	ret = max31760_parse_dt(&client->dev, pdata);
+	if (ret) {
+		pr_err("%s failed to parse device tree\n", __func__);
+		return -EINVAL;
+	}
+
+	ret = max31760_fan_pwr_enable_vregs(&client->dev, pdata);
+	if (ret) {
+		pr_err("%s failed to pwr regulators\n", __func__);
+		return -EINVAL;
+	}
+
+	pdata->dev = &client->dev;
+	i2c_set_clientdata(client, pdata);
+
+	pdata->i2c_client = client;
+
+	dev_set_drvdata(&client->dev, pdata);
+
+	ret = sysfs_create_group(&pdata->dev->kobj, &max31760_fs_attr_group);
+	if (ret)
+		pr_err("%s unable to register max31760 sysfs nodes\n");
+
+	/* 00 - 0x01 -- 33Hz */
+	/* 01 - 0x09 -- 150Hz */
+	/* 10 - 0x11 -- 1500Hz */
+	/* 11 - 0x19 -- 25Khz */
+	pdata->pwm = 0x19;
+	max31760_i2c_reg_set(pdata, 0x00, pdata->pwm);
+	max31760_i2c_reg_set(pdata, 0x01, 0x11);
+	max31760_i2c_reg_set(pdata, 0x02, 0x31);
+	max31760_i2c_reg_set(pdata, 0x03, 0x45);
+	max31760_i2c_reg_set(pdata, 0x04, 0xff);
+	max31760_i2c_reg_set(pdata, 0x50, 0xcf);
+	max31760_i2c_reg_set(pdata, 0x01, 0x11);
+	max31760_i2c_reg_set(pdata, 0x00, pdata->pwm);
+	max31760_i2c_reg_get(pdata, 0x00);
+
+	return ret;
+}
+
+static int max31760_remove(struct i2c_client *client)
+{
+	struct max31760 *pdata = i2c_get_clientdata(client);
+
+	if (!pdata)
+		goto end;
+
+	sysfs_remove_group(&pdata->dev->kobj, &max31760_fs_attr_group);
+	turn_gpio(pdata, false);
+end:
+	return 0;
+}
+
+
+static void max31760_shutdown(struct i2c_client *client)
+{
+}
+
+static int max31760_suspend(struct device *dev, pm_message_t state)
+{
+	struct max31760 *pdata =  dev_get_drvdata(dev);
+
+	dev_dbg(dev, "suspend\n");
+	if (pdata)
+		turn_gpio(pdata, false);
+	return 0;
+}
+
+static int max31760_resume(struct device *dev)
+{
+	struct max31760 *pdata =  dev_get_drvdata(dev);
+
+	dev_dbg(dev, "resume\n");
+	if (pdata) {
+		turn_gpio(pdata, true);
+		max31760_i2c_reg_set(pdata, 0x00, pdata->pwm);
+	}
+	return 0;
+}
+
+static const struct of_device_id max31760_id_table[] = {
+	{ .compatible = "maxim,xrfancontroller",},
+	{ },
+};
+static const struct i2c_device_id max31760_i2c_table[] = {
+	{ "xrfancontroller", 0 },
+	{ },
+};
+
+static struct i2c_driver max31760_i2c_driver = {
+	.probe = max31760_probe,
+	.remove = max31760_remove,
+	.shutdown = max31760_shutdown,
+	.driver = {
+		.name = "maxim xrfancontroller",
+		.of_match_table = max31760_id_table,
+		.suspend = max31760_suspend,
+		.resume = max31760_resume,
+	},
+	.id_table = max31760_i2c_table,
+};
+module_i2c_driver(max31760_i2c_driver);
+MODULE_DEVICE_TABLE(i2c, max31760_i2c_table);
+MODULE_DESCRIPTION("Maxim 31760 Fan Controller");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/misc/msm_hdcp.c b/drivers/misc/msm_hdcp.c
index 85b246b..63e149b 100644
--- a/drivers/misc/msm_hdcp.c
+++ b/drivers/misc/msm_hdcp.c
@@ -202,6 +202,8 @@
 	if (hdcp->cb && hdcp->client_ctx)
 		hdcp->cb(hdcp->client_ctx, min_enc_lvl);
 
+	pr_debug("min_enc_lvl = %d\n", min_enc_lvl);
+
 	return ret;
 }
 
diff --git a/drivers/misc/qseecom.c b/drivers/misc/qseecom.c
index 8fa9fa0..1ca6820 100644
--- a/drivers/misc/qseecom.c
+++ b/drivers/misc/qseecom.c
@@ -2,7 +2,7 @@
 /*
  * QTI Secure Execution Environment Communicator (QSEECOM) driver
  *
- * Copyright (c) 2012-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved.
  */
 
 #define pr_fmt(fmt) "QSEECOM: %s: " fmt, __func__
@@ -191,6 +191,13 @@
 #define MAKE_WHITELIST_VERSION(major, minor, patch) \
 	(((major & 0x3FF) << 22) | ((minor & 0x3FF) << 12) | (patch & 0xFFF))
 
+#define MAKE_NULL(sgt, attach, dmabuf) do {\
+				sgt = NULL;\
+				attach = NULL;\
+				dmabuf = NULL;\
+				} while (0)
+
+
 struct qseecom_registered_listener_list {
 	struct list_head                 list;
 	struct qseecom_register_listener_req svc;
@@ -1422,6 +1429,7 @@
 err_unmap:
 	dma_buf_end_cpu_access(new_dma_buf, DMA_BIDIRECTIONAL);
 	qseecom_dmabuf_unmap(new_sgt, new_attach, new_dma_buf);
+	MAKE_NULL(*sgt, *attach, *dmabuf);
 err:
 	return ret;
 }
@@ -1496,9 +1504,11 @@
 	}
 	return 0;
 err:
-	if (svc->dmabuf)
+	if (svc->dmabuf) {
 		qseecom_vaddr_unmap(svc->sb_virt, svc->sgt, svc->attach,
 			svc->dmabuf);
+		MAKE_NULL(svc->sgt, svc->attach, svc->dmabuf);
+	}
 	return ret;
 }
 
@@ -1624,9 +1634,11 @@
 	}
 
 exit:
-	if (ptr_svc->dmabuf)
+	if (ptr_svc->dmabuf) {
 		qseecom_vaddr_unmap(ptr_svc->sb_virt,
 			ptr_svc->sgt, ptr_svc->attach, ptr_svc->dmabuf);
+		MAKE_NULL(ptr_svc->sgt, ptr_svc->attach, ptr_svc->dmabuf);
+	}
 	__qseecom_free_tzbuf(&ptr_svc->sglistinfo_shm);
 	list_del(&ptr_svc->list);
 	kzfree(ptr_svc);
@@ -2028,9 +2040,12 @@
 
 	return ret;
 exit:
-	if (data->client.dmabuf)
+	if (data->client.dmabuf) {
 		qseecom_vaddr_unmap(data->client.sb_virt, data->client.sgt,
 			 data->client.attach, data->client.dmabuf);
+		MAKE_NULL(data->client.sgt,
+			data->client.attach, data->client.dmabuf);
+	}
 	return ret;
 }
 
@@ -2237,10 +2252,6 @@
 				goto exit;
 			}
 
-			ret = qseecom_dmabuf_cache_operations(ptr_svc->dmabuf,
-						QSEECOM_CACHE_INVALIDATE);
-			if (ret)
-				goto exit;
 		} else {
 			ret = qseecom_scm_call(SCM_SVC_TZSCHEDULER, 1,
 					cmd_buf, cmd_len, resp, sizeof(*resp));
@@ -2572,10 +2583,6 @@
 					ret, data->client.app_id);
 				goto exit;
 			}
-			ret = qseecom_dmabuf_cache_operations(ptr_svc->dmabuf,
-						QSEECOM_CACHE_INVALIDATE);
-			if (ret)
-				goto exit;
 		} else {
 			ret = qseecom_scm_call(SCM_SVC_TZSCHEDULER, 1,
 					cmd_buf, cmd_len, resp, sizeof(*resp));
@@ -2972,8 +2979,10 @@
 
 loadapp_err:
 	__qseecom_disable_clk_scale_down(data);
-	if (dmabuf)
+	if (dmabuf) {
 		qseecom_vaddr_unmap(vaddr, sgt, attach, dmabuf);
+		MAKE_NULL(sgt, attach, dmabuf);
+	}
 enable_clk_err:
 	if (qseecom.support_bus_scaling) {
 		mutex_lock(&qsee_bw_mutex);
@@ -3117,9 +3126,12 @@
 	}
 
 unload_exit:
-	if (data->client.dmabuf)
+	if (data->client.dmabuf) {
 		qseecom_vaddr_unmap(data->client.sb_virt, data->client.sgt,
 			data->client.attach, data->client.dmabuf);
+		MAKE_NULL(data->client.sgt,
+			data->client.attach, data->client.dmabuf);
+	}
 	data->released = true;
 	return ret;
 }
@@ -3741,14 +3753,6 @@
 					ret, data->client.app_id);
 		goto exit;
 	}
-	if (data->client.dmabuf) {
-		ret = qseecom_dmabuf_cache_operations(data->client.dmabuf,
-					QSEECOM_CACHE_INVALIDATE);
-		if (ret) {
-			pr_err("cache operation failed %d\n", ret);
-			goto exit;
-		}
-	}
 
 	if (qseecom.qsee_reentrancy_support) {
 		ret = __qseecom_process_reentrancy(&resp, ptr_app, data);
@@ -3771,6 +3775,15 @@
 			}
 		}
 	}
+
+	if (data->client.dmabuf) {
+		ret = qseecom_dmabuf_cache_operations(data->client.dmabuf,
+					QSEECOM_CACHE_INVALIDATE);
+		if (ret) {
+			pr_err("cache operation failed %d\n", ret);
+			goto exit;
+		}
+	}
 exit:
 	return ret;
 }
@@ -4052,8 +4065,10 @@
 	}
 	return ret;
 err:
-	if (!IS_ERR_OR_NULL(sg_ptr))
+	if (!IS_ERR_OR_NULL(sg_ptr)) {
 		qseecom_dmabuf_unmap(sg_ptr, attach, dmabuf);
+		MAKE_NULL(sg_ptr, attach, dmabuf);
+	}
 	return -ENOMEM;
 }
 
@@ -4291,8 +4306,10 @@
 				data->client.sec_buf_fd[i].size,
 				data->client.sec_buf_fd[i].vbase,
 				data->client.sec_buf_fd[i].pbase);
-	if (!IS_ERR_OR_NULL(sg_ptr))
+	if (!IS_ERR_OR_NULL(sg_ptr)) {
 		qseecom_dmabuf_unmap(sg_ptr, attach, dmabuf);
+		MAKE_NULL(sg_ptr, attach, dmabuf);
+	}
 	return -ENOMEM;
 }
 
@@ -5852,8 +5869,10 @@
 	}
 
 exit_cpu_restore:
-	if (dmabuf)
+	if (dmabuf) {
 		qseecom_vaddr_unmap(va, sgt, attach, dmabuf);
+		MAKE_NULL(sgt, attach, dmabuf);
+	}
 	return ret;
 }
 
@@ -7104,8 +7123,10 @@
 	}
 	return ret;
 err:
-	if (!IS_ERR_OR_NULL(sg_ptr))
+	if (!IS_ERR_OR_NULL(sg_ptr)) {
 		qseecom_dmabuf_unmap(sg_ptr, attach, dmabuf);
+		MAKE_NULL(sg_ptr, attach, dmabuf);
+	}
 	return -ENOMEM;
 }
 
@@ -8300,10 +8321,13 @@
 			break;
 		case QSEECOM_SECURE_SERVICE:
 		case QSEECOM_GENERIC:
-			if (data->client.dmabuf)
+			if (data->client.dmabuf) {
 				qseecom_vaddr_unmap(data->client.sb_virt,
 					data->client.sgt, data->client.attach,
 					data->client.dmabuf);
+				MAKE_NULL(data->client.sgt, data->client.attach,
+					data->client.dmabuf);
+			}
 			break;
 		case QSEECOM_UNAVAILABLE_CLIENT_APP:
 			break;
diff --git a/drivers/misc/uid_sys_stats.c b/drivers/misc/uid_sys_stats.c
index d2859a6..cb027ed 100644
--- a/drivers/misc/uid_sys_stats.c
+++ b/drivers/misc/uid_sys_stats.c
@@ -358,9 +358,12 @@
 				__func__, uid);
 			return -ENOMEM;
 		}
-		task_cputime_adjusted(task, &utime, &stime);
-		uid_entry->active_utime += utime;
-		uid_entry->active_stime += stime;
+		/* avoid double accounting of dying threads */
+		if (!(task->flags & PF_EXITING)) {
+			task_cputime_adjusted(task, &utime, &stime);
+			uid_entry->active_utime += utime;
+			uid_entry->active_stime += stime;
+		}
 	} while_each_thread(temp, task);
 	rcu_read_unlock();
 
@@ -401,7 +404,8 @@
 	struct hlist_node *tmp;
 	char uids[128];
 	char *start_uid, *end_uid = NULL;
-	long int uid_start = 0, uid_end = 0;
+	uid_t uid_start = 0, uid_end = 0;
+	u64 uid;
 
 	if (count >= sizeof(uids))
 		count = sizeof(uids) - 1;
@@ -416,8 +420,8 @@
 	if (!start_uid || !end_uid)
 		return -EINVAL;
 
-	if (kstrtol(start_uid, 10, &uid_start) != 0 ||
-		kstrtol(end_uid, 10, &uid_end) != 0) {
+	if (kstrtouint(start_uid, 10, &uid_start) != 0 ||
+		kstrtouint(end_uid, 10, &uid_end) != 0) {
 		return -EINVAL;
 	}
 
@@ -426,10 +430,10 @@
 
 	rt_mutex_lock(&uid_lock);
 
-	for (; uid_start <= uid_end; uid_start++) {
+	for (uid = uid_start; uid <= uid_end; uid++) {
 		hash_for_each_possible_safe(hash_table, uid_entry, tmp,
-							hash, (uid_t)uid_start) {
-			if (uid_start == uid_entry->uid) {
+							hash, uid) {
+			if (uid == uid_entry->uid) {
 				remove_uid_tasks(uid_entry);
 				hash_del(&uid_entry->hash);
 				kfree(uid_entry);
@@ -453,6 +457,10 @@
 {
 	struct io_stats *io_slot = &uid_entry->io[slot];
 
+	/* avoid double accounting of dying threads */
+	if (slot != UID_STATE_DEAD_TASKS && (task->flags & PF_EXITING))
+		return;
+
 	io_slot->read_bytes += task->ioac.read_bytes;
 	io_slot->write_bytes += compute_write_bytes(task);
 	io_slot->rchar += task->ioac.rchar;
diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c
index 6ef9a94..d88832a 100644
--- a/drivers/mmc/core/block.c
+++ b/drivers/mmc/core/block.c
@@ -1504,10 +1504,10 @@
 	pr_debug("%s: CQE recovery start\n", mmc_hostname(host));
 
 	err = mmc_cqe_recovery(host);
-	if (err)
+	if (err || host->need_hw_reset)
 		mmc_blk_reset(mq->blkdata, host, MMC_BLK_CQE_RECOVERY);
-	else
-		mmc_blk_reset_success(mq->blkdata, MMC_BLK_CQE_RECOVERY);
+	mmc_blk_reset_success(mq->blkdata, MMC_BLK_CQE_RECOVERY);
+	host->need_hw_reset = false;
 
 	pr_debug("%s: CQE recovery done\n", mmc_hostname(host));
 }
@@ -1569,6 +1569,8 @@
 static int mmc_blk_cqe_issue_rw_rq(struct mmc_queue *mq, struct request *req)
 {
 	struct mmc_queue_req *mqrq = req_to_mmc_queue_req(req);
+	struct mmc_card *card = mq->card;
+	struct mmc_host *host = card->host;
 	int err = 0;
 
 	mmc_blk_data_prep(mq, mqrq, 0, NULL, NULL);
@@ -1576,9 +1578,27 @@
 
 	mmc_deferred_scaling(mq->card->host);
 	mmc_cqe_clk_scaling_start_busy(mq, mq->card->host, true);
+	/*
+	 * When voltage corner in LSVS on low load scenario and
+	 * there is sudden burst of requests device queue all
+	 * slots are filled and it is needed to wait till all
+	 * requests are completed to scale up frequency. This
+	 * is leading to delay in scaling and impacting performance.
+	 * Fix this issue by only allowing one request in request queue
+	 * when device is running with lower speed mode.
+	 */
+	if (host->clk_scaling.state == MMC_LOAD_LOW) {
+		err = host->cqe_ops->cqe_wait_for_idle(host);
+		if (err) {
+			pr_err("%s: %s: CQE went in recovery path.\n",
+				mmc_hostname(host), __func__);
+			goto stop_scaling;
+		}
+	}
 
 	err =  mmc_blk_cqe_start_req(mq->card->host, &mqrq->brq.mrq);
 
+stop_scaling:
 	if (err)
 		mmc_cqe_clk_scaling_stop_busy(mq->card->host, true, false);
 
diff --git a/drivers/mmc/core/bus.c b/drivers/mmc/core/bus.c
index d405d97..de7bf65 100644
--- a/drivers/mmc/core/bus.c
+++ b/drivers/mmc/core/bus.c
@@ -420,6 +420,8 @@
 		device_del(&card->dev);
 		of_node_put(card->dev.of_node);
 	}
+	if (host->ops->exit_dbg_mode)
+		host->ops->exit_dbg_mode(host);
 
 	put_device(&card->dev);
 }
diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
index 7ef77df..930a48e 100644
--- a/drivers/mmc/core/core.c
+++ b/drivers/mmc/core/core.c
@@ -405,6 +405,10 @@
 	else
 		pr_err("%s: %s: failed (%d) at freq=%lu\n",
 			mmc_hostname(host), __func__, err, freq);
+
+	mmc_log_string(host,
+			"deferred clock scale state %d freq %lu done with err %d\n",
+			state, freq, err);
 	/*
 	 * CQE would be enabled as part of CQE issueing path
 	 * So no need to unhalt it explicitly
@@ -613,6 +617,8 @@
 	pr_debug("%s: doing deferred frequency change (%lu) (%s)\n",
 				mmc_hostname(host),
 				target_freq, current->comm);
+	mmc_log_string(host, "doing deferred frequency change (%lu) (%s)\n",
+			target_freq, current->comm);
 
 	err = mmc_clk_update_freq_deferred(host, target_freq,
 		clk_scaling.state);
@@ -1836,6 +1842,12 @@
 				mmc_hostname(host), ios->old_rate / 1000,
 				ios->clock / 1000, jiffies_to_msecs(
 					(long)jiffies - (long)ios->clk_ts));
+			trace_mmc_clk(trace_info);
+			mmc_log_string(host,
+				"freq_KHz %d --> %d | t = %d",
+				ios->old_rate / 1000,
+				ios->clock / 1000, jiffies_to_msecs(
+					(long)jiffies - (long)ios->clk_ts));
 		}
 		ios->old_rate = ios->clock;
 		ios->clk_ts = jiffies;
diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
index cc89382..8e92f12 100644
--- a/drivers/mmc/core/mmc.c
+++ b/drivers/mmc/core/mmc.c
@@ -1258,7 +1258,8 @@
 		goto out_err;
 
 	val = EXT_CSD_DDR_BUS_WIDTH_8;
-	if (card->ext_csd.strobe_support) {
+	if (card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS400ES
+			&& card->ext_csd.strobe_support) {
 		err = mmc_select_bus_width(card);
 		if (IS_ERR_VALUE((unsigned long)err))
 			return err;
@@ -1293,7 +1294,9 @@
 	mmc_set_timing(host, MMC_TIMING_MMC_HS400);
 	mmc_set_bus_speed(card);
 
-	if (card->ext_csd.strobe_support && host->ops->enhanced_strobe) {
+	if (card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS400ES
+			&& card->ext_csd.strobe_support
+			&& host->ops->enhanced_strobe) {
 		err = host->ops->enhanced_strobe(host);
 		if (!err)
 			host->ios.enhanced_strobe = true;
@@ -1611,8 +1614,7 @@
 		goto bus_speed;
 
 	/* For Enhance Strobe HS400 flow */
-	if (card->ext_csd.strobe_support &&
-	    card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS400 &&
+	if (card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS400ES &&
 	    card->host->caps & MMC_CAP_8_BIT_DATA) {
 		err = mmc_select_hs400(card);
 		if (err) {
@@ -2304,6 +2306,8 @@
 
 	if (!oldcard)
 		host->card = card;
+	if (host->ops->enter_dbg_mode)
+		host->ops->enter_dbg_mode(host);
 
 	return 0;
 
@@ -2555,11 +2559,6 @@
 	if (mmc_card_suspended(host->card))
 		goto out;
 
-	if (host->cqe_enabled) {
-		host->cqe_ops->cqe_disable(host);
-		host->cqe_enabled = false;
-	}
-
 	if (mmc_card_doing_bkops(host->card)) {
 		err = mmc_stop_bkops(host->card);
 		if (err)
@@ -2912,6 +2911,11 @@
 		/* If the card accept RST_n signal, send it. */
 		mmc_set_clock(host, host->f_init);
 		host->ops->hw_reset(host);
+		/*
+		 * Do a brute force power cycle as some controller do not
+		 * have gpio support to power cycle card
+		 */
+		mmc_power_cycle(host, card->ocr);
 		/* Set initial state and call mmc_set_ios */
 		mmc_set_initial_state(host);
 	} else {
@@ -2938,9 +2942,9 @@
 		return ret;
 	}
 
-	ret = mmc_suspend_clk_scaling(host);
+	ret = mmc_resume_clk_scaling(host);
 	if (ret) {
-		pr_err("%s: %s: fail to suspend clock scaling (%d)\n",
+		pr_err("%s: %s: fail to resume clock scaling (%d)\n",
 				mmc_hostname(host), __func__, ret);
 	}
 	return ret;
diff --git a/drivers/mmc/core/mmc_ops.c b/drivers/mmc/core/mmc_ops.c
index 7914131..a1e7d4f 100644
--- a/drivers/mmc/core/mmc_ops.c
+++ b/drivers/mmc/core/mmc_ops.c
@@ -366,7 +366,7 @@
 	 * As the ext_csd is so large and mostly unused, we don't store the
 	 * raw block in mmc_card.
 	 */
-	ext_csd = kzalloc(512, GFP_KERNEL);
+	ext_csd = kzalloc(512, GFP_NOIO | __GFP_NOFAIL);
 	if (!ext_csd)
 		return -ENOMEM;
 
diff --git a/drivers/mmc/core/queue.c b/drivers/mmc/core/queue.c
index f8d35fd..304842e 100644
--- a/drivers/mmc/core/queue.c
+++ b/drivers/mmc/core/queue.c
@@ -103,6 +103,9 @@
 	enum mmc_issue_type issue_type = mmc_issue_type(mq, req);
 	bool recovery_needed = false;
 
+	mmc_log_string(host,
+			"Request timed out! Active reqs: %d Req: %p Tag: %d\n",
+			mmc_cqe_qcnt(mq), req, req->tag);
 	switch (issue_type) {
 	case MMC_ISSUE_ASYNC:
 	case MMC_ISSUE_DCMD:
@@ -112,6 +115,13 @@
 			return BLK_EH_RESET_TIMER;
 		}
 		/* No timeout (XXX: huh? comment doesn't make much sense) */
+
+		pr_info("%s: %s: Timeout even before req reaching LDD, completing the req. Active reqs: %d Req: %p Tag: %d\n",
+				mmc_hostname(host), __func__,
+				mmc_cqe_qcnt(mq), req, req->tag);
+		mmc_log_string(host,
+				"Timeout even before req reaching LDD,completing the req. Active reqs: %d Req: %p Tag: %d\n",
+				mmc_cqe_qcnt(mq), req, req->tag);
 		blk_mq_complete_request(req);
 		return BLK_EH_DONE;
 	default:
diff --git a/drivers/mmc/core/sdio_cis.c b/drivers/mmc/core/sdio_cis.c
index db031f1..1a36d97 100644
--- a/drivers/mmc/core/sdio_cis.c
+++ b/drivers/mmc/core/sdio_cis.c
@@ -54,8 +54,9 @@
 	string = (char*)(buffer + nr_strings);
 
 	for (i = 0; i < nr_strings; i++) {
+		size_t buf_len = strlen(buf);
 		buffer[i] = string;
-		strlcpy(string, buf, strlen(buf) + 1);
+		strlcpy(string, buf, buf_len + 1);
 		string += strlen(string) + 1;
 		buf += strlen(buf) + 1;
 	}
diff --git a/drivers/mmc/host/cqhci.c b/drivers/mmc/host/cqhci.c
index ae24827..b759421 100644
--- a/drivers/mmc/host/cqhci.c
+++ b/drivers/mmc/host/cqhci.c
@@ -409,9 +409,10 @@
 
 	if (timed_out && !(reg & CQHCI_HALT))
 		pr_err("%s: cqhci: CQE stuck on\n", mmc_hostname(mmc));
-	else
+	else {
 		pr_debug("%s: cqhci: CQE off\n", mmc_hostname(mmc));
-
+		mmc_log_string(mmc, "cqhci: CQE off\n");
+	}
 	mmc->cqe_on = false;
 }
 
@@ -663,6 +664,7 @@
 	if (!mmc->cqe_on) {
 		cqhci_writel(cq_host, 0, CQHCI_CTL);
 		mmc->cqe_on = true;
+		mmc_log_string(mmc, "cqhci: CQE on\n");
 		pr_debug("%s: cqhci: CQE on\n", mmc_hostname(mmc));
 		if (cqhci_readl(cq_host, CQHCI_CTL) && CQHCI_HALT) {
 			pr_err("%s: cqhci: CQE failed to exit halt state\n",
@@ -790,8 +792,10 @@
 
 	terri = cqhci_readl(cq_host, CQHCI_TERRI);
 
-	pr_debug("%s: cqhci: error IRQ status: 0x%08x cmd error %d data error %d TERRI: 0x%08x\n",
+	pr_err("%s: cqhci: error IRQ status: 0x%08x cmd error %d data error %d TERRI: 0x%08x\n",
 		 mmc_hostname(mmc), status, cmd_error, data_error, terri);
+	mmc_log_string(mmc, "%s: cqhci: status:0x%08x TERRI:0x%08x\n",
+		 mmc_hostname(mmc), status, terri);
 
 	/* Forget about errors when recovery has already been triggered */
 	if (cq_host->recovery_halt)
@@ -896,19 +900,28 @@
 irqreturn_t cqhci_irq(struct mmc_host *mmc, u32 intmask, int cmd_error,
 		      int data_error)
 {
-	u32 status;
+	u32 status, ice_err;
 	unsigned long tag = 0, comp_status;
 	struct cqhci_host *cq_host = mmc->cqe_private;
 
 	status = cqhci_readl(cq_host, CQHCI_IS);
-	cqhci_writel(cq_host, status, CQHCI_IS);
+	ice_err = status & (CQHCI_IS_GCE | CQHCI_IS_ICCE);
 
 	pr_debug("%s: cqhci: IRQ status: 0x%08x\n", mmc_hostname(mmc), status);
 	mmc_log_string(mmc, "CQIS: 0x%x cmd_error : %d data_err: %d\n",
 		status, cmd_error, data_error);
 
-	if ((status & CQHCI_IS_RED) || cmd_error || data_error)
+	if ((status & CQHCI_IS_RED) || cmd_error || data_error || ice_err) {
+		pr_err("%s: cqhci: error IRQ status: 0x%08x cmd error %d data error %d\n",
+			mmc_hostname(mmc), status, cmd_error, data_error);
+		cqhci_dumpregs(cq_host);
+		mmc->need_hw_reset = true;
+		cqhci_writel(cq_host, status, CQHCI_IS);
 		cqhci_error_irq(mmc, status, cmd_error, data_error);
+	} else {
+		/* Clear interrupt */
+		cqhci_writel(cq_host, status, CQHCI_IS);
+	}
 
 	if (status & CQHCI_IS_TCC) {
 		/* read TCN and complete the request */
diff --git a/drivers/mmc/host/cqhci.h b/drivers/mmc/host/cqhci.h
index 6b43517..024c81b 100644
--- a/drivers/mmc/host/cqhci.h
+++ b/drivers/mmc/host/cqhci.h
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
-/* Copyright (c) 2015-2019, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2015-2020, The Linux Foundation. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 and
@@ -50,8 +50,11 @@
 #define CQHCI_IS_TCC			BIT(1)
 #define CQHCI_IS_RED			BIT(2)
 #define CQHCI_IS_TCL			BIT(3)
+#define CQHCI_IS_GCE			BIT(4)
+#define CQHCI_IS_ICCE			BIT(5)
 
-#define CQHCI_IS_MASK (CQHCI_IS_TCC | CQHCI_IS_RED)
+#define CQHCI_IS_MASK (CQHCI_IS_TCC | CQHCI_IS_RED | \
+			CQHCI_IS_GCE | CQHCI_IS_ICCE)
 
 /* interrupt status enable */
 #define CQHCI_ISTE			0x14
diff --git a/drivers/mmc/host/sdhci-msm.c b/drivers/mmc/host/sdhci-msm.c
index 3918e4a..9a44c5c 100644
--- a/drivers/mmc/host/sdhci-msm.c
+++ b/drivers/mmc/host/sdhci-msm.c
@@ -31,6 +31,7 @@
 #include <linux/msm-bus.h>
 #include <linux/pm_runtime.h>
 #include <trace/events/mmc.h>
+#include <linux/clk/qcom.h>
 
 #include "sdhci-msm.h"
 #include "sdhci-msm-ice.h"
@@ -341,8 +342,11 @@
 static struct sdhci_msm_host *sdhci_slot[2];
 
 static int disable_slots;
+static int bus_mode;
 /* root can write, others read */
 module_param(disable_slots, int, 0644);
+module_param(bus_mode, int, 0444);
+MODULE_PARM_DESC(bus_mode, "Set this parameter during bootup to set the desired bus speed mode for eMMC only.");
 
 enum vdd_io_level {
 	/* set vdd_io_data->low_vol_level */
@@ -1206,6 +1210,78 @@
 			drv_type);
 }
 
+#define IPCAT_MINOR_MASK(val) ((val & 0x0fff0000) >> 0x10)
+
+/* Enter sdcc debug mode */
+void sdhci_msm_enter_dbg_mode(struct sdhci_host *host)
+{
+	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
+	struct sdhci_msm_host *msm_host = pltfm_host->priv;
+	struct platform_device *pdev = msm_host->pdev;
+	u32 enable_dbg_feature = 0;
+	u32 minor;
+
+	minor = IPCAT_MINOR_MASK(readl_relaxed(host->ioaddr +
+				SDCC_IP_CATALOG));
+	if (minor < 2 || msm_host->debug_mode_enabled)
+		return;
+
+	/* Enable debug mode */
+	writel_relaxed(ENABLE_DBG,
+			host->ioaddr + SDCC_TESTBUS_CONFIG);
+	writel_relaxed(DUMMY,
+			host->ioaddr + SDCC_DEBUG_EN_DIS_REG);
+	writel_relaxed((readl_relaxed(host->ioaddr +
+			SDCC_TESTBUS_CONFIG) | TESTBUS_EN),
+			host->ioaddr + SDCC_TESTBUS_CONFIG);
+
+	if (minor >= 2)
+		enable_dbg_feature |= FSM_HISTORY |
+			AUTO_RECOVERY_DISABLE |
+			MM_TRIGGER_DISABLE |
+			IIB_EN;
+
+	/* Enable particular feature */
+	writel_relaxed((readl_relaxed(host->ioaddr +
+			SDCC_DEBUG_FEATURE_CFG_REG) | enable_dbg_feature),
+			host->ioaddr + SDCC_DEBUG_FEATURE_CFG_REG);
+
+	/* Read back to ensure write went through */
+	readl_relaxed(host->ioaddr +
+			SDCC_DEBUG_FEATURE_CFG_REG);
+	msm_host->debug_mode_enabled = true;
+
+	dev_info(&pdev->dev, "Debug feature enabled 0x%08x\n",
+			readl_relaxed(host->ioaddr +
+			SDCC_DEBUG_FEATURE_CFG_REG));
+}
+
+/* Exit sdcc debug mode */
+void sdhci_msm_exit_dbg_mode(struct sdhci_host *host)
+{
+	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
+	struct sdhci_msm_host *msm_host = pltfm_host->priv;
+	struct platform_device *pdev = msm_host->pdev;
+	u32 minor;
+
+	minor = IPCAT_MINOR_MASK(readl_relaxed(host->ioaddr +
+				SDCC_IP_CATALOG));
+	if (minor < 2 || !msm_host->debug_mode_enabled)
+		return;
+
+	/* Exit debug mode */
+	writel_relaxed(DISABLE_DBG,
+			host->ioaddr + SDCC_TESTBUS_CONFIG);
+	writel_relaxed(DUMMY,
+			host->ioaddr + SDCC_DEBUG_EN_DIS_REG);
+
+	msm_host->debug_mode_enabled = false;
+
+	dev_dbg(&pdev->dev, "Debug feature disabled 0x%08x\n",
+			readl_relaxed(host->ioaddr +
+			SDCC_DEBUG_FEATURE_CFG_REG));
+}
+
 int sdhci_msm_execute_tuning(struct sdhci_host *host, u32 opcode)
 {
 	unsigned long flags;
@@ -1240,6 +1316,7 @@
 	 */
 	if (msm_host->tuning_in_progress)
 		return 0;
+	sdhci_msm_exit_dbg_mode(host);
 	msm_host->tuning_in_progress = true;
 	pr_debug("%s: Enter %s\n", mmc_hostname(mmc), __func__);
 
@@ -1433,6 +1510,7 @@
 kfree:
 	kfree(data_buf);
 out:
+	sdhci_msm_enter_dbg_mode(host);
 	spin_lock_irqsave(&host->lock, flags);
 	if (!rc)
 		msm_host->tuning_done = true;
@@ -2016,6 +2094,23 @@
 	return -EINVAL;
 }
 
+int sdhci_msm_parse_reset_data(struct device *dev,
+			struct sdhci_msm_host *msm_host)
+{
+	int ret = 0;
+
+	msm_host->core_reset = devm_reset_control_get(dev,
+					"core_reset");
+	if (IS_ERR(msm_host->core_reset)) {
+		ret = PTR_ERR(msm_host->core_reset);
+		dev_err(dev, "core_reset unavailable,err = %d\n",
+				ret);
+		msm_host->core_reset = NULL;
+	}
+
+	return ret;
+}
+
 /* Parse platform data */
 static
 struct sdhci_msm_pltfm_data *sdhci_msm_populate_pdata(struct device *dev,
@@ -2033,6 +2128,7 @@
 	enum of_gpio_flags flags = OF_GPIO_ACTIVE_LOW;
 	int bus_clk_table_len;
 	u32 *bus_clk_table = NULL;
+	int ret = 0;
 
 	pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
 	if (!pdata)
@@ -2169,6 +2265,9 @@
 
 	if (sdhci_msm_dt_parse_hsr_info(dev, msm_host))
 		goto out;
+	ret = sdhci_msm_parse_reset_data(dev, msm_host);
+	if (ret)
+		dev_err(dev, "Reset data parsing error\n");
 
 	return pdata;
 out:
@@ -2259,11 +2358,21 @@
 {
 	int cmd_error = 0;
 	int data_error = 0;
+	u32 mask;
 
 	if (!sdhci_cqe_irq(host, intmask, &cmd_error, &data_error))
 		return intmask;
 
 	cqhci_irq(host->mmc, intmask, cmd_error, data_error);
+
+	/*
+	 * Clear selected interrupts in err case.
+	 * as earlier driver skipped
+	 */
+	if (data_error || cmd_error) {
+		mask = intmask & host->cqe_ier;
+		sdhci_writel(host, mask, SDHCI_INT_STATUS);
+	}
 	return 0;
 }
 
@@ -2616,7 +2725,7 @@
 
 	if (!vreg->is_enabled) {
 		/* Set voltage level */
-		ret = sdhci_msm_vreg_set_voltage(vreg, vreg->high_vol_level,
+		ret = sdhci_msm_vreg_set_voltage(vreg, vreg->low_vol_level,
 						vreg->high_vol_level);
 		if (ret)
 			return ret;
@@ -3269,7 +3378,8 @@
 	const struct sdhci_msm_offset *msm_host_offset =
 					msm_host->offset;
 
-	if (!msm_host->regs_restore.is_supported)
+	if (!msm_host->regs_restore.is_supported &&
+			!msm_host->reg_store)
 		return;
 
 	msm_host->regs_restore.vendor_func = readl_relaxed(host->ioaddr +
@@ -3333,8 +3443,9 @@
 					msm_host->offset;
 	struct mmc_ios ios = host->mmc->ios;
 
-	if (!msm_host->regs_restore.is_supported ||
-		!msm_host->regs_restore.is_valid)
+	if ((!msm_host->regs_restore.is_supported ||
+		!msm_host->regs_restore.is_valid) &&
+		!msm_host->reg_store)
 		return;
 
 	writel_relaxed(0, host->ioaddr + msm_host_offset->CORE_PWRCTL_MASK);
@@ -3991,6 +4102,73 @@
 	pr_err("-------------------------\n");
 }
 
+#define DUMP_FSM readl_relaxed(host->ioaddr + SDCC_DEBUG_FSM_TRACE_RD_REG)
+#define MAX_FSM 16
+
+void sdhci_msm_dump_fsm_history(struct sdhci_host *host)
+{
+	u32 sel_fsm;
+
+	pr_err("----------- FSM REGISTER DUMP -----------\n");
+	/* select fsm to dump */
+	for (sel_fsm = 0; sel_fsm <= MAX_FSM; sel_fsm++) {
+		writel_relaxed(sel_fsm, host->ioaddr +
+				SDCC_DEBUG_FSM_TRACE_CFG_REG);
+		pr_err(": selected fsm is 0x%08x\n",
+				readl_relaxed(host->ioaddr +
+				SDCC_DEBUG_FSM_TRACE_CFG_REG));
+		/* dump selected fsm history */
+		pr_err("0x%08x 0x%08x 0x%08x 0x%08x\n",
+				readl_relaxed(host->ioaddr +
+					SDCC_DEBUG_FSM_TRACE_RD_REG),
+				readl_relaxed(host->ioaddr +
+					SDCC_DEBUG_FSM_TRACE_RD_REG),
+				readl_relaxed(host->ioaddr +
+					SDCC_DEBUG_FSM_TRACE_RD_REG),
+				readl_relaxed(host->ioaddr +
+					SDCC_DEBUG_FSM_TRACE_RD_REG));
+		pr_err("0x%08x 0x%08x 0x%08x\n",
+				readl_relaxed(host->ioaddr +
+					SDCC_DEBUG_FSM_TRACE_RD_REG),
+				readl_relaxed(host->ioaddr +
+					SDCC_DEBUG_FSM_TRACE_RD_REG),
+				readl_relaxed(host->ioaddr +
+					SDCC_DEBUG_FSM_TRACE_RD_REG));
+	}
+	/* Flush all fsm history */
+	writel_relaxed(DUMMY, host->ioaddr +
+			SDCC_DEBUG_FSM_TRACE_FIFO_FLUSH_REG);
+
+	/* Exit from Auto recovery disable to move FSMs to idle state */
+	writel_relaxed(DUMMY, host->ioaddr +
+			SDCC_DEBUG_ERROR_STATE_EXIT_REG);
+
+}
+
+void sdhci_msm_dump_desc_history(struct sdhci_host *host)
+{
+	pr_err("----------- DESC HISTORY DUMP -----------\n");
+	pr_err("Current Desc Addr: 0x%08x | Info: 0x%08x\n",
+			readl_relaxed(host->ioaddr + SDCC_CURR_DESC_ADDR),
+			readl_relaxed(host->ioaddr + SDCC_CURR_DESC_INFO));
+	pr_err("Processed Desc1 Addr: 0x%08x | Info: 0x%08x\n",
+			readl_relaxed(host->ioaddr + SDCC_PROC_DESC0_ADDR),
+			readl_relaxed(host->ioaddr + SDCC_PROC_DESC0_INFO));
+	pr_err("Processed Desc2 Addr: 0x%08x | Info: 0x%08x\n",
+			readl_relaxed(host->ioaddr + SDCC_PROC_DESC1_ADDR),
+			readl_relaxed(host->ioaddr + SDCC_PROC_DESC1_INFO));
+}
+
+void sdhci_msm_dump_iib(struct sdhci_host *host)
+{
+	u32 iter;
+
+	pr_err("----------- IIB HISTORY DUMP -----------\n");
+	for (iter = 0; iter < 8; iter++)
+		pr_err("0x%08x\n", readl_relaxed(host->ioaddr +
+			SDCC_DEBUG_IIB_REG + (iter * 4)));
+}
+
 void sdhci_msm_dump_vendor_regs(struct sdhci_host *host)
 {
 	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
@@ -4048,6 +4226,14 @@
 			msm_host_offset->CORE_VENDOR_SPEC_FUNC2),
 		readl_relaxed(host->ioaddr +
 			msm_host_offset->CORE_VENDOR_SPEC3));
+
+	if (msm_host->debug_mode_enabled) {
+		sdhci_msm_dump_fsm_history(host);
+		sdhci_msm_dump_desc_history(host);
+	}
+	/* Debug feature enable not must for iib */
+	sdhci_msm_dump_iib(host);
+
 	/*
 	 * tbsel indicates [2:0] bits and tbsel2 indicates [7:4] bits
 	 * of CORE_TESTBUS_CONFIG register.
@@ -4098,6 +4284,8 @@
 	}
 
 	sdhci_reset(host, mask);
+	if ((host->mmc->caps2 & MMC_CAP2_CQE) && (mask & SDHCI_RESET_ALL))
+		cqhci_suspend(host->mmc);
 }
 
 /*
@@ -4737,6 +4925,54 @@
 	return 0;
 }
 
+static void sdhci_msm_hw_reset(struct sdhci_host *host)
+{
+	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
+	struct sdhci_msm_host *msm_host = pltfm_host->priv;
+	struct platform_device *pdev = msm_host->pdev;
+	int ret = -ENOTSUPP;
+
+	if (!msm_host->core_reset) {
+		dev_err(&pdev->dev, "%s: failed, err = %d\n", __func__,
+				ret);
+		return;
+	}
+
+	if (!msm_host->debug_mode_enabled)
+		return;
+	msm_host->reg_store = true;
+	sdhci_msm_exit_dbg_mode(host);
+	sdhci_msm_registers_save(host);
+	if (host->mmc->caps2 & MMC_CAP2_CQE) {
+		host->mmc->cqe_ops->cqe_disable(host->mmc);
+		host->mmc->cqe_enabled = false;
+	}
+
+	ret = reset_control_assert(msm_host->core_reset);
+	if (ret) {
+		dev_err(&pdev->dev, "%s: core_reset assert failed, err = %d\n",
+				__func__, ret);
+		goto out;
+	}
+
+	/*
+	 * The hardware requirement for delay between assert/deassert
+	 * is at least 3-4 sleep clock (32.7KHz) cycles, which comes to
+	 * ~125us (4/32768). To be on the safe side add 200us delay.
+	 */
+	usleep_range(200, 210);
+
+	ret = reset_control_deassert(msm_host->core_reset);
+	if (ret)
+		dev_err(&pdev->dev, "%s: core_reset deassert failed, err = %d\n",
+				__func__, ret);
+
+	sdhci_msm_registers_restore(host);
+	msm_host->reg_store = false;
+out:
+	return;
+}
+
 static struct sdhci_ops sdhci_msm_ops = {
 	.crypto_engine_cfg = sdhci_msm_ice_cfg,
 	.crypto_engine_cfg_end = sdhci_msm_ice_cfg_end,
@@ -4764,6 +5000,9 @@
 	.get_current_limit = sdhci_msm_get_current_limit,
 	.notify_load = sdhci_msm_notify_load,
 	.irq = sdhci_msm_cqe_irq,
+	.enter_dbg_mode = sdhci_msm_enter_dbg_mode,
+	.exit_dbg_mode = sdhci_msm_exit_dbg_mode,
+	.hw_reset = sdhci_msm_hw_reset,
 };
 
 static void sdhci_set_default_hw_caps(struct sdhci_msm_host *msm_host,
@@ -4830,6 +5069,7 @@
 	if ((major == 1) && (minor >= 0x42)) {
 		msm_host->use_updated_dll_reset = true;
 		msm_host->enhanced_strobe = true;
+		msm_host->pdata->caps2 |= MMC_CAP2_HS400_ES;
 	}
 
 	/*
@@ -4920,6 +5160,11 @@
 			ret = clk_prepare_enable(msm_host->ice_clk);
 			if (ret)
 				return ret;
+			ret = clk_set_flags(msm_host->ice_clk,
+					CLKFLAG_RETAIN_MEM);
+			if (ret)
+				dev_err(&pdev->dev, "ICE_CLK set RETAIN_MEM failed: %d\n",
+					ret);
 
 			msm_host->ice_clk_rate =
 				msm_host->pdata->ice_clk_max;
@@ -4982,6 +5227,46 @@
 	return ret;
 }
 
+/*
+ * Changes the bus speed mode for eMMC only as per the
+ * kernel command line parameter passed in the boot image.
+ * If not set remains in HS400ES mode.
+ */
+static void sdhci_msm_select_bus_mode(struct sdhci_host *host)
+{
+	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
+	struct sdhci_msm_host *msm_host = pltfm_host->priv;
+	enum select_bus_mode {SELECT_HS400ES, SELECT_HS400,
+				SELECT_HS200, SELECT_DDR52,
+				SELECT_HS};
+
+	if (bus_mode) {
+		if (bus_mode == SELECT_HS400) {
+			msm_host->enhanced_strobe = false;
+			msm_host->pdata->caps2 &= ~(MMC_CAP2_HS400_ES);
+		} else if (bus_mode == SELECT_HS200) {
+			msm_host->pdata->caps2 &= ~(MMC_CAP2_HS400_ES);
+			msm_host->pdata->caps2 &= ~(MMC_CAP2_HS400);
+		} else if (bus_mode == SELECT_DDR52) {
+			host->quirks2 |= SDHCI_QUIRK2_BROKEN_HS200;
+			msm_host->pdata->caps2 &= ~(MMC_CAP2_HS400_ES);
+			msm_host->pdata->caps2 &= ~(MMC_CAP2_HS400);
+			msm_host->pdata->caps2 &= ~(MMC_CAP2_HS200);
+		} else if (bus_mode == SELECT_HS) {
+			host->quirks2 |= SDHCI_QUIRK2_BROKEN_HS200;
+			msm_host->pdata->caps2 &= ~(MMC_CAP2_HS400_ES);
+			msm_host->pdata->caps2 &= ~(MMC_CAP2_HS400);
+			msm_host->pdata->caps2 &= ~(MMC_CAP2_HS200);
+			msm_host->pdata->caps &= ~(MMC_CAP_3_3V_DDR |
+					MMC_CAP_1_8V_DDR | MMC_CAP_1_2V_DDR);
+			msm_host->mmc->clk_scaling.lower_bus_speed_mode &=
+				~(MMC_SCALING_LOWER_DDR52_MODE);
+		}
+		pr_info("%s: %s: bus_mode=%d set using kernel command line\n",
+			mmc_hostname(host->mmc), __func__, bus_mode);
+	}
+}
+
 static int sdhci_msm_probe(struct platform_device *pdev)
 {
 	const struct sdhci_msm_offset *msm_host_offset;
@@ -5047,6 +5332,16 @@
 		/* skip the probe if eMMC isn't a boot device */
 		if ((ret == 1) && !sdhci_msm_is_bootdevice(&pdev->dev)
 		    && !force_probe) {
+			/* Turn off MEMCORE_ON for core_clk */
+			msm_host->clk = devm_clk_get(&pdev->dev, "core_clk");
+			if (!IS_ERR(msm_host->clk)) {
+				ret = clk_set_flags(msm_host->clk,
+						CLKFLAG_NORETAIN_MEM);
+				if (ret)
+					dev_err(&pdev->dev,
+					"Core clk set NORETAIN_MEM failed: %d\n",
+					ret);
+			}
 			ret = -ENODEV;
 			goto pltfm_free;
 		}
@@ -5134,6 +5429,11 @@
 		dev_err(&pdev->dev, "Core clk not enabled (%d)\n", ret);
 		goto bus_aggr_clk_disable;
 	}
+	ret = clk_set_flags(msm_host->clk, CLKFLAG_NORETAIN_MEM);
+	if (ret)
+		dev_err(&pdev->dev, "Core clk set NORETAIN_MEM failed: %d\n",
+			ret);
+
 	msm_host->clk_rate = sdhci_msm_get_min_clock(host);
 	atomic_set(&msm_host->clks_on, 1);
 
@@ -5231,6 +5531,7 @@
 	}
 	sdhci_set_default_hw_caps(msm_host, host);
 
+	sdhci_msm_select_bus_mode(host);
 	/*
 	 * Set the PAD_PWR_SWITCH_EN bit so that the PAD_PWR_SWITCH bit can
 	 * be used as required later on.
@@ -5343,6 +5644,8 @@
 	msm_host->mmc->caps2 |= MMC_CAP2_MAX_DISCARD_SIZE;
 	msm_host->mmc->caps2 |= MMC_CAP2_SLEEP_AWAKE;
 	msm_host->mmc->pm_caps |= MMC_PM_KEEP_POWER | MMC_PM_WAKE_SDIO_IRQ;
+	if (msm_host->core_reset)
+		msm_host->mmc->caps |= MMC_CAP_HW_RESET;
 
 	if (msm_host->pdata->nonremovable)
 		msm_host->mmc->caps |= MMC_CAP_NONREMOVABLE;
@@ -5674,8 +5977,7 @@
 		goto skip_ice_resume;
 	}
 
-	if (host->mmc &&
-			(host->mmc->ios.timing == MMC_TIMING_MMC_HS400))
+	if (host->mmc->ios.timing == MMC_TIMING_MMC_HS400)
 		sdhci_msm_toggle_fifo_write_clk(host);
 
 	if (host->is_crypto_en) {
diff --git a/drivers/mmc/host/sdhci-msm.h b/drivers/mmc/host/sdhci-msm.h
index 50cb575..fe20609 100644
--- a/drivers/mmc/host/sdhci-msm.h
+++ b/drivers/mmc/host/sdhci-msm.h
@@ -9,8 +9,70 @@
 
 #include <linux/mmc/mmc.h>
 #include <linux/pm_qos.h>
+#include <linux/reset.h>
 #include "sdhci-pltfm.h"
 
+/* check IP CATALOG version */
+#define SDCC_IP_CATALOG 0x328
+
+/* DBG register offsets */
+#define SDCC_TESTBUS_CONFIG 0x32C
+#define SDCC_DEBUG_EN_DIS_REG 0x390
+#define SDCC_DEBUG_FEATURE_CFG_REG 0x394
+#define SDCC_DEBUG_FSM_TRACE_CFG_REG 0x398
+#define SDCC_DEBUG_FSM_TRACE_RD_REG 0x39C
+#define SDCC_DEBUG_FSM_TRACE_FIFO_FLUSH_REG 0x3A0
+#define SDCC_DEBUG_PANIC_ERROR_EN_REG 0x3A4
+#define SDCC_DEBUG_ERROR_STATE_EXIT_REG 0x3B8
+#define SDCC_CURR_DESC_ADDR 0x3EC
+#define SDCC_CURR_DESC_INFO 0x3F0
+#define SDCC_PROC_DESC0_ADDR 0x3E4
+#define SDCC_PROC_DESC0_INFO 0x3E8
+#define SDCC_PROC_DESC1_ADDR 0x3DC
+#define SDCC_PROC_DESC1_INFO 0x3E0
+#define SDCC_DEBUG_IIB_REG 0x980
+#define SDCC_DEBUG_MASK_PATTERN_REG 0x3C0
+#define SDCC_DEBUG_MATCH_PATTERN_REG 0x3C4
+#define SDCC_DEBUG_MM_TB_CFG_REG 0x3BC
+
+#define ENABLE_DBG 0x35350000
+#define DISABLE_DBG 0x26260000
+
+#define DUMMY 0x1 /* value doesn't matter */
+
+/* Panic on Err */
+#define BOOT_ACK_REC_EN BIT(0)
+#define BOOT_ACK_ERR_EN BIT(1)
+#define BOOT_TIMEOUT_EN BIT(2)
+#define AUTO_CMD19_TOUT_EN BIT(3)
+#define STBITE_EN BIT(4)
+#define CTOUT_EN BIT(5)
+#define CCRCF_EN BIT(6)
+#define CMD_END_BIT_ERR_EN BIT(7)
+#define CMD_INDEX_ERR_EN BIT(8)
+#define DTOUT_EN BIT(9)
+#define DCRCF_EN BIT(10)
+#define DATA_END_BIT_ERR_EN BIT(11)
+#define CMDQ_HALT_ACK_INT_EN BIT(16)
+#define CMDQ_TASK_COMPLETED_INT_EN BIT(17)
+#define CMDQ_RESP_ERR_INT_EN BIT(18)
+#define CMDQ_TASK_CLEARED_INT_EN BIT(19)
+#define CMDQ_GENERAL_CRYPTO_ERROR_EN BIT(20)
+#define CMDQ_INVALID_CRYPTO_CFG_ERROR_EN BIT(21)
+#define CMDQ_DEVICE_EXCEPTION_INT_EN BIT(22)
+#define ADMA_ERROR_EXT_EN BIT(23)
+#define HC_NONCQ_ICE_INT_STATUS_MASKED_EN BIT(24)
+
+/* Select debug Feature */
+#define FSM_HISTORY BIT(0)
+#define PANIC_ALERT BIT(1)
+#define AUTO_RECOVERY_DISABLE BIT(2)
+#define MM_TRIGGER_DISABLE BIT(3)
+#define DESC_HISTORY BIT(4)
+#define IIB_EN BIT(6)
+
+#define TESTBUS_EN BIT(31)
+
 /* This structure keeps information per regulator */
 struct sdhci_msm_reg_data {
 	/* voltage regulator handle */
@@ -267,6 +329,9 @@
 	struct sdhci_msm_dll_hsr *dll_hsr;
 	struct sdhci_msm_ice_data ice;
 	u32 ice_clk_rate;
+	bool debug_mode_enabled;
+	bool reg_store;
+	struct reset_control *core_reset;
 };
 
 extern char *saved_command_line;
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index bb24903..505fcf4 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -2418,6 +2418,22 @@
 		host->ops->hw_reset(host);
 }
 
+static void sdhci_enter_dbg_mode(struct mmc_host *mmc)
+{
+	struct sdhci_host *host = mmc_priv(mmc);
+
+	if (host->ops && host->ops->enter_dbg_mode)
+		host->ops->enter_dbg_mode(host);
+}
+
+static void sdhci_exit_dbg_mode(struct mmc_host *mmc)
+{
+	struct sdhci_host *host = mmc_priv(mmc);
+
+	if (host->ops && host->ops->exit_dbg_mode)
+		host->ops->exit_dbg_mode(host);
+}
+
 static void sdhci_enable_sdio_irq_nolock(struct sdhci_host *host, int enable)
 {
 	u16 ctrl = 0;
@@ -2968,6 +2984,8 @@
 	.get_cd		= sdhci_get_cd,
 	.get_ro		= sdhci_get_ro,
 	.hw_reset	= sdhci_hw_reset,
+	.enter_dbg_mode = sdhci_enter_dbg_mode,
+	.exit_dbg_mode = sdhci_exit_dbg_mode,
 	.enable_sdio_irq = sdhci_enable_sdio_irq,
 	.start_signal_voltage_switch	= sdhci_start_signal_voltage_switch,
 	.prepare_hs400_tuning		= sdhci_prepare_hs400_tuning,
@@ -3440,9 +3458,7 @@
 				intmask, host->data->error,
 				ktime_to_ms(ktime_sub(ktime_get(),
 				host->data_start_time)));
-
-			if (host->mmc->ios.timing != MMC_TIMING_UHS_SDR104)
-				sdhci_dumpregs(host);
+			sdhci_dumpregs(host);
 		}
 		sdhci_finish_data(host);
 	} else {
@@ -3971,9 +3987,12 @@
 		*data_error = 0;
 
 	/* Clear selected interrupts. */
+	if (*data_error || *cmd_error)
+		goto skip_intr_clear;
 	mask = intmask & host->cqe_ier;
 	sdhci_writel(host, mask, SDHCI_INT_STATUS);
 
+skip_intr_clear:
 	if (intmask & SDHCI_INT_BUS_POWER)
 		pr_err("%s: Card is consuming too much power!\n",
 		       mmc_hostname(host->mmc));
diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
index 81a49ca..84a98bc 100644
--- a/drivers/mmc/host/sdhci.h
+++ b/drivers/mmc/host/sdhci.h
@@ -747,6 +747,8 @@
 	void	(*pre_req)(struct sdhci_host *host, struct mmc_request *req);
 	void	(*post_req)(struct sdhci_host *host, struct mmc_request *req);
 	unsigned int	(*get_current_limit)(struct sdhci_host *host);
+	void	(*enter_dbg_mode)(struct sdhci_host *host);
+	void	(*exit_dbg_mode)(struct sdhci_host *host);
 };
 
 #ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS
diff --git a/drivers/net/can/spi/Kconfig b/drivers/net/can/spi/Kconfig
index 792e9c6..4399293 100644
--- a/drivers/net/can/spi/Kconfig
+++ b/drivers/net/can/spi/Kconfig
@@ -14,4 +14,14 @@
 	  Driver for the Microchip MCP251x and MCP25625 SPI CAN
 	  controllers.
 
+config CAN_MCP25XXFD
+	tristate "Microchip MCP25xxFD SPI CAN controllers"
+	depends on HAS_DMA
+	help
+	  The driver for the Microchip MCP25XXFD SPI FD-CAN
+	  controller family.
+	  Say yes here to build support for SPI to CAN devices
+	  mcp25xxfd. To compilethis driver as a module, choose
+	  M here: the module will be called mcp25xxfd.
+
 endmenu
diff --git a/drivers/net/can/spi/Makefile b/drivers/net/can/spi/Makefile
index f59fa37..e352dbc 100644
--- a/drivers/net/can/spi/Makefile
+++ b/drivers/net/can/spi/Makefile
@@ -5,3 +5,4 @@
 
 obj-$(CONFIG_CAN_HI311X)	+= hi311x.o
 obj-$(CONFIG_CAN_MCP251X)	+= mcp251x.o
+obj-$(CONFIG_CAN_MCP25XXFD) += mcp25xxfd.o
diff --git a/drivers/net/can/spi/mcp25xxfd.c b/drivers/net/can/spi/mcp25xxfd.c
new file mode 100644
index 0000000..3ba4663
--- /dev/null
+++ b/drivers/net/can/spi/mcp25xxfd.c
@@ -0,0 +1,4519 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/* Copyright (c) 2020, The Linux Foundation. All rights reserved.
+ *
+ * CAN bus driver for Microchip 25XXFD CAN Controller with SPI Interface
+ *
+ * Copyright 2017 Martin Sperl <kernel@xxxxxxxxxxxxxxxx>
+ *
+ * SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note
+ *
+ * Based on Microchip MCP251x CAN controller driver written by
+ * David Vrabel, Copyright 2006 Arcom Control Systems Ltd.
+ *
+ */
+
+#include <linux/can/core.h>
+#include <linux/can/dev.h>
+#include <linux/can/led.h>
+#include <linux/clk.h>
+#include <linux/completion.h>
+#include <linux/debugfs.h>
+#include <linux/delay.h>
+#include <linux/device.h>
+#include <linux/dma-mapping.h>
+#include <linux/freezer.h>
+#include <linux/gpio/driver.h>
+#include <linux/interrupt.h>
+#include <linux/io.h>
+#include <linux/jiffies.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/netdevice.h>
+#include <linux/of.h>
+#include <linux/of_device.h>
+#include <linux/platform_device.h>
+#include <linux/slab.h>
+#include <linux/sort.h>
+#include <linux/spi/spi.h>
+#include <linux/uaccess.h>
+#include <linux/regulator/consumer.h>
+
+#define DEVICE_NAME "mcp25xxfd"
+
+/* device description and rational:
+ *
+ * the mcp25xxfd is a CanFD controller that also supports can2.0 only
+ * modes.
+ * It is connected via spi to the host and requires at minimum a single
+ * irq line in addition to the SPI lines - it is not mentioned explicitly
+ * in the documentation but in principle SPI 3-wire should be possible.
+ *
+ * The clock connected is typically 4MHz, 20MHz or 40MHz.
+ * For the 4MHz clock the controller contains 10x PLL circuitry.
+ *
+ * The controller itself has 2KB or ECC-SRAM for data.
+ * It also has 32 FIFOs (of up to 32 CAN-frames).
+ * There are 4 Fifo types which can get configured:
+ * * TEF - Transmission Event Fifo - which consumes FIFO 0
+ *   even if it is not configured
+ * * Tansmission Queue - for up to 32 Frames.
+ *   this queue reorders CAN frames to get transmitted following the
+ *   typical CAN dominant/recessive rules on the can bus itself.
+ *   This FIFO is optional.
+ * * TX FIFO: generic TX fifos that can contain arbitrary data
+ *   and which come with a configurable priority for transmission
+ *   It is also possible to have the Controller automatically trigger
+ *   a transfer when a Filter Rule for a RTR frame matches.
+ *   Each of these fifos in principle can get configured for distinct
+ *   dlc sizes (8 thru 64 bytes)
+ * * RX FIFO: generic RX fifo which is filled via filter-rules.
+ *   Each of these fifos in principle can get configured for distinct
+ *   dlc sizes (8 thru 64 bytes)
+ *   Unfortunately there is no filter rule that would allow triggering
+ *   on different frame sizes, so for all practical purposes the
+ *   RX fifos have to be of the same size (unless one wants to experience
+ *   lost data).
+ * When a Can Frame is transmitted fromthe TX Queue or an individual
+ * TX FIFO then a small TEF Frame can get added to the TEF FIFO queue
+ * to log the Transmission of the frame - this includes ID, Flags
+ * (including a custom identifier/index) .
+ *
+ * The controller provides an optional free running counter with a divider
+ * for timestamping of RX frames as well as for TEF entries.
+ *
+ * Driver Implementation details and rational:
+ * * The whole driver has been designed to give best performance
+ *   and as little packet loss as possible with 1MHZ Can frames with DLC=0
+ *   on small/slow devices like the Raspberry Pi 1
+ * * This means that some optimizations for full duplex communication
+ *   have been implemented to avoid CPU introduced latencies
+ *   (especially for spi_write_then_read cases) - this only applies to
+ *   4 wire SPI busses.
+ * * Due to the fact that the TXQ does reorder Can-Frames we do not make
+ *   use of it to avoid unexpected behaviour (say when running a
+ *   firmware upgrade via Can)
+ * * this means we use individual TX-fifos with a given priority and
+ *   we have to wait until all the TX fifos have been transmitted before
+ *   we can restart the networking queue to avoid reordering the frames on
+ *   the Can bus itself.
+ *   Still we can transmit a transmit only Duty-cycle of 66% to 90% on the
+ *   Can bus (at 1MHz).
+ *   The scaling factors here are:
+ *   * Can bus speed - lower Speeds increase Duty-cycle
+ *   * SPI Clock Rate - higher speeds increase duty-cycle
+ *   * CPU speed + SPI implementation - reduces latencies between transfers
+ * * There is a module parameter that allows the modification of the
+ *   number of tx_fifos, which is by default 7.
+ * * The driver offers some module parameters that allow to control the use
+ *   of some optimizations (prefer reading more data than necessary instead
+ *   of multiple SPI transfers - the idea here is that this way we may
+ *   allow the SPI-controller to use DMA instead of programmed IO to
+ *   limit latencies/number of interrupts)
+ *   When we have to read multiple RX frames in CanFD mode:
+ *   * we allow reading all 64 bytes of payload even if DLC <=8
+ *     this mode is used in Can2.0 only mode by default and can not get
+ *     disabled (SRAM Reads have to be a multiple of 4 bytes anyway)
+ *   * Releasing/freeing the RX queue requires writing of 1 byte per fifo.
+ *     unfortunately these 32-bit registers are not ajacent to each other,
+ *     so that for 2 consecutive RX Frames instead of writing 1 byte per
+ *     fifo (with protocol overhead of 2 bytes - so a total of 6 bytes in
+ *     2 transfers) we transmit 13 bytes (with a protocol overhead of 2 -
+ *     so a total of 15 bytes)
+ *     This optimization is only enabled by a module parameter.
+ * * we use TEF + time stamping to record the transmitted frames
+ *   including their timestamp - we use this to order TX and RX frames
+ *   when submitting them to the network stack.
+ * * due to the inability to "filter" based on DLC sizes we have to use
+ *   a common FIFO size. This is 8 bytes for Can2.0 and 64 bytes for CanFD.
+ * * the driver tries to detect the Controller only by reading registers,
+ *   but there are circumstances (e.g. after a crashed driver) where we
+ *   have to "blindly" configure the clock rate to get the controller to
+ *   respond correctly.
+ * * There is one situation where the controller will require a full POR
+ *   (total power off) to recover from a bad Clock configuration.
+ *   This happens when the wrong clock is configured in the device tree
+ *   (say 4MHz are configured, while 20 or 40MHz are used)
+ *   in such a situation the driver tries to enable the PLL, which will
+ *   never synchronize and the controller becomes unresponsive to further
+ *   spi requests until a POR.
+ */
+
+#define MCP25XXFD_OST_DELAY_MS		3
+#define MCP25XXFD_MIN_CLOCK_FREQUENCY	1000000
+#define MCP25XXFD_MAX_CLOCK_FREQUENCY	40000000
+#define MCP25XXFD_PLL_MULTIPLIER	10
+#define MCP25XXFD_AUTO_PLL_MAX_CLOCK_FREQUENCY				\
+	(MCP25XXFD_MAX_CLOCK_FREQUENCY / MCP25XXFD_PLL_MULTIPLIER)
+#define MCP25XXFD_SCLK_DIVIDER		2
+
+#define MCP25XXFD_OSC_POLLING_JIFFIES	(HZ / 2)
+
+#define TX_ECHO_SKB_MAX	32
+
+#define INSTRUCTION_RESET		0x0000
+#define INSTRUCTION_READ		0x3000
+#define INSTRUCTION_WRITE		0x2000
+#define INSTRUCTION_READ_CRC		0xB000
+#define INSTRUCTION_WRITE_CRC		0xA000
+#define INSTRUCTION_WRITE_SAVE		0xC000
+
+#define ADDRESS_MASK			0x0fff
+
+#define MCP25XXFD_SFR_BASE(x)		(0xE00 + (x))
+#define MCP25XXFD_OSC			MCP25XXFD_SFR_BASE(0x00)
+#  define MCP25XXFD_OSC_PLLEN		BIT(0)
+#  define MCP25XXFD_OSC_OSCDIS		BIT(2)
+#  define MCP25XXFD_OSC_SCLKDIV		BIT(4)
+#  define MCP25XXFD_OSC_CLKODIV_BITS	2
+#  define MCP25XXFD_OSC_CLKODIV_SHIFT	5
+#  define MCP25XXFD_OSC_CLKODIV_MASK			\
+	GENMASK(MCP25XXFD_OSC_CLKODIV_SHIFT		\
+		+ MCP25XXFD_OSC_CLKODIV_BITS - 1,	\
+		MCP25XXFD_OSC_CLKODIV_SHIFT)
+#  define MCP25XXFD_OSC_CLKODIV_10	3
+#  define MCP25XXFD_OSC_CLKODIV_4	2
+#  define MCP25XXFD_OSC_CLKODIV_2	1
+#  define MCP25XXFD_OSC_CLKODIV_1	0
+#  define MCP25XXFD_OSC_PLLRDY		BIT(8)
+#  define MCP25XXFD_OSC_OSCRDY		BIT(10)
+#  define MCP25XXFD_OSC_SCLKRDY		BIT(12)
+#define MCP25XXFD_IOCON			MCP25XXFD_SFR_BASE(0x04)
+#  define MCP25XXFD_IOCON_TRIS0		BIT(0)
+#  define MCP25XXFD_IOCON_TRIS1		BIT(1)
+#  define MCP25XXFD_IOCON_XSTBYEN	BIT(6)
+#  define MCP25XXFD_IOCON_LAT0		BIT(8)
+#  define MCP25XXFD_IOCON_LAT1		BIT(9)
+#  define MCP25XXFD_IOCON_GPIO0		BIT(16)
+#  define MCP25XXFD_IOCON_GPIO1		BIT(17)
+#  define MCP25XXFD_IOCON_PM0		BIT(24)
+#  define MCP25XXFD_IOCON_PM1		BIT(25)
+#  define MCP25XXFD_IOCON_TXCANOD	BIT(28)
+#  define MCP25XXFD_IOCON_SOF		BIT(29)
+#  define MCP25XXFD_IOCON_INTOD		BIT(29)
+#define MCP25XXFD_CRC			MCP25XXFD_SFR_BASE(0x08)
+#  define MCP25XXFD_CRC_MASK		GENMASK(15, 0)
+#  define MCP25XXFD_CRC_CRCERRIE	BIT(16)
+#  define MCP25XXFD_CRC_FERRIE		BIT(17)
+#  define MCP25XXFD_CRC_CRCERRIF	BIT(24)
+#  define MCP25XXFD_CRC_FERRIF		BIT(25)
+#define MCP25XXFD_ECCCON		MCP25XXFD_SFR_BASE(0x0C)
+#  define MCP25XXFD_ECCCON_ECCEN	BIT(0)
+#  define MCP25XXFD_ECCCON_SECIE	BIT(1)
+#  define MCP25XXFD_ECCCON_DEDIE	BIT(2)
+#  define MCP25XXFD_ECCCON_PARITY_BITS 6
+#  define MCP25XXFD_ECCCON_PARITY_SHIFT 8
+#  define MCP25XXFD_ECCCON_PARITY_MASK			\
+	GENMASK(MCP25XXFD_ECCCON_PARITY_SHIFT		\
+		+ MCP25XXFD_ECCCON_PARITY_BITS - 1,	\
+		MCP25XXFD_ECCCON_PARITY_SHIFT)
+#define MCP25XXFD_ECCSTAT		MCP25XXFD_SFR_BASE(0x10)
+#  define MCP25XXFD_ECCSTAT_SECIF	BIT(1)
+#  define MCP25XXFD_ECCSTAT_DEDIF	BIT(2)
+#  define MCP25XXFD_ECCSTAT_ERRADDR_SHIFT 8
+#  define MCP25XXFD_ECCSTAT_ERRADDR_MASK	      \
+	GENMASK(MCP25XXFD_ECCSTAT_ERRADDR_SHIFT + 11, \
+		MCP25XXFD_ECCSTAT_ERRADDR_SHIFT)
+
+#define CAN_SFR_BASE(x)			(0x000 + (x))
+#define CAN_CON				CAN_SFR_BASE(0x00)
+#  define CAN_CON_DNCNT_BITS		5
+#  define CAN_CON_DNCNT_SHIFT		0
+#  define CAN_CON_DNCNT_MASK					\
+	GENMASK(CAN_CON_DNCNT_SHIFT + CAN_CON_DNCNT_BITS - 1,	\
+		CAN_CON_DNCNT_SHIFT)
+#  define CAN_CON_ISOCRCEN		BIT(5)
+#  define CAN_CON_PXEDIS		BIT(6)
+#  define CAN_CON_WAKFIL		BIT(8)
+#  define CAN_CON_WFT_BITS		2
+#  define CAN_CON_WFT_SHIFT		9
+#  define CAN_CON_WFT_MASK					\
+	GENMASK(CAN_CON_WFT_SHIFT + CAN_CON_WFT_BITS - 1,	\
+		CAN_CON_WFT_SHIFT)
+#  define CAN_CON_BUSY			BIT(11)
+#  define CAN_CON_BRSDIS		BIT(12)
+#  define CAN_CON_RTXAT			BIT(16)
+#  define CAN_CON_ESIGM			BIT(17)
+#  define CAN_CON_SERR2LOM		BIT(18)
+#  define CAN_CON_STEF			BIT(19)
+#  define CAN_CON_TXQEN			BIT(20)
+#  define CAN_CON_OPMODE_BITS		3
+#  define CAN_CON_OPMOD_SHIFT		21
+#  define CAN_CON_OPMOD_MASK					\
+	GENMASK(CAN_CON_OPMOD_SHIFT + CAN_CON_OPMODE_BITS - 1,	\
+		CAN_CON_OPMOD_SHIFT)
+#  define CAN_CON_REQOP_BITS		3
+#  define CAN_CON_REQOP_SHIFT		24
+#  define CAN_CON_REQOP_MASK					\
+	GENMASK(CAN_CON_REQOP_SHIFT + CAN_CON_REQOP_BITS - 1,	\
+		CAN_CON_REQOP_SHIFT)
+#    define CAN_CON_MODE_MIXED			0
+#    define CAN_CON_MODE_SLEEP			1
+#    define CAN_CON_MODE_INTERNAL_LOOPBACK	2
+#    define CAN_CON_MODE_LISTENONLY		3
+#    define CAN_CON_MODE_CONFIG			4
+#    define CAN_CON_MODE_EXTERNAL_LOOPBACK	5
+#    define CAN_CON_MODE_CAN2_0			6
+#    define CAN_CON_MODE_RESTRICTED		7
+#  define CAN_CON_ABAT			BIT(27)
+#  define CAN_CON_TXBWS_BITS		3
+#  define CAN_CON_TXBWS_SHIFT		28
+#  define CAN_CON_TXBWS_MASK					\
+	GENMASK(CAN_CON_TXBWS_SHIFT + CAN_CON_TXBWS_BITS - 1,	\
+		CAN_CON_TXBWS_SHIFT)
+#  define CAN_CON_DEFAULT				\
+	(CAN_CON_ISOCRCEN |				\
+	 CAN_CON_PXEDIS |				\
+	 CAN_CON_WAKFIL |				\
+	 (3 << CAN_CON_WFT_SHIFT) |			\
+	 CAN_CON_STEF |					\
+	 CAN_CON_TXQEN |				\
+	 (CAN_CON_MODE_CONFIG << CAN_CON_OPMOD_SHIFT) |	\
+	 (CAN_CON_MODE_CONFIG << CAN_CON_REQOP_SHIFT))
+#  define CAN_CON_DEFAULT_MASK	\
+	(CAN_CON_DNCNT_MASK |	\
+	 CAN_CON_ISOCRCEN |	\
+	 CAN_CON_PXEDIS |	\
+	 CAN_CON_WAKFIL |	\
+	 CAN_CON_WFT_MASK |	\
+	 CAN_CON_BRSDIS |	\
+	 CAN_CON_RTXAT |	\
+	 CAN_CON_ESIGM |	\
+	 CAN_CON_SERR2LOM |	\
+	 CAN_CON_STEF |		\
+	 CAN_CON_TXQEN |	\
+	 CAN_CON_OPMOD_MASK |	\
+	 CAN_CON_REQOP_MASK |	\
+	 CAN_CON_ABAT |		\
+	 CAN_CON_TXBWS_MASK)
+#define CAN_NBTCFG			CAN_SFR_BASE(0x04)
+#  define CAN_NBTCFG_SJW_BITS		7
+#  define CAN_NBTCFG_SJW_SHIFT		0
+#  define CAN_NBTCFG_SJW_MASK					\
+	GENMASK(CAN_NBTCFG_SJW_SHIFT + CAN_NBTCFG_SJW_BITS - 1, \
+		CAN_NBTCFG_SJW_SHIFT)
+#  define CAN_NBTCFG_TSEG2_BITS		7
+#  define CAN_NBTCFG_TSEG2_SHIFT	8
+#  define CAN_NBTCFG_TSEG2_MASK					    \
+	GENMASK(CAN_NBTCFG_TSEG2_SHIFT + CAN_NBTCFG_TSEG2_BITS - 1, \
+		CAN_NBTCFG_TSEG2_SHIFT)
+#  define CAN_NBTCFG_TSEG1_BITS		8
+#  define CAN_NBTCFG_TSEG1_SHIFT	16
+#  define CAN_NBTCFG_TSEG1_MASK					    \
+	GENMASK(CAN_NBTCFG_TSEG1_SHIFT + CAN_NBTCFG_TSEG1_BITS - 1, \
+		CAN_NBTCFG_TSEG1_SHIFT)
+#  define CAN_NBTCFG_BRP_BITS		8
+#  define CAN_NBTCFG_BRP_SHIFT		24
+#  define CAN_NBTCFG_BRP_MASK					\
+	GENMASK(CAN_NBTCFG_BRP_SHIFT + CAN_NBTCFG_BRP_BITS - 1, \
+		CAN_NBTCFG_BRP_SHIFT)
+#define CAN_DBTCFG			CAN_SFR_BASE(0x08)
+#  define CAN_DBTCFG_SJW_BITS		4
+#  define CAN_DBTCFG_SJW_SHIFT		0
+#  define CAN_DBTCFG_SJW_MASK					\
+	GENMASK(CAN_DBTCFG_SJW_SHIFT + CAN_DBTCFG_SJW_BITS - 1, \
+		CAN_DBTCFG_SJW_SHIFT)
+#  define CAN_DBTCFG_TSEG2_BITS		4
+#  define CAN_DBTCFG_TSEG2_SHIFT	8
+#  define CAN_DBTCFG_TSEG2_MASK					    \
+	GENMASK(CAN_DBTCFG_TSEG2_SHIFT + CAN_DBTCFG_TSEG2_BITS - 1, \
+		CAN_DBTCFG_TSEG2_SHIFT)
+#  define CAN_DBTCFG_TSEG1_BITS		5
+#  define CAN_DBTCFG_TSEG1_SHIFT	16
+#  define CAN_DBTCFG_TSEG1_MASK					    \
+	GENMASK(CAN_DBTCFG_TSEG1_SHIFT + CAN_DBTCFG_TSEG1_BITS - 1, \
+		CAN_DBTCFG_TSEG1_SHIFT)
+#  define CAN_DBTCFG_BRP_BITS		8
+#  define CAN_DBTCFG_BRP_SHIFT		24
+#  define CAN_DBTCFG_BRP_MASK					\
+	GENMASK(CAN_DBTCFG_BRP_SHIFT + CAN_DBTCFG_BRP_BITS - 1, \
+		CAN_DBTCFG_BRP_SHIFT)
+#define CAN_TDC				CAN_SFR_BASE(0x0C)
+#  define CAN_TDC_TDCV_BITS		5
+#  define CAN_TDC_TDCV_SHIFT		0
+#  define CAN_TDC_TDCV_MASK					\
+	GENMASK(CAN_TDC_TDCV_SHIFT + CAN_TDC_TDCV_BITS - 1, \
+		CAN_TDC_TDCV_SHIFT)
+#  define CAN_TDC_TDCO_BITS		5
+#  define CAN_TDC_TDCO_SHIFT		8
+#  define CAN_TDC_TDCO_MASK					\
+	GENMASK(CAN_TDC_TDCO_SHIFT + CAN_TDC_TDCO_BITS - 1, \
+		CAN_TDC_TDCO_SHIFT)
+#  define CAN_TDC_TDCMOD_BITS		2
+#  define CAN_TDC_TDCMOD_SHIFT		16
+#  define CAN_TDC_TDCMOD_MASK					\
+	GENMASK(CAN_TDC_TDCMOD_SHIFT + CAN_TDC_TDCMOD_BITS - 1, \
+		CAN_TDC_TDCMOD_SHIFT)
+#  define CAN_TDC_TDCMOD_DISABLED	0
+#  define CAN_TDC_TDCMOD_MANUAL		1
+#  define CAN_TDC_TDCMOD_AUTO		2
+#  define CAN_TDC_SID11EN		BIT(24)
+#  define CAN_TDC_EDGFLTEN		BIT(25)
+#define CAN_TBC				CAN_SFR_BASE(0x10)
+#define CAN_TSCON			CAN_SFR_BASE(0x14)
+#  define CAN_TSCON_TBCPRE_BITS		10
+#  define CAN_TSCON_TBCPRE_SHIFT	0
+#  define CAN_TSCON_TBCPRE_MASK					    \
+	GENMASK(CAN_TSCON_TBCPRE_SHIFT + CAN_TSCON_TBCPRE_BITS - 1, \
+		CAN_TSCON_TBCPRE_SHIFT)
+#  define CAN_TSCON_TBCEN		BIT(16)
+#  define CAN_TSCON_TSEOF		BIT(17)
+#  define CAN_TSCON_TSRES		BIT(18)
+#define CAN_VEC				CAN_SFR_BASE(0x18)
+#  define CAN_VEC_ICODE_BITS		7
+#  define CAN_VEC_ICODE_SHIFT		0
+#  define CAN_VEC_ICODE_MASK					    \
+	GENMASK(CAN_VEC_ICODE_SHIFT + CAN_VEC_ICODE_BITS - 1,	    \
+		CAN_VEC_ICODE_SHIFT)
+#  define CAN_VEC_FILHIT_BITS		5
+#  define CAN_VEC_FILHIT_SHIFT		8
+#  define CAN_VEC_FILHIT_MASK					\
+	GENMASK(CAN_VEC_FILHIT_SHIFT + CAN_VEC_FILHIT_BITS - 1, \
+		CAN_VEC_FILHIT_SHIFT)
+#  define CAN_VEC_TXCODE_BITS		7
+#  define CAN_VEC_TXCODE_SHIFT		16
+#  define CAN_VEC_TXCODE_MASK					\
+	GENMASK(CAN_VEC_TXCODE_SHIFT + CAN_VEC_TXCODE_BITS - 1, \
+		CAN_VEC_TXCODE_SHIFT)
+#  define CAN_VEC_RXCODE_BITS		7
+#  define CAN_VEC_RXCODE_SHIFT		24
+#  define CAN_VEC_RXCODE_MASK					\
+	GENMASK(CAN_VEC_RXCODE_SHIFT + CAN_VEC_RXCODE_BITS - 1, \
+		CAN_VEC_RXCODE_SHIFT)
+#define CAN_INT				CAN_SFR_BASE(0x1C)
+#  define CAN_INT_IF_SHIFT		0
+#  define CAN_INT_TXIF			BIT(0)
+#  define CAN_INT_RXIF			BIT(1)
+#  define CAN_INT_TBCIF			BIT(2)
+#  define CAN_INT_MODIF			BIT(3)
+#  define CAN_INT_TEFIF			BIT(4)
+#  define CAN_INT_ECCIF			BIT(8)
+#  define CAN_INT_SPICRCIF		BIT(9)
+#  define CAN_INT_TXATIF		BIT(10)
+#  define CAN_INT_RXOVIF		BIT(11)
+#  define CAN_INT_SERRIF		BIT(12)
+#  define CAN_INT_CERRIF		BIT(13)
+#  define CAN_INT_WAKIF			BIT(14)
+#  define CAN_INT_IVMIF			BIT(15)
+#  define CAN_INT_IF_MASK		\
+	(CAN_INT_TXIF |			\
+	 CAN_INT_RXIF |			\
+	 CAN_INT_TBCIF	|		\
+	 CAN_INT_MODIF	|		\
+	 CAN_INT_TEFIF	|		\
+	 CAN_INT_ECCIF	|		\
+	 CAN_INT_SPICRCIF |		\
+	 CAN_INT_TXATIF |		\
+	 CAN_INT_RXOVIF |		\
+	 CAN_INT_CERRIF |		\
+	 CAN_INT_SERRIF |		\
+	 CAN_INT_WAKEIF |		\
+	 CAN_INT_IVMIF)
+#  define CAN_INT_IE_SHIFT		16
+#  define CAN_INT_TXIE			(CAN_INT_TXIF << CAN_INT_IE_SHIFT)
+#  define CAN_INT_RXIE			(CAN_INT_RXIF << CAN_INT_IE_SHIFT)
+#  define CAN_INT_TBCIE			(CAN_INT_TBCIF << CAN_INT_IE_SHIFT)
+#  define CAN_INT_MODIE			(CAN_INT_MODIF << CAN_INT_IE_SHIFT)
+#  define CAN_INT_TEFIE			(CAN_INT_TEFIF << CAN_INT_IE_SHIFT)
+#  define CAN_INT_ECCIE			(CAN_INT_ECCIF << CAN_INT_IE_SHIFT)
+#  define CAN_INT_SPICRCIE		\
+	(CAN_INT_SPICRCIF << CAN_INT_IE_SHIFT)
+#  define CAN_INT_TXATIE		(CAN_INT_TXATIF << CAN_INT_IE_SHIFT)
+#  define CAN_INT_RXOVIE		(CAN_INT_RXOVIF << CAN_INT_IE_SHIFT)
+#  define CAN_INT_CERRIE		(CAN_INT_CERRIF << CAN_INT_IE_SHIFT)
+#  define CAN_INT_SERRIE		(CAN_INT_SERRIF << CAN_INT_IE_SHIFT)
+#  define CAN_INT_WAKIE			(CAN_INT_WAKIF << CAN_INT_IE_SHIFT)
+#  define CAN_INT_IVMIE			(CAN_INT_IVMIF << CAN_INT_IE_SHIFT)
+#  define CAN_INT_IE_MASK		\
+	(CAN_INT_TXIE |			\
+	 CAN_INT_RXIE |			\
+	 CAN_INT_TBCIE	|		\
+	 CAN_INT_MODIE	|		\
+	 CAN_INT_TEFIE	|		\
+	 CAN_INT_ECCIE	|		\
+	 CAN_INT_SPICRCIE |		\
+	 CAN_INT_TXATIE |		\
+	 CAN_INT_RXOVIE |		\
+	 CAN_INT_CERRIE |		\
+	 CAN_INT_SERRIE |		\
+	 CAN_INT_WAKEIE |		\
+	 CAN_INT_IVMIE)
+#define CAN_RXIF			CAN_SFR_BASE(0x20)
+#define CAN_TXIF			CAN_SFR_BASE(0x24)
+#define CAN_RXOVIF			CAN_SFR_BASE(0x28)
+#define CAN_TXATIF			CAN_SFR_BASE(0x2C)
+#define CAN_TXREQ			CAN_SFR_BASE(0x30)
+#define CAN_TREC			CAN_SFR_BASE(0x34)
+#  define CAN_TREC_REC_BITS		8
+#  define CAN_TREC_REC_SHIFT		0
+#  define CAN_TREC_REC_MASK				    \
+	GENMASK(CAN_TREC_REC_SHIFT + CAN_TREC_REC_BITS - 1, \
+		CAN_TREC_REC_SHIFT)
+#  define CAN_TREC_TEC_BITS		8
+#  define CAN_TREC_TEC_SHIFT		8
+#  define CAN_TREC_TEC_MASK				    \
+	GENMASK(CAN_TREC_TEC_SHIFT + CAN_TREC_TEC_BITS - 1, \
+		CAN_TREC_TEC_SHIFT)
+#  define CAN_TREC_EWARN		BIT(16)
+#  define CAN_TREC_RXWARN		BIT(17)
+#  define CAN_TREC_TXWARN		BIT(18)
+#  define CAN_TREC_RXBP			BIT(19)
+#  define CAN_TREC_TXBP			BIT(20)
+#  define CAN_TREC_TXBO			BIT(21)
+#define CAN_BDIAG0			CAN_SFR_BASE(0x38)
+#  define CAN_BDIAG0_NRERRCNT_BITS	8
+#  define CAN_BDIAG0_NRERRCNT_SHIFT	0
+#  define CAN_BDIAG0_NRERRCNT_MASK				\
+	GENMASK(CAN_BDIAG0_NRERRCNT_SHIFT + CAN_BDIAG0_NRERRCNT_BITS - 1, \
+		CAN_BDIAG0_NRERRCNT_SHIFT)
+#  define CAN_BDIAG0_NTERRCNT_BITS	8
+#  define CAN_BDIAG0_NTERRCNT_SHIFT	8
+#  define CAN_BDIAG0_NTERRCNT_MASK					\
+	GENMASK(CAN_BDIAG0_NTERRCNT_SHIFT + CAN_BDIAG0_NTERRCNT_BITS - 1, \
+		CAN_BDIAG0_NTERRCNT_SHIFT)
+#  define CAN_BDIAG0_DRERRCNT_BITS	8
+#  define CAN_BDIAG0_DRERRCNT_SHIFT	16
+#  define CAN_BDIAG0_DRERRCNT_MASK					\
+	GENMASK(CAN_BDIAG0_DRERRCNT_SHIFT + CAN_BDIAG0_DRERRCNT_BITS - 1, \
+		CAN_BDIAG0_DRERRCNT_SHIFT)
+#  define CAN_BDIAG0_DTERRCNT_BITS	8
+#  define CAN_BDIAG0_DTERRCNT_SHIFT	24
+#  define CAN_BDIAG0_DTERRCNT_MASK					\
+	GENMASK(CAN_BDIAG0_DTERRCNT_SHIFT + CAN_BDIAG0_DTERRCNT_BITS - 1, \
+		CAN_BDIAG0_DTERRCNT_SHIFT)
+#define CAN_BDIAG1			CAN_SFR_BASE(0x3C)
+#  define CAN_BDIAG1_EFMSGCNT_BITS	16
+#  define CAN_BDIAG1_EFMSGCNT_SHIFT	0
+#  define CAN_BDIAG1_EFMSGCNT_MASK					\
+	GENMASK(CAN_BDIAG1_EFMSGCNT_SHIFT + CAN_BDIAG1_EFMSGCNT_BITS - 1, \
+		CAN_BDIAG1_EFMSGCNT_SHIFT)
+#  define CAN_BDIAG1_NBIT0ERR		BIT(16)
+#  define CAN_BDIAG1_NBIT1ERR		BIT(17)
+#  define CAN_BDIAG1_NACKERR		BIT(18)
+#  define CAN_BDIAG1_NSTUFERR		BIT(19)
+#  define CAN_BDIAG1_NFORMERR		BIT(20)
+#  define CAN_BDIAG1_NCRCERR		BIT(21)
+#  define CAN_BDIAG1_TXBOERR		BIT(23)
+#  define CAN_BDIAG1_DBIT0ERR		BIT(24)
+#  define CAN_BDIAG1_DBIT1ERR		BIT(25)
+#  define CAN_BDIAG1_DFORMERR		BIT(27)
+#  define CAN_BDIAG1_DSTUFERR		BIT(28)
+#  define CAN_BDIAG1_DCRCERR		BIT(29)
+#  define CAN_BDIAG1_ESI		BIT(30)
+#  define CAN_BDIAG1_DLCMM		BIT(31)
+#define CAN_TEFCON			CAN_SFR_BASE(0x40)
+#  define CAN_TEFCON_TEFNEIE		BIT(0)
+#  define CAN_TEFCON_TEFHIE		BIT(1)
+#  define CAN_TEFCON_TEFFIE		BIT(2)
+#  define CAN_TEFCON_TEFOVIE		BIT(3)
+#  define CAN_TEFCON_TEFTSEN		BIT(5)
+#  define CAN_TEFCON_UINC		BIT(8)
+#  define CAN_TEFCON_FRESET		BIT(10)
+#  define CAN_TEFCON_FSIZE_BITS		5
+#  define CAN_TEFCON_FSIZE_SHIFT	24
+#  define CAN_TEFCON_FSIZE_MASK					    \
+	GENMASK(CAN_TEFCON_FSIZE_SHIFT + CAN_TEFCON_FSIZE_BITS - 1, \
+		CAN_TEFCON_FSIZE_SHIFT)
+#define CAN_TEFSTA			CAN_SFR_BASE(0x44)
+#  define CAN_TEFSTA_TEFNEIF		BIT(0)
+#  define CAN_TEFSTA_TEFHIF		BIT(1)
+#  define CAN_TEFSTA_TEFFIF		BIT(2)
+#  define CAN_TEFSTA_TEVOVIF		BIT(3)
+#define CAN_TEFUA			CAN_SFR_BASE(0x48)
+#define CAN_RESERVED			CAN_SFR_BASE(0x4C)
+#define CAN_TXQCON			CAN_SFR_BASE(0x50)
+#  define CAN_TXQCON_TXQNIE		BIT(0)
+#  define CAN_TXQCON_TXQEIE		BIT(2)
+#  define CAN_TXQCON_TXATIE		BIT(4)
+#  define CAN_TXQCON_TXEN		BIT(7)
+#  define CAN_TXQCON_UINC		BIT(8)
+#  define CAN_TXQCON_TXREQ		BIT(9)
+#  define CAN_TXQCON_FRESET		BIT(10)
+#  define CAN_TXQCON_TXPRI_BITS		5
+#  define CAN_TXQCON_TXPRI_SHIFT	16
+#  define CAN_TXQCON_TXPRI_MASK					    \
+	GENMASK(CAN_TXQCON_TXPRI_SHIFT + CAN_TXQCON_TXPRI_BITS - 1, \
+		CAN_TXQCON_TXPRI_SHIFT)
+#  define CAN_TXQCON_TXAT_BITS		2
+#  define CAN_TXQCON_TXAT_SHIFT		21
+#  define CAN_TXQCON_TXAT_MASK					    \
+	GENMASK(CAN_TXQCON_TXAT_SHIFT + CAN_TXQCON_TXAT_BITS - 1, \
+		CAN_TXQCON_TXAT_SHIFT)
+#  define CAN_TXQCON_FSIZE_BITS		5
+#  define CAN_TXQCON_FSIZE_SHIFT	24
+#  define CAN_TXQCON_FSIZE_MASK					    \
+	GENMASK(CAN_TXQCON_FSIZE_SHIFT + CAN_TXQCON_FSIZE_BITS - 1, \
+		CAN_TXQCON_FSIZE_SHIFT)
+#  define CAN_TXQCON_PLSIZE_BITS	3
+#  define CAN_TXQCON_PLSIZE_SHIFT	29
+#  define CAN_TXQCON_PLSIZE_MASK				      \
+	GENMASK(CAN_TXQCON_PLSIZE_SHIFT + CAN_TXQCON_PLSIZE_BITS - 1, \
+		CAN_TXQCON_PLSIZE_SHIFT)
+#    define CAN_TXQCON_PLSIZE_8		0
+#    define CAN_TXQCON_PLSIZE_12	1
+#    define CAN_TXQCON_PLSIZE_16	2
+#    define CAN_TXQCON_PLSIZE_20	3
+#    define CAN_TXQCON_PLSIZE_24	4
+#    define CAN_TXQCON_PLSIZE_32	5
+#    define CAN_TXQCON_PLSIZE_48	6
+#    define CAN_TXQCON_PLSIZE_64	7
+
+#define CAN_TXQSTA			CAN_SFR_BASE(0x54)
+#  define CAN_TXQSTA_TXQNIF		BIT(0)
+#  define CAN_TXQSTA_TXQEIF		BIT(2)
+#  define CAN_TXQSTA_TXATIF		BIT(4)
+#  define CAN_TXQSTA_TXERR		BIT(5)
+#  define CAN_TXQSTA_TXLARB		BIT(6)
+#  define CAN_TXQSTA_TXABT		BIT(7)
+#  define CAN_TXQSTA_TXQCI_BITS		5
+#  define CAN_TXQSTA_TXQCI_SHIFT	8
+#  define CAN_TXQSTA_TXQCI_MASK					    \
+	GENMASK(CAN_TXQSTA_TXQCI_SHIFT + CAN_TXQSTA_TXQCI_BITS - 1, \
+		CAN_TXQSTA_TXQCI_SHIFT)
+
+#define CAN_TXQUA			CAN_SFR_BASE(0x58)
+#define CAN_FIFOCON(x)			CAN_SFR_BASE(0x5C + 12 * ((x) - 1))
+#define CAN_FIFOCON_TFNRFNIE		BIT(0)
+#define CAN_FIFOCON_TFHRFHIE		BIT(1)
+#define CAN_FIFOCON_TFERFFIE		BIT(2)
+#define CAN_FIFOCON_RXOVIE		BIT(3)
+#define CAN_FIFOCON_TXATIE		BIT(4)
+#define CAN_FIFOCON_RXTSEN		BIT(5)
+#define CAN_FIFOCON_RTREN		BIT(6)
+#define CAN_FIFOCON_TXEN		BIT(7)
+#define CAN_FIFOCON_UINC		BIT(8)
+#define CAN_FIFOCON_TXREQ		BIT(9)
+#define CAN_FIFOCON_FRESET		BIT(10)
+#  define CAN_FIFOCON_TXPRI_BITS	5
+#  define CAN_FIFOCON_TXPRI_SHIFT	16
+#  define CAN_FIFOCON_TXPRI_MASK					\
+	GENMASK(CAN_FIFOCON_TXPRI_SHIFT + CAN_FIFOCON_TXPRI_BITS - 1,	\
+		CAN_FIFOCON_TXPRI_SHIFT)
+#  define CAN_FIFOCON_TXAT_BITS		2
+#  define CAN_FIFOCON_TXAT_SHIFT	21
+#  define CAN_FIFOCON_TXAT_MASK					    \
+	GENMASK(CAN_FIFOCON_TXAT_SHIFT + CAN_FIFOCON_TXAT_BITS - 1, \
+		CAN_FIFOCON_TXAT_SHIFT)
+#  define CAN_FIFOCON_TXAT_ONE_SHOT	0
+#  define CAN_FIFOCON_TXAT_THREE_SHOT	1
+#  define CAN_FIFOCON_TXAT_UNLIMITED	2
+#  define CAN_FIFOCON_FSIZE_BITS	5
+#  define CAN_FIFOCON_FSIZE_SHIFT	24
+#  define CAN_FIFOCON_FSIZE_MASK					\
+	GENMASK(CAN_FIFOCON_FSIZE_SHIFT + CAN_FIFOCON_FSIZE_BITS - 1,	\
+		CAN_FIFOCON_FSIZE_SHIFT)
+#  define CAN_FIFOCON_PLSIZE_BITS	3
+#  define CAN_FIFOCON_PLSIZE_SHIFT	29
+#  define CAN_FIFOCON_PLSIZE_MASK					\
+	GENMASK(CAN_FIFOCON_PLSIZE_SHIFT + CAN_FIFOCON_PLSIZE_BITS - 1, \
+		CAN_FIFOCON_PLSIZE_SHIFT)
+#define CAN_FIFOSTA(x)			CAN_SFR_BASE(0x60 + 12 * ((x) - 1))
+#  define CAN_FIFOSTA_TFNRFNIF		BIT(0)
+#  define CAN_FIFOSTA_TFHRFHIF		BIT(1)
+#  define CAN_FIFOSTA_TFERFFIF		BIT(2)
+#  define CAN_FIFOSTA_RXOVIF		BIT(3)
+#  define CAN_FIFOSTA_TXATIF		BIT(4)
+#  define CAN_FIFOSTA_TXERR		BIT(5)
+#  define CAN_FIFOSTA_TXLARB		BIT(6)
+#  define CAN_FIFOSTA_TXABT		BIT(7)
+#  define CAN_FIFOSTA_FIFOCI_BITS	5
+#  define CAN_FIFOSTA_FIFOCI_SHIFT	8
+#  define CAN_FIFOSTA_FIFOCI_MASK					\
+	GENMASK(CAN_FIFOSTA_FIFOCI_SHIFT + CAN_FIFOSTA_FIFOCI_BITS - 1, \
+		CAN_FIFOSTA_FIFOCI_SHIFT)
+#define CAN_FIFOUA(x)			CAN_SFR_BASE(0x64 + 12 * ((x) - 1))
+#define CAN_FLTCON(x)			CAN_SFR_BASE(0x1D0 + ((x) & 0x1c))
+#  define CAN_FILCON_SHIFT(x)		(((x) & 3) * 8)
+#  define CAN_FILCON_BITS(x)		CAN_FILCON_BITS_
+#  define CAN_FILCON_BITS_		4
+	/* avoid macro reuse warning, so do not use GENMASK as above */
+#  define CAN_FILCON_MASK(x)					\
+	(GENMASK(CAN_FILCON_BITS_ - 1, 0) << CAN_FILCON_SHIFT(x))
+#  define CAN_FIFOCON_FLTEN(x)		BIT(7 + CAN_FILCON_SHIFT(x))
+#define CAN_FLTOBJ(x)			CAN_SFR_BASE(0x1F0 + 8 * (x))
+#  define CAN_FILOBJ_SID_BITS		11
+#  define CAN_FILOBJ_SID_SHIFT		0
+#  define CAN_FILOBJ_SID_MASK					\
+	GENMASK(CAN_FILOBJ_SID_SHIFT + CAN_FILOBJ_SID_BITS - 1, \
+		CAN_FILOBJ_SID_SHIFT)
+#  define CAN_FILOBJ_EID_BITS		18
+#  define CAN_FILOBJ_EID_SHIFT		12
+#  define CAN_FILOBJ_EID_MASK					\
+	GENMASK(CAN_FILOBJ_EID_SHIFT + CAN_FILOBJ_EID_BITS - 1, \
+		CAN_FILOBJ_EID_SHIFT)
+#  define CAN_FILOBJ_SID11		BIT(29)
+#  define CAN_FILOBJ_EXIDE		BIT(30)
+#define CAN_FLTMASK(x)			CAN_SFR_BASE(0x1F4 + 8 * (x))
+#  define CAN_FILMASK_MSID_BITS		11
+#  define CAN_FILMASK_MSID_SHIFT	0
+#  define CAN_FILMASK_MSID_MASK					\
+	GENMASK(CAN_FILMASK_MSID_SHIFT + CAN_FILMASK_MSID_BITS - 1, \
+		CAN_FILMASK_MSID_SHIFT)
+#  define CAN_FILMASK_MEID_BITS		18
+#  define CAN_FILMASK_MEID_SHIFT	12
+#  define CAN_FILMASK_MEID_MASK					\
+	GENMASK(CAN_FILMASK_MEID_SHIFT + CAN_FILMASK_MEID_BITS - 1, \
+		CAN_FILMASK_MEID_SHIFT)
+#  define CAN_FILMASK_MSID11		BIT(29)
+#  define CAN_FILMASK_MIDE		BIT(30)
+
+#define CAN_OBJ_ID_SID_BITS		11
+#define CAN_OBJ_ID_SID_SHIFT		0
+#define CAN_OBJ_ID_SID_MASK					\
+	GENMASK(CAN_OBJ_ID_SID_SHIFT + CAN_OBJ_ID_SID_BITS - 1, \
+		CAN_OBJ_ID_SID_SHIFT)
+#define CAN_OBJ_ID_EID_BITS		18
+#define CAN_OBJ_ID_EID_SHIFT		11
+#define CAN_OBJ_ID_EID_MASK					\
+	GENMASK(CAN_OBJ_ID_EID_SHIFT + CAN_OBJ_ID_EID_BITS - 1, \
+		CAN_OBJ_ID_EID_SHIFT)
+#define CAN_OBJ_ID_SID_BIT11		BIT(29)
+
+#define CAN_OBJ_FLAGS_DLC_BITS		4
+#define CAN_OBJ_FLAGS_DLC_SHIFT		0
+#define CAN_OBJ_FLAGS_DLC_MASK					      \
+	GENMASK(CAN_OBJ_FLAGS_DLC_SHIFT + CAN_OBJ_FLAGS_DLC_BITS - 1, \
+		CAN_OBJ_FLAGS_DLC_SHIFT)
+#define CAN_OBJ_FLAGS_IDE		BIT(4)
+#define CAN_OBJ_FLAGS_RTR		BIT(5)
+#define CAN_OBJ_FLAGS_BRS		BIT(6)
+#define CAN_OBJ_FLAGS_FDF		BIT(7)
+#define CAN_OBJ_FLAGS_ESI		BIT(8)
+#define CAN_OBJ_FLAGS_SEQ_BITS		7
+#define CAN_OBJ_FLAGS_SEQ_SHIFT		9
+#define CAN_OBJ_FLAGS_SEQ_MASK					      \
+	GENMASK(CAN_OBJ_FLAGS_SEQ_SHIFT + CAN_OBJ_FLAGS_SEQ_BITS - 1, \
+		CAN_OBJ_FLAGS_SEQ_SHIFT)
+#define CAN_OBJ_FLAGS_FILHIT_BITS	11
+#define CAN_OBJ_FLAGS_FILHIT_SHIFT	5
+#define CAN_OBJ_FLAGS_FILHIT_MASK				      \
+	GENMASK(CAN_FLAGS_FILHIT_SHIFT + CAN_FLAGS_FILHIT_BITS - 1, \
+		CAN_FLAGS_FILHIT_SHIFT)
+
+#define CAN_OBJ_FLAGS_CUSTOM_ISTEF	BIT(31)
+
+#define MCP25XXFD_BUFFER_TXRX_SIZE 2048
+
+static const char * const mcp25xxfd_mode_names[] = {
+	[CAN_CON_MODE_MIXED] = "can2.0+canfd",
+	[CAN_CON_MODE_SLEEP] = "sleep",
+	[CAN_CON_MODE_INTERNAL_LOOPBACK] = "internal loopback",
+	[CAN_CON_MODE_LISTENONLY] = "listen only",
+	[CAN_CON_MODE_CONFIG] = "config",
+	[CAN_CON_MODE_EXTERNAL_LOOPBACK] = "external loopback",
+	[CAN_CON_MODE_CAN2_0] = "can2.0",
+	[CAN_CON_MODE_RESTRICTED] = "restricted"
+};
+
+struct mcp25xxfd_obj {
+	u32 id;
+	u32 flags;
+};
+
+struct mcp25xxfd_obj_tx {
+	struct mcp25xxfd_obj header;
+	u32 data[];
+};
+
+static void mcp25xxfd_obj_to_le(struct mcp25xxfd_obj *obj)
+{
+	obj->id = cpu_to_le32(obj->id);
+	obj->flags = cpu_to_le32(obj->flags);
+}
+
+struct mcp25xxfd_obj_ts {
+	u32 id;
+	u32 flags;
+	u32 ts;
+};
+
+struct mcp25xxfd_obj_tef {
+	struct mcp25xxfd_obj_ts header;
+};
+
+struct mcp25xxfd_obj_rx {
+	struct mcp25xxfd_obj_ts header;
+	u8 data[];
+};
+
+static void mcp25xxfd_obj_ts_from_le(struct mcp25xxfd_obj_ts *obj)
+{
+	obj->id = le32_to_cpu(obj->id);
+	obj->flags = le32_to_cpu(obj->flags);
+	obj->ts = le32_to_cpu(obj->ts);
+}
+
+#define FIFO_DATA(x)			(0x400 + (x))
+#define FIFO_DATA_SIZE			0x800
+
+static const struct can_bittiming_const mcp25xxfd_nominal_bittiming_const = {
+	.name		= DEVICE_NAME,
+	.tseg1_min	= 2,
+	.tseg1_max	= BIT(CAN_NBTCFG_TSEG1_BITS),
+	.tseg2_min	= 1,
+	.tseg2_max	= BIT(CAN_NBTCFG_TSEG2_BITS),
+	.sjw_max	= BIT(CAN_NBTCFG_SJW_BITS),
+	.brp_min	= 1,
+	.brp_max	= BIT(CAN_NBTCFG_BRP_BITS),
+	.brp_inc	= 1,
+};
+
+static const struct can_bittiming_const mcp25xxfd_data_bittiming_const = {
+	.name		= DEVICE_NAME,
+	.tseg1_min	= 1,
+	.tseg1_max	= BIT(CAN_DBTCFG_TSEG1_BITS),
+	.tseg2_min	= 1,
+	.tseg2_max	= BIT(CAN_DBTCFG_TSEG2_BITS),
+	.sjw_max	= BIT(CAN_DBTCFG_SJW_BITS),
+	.brp_min	= 1,
+	.brp_max	= BIT(CAN_DBTCFG_BRP_BITS),
+	.brp_inc	= 1,
+};
+
+enum mcp25xxfd_model {
+	CAN_MCP2517FD	= 0x2517,
+};
+
+enum mcp25xxfd_gpio_mode {
+	gpio_mode_int		= 0,
+	gpio_mode_standby	= MCP25XXFD_IOCON_XSTBYEN,
+	gpio_mode_out_low	= MCP25XXFD_IOCON_PM0,
+	gpio_mode_out_high	= MCP25XXFD_IOCON_PM0 | MCP25XXFD_IOCON_LAT0,
+	gpio_mode_in		= MCP25XXFD_IOCON_PM0 | MCP25XXFD_IOCON_TRIS0
+};
+
+struct mcp25xxfd_trigger_tx_message {
+	struct spi_message msg;
+	struct spi_transfer fill_xfer;
+	struct spi_transfer trigger_xfer;
+	int fifo;
+	char fill_cmd[2];
+	char fill_obj[sizeof(struct mcp25xxfd_obj_tx)];
+	char fill_data[64];
+	char trigger_cmd[2];
+	char trigger_data;
+};
+
+struct mcp25xxfd_read_fifo_info {
+	struct mcp25xxfd_obj_ts *rxb[32];
+	int rx_count;
+};
+
+struct mcp25xxfd_priv {
+	struct can_priv	   can;
+	struct net_device *net;
+	struct spi_device *spi;
+	struct regulator *power;
+	struct regulator *transceiver;
+	struct clk *clk;
+
+	struct mutex clk_user_lock; /* lock for enabling/disabling the clock */
+	int clk_user_mask;
+#define MCP25XXFD_CLK_USER_CAN BIT(0)
+#define MCP25XXFD_CLK_USER_GPIO0 BIT(1)
+#define MCP25XXFD_CLK_USER_GPIO1 BIT(2)
+
+	struct dentry *debugfs_dir;
+
+#ifdef CONFIG_GPIOLIB
+	struct gpio_chip gpio;
+#endif
+
+	/* the actual model of the mcp25xxfd */
+	enum mcp25xxfd_model model;
+
+	struct {
+		/* clock configuration */
+		bool clock_pll;
+		bool clock_div2;
+		int  clock_odiv;
+
+		/* GPIO configuration */
+		bool gpio_opendrain;
+	} config;
+
+	/* the distinct spi_speeds to use for spi communication */
+	u32 spi_setup_speed_hz;
+	u32 spi_speed_hz;
+
+	/* fifo info */
+	struct {
+		/* define payload size and mode */
+		int payload_size;
+		u32 payload_mode;
+
+		/* TEF addresses - start, end and current */
+		u32 tef_fifos;
+		u32 tef_address_start;
+		u32 tef_address_end;
+		u32 tef_address;
+
+		/* address in mcp25xxfd-Fifo RAM of each fifo */
+		u32 fifo_address[32];
+
+		/* infos on tx-fifos */
+		u32 tx_fifos;
+		u32 tx_fifo_start;
+		u32 tx_fifo_mask; /* bitmask of which fifo is a tx fifo */
+		u32 tx_submitted_mask;
+		u32 tx_pending_mask;
+		u32 tx_pending_mask_in_irq;
+		u32 tx_processed_mask;
+
+		/* info on rx_fifos */
+		u32 rx_fifos;
+		u32 rx_fifo_depth;
+		u32 rx_fifo_start;
+		u32 rx_fifo_mask;  /* bitmask of which fifo is a rx fifo */
+
+		/* memory image of FIFO RAM on mcp25xxfd */
+		u8 fifo_data[MCP25XXFD_BUFFER_TXRX_SIZE];
+
+	} fifos;
+
+	/* structure with active fifos that need to get fed to the system */
+	struct mcp25xxfd_read_fifo_info queued_fifos;
+
+	/* statistics */
+	struct {
+		/* number of calls to the irq handler */
+		u64 irq_calls;
+		/* number of loops inside the irq handler */
+		u64 irq_loops;
+
+		/* interrupt handler state and statistics */
+		u32 irq_state;
+#define IRQ_STATE_NEVER_RUN 0
+#define IRQ_STATE_RUNNING 1
+#define IRQ_STATE_HANDLED 2
+		/* stats on number of rx overflows */
+		u64 rx_overflow;
+		/* statistics of FIFO usage */
+		u64 fifo_usage[32];
+
+		/* message abort counter */
+		u64 rx_mab;
+		u64 tx_mab;
+
+		/* message counter fd */
+		u64 rx_fd_count;
+		u64 tx_fd_count;
+
+		/* message counter fd bit rate switch */
+		u64 rx_brs_count;
+		u64 tx_brs_count;
+
+		/* interrupt counter */
+		u64 int_ivm_count;
+		u64 int_wake_count;
+		u64 int_cerr_count;
+		u64 int_serr_count;
+		u64 int_rxov_count;
+		u64 int_txat_count;
+		u64 int_spicrc_count;
+		u64 int_ecc_count;
+		u64 int_tef_count;
+		u64 int_mod_count;
+		u64 int_tbc_count;
+		u64 int_rx_count;
+		u64 int_tx_count;
+
+		/* dlc statistics */
+		u64 rx_dlc_usage[16];
+		u64 tx_dlc_usage[16];
+	} stats;
+
+	/* the current status of the mcp25xxfd */
+	struct {
+		u32 intf;
+		/* ASSERT(CAN_INT + 4 == CAN_RXIF) */
+		u32 rxif;
+		/* ASSERT(CAN_RXIF + 4 == CAN_TXIF) */
+		u32 txif;
+		/* ASSERT(CAN_TXIF + 4 == CAN_RXOVIF) */
+		u32 rxovif;
+		/* ASSERT(CAN_RXOVIF + 4 == CAN_TXATIF) */
+		u32 txatif;
+		/* ASSERT(CAN_TXATIF + 4 == CAN_TXREQ) */
+		u32 txreq;
+		/* ASSERT(CAN_TXREQ + 4 == CAN_TREC) */
+		u32 trec;
+		/* ASSERT(CAN_TREC + 4 == CAN_BDIAG0) */
+		u32 bdiag0;
+		/* ASSERT(CAN_BDIAG0 + 4 == CAN_BDIAG1) */
+		u32 bdiag1;
+	} status;
+
+	/* configuration registers */
+	struct {
+		u32 osc;
+		u32 ecccon;
+		u32 con;
+		u32 iocon;
+		u32 tdc;
+		u32 tscon;
+		u32 tefcon;
+		u32 nbtcfg;
+		u32 dbtcfg;
+	} regs;
+
+	/* interrupt handler signaling */
+	int force_quit;
+	int after_suspend;
+#define AFTER_SUSPEND_UP 1
+#define AFTER_SUSPEND_DOWN 2
+#define AFTER_SUSPEND_POWER 4
+#define AFTER_SUSPEND_RESTART 8
+	int restart_tx;
+
+	/* interrupt flags during irq handling */
+	u32 bdiag1_clear_mask;
+	u32 bdiag1_clear_value;
+
+	/* composit error id and dataduring irq handling */
+	u32 can_err_id;
+	u32 can_err_data[8];
+
+	/* the current mode */
+	u32 active_can_mode;
+	u32 new_state;
+
+	/* status of the tx_queue enabled/disabled */
+	u32 tx_queue_status;
+#define TX_QUEUE_STATUS_INIT		0
+#define TX_QUEUE_STATUS_RUNNING		1
+#define TX_QUEUE_STATUS_NEEDS_START	2
+#define TX_QUEUE_STATUS_STOPPED		3
+
+	/* spi-tx/rx buffers for efficient transfers
+	 * used during setup and irq
+	 */
+	struct mutex spi_rxtx_lock;
+	u8 spi_tx[MCP25XXFD_BUFFER_TXRX_SIZE];
+	u8 spi_rx[MCP25XXFD_BUFFER_TXRX_SIZE];
+
+	/* structure for transmit fifo spi_messages */
+	struct mcp25xxfd_trigger_tx_message *spi_transmit_fifos;
+};
+
+/* module parameters */
+bool use_bulk_release_fifos;
+bool use_complete_fdfifo_read;
+unsigned int tx_fifos;
+unsigned int bw_sharing_log2bits;
+bool three_shot;
+
+/* spi sync helper */
+
+/* wrapper arround spi_sync, that sets speed_hz */
+static int mcp25xxfd_sync_transfer(struct spi_device *spi,
+				   struct spi_transfer *xfer,
+				   unsigned int xfers,
+				   int speed_hz)
+{
+	int i;
+
+	for (i = 0; i < xfers; i++)
+		xfer[i].speed_hz = speed_hz;
+
+	return spi_sync_transfer(spi, xfer, xfers);
+}
+
+/* an optimization of spi_write_then_read that merges the transfers */
+static int mcp25xxfd_write_then_read(struct spi_device *spi,
+				     const void *tx_buf,
+				     unsigned int tx_len,
+				     void *rx_buf,
+				     unsigned int rx_len,
+				     int speed_hz)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	struct spi_transfer xfer[2];
+	u8 single_reg_data_tx[6];
+	u8 single_reg_data_rx[6];
+	int ret;
+
+	memset(xfer, 0, sizeof(xfer));
+
+	/* when using a halfduplex controller or to big for buffer */
+	if ((spi->master->flags & SPI_MASTER_HALF_DUPLEX) ||
+	    (tx_len + rx_len > sizeof(priv->spi_tx))) {
+		xfer[0].tx_buf = tx_buf;
+		xfer[0].len = tx_len;
+
+		xfer[1].rx_buf = rx_buf;
+		xfer[1].len = rx_len;
+
+		return mcp25xxfd_sync_transfer(spi, xfer, 2, speed_hz);
+	}
+
+	/* full duplex optimization */
+	xfer[0].len = tx_len + rx_len;
+	if (xfer[0].len > sizeof(single_reg_data_tx)) {
+		mutex_lock(&priv->spi_rxtx_lock);
+		xfer[0].tx_buf = priv->spi_tx;
+		xfer[0].rx_buf = priv->spi_rx;
+	} else {
+		xfer[0].tx_buf = single_reg_data_tx;
+		xfer[0].rx_buf = single_reg_data_rx;
+	}
+
+	/* copy and clean */
+	memcpy((u8 *)xfer[0].tx_buf, tx_buf, tx_len);
+	memset((u8 *)xfer[0].tx_buf + tx_len, 0, rx_len);
+
+	ret = mcp25xxfd_sync_transfer(spi, xfer, 1, speed_hz);
+	if (!ret)
+		memcpy(rx_buf, xfer[0].rx_buf + tx_len, rx_len);
+
+	if (xfer[0].len > sizeof(single_reg_data_tx))
+		mutex_unlock(&priv->spi_rxtx_lock);
+
+	return ret;
+}
+
+/* simple spi_write wrapper with speed_hz */
+static int mcp25xxfd_write(struct spi_device *spi,
+			   const void *tx_buf,
+			   unsigned int tx_len,
+			   int speed_hz)
+{
+	struct spi_transfer xfer;
+
+	memset(&xfer, 0, sizeof(xfer));
+	xfer.tx_buf = tx_buf;
+	xfer.len = tx_len;
+
+	return mcp25xxfd_sync_transfer(spi, &xfer, 1, speed_hz);
+}
+
+/* spi_sync wrapper similar to spi_write_then_read that optimizes transfers */
+static int mcp25xxfd_write_then_write(struct spi_device *spi,
+				      const void *tx_buf,
+				      unsigned int tx_len,
+				      const void *tx2_buf,
+				      unsigned int tx2_len,
+				      int speed_hz)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	struct spi_transfer xfer;
+	u8 single_reg_data[6];
+	int ret;
+
+	if (tx_len + tx2_len > MCP25XXFD_BUFFER_TXRX_SIZE)
+		return -EINVAL;
+
+	memset(&xfer, 0, sizeof(xfer));
+
+	xfer.len = tx_len + tx2_len;
+	if (xfer.len > sizeof(single_reg_data)) {
+		mutex_lock(&priv->spi_rxtx_lock);
+		xfer.tx_buf = priv->spi_tx;
+	} else {
+		xfer.tx_buf = single_reg_data;
+	}
+
+	memcpy((u8 *)xfer.tx_buf, tx_buf, tx_len);
+	memcpy((u8 *)xfer.tx_buf + tx_len, tx2_buf, tx2_len);
+
+	ret = mcp25xxfd_sync_transfer(spi, &xfer, 1, speed_hz);
+
+	if (xfer.len > sizeof(single_reg_data))
+		mutex_unlock(&priv->spi_rxtx_lock);
+
+	return ret;
+}
+
+/* mcp25xxfd spi command/protocol helper */
+
+static void mcp25xxfd_calc_cmd_addr(u16 cmd, u16 addr, u8 *data)
+{
+	cmd = cmd | (addr & ADDRESS_MASK);
+
+	data[0] = (cmd >> 8) & 0xff;
+	data[1] = (cmd >> 0) & 0xff;
+}
+
+static int mcp25xxfd_cmd_reset(struct spi_device *spi, u32 speed_hz)
+{
+	u8 cmd[2];
+
+	mcp25xxfd_calc_cmd_addr(INSTRUCTION_RESET, 0, cmd);
+
+	/* write the reset command */
+	return mcp25xxfd_write(spi, cmd, 2, speed_hz);
+}
+
+/* read multiple bytes, transform some registers */
+static int mcp25xxfd_cmd_readn(struct spi_device *spi, u32 reg,
+			       void *data, int n, u32 speed_hz)
+{
+	u8 cmd[2];
+	int ret;
+
+	mcp25xxfd_calc_cmd_addr(INSTRUCTION_READ, reg, cmd);
+
+	ret = mcp25xxfd_write_then_read(spi, &cmd, 2, data, n, speed_hz);
+	if (ret)
+		return ret;
+
+	return 0;
+}
+
+static int mcp25xxfd_convert_to_cpu(u32 *data, int n)
+{
+	int i;
+
+	for (i = 0; i < n; i++)
+		data[i] = le32_to_cpu(data[i]);
+
+	return 0;
+}
+
+static int mcp25xxfd_first_byte(u32 mask)
+{
+	return (mask & 0x0000ffff) ?
+		((mask & 0x000000ff) ? 0 : 1) :
+		((mask & 0x00ff0000) ? 2 : 3);
+}
+
+static int mcp25xxfd_last_byte(u32 mask)
+{
+	return (mask & 0xffff0000) ?
+		((mask & 0xff000000) ? 3 : 2) :
+		((mask & 0x0000ff00) ? 1 : 0);
+}
+
+/* read a register, but we are only interrested in a few bytes */
+static int mcp25xxfd_cmd_read_mask(struct spi_device *spi, u32 reg,
+				   u32 *data, u32 mask, u32 speed_hz)
+{
+	int first_byte, last_byte, len_byte;
+	int ret;
+
+	/* check that at least one bit is set */
+	if (!mask)
+		return -EINVAL;
+
+	/* calculate first and last byte used */
+	first_byte = mcp25xxfd_first_byte(mask);
+	last_byte = mcp25xxfd_last_byte(mask);
+	len_byte = last_byte - first_byte + 1;
+
+	/* do a partial read */
+	*data = 0;
+	ret = mcp25xxfd_cmd_readn(spi, reg + first_byte,
+				  ((void *)data + first_byte), len_byte,
+				  speed_hz);
+	if (ret)
+		return ret;
+
+	return mcp25xxfd_convert_to_cpu(data, 1);
+}
+
+static int mcp25xxfd_cmd_read(struct spi_device *spi, u32 reg, u32 *data,
+			      u32 speed_hz)
+{
+	return mcp25xxfd_cmd_read_mask(spi, reg, data, -1, speed_hz);
+}
+
+/* read a register, but we are only interrested in a few bytes */
+static int mcp25xxfd_cmd_write_mask(struct spi_device *spi, u32 reg,
+				    u32 data, u32 mask, u32 speed_hz)
+{
+	int first_byte, last_byte, len_byte;
+	u8 cmd[2];
+
+	/* check that at least one bit is set */
+	if (!mask)
+		return -EINVAL;
+
+	/* calculate first and last byte used */
+	first_byte = mcp25xxfd_first_byte(mask);
+	last_byte = mcp25xxfd_last_byte(mask);
+	len_byte = last_byte - first_byte + 1;
+
+	/* prepare buffer */
+	mcp25xxfd_calc_cmd_addr(INSTRUCTION_WRITE, reg + first_byte, cmd);
+	data = cpu_to_le32(data);
+
+	return mcp25xxfd_write_then_write(spi,
+					  cmd, sizeof(cmd),
+					  ((void *)&data + first_byte),
+					  len_byte,
+					  speed_hz);
+}
+
+static int mcp25xxfd_cmd_write(struct spi_device *spi, u32 reg, u32 data,
+			       u32 speed_hz)
+{
+	return mcp25xxfd_cmd_write_mask(spi, reg, data, -1, speed_hz);
+}
+
+static int mcp25xxfd_cmd_writen(struct spi_device *spi, u32 reg,
+				void *data, int n, u32 speed_hz)
+{
+	u8 cmd[2];
+	int ret;
+
+	mcp25xxfd_calc_cmd_addr(INSTRUCTION_WRITE, reg, cmd);
+
+	ret = mcp25xxfd_write_then_write(spi, &cmd, 2, data, n, speed_hz);
+	if (ret)
+		return ret;
+
+	return 0;
+}
+
+static int mcp25xxfd_clean_sram(struct spi_device *spi, u32 speed_hz)
+{
+	u8 buffer[256];
+	int i;
+	int ret;
+
+	memset(buffer, 0, sizeof(buffer));
+
+	for (i = 0; i < FIFO_DATA_SIZE; i += sizeof(buffer)) {
+		ret = mcp25xxfd_cmd_writen(spi, FIFO_DATA(i),
+					   buffer, sizeof(buffer),
+					   speed_hz);
+		if (ret)
+			return ret;
+	}
+
+	return 0;
+}
+
+/* mcp25xxfd opmode helper functions */
+
+static int mcp25xxfd_get_opmode(struct spi_device *spi,
+				int *mode,
+				int speed_hz)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	int ret;
+
+	/* read the mode */
+	ret = mcp25xxfd_cmd_read_mask(spi,
+				      CAN_CON,
+				      &priv->regs.con,
+				      CAN_CON_OPMOD_MASK,
+				      speed_hz);
+	if (ret)
+		return ret;
+	/* calculate the mode */
+	*mode = (priv->regs.con & CAN_CON_OPMOD_MASK) >>
+		CAN_CON_OPMOD_SHIFT;
+
+	/* and assign to active mode as well */
+	priv->active_can_mode = *mode;
+
+	return 0;
+}
+
+static int mcp25xxfd_set_opmode(struct spi_device *spi, int mode,
+				int speed_hz)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	u32 val = priv->regs.con & ~CAN_CON_REQOP_MASK;
+
+	/* regs.con also contains the effective register */
+	priv->regs.con = val |
+		(mode << CAN_CON_REQOP_SHIFT) |
+		(mode << CAN_CON_OPMOD_SHIFT);
+	priv->active_can_mode = mode;
+
+	/* if the opmode is sleep then the oscilator will be disabled
+	 * and also not ready
+	 */
+	if (mode == CAN_CON_MODE_SLEEP) {
+		priv->regs.osc &= ~(MCP25XXFD_OSC_OSCRDY |
+				    MCP25XXFD_OSC_PLLRDY |
+				    MCP25XXFD_OSC_SCLKRDY);
+		priv->regs.osc |= MCP25XXFD_OSC_OSCDIS;
+	}
+
+	/* but only write the relevant section */
+	return mcp25xxfd_cmd_write_mask(spi, CAN_CON,
+					priv->regs.con,
+					CAN_CON_REQOP_MASK,
+					speed_hz);
+}
+
+static int mcp25xxfd_set_normal_opmode(struct spi_device *spi)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	int mode;
+
+	if (priv->can.ctrlmode & CAN_CTRLMODE_LOOPBACK)
+		mode = CAN_CON_MODE_EXTERNAL_LOOPBACK;
+	else if (priv->can.ctrlmode & CAN_CTRLMODE_LISTENONLY)
+		mode = CAN_CON_MODE_LISTENONLY;
+	else if (priv->can.ctrlmode & CAN_CTRLMODE_FD)
+		mode = CAN_CON_MODE_MIXED;
+	else
+		mode = CAN_CON_MODE_CAN2_0;
+
+	return mcp25xxfd_set_opmode(spi, mode, priv->spi_setup_speed_hz);
+}
+
+/* clock helper */
+static int mcp25xxfd_wake_from_sleep(struct spi_device *spi)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	u32 waitfor = MCP25XXFD_OSC_OSCRDY;
+	u32 mask = waitfor | MCP25XXFD_OSC_OSCDIS;
+	unsigned long timeout;
+	int ret;
+
+	/* write clock with OSCDIS cleared*/
+	priv->regs.osc &= ~MCP25XXFD_OSC_OSCDIS;
+	ret = mcp25xxfd_cmd_write(spi, MCP25XXFD_OSC,
+				  priv->regs.osc,
+				  priv->spi_setup_speed_hz);
+	if (ret)
+		return ret;
+
+	/* wait for synced pll/osc/sclk */
+	timeout = jiffies + MCP25XXFD_OSC_POLLING_JIFFIES;
+	while (time_before_eq(jiffies, timeout)) {
+		ret = mcp25xxfd_cmd_read(spi, MCP25XXFD_OSC,
+					 &priv->regs.osc,
+					 priv->spi_setup_speed_hz);
+		if (ret)
+			return ret;
+		if ((priv->regs.osc & mask) == waitfor) {
+			priv->active_can_mode = CAN_CON_MODE_CONFIG;
+			return 0;
+		}
+		/* wait some time */
+		msleep(100);
+	}
+
+	dev_err(&spi->dev,
+		"Clock did not enable within the timeout period\n");
+	return -ETIMEDOUT;
+}
+
+static int mcp25xxfd_hw_check_clock(struct spi_device *spi)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	u32 val;
+	int ret;
+
+	/* read the osc register and check if it matches
+	 * what we have on record
+	 */
+	ret = mcp25xxfd_cmd_read(spi, MCP25XXFD_OSC,
+				 &val,
+				 priv->spi_setup_speed_hz);
+	if (ret)
+		return ret;
+
+	if (val == priv->regs.osc)
+		return 0;
+
+	/* ignore all those ready bits on second try */
+	if ((val & 0xff) == (priv->regs.osc & 0xff)) {
+		dev_info(&spi->dev,
+			 "The oscillator register value %08x does not match what we expect: %08x - it is still reasonable, but please investigate\n",
+			val, priv->regs.osc);
+		return 0;
+	}
+
+	dev_err(&spi->dev,
+		"The oscillator register value %08x does not match what we expect: %08x\n",
+		val, priv->regs.osc);
+
+	return -ENODEV;
+}
+
+static int mcp25xxfd_start_clock(struct spi_device *spi, int requestor_mask)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	int ret = 0;
+
+	mutex_lock(&priv->clk_user_lock);
+
+	priv->clk_user_mask |= requestor_mask;
+
+	if (priv->clk_user_mask != requestor_mask)
+		goto out;
+
+	/* check that the controller clock register
+	 * is what it is supposed to be
+	 */
+	ret = mcp25xxfd_hw_check_clock(spi);
+	if (ret)
+		goto out;
+
+	/* and we start the clock */
+	if (!IS_ERR(priv->clk))
+		ret = clk_prepare_enable(priv->clk);
+
+	/* we wake from sleep */
+	if (priv->active_can_mode == CAN_CON_MODE_SLEEP)
+		ret = mcp25xxfd_wake_from_sleep(spi);
+
+out:
+	mutex_unlock(&priv->clk_user_lock);
+
+	return ret;
+}
+
+static int mcp25xxfd_stop_clock(struct spi_device *spi, int requestor_mask)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+
+	mutex_lock(&priv->clk_user_lock);
+
+	priv->clk_user_mask &= ~requestor_mask;
+
+	if (!priv->clk_user_mask)
+		goto out;
+
+	/* put us into sleep mode */
+	mcp25xxfd_set_opmode(spi, CAN_CON_MODE_SLEEP,
+			     priv->spi_setup_speed_hz);
+
+	/* and we stop the clock */
+	if (!IS_ERR(priv->clk))
+		clk_disable_unprepare(priv->clk);
+
+out:
+	mutex_unlock(&priv->clk_user_lock);
+
+	return 0;
+}
+
+/* mcp25xxfd GPIO helper functions */
+#ifdef CONFIG_GPIOLIB
+
+enum mcp25xxfd_gpio_pins {
+	MCP25XXFD_GPIO_GPIO0 = 0,
+	MCP25XXFD_GPIO_GPIO1 = 1,
+};
+
+static int mcp25xxfd_gpio_request(struct gpio_chip *chip,
+				  unsigned int offset)
+{
+	struct mcp25xxfd_priv *priv = gpiochip_get_data(chip);
+	int clock_requestor = offset ?
+		MCP25XXFD_CLK_USER_GPIO1 : MCP25XXFD_CLK_USER_GPIO0;
+
+	/* only handle gpio 0/1 */
+	if (offset > 1)
+		return -EINVAL;
+
+	mcp25xxfd_start_clock(priv->spi, clock_requestor);
+
+	return 0;
+}
+
+static void mcp25xxfd_gpio_free(struct gpio_chip *chip,
+				unsigned int offset)
+{
+	struct mcp25xxfd_priv *priv = gpiochip_get_data(chip);
+	int clock_requestor = offset ?
+		MCP25XXFD_CLK_USER_GPIO1 : MCP25XXFD_CLK_USER_GPIO0;
+
+	/* only handle gpio 0/1 */
+	if (offset > 1)
+		return;
+
+	mcp25xxfd_stop_clock(priv->spi, clock_requestor);
+}
+
+static int mcp25xxfd_gpio_get(struct gpio_chip *chip, unsigned int offset)
+{
+	struct mcp25xxfd_priv *priv = gpiochip_get_data(chip);
+	u32 mask = (offset) ? MCP25XXFD_IOCON_GPIO1 : MCP25XXFD_IOCON_GPIO0;
+	int ret;
+
+	/* only handle gpio 0/1 */
+	if (offset > 1)
+		return -EINVAL;
+
+	/* read the relevant gpio Latch */
+	ret = mcp25xxfd_cmd_read_mask(priv->spi, MCP25XXFD_IOCON,
+				      &priv->regs.iocon, mask,
+				      priv->spi_setup_speed_hz);
+	if (ret)
+		return ret;
+
+	/* return the match */
+	return priv->regs.iocon & mask;
+}
+
+static void mcp25xxfd_gpio_set(struct gpio_chip *chip, unsigned int offset,
+			       int value)
+{
+	struct mcp25xxfd_priv *priv = gpiochip_get_data(chip);
+	u32 mask = (offset) ? MCP25XXFD_IOCON_LAT1 : MCP25XXFD_IOCON_LAT0;
+
+	/* only handle gpio 0/1 */
+	if (offset > 1)
+		return;
+
+	/* update in memory representation with the corresponding value */
+	if (value)
+		priv->regs.iocon |= mask;
+	else
+		priv->regs.iocon &= ~mask;
+
+	mcp25xxfd_cmd_write_mask(priv->spi, MCP25XXFD_IOCON,
+				 priv->regs.iocon, mask,
+				 priv->spi_setup_speed_hz);
+}
+
+static int mcp25xxfd_gpio_direction_input(struct gpio_chip *chip,
+					  unsigned int offset)
+{
+	struct mcp25xxfd_priv *priv = gpiochip_get_data(chip);
+	u32 mask_tri = (offset) ?
+		MCP25XXFD_IOCON_TRIS1 : MCP25XXFD_IOCON_TRIS0;
+	u32 mask_stby = (offset) ?
+		0 : MCP25XXFD_IOCON_XSTBYEN;
+	u32 mask_pm = (offset) ?
+		MCP25XXFD_IOCON_PM1 : MCP25XXFD_IOCON_PM0;
+
+	/* only handle gpio 0/1 */
+	if (offset > 1)
+		return -EINVAL;
+
+	/* set the mask */
+	priv->regs.iocon |= mask_tri | mask_pm;
+
+	/* clear stby */
+	priv->regs.iocon &= ~mask_stby;
+
+	return mcp25xxfd_cmd_write_mask(priv->spi, MCP25XXFD_IOCON,
+					priv->regs.iocon,
+					mask_tri | mask_stby | mask_pm,
+					priv->spi_setup_speed_hz);
+}
+
+static int mcp25xxfd_gpio_direction_output(struct gpio_chip *chip,
+					   unsigned int offset, int value)
+{
+	struct mcp25xxfd_priv *priv = gpiochip_get_data(chip);
+	u32 mask_tri = (offset) ?
+		MCP25XXFD_IOCON_TRIS1 : MCP25XXFD_IOCON_TRIS0;
+	u32 mask_lat = (offset) ?
+		MCP25XXFD_IOCON_LAT1 : MCP25XXFD_IOCON_LAT0;
+	u32 mask_pm = (offset) ?
+		MCP25XXFD_IOCON_PM1 : MCP25XXFD_IOCON_PM0;
+	u32 mask_stby = (offset) ?
+		0 : MCP25XXFD_IOCON_XSTBYEN;
+
+	/* only handle gpio 0/1 */
+	if (offset > 1)
+		return -EINVAL;
+
+	/* clear the tristate bit and also clear stby */
+	priv->regs.iocon &= ~(mask_tri | mask_stby);
+
+	/* set GPIO mode */
+	priv->regs.iocon |= mask_pm;
+
+	/* set the value */
+	if (value)
+		priv->regs.iocon |= mask_lat;
+	else
+		priv->regs.iocon &= ~mask_lat;
+
+	return mcp25xxfd_cmd_write_mask(priv->spi, MCP25XXFD_IOCON,
+					priv->regs.iocon,
+					mask_tri | mask_lat |
+					mask_pm | mask_stby,
+					priv->spi_setup_speed_hz);
+}
+
+static int mcp25xxfd_gpio_setup(struct spi_device *spi)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+
+	/* gpiochip only handles GPIO0 and GPIO1 */
+	priv->gpio.owner		= THIS_MODULE;
+	priv->gpio.parent		= &spi->dev;
+	priv->gpio.label		= dev_name(&spi->dev);
+	priv->gpio.direction_input	= mcp25xxfd_gpio_direction_input;
+	priv->gpio.get			= mcp25xxfd_gpio_get;
+	priv->gpio.direction_output	= mcp25xxfd_gpio_direction_output;
+	priv->gpio.set			= mcp25xxfd_gpio_set;
+	priv->gpio.request		= mcp25xxfd_gpio_request;
+	priv->gpio.free			= mcp25xxfd_gpio_free;
+	priv->gpio.base			= -1;
+	priv->gpio.ngpio		= 2;
+	priv->gpio.can_sleep		= 1;
+
+	return devm_gpiochip_add_data(&spi->dev, &priv->gpio, priv);
+}
+
+#else
+
+static int mcp25xxfd_gpio_setup(struct spi_device *spi)
+{
+	return 0;
+}
+
+#endif
+
+/* ideally these would be defined in uapi/linux/can.h */
+#define CAN_EFF_SID_SHIFT		(CAN_EFF_ID_BITS - CAN_SFF_ID_BITS)
+#define CAN_EFF_SID_BITS		CAN_SFF_ID_BITS
+#define CAN_EFF_SID_MASK				      \
+	GENMASK(CAN_EFF_SID_SHIFT + CAN_EFF_SID_BITS - 1,     \
+		CAN_EFF_SID_SHIFT)
+#define CAN_EFF_EID_SHIFT		0
+#define CAN_EFF_EID_BITS		CAN_EFF_SID_SHIFT
+#define CAN_EFF_EID_MASK				      \
+	GENMASK(CAN_EFF_EID_SHIFT + CAN_EFF_EID_BITS - 1,     \
+		CAN_EFF_EID_SHIFT)
+
+static void mcp25xxfd_canid_to_mcpid(u32 can_id, u32 *id, u32 *flags)
+{
+	if (can_id & CAN_EFF_FLAG) {
+		int sid = (can_id & CAN_EFF_SID_MASK) >> CAN_EFF_SID_SHIFT;
+		int eid = (can_id & CAN_EFF_EID_MASK) >> CAN_EFF_EID_SHIFT;
+		*id = (eid << CAN_OBJ_ID_EID_SHIFT) |
+			(sid << CAN_OBJ_ID_SID_SHIFT);
+		*flags = CAN_OBJ_FLAGS_IDE;
+	} else {
+		*id = can_id & CAN_SFF_MASK;
+		*flags = 0;
+	}
+
+	*flags |= (can_id & CAN_RTR_FLAG) ? CAN_OBJ_FLAGS_RTR : 0;
+}
+
+static void mcp25xxfd_mcpid_to_canid(u32 mcpid, u32 mcpflags, u32 *id)
+{
+	u32 sid = (mcpid & CAN_OBJ_ID_SID_MASK) >> CAN_OBJ_ID_SID_SHIFT;
+	u32 eid = (mcpid & CAN_OBJ_ID_EID_MASK) >> CAN_OBJ_ID_EID_SHIFT;
+
+	if (mcpflags & CAN_OBJ_FLAGS_IDE) {
+		*id = (eid << CAN_EFF_EID_SHIFT) |
+			(sid << CAN_EFF_SID_SHIFT) |
+			CAN_EFF_FLAG;
+	} else {
+		*id = sid;
+	}
+
+	*id |= (mcpflags & CAN_OBJ_FLAGS_RTR) ? CAN_RTR_FLAG : 0;
+}
+
+static void __mcp25xxfd_stop_queue(struct net_device *net,
+				   unsigned int id)
+{
+	struct mcp25xxfd_priv *priv = netdev_priv(net);
+
+	if (priv->tx_queue_status >= TX_QUEUE_STATUS_STOPPED)
+		dev_warn(&priv->spi->dev,
+			 "tx-queue is already stopped by: %i\n",
+			 priv->tx_queue_status);
+
+	priv->tx_queue_status = id ? id : TX_QUEUE_STATUS_STOPPED;
+	netif_stop_queue(priv->net);
+}
+
+/* helper to identify who is stopping the queue by line number */
+#define mcp25xxfd_stop_queue(spi) \
+	__mcp25xxfd_stop_queue(spi, __LINE__)
+
+static void mcp25xxfd_wake_queue(struct spi_device *spi)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+
+	/* nothing should be left pending /in flight now... */
+	priv->fifos.tx_pending_mask = 0;
+	priv->fifos.tx_submitted_mask = 0;
+	priv->fifos.tx_processed_mask = 0;
+	priv->tx_queue_status = TX_QUEUE_STATUS_RUNNING;
+
+	/* wake queue now */
+	netif_wake_queue(priv->net);
+}
+
+/* CAN transmit related*/
+
+static void mcp25xxfd_mark_tx_pending(void *context)
+{
+	struct mcp25xxfd_trigger_tx_message *txm = context;
+	struct spi_device *spi = txm->msg.spi;
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+
+	/* only here or in the irq handler this value is changed,
+	 * so there is no race condition and it does not require locking
+	 * serialization happens via spi_pump_message
+	 */
+	priv->fifos.tx_pending_mask |= BIT(txm->fifo);
+}
+
+static int mcp25xxfd_fill_spi_transmit_fifos(struct mcp25xxfd_priv *priv)
+{
+	struct mcp25xxfd_trigger_tx_message *txm;
+	int i, fifo;
+	const u32 trigger = CAN_FIFOCON_TXREQ | CAN_FIFOCON_UINC;
+	const int first_byte = mcp25xxfd_first_byte(trigger);
+	u32 fifo_address;
+
+	priv->spi_transmit_fifos = kcalloc(priv->fifos.tx_fifos,
+					   sizeof(*priv->spi_transmit_fifos),
+					   GFP_KERNEL | GFP_DMA);
+	if (!priv->spi_transmit_fifos)
+		return -ENOMEM;
+
+	for (i = 0; i < priv->fifos.tx_fifos; i++) {
+		fifo = priv->fifos.tx_fifo_start + i;
+		txm = &priv->spi_transmit_fifos[i];
+		fifo_address = priv->fifos.fifo_address[fifo];
+		/* prepare the message */
+		spi_message_init(&txm->msg);
+		txm->msg.complete = mcp25xxfd_mark_tx_pending;
+		txm->msg.context = txm;
+		txm->fifo = fifo;
+		/* the payload itself */
+		txm->fill_xfer.speed_hz = priv->spi_speed_hz;
+		txm->fill_xfer.tx_buf = txm->fill_cmd;
+		txm->fill_xfer.len = 2;
+		txm->fill_xfer.cs_change = true;
+		mcp25xxfd_calc_cmd_addr(INSTRUCTION_WRITE,
+					FIFO_DATA(fifo_address),
+					txm->fill_cmd);
+		spi_message_add_tail(&txm->fill_xfer, &txm->msg);
+		/* the trigger command */
+		txm->trigger_xfer.speed_hz = priv->spi_speed_hz;
+		txm->trigger_xfer.tx_buf = txm->trigger_cmd;
+		txm->trigger_xfer.len = 3;
+		mcp25xxfd_calc_cmd_addr(INSTRUCTION_WRITE,
+					CAN_FIFOCON(fifo) + first_byte,
+					txm->trigger_cmd);
+		txm->trigger_data = trigger >> (8 * first_byte);
+		spi_message_add_tail(&txm->trigger_xfer, &txm->msg);
+	}
+
+	return 0;
+}
+
+static int mcp25xxfd_transmit_message_common(struct spi_device *spi,
+					     int fifo,
+					     struct mcp25xxfd_obj_tx *obj,
+					     int len,
+					     u8 *data)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	struct mcp25xxfd_trigger_tx_message *txm =
+		&priv->spi_transmit_fifos[fifo - priv->fifos.tx_fifo_start];
+	int ret;
+
+	/* add fifo as seq */
+	obj->header.flags |= fifo << CAN_OBJ_FLAGS_SEQ_SHIFT;
+
+	/* transform to le32 */
+	mcp25xxfd_obj_to_le(&obj->header);
+
+	/* fill in details */
+	memcpy(txm->fill_obj, obj, sizeof(struct mcp25xxfd_obj_tx));
+	memset(txm->fill_data, 0, priv->fifos.payload_size);
+	memcpy(txm->fill_data, data, len);
+
+	/* transfers to FIFO RAM has to be multiple of 4 */
+	txm->fill_xfer.len =
+		2 + sizeof(struct mcp25xxfd_obj_tx) + ALIGN(len, 4);
+
+	/* and transmit asyncroniously */
+	ret = spi_async(spi, &txm->msg);
+	if (ret)
+		return NETDEV_TX_BUSY;
+
+	return NETDEV_TX_OK;
+}
+
+static int mcp25xxfd_transmit_fdmessage(struct spi_device *spi, int fifo,
+					struct canfd_frame *frame)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	struct mcp25xxfd_obj_tx obj;
+	int dlc = can_len2dlc(frame->len);
+	u32 flags;
+
+	frame->len = can_dlc2len(dlc);
+
+	mcp25xxfd_canid_to_mcpid(frame->can_id, &obj.header.id, &flags);
+
+	flags |= dlc << CAN_OBJ_FLAGS_DLC_SHIFT;
+	flags |= (frame->can_id & CAN_EFF_FLAG) ? CAN_OBJ_FLAGS_IDE : 0;
+	flags |= (frame->can_id & CAN_RTR_FLAG) ? CAN_OBJ_FLAGS_RTR : 0;
+	if (frame->flags & CANFD_BRS) {
+		flags |= CAN_OBJ_FLAGS_BRS;
+		priv->stats.tx_brs_count++;
+	}
+	flags |= (frame->flags & CANFD_ESI) ? CAN_OBJ_FLAGS_ESI : 0;
+	flags |= CAN_OBJ_FLAGS_FDF;
+
+	priv->stats.tx_fd_count++;
+	priv->stats.tx_dlc_usage[dlc]++;
+
+	obj.header.flags = flags;
+
+	return mcp25xxfd_transmit_message_common(spi, fifo, &obj,
+						 frame->len, frame->data);
+}
+
+static int mcp25xxfd_transmit_message(struct spi_device *spi, int fifo,
+				      struct can_frame *frame)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	struct mcp25xxfd_obj_tx obj;
+	u32 flags;
+
+	if (frame->can_dlc > 8)
+		frame->can_dlc = 8;
+
+	priv->stats.tx_dlc_usage[frame->can_dlc]++;
+
+	mcp25xxfd_canid_to_mcpid(frame->can_id, &obj.header.id, &flags);
+
+	flags |= frame->can_dlc << CAN_OBJ_FLAGS_DLC_SHIFT;
+	flags |= (frame->can_id & CAN_EFF_FLAG) ? CAN_OBJ_FLAGS_IDE : 0;
+	flags |= (frame->can_id & CAN_RTR_FLAG) ? CAN_OBJ_FLAGS_RTR : 0;
+
+	obj.header.flags = flags;
+
+	return mcp25xxfd_transmit_message_common(spi, fifo, &obj,
+						 frame->can_dlc, frame->data);
+}
+
+static bool mcp25xxfd_is_last_txfifo(struct spi_device *spi,
+				     int fifo)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+
+	return (fifo ==
+		(priv->fifos.tx_fifo_start + priv->fifos.tx_fifos - 1));
+}
+
+static netdev_tx_t mcp25xxfd_start_xmit(struct sk_buff *skb,
+					struct net_device *net)
+{
+	struct mcp25xxfd_priv *priv = netdev_priv(net);
+	struct spi_device *spi = priv->spi;
+	u32 pending_mask;
+	int fifo;
+	int ret;
+
+	if (can_dropped_invalid_skb(net, skb))
+		return NETDEV_TX_OK;
+
+	if (priv->can.state == CAN_STATE_BUS_OFF) {
+		mcp25xxfd_stop_queue(priv->net);
+		return NETDEV_TX_BUSY;
+	}
+
+	/* get effective mask */
+	pending_mask = priv->fifos.tx_pending_mask |
+		priv->fifos.tx_submitted_mask;
+
+	/* decide on fifo to assign */
+	if (pending_mask)
+		fifo = fls(pending_mask);
+	else
+		fifo = priv->fifos.tx_fifo_start;
+
+	/* handle error - this should not happen... */
+	if (fifo >= priv->fifos.tx_fifo_start + priv->fifos.tx_fifos) {
+		dev_err(&spi->dev,
+			"reached tx-fifo %i, which is not valid\n",
+			fifo);
+		return NETDEV_TX_BUSY;
+	}
+
+	/* if we are the last one, then stop the queue */
+	if (mcp25xxfd_is_last_txfifo(spi, fifo))
+		mcp25xxfd_stop_queue(priv->net);
+
+	/* mark as submitted */
+	priv->fifos.tx_submitted_mask |= BIT(fifo);
+	priv->stats.fifo_usage[fifo]++;
+
+	/* now process it for real */
+	if (can_is_canfd_skb(skb))
+		ret = mcp25xxfd_transmit_fdmessage(spi, fifo,
+						   (struct canfd_frame *)
+						   skb->data);
+	else
+		ret = mcp25xxfd_transmit_message(spi, fifo,
+						 (struct can_frame *)
+						 skb->data);
+
+	/* keep it for reference until the message really got transmitted */
+	if (ret == NETDEV_TX_OK)
+		can_put_echo_skb(skb, priv->net, fifo);
+
+	return ret;
+}
+
+/* CAN RX Related */
+
+static int mcp25xxfd_can_transform_rx_fd(struct spi_device *spi,
+					 struct mcp25xxfd_obj_rx *rx)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	struct canfd_frame *frame;
+	struct sk_buff *skb;
+	u32 flags = rx->header.flags;
+	int dlc;
+
+	/* allocate the skb buffer */
+	skb = alloc_canfd_skb(priv->net, &frame);
+	if (!skb) {
+		dev_err(&spi->dev, "cannot allocate RX skb\n");
+		priv->net->stats.rx_dropped++;
+		return -ENOMEM;
+	}
+
+	mcp25xxfd_mcpid_to_canid(rx->header.id, flags, &frame->can_id);
+	frame->flags |= (flags & CAN_OBJ_FLAGS_BRS) ? CANFD_BRS : 0;
+	frame->flags |= (flags & CAN_OBJ_FLAGS_ESI) ? CANFD_ESI : 0;
+
+	dlc = (flags & CAN_OBJ_FLAGS_DLC_MASK) >> CAN_OBJ_FLAGS_DLC_SHIFT;
+	if (dlc > 15)
+		dlc = 15;
+
+	frame->len = can_dlc2len(dlc);
+
+	memcpy(frame->data, rx->data, frame->len);
+
+	priv->stats.rx_fd_count++;
+	priv->net->stats.rx_packets++;
+	priv->net->stats.rx_bytes += frame->len;
+	if (rx->header.flags & CAN_OBJ_FLAGS_BRS)
+		priv->stats.rx_brs_count++;
+	priv->stats.rx_dlc_usage[dlc]++;
+
+	can_led_event(priv->net, CAN_LED_EVENT_RX);
+
+	netif_rx_ni(skb);
+
+	return 0;
+}
+
+static int mcp25xxfd_can_transform_rx_normal(struct spi_device *spi,
+					     struct mcp25xxfd_obj_rx *rx)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	struct sk_buff *skb;
+	struct can_frame *frame;
+	u32 flags = rx->header.flags;
+	int len;
+	int dlc;
+
+	/* allocate the skb buffer */
+	skb = alloc_can_skb(priv->net, &frame);
+	if (!skb) {
+		dev_err(&spi->dev, "cannot allocate RX skb\n");
+		priv->net->stats.rx_dropped++;
+		return -ENOMEM;
+	}
+
+	mcp25xxfd_mcpid_to_canid(rx->header.id, flags, &frame->can_id);
+
+	dlc = (flags & CAN_OBJ_FLAGS_DLC_MASK) >> CAN_OBJ_FLAGS_DLC_SHIFT;
+	if (dlc > 15)
+		dlc = 15;
+
+	frame->can_dlc = dlc;
+
+	len = can_dlc2len(frame->can_dlc);
+
+	memcpy(frame->data, rx->data, len);
+
+	priv->net->stats.rx_packets++;
+	priv->net->stats.rx_bytes += len;
+	priv->stats.rx_dlc_usage[dlc]++;
+
+	can_led_event(priv->net, CAN_LED_EVENT_RX);
+
+	netif_rx_ni(skb);
+
+	return 0;
+}
+
+static int mcp25xxfd_process_queued_rx(struct spi_device *spi,
+				       struct mcp25xxfd_obj_ts *obj)
+{
+	struct mcp25xxfd_obj_rx *rx = container_of(obj,
+						   struct mcp25xxfd_obj_rx,
+						   header);
+
+	if (obj->flags & CAN_OBJ_FLAGS_FDF)
+		return mcp25xxfd_can_transform_rx_fd(spi, rx);
+	else
+		return mcp25xxfd_can_transform_rx_normal(spi, rx);
+}
+
+static int mcp25xxfd_normal_release_fifos(struct spi_device *spi,
+					  int start, int end)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	int ret;
+
+	/* release each fifo in a separate transfer */
+	for (; start < end ; start++) {
+		ret = mcp25xxfd_cmd_write_mask(spi, CAN_FIFOCON(start),
+					       CAN_FIFOCON_UINC,
+					       CAN_FIFOCON_UINC,
+					       priv->spi_speed_hz);
+		if (ret)
+			return ret;
+	}
+
+	return 0;
+}
+
+/* unfortunately the CAN_FIFOCON are not directly consecutive
+ * so the optimization of "clearing all in one spi_transfer"
+ * would produce an overhead of 11 unnecessary bytes/fifo
+ * - transferring 14 (2 cmd + 12 data) bytes
+ * instead of just 3 (2 + 1).
+ * On some slower systems this may still be beneficial,
+ * but it is not good enough for the generic case.
+ * On a Raspberry Pi CM the timings for clearing 3 fifos
+ * (at 12.5MHz SPI clock speed) are:
+ * * normal:
+ *   * 3 spi transfers
+ *   * 9 bytes total
+ *   * 36.74us from first CS low to last CS high
+ *   * individual CS: 9.14us, 5.74us and 5.16us
+ *   * 77.02us from CS up of fifo transfer to last release CS up
+ * * bulk:
+ *   * 1 spi transfer
+ *   * 27 bytes total
+ *   * 29.06us CS Low
+ *   * 78.28us from CS up of fifo transfer to last release CS up
+ * this obviously varies with SPI_clock speed
+ * - the slower the clock the less efficient the optimization.
+ * similarly the faster the CPU (and bigger the code cache) the
+ * less effcient the optimization - the above case is border line.
+ */
+
+#define FIFOCON_SPACING (CAN_FIFOCON(1) - CAN_FIFOCON(0))
+#define FIFOCON_SPACINGW (FIFOCON_SPACING / sizeof(u32))
+
+static int mcp25xxfd_bulk_release_fifos(struct spi_device *spi,
+					int start, int end)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	int i;
+	int ret;
+
+	/* calculate start address and length */
+	int fifos = end - start;
+	int first_byte = mcp25xxfd_first_byte(CAN_FIFOCON_UINC);
+	int addr = CAN_FIFOCON(start);
+	int len = 1 + (fifos - 1) * FIFOCON_SPACING;
+
+	/* the worsted case buffer */
+	u32 buf[32 * FIFOCON_SPACINGW], base;
+
+	base = (priv->fifos.payload_mode << CAN_FIFOCON_PLSIZE_SHIFT) |
+		((priv->fifos.rx_fifo_depth - 1) << CAN_FIFOCON_FSIZE_SHIFT) |
+		CAN_FIFOCON_RXTSEN | /* RX timestamps */
+		CAN_FIFOCON_UINC |
+		CAN_FIFOCON_TFERFFIE | /* FIFO Full */
+		CAN_FIFOCON_TFHRFHIE | /* FIFO Half Full*/
+		CAN_FIFOCON_TFNRFNIE; /* FIFO not empty */
+
+	memset(buf, 0, sizeof(buf));
+	for (i = 0; i < end - start ; i++) {
+		if (i == priv->fifos.rx_fifos - 1)
+			base |= CAN_FIFOCON_RXOVIE;
+		buf[FIFOCON_SPACINGW * i] = cpu_to_le32(base);
+	}
+
+	ret = mcp25xxfd_cmd_writen(spi, addr + first_byte,
+				   (u8 *)buf + first_byte,
+				   len,
+				   priv->spi_speed_hz);
+	if (ret)
+		return ret;
+
+	return 0;
+}
+
+/* queued FIFO handling for release to system */
+
+static void mcp25xxfd_clear_queued_fifos(struct spi_device *spi)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+
+	/* prepare rfi - mostly used for sorting */
+	priv->queued_fifos.rx_count = 0;
+}
+
+static void mcp25xxfd_addto_queued_fifos(struct spi_device *spi,
+					 struct mcp25xxfd_obj_ts *obj)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	struct mcp25xxfd_read_fifo_info *rfi = &priv->queued_fifos;
+
+	/* timestamps must ignore the highest byte, so we shift it,
+	 * so that it still compares correctly
+	 */
+	obj->ts <<= 8;
+
+	/* add pointer to queued array-list */
+	rfi->rxb[rfi->rx_count] = obj;
+	rfi->rx_count++;
+}
+
+static int mcp25xxfd_process_queued_tef(struct spi_device *spi,
+					struct mcp25xxfd_obj_ts *obj)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	struct mcp25xxfd_obj_tef *tef = container_of(obj,
+						     struct mcp25xxfd_obj_tef,
+						     header);
+	int dlc = (obj->flags & CAN_OBJ_FLAGS_DLC_MASK)
+		>> CAN_OBJ_FLAGS_DLC_SHIFT;
+	int fifo = (tef->header.flags & CAN_OBJ_FLAGS_SEQ_MASK) >>
+		CAN_OBJ_FLAGS_SEQ_SHIFT;
+
+	if (dlc > 15)
+		dlc = 15;
+
+	/* update counters */
+	priv->net->stats.tx_packets++;
+	priv->net->stats.tx_bytes += can_dlc2len(dlc);
+	if (obj->flags & CAN_OBJ_FLAGS_FDF)
+		priv->stats.tx_fd_count++;
+	if (obj->flags & CAN_OBJ_FLAGS_BRS)
+		priv->stats.tx_brs_count++;
+	priv->stats.tx_dlc_usage[dlc]++;
+
+	/* release it */
+	can_get_echo_skb(priv->net, fifo);
+
+	can_led_event(priv->net, CAN_LED_EVENT_TX);
+
+	return 0;
+}
+
+static int mcp25xxfd_compare_obj_ts(const void *a, const void *b)
+{
+	const struct mcp25xxfd_obj_ts * const *rxa = a;
+	const struct mcp25xxfd_obj_ts * const *rxb = b;
+	/* using signed here to handle rollover correctly */
+	s32 ats = (*rxa)->ts;
+	s32 bts = (*rxb)->ts;
+
+	if (ats < bts)
+		return -EINVAL;
+	if (ats > bts)
+		return 1;
+	return 0;
+}
+
+static int mcp25xxfd_process_queued_fifos(struct spi_device *spi)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	struct mcp25xxfd_read_fifo_info *rfi = &priv->queued_fifos;
+	int i;
+	int ret;
+
+	/* sort the fifos (rx and TEF) by receive timestamp */
+	sort(rfi->rxb, rfi->rx_count, sizeof(struct mcp25xxfd_obj_ts *),
+	     mcp25xxfd_compare_obj_ts, NULL);
+
+	/* process the recived fifos */
+	for (i = 0; i < rfi->rx_count ; i++) {
+		if (rfi->rxb[i]->flags & CAN_OBJ_FLAGS_CUSTOM_ISTEF)
+			ret = mcp25xxfd_process_queued_tef(spi, rfi->rxb[i]);
+		else
+			ret = mcp25xxfd_process_queued_rx(spi, rfi->rxb[i]);
+		if (ret)
+			return ret;
+	}
+
+	/* clear queued fifos */
+	mcp25xxfd_clear_queued_fifos(spi);
+
+	return 0;
+}
+
+static int mcp25xxfd_transform_rx(struct spi_device *spi,
+				  struct mcp25xxfd_obj_rx *rx)
+{
+	int dlc;
+
+	/* transform the data to system byte order */
+	mcp25xxfd_obj_ts_from_le(&rx->header);
+
+	/* add the object to the list */
+	mcp25xxfd_addto_queued_fifos(spi, &rx->header);
+
+	/* calc length and return it */
+	dlc = (rx->header.flags & CAN_OBJ_FLAGS_DLC_MASK)
+		>> CAN_OBJ_FLAGS_DLC_SHIFT;
+	return can_dlc2len(dlc);
+}
+
+/* read_fifo implementations
+ *
+ * read_fifos is a simple implementation, that:
+ *   * loops all fifos
+ *     * read header + some data-bytes (8)
+ *     * read rest of data-bytes bytes
+ *     * release fifo
+ *   for 3 can frames dlc<=8 to read here we have:
+ *     * 6 spi transfers
+ *     * 75 bytes (= 3 * (2 + 12 + 8) bytes + 3 * 3 bytes)
+ *   for 3 canfd frames dlc>8 to read here we have:
+ *     * 9 spi transfers
+ *     * 81 (= 3 * (2 + 12 + 8 + 2) bytes + 3 * 3 bytes) + 3 * extra payload
+ *     this only transfers the required size of bytes on the spi bus.
+ *
+ * bulk_read_fifos is an optimization that is most practical for
+ * Can2.0 busses, but may also be practical for CanFD busses that
+ * have a high average payload data size.
+ *
+ * It will read all of the fifo data in a single spi_transfer:
+ *   * read all fifos in one go (as long as these are ajacent to each other)
+ *   * loop all fifos
+ *     * release fifo
+ *   for 3 can2.0 frames to read here we have:
+ *     * 4 spi transfers
+ *     * 71 bytes (= 2 + 3 * (12 + 8) bytes + 3 * 3 bytes)
+ *   for 3 canfd frames to read here we have:
+ *     * 4 spi transfers
+ *     * 230 bytes (= 2 + 3 * (12 + 64) bytes)
+ *     obviously this reads way too many bytes for framesizes <=32 bytes,
+ *     but it avoids the overhead on the CPU side and may even trigger
+ *     DMA transfers due to the high byte count, which release CPU cycles.
+ *
+ * This optimization will also be efficient for cases where a high
+ * percentage of canFD frames has a dlc-size > 8.
+ * This mode is used for Can2.0 configured busses.
+ *
+ * For now this option can get forced for CanFD via a module parameter.
+ * In the future there may be some heuristics that could trigger a usage
+ * of this mode as well in some circumstances.
+ *
+ * Note: there is a second optimization for release fifo as well,
+ *       but it is not as efficient as this optimization for the
+ *       non-CanFD case - see mcp25xxfd_bulk_release_fifos
+ */
+
+static int mcp25xxfd_read_fifos(struct spi_device *spi)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	int fifo_header_size = sizeof(struct mcp25xxfd_obj_rx);
+	int fifo_min_payload_size = 8;
+	int fifo_min_size = fifo_header_size + fifo_min_payload_size;
+	int fifo_max_payload_size =
+		((priv->can.ctrlmode & CAN_CTRLMODE_FD) ? 64 : 8);
+	u32 mask = priv->status.rxif;
+	struct mcp25xxfd_obj_rx *rx;
+	int i, len;
+	int ret;
+	u32 fifo_address;
+	u8 *data;
+
+	/* read all the "open" segments in big chunks */
+	for (i = priv->fifos.rx_fifo_start + priv->fifos.rx_fifos - 1;
+	     i >= priv->fifos.rx_fifo_start;
+	     i--) {
+		if (!(mask & BIT(i)))
+			continue;
+		/* the fifo to fill */
+		rx = (struct mcp25xxfd_obj_rx *)
+			(priv->fifos.fifo_data + priv->fifos.fifo_address[i]);
+		/* read the minimal payload */
+		fifo_address = priv->fifos.fifo_address[i];
+		ret = mcp25xxfd_cmd_readn(spi,
+					  FIFO_DATA(fifo_address),
+					  rx,
+					  fifo_min_size,
+					  priv->spi_speed_hz);
+		if (ret)
+			return ret;
+		/* process fifo stats and get length */
+		len = min_t(int, mcp25xxfd_transform_rx(spi, rx),
+			    fifo_max_payload_size);
+
+		/* read extra payload if needed */
+		if (len > fifo_min_payload_size) {
+			data = &rx->data[fifo_min_payload_size];
+			ret = mcp25xxfd_cmd_readn(spi,
+						  FIFO_DATA(fifo_address +
+							    fifo_min_size),
+						  data,
+						  len - fifo_min_payload_size,
+						  priv->spi_speed_hz);
+			if (ret)
+				return ret;
+		}
+		/* release fifo */
+		ret = mcp25xxfd_normal_release_fifos(spi, i, i + 1);
+		if (ret)
+			return ret;
+		/* increment fifo_usage */
+		priv->stats.fifo_usage[i]++;
+	}
+
+	return 0;
+}
+
+static int mcp25xxfd_bulk_read_fifo_range(struct spi_device *spi,
+					  int start, int end)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	const int fifo_header_size = sizeof(struct mcp25xxfd_obj_rx);
+	const int fifo_max_payload_size = priv->fifos.payload_size;
+	const int fifo_max_size = fifo_header_size + fifo_max_payload_size;
+	struct mcp25xxfd_obj_rx *rx;
+	int i;
+	int ret;
+
+	/* now we got start and end, so read the range */
+	ret = mcp25xxfd_cmd_readn(spi,
+				  FIFO_DATA(priv->fifos.fifo_address[start]),
+				  priv->fifos.fifo_data +
+				  priv->fifos.fifo_address[start],
+				  (end - start) * fifo_max_size,
+				  priv->spi_speed_hz);
+	if (ret)
+		return ret;
+
+	/* clear all the fifos in range */
+	if (use_bulk_release_fifos)
+		ret = mcp25xxfd_bulk_release_fifos(spi, start, end);
+	else
+		ret = mcp25xxfd_normal_release_fifos(spi, start, end);
+	if (ret)
+		return ret;
+
+	/* preprocess data */
+	for (i = start; i < end ; i++) {
+		/* store the fifo to process */
+		rx = (struct mcp25xxfd_obj_rx *)
+			(priv->fifos.fifo_data + priv->fifos.fifo_address[i]);
+		/* process fifo stats */
+		mcp25xxfd_transform_rx(spi, rx);
+		/* increment usage */
+		priv->stats.fifo_usage[i]++;
+	}
+
+	return 0;
+}
+
+static int mcp25xxfd_bulk_read_fifos(struct spi_device *spi)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	u32 mask = priv->status.rxif;
+	int i, start, end;
+	int ret;
+
+	/* find blocks of set bits top down */
+	for (i = priv->fifos.rx_fifo_start + priv->fifos.rx_fifos - 1;
+	     mask && (i >= priv->fifos.rx_fifo_start);
+	     i--) {
+		/* if the bit is 0 then continue loop to find a 1 */
+		if ((mask & BIT(i)) == 0)
+			continue;
+
+		/* so we found a non-0 bit - this is start and end */
+		start = i;
+		end = i;
+
+		/* find the first bit set */
+		for (; mask & BIT(i); i--) {
+			mask &= ~BIT(i);
+			start = i;
+		}
+
+		/* now process that range */
+		ret = mcp25xxfd_bulk_read_fifo_range(spi, start, end + 1);
+		if (ret)
+			return ret;
+	}
+
+	return 0;
+}
+
+static int mcp25xxfd_can_ist_handle_rxif(struct spi_device *spi)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	u32 mask = priv->status.rxif;
+	int ret;
+
+	if (!mask)
+		return 0;
+
+	/* read all the fifos - for non-fd case use bulk read optimization */
+	if (((priv->can.ctrlmode & CAN_CTRLMODE_FD) == 0) ||
+	    use_complete_fdfifo_read)
+		ret = mcp25xxfd_bulk_read_fifos(spi);
+	else
+		ret = mcp25xxfd_read_fifos(spi);
+
+	return 0;
+}
+
+static void mcp25xxfd_mark_tx_processed(struct spi_device *spi,
+					int fifo)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+
+	/* set mask */
+	priv->fifos.tx_processed_mask |= BIT(fifo);
+
+	/* check if we should reenable the TX-queue */
+	if (mcp25xxfd_is_last_txfifo(spi, fifo))
+		priv->tx_queue_status = TX_QUEUE_STATUS_NEEDS_START;
+}
+
+static int mcp25xxfd_can_ist_handle_tefif_handle_single(struct spi_device *spi)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	struct mcp25xxfd_obj_tef *tef;
+	int fifo;
+	int ret;
+
+	/* calc address in address space */
+	tef = (struct mcp25xxfd_obj_tef *)(priv->fifos.fifo_data +
+					   priv->fifos.tef_address);
+
+	/* read all the object data */
+	ret = mcp25xxfd_cmd_readn(spi,
+				  FIFO_DATA(priv->fifos.tef_address),
+				  tef,
+				  /* we do not read the last byte of the ts
+				   * to avoid MAB issiues
+				   */
+				  sizeof(*tef) - 1,
+				  priv->spi_speed_hz);
+	/* increment the counter to read next */
+	ret = mcp25xxfd_cmd_write_mask(spi,
+				       CAN_TEFCON,
+				       CAN_TEFCON_UINC,
+				       CAN_TEFCON_UINC,
+				       priv->spi_speed_hz);
+
+	/* transform the data to system byte order */
+	mcp25xxfd_obj_ts_from_le(&tef->header);
+
+	fifo = (tef->header.flags & CAN_OBJ_FLAGS_SEQ_MASK) >>
+		CAN_OBJ_FLAGS_SEQ_SHIFT;
+
+	/* submit to queue */
+	tef->header.flags |= CAN_OBJ_FLAGS_CUSTOM_ISTEF;
+	mcp25xxfd_addto_queued_fifos(spi, &tef->header);
+
+	/* increment tef_address with rollover */
+	priv->fifos.tef_address += sizeof(*tef);
+	if (priv->fifos.tef_address > priv->fifos.tef_address_end)
+		priv->fifos.tef_address =
+			priv->fifos.tef_address_start;
+
+	/* and mark as processed right now */
+	mcp25xxfd_mark_tx_processed(spi, fifo);
+
+	return 0;
+}
+
+static int mcp25xxfd_can_ist_handle_tefif_conservative(struct spi_device *spi)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	u32 val[2];
+	int ret;
+
+	while (1) {
+		/* get the current TEFSTA and TEFUA */
+		ret = mcp25xxfd_cmd_readn(priv->spi,
+					  CAN_TEFSTA,
+					  val,
+					  8,
+					  priv->spi_speed_hz);
+		if (ret)
+			return ret;
+		mcp25xxfd_convert_to_cpu(val, 2);
+
+		/* check for interrupt flags */
+		if (!(val[0] & CAN_TEFSTA_TEFNEIF))
+			return 0;
+
+		if (priv->fifos.tef_address != val[1]) {
+			dev_err(&spi->dev,
+				"TEF Address mismatch - read: %04x calculated: %04x\n",
+				val[1], priv->fifos.tef_address);
+			priv->fifos.tef_address = val[1];
+		}
+
+		ret = mcp25xxfd_can_ist_handle_tefif_handle_single(spi);
+		if (ret)
+			return ret;
+	}
+
+	return 0;
+}
+
+static int mcp25xxfd_can_ist_handle_tefif_count(struct spi_device *spi,
+						int count)
+{
+	int i;
+	int ret;
+
+	/* now clear TEF for each */
+	/* TODO: optimize for BULK reads, as we (hopefully) know COUNT */
+	for (i = 0; i < count; i++) {
+		/* handle a single TEF */
+		ret = mcp25xxfd_can_ist_handle_tefif_handle_single(spi);
+		if (ret)
+			return ret;
+	}
+
+	return 0;
+}
+
+static int mcp25xxfd_can_ist_handle_tefif(struct spi_device *spi)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	u32 pending = priv->fifos.tx_pending_mask_in_irq &
+		(~priv->fifos.tx_processed_mask);
+	int count;
+
+	/* calculate the number of fifos that have been processed */
+	count = hweight_long(pending);
+	count -= hweight_long(priv->status.txreq & pending);
+
+	/* in case of unexpected results handle "safely" */
+	if (count <= 0)
+		return mcp25xxfd_can_ist_handle_tefif_conservative(spi);
+
+	return mcp25xxfd_can_ist_handle_tefif_count(spi, count);
+}
+
+static int mcp25xxfd_can_ist_handle_txatif_fifo(struct spi_device *spi,
+						int fifo)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	u32 val;
+	int ret;
+
+	/* read fifo status */
+	ret = mcp25xxfd_cmd_read(spi,
+				 CAN_FIFOSTA(fifo),
+				 &val,
+				 priv->spi_speed_hz);
+	if (ret)
+		return ret;
+
+	/* clear the relevant interrupt flags */
+	ret = mcp25xxfd_cmd_write_mask(spi,
+				       CAN_FIFOSTA(fifo),
+				       0,
+				       CAN_FIFOSTA_TXABT |
+				       CAN_FIFOSTA_TXLARB |
+				       CAN_FIFOSTA_TXERR |
+				       CAN_FIFOSTA_TXATIF,
+				       priv->spi_speed_hz);
+
+	/* for specific cases we could trigger a retransmit
+	 * instead of an abort.
+	 */
+
+	/* and we release it from the echo_skb buffer
+	 * NOTE: this is one place where packet delivery will not
+	 * be ordered, as we do not have any timing information
+	 * when this occurred
+	 */
+	can_get_echo_skb(priv->net, fifo);
+
+	/* but we need to run a bit of cleanup */
+	priv->status.txif &= ~BIT(fifo);
+	priv->net->stats.tx_aborted_errors++;
+
+	/* mark the fifo as processed */
+	 mcp25xxfd_mark_tx_processed(spi, fifo);
+
+	/* handle all the known cases accordingly - ignoring FIFO full */
+	val &= CAN_FIFOSTA_TXABT |
+		CAN_FIFOSTA_TXLARB |
+		CAN_FIFOSTA_TXERR;
+	switch (val) {
+	case CAN_FIFOSTA_TXERR:
+		break;
+	default:
+		dev_warn_ratelimited(&spi->dev,
+				     "Unknown TX-Fifo abort condition: %08x - stopping tx-queue\n",
+				     val);
+		break;
+	}
+
+	return 0;
+}
+
+static int mcp25xxfd_can_ist_handle_txatif(struct spi_device *spi)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	int i, fifo;
+	int ret;
+
+	/* process all the fifos with that flag set */
+	for (i = 0, fifo = priv->fifos.tx_fifo_start;
+	    i < priv->fifos.tx_fifos; i++, fifo++) {
+		if (priv->status.txatif & BIT(fifo)) {
+			ret = mcp25xxfd_can_ist_handle_txatif_fifo(spi, fifo);
+			if (ret)
+				return ret;
+		}
+	}
+
+	return 0;
+}
+
+static void mcp25xxfd_error_skb(struct net_device *net)
+{
+	struct mcp25xxfd_priv *priv = netdev_priv(net);
+	struct sk_buff *skb;
+	struct can_frame *frame;
+
+	skb = alloc_can_err_skb(net, &frame);
+	if (skb) {
+		frame->can_id = priv->can_err_id;
+		memcpy(frame->data, priv->can_err_data, 8);
+		netif_rx_ni(skb);
+	} else {
+		netdev_err(net, "cannot allocate error skb\n");
+	}
+}
+
+static int mcp25xxfd_can_ist_handle_rxovif(struct spi_device *spi)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	u32 mask = priv->status.rxovif;
+	int i;
+	int ret;
+
+	/* clear all fifos that have an overflow bit set */
+	for (i = 0; i < 32; i++) {
+		if (mask & BIT(i)) {
+			ret = mcp25xxfd_cmd_write_mask(spi,
+						       CAN_FIFOSTA(i),
+						       0,
+						       CAN_FIFOSTA_RXOVIF,
+						       priv->spi_speed_hz);
+			if (ret)
+				return ret;
+			/* update statistics */
+			priv->net->stats.rx_over_errors++;
+			priv->net->stats.rx_errors++;
+			priv->stats.rx_overflow++;
+			priv->can_err_id |= CAN_ERR_CRTL;
+			priv->can_err_data[1] |= CAN_ERR_CRTL_RX_OVERFLOW;
+		}
+	}
+
+	return 0;
+}
+
+static int mcp25xxfd_can_ist_handle_modif(struct spi_device *spi)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	int omode = priv->active_can_mode;
+	int mode;
+	int ret;
+
+	/* Note that this irq does not get triggered in all situations
+	 * for example SERRIF will move to RESTICTED or LISTENONLY
+	 * but MODIF will not be raised!
+	 */
+
+	/* get the mode */
+	ret = mcp25xxfd_get_opmode(spi, &mode, priv->spi_speed_hz);
+	if (ret)
+		return ret;
+
+	/* if we are restricted, then return to "normal" mode */
+	if (mode == CAN_CON_MODE_RESTRICTED)
+		return mcp25xxfd_set_normal_opmode(spi);
+
+	/* the controller itself will transition to sleep, so we ignore it */
+	if (mode == CAN_CON_MODE_SLEEP)
+		return 0;
+
+	/* switches to the same mode as before are also ignored
+	 * - this typically happens if the driver is shortly
+	 *   switching to a different mode and then returning to the
+	 *   original mode
+	 */
+	if (mode == omode)
+		return 0;
+
+	/* these we need to handle correctly, so warn and give context */
+	dev_warn(&spi->dev,
+		 "Controller unexpectedly switched from mode %s(%u) to %s(%u)\n",
+		 mcp25xxfd_mode_names[omode], omode,
+		 mcp25xxfd_mode_names[mode], mode);
+
+	return 0;
+}
+
+static int mcp25xxfd_can_ist_handle_cerrif(struct spi_device *spi)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+
+	/* in principle we could also delay reading bdiag registers
+	 * until we get here - it would add some extra delay in the
+	 * error case, but be slightly faster in the "normal" case.
+	 * slightly faster would be saving 8 bytes of spi transfer.
+	 */
+
+	dev_err_ratelimited(&spi->dev, "CAN Bus error\n");
+	priv->can_err_id |= CAN_ERR_BUSERROR;
+
+	if (priv->status.bdiag1 &
+	    (CAN_BDIAG1_DBIT0ERR | CAN_BDIAG1_NBIT0ERR)) {
+		priv->can_err_id |= CAN_ERR_BUSERROR;
+		priv->can_err_data[2] |= CAN_ERR_PROT_BIT0;
+		priv->bdiag1_clear_mask |= CAN_BDIAG1_DBIT0ERR |
+			CAN_BDIAG1_NBIT0ERR;
+	}
+	if (priv->status.bdiag1 &
+	    (CAN_BDIAG1_DBIT1ERR | CAN_BDIAG1_NBIT1ERR)) {
+		priv->can_err_id |= CAN_ERR_BUSERROR;
+		priv->can_err_data[2] |= CAN_ERR_PROT_BIT1;
+		priv->bdiag1_clear_mask |= CAN_BDIAG1_DBIT1ERR |
+			CAN_BDIAG1_NBIT1ERR;
+	}
+	if (priv->status.bdiag1 &
+	    (CAN_BDIAG1_DSTUFERR | CAN_BDIAG1_NSTUFERR)) {
+		priv->can_err_id |= CAN_ERR_BUSERROR;
+		priv->can_err_data[2] |= CAN_ERR_PROT_STUFF;
+		priv->bdiag1_clear_mask |= CAN_BDIAG1_DSTUFERR |
+			CAN_BDIAG1_NSTUFERR;
+	}
+	if (priv->status.bdiag1 &
+	    (CAN_BDIAG1_DFORMERR | CAN_BDIAG1_NFORMERR)) {
+		priv->can_err_id |= CAN_ERR_BUSERROR;
+		priv->can_err_data[2] |= CAN_ERR_PROT_FORM;
+		priv->bdiag1_clear_mask |= CAN_BDIAG1_DFORMERR |
+			CAN_BDIAG1_NFORMERR;
+	}
+	if (priv->status.bdiag1 & CAN_BDIAG1_NACKERR) {
+		priv->can_err_id |= CAN_ERR_ACK;
+		priv->bdiag1_clear_mask |= CAN_BDIAG1_NACKERR;
+	}
+
+	return 0;
+}
+
+static int mcp25xxfd_can_ist_handle_eccif(struct spi_device *spi)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	int ret;
+	u32 val;
+	u32 addr;
+
+	priv->can_err_id |= CAN_ERR_CRTL;
+	priv->can_err_data[1] |= CAN_ERR_CRTL_UNSPEC;
+
+	/* read ECC status register */
+	ret = mcp25xxfd_cmd_read(spi, MCP25XXFD_ECCSTAT, &val,
+				 priv->spi_speed_hz);
+	if (ret)
+		return ret;
+
+	addr = (val & MCP25XXFD_ECCSTAT_ERRADDR_MASK) >>
+		MCP25XXFD_ECCSTAT_ERRADDR_SHIFT;
+
+	dev_err_ratelimited(&spi->dev,
+			    "ECC %s bit error at %03x\n",
+			    (val & MCP25XXFD_ECCSTAT_DEDIF) ?
+			    "double" : "single",
+			    addr);
+
+	return mcp25xxfd_cmd_write(spi, MCP25XXFD_ECCSTAT, 0,
+				 priv->spi_speed_hz);
+}
+
+static int mcp25xxfd_can_ist_handle_serrif_txmab(struct spi_device *spi)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+
+	priv->net->stats.tx_fifo_errors++;
+	priv->net->stats.tx_errors++;
+	priv->stats.tx_mab++;
+
+	return 0;
+}
+
+static int mcp25xxfd_can_ist_handle_serrif_rxmab(struct spi_device *spi)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+
+	priv->net->stats.rx_dropped++;
+	priv->net->stats.rx_errors++;
+	priv->stats.rx_mab++;
+
+	return 0;
+}
+
+static int mcp25xxfd_can_ist_handle_serrif(struct spi_device *spi)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	u32 clear;
+	int ret;
+
+	/* clear some interrupts immediately,
+	 * so that we get notified if they happen again
+	 */
+	clear = CAN_INT_SERRIF | CAN_INT_MODIF | CAN_INT_IVMIF;
+	ret = mcp25xxfd_cmd_write_mask(spi, CAN_INT,
+				       priv->status.intf & (~clear),
+				       clear,
+				       priv->spi_speed_hz);
+	if (ret)
+		return ret;
+
+	/* Errors here are:
+	 * * Bus Bandwidth Error: when a RX Message Assembly Buffer
+	 *   is still full when the next message has already arrived
+	 *   the recived message shall be ignored
+	 * * TX MAB Underflow: when a TX Message is invalid
+	 *   due to ECC errors or TXMAB underflow
+	 *   in this situatioon the system will transition to
+	 *   Restricted or Listen Only mode
+	 */
+
+	priv->can_err_id |= CAN_ERR_CRTL;
+	priv->can_err_data[1] |= CAN_ERR_CRTL_UNSPEC;
+
+	/* a mode change + invalid message would indicate
+	 * TX MAB Underflow
+	 */
+	if ((priv->status.intf & CAN_INT_MODIF) &&
+	    (priv->status.intf & CAN_INT_IVMIF)) {
+		return mcp25xxfd_can_ist_handle_serrif_txmab(spi);
+	}
+
+	/* for RX there is only the RXIF an indicator
+	 * - surprizingly RX-MAB does not change mode or anything
+	 */
+	if (priv->status.intf & CAN_INT_RXIF)
+		return mcp25xxfd_can_ist_handle_serrif_rxmab(spi);
+
+	/* the final case */
+	dev_warn_ratelimited(&spi->dev,
+			     "unidentified system error - intf =  %08x\n",
+			     priv->status.intf);
+
+	return 0;
+}
+
+static int mcp25xxfd_can_ist_handle_ivmif(struct spi_device *spi)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+
+	/* if we have a systemerror as well, then ignore it */
+	if (priv->status.intf & CAN_INT_SERRIF)
+		return 0;
+
+	/* otherwise it is an RX issue, so account for it here */
+	priv->can_err_id |= CAN_ERR_PROT;
+	priv->can_err_data[2] |= CAN_ERR_PROT_FORM;
+	priv->net->stats.rx_frame_errors++;
+	priv->net->stats.rx_errors++;
+
+	return 0;
+}
+
+static int mcp25xxfd_disable_interrupts(struct spi_device *spi,
+					u32 speed_hz)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+
+	priv->status.intf = 0;
+	return mcp25xxfd_cmd_write(spi, CAN_INT, 0, speed_hz);
+}
+
+static int mcp25xxfd_enable_interrupts(struct spi_device *spi,
+				       u32 speed_hz)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+
+	priv->status.intf = CAN_INT_TEFIE |
+		CAN_INT_RXIE |
+		CAN_INT_MODIE |
+		CAN_INT_SERRIE |
+		CAN_INT_IVMIE |
+		CAN_INT_CERRIE |
+		CAN_INT_RXOVIE |
+		CAN_INT_ECCIE;
+	return mcp25xxfd_cmd_write(spi, CAN_INT,
+				   priv->status.intf,
+				   speed_hz);
+}
+
+static int mcp25xxfd_hw_wake(struct spi_device *spi)
+{
+	return mcp25xxfd_start_clock(spi, MCP25XXFD_CLK_USER_CAN);
+}
+
+static void mcp25xxfd_hw_sleep(struct spi_device *spi)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+
+	/* disable interrupts */
+	mcp25xxfd_disable_interrupts(spi, priv->spi_setup_speed_hz);
+
+	/* stop the clocks */
+	mcp25xxfd_stop_clock(spi, MCP25XXFD_CLK_USER_CAN);
+}
+
+static int mcp25xxfd_can_ist_handle_status(struct spi_device *spi)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	const u32 clear_irq = CAN_INT_TBCIF |
+		CAN_INT_MODIF |
+		CAN_INT_SERRIF |
+		CAN_INT_CERRIF |
+		CAN_INT_WAKIF |
+		CAN_INT_IVMIF;
+	int ret;
+
+	/* clear all the interrupts asap */
+	ret = mcp25xxfd_cmd_write_mask(spi, CAN_INT,
+				       priv->status.intf & (~clear_irq),
+				       clear_irq,
+				       priv->spi_speed_hz);
+	if (ret)
+		return ret;
+
+	/* interrupt clearing info */
+	priv->bdiag1_clear_value = 0;
+	priv->bdiag1_clear_mask = 0;
+	priv->can_err_id = 0;
+	memset(priv->can_err_data, 0, 8);
+
+	/* state changes */
+	priv->new_state = priv->can.state;
+
+	/* clear queued fifos */
+	mcp25xxfd_clear_queued_fifos(spi);
+
+	/* system error interrupt needs to get handled first
+	 * to get us out of restricted mode
+	 */
+	if (priv->status.intf & CAN_INT_SERRIF) {
+		priv->stats.int_serr_count++;
+		ret = mcp25xxfd_can_ist_handle_serrif(spi);
+		if (ret)
+			return ret;
+	}
+
+	/* mode change interrupt */
+	if (priv->status.intf & CAN_INT_MODIF) {
+		priv->stats.int_mod_count++;
+		ret = mcp25xxfd_can_ist_handle_modif(spi);
+		if (ret)
+			return ret;
+	}
+
+	/* handle the rx */
+	if (priv->status.intf & CAN_INT_RXIF) {
+		priv->stats.int_rx_count++;
+		ret = mcp25xxfd_can_ist_handle_rxif(spi);
+		if (ret)
+			return ret;
+	}
+
+	/* handle aborted TX FIFOs */
+	if (priv->status.txatif) {
+		priv->stats.int_txat_count++;
+		ret = mcp25xxfd_can_ist_handle_txatif(spi);
+		if (ret)
+			return ret;
+	}
+
+	/* handle the tef */
+	if (priv->status.intf & CAN_INT_TEFIF) {
+		priv->stats.int_tef_count++;
+		ret = mcp25xxfd_can_ist_handle_tefif(spi);
+		if (ret)
+			return ret;
+	}
+
+	/* process the queued fifos */
+	ret = mcp25xxfd_process_queued_fifos(spi);
+
+	/* handle error interrupt flags */
+	if (priv->status.rxovif) {
+		priv->stats.int_rxov_count++;
+		ret = mcp25xxfd_can_ist_handle_rxovif(spi);
+		if (ret)
+			return ret;
+	}
+
+	/* sram ECC error interrupt */
+	if (priv->status.intf & CAN_INT_ECCIF) {
+		priv->stats.int_ecc_count++;
+		ret = mcp25xxfd_can_ist_handle_eccif(spi);
+		if (ret)
+			return ret;
+	}
+
+	/* message format interrupt */
+	if (priv->status.intf & CAN_INT_IVMIF) {
+		priv->stats.int_ivm_count++;
+		ret = mcp25xxfd_can_ist_handle_ivmif(spi);
+		if (ret)
+			return ret;
+	}
+
+	/* handle bus errors in more detail */
+	if (priv->status.intf & CAN_INT_CERRIF) {
+		priv->stats.int_cerr_count++;
+		ret = mcp25xxfd_can_ist_handle_cerrif(spi);
+		if (ret)
+			return ret;
+	}
+
+	/* Error counter handling */
+	if (priv->status.trec & CAN_TREC_TXWARN) {
+		priv->new_state = CAN_STATE_ERROR_WARNING;
+		priv->can_err_id |= CAN_ERR_CRTL;
+		priv->can_err_data[1] |= CAN_ERR_CRTL_TX_WARNING;
+	}
+	if (priv->status.trec & CAN_TREC_RXWARN) {
+		priv->new_state = CAN_STATE_ERROR_WARNING;
+		priv->can_err_id |= CAN_ERR_CRTL;
+		priv->can_err_data[1] |= CAN_ERR_CRTL_RX_WARNING;
+	}
+	if (priv->status.trec & CAN_TREC_TXBP) {
+		priv->new_state = CAN_STATE_ERROR_PASSIVE;
+		priv->can_err_id |= CAN_ERR_CRTL;
+		priv->can_err_data[1] |= CAN_ERR_CRTL_TX_PASSIVE;
+	}
+	if (priv->status.trec & CAN_TREC_RXBP) {
+		priv->new_state = CAN_STATE_ERROR_PASSIVE;
+		priv->can_err_id |= CAN_ERR_CRTL;
+		priv->can_err_data[1] |= CAN_ERR_CRTL_RX_PASSIVE;
+	}
+	if (priv->status.trec & CAN_TREC_TXBO) {
+		priv->new_state = CAN_STATE_BUS_OFF;
+		priv->can_err_id |= CAN_ERR_BUSOFF;
+	}
+
+	/* based on the last state state check the new state */
+	switch (priv->can.state) {
+	case CAN_STATE_ERROR_ACTIVE:
+		if (priv->new_state >= CAN_STATE_ERROR_WARNING &&
+		    priv->new_state <= CAN_STATE_BUS_OFF)
+			priv->can.can_stats.error_warning++;
+		/* fallthrough */
+	case CAN_STATE_ERROR_WARNING:
+		if (priv->new_state >= CAN_STATE_ERROR_PASSIVE &&
+		    priv->new_state <= CAN_STATE_BUS_OFF)
+			priv->can.can_stats.error_passive++;
+		break;
+	default:
+		break;
+	}
+	priv->can.state = priv->new_state;
+
+	/* and send error packet */
+	if (priv->can_err_id)
+		mcp25xxfd_error_skb(priv->net);
+
+	/* handle BUS OFF */
+	if (priv->can.state == CAN_STATE_BUS_OFF) {
+		if (priv->can.restart_ms == 0) {
+			mcp25xxfd_stop_queue(priv->net);
+			priv->force_quit = 1;
+			priv->can.can_stats.bus_off++;
+			can_bus_off(priv->net);
+			mcp25xxfd_hw_sleep(spi);
+		}
+	} else {
+		/* restart the tx queue if needed */
+		if (priv->fifos.tx_processed_mask == priv->fifos.tx_fifo_mask)
+			mcp25xxfd_wake_queue(spi);
+	}
+
+	/* clear bdiag flags */
+	if (priv->bdiag1_clear_mask) {
+		ret = mcp25xxfd_cmd_write_mask(spi,
+					       CAN_BDIAG1,
+					       priv->bdiag1_clear_value,
+					       priv->bdiag1_clear_mask,
+					       priv->spi_speed_hz);
+		if (ret)
+			return ret;
+	}
+
+	return 0;
+}
+
+static irqreturn_t mcp25xxfd_can_ist(int irq, void *dev_id)
+{
+	struct mcp25xxfd_priv *priv = dev_id;
+	struct spi_device *spi = priv->spi;
+	int ret;
+
+	priv->stats.irq_calls++;
+	priv->stats.irq_state = IRQ_STATE_RUNNING;
+
+	while (!priv->force_quit) {
+		/* count irq loops */
+		priv->stats.irq_loops++;
+
+		/* copy pending to in_irq - any
+		 * updates that happen asyncronously
+		 * are not taken into account here
+		 */
+		priv->fifos.tx_pending_mask_in_irq =
+			priv->fifos.tx_pending_mask;
+
+		/* read interrupt status flags */
+		ret = mcp25xxfd_cmd_readn(spi, CAN_INT,
+					  &priv->status,
+					  sizeof(priv->status),
+					  priv->spi_speed_hz);
+		if (ret)
+			return ret;
+
+		/* only act if the mask is applied */
+		if ((priv->status.intf &
+		     (priv->status.intf >> CAN_INT_IE_SHIFT)) == 0)
+			break;
+
+		/* handle the status */
+		ret = mcp25xxfd_can_ist_handle_status(spi);
+		if (ret)
+			return ret;
+	}
+
+	return IRQ_HANDLED;
+}
+
+static int mcp25xxfd_get_berr_counter(const struct net_device *net,
+				      struct can_berr_counter *bec)
+{
+	struct mcp25xxfd_priv *priv = netdev_priv(net);
+
+	bec->txerr = (priv->status.trec & CAN_TREC_TEC_MASK) >>
+		CAN_TREC_TEC_SHIFT;
+	bec->rxerr = (priv->status.trec & CAN_TREC_REC_MASK) >>
+		CAN_TREC_REC_SHIFT;
+
+	return 0;
+}
+
+static int mcp25xxfd_power_enable(struct regulator *reg, int enable)
+{
+	return 0;
+}
+
+static int mcp25xxfd_do_set_mode(struct net_device *net, enum can_mode mode)
+{
+	switch (mode) {
+	case CAN_MODE_START:
+		break;
+	default:
+		return -EOPNOTSUPP;
+	}
+
+	return 0;
+}
+
+static int mcp25xxfd_do_set_nominal_bittiming(struct net_device *net)
+{
+	struct mcp25xxfd_priv *priv = netdev_priv(net);
+	struct can_bittiming *bt = &priv->can.bittiming;
+	struct spi_device *spi = priv->spi;
+
+	int sjw = bt->sjw;
+	int pseg2 = bt->phase_seg2;
+	int pseg1 = bt->phase_seg1;
+	int propseg = bt->prop_seg;
+	int brp = bt->brp;
+
+	int tseg1 = propseg + pseg1;
+	int tseg2 = pseg2;
+
+	/* calculate nominal bit timing */
+	priv->regs.nbtcfg = ((sjw - 1) << CAN_NBTCFG_SJW_SHIFT) |
+		((tseg2 - 1) << CAN_NBTCFG_TSEG2_SHIFT) |
+		((tseg1 - 1) << CAN_NBTCFG_TSEG1_SHIFT) |
+		((brp - 1) << CAN_NBTCFG_BRP_SHIFT);
+
+	return mcp25xxfd_cmd_write(spi, CAN_NBTCFG,
+				   priv->regs.nbtcfg,
+				   priv->spi_setup_speed_hz);
+}
+
+static int mcp25xxfd_do_set_data_bittiming(struct net_device *net)
+{
+	struct mcp25xxfd_priv *priv = netdev_priv(net);
+	struct can_bittiming *bt = &priv->can.data_bittiming;
+	struct spi_device *spi = priv->spi;
+
+	int sjw = bt->sjw;
+	int pseg2 = bt->phase_seg2;
+	int pseg1 = bt->phase_seg1;
+	int propseg = bt->prop_seg;
+	int brp = bt->brp;
+
+	int tseg1 = propseg + pseg1;
+	int tseg2 = pseg2;
+
+	int ret;
+
+	/* set up Transmitter delay compensation */
+	if (!priv->regs.tdc)
+		priv->regs.tdc = CAN_TDC_EDGFLTEN |
+			(CAN_TDC_TDCMOD_AUTO << CAN_TDC_TDCMOD_SHIFT);
+	ret = mcp25xxfd_cmd_write(spi, CAN_TDC, priv->regs.tdc,
+				  priv->spi_setup_speed_hz);
+	if (ret)
+		return ret;
+
+	/* calculate nominal bit timing */
+	priv->regs.dbtcfg = ((sjw - 1) << CAN_DBTCFG_SJW_SHIFT) |
+		((tseg2 - 1) << CAN_DBTCFG_TSEG2_SHIFT) |
+		((tseg1 - 1) << CAN_DBTCFG_TSEG1_SHIFT) |
+		((brp - 1) << CAN_DBTCFG_BRP_SHIFT);
+
+	return mcp25xxfd_cmd_write(spi, CAN_DBTCFG,
+				   priv->regs.dbtcfg,
+				   priv->spi_setup_speed_hz);
+}
+
+static int mcp25xxfd_hw_probe(struct spi_device *spi)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	int ret;
+
+	/* Wait for oscillator startup timer after power up */
+	msleep(MCP25XXFD_OST_DELAY_MS);
+
+	/* send a "blind" reset, hoping we are in Config mode */
+	mcp25xxfd_cmd_reset(spi, priv->spi_setup_speed_hz);
+
+	/* Wait for oscillator startup again */
+	msleep(MCP25XXFD_OST_DELAY_MS);
+
+	/* check clock register that the clock is ready or disabled */
+	ret = mcp25xxfd_cmd_read(spi, MCP25XXFD_OSC,
+				 &priv->regs.osc,
+				 priv->spi_setup_speed_hz);
+	if (ret)
+		return ret;
+
+	/* there can only be one... */
+	switch (priv->regs.osc &
+		(MCP25XXFD_OSC_OSCRDY | MCP25XXFD_OSC_OSCDIS)) {
+	case MCP25XXFD_OSC_OSCRDY: /* either the clock is ready */
+		break;
+	case MCP25XXFD_OSC_OSCDIS: /* or the clock is disabled */
+		/* wakeup sleeping system */
+		ret = mcp25xxfd_wake_from_sleep(spi);
+		if (ret)
+			return ret;
+		/* send a reset, hoping we are now in Config mode */
+		mcp25xxfd_cmd_reset(spi, priv->spi_setup_speed_hz);
+
+		/* Wait for oscillator startup again */
+		msleep(MCP25XXFD_OST_DELAY_MS);
+		break;
+	default:
+		/* otherwise there is no valid device (or in strange state)
+		 *
+		 * if PLL is enabled but not ready, then there may be
+		 * something "fishy"
+		 * this happened during driver development
+		 * (enabling pll, when when on wrong clock), so best warn
+		 * about such a possibility
+		 */
+		if ((priv->regs.osc &
+		     (MCP25XXFD_OSC_PLLEN | MCP25XXFD_OSC_PLLRDY))
+		    == MCP25XXFD_OSC_PLLEN)
+			dev_err(&spi->dev,
+				"mcp25xxfd may be in a strange state - a power disconnect may be required\n");
+
+		return -ENODEV;
+	}
+
+	/* check if we are in config mode already*/
+
+	/* read CON register and match */
+	ret = mcp25xxfd_cmd_read(spi, CAN_CON,
+				 &priv->regs.con,
+				 priv->spi_setup_speed_hz);
+	if (ret)
+		return ret;
+
+	/* apply mask and check */
+	if ((priv->regs.con & CAN_CON_DEFAULT_MASK) == CAN_CON_DEFAULT) {
+		priv->active_can_mode = CAN_CON_MODE_CONFIG;
+		return 0;
+	}
+
+	/* as per datasheet a reset only works in Config Mode
+	 * so as we have in principle no knowledge of the current
+	 * mode that the controller is in we have no safe way
+	 * to detect the device correctly
+	 * hence we need to "blindly" put the controller into
+	 * config mode.
+	 * on the "save" side, the OSC reg has to be valid already,
+	 * so there is a chance we got the controller...
+	 */
+
+	/* blindly force it into config mode */
+	priv->regs.con = CAN_CON_DEFAULT;
+	priv->active_can_mode = CAN_CON_MODE_CONFIG;
+	ret = mcp25xxfd_cmd_write(spi, CAN_CON, CAN_CON_DEFAULT,
+				  priv->spi_setup_speed_hz);
+	if (ret)
+		return ret;
+
+	/* delay some time */
+	msleep(MCP25XXFD_OST_DELAY_MS);
+
+	/* reset can controller */
+	mcp25xxfd_cmd_reset(spi, priv->spi_setup_speed_hz);
+
+	/* delay some time */
+	msleep(MCP25XXFD_OST_DELAY_MS);
+
+	/* read CON register and match a final time */
+	ret = mcp25xxfd_cmd_read(spi, CAN_CON,
+				 &priv->regs.con,
+				 priv->spi_setup_speed_hz);
+	if (ret)
+		return ret;
+
+	/* apply mask and check */
+	if ((priv->regs.con & CAN_CON_DEFAULT_MASK) != CAN_CON_DEFAULT)
+		return -ENODEV;
+
+	/* just in case: disable interrupts on controller */
+	return mcp25xxfd_disable_interrupts(spi,
+					    priv->spi_setup_speed_hz);
+}
+
+static int mcp25xxfd_setup_osc(struct spi_device *spi)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	int val = ((priv->config.clock_pll) ? MCP25XXFD_OSC_PLLEN : 0)
+		| ((priv->config.clock_div2) ? MCP25XXFD_OSC_SCLKDIV : 0);
+	int waitfor = ((priv->config.clock_pll) ? MCP25XXFD_OSC_PLLRDY : 0)
+		| ((priv->config.clock_div2) ? MCP25XXFD_OSC_SCLKRDY : 0)
+		| MCP25XXFD_OSC_OSCRDY;
+	int ret;
+	unsigned long timeout;
+
+	/* manage clock_out divider */
+	switch (priv->config.clock_odiv) {
+	case 10:
+		val |= (MCP25XXFD_OSC_CLKODIV_10)
+			<< MCP25XXFD_OSC_CLKODIV_SHIFT;
+		break;
+	case 4:
+		val |= (MCP25XXFD_OSC_CLKODIV_4)
+			<< MCP25XXFD_OSC_CLKODIV_SHIFT;
+		break;
+	case 2:
+		val |= (MCP25XXFD_OSC_CLKODIV_2)
+			<< MCP25XXFD_OSC_CLKODIV_SHIFT;
+		break;
+	case 1:
+		val |= (MCP25XXFD_OSC_CLKODIV_1)
+			<< MCP25XXFD_OSC_CLKODIV_SHIFT;
+		break;
+	case 0:
+		/* this means implicitly SOF output */
+		val |= (MCP25XXFD_OSC_CLKODIV_10)
+			<< MCP25XXFD_OSC_CLKODIV_SHIFT;
+		break;
+	default:
+		dev_err(&spi->dev,
+			"Unsupported output clock divider %i\n",
+			priv->config.clock_odiv);
+		return -EINVAL;
+	}
+
+	/* write clock */
+	ret = mcp25xxfd_cmd_write(spi, MCP25XXFD_OSC, val,
+				  priv->spi_setup_speed_hz);
+	if (ret)
+		return ret;
+
+	/* wait for synced pll/osc/sclk */
+	timeout = jiffies + MCP25XXFD_OSC_POLLING_JIFFIES;
+	while (time_before_eq(jiffies, timeout)) {
+		ret = mcp25xxfd_cmd_read(spi, MCP25XXFD_OSC,
+					 &priv->regs.osc,
+					 priv->spi_setup_speed_hz);
+		if (ret)
+			return ret;
+		if ((priv->regs.osc & waitfor) == waitfor)
+			return 0;
+	}
+
+	dev_err(&spi->dev,
+		"Clock did not lock within the timeout period\n");
+
+	/* we timed out */
+	return -ENODEV;
+}
+
+static int mcp25xxfd_setup_fifo(struct net_device *net,
+				struct mcp25xxfd_priv *priv,
+				struct spi_device *spi)
+{
+	u32 val, available_memory, tx_memory_used;
+	int ret;
+	int i, fifo;
+
+	/* clear all filter */
+	for (i = 0; i < 32; i++) {
+		ret = mcp25xxfd_cmd_write(spi, CAN_FLTOBJ(i), 0,
+					  priv->spi_setup_speed_hz);
+		if (ret)
+			return ret;
+		ret = mcp25xxfd_cmd_write(spi, CAN_FLTMASK(i), 0,
+					  priv->spi_setup_speed_hz);
+		if (ret)
+			return ret;
+		ret = mcp25xxfd_cmd_write_mask(spi, CAN_FLTCON(i), 0,
+					       CAN_FILCON_MASK(i),
+					       priv->spi_setup_speed_hz);
+		if (ret)
+			return ret;
+	}
+
+	/* decide on TEF, tx and rx FIFOS */
+	switch (net->mtu) {
+	case CAN_MTU:
+		/* note: if we have INT1 connected to a GPIO
+		 * then we could handle this differently and more
+		 * efficiently
+		 */
+
+		/* mtu is 8 */
+		priv->fifos.payload_size = 8;
+		priv->fifos.payload_mode = CAN_TXQCON_PLSIZE_8;
+
+		/* 7 tx fifos starting at fifo 1 */
+		priv->fifos.tx_fifos = 7;
+
+		/* 24 rx fifos with 1 buffers/fifo */
+		priv->fifos.rx_fifo_depth = 1;
+
+		break;
+	case CANFD_MTU:
+		/* wish there was a way to have hw filters
+		 * that can separate based on length ...
+		 */
+		/* MTU is 64 */
+		priv->fifos.payload_size = 64;
+		priv->fifos.payload_mode = CAN_TXQCON_PLSIZE_64;
+
+		/* 7 tx fifos */
+		priv->fifos.tx_fifos = 7;
+
+		/* 19 rx fifos with 1 buffer/fifo */
+		priv->fifos.rx_fifo_depth = 1;
+
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	/* if defined as a module modify the number of tx_fifos */
+	if (tx_fifos) {
+		dev_info(&spi->dev,
+			 "Using %i tx-fifos as per module parameter\n",
+			 tx_fifos);
+		priv->fifos.tx_fifos = tx_fifos;
+	}
+
+	/* check range - we need 1 RX-fifo and one tef-fifo, hence 30 */
+	if (priv->fifos.tx_fifos > 30) {
+		dev_err(&spi->dev,
+			"There is an absolute maximum of 30 tx-fifos\n");
+		return -EINVAL;
+	}
+
+	tx_memory_used = priv->fifos.tx_fifos *
+		(sizeof(struct mcp25xxfd_obj_tef) +
+		 sizeof(struct mcp25xxfd_obj_tx) +
+		 priv->fifos.payload_size);
+	/* check that we are not exceeding memory limits with 1 RX buffer */
+	if (tx_memory_used + (sizeof(struct mcp25xxfd_obj_rx) +
+		   priv->fifos.payload_size) > MCP25XXFD_BUFFER_TXRX_SIZE) {
+		dev_err(&spi->dev,
+			"Configured %i tx-fifos exceeds available memory already\n",
+			priv->fifos.tx_fifos);
+		return -EINVAL;
+	}
+
+	/* calculate possible amount of RX fifos */
+	available_memory = MCP25XXFD_BUFFER_TXRX_SIZE - tx_memory_used;
+
+	priv->fifos.rx_fifos = available_memory /
+		(sizeof(struct mcp25xxfd_obj_rx) +
+		 priv->fifos.payload_size) /
+		priv->fifos.rx_fifo_depth;
+
+	/* we only support 31 FIFOS in total (TEF = FIFO0),
+	 * so modify rx accordingly
+	 */
+	if (priv->fifos.tx_fifos + priv->fifos.rx_fifos > 31)
+		priv->fifos.rx_fifos = 31 - priv->fifos.tx_fifos;
+
+	/* calculate effective memory used */
+	available_memory -= priv->fifos.rx_fifos *
+		(sizeof(struct mcp25xxfd_obj_rx) +
+		 priv->fifos.payload_size) *
+		priv->fifos.rx_fifo_depth;
+
+	/* calcluate tef size */
+	priv->fifos.tef_fifos = priv->fifos.tx_fifos;
+	fifo = available_memory / sizeof(struct mcp25xxfd_obj_tef);
+	if (fifo > 0) {
+		priv->fifos.tef_fifos += fifo;
+		if (priv->fifos.tef_fifos > 32)
+			priv->fifos.tef_fifos = 32;
+	}
+
+	/* calculate rx/tx fifo start */
+	priv->fifos.rx_fifo_start = 1;
+	priv->fifos.tx_fifo_start =
+		priv->fifos.rx_fifo_start + priv->fifos.rx_fifos;
+
+	/* set up TEF SIZE to the number of tx_fifos and IRQ */
+	priv->regs.tefcon = CAN_TEFCON_FRESET |
+		CAN_TEFCON_TEFNEIE |
+		CAN_TEFCON_TEFTSEN |
+		((priv->fifos.tef_fifos - 1) << CAN_TEFCON_FSIZE_SHIFT);
+
+	ret = mcp25xxfd_cmd_write(spi, CAN_TEFCON,
+				  priv->regs.tefcon,
+				  priv->spi_setup_speed_hz);
+	if (ret)
+		return ret;
+
+	/* set up tx fifos */
+	val = CAN_FIFOCON_TXEN |
+		CAN_FIFOCON_TXATIE | /* show up txatie flags in txatif reg */
+		CAN_FIFOCON_FRESET | /* reset FIFO */
+		(priv->fifos.payload_mode << CAN_FIFOCON_PLSIZE_SHIFT) |
+		(0 << CAN_FIFOCON_FSIZE_SHIFT); /* 1 FIFO only */
+
+	if (priv->can.ctrlmode & CAN_CTRLMODE_ONE_SHOT)
+		if (three_shot)
+			val |= CAN_FIFOCON_TXAT_THREE_SHOT <<
+				CAN_FIFOCON_TXAT_SHIFT;
+		else
+			val |= CAN_FIFOCON_TXAT_ONE_SHOT <<
+				CAN_FIFOCON_TXAT_SHIFT;
+	else
+		val |= CAN_FIFOCON_TXAT_UNLIMITED <<
+			CAN_FIFOCON_TXAT_SHIFT;
+
+	for (i = 0; i < priv->fifos.tx_fifos; i++) {
+		fifo = priv->fifos.tx_fifo_start + i;
+		ret = mcp25xxfd_cmd_write(spi, CAN_FIFOCON(fifo),
+					  /* the prioriy needs to be inverted
+					   * we need to run from lowest to
+					   * highest to avoid MAB errors
+					   */
+					  val | ((31 - fifo) <<
+						 CAN_FIFOCON_TXPRI_SHIFT),
+					  priv->spi_setup_speed_hz);
+		if (ret)
+			return ret;
+		priv->fifos.tx_fifo_mask |= BIT(fifo);
+	}
+
+	/* now set up RX FIFO */
+	for (i = 0,
+	     fifo = priv->fifos.rx_fifo_start + priv->fifos.rx_fifos - 1;
+	     i < priv->fifos.rx_fifos; i++, fifo--) {
+		/* prepare the fifo itself */
+		ret = mcp25xxfd_cmd_write(spi, CAN_FIFOCON(fifo),
+					  (priv->fifos.payload_mode <<
+					   CAN_FIFOCON_PLSIZE_SHIFT) |
+					  ((priv->fifos.rx_fifo_depth - 1) <<
+					   CAN_FIFOCON_FSIZE_SHIFT) |
+					  /* RX timestamps: */
+					  CAN_FIFOCON_RXTSEN |
+					  /* reset FIFO: */
+					  CAN_FIFOCON_FRESET |
+					  /* FIFO Full: */
+					  CAN_FIFOCON_TFERFFIE |
+					  /* FIFO Half Full: */
+					  CAN_FIFOCON_TFHRFHIE |
+					  /* FIFO not empty: */
+					  CAN_FIFOCON_TFNRFNIE |
+					  /* on last fifo add overflow flag: */
+					  ((i == priv->fifos.rx_fifos - 1) ?
+					   CAN_FIFOCON_RXOVIE : 0),
+					  priv->spi_setup_speed_hz);
+		if (ret)
+			return ret;
+		/* prepare the rx filter config: filter i directs to fifo
+		 * FLTMSK and FLTOBJ are 0 already, so they match everything
+		 */
+		ret = mcp25xxfd_cmd_write_mask(spi, CAN_FLTCON(i),
+					       CAN_FIFOCON_FLTEN(i) |
+					       (fifo << CAN_FILCON_SHIFT(i)),
+					       CAN_FIFOCON_FLTEN(i) |
+					       CAN_FILCON_MASK(i),
+					       priv->spi_setup_speed_hz);
+		if (ret)
+			return ret;
+
+		priv->fifos.rx_fifo_mask |= BIT(fifo);
+	}
+
+	/* we need to move out of CONFIG mode shortly to get the addresses */
+	ret = mcp25xxfd_set_opmode(spi, CAN_CON_MODE_INTERNAL_LOOPBACK,
+				   priv->spi_setup_speed_hz);
+	if (ret)
+		return ret;
+
+	/* for the TEF fifo */
+	ret = mcp25xxfd_cmd_read(spi, CAN_TEFUA, &val,
+				 priv->spi_setup_speed_hz);
+	if (ret)
+		return ret;
+	priv->fifos.tef_address = val;
+	priv->fifos.tef_address_start = val;
+	priv->fifos.tef_address_end = priv->fifos.tef_address_start +
+		priv->fifos.tef_fifos * sizeof(struct mcp25xxfd_obj_tef) -
+		1;
+
+	/* get all the relevant addresses for the transmit fifos */
+	for (i = 0; i < priv->fifos.tx_fifos; i++) {
+		fifo = priv->fifos.tx_fifo_start + i;
+		ret = mcp25xxfd_cmd_read(spi, CAN_FIFOUA(fifo),
+					 &val, priv->spi_setup_speed_hz);
+		if (ret)
+			return ret;
+		priv->fifos.fifo_address[fifo] = val;
+	}
+
+	/* and prepare the spi_messages */
+	ret = mcp25xxfd_fill_spi_transmit_fifos(priv);
+	if (ret)
+		return ret;
+
+	/* get all the relevant addresses for the rx fifos */
+	for (i = 0; i < priv->fifos.rx_fifos; i++) {
+		fifo = priv->fifos.rx_fifo_start + i;
+		ret = mcp25xxfd_cmd_read(spi, CAN_FIFOUA(fifo),
+					 &val, priv->spi_setup_speed_hz);
+		if (ret)
+			return ret;
+	       priv->fifos.fifo_address[fifo] = val;
+	}
+
+	/* now get back into config mode */
+	ret = mcp25xxfd_set_opmode(spi, CAN_CON_MODE_CONFIG,
+				   priv->spi_setup_speed_hz);
+	if (ret)
+		return ret;
+
+	return 0;
+}
+
+static int mcp25xxfd_setup(struct net_device *net,
+			   struct mcp25xxfd_priv *priv,
+			   struct spi_device *spi)
+{
+	int ret;
+
+	/* set up pll/clock if required */
+	ret = mcp25xxfd_setup_osc(spi);
+	if (ret)
+		return ret;
+
+	/* set up RAM ECC */
+	priv->regs.ecccon = MCP25XXFD_ECCCON_ECCEN |
+		MCP25XXFD_ECCCON_SECIE |
+		MCP25XXFD_ECCCON_DEDIE;
+	ret = mcp25xxfd_cmd_write(spi, MCP25XXFD_ECCCON,
+				  priv->regs.ecccon,
+				  priv->spi_setup_speed_hz);
+	if (ret)
+		return ret;
+
+	/* clean SRAM now that we have ECC enabled
+	 * only this case it is clear that all RAM cels have
+	 * valid ECC bits
+	 */
+	ret = mcp25xxfd_clean_sram(spi, priv->spi_setup_speed_hz);
+	if (ret)
+		return ret;
+
+	/* time stamp control register - 1ns resolution, but disabled */
+	ret = mcp25xxfd_cmd_write(spi, CAN_TBC, 0,
+				  priv->spi_setup_speed_hz);
+	if (ret)
+		return ret;
+	priv->regs.tscon = CAN_TSCON_TBCEN |
+		((priv->can.clock.freq / 1000000)
+		 << CAN_TSCON_TBCPRE_SHIFT);
+	ret = mcp25xxfd_cmd_write(spi, CAN_TSCON,
+				  priv->regs.tscon,
+				  priv->spi_setup_speed_hz);
+	if (ret)
+		return ret;
+
+	/* setup value of con_register */
+	priv->regs.con = CAN_CON_STEF /* enable TEF */;
+
+	/* transmission bandwidth sharing bits */
+	if (bw_sharing_log2bits > 12)
+		bw_sharing_log2bits = 12;
+	priv->regs.con |= bw_sharing_log2bits << CAN_CON_TXBWS_SHIFT;
+	/* non iso FD mode */
+	if (!(priv->can.ctrlmode & CAN_CTRLMODE_FD_NON_ISO))
+		priv->regs.con |= CAN_CON_ISOCRCEN;
+	/* one shot */
+	if (priv->can.ctrlmode & CAN_CTRLMODE_ONE_SHOT)
+		priv->regs.con |= CAN_CON_RTXAT;
+
+	/* and put us into default mode = CONFIG */
+	priv->regs.con |= (CAN_CON_MODE_CONFIG << CAN_CON_REQOP_SHIFT) |
+		(CAN_CON_MODE_CONFIG << CAN_CON_OPMOD_SHIFT);
+	/* apply it now - later we will only switch opsmodes... */
+	ret = mcp25xxfd_cmd_write(spi, CAN_CON,
+				  priv->regs.con,
+				  priv->spi_setup_speed_hz);
+
+	/* setup fifos - this also puts the system into sleep mode */
+	return mcp25xxfd_setup_fifo(net, priv, spi);
+}
+
+static int mcp25xxfd_open(struct net_device *net)
+{
+	struct mcp25xxfd_priv *priv = netdev_priv(net);
+	struct spi_device *spi = priv->spi;
+	int ret;
+
+	//pr_err("mcp25xxfd_open start\n");
+	ret = open_candev(net);
+	if (ret) {
+		dev_err(&spi->dev, "unable to set initial baudrate!\n");
+		return ret;
+	}
+
+	mcp25xxfd_gpio_direction_output(&priv->gpio, 0, 0);
+
+	mcp25xxfd_power_enable(priv->transceiver, 1);
+
+	priv->force_quit = 0;
+
+	/* clear those statistics */
+	memset(&priv->stats, 0, sizeof(priv->stats));
+
+	ret = request_threaded_irq(spi->irq, NULL,
+				   mcp25xxfd_can_ist,
+				   IRQF_ONESHOT | IRQF_TRIGGER_LOW,
+				   DEVICE_NAME, priv);
+	if (ret) {
+		dev_err(&spi->dev, "failed to acquire irq %d - %i\n",
+			spi->irq, ret);
+		mcp25xxfd_power_enable(priv->transceiver, 0);
+		close_candev(net);
+		return ret;
+	}
+
+	/* wake from sleep if necessary */
+	ret = mcp25xxfd_hw_wake(spi);
+	if (ret)
+		goto open_clean;
+
+	ret = mcp25xxfd_setup(net, priv, spi);
+	if (ret)
+		goto open_clean;
+
+	mcp25xxfd_do_set_nominal_bittiming(net);
+	mcp25xxfd_do_set_data_bittiming(net);
+
+	ret = mcp25xxfd_set_normal_opmode(spi);
+	if (ret)
+		goto open_clean;
+	/* setting up default state */
+	priv->can.state = CAN_STATE_ERROR_ACTIVE;
+
+	/* only now enable the interrupt on the controller */
+	ret =  mcp25xxfd_enable_interrupts(spi,
+					   priv->spi_setup_speed_hz);
+	if (ret)
+		goto open_clean;
+
+	can_led_event(net, CAN_LED_EVENT_OPEN);
+
+	priv->tx_queue_status = TX_QUEUE_STATUS_RUNNING;
+	netif_wake_queue(net);
+
+	return 0;
+
+open_clean:
+	mcp25xxfd_disable_interrupts(spi, priv->spi_setup_speed_hz);
+	free_irq(spi->irq, priv);
+	mcp25xxfd_hw_sleep(spi);
+	mcp25xxfd_power_enable(priv->transceiver, 0);
+	close_candev(net);
+
+	return ret;
+}
+
+static void mcp25xxfd_clean(struct net_device *net)
+{
+	struct mcp25xxfd_priv *priv = netdev_priv(net);
+	int i;
+
+	for (i = 0; i < priv->fifos.tx_fifos; i++) {
+		if (priv->fifos.tx_pending_mask & BIT(i)) {
+			can_free_echo_skb(priv->net, 0);
+			priv->net->stats.tx_errors++;
+		}
+	}
+
+	priv->fifos.tx_pending_mask = 0;
+}
+
+static int mcp25xxfd_stop(struct net_device *net)
+{
+	struct mcp25xxfd_priv *priv = netdev_priv(net);
+	struct spi_device *spi = priv->spi;
+
+	close_candev(net);
+	mcp25xxfd_gpio_direction_output(&priv->gpio, 0, 1);
+	kfree(priv->spi_transmit_fifos);
+	priv->spi_transmit_fifos = NULL;
+
+	priv->force_quit = 1;
+	free_irq(spi->irq, priv);
+
+	/* Disable and clear pending interrupts */
+	mcp25xxfd_disable_interrupts(spi, priv->spi_setup_speed_hz);
+
+	mcp25xxfd_clean(net);
+
+	mcp25xxfd_hw_sleep(spi);
+
+	mcp25xxfd_power_enable(priv->transceiver, 0);
+
+	priv->can.state = CAN_STATE_STOPPED;
+
+	can_led_event(net, CAN_LED_EVENT_STOP);
+
+	return 0;
+}
+
+static const struct net_device_ops mcp25xxfd_netdev_ops = {
+	.ndo_open = mcp25xxfd_open,
+	.ndo_stop = mcp25xxfd_stop,
+	.ndo_start_xmit = mcp25xxfd_start_xmit,
+	.ndo_change_mtu = can_change_mtu,
+};
+
+static const struct of_device_id mcp25xxfd_of_match[] = {
+	{
+		.compatible	= "microchip,mcp2517fd",
+		.data		= (void *)CAN_MCP2517FD,
+	},
+	{ }
+};
+MODULE_DEVICE_TABLE(of, mcp25xxfd_of_match);
+
+static const struct spi_device_id mcp25xxfd_id_table[] = {
+	{
+		.name		= "mcp2517fd",
+		.driver_data	= (kernel_ulong_t)CAN_MCP2517FD,
+	},
+	{ }
+};
+MODULE_DEVICE_TABLE(spi, mcp25xxfd_id_table);
+
+static int mcp25xxfd_dump_regs(struct seq_file *file, void *offset)
+{
+	struct spi_device *spi = file->private;
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	u32 data[CAN_TXQUA - CAN_CON + 4];
+	int i;
+	int count;
+	int ret;
+
+	count = (CAN_TXQUA - CAN_CON) / 4 + 1;
+	ret = mcp25xxfd_cmd_readn(spi, CAN_CON, data, 4 * count,
+				  priv->spi_setup_speed_hz);
+	if (ret)
+		return ret;
+
+	mcp25xxfd_convert_to_cpu((u32 *)data, 4 * count);
+
+	for (i = 0; i < count; i++) {
+		seq_printf(file, "Reg 0x%03x = 0x%08x\n",
+			   CAN_CON + 4 * i,
+			   ((u32 *)data)[i]);
+	}
+
+	count = (MCP25XXFD_ECCSTAT - MCP25XXFD_OSC) / 4 + 1;
+	ret = mcp25xxfd_cmd_readn(spi, MCP25XXFD_OSC, data, 4 * count,
+				  priv->spi_setup_speed_hz);
+	if (ret)
+		return ret;
+	mcp25xxfd_convert_to_cpu((u32 *)data, 4 * count);
+
+	for (i = 0; i < count; i++) {
+		seq_printf(file, "Reg 0x%03x = 0x%08x\n",
+			   MCP25XXFD_OSC + 4 * i,
+			   ((u32 *)data)[i]);
+	}
+
+	return 0;
+}
+
+#if defined(CONFIG_DEBUG_FS)
+static void mcp25xxfd_debugfs_add(struct mcp25xxfd_priv *priv)
+{
+	struct dentry *root, *fifousage, *fifoaddr, *rx, *tx, *status,
+		*regs, *stats, *rxdlc, *txdlc;
+	char name[32];
+	int i;
+
+	/* create the net device name */
+	snprintf(name, sizeof(name), DEVICE_NAME "-%s", priv->net->name);
+	priv->debugfs_dir = debugfs_create_dir(name, NULL);
+	root = priv->debugfs_dir;
+
+	rx = debugfs_create_dir("rx", root);
+	tx = debugfs_create_dir("tx", root);
+	fifoaddr = debugfs_create_dir("fifo_address", root);
+	status = debugfs_create_dir("status", root);
+	regs = debugfs_create_dir("regs", root);
+	stats = debugfs_create_dir("stats", root);
+	fifousage = debugfs_create_dir("fifo_usage", stats);
+	rxdlc = debugfs_create_dir("rx_dlc_usage", stats);
+	txdlc = debugfs_create_dir("tx_dlc_usage", stats);
+
+	/* add spi speed info */
+	debugfs_create_u32("spi_setup_speed_hz", 0444, root,
+			   &priv->spi_setup_speed_hz);
+	debugfs_create_u32("spi_speed_hz", 0444, root,
+			   &priv->spi_speed_hz);
+
+	/* add irq state info */
+	debugfs_create_u32("irq_state", 0444, root, &priv->stats.irq_state);
+
+	/* for the clock user mask */
+	debugfs_create_u32("clk_user_mask", 0444, root, &priv->clk_user_mask);
+
+	/* add fd statistics */
+	debugfs_create_u64("rx_fd_frames", 0444, stats,
+			   &priv->stats.rx_fd_count);
+	debugfs_create_u64("tx_fd_frames", 0444, stats,
+			   &priv->stats.tx_fd_count);
+	debugfs_create_u64("rx_brs_frames", 0444, stats,
+			   &priv->stats.rx_brs_count);
+	debugfs_create_u64("tx_brs_frames", 0444, stats,
+			   &priv->stats.tx_brs_count);
+
+	/* export the status structure */
+	debugfs_create_x32("intf", 0444, status, &priv->status.intf);
+	debugfs_create_x32("rx_if", 0444, status, &priv->status.rxif);
+	debugfs_create_x32("tx_if", 0444, status, &priv->status.txif);
+	debugfs_create_x32("rx_ovif", 0444, status, &priv->status.rxovif);
+	debugfs_create_x32("tx_atif", 0444, status, &priv->status.txatif);
+	debugfs_create_x32("tx_req", 0444, status, &priv->status.txreq);
+	debugfs_create_x32("trec", 0444, status, &priv->status.trec);
+	debugfs_create_x32("bdiag0", 0444, status, &priv->status.bdiag0);
+	debugfs_create_x32("bdiag1", 0444, status, &priv->status.bdiag1);
+
+	/* some configuration registers */
+	debugfs_create_x32("con", 0444, regs, &priv->regs.con);
+	debugfs_create_x32("ecccon", 0444, regs, &priv->regs.ecccon);
+	debugfs_create_x32("osc", 0444, regs, &priv->regs.osc);
+	debugfs_create_x32("iocon", 0444, regs, &priv->regs.iocon);
+	debugfs_create_x32("tdc", 0774, regs, &priv->regs.tdc);
+	debugfs_create_x32("tscon", 0444, regs, &priv->regs.tscon);
+	debugfs_create_x32("nbtcfg", 0444, regs, &priv->regs.nbtcfg);
+	debugfs_create_x32("dbtcfg", 0444, regs, &priv->regs.dbtcfg);
+
+	/* information on fifos */
+	debugfs_create_u32("fifo_start", 0444, rx,
+			   &priv->fifos.rx_fifo_start);
+	debugfs_create_u32("fifo_count", 0444, rx,
+			   &priv->fifos.rx_fifos);
+	debugfs_create_x32("fifo_mask", 0444, rx,
+			   &priv->fifos.rx_fifo_mask);
+	debugfs_create_u64("rx_overflow", 0444, rx,
+			   &priv->stats.rx_overflow);
+	debugfs_create_u64("rx_mab", 0444, stats,
+			   &priv->stats.rx_mab);
+
+	debugfs_create_u32("fifo_start", 0444, tx,
+			   &priv->fifos.tx_fifo_start);
+	debugfs_create_u32("fifo_count", 0444, tx,
+			   &priv->fifos.tx_fifos);
+	debugfs_create_x32("fifo_mask", 0444, tx,
+			   &priv->fifos.tx_fifo_mask);
+	debugfs_create_x32("fifo_pending", 0444, tx,
+			   &priv->fifos.tx_pending_mask);
+	debugfs_create_x32("fifo_submitted", 0444, tx,
+			   &priv->fifos.tx_submitted_mask);
+	debugfs_create_x32("fifo_processed", 0444, tx,
+			   &priv->fifos.tx_processed_mask);
+	debugfs_create_u32("queue_status", 0444, tx,
+			   &priv->tx_queue_status);
+	debugfs_create_u64("tx_mab", 0444, stats,
+			   &priv->stats.tx_mab);
+
+	debugfs_create_u32("tef_count", 0444, tx,
+			   &priv->fifos.tef_fifos);
+
+	debugfs_create_u32("fifo_max_payload_size", 0444, root,
+			   &priv->fifos.payload_size);
+
+	/* interrupt statistics */
+	debugfs_create_u64("int", 0444, stats,
+			   &priv->stats.irq_calls);
+	debugfs_create_u64("int_loops", 0444, stats,
+			   &priv->stats.irq_loops);
+	debugfs_create_u64("int_ivm", 0444, stats,
+			   &priv->stats.int_ivm_count);
+	debugfs_create_u64("int_wake", 0444, stats,
+			   &priv->stats.int_wake_count);
+	debugfs_create_u64("int_cerr", 0444, stats,
+			   &priv->stats.int_cerr_count);
+	debugfs_create_u64("int_serr", 0444, stats,
+			   &priv->stats.int_serr_count);
+	debugfs_create_u64("int_rxov", 0444, stats,
+			   &priv->stats.int_rxov_count);
+	debugfs_create_u64("int_txat", 0444, stats,
+			   &priv->stats.int_txat_count);
+	debugfs_create_u64("int_spicrc", 0444, stats,
+			   &priv->stats.int_spicrc_count);
+	debugfs_create_u64("int_ecc", 0444, stats,
+			   &priv->stats.int_ecc_count);
+	debugfs_create_u64("int_tef", 0444, stats,
+			   &priv->stats.int_tef_count);
+	debugfs_create_u64("int_mod", 0444, stats,
+			   &priv->stats.int_mod_count);
+	debugfs_create_u64("int_tbc", 0444, stats,
+			   &priv->stats.int_tbc_count);
+	debugfs_create_u64("int_rx", 0444, stats,
+			   &priv->stats.int_rx_count);
+	debugfs_create_u64("int_tx", 0444, stats,
+			   &priv->stats.int_tx_count);
+
+	/* dlc statistics */
+	for (i = 0; i < 16; i++) {
+		snprintf(name, sizeof(name), "%02i", i);
+		debugfs_create_u64(name, 0444, rxdlc,
+				   &priv->stats.rx_dlc_usage[i]);
+		debugfs_create_u64(name, 0444, txdlc,
+				   &priv->stats.tx_dlc_usage[i]);
+	}
+
+	/* statistics on fifo buffer usage and address */
+	for (i = 1; i < 32; i++) {
+		snprintf(name, sizeof(name), "%02i", i);
+		debugfs_create_u64(name, 0444, fifousage,
+				   &priv->stats.fifo_usage[i]);
+		debugfs_create_u32(name, 0444, fifoaddr,
+				   &priv->fifos.fifo_address[i]);
+	}
+
+	/* dump the controller registers themselves */
+	debugfs_create_devm_seqfile(&priv->spi->dev, "reg_dump",
+				    root, mcp25xxfd_dump_regs);
+}
+
+static void mcp25xxfd_debugfs_remove(struct mcp25xxfd_priv *priv)
+{
+	debugfs_remove_recursive(priv->debugfs_dir);
+}
+
+#else
+static void mcp25xxfd_debugfs_add(struct mcp25xxfd_priv *priv)
+{
+	return 0;
+}
+
+static void mcp25xxfd_debugfs_remove(struct mcp25xxfd_priv *priv)
+{
+}
+#endif
+
+#ifdef CONFIG_OF_DYNAMIC
+int mcp25xxfd_of_parse(struct mcp25xxfd_priv *priv)
+{
+	struct spi_device *spi = priv->spi;
+	const struct device_node *np = spi->dev.of_node;
+	u32 val;
+	int ret;
+
+	priv->config.clock_div2 =
+		of_property_read_bool(np, "microchip,clock-div2");
+
+	ret = of_property_read_u32_index(np, "microchip,clock-out-div",
+					 0, &val);
+	if (!ret) {
+		switch (val) {
+		case 0:
+		case 1:
+		case 2:
+		case 4:
+		case 10:
+			priv->config.clock_odiv = val;
+			break;
+		default:
+			dev_err(&spi->dev,
+				"Invalid value in device tree for microchip,clock_out_div: %u - valid values: 0, 1, 2, 4, 10\n",
+				val);
+			return -EINVAL;
+		}
+	}
+
+	priv->config.gpio_opendrain =
+		of_property_read_bool(np, "gpio-open-drain");
+
+	return 0;
+}
+#else
+int mcp25xxfd_of_parse(struct mcp25xxfd_priv *priv)
+{
+	return 0;
+}
+#endif
+
+static int mcp25xxfd_can_probe(struct spi_device *spi)
+{
+	const struct of_device_id *of_id =
+		of_match_device(mcp25xxfd_of_match, &spi->dev);
+	struct net_device *net;
+	struct mcp25xxfd_priv *priv;
+	struct clk *clk;
+	int ret, freq;
+
+	/* as irq_create_fwspec_mapping() can return 0, check for it */
+	if (spi->irq <= 0) {
+		dev_err(&spi->dev, "no valid irq line defined: irq = %i\n",
+			spi->irq);
+		return -EINVAL;
+	}
+
+	clk = devm_clk_get(&spi->dev, NULL);
+	if (IS_ERR(clk)) {
+		dev_err(&spi->dev,
+			"Can't get Clock source\n");
+		return PTR_ERR(clk);
+	}
+	freq = clk_get_rate(clk);
+	if (freq < MCP25XXFD_MIN_CLOCK_FREQUENCY ||
+	    freq > MCP25XXFD_MAX_CLOCK_FREQUENCY) {
+		dev_err(&spi->dev,
+			"Clock frequency %i is not in range [%i:%i]\n",
+			freq,
+			MCP25XXFD_MIN_CLOCK_FREQUENCY,
+			MCP25XXFD_MAX_CLOCK_FREQUENCY);
+		return -ERANGE;
+	}
+
+	/* Allocate can/net device */
+	net = alloc_candev(sizeof(*priv), TX_ECHO_SKB_MAX);
+	if (!net)
+		return -ENOMEM;
+
+	net->netdev_ops = &mcp25xxfd_netdev_ops;
+	net->flags |= IFF_ECHO;
+
+	priv = netdev_priv(net);
+	priv->can.bittiming_const = &mcp25xxfd_nominal_bittiming_const;
+	priv->can.do_set_bittiming = &mcp25xxfd_do_set_nominal_bittiming;
+	priv->can.data_bittiming_const = &mcp25xxfd_data_bittiming_const;
+	priv->can.do_set_data_bittiming = &mcp25xxfd_do_set_data_bittiming;
+	priv->can.do_set_mode = mcp25xxfd_do_set_mode;
+	priv->can.do_get_berr_counter = mcp25xxfd_get_berr_counter;
+
+	priv->can.ctrlmode_supported =
+		CAN_CTRLMODE_FD |
+		CAN_CTRLMODE_LOOPBACK |
+		CAN_CTRLMODE_LISTENONLY |
+		CAN_CTRLMODE_BERR_REPORTING |
+		CAN_CTRLMODE_FD_NON_ISO |
+		CAN_CTRLMODE_ONE_SHOT;
+
+	if (of_id)
+		priv->model = (enum mcp25xxfd_model)of_id->data;
+	else
+		priv->model = spi_get_device_id(spi)->driver_data;
+
+	spi_set_drvdata(spi, priv);
+	priv->spi = spi;
+	priv->net = net;
+	priv->clk = clk;
+
+	priv->clk_user_mask = MCP25XXFD_CLK_USER_CAN;
+
+	mutex_init(&priv->clk_user_lock);
+	mutex_init(&priv->spi_rxtx_lock);
+
+	/* enable the clock and mark as enabled */
+	priv->clk_user_mask = MCP25XXFD_CLK_USER_CAN;
+	ret = clk_prepare_enable(clk);
+	if (ret)
+		goto out_free;
+
+	/* Setup GPIO controller */
+	ret = mcp25xxfd_gpio_setup(spi);
+	if (ret)
+		goto out_clk;
+
+	/* all by default as push/pull */
+	priv->config.gpio_opendrain = false;
+
+	/* do not use the SCK clock divider of 2 */
+	priv->config.clock_div2 = false;
+
+	/* clock output is divided by 10 */
+	priv->config.clock_odiv = 10;
+
+	/* as a first guess we assume we are in CAN_CON_MODE_SLEEP
+	 * this is how we leave the controller when removing ourselves
+	 */
+	priv->active_can_mode = CAN_CON_MODE_SLEEP;
+
+	/* if we have a clock that is smaller then 4MHz, then enable the pll */
+	priv->config.clock_pll =
+		(freq <= MCP25XXFD_AUTO_PLL_MAX_CLOCK_FREQUENCY);
+
+	/* check in device tree for overrrides */
+	ret = mcp25xxfd_of_parse(priv);
+	if (ret)
+		return ret;
+
+	/* decide on real can clock rate */
+	priv->can.clock.freq = freq;
+	if (priv->config.clock_pll) {
+		priv->can.clock.freq *= MCP25XXFD_PLL_MULTIPLIER;
+		if (priv->can.clock.freq > MCP25XXFD_MAX_CLOCK_FREQUENCY) {
+			dev_err(&spi->dev,
+				"PLL clock frequency %i would exceed limit\n",
+				priv->can.clock.freq
+				);
+			return -EINVAL;
+		}
+	}
+	if (priv->config.clock_div2)
+		priv->can.clock.freq /= MCP25XXFD_SCLK_DIVIDER;
+
+	/* calclculate the clock frequencies to use */
+	priv->spi_setup_speed_hz = freq / 2;
+	priv->spi_speed_hz = priv->can.clock.freq / 2;
+	if (priv->config.clock_div2) {
+		priv->spi_setup_speed_hz /= MCP25XXFD_SCLK_DIVIDER;
+		priv->spi_speed_hz /= MCP25XXFD_SCLK_DIVIDER;
+	}
+
+	if (spi->max_speed_hz) {
+		priv->spi_setup_speed_hz = min_t(int,
+						 priv->spi_setup_speed_hz,
+						 spi->max_speed_hz);
+		priv->spi_speed_hz = min_t(int,
+					   priv->spi_speed_hz,
+					   spi->max_speed_hz);
+	}
+	/* Configure the SPI bus */
+	spi->bits_per_word = 8;
+	ret = spi_setup(spi);
+	if (ret)
+		goto out_clk;
+
+	ret = mcp25xxfd_power_enable(priv->power, 1);
+	if (ret)
+		goto out_clk;
+
+	SET_NETDEV_DEV(net, &spi->dev);
+
+	ret = mcp25xxfd_hw_probe(spi);
+	/* on error retry a second time */
+	if (ret == -ENODEV) {
+		ret = mcp25xxfd_hw_probe(spi);
+		if (!ret)
+			dev_info(&spi->dev,
+				 "found device only during retry\n");
+	}
+	if (ret) {
+		if (ret == -ENODEV)
+			dev_err(&spi->dev,
+				"Cannot initialize MCP%x. Wrong wiring?\n",
+				priv->model);
+	}
+
+	/* setting up GPIO+INT as PUSHPULL , TXCAN PUSH/PULL, no Standby */
+	priv->regs.iocon = 0;
+
+	/* SOF/CLOCKOUT pin 3 */
+	if (priv->config.clock_odiv < 1)
+		priv->regs.iocon |= MCP25XXFD_IOCON_SOF;
+
+	/* INT/GPIO (probably also clockout) as open drain */
+	if (priv->config.gpio_opendrain)
+		priv->regs.iocon |= MCP25XXFD_IOCON_INTOD;
+
+	ret = mcp25xxfd_cmd_write(spi, MCP25XXFD_IOCON, priv->regs.iocon,
+				  priv->spi_setup_speed_hz);
+	if (ret)
+		return ret;
+
+	/* and put controller to sleep */
+	mcp25xxfd_hw_sleep(spi);
+
+	ret = register_candev(net);
+	if (ret)
+		goto error_probe;
+
+	/* register debugfs */
+	mcp25xxfd_debugfs_add(priv);
+
+	devm_can_led_init(net);
+
+	netdev_info(net, "MCP%x successfully initialized.\n", priv->model);
+	return 0;
+
+error_probe:
+	mcp25xxfd_power_enable(priv->power, 0);
+
+out_clk:
+	mcp25xxfd_stop_clock(spi, MCP25XXFD_CLK_USER_CAN);
+
+out_free:
+	free_candev(net);
+	dev_err(&spi->dev, "Probe failed, err=%d\n", -ret);
+	return ret;
+}
+
+static int mcp25xxfd_can_remove(struct spi_device *spi)
+{
+	struct mcp25xxfd_priv *priv = spi_get_drvdata(spi);
+	struct net_device *net = priv->net;
+
+	mcp25xxfd_debugfs_remove(priv);
+
+	unregister_candev(net);
+
+	mcp25xxfd_power_enable(priv->power, 0);
+
+	if (!IS_ERR(priv->clk))
+		clk_disable_unprepare(priv->clk);
+
+	free_candev(net);
+
+	return 0;
+}
+
+static int __maybe_unused mcp25xxfd_can_suspend(struct device *dev)
+{
+	struct spi_device *spi = NULL;
+	struct mcp25xxfd_priv *priv = NULL;
+	struct net_device *net = NULL;
+
+	spi = to_spi_device(dev);
+	if (!spi)
+		return -EINVAL;
+
+	priv = spi_get_drvdata(spi);
+	net = priv->net;
+
+	priv->force_quit = 1;
+	disable_irq(spi->irq);
+
+	if (netif_running(net)) {
+		netif_device_detach(net);
+
+		mcp25xxfd_hw_sleep(spi);
+		mcp25xxfd_power_enable(priv->transceiver, 0);
+		priv->after_suspend = AFTER_SUSPEND_UP;
+	} else {
+		priv->after_suspend = AFTER_SUSPEND_DOWN;
+	}
+
+	if (!IS_ERR_OR_NULL(priv->power)) {
+		regulator_disable(priv->power);
+		priv->after_suspend |= AFTER_SUSPEND_POWER;
+	}
+
+	return 0;
+}
+
+static int __maybe_unused mcp25xxfd_can_resume(struct device *dev)
+{
+	struct spi_device *spi = NULL;
+	struct mcp25xxfd_priv *priv = NULL;
+
+	spi = to_spi_device(dev);
+	if (!spi)
+		return -EINVAL;
+
+	priv = spi_get_drvdata(spi);
+
+	if (priv->after_suspend & AFTER_SUSPEND_POWER)
+		mcp25xxfd_power_enable(priv->power, 1);
+
+	if (priv->after_suspend & AFTER_SUSPEND_UP)
+		mcp25xxfd_power_enable(priv->transceiver, 1);
+	else
+		priv->after_suspend = 0;
+
+	priv->force_quit = 0;
+
+	enable_irq(spi->irq);
+
+	return 0;
+}
+
+static SIMPLE_DEV_PM_OPS(mcp25xxfd_can_pm_ops, mcp25xxfd_can_suspend,
+	mcp25xxfd_can_resume);
+
+static struct spi_driver mcp25xxfd_can_driver = {
+	.driver = {
+		.name = DEVICE_NAME,
+		.of_match_table = mcp25xxfd_of_match,
+		.pm = &mcp25xxfd_can_pm_ops,
+	},
+	.probe = mcp25xxfd_can_probe,
+	.remove = mcp25xxfd_can_remove,
+};
+
+static int __init mcp25xxfd_can_driver_init(void)
+{
+	int ret;
+
+	ret = spi_register_driver(&mcp25xxfd_can_driver);
+	if (ret)
+		return ret;
+
+	return 0;
+}
+module_init(mcp25xxfd_can_driver_init);
+
+static void __exit mcp25xxfd_can_driver_exit(void)
+{
+	spi_unregister_driver(&mcp25xxfd_can_driver);
+}
+module_exit(mcp25xxfd_can_driver_exit);
+
+MODULE_DESCRIPTION("Microchip 25XXFD CAN driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c b/drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c
index 740ddad..ea3bfee 100644
--- a/drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c
+++ b/drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c
@@ -1401,11 +1401,30 @@
 	return skb;
 }
 
+static void rmnet_map_send_agg_skb(struct rmnet_port *port, unsigned long flags)
+{
+	struct sk_buff *agg_skb;
+
+	if (!port->agg_skb) {
+		spin_unlock_irqrestore(&port->agg_lock, flags);
+		return;
+	}
+
+	agg_skb = port->agg_skb;
+	/* Reset the aggregation state */
+	port->agg_skb = NULL;
+	port->agg_count = 0;
+	memset(&port->agg_time, 0, sizeof(struct timespec));
+	port->agg_state = 0;
+	spin_unlock_irqrestore(&port->agg_lock, flags);
+	hrtimer_cancel(&port->hrtimer);
+	dev_queue_xmit(agg_skb);
+}
+
 void rmnet_map_tx_aggregate(struct sk_buff *skb, struct rmnet_port *port)
 {
 	struct timespec diff, last;
-	int size, agg_count = 0;
-	struct sk_buff *agg_skb;
+	int size;
 	unsigned long flags;
 
 new_packet:
@@ -1413,6 +1432,16 @@
 	memcpy(&last, &port->agg_last, sizeof(struct timespec));
 	getnstimeofday(&port->agg_last);
 
+	if ((port->data_format & RMNET_EGRESS_FORMAT_PRIORITY) &&
+	    skb->priority) {
+		/* Send out any aggregated SKBs we have */
+		rmnet_map_send_agg_skb(port, flags);
+		/* Send out the priority SKB. Not holding agg_lock anymore */
+		skb->protocol = htons(ETH_P_MAP);
+		dev_queue_xmit(skb);
+		return;
+	}
+
 	if (!port->agg_skb) {
 		/* Check to see if we should agg first. If the traffic is very
 		 * sparse, don't aggregate. We will need to tune this later
@@ -1452,15 +1481,7 @@
 	if (skb->len > size ||
 	    port->agg_count >= port->egress_agg_params.agg_count ||
 	    diff.tv_sec > 0 || diff.tv_nsec > rmnet_agg_time_limit) {
-		agg_skb = port->agg_skb;
-		agg_count = port->agg_count;
-		port->agg_skb = 0;
-		port->agg_count = 0;
-		memset(&port->agg_time, 0, sizeof(struct timespec));
-		port->agg_state = 0;
-		spin_unlock_irqrestore(&port->agg_lock, flags);
-		hrtimer_cancel(&port->hrtimer);
-		dev_queue_xmit(agg_skb);
+		rmnet_map_send_agg_skb(port, flags);
 		goto new_packet;
 	}
 
diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
index 84b354f..60db6cb 100644
--- a/drivers/net/usb/usbnet.c
+++ b/drivers/net/usb/usbnet.c
@@ -1584,6 +1584,13 @@
 	}
 }
 
+static void usbnet_bh_tasklet(unsigned long data)
+{
+	struct timer_list *t = (struct timer_list *)data;
+
+	usbnet_bh(t);
+}
+
 
 /*-------------------------------------------------------------------------
  *
@@ -1711,7 +1718,7 @@
 	skb_queue_head_init (&dev->txq);
 	skb_queue_head_init (&dev->done);
 	skb_queue_head_init(&dev->rxq_pause);
-	dev->bh.func = (void (*)(unsigned long))usbnet_bh;
+	dev->bh.func = usbnet_bh_tasklet;
 	dev->bh.data = (unsigned long)&dev->delay;
 	INIT_WORK (&dev->kevent, usbnet_deferred_kevent);
 	init_usb_anchor(&dev->deferred);
diff --git a/drivers/net/wireless/ath/wil6210/wil6210.h b/drivers/net/wireless/ath/wil6210/wil6210.h
index aa06969..f70fbc8 100644
--- a/drivers/net/wireless/ath/wil6210/wil6210.h
+++ b/drivers/net/wireless/ath/wil6210/wil6210.h
@@ -1,7 +1,7 @@
 /* SPDX-License-Identifier: ISC */
 /*
  * Copyright (c) 2012-2017 Qualcomm Atheros, Inc.
- * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2018-2020, The Linux Foundation. All rights reserved.
  */
 
 #ifndef __WIL6210_H__
@@ -1415,6 +1415,11 @@
 #else
 static inline int wil6210_debugfs_init(struct wil6210_priv *wil) { return 0; }
 static inline void wil6210_debugfs_remove(struct wil6210_priv *wil) {}
+static inline int wil_led_blink_set(struct wil6210_priv *wil,
+				    const char *buf)
+{
+	return 0;
+}
 #endif
 
 int wil6210_sysfs_init(struct wil6210_priv *wil);
diff --git a/drivers/net/wireless/cnss2/bus.c b/drivers/net/wireless/cnss2/bus.c
index f97c3f0..94e0a4d 100644
--- a/drivers/net/wireless/cnss2/bus.c
+++ b/drivers/net/wireless/cnss2/bus.c
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: GPL-2.0-only
-/* Copyright (c) 2018-2019, The Linux Foundation. All rights reserved. */
+/* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved. */
 
 #include "bus.h"
 #include "debug.h"
@@ -418,6 +418,21 @@
 	}
 }
 
+int cnss_bus_check_link_status(struct cnss_plat_data *plat_priv)
+{
+	if (!plat_priv)
+		return -ENODEV;
+
+	switch (plat_priv->bus_type) {
+	case CNSS_BUS_PCI:
+		return cnss_pci_check_link_status(plat_priv->bus_priv);
+	default:
+		cnss_pr_dbg("Unsupported bus type: %d\n",
+			    plat_priv->bus_type);
+		return 0;
+	}
+}
+
 int cnss_bus_debug_reg_read(struct cnss_plat_data *plat_priv, u32 offset,
 			    u32 *val)
 {
@@ -451,3 +466,34 @@
 		return 0;
 	}
 }
+
+int cnss_bus_get_iova(struct cnss_plat_data *plat_priv, u64 *addr, u64 *size)
+{
+	if (!plat_priv)
+		return -ENODEV;
+
+	switch (plat_priv->bus_type) {
+	case CNSS_BUS_PCI:
+		return cnss_pci_get_iova(plat_priv->bus_priv, addr, size);
+	default:
+		cnss_pr_err("Unsupported bus type: %d\n",
+			    plat_priv->bus_type);
+		return -EINVAL;
+	}
+}
+
+int cnss_bus_get_iova_ipa(struct cnss_plat_data *plat_priv, u64 *addr,
+			  u64 *size)
+{
+	if (!plat_priv)
+		return -ENODEV;
+
+	switch (plat_priv->bus_type) {
+	case CNSS_BUS_PCI:
+		return cnss_pci_get_iova_ipa(plat_priv->bus_priv, addr, size);
+	default:
+		cnss_pr_err("Unsupported bus type: %d\n",
+			    plat_priv->bus_type);
+		return -EINVAL;
+	}
+}
diff --git a/drivers/net/wireless/cnss2/bus.h b/drivers/net/wireless/cnss2/bus.h
index 7c719f5..1e7cc0f 100644
--- a/drivers/net/wireless/cnss2/bus.h
+++ b/drivers/net/wireless/cnss2/bus.h
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
-/* Copyright (c) 2018-2019, The Linux Foundation. All rights reserved. */
+/* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved. */
 
 #ifndef _CNSS_BUS_H
 #define _CNSS_BUS_H
@@ -48,9 +48,12 @@
 int cnss_bus_update_status(struct cnss_plat_data *plat_priv,
 			   enum cnss_driver_status status);
 int cnss_bus_is_device_down(struct cnss_plat_data *plat_priv);
+int cnss_bus_check_link_status(struct cnss_plat_data *plat_priv);
 int cnss_bus_debug_reg_read(struct cnss_plat_data *plat_priv, u32 offset,
 			    u32 *val);
 int cnss_bus_debug_reg_write(struct cnss_plat_data *plat_priv, u32 offset,
 			     u32 val);
-
+int cnss_bus_get_iova(struct cnss_plat_data *plat_priv, u64 *addr, u64 *size);
+int cnss_bus_get_iova_ipa(struct cnss_plat_data *plat_priv, u64 *addr,
+			  u64 *size);
 #endif /* _CNSS_BUS_H */
diff --git a/drivers/net/wireless/cnss2/debug.c b/drivers/net/wireless/cnss2/debug.c
index 4d577aa..21ceda6 100644
--- a/drivers/net/wireless/cnss2/debug.c
+++ b/drivers/net/wireless/cnss2/debug.c
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: GPL-2.0-only
-/* Copyright (c) 2016-2019, The Linux Foundation. All rights reserved. */
+/* Copyright (c) 2016-2020, The Linux Foundation. All rights reserved. */
 
 #include <linux/err.h>
 #include <linux/seq_file.h>
@@ -10,10 +10,28 @@
 #include "pci.h"
 
 #define MMIO_REG_ACCESS_MEM_TYPE		0xFF
+#define HEX_DUMP_ROW_SIZE			16
 
 void *cnss_ipc_log_context;
 void *cnss_ipc_log_long_context;
 
+static void cnss_print_hex_dump(const void *buf, int len)
+{
+	const u8 *ptr = buf;
+	int i, linelen, remaining = len, rowsize = HEX_DUMP_ROW_SIZE;
+	unsigned char linebuf[HEX_DUMP_ROW_SIZE * 3 + 1];
+
+	for (i = 0; i < len; i += rowsize) {
+		linelen = min(remaining, rowsize);
+		remaining -= rowsize;
+
+		hex_dump_to_buffer(ptr + i, linelen, rowsize, 1,
+				   linebuf, sizeof(linebuf), false);
+
+		cnss_pr_dbg("%.8x: %s\n", i, linebuf);
+	}
+}
+
 static int cnss_pin_connect_show(struct seq_file *s, void *data)
 {
 	struct cnss_plat_data *cnss_priv = s->private;
@@ -750,6 +768,95 @@
 	.llseek = seq_lseek,
 };
 
+static int cnss_wfc_call_status_debug_show(struct seq_file *s, void *data)
+{
+	seq_puts(s, "\nUsage: echo <data_len> <hex data> > <debugfs_path>/cnss/wfc_call_status\n");
+	seq_puts(s, "e.g. Send 4 bytes of hex data for WFC call status using QMI message:\n");
+	seq_puts(s, "echo '0x4 0xA 0xB 0xC 0xD' > /d/cnss/wfc_call_status\n");
+
+	return 0;
+}
+
+static ssize_t cnss_wfc_call_status_debug_write(struct file *fp,
+						const char __user *user_buf,
+						size_t count, loff_t *off)
+{
+	struct cnss_plat_data *plat_priv =
+		((struct seq_file *)fp->private_data)->private;
+	char buf[(QMI_WLFW_MAX_WFC_CALL_STATUS_DATA_SIZE_V01 + 1) * 5];
+	char *sptr, *token;
+	unsigned int len = 0;
+	const char *delim = " ";
+	u32 data_len;
+	u8 data[QMI_WLFW_MAX_WFC_CALL_STATUS_DATA_SIZE_V01] = {0}, data_byte;
+	int ret = 0, i;
+
+	if (!test_bit(CNSS_FW_READY, &plat_priv->driver_state)) {
+		cnss_pr_err("Firmware is not ready yet\n");
+		return -EINVAL;
+	}
+
+	len = min(count, sizeof(buf) - 1);
+	if (copy_from_user(buf, user_buf, len))
+		return -EFAULT;
+
+	buf[len] = '\0';
+	sptr = buf;
+
+	token = strsep(&sptr, delim);
+	if (!token || !sptr)
+		return -EINVAL;
+
+	if (kstrtou32(token, 0, &data_len))
+		return -EINVAL;
+
+	cnss_pr_dbg("Parsing 0x%x bytes data for WFC call status\n", data_len);
+
+	if (data_len > QMI_WLFW_MAX_WFC_CALL_STATUS_DATA_SIZE_V01 ||
+	    data_len == 0) {
+		cnss_pr_err("Invalid data length 0x%x\n", data_len);
+		return -EINVAL;
+	}
+
+	for (i = 0; i < data_len; i++) {
+		token = strsep(&sptr, delim);
+		if (!token || (!sptr && i < data_len - 1)) {
+			cnss_pr_err("Input data is less than length\n");
+			return -EINVAL;
+		}
+
+		if (kstrtou8(token, 0, &data_byte)) {
+			cnss_pr_err("Data format is incorrect\n");
+			return -EINVAL;
+		}
+
+		data[i] = data_byte;
+	}
+
+	cnss_print_hex_dump(data, data_len);
+
+	ret = cnss_wlfw_wfc_call_status_send_sync(plat_priv, data_len, data);
+	if (ret)
+		return ret;
+
+	return count;
+}
+
+static int cnss_wfc_call_status_debug_open(struct inode *inode,
+					   struct file *file)
+{
+	return single_open(file, cnss_wfc_call_status_debug_show,
+			   inode->i_private);
+}
+
+static const struct file_operations cnss_wfc_call_status_debug_fops = {
+	.read		= seq_read,
+	.write		= cnss_wfc_call_status_debug_write,
+	.open		= cnss_wfc_call_status_debug_open,
+	.owner		= THIS_MODULE,
+	.llseek		= seq_lseek,
+};
+
 #ifdef CONFIG_CNSS2_DEBUG
 static int cnss_create_debug_only_node(struct cnss_plat_data *plat_priv)
 {
@@ -767,6 +874,8 @@
 			    &cnss_control_params_debug_fops);
 	debugfs_create_file("dynamic_feature", 0600, root_dentry, plat_priv,
 			    &cnss_dynamic_feature_fops);
+	debugfs_create_file("wfc_call_status", 0600, root_dentry, plat_priv,
+			    &cnss_wfc_call_status_debug_fops);
 
 	return 0;
 }
diff --git a/drivers/net/wireless/cnss2/main.c b/drivers/net/wireless/cnss2/main.c
index e0e1afe..9a348db 100644
--- a/drivers/net/wireless/cnss2/main.c
+++ b/drivers/net/wireless/cnss2/main.c
@@ -32,9 +32,8 @@
 #define FW_ASSERT_TIMEOUT		5000
 #define CNSS_EVENT_PENDING		2989
 #define COLD_BOOT_CAL_SHUTDOWN_DELAY_MS	50
-#define WLAN_WD_TIMEOUT_MS		60000
 
-#define CNSS_QUIRKS_DEFAULT		BIT(DISABLE_IO_COHERENCY)
+#define CNSS_QUIRKS_DEFAULT		0
 #ifdef CONFIG_CNSS_EMULATION
 #define CNSS_MHI_TIMEOUT_DEFAULT	90000
 #else
@@ -558,8 +557,10 @@
 	if (!(flags & CNSS_EVENT_SYNC))
 		goto out;
 
-	if (flags & CNSS_EVENT_UNINTERRUPTIBLE)
+	if (flags & CNSS_EVENT_UNKILLABLE)
 		wait_for_completion(&event->complete);
+	else if (flags & CNSS_EVENT_UNINTERRUPTIBLE)
+		ret = wait_for_completion_killable(&event->complete);
 	else
 		ret = wait_for_completion_interruptible(&event->complete);
 
@@ -1023,6 +1024,10 @@
 
 	switch (reason) {
 	case CNSS_REASON_LINK_DOWN:
+		if (!cnss_bus_check_link_status(plat_priv)) {
+			cnss_pr_dbg("Skip link down recovery as link is already up\n");
+			return 0;
+		}
 		if (test_bit(LINK_DOWN_SELF_RECOVERY,
 			     &plat_priv->ctrl_params.quirks))
 			goto self_recovery;
@@ -2113,6 +2118,8 @@
 		container_of(nb, struct cnss_plat_data, reboot_nb);
 
 	set_bit(CNSS_IN_REBOOT, &plat_priv->driver_state);
+	del_timer(&plat_priv->fw_boot_timer);
+	complete_all(&plat_priv->power_up_complete);
 	cnss_pr_dbg("Reboot is in progress with action %d\n", action);
 
 	return NOTIFY_DONE;
diff --git a/drivers/net/wireless/cnss2/main.h b/drivers/net/wireless/cnss2/main.h
index ef8939d..ea5385a 100644
--- a/drivers/net/wireless/cnss2/main.h
+++ b/drivers/net/wireless/cnss2/main.h
@@ -21,12 +21,15 @@
 #define QMI_WLFW_MAX_BUILD_ID_LEN	128
 #define CNSS_RDDM_TIMEOUT_MS		20000
 #define RECOVERY_TIMEOUT		60000
+#define WLAN_WD_TIMEOUT_MS		60000
 #define TIME_CLOCK_FREQ_HZ		19200000
 
 #define CNSS_EVENT_SYNC   BIT(0)
 #define CNSS_EVENT_UNINTERRUPTIBLE BIT(1)
+#define CNSS_EVENT_UNKILLABLE BIT(2)
 #define CNSS_EVENT_SYNC_UNINTERRUPTIBLE (CNSS_EVENT_SYNC | \
 				CNSS_EVENT_UNINTERRUPTIBLE)
+#define CNSS_EVENT_SYNC_UNKILLABLE (CNSS_EVENT_SYNC | CNSS_EVENT_UNKILLABLE)
 
 enum cnss_dev_bus_type {
 	CNSS_BUS_NONE = -1,
diff --git a/drivers/net/wireless/cnss2/pci.c b/drivers/net/wireless/cnss2/pci.c
index de95448..4cc9538 100644
--- a/drivers/net/wireless/cnss2/pci.c
+++ b/drivers/net/wireless/cnss2/pci.c
@@ -74,6 +74,9 @@
 
 #define LINK_TRAINING_RETRY_MAX_TIMES		3
 
+#define CNSS_DEBUG_DUMP_SRAM_START		0x1403D58
+#define CNSS_DEBUG_DUMP_SRAM_SIZE		10
+
 static struct cnss_pci_reg ce_src[] = {
 	{ "SRC_RING_BASE_LSB", QCA6390_CE_SRC_RING_BASE_LSB_OFFSET },
 	{ "SRC_RING_BASE_MSB", QCA6390_CE_SRC_RING_BASE_MSB_OFFSET },
@@ -356,7 +359,7 @@
 #define PCIE_REG_SIZE ARRAY_SIZE(pcie_reg_access_seq)
 #define WLAON_REG_SIZE ARRAY_SIZE(wlaon_reg_access_seq)
 
-static int cnss_pci_check_link_status(struct cnss_pci_data *pci_priv)
+int cnss_pci_check_link_status(struct cnss_pci_data *pci_priv)
 {
 	u16 device_id;
 
@@ -493,6 +496,7 @@
 			    u32 *val)
 {
 	int ret = 0;
+	bool do_force_wake_put = true;
 
 	ret = cnss_pci_is_device_down(&pci_priv->pci_dev->dev);
 	if (ret)
@@ -502,7 +506,9 @@
 	if (ret < 0)
 		goto runtime_pm_put;
 
-	cnss_pci_force_wake_get(pci_priv);
+	ret = cnss_pci_force_wake_get(pci_priv);
+	if (ret)
+		do_force_wake_put = false;
 
 	ret = cnss_pci_reg_read(pci_priv, offset, val);
 	if (ret) {
@@ -512,7 +518,8 @@
 	}
 
 force_wake_put:
-	cnss_pci_force_wake_put(pci_priv);
+	if (do_force_wake_put)
+		cnss_pci_force_wake_put(pci_priv);
 runtime_pm_put:
 	cnss_pci_pm_runtime_mark_last_busy(pci_priv);
 	cnss_pci_pm_runtime_put_autosuspend(pci_priv);
@@ -524,6 +531,7 @@
 			     u32 val)
 {
 	int ret = 0;
+	bool do_force_wake_put = true;
 
 	ret = cnss_pci_is_device_down(&pci_priv->pci_dev->dev);
 	if (ret)
@@ -533,7 +541,9 @@
 	if (ret < 0)
 		goto runtime_pm_put;
 
-	cnss_pci_force_wake_get(pci_priv);
+	ret = cnss_pci_force_wake_get(pci_priv);
+	if (ret)
+		do_force_wake_put = false;
 
 	ret = cnss_pci_reg_write(pci_priv, offset, val);
 	if (ret) {
@@ -543,7 +553,8 @@
 	}
 
 force_wake_put:
-	cnss_pci_force_wake_put(pci_priv);
+	if (do_force_wake_put)
+		cnss_pci_force_wake_put(pci_priv);
 runtime_pm_put:
 	cnss_pci_pm_runtime_mark_last_busy(pci_priv);
 	cnss_pci_pm_runtime_put_autosuspend(pci_priv);
@@ -767,6 +778,22 @@
 int cnss_pci_prevent_l1(struct device *dev)
 {
 	struct pci_dev *pci_dev = to_pci_dev(dev);
+	struct cnss_pci_data *pci_priv = cnss_get_pci_priv(pci_dev);
+
+	if (!pci_priv) {
+		cnss_pr_err("pci_priv is NULL\n");
+		return -ENODEV;
+	}
+
+	if (pci_priv->pci_link_state == PCI_LINK_DOWN) {
+		cnss_pr_dbg("PCIe link is suspended\n");
+		return -EIO;
+	}
+
+	if (pci_priv->pci_link_down_ind) {
+		cnss_pr_err("PCIe link is down\n");
+		return -EIO;
+	}
 
 	return msm_pcie_prevent_l1(pci_dev);
 }
@@ -775,6 +802,22 @@
 void cnss_pci_allow_l1(struct device *dev)
 {
 	struct pci_dev *pci_dev = to_pci_dev(dev);
+	struct cnss_pci_data *pci_priv = cnss_get_pci_priv(pci_dev);
+
+	if (!pci_priv) {
+		cnss_pr_err("pci_priv is NULL\n");
+		return;
+	}
+
+	if (pci_priv->pci_link_state == PCI_LINK_DOWN) {
+		cnss_pr_dbg("PCIe link is suspended\n");
+		return;
+	}
+
+	if (pci_priv->pci_link_down_ind) {
+		cnss_pr_err("PCIe link is down\n");
+		return;
+	}
 
 	msm_pcie_allow_l1(pci_dev);
 }
@@ -1200,18 +1243,19 @@
 static int cnss_pci_update_timestamp(struct cnss_pci_data *pci_priv)
 {
 	struct cnss_plat_data *plat_priv = pci_priv->plat_priv;
+	struct device *dev = &pci_priv->pci_dev->dev;
 	unsigned long flags = 0;
 	u64 host_time_us, device_time_us, offset;
 	u32 low, high;
 	int ret;
 
-	ret = cnss_pci_check_link_status(pci_priv);
+	ret = cnss_pci_prevent_l1(dev);
 	if (ret)
-		return ret;
+		goto out;
 
 	ret = cnss_pci_force_wake_get(pci_priv);
 	if (ret)
-		return ret;
+		goto allow_l1;
 
 	spin_lock_irqsave(&time_sync_lock, flags);
 	cnss_pci_clear_time_sync_counter(pci_priv);
@@ -1248,7 +1292,9 @@
 
 force_wake_put:
 	cnss_pci_force_wake_put(pci_priv);
-
+allow_l1:
+	cnss_pci_allow_l1(dev);
+out:
 	return ret;
 }
 
@@ -1281,6 +1327,7 @@
 
 	switch (pci_priv->device_id) {
 	case QCA6390_DEVICE_ID:
+	case QCA6490_DEVICE_ID:
 		break;
 	default:
 		return -EOPNOTSUPP;
@@ -1300,6 +1347,7 @@
 {
 	switch (pci_priv->device_id) {
 	case QCA6390_DEVICE_ID:
+	case QCA6490_DEVICE_ID:
 		break;
 	default:
 		return;
@@ -1363,7 +1411,7 @@
 		}
 		clear_bit(CNSS_DRIVER_RECOVERY, &plat_priv->driver_state);
 		clear_bit(CNSS_DRIVER_IDLE_RESTART, &plat_priv->driver_state);
-		complete(&plat_priv->power_up_complete);
+		complete_all(&plat_priv->power_up_complete);
 	} else {
 		complete(&plat_priv->power_up_complete);
 	}
@@ -1474,7 +1522,8 @@
 	if (cnss_pci_check_link_status(pci_priv))
 		return;
 
-	cnss_pci_force_wake_get(pci_priv);
+	if (cnss_pci_force_wake_get(pci_priv))
+		return;
 
 	cnss_pr_dbg("start to dump %s registers\n", reg_name);
 
@@ -1530,6 +1579,7 @@
 {
 	int i, j = 0, array_size = SHADOW_REG_COUNT + SHADOW_REG_INTER_COUNT;
 	u32 reg_offset;
+	bool do_force_wake_put = true;
 
 	if (in_interrupt() || irqs_disabled())
 		return;
@@ -1546,7 +1596,7 @@
 	}
 
 	if (cnss_pci_force_wake_get(pci_priv))
-		return;
+		do_force_wake_put = false;
 
 	cnss_pr_dbg("Start to dump shadow registers\n");
 
@@ -1567,7 +1617,8 @@
 	}
 
 force_wake_put:
-	cnss_pci_force_wake_put(pci_priv);
+	if (do_force_wake_put)
+		cnss_pci_force_wake_put(pci_priv);
 }
 
 #ifdef CONFIG_CNSS2_DEBUG
@@ -2008,6 +2059,7 @@
 					  msecs_to_jiffies(timeout) << 2);
 	if (!ret) {
 		cnss_pr_err("Timeout waiting for calibration to complete\n");
+		CNSS_ASSERT(0);
 
 		cal_info = kzalloc(sizeof(*cal_info), GFP_KERNEL);
 		if (!cal_info)
@@ -2024,6 +2076,10 @@
 				     CNSS_DRIVER_EVENT_REGISTER_DRIVER,
 				     CNSS_EVENT_SYNC_UNINTERRUPTIBLE,
 				     driver_ops);
+	if (ret == -EINTR) {
+		cnss_pr_dbg("Register driver work is killed\n");
+		del_timer(&plat_priv->fw_boot_timer);
+	}
 
 	return ret;
 }
@@ -2033,25 +2089,40 @@
 {
 	struct cnss_plat_data *plat_priv = cnss_bus_dev_to_plat_priv(NULL);
 	int ret = 0;
+	unsigned int timeout;
 
 	if (!plat_priv) {
 		cnss_pr_err("plat_priv is NULL\n");
 		return;
 	}
 
+	if (plat_priv->device_id == QCA6174_DEVICE_ID ||
+	    !test_bit(CNSS_DRIVER_IDLE_RESTART, &plat_priv->driver_state))
+		goto skip_wait_idle_restart;
+
+	timeout = cnss_get_qmi_timeout(plat_priv);
+	ret = wait_for_completion_timeout(&plat_priv->power_up_complete,
+					  msecs_to_jiffies((timeout << 1) +
+							   WLAN_WD_TIMEOUT_MS));
+	if (!ret) {
+		cnss_pr_err("Timeout waiting for idle restart to complete\n");
+		CNSS_ASSERT(0);
+	}
+
+skip_wait_idle_restart:
 	if (!test_bit(CNSS_DRIVER_RECOVERY, &plat_priv->driver_state) &&
 	    !test_bit(CNSS_DEV_ERR_NOTIFY, &plat_priv->driver_state))
-		goto skip_wait;
+		goto skip_wait_recovery;
 
 	reinit_completion(&plat_priv->recovery_complete);
 	ret = wait_for_completion_timeout(&plat_priv->recovery_complete,
-					  RECOVERY_TIMEOUT);
+					  msecs_to_jiffies(RECOVERY_TIMEOUT));
 	if (!ret) {
 		cnss_pr_err("Timeout waiting for recovery to complete\n");
 		CNSS_ASSERT(0);
 	}
 
-skip_wait:
+skip_wait_recovery:
 	cnss_driver_event_post(plat_priv,
 			       CNSS_DRIVER_EVENT_UNREGISTER_DRIVER,
 			       CNSS_EVENT_SYNC_UNINTERRUPTIBLE, NULL);
@@ -2064,6 +2135,11 @@
 	int ret = 0;
 	struct cnss_plat_data *plat_priv = pci_priv->plat_priv;
 
+	if (test_bit(CNSS_IN_REBOOT, &plat_priv->driver_state)) {
+		cnss_pr_dbg("Reboot or shutdown is in progress, ignore register driver\n");
+		return -EINVAL;
+	}
+
 	set_bit(CNSS_DRIVER_LOADING, &plat_priv->driver_state);
 	pci_priv->driver_ops = data;
 
@@ -2583,9 +2659,6 @@
 
 	dev = &pci_priv->pci_dev->dev;
 
-	if (!pm_runtime_enabled(dev))
-		return 0;
-
 	status = dev->power.runtime_status;
 	if (status == RPM_SUSPENDING || status == RPM_SUSPENDED)
 		cnss_pr_vdbg("Runtime PM resume is requested by %ps\n",
@@ -2604,9 +2677,6 @@
 
 	dev = &pci_priv->pci_dev->dev;
 
-	if (!pm_runtime_enabled(dev))
-		return 0;
-
 	status = dev->power.runtime_status;
 	if (status == RPM_SUSPENDING || status == RPM_SUSPENDED)
 		cnss_pr_vdbg("Runtime PM resume is requested by %ps\n",
@@ -2625,9 +2695,6 @@
 
 	dev = &pci_priv->pci_dev->dev;
 
-	if (!pm_runtime_enabled(dev))
-		return 0;
-
 	status = dev->power.runtime_status;
 	if (status == RPM_SUSPENDING || status == RPM_SUSPENDED)
 		cnss_pr_vdbg("Runtime PM resume is requested by %ps\n",
@@ -2646,9 +2713,6 @@
 
 	dev = &pci_priv->pci_dev->dev;
 
-	if (!pm_runtime_enabled(dev))
-		return 0;
-
 	status = dev->power.runtime_status;
 	if (status == RPM_SUSPENDING || status == RPM_SUSPENDED)
 		cnss_pr_vdbg("Runtime PM resume is requested by %ps\n",
@@ -2662,9 +2726,6 @@
 	if (!pci_priv)
 		return;
 
-	if (!pm_runtime_enabled(&pci_priv->pci_dev->dev))
-		return;
-
 	pm_runtime_get_noresume(&pci_priv->pci_dev->dev);
 }
 
@@ -2677,9 +2738,6 @@
 
 	dev = &pci_priv->pci_dev->dev;
 
-	if (!pm_runtime_enabled(dev))
-		return 0;
-
 	if (atomic_read(&dev->power.usage_count) == 0) {
 		cnss_pr_dbg("Ignore excessive runtime PM put operation\n");
 		return -EINVAL;
@@ -2697,9 +2755,6 @@
 
 	dev = &pci_priv->pci_dev->dev;
 
-	if (!pm_runtime_enabled(dev))
-		return;
-
 	if (atomic_read(&dev->power.usage_count) == 0) {
 		cnss_pr_dbg("Ignore excessive runtime PM put operation\n");
 		return;
@@ -3169,6 +3224,34 @@
 	pci_priv->iommu_domain = NULL;
 }
 
+int cnss_pci_get_iova(struct cnss_pci_data *pci_priv, u64 *addr, u64 *size)
+{
+	if (!pci_priv)
+		return -ENODEV;
+
+	if (!pci_priv->smmu_iova_len)
+		return -EINVAL;
+
+	*addr = pci_priv->smmu_iova_start;
+	*size = pci_priv->smmu_iova_len;
+
+	return 0;
+}
+
+int cnss_pci_get_iova_ipa(struct cnss_pci_data *pci_priv, u64 *addr, u64 *size)
+{
+	if (!pci_priv)
+		return -ENODEV;
+
+	if (!pci_priv->smmu_iova_ipa_len)
+		return -EINVAL;
+
+	*addr = pci_priv->smmu_iova_ipa_start;
+	*size = pci_priv->smmu_iova_ipa_len;
+
+	return 0;
+}
+
 struct iommu_domain *cnss_smmu_get_domain(struct device *dev)
 {
 	struct cnss_pci_data *pci_priv = cnss_get_pci_priv(to_pci_dev(dev));
@@ -3590,6 +3673,19 @@
 	}
 }
 
+static void cnss_pci_dump_sram_mem(struct cnss_pci_data *pci_priv)
+{
+	int i;
+	u32 mem_addr, val;
+
+	for (i = 0; i < CNSS_DEBUG_DUMP_SRAM_SIZE; i++) {
+		mem_addr = CNSS_DEBUG_DUMP_SRAM_START + i * 4;
+		if (cnss_pci_reg_read(pci_priv, mem_addr, &val))
+			return;
+		cnss_pr_dbg("SRAM[0x%x] = 0x%x\n", mem_addr, val);
+	}
+}
+
 static void cnss_pci_dump_registers(struct cnss_pci_data *pci_priv)
 {
 	cnss_pr_dbg("Start to dump debug registers\n");
@@ -3598,6 +3694,7 @@
 		return;
 
 	mhi_debug_reg_dump(pci_priv->mhi_ctrl);
+	cnss_pci_dump_sram_mem(pci_priv);
 	cnss_pci_dump_ce_reg(pci_priv, CNSS_CE_COMMON);
 	cnss_pci_dump_ce_reg(pci_priv, CNSS_CE_09);
 	cnss_pci_dump_ce_reg(pci_priv, CNSS_CE_10);
@@ -4040,6 +4137,11 @@
 	if (!mhi_ctrl->log_buf)
 		cnss_pr_err("Unable to create CNSS MHI IPC log context\n");
 
+	mhi_ctrl->cntrl_log_buf = ipc_log_context_create(CNSS_IPC_LOG_PAGES,
+							 "cnss-mhi-cntrl", 0);
+	if (!mhi_ctrl->cntrl_log_buf)
+		cnss_pr_err("Unable to create CNSS MHICNTRL IPC log context\n");
+
 	ret = of_register_mhi_controller(mhi_ctrl);
 	if (ret) {
 		cnss_pr_err("Failed to register to MHI bus, err = %d\n", ret);
@@ -4057,6 +4159,8 @@
 destroy_ipc:
 	if (mhi_ctrl->log_buf)
 		ipc_log_context_destroy(mhi_ctrl->log_buf);
+	if (mhi_ctrl->cntrl_log_buf)
+		ipc_log_context_destroy(mhi_ctrl->cntrl_log_buf);
 	kfree(mhi_ctrl->irq);
 free_mhi_ctrl:
 	mhi_free_controller(mhi_ctrl);
@@ -4071,6 +4175,8 @@
 	mhi_unregister_mhi_controller(mhi_ctrl);
 	if (mhi_ctrl->log_buf)
 		ipc_log_context_destroy(mhi_ctrl->log_buf);
+	if (mhi_ctrl->cntrl_log_buf)
+		ipc_log_context_destroy(mhi_ctrl->cntrl_log_buf);
 	kfree(mhi_ctrl->irq);
 	mhi_free_controller(mhi_ctrl);
 }
diff --git a/drivers/net/wireless/cnss2/pci.h b/drivers/net/wireless/cnss2/pci.h
index d6b72de..5ffb1ff 100644
--- a/drivers/net/wireless/cnss2/pci.h
+++ b/drivers/net/wireless/cnss2/pci.h
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
-/* Copyright (c) 2016-2019, The Linux Foundation. All rights reserved. */
+/* Copyright (c) 2016-2020, The Linux Foundation. All rights reserved. */
 
 #ifndef _CNSS_PCI_H
 #define _CNSS_PCI_H
@@ -162,6 +162,7 @@
 	return atomic_read(&pci_priv->drv_connected);
 }
 
+int cnss_pci_check_link_status(struct cnss_pci_data *pci_priv);
 int cnss_suspend_pci_link(struct cnss_pci_data *pci_priv);
 int cnss_resume_pci_link(struct cnss_pci_data *pci_priv);
 int cnss_pci_init(struct cnss_plat_data *plat_priv);
@@ -206,5 +207,8 @@
 			    u32 *val);
 int cnss_pci_debug_reg_write(struct cnss_pci_data *pci_priv, u32 offset,
 			     u32 val);
+int cnss_pci_get_iova(struct cnss_pci_data *pci_priv, u64 *addr, u64 *size);
+int cnss_pci_get_iova_ipa(struct cnss_pci_data *pci_priv, u64 *addr,
+			  u64 *size);
 
 #endif /* _CNSS_PCI_H */
diff --git a/drivers/net/wireless/cnss2/qmi.c b/drivers/net/wireless/cnss2/qmi.c
index 22f059c..ea73016 100644
--- a/drivers/net/wireless/cnss2/qmi.c
+++ b/drivers/net/wireless/cnss2/qmi.c
@@ -157,6 +157,8 @@
 	struct wlfw_host_cap_resp_msg_v01 *resp;
 	struct qmi_txn txn;
 	int ret = 0;
+	u64 iova_start = 0, iova_size = 0,
+	    iova_ipa_start = 0, iova_ipa_size = 0;
 
 	cnss_pr_dbg("Sending host capability message, state: 0x%lx\n",
 		    plat_priv->driver_state);
@@ -198,6 +200,16 @@
 	req->cal_done = plat_priv->cal_done;
 	cnss_pr_dbg("Calibration done is %d\n", plat_priv->cal_done);
 
+	if (!cnss_bus_get_iova(plat_priv, &iova_start, &iova_size) &&
+	    !cnss_bus_get_iova_ipa(plat_priv, &iova_ipa_start,
+				   &iova_ipa_size)) {
+		req->ddr_range_valid = 1;
+		req->ddr_range[0].start = iova_start;
+		req->ddr_range[0].size = iova_size + iova_ipa_size;
+		cnss_pr_dbg("Sending iova starting 0x%llx with size 0x%llx\n",
+			    req->ddr_range[0].start, req->ddr_range[0].size);
+	}
+
 	ret = qmi_txn_init(&plat_priv->qmi_wlfw, &txn,
 			   wlfw_host_cap_resp_msg_v01_ei, resp);
 	if (ret < 0) {
@@ -1469,8 +1481,8 @@
 	return ret;
 }
 
-static int cnss_wlfw_wfc_call_status_send_sync(struct cnss_plat_data *plat_priv,
-					       u32 data_len, const void *data)
+int cnss_wlfw_wfc_call_status_send_sync(struct cnss_plat_data *plat_priv,
+					u32 data_len, const void *data)
 {
 	struct wlfw_wfc_call_status_req_msg_v01 *req;
 	struct wlfw_wfc_call_status_resp_msg_v01 *resp;
diff --git a/drivers/net/wireless/cnss2/qmi.h b/drivers/net/wireless/cnss2/qmi.h
index fc2a2c6..90a9dbd 100644
--- a/drivers/net/wireless/cnss2/qmi.h
+++ b/drivers/net/wireless/cnss2/qmi.h
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
-/* Copyright (c) 2015-2019, The Linux Foundation. All rights reserved. */
+/* Copyright (c) 2015-2020, The Linux Foundation. All rights reserved. */
 
 #ifndef _CNSS_QMI_H
 #define _CNSS_QMI_H
@@ -61,6 +61,8 @@
 int cnss_wlfw_dynamic_feature_mask_send_sync(struct cnss_plat_data *plat_priv);
 int cnss_wlfw_get_info_send_sync(struct cnss_plat_data *plat_priv, int type,
 				 void *cmd, int cmd_len);
+int cnss_wlfw_wfc_call_status_send_sync(struct cnss_plat_data *plat_priv,
+					u32 data_len, const void *data);
 int cnss_register_coex_service(struct cnss_plat_data *plat_priv);
 void cnss_unregister_coex_service(struct cnss_plat_data *plat_priv);
 int coex_antenna_switch_to_wlan_send_sync_msg(struct cnss_plat_data *plat_priv);
@@ -176,6 +178,20 @@
 }
 
 static inline
+int cnss_wlfw_get_info_send_sync(struct cnss_plat_data *plat_priv, int type,
+				 void *cmd, int cmd_len)
+{
+	return 0;
+}
+
+static inline
+int cnss_wlfw_wfc_call_status_send_sync(struct cnss_plat_data *plat_priv,
+					u32 data_len, const void *data);
+{
+	return 0;
+}
+
+static inline
 int cnss_register_coex_service(struct cnss_plat_data *plat_priv)
 {
 	return 0;
diff --git a/drivers/net/wireless/cnss_genl/cnss_nl.c b/drivers/net/wireless/cnss_genl/cnss_nl.c
index e2fdff1..3b01f01 100644
--- a/drivers/net/wireless/cnss_genl/cnss_nl.c
+++ b/drivers/net/wireless/cnss_genl/cnss_nl.c
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: GPL-2.0-only
-/* Copyright (c) 2018-2019, The Linux Foundation. All rights reserved. */
+/* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved. */
 
 #include <net/genetlink.h>
 #include <net/cnss_nl.h>
@@ -57,6 +57,8 @@
 				 .len = CLD80211_MAX_NL_DATA },
 	[CLD80211_ATTR_META_DATA] = { .type = NLA_BINARY,
 				 .len = CLD80211_MAX_NL_DATA },
+	[CLD80211_ATTR_CMD] = { .type = NLA_U32 },
+	[CLD80211_ATTR_CMD_TAG_DATA] = { .type = NLA_NESTED },
 };
 
 static int cld80211_pre_doit(const struct genl_ops *ops, struct sk_buff *skb,
diff --git a/drivers/net/wireless/cnss_utils/wlan_firmware_service_v01.c b/drivers/net/wireless/cnss_utils/wlan_firmware_service_v01.c
index 0964ffd..0dae083 100644
--- a/drivers/net/wireless/cnss_utils/wlan_firmware_service_v01.c
+++ b/drivers/net/wireless/cnss_utils/wlan_firmware_service_v01.c
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: GPL-2.0-only
-/* Copyright (c) 2015-2019, The Linux Foundation. All rights reserved. */
+/* Copyright (c) 2015-2020, The Linux Foundation. All rights reserved. */
 
 #include "wlan_firmware_service_v01.h"
 
@@ -431,6 +431,32 @@
 	},
 };
 
+static struct qmi_elem_info wlfw_host_ddr_range_s_v01_ei[] = {
+	{
+		.data_type      = QMI_UNSIGNED_8_BYTE,
+		.elem_len       = 1,
+		.elem_size      = sizeof(u64),
+		.array_type       = NO_ARRAY,
+		.tlv_type       = 0,
+		.offset         = offsetof(struct wlfw_host_ddr_range_s_v01,
+					   start),
+	},
+	{
+		.data_type      = QMI_UNSIGNED_8_BYTE,
+		.elem_len       = 1,
+		.elem_size      = sizeof(u64),
+		.array_type       = NO_ARRAY,
+		.tlv_type       = 0,
+		.offset         = offsetof(struct wlfw_host_ddr_range_s_v01,
+					   size),
+	},
+	{
+		.data_type      = QMI_EOTI,
+		.array_type       = NO_ARRAY,
+		.tlv_type       = QMI_COMMON_TLV_TYPE,
+	},
+};
+
 struct qmi_elem_info wlfw_ind_register_req_msg_v01_ei[] = {
 	{
 		.data_type      = QMI_OPT_FLAG,
@@ -2560,6 +2586,43 @@
 					   cal_duration),
 	},
 	{
+		.data_type      = QMI_OPT_FLAG,
+		.elem_len       = 1,
+		.elem_size      = sizeof(u8),
+		.array_type       = NO_ARRAY,
+		.tlv_type       = 0x1E,
+		.offset         = offsetof(struct wlfw_host_cap_req_msg_v01,
+					   platform_name_valid),
+	},
+	{
+		.data_type      = QMI_STRING,
+		.elem_len       = QMI_WLFW_MAX_PLATFORM_NAME_LEN_V01 + 1,
+		.elem_size      = sizeof(char),
+		.array_type       = NO_ARRAY,
+		.tlv_type       = 0x1E,
+		.offset         = offsetof(struct wlfw_host_cap_req_msg_v01,
+					   platform_name),
+	},
+	{
+		.data_type      = QMI_OPT_FLAG,
+		.elem_len       = 1,
+		.elem_size      = sizeof(u8),
+		.array_type       = NO_ARRAY,
+		.tlv_type       = 0x1F,
+		.offset         = offsetof(struct wlfw_host_cap_req_msg_v01,
+					   ddr_range_valid),
+	},
+	{
+		.data_type      = QMI_STRUCT,
+		.elem_len       = QMI_WLFW_MAX_HOST_DDR_RANGE_SIZE_V01,
+		.elem_size      = sizeof(struct wlfw_host_ddr_range_s_v01),
+		.array_type       = STATIC_ARRAY,
+		.tlv_type       = 0x1F,
+		.offset         = offsetof(struct wlfw_host_cap_req_msg_v01,
+					   ddr_range),
+		.ei_array      = wlfw_host_ddr_range_s_v01_ei,
+	},
+	{
 		.data_type      = QMI_EOTI,
 		.array_type       = NO_ARRAY,
 		.tlv_type       = QMI_COMMON_TLV_TYPE,
diff --git a/drivers/net/wireless/cnss_utils/wlan_firmware_service_v01.h b/drivers/net/wireless/cnss_utils/wlan_firmware_service_v01.h
index a398d2f..b3b1ce7 100644
--- a/drivers/net/wireless/cnss_utils/wlan_firmware_service_v01.h
+++ b/drivers/net/wireless/cnss_utils/wlan_firmware_service_v01.h
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
-/* Copyright (c) 2015-2019, The Linux Foundation. All rights reserved. */
+/* Copyright (c) 2015-2020, The Linux Foundation. All rights reserved. */
 
 #ifndef WLAN_FIRMWARE_SERVICE_V01_H
 #define WLAN_FIRMWARE_SERVICE_V01_H
@@ -91,6 +91,7 @@
 #define QMI_WLFW_MAX_DATA_SIZE_V01 6144
 #define QMI_WLFW_FUNCTION_NAME_LEN_V01 128
 #define QMI_WLFW_MAX_NUM_CE_V01 12
+#define QMI_WLFW_MAX_HOST_DDR_RANGE_SIZE_V01 3
 #define QMI_WLFW_MAX_TIMESTAMP_LEN_V01 32
 #define QMI_WLFW_MAX_ATHDIAG_DATA_SIZE_V01 6144
 #define QMI_WLFW_MAX_WFC_CALL_STATUS_DATA_SIZE_V01 256
@@ -101,6 +102,7 @@
 #define QMI_WLFW_MAX_NUM_SHADOW_REG_V01 24
 #define QMI_WLFW_MAC_ADDR_SIZE_V01 6
 #define QMI_WLFW_MAX_NUM_SHADOW_REG_V2_V01 36
+#define QMI_WLFW_MAX_PLATFORM_NAME_LEN_V01 64
 #define QMI_WLFW_MAX_NUM_SVC_V01 24
 
 enum wlfw_driver_mode_enum_v01 {
@@ -246,6 +248,11 @@
 	char fw_build_timestamp[QMI_WLFW_MAX_TIMESTAMP_LEN_V01 + 1];
 };
 
+struct wlfw_host_ddr_range_s_v01 {
+	u64 start;
+	u64 size;
+};
+
 struct wlfw_ind_register_req_msg_v01 {
 	u8 fw_ready_enable_valid;
 	u8 fw_ready_enable;
@@ -663,9 +670,14 @@
 	u8 mem_cfg_mode;
 	u8 cal_duration_valid;
 	u16 cal_duration;
+	u8 platform_name_valid;
+	char platform_name[QMI_WLFW_MAX_PLATFORM_NAME_LEN_V01 + 1];
+	u8 ddr_range_valid;
+	struct wlfw_host_ddr_range_s_v01
+		ddr_range[QMI_WLFW_MAX_HOST_DDR_RANGE_SIZE_V01];
 };
 
-#define WLFW_HOST_CAP_REQ_MSG_V01_MAX_MSG_LEN 194
+#define WLFW_HOST_CAP_REQ_MSG_V01_MAX_MSG_LEN 312
 extern struct qmi_elem_info wlfw_host_cap_req_msg_v01_ei[];
 
 struct wlfw_host_cap_resp_msg_v01 {
diff --git a/drivers/net/wireless/virt_wifi.c b/drivers/net/wireless/virt_wifi.c
index 946246c..6a7b53f 100644
--- a/drivers/net/wireless/virt_wifi.c
+++ b/drivers/net/wireless/virt_wifi.c
@@ -18,6 +18,7 @@
 #include <net/rtnetlink.h>
 #include <linux/etherdevice.h>
 #include <linux/module.h>
+#include <net/virt_wifi.h>
 
 static struct wiphy *common_wiphy;
 
@@ -25,6 +26,7 @@
 	struct delayed_work scan_result;
 	struct cfg80211_scan_request *scan_request;
 	bool being_deleted;
+	struct virt_wifi_network_simulation *network_simulation;
 };
 
 static struct ieee80211_channel channel_2ghz = {
@@ -153,6 +155,9 @@
 
 	priv->scan_request = request;
 	schedule_delayed_work(&priv->scan_result, HZ * 2);
+	if (priv->network_simulation &&
+	    priv->network_simulation->notify_scan_trigger)
+		priv->network_simulation->notify_scan_trigger(wiphy, request);
 
 	return 0;
 }
@@ -183,6 +188,12 @@
 					   DBM_TO_MBM(-50), GFP_KERNEL);
 	cfg80211_put_bss(wiphy, informed_bss);
 
+	if(priv->network_simulation &&
+	   priv->network_simulation->generate_virt_scan_result) {
+		if(priv->network_simulation->generate_virt_scan_result(wiphy))
+			wiphy_err(wiphy, "Fail to generater the simulated scan result.\n");
+	}
+
 	/* Schedules work which acquires and releases the rtnl lock. */
 	cfg80211_scan_done(priv->scan_request, &scan_info);
 	priv->scan_request = NULL;
@@ -370,6 +381,8 @@
 	priv = wiphy_priv(wiphy);
 	priv->being_deleted = false;
 	priv->scan_request = NULL;
+	priv->network_simulation = NULL;
+
 	INIT_DELAYED_WORK(&priv->scan_result, virt_wifi_scan_result);
 
 	err = wiphy_register(wiphy);
@@ -385,7 +398,6 @@
 static void virt_wifi_destroy_wiphy(struct wiphy *wiphy)
 {
 	struct virt_wifi_wiphy_priv *priv;
-
 	WARN(!wiphy, "%s called with null wiphy", __func__);
 	if (!wiphy)
 		return;
@@ -419,8 +431,13 @@
 static int virt_wifi_net_device_open(struct net_device *dev)
 {
 	struct virt_wifi_netdev_priv *priv = netdev_priv(dev);
-
+	struct virt_wifi_wiphy_priv *w_priv;
 	priv->is_up = true;
+	w_priv = wiphy_priv(dev->ieee80211_ptr->wiphy);
+	if(w_priv->network_simulation &&
+	   w_priv->network_simulation->notify_device_open)
+		w_priv->network_simulation->notify_device_open(dev);
+
 	return 0;
 }
 
@@ -440,6 +457,10 @@
 	virt_wifi_cancel_connect(dev);
 	netif_carrier_off(dev);
 
+	if (w_priv->network_simulation &&
+	    w_priv->network_simulation->notify_device_stop)
+		w_priv->network_simulation->notify_device_stop(dev);
+
 	return 0;
 }
 
@@ -624,6 +645,27 @@
 	virt_wifi_destroy_wiphy(common_wiphy);
 }
 
+int virt_wifi_register_network_simulation
+	(struct virt_wifi_network_simulation *ops)
+{
+	struct virt_wifi_wiphy_priv *priv = wiphy_priv(common_wiphy);
+	if (priv->network_simulation)
+		return -EEXIST;
+	priv->network_simulation = ops;
+	return 0;
+}
+EXPORT_SYMBOL(virt_wifi_register_network_simulation);
+
+int virt_wifi_unregister_network_simulation(void)
+{
+	struct virt_wifi_wiphy_priv *priv = wiphy_priv(common_wiphy);
+	if(!priv->network_simulation)
+		return -ENODATA;
+	priv->network_simulation = NULL;
+	return 0;
+}
+EXPORT_SYMBOL(virt_wifi_unregister_network_simulation);
+
 module_init(virt_wifi_init_module);
 module_exit(virt_wifi_cleanup_module);
 
diff --git a/drivers/of/platform.c b/drivers/of/platform.c
index 7c4abf5..8b339f0 100644
--- a/drivers/of/platform.c
+++ b/drivers/of/platform.c
@@ -488,6 +488,7 @@
 	pr_debug("%s()\n", __func__);
 	pr_debug(" starting at: %pOF\n", root);
 
+	device_links_supplier_sync_state_pause();
 	for_each_child_of_node(root, child) {
 		rc = of_platform_bus_create(child, matches, lookup, parent, true);
 		if (rc) {
@@ -495,6 +496,8 @@
 			break;
 		}
 	}
+	device_links_supplier_sync_state_resume();
+
 	of_node_set_flag(root, OF_POPULATED_BUS);
 
 	of_node_put(root);
@@ -526,6 +529,7 @@
 	if (!of_have_populated_dt())
 		return -ENODEV;
 
+	device_links_supplier_sync_state_pause();
 	/*
 	 * Handle certain compatibles explicitly, since we don't want to create
 	 * platform_devices for every node in /reserved-memory with a
@@ -546,6 +550,14 @@
 	return 0;
 }
 arch_initcall_sync(of_platform_default_populate_init);
+
+static int __init of_platform_sync_state_init(void)
+{
+	if (of_have_populated_dt())
+		device_links_supplier_sync_state_resume();
+	return 0;
+}
+late_initcall_sync(of_platform_sync_state_init);
 #endif
 
 int of_platform_device_destroy(struct device *dev, void *data)
diff --git a/drivers/of/property.c b/drivers/of/property.c
index 43720c2d..bcd1b99 100644
--- a/drivers/of/property.c
+++ b/drivers/of/property.c
@@ -25,6 +25,7 @@
 #include <linux/of_device.h>
 #include <linux/of_graph.h>
 #include <linux/string.h>
+#include <linux/moduleparam.h>
 
 #include "of_private.h"
 
@@ -985,6 +986,320 @@
 	return of_device_get_match_data(dev);
 }
 
+static bool of_is_ancestor_of(struct device_node *test_ancestor,
+			      struct device_node *child)
+{
+	of_node_get(child);
+	while (child) {
+		if (child == test_ancestor) {
+			of_node_put(child);
+			return true;
+		}
+		child = of_get_next_parent(child);
+	}
+	return false;
+}
+
+/**
+ * of_link_to_phandle - Add device link to supplier from supplier phandle
+ * @dev: consumer device
+ * @sup_np: phandle to supplier device tree node
+ *
+ * Given a phandle to a supplier device tree node (@sup_np), this function
+ * finds the device that owns the supplier device tree node and creates a
+ * device link from @dev consumer device to the supplier device. This function
+ * doesn't create device links for invalid scenarios such as trying to create a
+ * link with a parent device as the consumer of its child device. In such
+ * cases, it returns an error.
+ *
+ * Returns:
+ * - 0 if link successfully created to supplier
+ * - -EAGAIN if linking to the supplier should be reattempted
+ * - -EINVAL if the supplier link is invalid and should not be created
+ * - -ENODEV if there is no device that corresponds to the supplier phandle
+ */
+static int of_link_to_phandle(struct device *dev, struct device_node *sup_np,
+			      u32 dl_flags)
+{
+	struct device *sup_dev;
+	int ret = 0;
+	struct device_node *tmp_np = sup_np;
+	int is_populated;
+
+	of_node_get(sup_np);
+	/*
+	 * Find the device node that contains the supplier phandle.  It may be
+	 * @sup_np or it may be an ancestor of @sup_np.
+	 */
+	while (sup_np && !of_find_property(sup_np, "compatible", NULL))
+		sup_np = of_get_next_parent(sup_np);
+	if (!sup_np) {
+		dev_dbg(dev, "Not linking to %pOFP - No device\n", tmp_np);
+		return -ENODEV;
+	}
+
+	/*
+	 * Don't allow linking a device node as a consumer of one of its
+	 * descendant nodes. By definition, a child node can't be a functional
+	 * dependency for the parent node.
+	 */
+	if (of_is_ancestor_of(dev->of_node, sup_np)) {
+		dev_dbg(dev, "Not linking to %pOFP - is descendant\n", sup_np);
+		of_node_put(sup_np);
+		return -EINVAL;
+	}
+	sup_dev = get_dev_from_fwnode(&sup_np->fwnode);
+	is_populated = of_node_check_flag(sup_np, OF_POPULATED);
+	of_node_put(sup_np);
+	if (!sup_dev && is_populated) {
+		/* Early device without struct device. */
+		dev_dbg(dev, "Not linking to %pOFP - No struct device\n",
+			sup_np);
+		return -ENODEV;
+	} else if (!sup_dev) {
+		return -EAGAIN;
+	}
+	if (!device_link_add(dev, sup_dev, dl_flags))
+		ret = -EAGAIN;
+	put_device(sup_dev);
+	return ret;
+}
+
+/**
+ * parse_prop_cells - Property parsing function for suppliers
+ *
+ * @np:		Pointer to device tree node containing a list
+ * @prop_name:	Name of property to be parsed. Expected to hold phandle values
+ * @index:	For properties holding a list of phandles, this is the index
+ *		into the list.
+ * @list_name:	Property name that is known to contain list of phandle(s) to
+ *		supplier(s)
+ * @cells_name:	property name that specifies phandles' arguments count
+ *
+ * This is a helper function to parse properties that have a known fixed name
+ * and are a list of phandles and phandle arguments.
+ *
+ * Returns:
+ * - phandle node pointer with refcount incremented. Caller must of_node_put()
+ *   on it when done.
+ * - NULL if no phandle found at index
+ */
+static struct device_node *parse_prop_cells(struct device_node *np,
+					    const char *prop_name, int index,
+					    const char *list_name,
+					    const char *cells_name)
+{
+	struct of_phandle_args sup_args;
+
+	if (strcmp(prop_name, list_name))
+		return NULL;
+
+	if (of_parse_phandle_with_args(np, list_name, cells_name, index,
+				       &sup_args))
+		return NULL;
+
+	return sup_args.np;
+}
+
+#define DEFINE_SIMPLE_PROP(fname, name, cells)				  \
+static struct device_node *parse_##fname(struct device_node *np,	  \
+					const char *prop_name, int index) \
+{									  \
+	return parse_prop_cells(np, prop_name, index, name, cells);	  \
+}
+
+static int strcmp_suffix(const char *str, const char *suffix)
+{
+	unsigned int len, suffix_len;
+
+	len = strlen(str);
+	suffix_len = strlen(suffix);
+	if (len <= suffix_len)
+		return -1;
+	return strcmp(str + len - suffix_len, suffix);
+}
+
+/**
+ * parse_suffix_prop_cells - Suffix property parsing function for suppliers
+ *
+ * @np:		Pointer to device tree node containing a list
+ * @prop_name:	Name of property to be parsed. Expected to hold phandle values
+ * @index:	For properties holding a list of phandles, this is the index
+ *		into the list.
+ * @suffix:	Property suffix that is known to contain list of phandle(s) to
+ *		supplier(s)
+ * @cells_name:	property name that specifies phandles' arguments count
+ *
+ * This is a helper function to parse properties that have a known fixed suffix
+ * and are a list of phandles and phandle arguments.
+ *
+ * Returns:
+ * - phandle node pointer with refcount incremented. Caller must of_node_put()
+ *   on it when done.
+ * - NULL if no phandle found at index
+ */
+static struct device_node *parse_suffix_prop_cells(struct device_node *np,
+					    const char *prop_name, int index,
+					    const char *suffix,
+					    const char *cells_name)
+{
+	struct of_phandle_args sup_args;
+
+	if (strcmp_suffix(prop_name, suffix))
+		return NULL;
+
+	if (of_parse_phandle_with_args(np, prop_name, cells_name, index,
+				       &sup_args))
+		return NULL;
+
+	return sup_args.np;
+}
+
+#define DEFINE_SUFFIX_PROP(fname, suffix, cells)			     \
+static struct device_node *parse_##fname(struct device_node *np,	     \
+					const char *prop_name, int index)    \
+{									     \
+	return parse_suffix_prop_cells(np, prop_name, index, suffix, cells); \
+}
+
+/**
+ * struct supplier_bindings - Property parsing functions for suppliers
+ *
+ * @parse_prop: function name
+ *	parse_prop() finds the node corresponding to a supplier phandle
+ * @parse_prop.np: Pointer to device node holding supplier phandle property
+ * @parse_prop.prop_name: Name of property holding a phandle value
+ * @parse_prop.index: For properties holding a list of phandles, this is the
+ *		      index into the list
+ *
+ * Returns:
+ * parse_prop() return values are
+ * - phandle node pointer with refcount incremented. Caller must of_node_put()
+ *   on it when done.
+ * - NULL if no phandle found at index
+ */
+struct supplier_bindings {
+	struct device_node *(*parse_prop)(struct device_node *np,
+					  const char *prop_name, int index);
+};
+
+DEFINE_SIMPLE_PROP(clocks, "clocks", "#clock-cells")
+DEFINE_SIMPLE_PROP(interconnects, "interconnects", "#interconnect-cells")
+DEFINE_SIMPLE_PROP(iommus, "iommus", "#iommu-cells")
+DEFINE_SIMPLE_PROP(mboxes, "mboxes", "#mbox-cells")
+DEFINE_SIMPLE_PROP(io_channels, "io-channel", "#io-channel-cells")
+DEFINE_SIMPLE_PROP(interrupt_parent, "interrupt-parent", NULL)
+DEFINE_SIMPLE_PROP(dmas, "dmas", "#dma-cells")
+DEFINE_SUFFIX_PROP(regulators, "-supply", NULL)
+DEFINE_SUFFIX_PROP(gpio, "-gpio", "#gpio-cells")
+DEFINE_SUFFIX_PROP(gpios, "-gpios", "#gpio-cells")
+
+static struct device_node *parse_iommu_maps(struct device_node *np,
+					    const char *prop_name, int index)
+{
+	if (strcmp(prop_name, "iommu-map"))
+		return NULL;
+
+	return of_parse_phandle(np, prop_name, (index * 4) + 1);
+}
+
+static const struct supplier_bindings of_supplier_bindings[] = {
+	{ .parse_prop = parse_clocks, },
+	{ .parse_prop = parse_interconnects, },
+	{ .parse_prop = parse_iommus, },
+	{ .parse_prop = parse_iommu_maps, },
+	{ .parse_prop = parse_mboxes, },
+	{ .parse_prop = parse_io_channels, },
+	{ .parse_prop = parse_interrupt_parent, },
+	{ .parse_prop = parse_dmas, },
+	{ .parse_prop = parse_regulators, },
+	{ .parse_prop = parse_gpio, },
+	{ .parse_prop = parse_gpios, },
+	{}
+};
+
+/**
+ * of_link_property - Create device links to suppliers listed in a property
+ * @dev: Consumer device
+ * @con_np: The consumer device tree node which contains the property
+ * @prop_name: Name of property to be parsed
+ *
+ * This function checks if the property @prop_name that is present in the
+ * @con_np device tree node is one of the known common device tree bindings
+ * that list phandles to suppliers. If @prop_name isn't one, this function
+ * doesn't do anything.
+ *
+ * If @prop_name is one, this function attempts to create device links from the
+ * consumer device @dev to all the devices of the suppliers listed in
+ * @prop_name.
+ *
+ * Any failed attempt to create a device link will NOT result in an immediate
+ * return.  of_link_property() must create links to all the available supplier
+ * devices even when attempts to create a link to one or more suppliers fail.
+ */
+static int of_link_property(struct device *dev, struct device_node *con_np,
+			     const char *prop_name)
+{
+	struct device_node *phandle;
+	const struct supplier_bindings *s = of_supplier_bindings;
+	unsigned int i = 0;
+	bool matched = false;
+	int ret = 0;
+	u32 dl_flags;
+
+	if (dev->of_node == con_np)
+		dl_flags = 0;
+	else
+		dl_flags = DL_FLAG_SYNC_STATE_ONLY;
+
+	/* Do not stop at first failed link, link all available suppliers. */
+	while (!matched && s->parse_prop) {
+		while ((phandle = s->parse_prop(con_np, prop_name, i))) {
+			matched = true;
+			i++;
+			if (of_link_to_phandle(dev, phandle, dl_flags)
+								== -EAGAIN)
+				ret = -EAGAIN;
+			of_node_put(phandle);
+		}
+		s++;
+	}
+	return ret;
+}
+
+static int of_link_to_suppliers(struct device *dev,
+				  struct device_node *con_np)
+{
+	struct device_node *child;
+	struct property *p;
+	int ret = 0;
+
+	for_each_property_of_node(con_np, p)
+		if (of_link_property(dev, con_np, p->name))
+			ret = -ENODEV;
+
+	for_each_child_of_node(con_np, child)
+		if (of_link_to_suppliers(dev, child) && !ret)
+			ret = -EAGAIN;
+
+	return ret;
+}
+
+static bool of_devlink;
+core_param(of_devlink, of_devlink, bool, 0);
+
+static int of_fwnode_add_links(const struct fwnode_handle *fwnode,
+			       struct device *dev)
+{
+	if (!of_devlink)
+		return 0;
+
+	if (unlikely(!is_of_node(fwnode)))
+		return 0;
+
+	return of_link_to_suppliers(dev, to_of_node(fwnode));
+}
+
 const struct fwnode_operations of_fwnode_ops = {
 	.get = of_fwnode_get,
 	.put = of_fwnode_put,
@@ -1001,5 +1316,6 @@
 	.graph_get_remote_endpoint = of_fwnode_graph_get_remote_endpoint,
 	.graph_get_port_parent = of_fwnode_graph_get_port_parent,
 	.graph_parse_endpoint = of_fwnode_graph_parse_endpoint,
+	.add_links = of_fwnode_add_links,
 };
 EXPORT_SYMBOL_GPL(of_fwnode_ops);
diff --git a/drivers/pci/controller/pci-msm.c b/drivers/pci/controller/pci-msm.c
index 3d40cae..b30331f 100644
--- a/drivers/pci/controller/pci-msm.c
+++ b/drivers/pci/controller/pci-msm.c
@@ -330,6 +330,7 @@
 	MSM_PCIE_LINK_ENABLED,
 	MSM_PCIE_LINK_DISABLED,
 	MSM_PCIE_LINK_DRV,
+	MSM_PCIE_LINK_DOWN,
 };
 
 enum msm_pcie_boot_option {
@@ -1023,7 +1024,7 @@
 {
 	writel_relaxed(value, base + offset);
 	/* ensure that changes propagated to the hardware */
-	wmb();
+	readl_relaxed(base + offset);
 }
 
 static inline void msm_pcie_write_reg_field(void __iomem *base, u32 offset,
@@ -1036,7 +1037,7 @@
 	val = tmp | (val << shift);
 	writel_relaxed(val, base + offset);
 	/* ensure that changes propagated to the hardware */
-	wmb();
+	readl_relaxed(base + offset);
 }
 
 static inline void msm_pcie_config_clear_set_dword(struct pci_dev *pdev,
@@ -1085,24 +1086,24 @@
 	PCIE_DBG(pcie_dev, "PCIe: RC%d: enter.\n", pcie_dev->rc_idx);
 
 	val = readl_relaxed(pcie_dev->rumi + phy_ctrl_offs) | 0x1000;
-	writel_relaxed(val, pcie_dev->rumi + phy_ctrl_offs);
+	msm_pcie_write_reg(pcie_dev->rumi, phy_ctrl_offs, val);
 	usleep_range(10000, 10001);
 
-	writel_relaxed(0x800, pcie_dev->rumi + reset_offs);
+	msm_pcie_write_reg(pcie_dev->rumi, reset_offs, 0x800);
 	usleep_range(50000, 50001);
-	writel_relaxed(0xFFFFFFFF, pcie_dev->rumi + reset_offs);
+	msm_pcie_write_reg(pcie_dev->rumi, reset_offs, 0xFFFFFFFF);
 	usleep_range(50000, 50001);
-	writel_relaxed(0x800, pcie_dev->rumi + reset_offs);
+	msm_pcie_write_reg(pcie_dev->rumi, reset_offs, 0x800);
 	usleep_range(50000, 50001);
-	writel_relaxed(0, pcie_dev->rumi + reset_offs);
+	msm_pcie_write_reg(pcie_dev->rumi, reset_offs, 0);
 	usleep_range(50000, 50001);
 
 	val = readl_relaxed(pcie_dev->rumi + phy_ctrl_offs) & 0xFFFFEFFF;
-	writel_relaxed(val, pcie_dev->rumi + phy_ctrl_offs);
+	msm_pcie_write_reg(pcie_dev->rumi, phy_ctrl_offs, val);
 	usleep_range(10000, 10001);
 
 	val = readl_relaxed(pcie_dev->rumi + phy_ctrl_offs) & 0xFFFFFFFE;
-	writel_relaxed(val, pcie_dev->rumi + phy_ctrl_offs);
+	msm_pcie_write_reg(pcie_dev->rumi, phy_ctrl_offs, val);
 }
 
 static void pcie_phy_dump(struct msm_pcie_dev_t *dev)
@@ -1217,9 +1218,7 @@
 				PCIE_DBG3(dev,
 					"PCIe: shadow_dw[%d]:cfg 0x%x:0x%x\n",
 					j, j * 4, val);
-				writel_relaxed(val, cfg + j * 4);
-				/* ensure changes propagated to the hardware */
-				wmb();
+				msm_pcie_write_reg(cfg, j * 4, val);
 				PCIE_DBG3(dev,
 					"PCIe: after recovery:cfg 0x%x:0x%x\n\n",
 					j * 4, readl_relaxed(cfg + j * 4));
@@ -1240,7 +1239,8 @@
 
 	val = (readl_relaxed(addr) & ~clear_mask) | set_mask;
 	writel_relaxed(val, addr);
-	wmb();  /* ensure data is written to hardware register */
+	/* ensure data is written to hardware register */
+	readl_relaxed(addr);
 }
 
 static void pcie_parf_dump(struct msm_pcie_dev_t *dev)
@@ -1260,7 +1260,7 @@
 			readl_relaxed(dev->parf + PCIE20_PARF_SYS_CTRL),
 			readl_relaxed(dev->parf + PCIE20_PARF_TEST_BUS));
 	}
-	writel_relaxed(original, dev->parf + PCIE20_PARF_SYS_CTRL);
+	msm_pcie_write_reg(dev->parf, PCIE20_PARF_SYS_CTRL, original);
 
 	PCIE_DUMP(dev, "PCIe: RC%d PARF register dump\n", dev->rc_idx);
 
@@ -2718,33 +2718,23 @@
 	}
 
 	/* select region */
-	if (iatu_viewport_offset) {
-		writel_relaxed(nr, iatu_base + iatu_viewport_offset);
-		/* ensure that hardware locks it */
-		wmb();
-	}
+	if (iatu_viewport_offset)
+		msm_pcie_write_reg(iatu_base, iatu_viewport_offset, nr);
 
 	/* switch off region before changing it */
-	writel_relaxed(0, iatu_base + iatu_ctrl2_offset);
-	/* and wait till it propagates to the hardware */
-	wmb();
+	msm_pcie_write_reg(iatu_base, iatu_ctrl2_offset, 0);
 
-	writel_relaxed(type, iatu_base + iatu_ctrl1_offset);
-	writel_relaxed(lower_32_bits(host_addr),
-		       iatu_base + iatu_lbar_offset);
-	writel_relaxed(upper_32_bits(host_addr),
-		       iatu_base + iatu_ubar_offset);
-	writel_relaxed(host_end, iatu_base + iatu_lar_offset);
-	writel_relaxed(lower_32_bits(target_addr),
-		       iatu_base + iatu_ltar_offset);
-	writel_relaxed(upper_32_bits(target_addr),
-		       iatu_base + iatu_utar_offset);
-	/* ensure that changes propagated to the hardware */
-	wmb();
-	writel_relaxed(BIT(31), iatu_base + iatu_ctrl2_offset);
-
-	/* ensure that changes propagated to the hardware */
-	wmb();
+	msm_pcie_write_reg(iatu_base, iatu_ctrl1_offset, type);
+	msm_pcie_write_reg(iatu_base, iatu_lbar_offset,
+				lower_32_bits(host_addr));
+	msm_pcie_write_reg(iatu_base, iatu_ubar_offset,
+				upper_32_bits(host_addr));
+	msm_pcie_write_reg(iatu_base, iatu_lar_offset, host_end);
+	msm_pcie_write_reg(iatu_base, iatu_ltar_offset,
+				lower_32_bits(target_addr));
+	msm_pcie_write_reg(iatu_base, iatu_utar_offset,
+				upper_32_bits(target_addr));
+	msm_pcie_write_reg(iatu_base, iatu_ctrl2_offset, BIT(31));
 
 	if (dev->enumerated) {
 		PCIE_DBG2(dev, "IATU for Endpoint %02x:%02x.%01x\n",
@@ -2929,8 +2919,7 @@
 		if ((bus->number == 0) && (where == 0x3c))
 			wr_val = wr_val | (3 << 16);
 
-		writel_relaxed(wr_val, config_base + word_offset);
-		wmb(); /* ensure config data is written to hardware register */
+		msm_pcie_write_reg(config_base, word_offset, wr_val);
 
 		if (dev->shadow_en) {
 			if (rd_val == PCIE_LINK_DOWN &&
@@ -3751,7 +3740,7 @@
 		of_property_read_u32_array(pdev->dev.of_node, "qcom,bw-scale",
 				(u32 *)pcie_dev->bw_scale, size / sizeof(u32));
 
-		pcie_dev->bw_gen_max = size / sizeof(u32);
+		pcie_dev->bw_gen_max = size / sizeof(*pcie_dev->bw_scale);
 	} else {
 		PCIE_DBG(pcie_dev, "RC%d: bandwidth scaling is not supported\n",
 			pcie_dev->rc_idx);
@@ -4207,9 +4196,9 @@
 	msm_pcie_write_mask(dev->parf + PCIE20_PARF_PHY_CTRL, BIT(0), 0);
 
 	/* change DBI base address */
-	writel_relaxed(0, dev->parf + PCIE20_PARF_DBI_BASE_ADDR);
+	msm_pcie_write_reg(dev->parf, PCIE20_PARF_DBI_BASE_ADDR, 0);
 
-	writel_relaxed(0x365E, dev->parf + PCIE20_PARF_SYS_CTRL);
+	msm_pcie_write_reg(dev->parf, PCIE20_PARF_SYS_CTRL, 0x365E);
 
 	msm_pcie_write_mask(dev->parf + PCIE20_PARF_MHI_CLOCK_RESET_CTRL,
 				0, BIT(4));
@@ -4235,8 +4224,8 @@
 		dev->rc_idx,
 		readl_relaxed(dev->parf + PCIE20_PARF_INT_ALL_MASK));
 
-	writel_relaxed(dev->slv_addr_space_size, dev->parf +
-		PCIE20_PARF_SLV_ADDR_SPACE_SIZE);
+	msm_pcie_write_reg(dev->parf, PCIE20_PARF_SLV_ADDR_SPACE_SIZE,
+				dev->slv_addr_space_size);
 
 	val = dev->wr_halt_size ? dev->wr_halt_size :
 		readl_relaxed(dev->parf + PCIE20_PARF_AXI_MSTR_WR_ADDR_HALT);
@@ -4542,9 +4531,9 @@
 
 	if (dev->enumerated) {
 		for (i = 0; i < dev->sid_info_len; i++)
-			writel_relaxed(dev->sid_info[i].value,
-				bdf_to_sid_base + dev->sid_info[i].hash *
-				sizeof(u32));
+			msm_pcie_write_reg(bdf_to_sid_base,
+					dev->sid_info[i].hash * sizeof(u32),
+					dev->sid_info[i].value);
 		return;
 	}
 
@@ -4570,8 +4559,8 @@
 				int j;
 
 				val |= (u32)hash;
-				writel_relaxed(val, bdf_to_sid_base +
-					current_hash * sizeof(u32));
+				msm_pcie_write_reg(bdf_to_sid_base,
+					current_hash * sizeof(u32), val);
 
 				/* sid_info of current hash and update it */
 				for (j = 0; j < dev->sid_info_len; j++) {
@@ -4591,7 +4580,7 @@
 
 		/* BDF [31:16] | SID [15:8] | NEXT [7:0] */
 		val = sid_info->bdf << 16 | sid_info->pcie_sid << 8 | 0;
-		writel_relaxed(val, bdf_to_sid_base + hash * sizeof(u32));
+		msm_pcie_write_reg(bdf_to_sid_base, hash * sizeof(u32), val);
 
 		sid_info->hash = hash;
 		sid_info->value = val;
@@ -4749,12 +4738,15 @@
 	if (dev->event_reg && dev->event_reg->callback &&
 		(dev->event_reg->events & event)) {
 		struct msm_pcie_notify *notify = &dev->event_reg->notify;
+		struct msm_pcie_notify client_notify;
 
-		notify->event = event;
-		notify->user = dev->event_reg->user;
+		client_notify.event = event;
+		client_notify.user = dev->event_reg->user;
+		client_notify.data = notify->data;
+		client_notify.options = notify->options;
 		PCIE_DUMP(dev, "PCIe: callback RC%d for event %d\n",
 			dev->rc_idx, event);
-		dev->event_reg->callback(notify);
+		dev->event_reg->callback(&client_notify);
 
 		if ((dev->event_reg->options & MSM_PCIE_CONFIG_NO_RECOVERY) &&
 				(event == MSM_PCIE_EVENT_LINKDOWN)) {
@@ -4888,7 +4880,7 @@
 	msm_pcie_write_mask(dev->dm_core + PCIE20_CAP_DEVCTRLSTATUS, 0,
 				BIT(18)|BIT(17)|BIT(16));
 
-	if (dev->link_status == MSM_PCIE_LINK_DISABLED) {
+	if (dev->link_status != MSM_PCIE_LINK_ENABLED) {
 		PCIE_DBG2(dev, "RC%d link is down\n", dev->rc_idx);
 		goto out;
 	}
@@ -5039,7 +5031,7 @@
 			"PCIe:the link of RC%d is suspending.\n",
 			dev->rc_idx);
 	} else {
-		dev->link_status = MSM_PCIE_LINK_DISABLED;
+		dev->link_status = MSM_PCIE_LINK_DOWN;
 		dev->shadow_en = false;
 
 		if (dev->linkdown_panic)
@@ -6217,6 +6209,15 @@
 
 	pcie_dev = PCIE_BUS_PRIV_DATA(root_pci_dev->bus);
 
+	if (target_link_speed > pcie_dev->bw_gen_max ||
+		(pcie_dev->target_link_speed &&
+		target_link_speed > pcie_dev->target_link_speed)) {
+		PCIE_DBG(pcie_dev,
+			"PCIe: RC%d: invalid target link speed: %d\n",
+			pcie_dev->rc_idx, target_link_speed);
+		return -EINVAL;
+	}
+
 	pcie_capability_read_word(root_pci_dev, PCI_EXP_LNKSTA, &link_status);
 
 	current_link_speed = link_status & PCI_EXP_LNKSTA_CLS;
@@ -6225,9 +6226,19 @@
 
 	if (target_link_speed == current_link_speed)
 		set_link_speed = false;
+	else
+		PCIE_DBG(pcie_dev,
+			"PCIe: RC%d: switching from Gen%d to Gen%d\n",
+			pcie_dev->rc_idx, current_link_speed,
+			target_link_speed);
 
 	if (target_link_width == current_link_width)
 		set_link_width = false;
+	else
+		PCIE_DBG(pcie_dev,
+			"PCIe: RC%d: switching from x%d to x%d\n",
+			pcie_dev->rc_idx, current_link_width,
+			target_link_width);
 
 	if (!set_link_speed && !set_link_width)
 		return 0;
@@ -6270,6 +6281,9 @@
 
 	if (target_link_speed < current_link_speed)
 		msm_pcie_scale_link_bandwidth(pcie_dev, target_link_speed);
+
+	PCIE_DBG(pcie_dev, "PCIe: RC%d: successfully switched link bandwidth\n",
+		pcie_dev->rc_idx);
 out:
 	msm_pcie_allow_l1(root_pci_dev);
 
@@ -6655,29 +6669,30 @@
 {
 	msm_pcie_write_mask(pcie_dev->parf + PCIE20_PARF_DEBUG_INT_EN, BIT(0),
 				0);
-	writel_relaxed(0, pcie_dev->parf + PCIE20_PARF_L1SUB_AHB_CLK_MAX_TIMER);
+	msm_pcie_write_reg(pcie_dev->parf, PCIE20_PARF_L1SUB_AHB_CLK_MAX_TIMER,
+				0);
 }
 
 static void __msm_pcie_l1ss_timeout_enable(struct msm_pcie_dev_t *pcie_dev)
 {
 	u32 val = BIT(31);
 
-	writel_relaxed(val, pcie_dev->parf +
-			PCIE20_PARF_L1SUB_AHB_CLK_MAX_TIMER);
+	msm_pcie_write_reg(pcie_dev->parf, PCIE20_PARF_L1SUB_AHB_CLK_MAX_TIMER,
+				val);
 
 	/* 3 AUX clock cycles so that RESET will sync with timer logic */
 	usleep_range(3, 4);
 
 	val |= L1SS_TIMEOUT_US_TO_TICKS(L1SS_TIMEOUT_US);
-	writel_relaxed(val, pcie_dev->parf +
-			PCIE20_PARF_L1SUB_AHB_CLK_MAX_TIMER);
+	msm_pcie_write_reg(pcie_dev->parf, PCIE20_PARF_L1SUB_AHB_CLK_MAX_TIMER,
+				val);
 
 	/* 1 AUX clock cycle so that CNT_MAX will sync with timer logic */
 	usleep_range(1, 2);
 
 	val &= ~BIT(31);
-	writel_relaxed(val, pcie_dev->parf +
-			PCIE20_PARF_L1SUB_AHB_CLK_MAX_TIMER);
+	msm_pcie_write_reg(pcie_dev->parf, PCIE20_PARF_L1SUB_AHB_CLK_MAX_TIMER,
+				val);
 
 	msm_pcie_write_mask(pcie_dev->parf +
 			PCIE20_PARF_DEBUG_INT_EN, 0, BIT(0));
@@ -6725,8 +6740,8 @@
 	spin_unlock_irqrestore(&pcie_dev->cfg_lock,
 				pcie_dev->irqsave_flags);
 
-	msm_pcie_write_mask(pcie_dev->elbi + PCIE20_ELBI_SYS_CTRL, 0,
-				BIT(4));
+	writel_relaxed(BIT(4), pcie_dev->elbi + PCIE20_ELBI_SYS_CTRL);
+	wmb(); /* ensure changes propagated to the hardware */
 
 	PCIE_DBG(pcie_dev, "RC%d: PME_TURNOFF_MSG is sent out\n",
 		pcie_dev->rc_idx);
diff --git a/drivers/pinctrl/qcom/pinctrl-lagoon.c b/drivers/pinctrl/qcom/pinctrl-lagoon.c
index 5e07dcb..d133a1a5 100644
--- a/drivers/pinctrl/qcom/pinctrl-lagoon.c
+++ b/drivers/pinctrl/qcom/pinctrl-lagoon.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2019,2020, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/module.h>
@@ -474,7 +474,8 @@
 	msm_mux_gcc_gp2,
 	msm_mux_gcc_gp3,
 	msm_mux_edp_lcd,
-	msm_mux_qup13,
+	msm_mux_qup13_f1,
+	msm_mux_qup13_f2,
 	msm_mux_qup11,
 	msm_mux_PLL_BIST,
 	msm_mux_qdss_gpio14,
@@ -729,8 +730,11 @@
 static const char * const edp_lcd_groups[] = {
 	"gpio23",
 };
-static const char * const qup13_groups[] = {
-	"gpio25", "gpio25", "gpio26", "gpio26",
+static const char * const qup13_f1_groups[] = {
+	"gpio25", "gpio26",
+};
+static const char * const qup13_f2_groups[] = {
+	"gpio25", "gpio26",
 };
 static const char * const qup11_groups[] = {
 	"gpio27", "gpio27", "gpio28", "gpio28",
@@ -1196,7 +1200,8 @@
 	FUNCTION(gcc_gp2),
 	FUNCTION(gcc_gp3),
 	FUNCTION(edp_lcd),
-	FUNCTION(qup13),
+	FUNCTION(qup13_f1),
+	FUNCTION(qup13_f2),
 	FUNCTION(qup11),
 	FUNCTION(PLL_BIST),
 	FUNCTION(qdss_gpio14),
@@ -1394,9 +1399,10 @@
 			0x9C008, 13),
 	[24] = PINGROUP(24, MDP_VSYNC, NA, NA, NA, NA, NA, NA, NA, NA,
 			0x9C008, 14),
-	[25] = PINGROUP(25, qup13, qup13, NA, NA, NA, NA, NA, NA, NA,
+	[25] = PINGROUP(25, qup13_f1, qup13_f2, NA, NA, NA, NA, NA, NA, NA,
 			0x9C008, 15),
-	[26] = PINGROUP(26, qup13, qup13, NA, NA, NA, NA, NA, NA, NA, 0, -1),
+	[26] = PINGROUP(26, qup13_f1, qup13_f2, NA, NA, NA, NA, NA, NA, NA,
+			0, -1),
 	[27] = PINGROUP(27, qup11, qup11, MDP_VSYNC, PLL_BIST, NA, qdss_gpio14,
 			NA, NA, NA, 0x9C00C, 0),
 	[28] = PINGROUP(28, qup11, qup11, MDP_VSYNC, NA, qdss_gpio15, NA, NA,
diff --git a/drivers/pinctrl/qcom/pinctrl-scuba.c b/drivers/pinctrl/qcom/pinctrl-scuba.c
index a804763..1d65bd3 100644
--- a/drivers/pinctrl/qcom/pinctrl-scuba.c
+++ b/drivers/pinctrl/qcom/pinctrl-scuba.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2019-2020, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/module.h>
@@ -540,6 +540,8 @@
 	msm_mux_uim1_present,
 	msm_mux_dac_calib19,
 	msm_mux_mdp_vsync,
+	msm_mux_mdp_vsync_out_0,
+	msm_mux_mdp_vsync_out_1,
 	msm_mux_dac_calib20,
 	msm_mux_dac_calib21,
 	msm_mux_pwm_6,
@@ -1077,6 +1079,12 @@
 static const char * const mdp_vsync_groups[] = {
 	"gpio81", "gpio96", "gpio97",
 };
+static const char * const mdp_vsync_out_0_groups[] = {
+	"gpio81",
+};
+static const char * const mdp_vsync_out_1_groups[] = {
+	"gpio81",
+};
 static const char * const dac_calib20_groups[] = {
 	"gpio81",
 };
@@ -1328,6 +1336,8 @@
 	FUNCTION(uim1_present),
 	FUNCTION(dac_calib19),
 	FUNCTION(mdp_vsync),
+	FUNCTION(mdp_vsync_out_0),
+	FUNCTION(mdp_vsync_out_1),
 	FUNCTION(dac_calib20),
 	FUNCTION(dac_calib21),
 	FUNCTION(pwm_6),
@@ -1498,8 +1508,8 @@
 			0x7F010, 5),
 	[80] = PINGROUP(80, qup2, dac_calib19, NA, NA, NA, NA, NA, NA, NA,
 			0x7F000, 12),
-	[81] = PINGROUP(81, mdp_vsync, mdp_vsync, mdp_vsync, dac_calib20, NA,
-			NA, NA, NA, NA, 0x7F000, 13),
+	[81] = PINGROUP(81, mdp_vsync_out_0, mdp_vsync_out_1, mdp_vsync,
+			dac_calib20, NA, NA, NA, NA, NA, 0x7F000, 13),
 	[82] = PINGROUP(82, qup0, dac_calib21, NA, pwm_6, NA, NA, NA, NA, NA,
 			0, -1),
 	[83] = PINGROUP(83, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0x7F000, 14),
diff --git a/drivers/platform/msm/gsi/Makefile b/drivers/platform/msm/gsi/Makefile
index be6968e..23d7c17 100644
--- a/drivers/platform/msm/gsi/Makefile
+++ b/drivers/platform/msm/gsi/Makefile
@@ -1,6 +1,6 @@
 # SPDX-License-Identifier: GPL-2.0-only
 
-gsidbg-$(CONFIG_DEBUG_FS) += gsi_dbg.o
+gsidbg-$(CONFIG_GSI) += gsi_dbg.o
 obj-$(CONFIG_GSI) += gsi.o gsidbg.o
 
 obj-$(CONFIG_IPA_EMULATION) += gsi_emulation.o
diff --git a/drivers/platform/msm/gsi/gsi.c b/drivers/platform/msm/gsi/gsi.c
index ed8f074..2cec0e1 100644
--- a/drivers/platform/msm/gsi/gsi.c
+++ b/drivers/platform/msm/gsi/gsi.c
@@ -1258,6 +1258,11 @@
 	__gsi_config_gen_irq(props->ee, ~0,
 		~GSI_EE_n_CNTXT_GSI_IRQ_CLR_GSI_BREAK_POINT_BMSK);
 
+	if (gsi_ctx->per.ver == GSI_VER_2_2 || gsi_ctx->per.ver == GSI_VER_2_5
+		|| gsi_ctx->per.ver == GSI_VER_2_7)
+		__gsi_config_glob_irq(props->ee,
+				GSI_EE_n_CNTXT_GLOB_IRQ_EN_GP_INT1_BMSK, 0);
+
 	gsi_writel(props->intr, gsi_ctx->base +
 			GSI_EE_n_CNTXT_INTSET_OFFS(gsi_ctx->per.ee));
 	/* set GSI_TOP_EE_n_CNTXT_MSI_BASE_LSB/MSB to 0 */
@@ -3763,17 +3768,19 @@
 		return -GSI_STATUS_UNSUPPORTED_OP;
 	}
 
+	spin_lock_irqsave(&gsi_ctx->slock, flags);
+
 	if (atomic_read(&ctx->poll_mode))
 		curr = GSI_CHAN_MODE_POLL;
 	else
 		curr = GSI_CHAN_MODE_CALLBACK;
 
 	if (unlikely(mode == curr)) {
-		GSIDBG("already in requested mode %u chan_hdl=%lu\n",
+		GSIERR("already in requested mode %u chan_hdl=%lu\n",
 				curr, chan_hdl);
+		spin_unlock_irqrestore(&gsi_ctx->slock, flags);
 		return -GSI_STATUS_UNSUPPORTED_OP;
 	}
-	spin_lock_irqsave(&gsi_ctx->slock, flags);
 	if (curr == GSI_CHAN_MODE_CALLBACK &&
 			mode == GSI_CHAN_MODE_POLL) {
 		__gsi_config_ieob_irq(gsi_ctx->per.ee, 1 << ctx->evtr->id, 0);
@@ -4147,6 +4154,10 @@
 	}
 
 	mutex_lock(&gsi_ctx->mlock);
+	if (gsi_ctx->per.ver == GSI_VER_2_2 || gsi_ctx->per.ver == GSI_VER_2_7
+		|| gsi_ctx->per.ver == GSI_VER_2_5)
+		__gsi_config_glob_irq(gsi_ctx->per.ee,
+			GSI_EE_n_CNTXT_GLOB_IRQ_EN_GP_INT1_BMSK, ~0);
 	reinit_completion(&gsi_ctx->gen_ee_cmd_compl);
 
 	/* invalidate the response */
@@ -4192,6 +4203,10 @@
 	res = GSI_STATUS_SUCCESS;
 	*code = gsi_ctx->scratch.word0.s.generic_ee_cmd_return_code;
 free_lock:
+	if (gsi_ctx->per.ver == GSI_VER_2_2 || gsi_ctx->per.ver == GSI_VER_2_7
+		|| gsi_ctx->per.ver == GSI_VER_2_5)
+		__gsi_config_glob_irq(gsi_ctx->per.ee,
+			GSI_EE_n_CNTXT_GLOB_IRQ_EN_GP_INT1_BMSK, 0);
 	mutex_unlock(&gsi_ctx->mlock);
 
 	return res;
@@ -4214,6 +4229,10 @@
 		return gsi_alloc_ap_channel(chan_idx);
 
 	mutex_lock(&gsi_ctx->mlock);
+	if (gsi_ctx->per.ver == GSI_VER_2_2 || gsi_ctx->per.ver == GSI_VER_2_7
+		|| gsi_ctx->per.ver == GSI_VER_2_5)
+		__gsi_config_glob_irq(gsi_ctx->per.ee,
+			GSI_EE_n_CNTXT_GLOB_IRQ_EN_GP_INT1_BMSK, ~0);
 	reinit_completion(&gsi_ctx->gen_ee_cmd_compl);
 
 	/* invalidate the response */
@@ -4261,6 +4280,10 @@
 	res = GSI_STATUS_SUCCESS;
 	*code = gsi_ctx->scratch.word0.s.generic_ee_cmd_return_code;
 free_lock:
+	if (gsi_ctx->per.ver == GSI_VER_2_2 || gsi_ctx->per.ver == GSI_VER_2_7
+		|| gsi_ctx->per.ver == GSI_VER_2_5)
+		__gsi_config_glob_irq(gsi_ctx->per.ee,
+			GSI_EE_n_CNTXT_GLOB_IRQ_EN_GP_INT1_BMSK, 0);
 	mutex_unlock(&gsi_ctx->mlock);
 
 	return res;
@@ -4286,6 +4309,10 @@
 	}
 
 	mutex_lock(&gsi_ctx->mlock);
+	if (gsi_ctx->per.ver == GSI_VER_2_2 || gsi_ctx->per.ver == GSI_VER_2_7
+		|| gsi_ctx->per.ver == GSI_VER_2_5)
+		__gsi_config_glob_irq(gsi_ctx->per.ee,
+			GSI_EE_n_CNTXT_GLOB_IRQ_EN_GP_INT1_BMSK, ~0);
 	reinit_completion(&gsi_ctx->gen_ee_cmd_compl);
 
 	/* invalidate the response */
@@ -4352,6 +4379,10 @@
 	}
 	*code = gsi_ctx->scratch.word0.s.generic_ee_cmd_return_code;
 free_lock:
+	if (gsi_ctx->per.ver == GSI_VER_2_2 || gsi_ctx->per.ver == GSI_VER_2_7
+		|| gsi_ctx->per.ver == GSI_VER_2_5)
+		__gsi_config_glob_irq(gsi_ctx->per.ee,
+			GSI_EE_n_CNTXT_GLOB_IRQ_EN_GP_INT1_BMSK, 0);
 	mutex_unlock(&gsi_ctx->mlock);
 
 	return res;
diff --git a/drivers/platform/msm/gsi/gsi_dbg.c b/drivers/platform/msm/gsi/gsi_dbg.c
index dd5802b..15f0aae 100644
--- a/drivers/platform/msm/gsi/gsi_dbg.c
+++ b/drivers/platform/msm/gsi/gsi_dbg.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2015-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2015-2020, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/completion.h>
@@ -19,7 +19,9 @@
 #define PRT_STAT(fmt, args...) \
 		pr_err(fmt, ## args)
 
+#ifdef CONFIG_DEBUG_FS
 static struct dentry *dent;
+#endif
 static char dbg_buff[4096];
 static void *gsi_ipc_logbuf_low;
 
@@ -670,6 +672,7 @@
 	.write = gsi_enable_ipc_low,
 };
 
+#ifdef CONFIG_DEBUG_FS
 void gsi_debugfs_init(void)
 {
 	static struct dentry *dfile;
@@ -741,4 +744,5 @@
 fail:
 	debugfs_remove_recursive(dent);
 }
+#endif
 
diff --git a/drivers/platform/msm/ipa/ipa_api.c b/drivers/platform/msm/ipa/ipa_api.c
index d9a860b..6392315 100644
--- a/drivers/platform/msm/ipa/ipa_api.c
+++ b/drivers/platform/msm/ipa/ipa_api.c
@@ -98,7 +98,7 @@
 
 #if defined(CONFIG_IPA_EMULATION)
 static bool running_emulation = true;
-#else
+#elif defined(CONFIG_PCI)
 static bool running_emulation;
 #endif
 
@@ -3108,6 +3108,7 @@
 /*                PCIe Version                           */
 /*********************************************************/
 
+#ifdef CONFIG_PCI
 static const struct of_device_id ipa_pci_drv_match[] = {
 	{ .compatible = "qcom,ipa", },
 	{}
@@ -3154,6 +3155,7 @@
 	.shutdown = ipa_pci_shutdown,
 	.err_handler = &ipa_pci_err_handler
 };
+#endif
 
 static int ipa_generic_plat_drv_probe(struct platform_device *pdev_p)
 {
@@ -3738,8 +3740,8 @@
 EXPORT_SYMBOL(ipa_get_prot_id);
 
 static const struct dev_pm_ops ipa_pm_ops = {
-	.suspend = ipa_ap_suspend,
-	.resume_noirq = ipa_ap_resume,
+	.suspend_late = ipa_ap_suspend,
+	.resume_early = ipa_ap_resume,
 };
 
 static struct platform_driver ipa_plat_drv = {
@@ -3755,6 +3757,7 @@
 /*                PCIe Version                           */
 /*********************************************************/
 
+#ifdef CONFIG_PCI
 static int ipa_pci_probe(
 	struct pci_dev             *pci_dev,
 	const struct pci_device_id *ent)
@@ -3822,15 +3825,17 @@
 static void ipa_pci_io_resume(struct pci_dev *pci_dev)
 {
 }
+#endif
 
 static int __init ipa_module_init(void)
 {
 	pr_debug("IPA module init\n");
-
+#ifdef CONFIG_PCI
 	if (running_emulation) {
 		/* Register as a PCI device driver */
 		return pci_register_driver(&ipa_pci_driver);
 	}
+#endif
 	/* Register as a platform device driver */
 	return platform_driver_register(&ipa_plat_drv);
 }
diff --git a/drivers/platform/msm/ipa/ipa_clients/ipa_gsb.c b/drivers/platform/msm/ipa/ipa_clients/ipa_gsb.c
index c8f514a..4102503 100644
--- a/drivers/platform/msm/ipa/ipa_clients/ipa_gsb.c
+++ b/drivers/platform/msm/ipa/ipa_clients/ipa_gsb.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2018-2020, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/debugfs.h>
@@ -57,15 +57,18 @@
 	} while (0)
 
 #define IPA_GSB_MAX_MSG_LEN 512
+
+#ifdef CONFIG_DEBUG_FS
+static struct dentry *dent;
+static struct dentry *dfile_stats;
 static char dbg_buff[IPA_GSB_MAX_MSG_LEN];
+#endif
 
 #define IPA_GSB_SKB_HEADROOM 256
 #define IPA_GSB_SKB_DUMMY_HEADER 42
 #define IPA_GSB_AGGR_BYTE_LIMIT 14
 #define IPA_GSB_AGGR_TIME_LIMIT 1000 /* 1000 us */
 
-static struct dentry *dent;
-static struct dentry *dfile_stats;
 
 /**
  * struct stats - driver statistics,
diff --git a/drivers/platform/msm/ipa/ipa_clients/ipa_mhi_client.c b/drivers/platform/msm/ipa/ipa_clients/ipa_mhi_client.c
index 134cc62..b9f80e2 100644
--- a/drivers/platform/msm/ipa/ipa_clients/ipa_mhi_client.c
+++ b/drivers/platform/msm/ipa/ipa_clients/ipa_mhi_client.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2015-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2015-2020, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/debugfs.h>
@@ -147,11 +147,6 @@
 static struct ipa_mhi_client_ctx *ipa_mhi_client_ctx;
 static DEFINE_MUTEX(mhi_client_general_mutex);
 
-#ifdef CONFIG_DEBUG_FS
-#define IPA_MHI_MAX_MSG_LEN 512
-static char dbg_buff[IPA_MHI_MAX_MSG_LEN];
-static struct dentry *dent;
-
 static char *ipa_mhi_channel_state_str[] = {
 	__stringify(IPA_HW_MHI_CHANNEL_STATE_DISABLE),
 	__stringify(IPA_HW_MHI_CHANNEL_STATE_ENABLE),
@@ -262,6 +257,11 @@
 	return res;
 }
 
+#ifdef CONFIG_DEBUG_FS
+#define IPA_MHI_MAX_MSG_LEN 512
+static char dbg_buff[IPA_MHI_MAX_MSG_LEN];
+static struct dentry *dent;
+
 static int ipa_mhi_print_channel_info(struct ipa_mhi_channel_ctx *channel,
 	char *buff, int len)
 {
@@ -2184,10 +2184,12 @@
 	return 0;
 }
 
+#ifdef CONFIG_DEBUG_FS
 static void ipa_mhi_debugfs_destroy(void)
 {
 	debugfs_remove_recursive(dent);
 }
+#endif
 
 static void ipa_mhi_deregister_pm(void)
 {
diff --git a/drivers/platform/msm/ipa/ipa_clients/ipa_usb.c b/drivers/platform/msm/ipa/ipa_clients/ipa_usb.c
index f00e82a..5cd1809 100644
--- a/drivers/platform/msm/ipa/ipa_clients/ipa_usb.c
+++ b/drivers/platform/msm/ipa/ipa_clients/ipa_usb.c
@@ -16,8 +16,6 @@
 
 #define IPA_USB_DEV_READY_TIMEOUT_MSEC 10000
 
-#define IPA_HOLB_TMR_EN 0x1
-
 /* GSI channels weights */
 #define IPA_USB_DL_CHAN_LOW_WEIGHT 0x5
 #define IPA_USB_UL_CHAN_LOW_WEIGHT 0x4
diff --git a/drivers/platform/msm/ipa/ipa_clients/rndis_ipa.c b/drivers/platform/msm/ipa/ipa_clients/rndis_ipa.c
index 5ef6ee4..f716452 100644
--- a/drivers/platform/msm/ipa/ipa_clients/rndis_ipa.c
+++ b/drivers/platform/msm/ipa/ipa_clients/rndis_ipa.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2013-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2020, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/atomic.h>
@@ -437,8 +437,10 @@
 	},
 	.deaggr = {
 		.deaggr_hdr_len = sizeof(struct rndis_pkt_hdr),
+		.syspipe_err_detection = true,
 		.packet_offset_valid = true,
 		.packet_offset_location = 8,
+		.ignore_min_pkt_err = true,
 		.max_packet_len = 8192, /* Will be overridden*/
 	},
 	.route = {
diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa.c b/drivers/platform/msm/ipa/ipa_v3/ipa.c
index 91a582a..7044c10 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipa.c
+++ b/drivers/platform/msm/ipa/ipa_v3/ipa.c
@@ -58,6 +58,11 @@
 
 #define IPA_SUSPEND_BUSY_TIMEOUT (msecs_to_jiffies(10))
 
+#define DEFAULT_MPM_RING_SIZE_UL 6
+#define DEFAULT_MPM_RING_SIZE_DL 16
+#define DEFAULT_MPM_TETH_AGGR_SIZE 24
+#define DEFAULT_MPM_UC_THRESH_SIZE 4
+
 /*
  * The following for adding code (ie. for EMULATION) not found on x86.
  */
@@ -6178,10 +6183,19 @@
 
 	if (ipa3_ctx->ipa3_hw_mode != IPA_HW_MODE_EMULATION &&
 	    ((ipa3_ctx->platform_type != IPA_PLAT_TYPE_MDM) ||
-	    (ipa3_ctx->ipa_hw_type >= IPA_HW_v3_5)))
-		result = ipa3_pil_load_ipa_fws(IPA_SUBSYSTEM_NAME);
-	else
+	    (ipa3_ctx->ipa_hw_type >= IPA_HW_v3_5))) {
+		/* some targets sharing same lunch option but
+		 * using different signing images, adding support to
+		 * load specific FW image to based on dt entry.
+		 */
+		if (ipa3_ctx->gsi_fw_file_name)
+			result = ipa3_pil_load_ipa_fws(
+						ipa3_ctx->gsi_fw_file_name);
+		else
+			result = ipa3_pil_load_ipa_fws(IPA_SUBSYSTEM_NAME);
+	} else {
 		result = ipa3_manual_load_ipa_fws();
+	}
 
 	IPA_ACTIVE_CLIENTS_DEC_SIMPLE();
 
@@ -6207,7 +6221,11 @@
 		/* Unvoting will happen when uC loaded event received. */
 		ipa3_proxy_clk_vote();
 
-		result = ipa3_pil_load_ipa_fws(IPA_UC_SUBSYSTEM_NAME);
+		if (ipa3_ctx->uc_fw_file_name)
+			result = ipa3_pil_load_ipa_fws(
+						ipa3_ctx->uc_fw_file_name);
+		else
+			result = ipa3_pil_load_ipa_fws(IPA_UC_SUBSYSTEM_NAME);
 		if (result) {
 			IPAERR("IPA uC loading process has failed result=%d\n",
 				result);
@@ -6559,6 +6577,40 @@
 	ipa3_ctx->do_ram_collection_on_crash =
 		resource_p->do_ram_collection_on_crash;
 	ipa3_ctx->lan_rx_napi_enable = resource_p->lan_rx_napi_enable;
+	ipa3_ctx->mpm_ring_size_ul_cache = DEFAULT_MPM_RING_SIZE_UL;
+	ipa3_ctx->mpm_ring_size_ul = DEFAULT_MPM_RING_SIZE_UL;
+	ipa3_ctx->mpm_ring_size_dl_cache = DEFAULT_MPM_RING_SIZE_DL;
+	ipa3_ctx->mpm_ring_size_dl = DEFAULT_MPM_RING_SIZE_DL;
+	ipa3_ctx->mpm_teth_aggr_size = DEFAULT_MPM_TETH_AGGR_SIZE;
+	ipa3_ctx->mpm_uc_thresh = DEFAULT_MPM_UC_THRESH_SIZE;
+
+	if (resource_p->gsi_fw_file_name) {
+		ipa3_ctx->gsi_fw_file_name =
+			kzalloc(((strlen(resource_p->gsi_fw_file_name)+1) *
+				sizeof(const char)), GFP_KERNEL);
+		if (ipa3_ctx->gsi_fw_file_name == NULL) {
+			IPAERR_RL("Failed to alloc GSI FW file name\n");
+			result = -ENOMEM;
+			goto fail_gsi_file_alloc;
+		}
+		memcpy(ipa3_ctx->gsi_fw_file_name,
+				(void const *)resource_p->gsi_fw_file_name,
+				strlen(resource_p->gsi_fw_file_name));
+	}
+
+	if (resource_p->uc_fw_file_name) {
+		ipa3_ctx->uc_fw_file_name =
+			kzalloc(((strlen(resource_p->uc_fw_file_name)+1) *
+				sizeof(const char)), GFP_KERNEL);
+		if (ipa3_ctx->uc_fw_file_name == NULL) {
+			IPAERR_RL("Failed to alloc uC FW file name\n");
+			result = -ENOMEM;
+			goto fail_uc_file_alloc;
+		}
+		memcpy(ipa3_ctx->uc_fw_file_name,
+			(void const *)resource_p->uc_fw_file_name,
+			strlen(resource_p->uc_fw_file_name));
+	}
 
 	if (ipa3_ctx->secure_debug_check_action == USE_SCM) {
 		if (ipa_is_mem_dump_allowed())
@@ -7044,6 +7096,9 @@
 fail_tz_unlock_reg:
 	if (ipa3_ctx->logbuf)
 		ipc_log_context_destroy(ipa3_ctx->logbuf);
+fail_uc_file_alloc:
+	kfree(ipa3_ctx->gsi_fw_file_name);
+fail_gsi_file_alloc:
 	kfree(ipa3_ctx);
 	ipa3_ctx = NULL;
 fail_mem_ctx:
@@ -7329,7 +7384,18 @@
 	IPADBG(": Enable LAN rx NAPI = %s\n",
 		ipa_drv_res->lan_rx_napi_enable
 		? "True" : "False");
-
+	result = of_property_read_string(pdev->dev.of_node,
+			"qcom,use-gsi-ipa-fw", &ipa_drv_res->gsi_fw_file_name);
+	if (!result)
+		IPADBG("GSI IPA FW name %s\n", ipa_drv_res->gsi_fw_file_name);
+	else
+		IPADBG("GSI IPA FW file not defined. Using default one\n");
+	result = of_property_read_string(pdev->dev.of_node,
+			"qcom,use-uc-ipa-fw", &ipa_drv_res->uc_fw_file_name);
+	if (!result)
+		IPADBG("uC IPA FW name = %s\n", ipa_drv_res->uc_fw_file_name);
+	else
+		IPADBG("uC IPA FW file not defined. Using default one\n");
 	/* Get IPA wrapper address */
 	resource = platform_get_resource_byname(pdev, IORESOURCE_MEM,
 			"ipa-base");
@@ -8494,6 +8560,7 @@
  *            PCIe Version
  *************************************************************/
 
+#ifdef CONFIG_PCI
 int ipa3_pci_drv_probe(
 	struct pci_dev            *pci_dev,
 	struct ipa_api_controller *api_ctrl,
@@ -8653,6 +8720,7 @@
 
 	return result;
 }
+#endif
 
 /*
  * The following returns transport register memory location and
diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_client.c b/drivers/platform/msm/ipa/ipa_v3/ipa_client.c
index a1e7e4a..36c18e5 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipa_client.c
+++ b/drivers/platform/msm/ipa/ipa_v3/ipa_client.c
@@ -13,8 +13,6 @@
  * These values were determined empirically and shows good E2E bi-
  * directional throughputs
  */
-#define IPA_HOLB_TMR_EN 0x1
-#define IPA_HOLB_TMR_DIS 0x0
 #define IPA_POLL_AGGR_STATE_RETRIES_NUM 3
 #define IPA_POLL_AGGR_STATE_SLEEP_MSEC 1
 
@@ -1631,6 +1629,8 @@
 	int result = -EFAULT;
 	enum gsi_status gsi_res;
 	enum ipa_client_type client_type;
+	struct ipa_ep_cfg_holb holb_cfg;
+	int res = 0;
 
 	IPADBG("entry\n");
 	if (clnt_hdl >= ipa3_ctx->ipa_num_pipes  ||
@@ -1641,6 +1641,23 @@
 
 	ep = &ipa3_ctx->ep[clnt_hdl];
 	client_type = ipa3_get_client_mapping(clnt_hdl);
+	/* Disable HOLB on MHIP RMNET CONS before starting
+	 * USB PROD pipe
+	 */
+	if (ipa3_is_mhip_offload_enabled() &&
+		client_type == IPA_CLIENT_USB_PROD) {
+		memset(&holb_cfg, 0, sizeof(struct ipa_ep_cfg_holb));
+		holb_cfg.en = IPA_HOLB_TMR_DIS;
+		holb_cfg.tmr_val = 0;
+		IPADBG("Disabling HOLB on RMNET CONS pipe");
+		res = ipa3_cfg_ep_holb(ipa3_get_ep_mapping(
+				IPA_CLIENT_MHI_PRIME_RMNET_CONS), &holb_cfg);
+		if (res) {
+			IPAERR("Disable HOLB failed ep:%lu\n",
+				ipa3_get_ep_mapping(
+					IPA_CLIENT_MHI_PRIME_RMNET_CONS));
+		}
+	}
 	if (!ep->keep_ipa_awake)
 		IPA_ACTIVE_CLIENTS_INC_EP(client_type);
 
diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_debugfs.c b/drivers/platform/msm/ipa/ipa_v3/ipa_debugfs.c
index ccf0d26..bcf58a7 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipa_debugfs.c
+++ b/drivers/platform/msm/ipa/ipa_v3/ipa_debugfs.c
@@ -378,6 +378,129 @@
 	return simple_read_from_buffer(ubuf, count, ppos, dbg_buff, nbytes);
 }
 
+static ssize_t ipa3_read_mpm_ring_size_dl(struct file *file, char __user *ubuf,
+	size_t count, loff_t *ppos)
+{
+	int nbytes;
+
+	nbytes = scnprintf(dbg_buff, IPA_MAX_MSG_LEN,
+			"IPA_MPM_RING_SIZE_DL = %d\n",
+			ipa3_ctx->mpm_ring_size_dl);
+
+	return simple_read_from_buffer(ubuf, count, ppos, dbg_buff, nbytes);
+}
+
+static ssize_t ipa3_read_mpm_ring_size_ul(struct file *file, char __user *ubuf,
+	size_t count, loff_t *ppos)
+{
+	int nbytes;
+
+	nbytes = scnprintf(dbg_buff, IPA_MAX_MSG_LEN,
+			"IPA_MPM_RING_SIZE_UL = %d\n",
+			ipa3_ctx->mpm_ring_size_ul);
+
+	return simple_read_from_buffer(ubuf, count, ppos, dbg_buff, nbytes);
+}
+
+static ssize_t ipa3_read_mpm_uc_thresh(struct file *file, char __user *ubuf,
+	size_t count, loff_t *ppos)
+{
+	int nbytes;
+
+	nbytes = scnprintf(dbg_buff, IPA_MAX_MSG_LEN,
+			"IPA_MPM_UC_THRESH = %d\n", ipa3_ctx->mpm_uc_thresh);
+
+	return simple_read_from_buffer(ubuf, count, ppos, dbg_buff, nbytes);
+}
+
+static ssize_t ipa3_read_mpm_teth_aggr_size(struct file *file,
+	char __user *ubuf, size_t count, loff_t *ppos)
+{
+	int nbytes;
+
+	nbytes = scnprintf(dbg_buff, IPA_MAX_MSG_LEN,
+			"IPA_MPM_TETH_AGGR_SIZE = %d\n",
+			ipa3_ctx->mpm_teth_aggr_size);
+
+	return simple_read_from_buffer(ubuf, count, ppos, dbg_buff, nbytes);
+}
+
+static ssize_t ipa3_write_mpm_ring_size_dl(struct file *file,
+	const char __user *buf,
+	size_t count, loff_t *ppos)
+{
+	s8 option = 0;
+	int ret;
+
+	ret = kstrtos8_from_user(buf, count, 0, &option);
+	if (ret)
+		return ret;
+	/* as option is type s8, max it can take is 127 */
+	if ((option > 0) && (option <= IPA_MPM_MAX_RING_LEN))
+		ipa3_ctx->mpm_ring_size_dl = option;
+	else
+		IPAERR("Invalid dl ring size =%d: range is 1 to %d\n",
+			option, IPA_MPM_MAX_RING_LEN);
+	return count;
+}
+
+static ssize_t ipa3_write_mpm_ring_size_ul(struct file *file,
+	const char __user *buf,
+	size_t count, loff_t *ppos)
+{
+	s8 option = 0;
+	int ret;
+
+	ret = kstrtos8_from_user(buf, count, 0, &option);
+	if (ret)
+		return ret;
+	/* as option type is s8, max it can take is 127 */
+	if ((option > 0) && (option <= IPA_MPM_MAX_RING_LEN))
+		ipa3_ctx->mpm_ring_size_ul = option;
+	else
+		IPAERR("Invalid ul ring size =%d: range is only 1 to %d\n",
+			option, IPA_MPM_MAX_RING_LEN);
+	return count;
+}
+
+static ssize_t ipa3_write_mpm_uc_thresh(struct file *file,
+	const char __user *buf,
+	size_t count, loff_t *ppos)
+{
+	s8 option = 0;
+	int ret;
+
+	ret = kstrtos8_from_user(buf, count, 0, &option);
+	if (ret)
+		return ret;
+	/* as option type is s8, max it can take is 127 */
+	if ((option > 0) && (option <= IPA_MPM_MAX_UC_THRESH))
+		ipa3_ctx->mpm_uc_thresh = option;
+	else
+		IPAERR("Invalid ul ring size =%d: range is only 1 to %d\n",
+			option, IPA_MPM_MAX_UC_THRESH);
+	return count;
+}
+
+static ssize_t ipa3_write_mpm_teth_aggr_size(struct file *file,
+	const char __user *buf,
+	size_t count, loff_t *ppos)
+{
+	s8 option = 0;
+	int ret;
+
+	ret = kstrtos8_from_user(buf, count, 0, &option);
+	if (ret)
+		return ret;
+	/* as option type is s8, max it can take is 127 */
+	if ((option > 0) && (option <= IPA_MAX_TETH_AGGR_BYTE_LIMIT))
+		ipa3_ctx->mpm_teth_aggr_size = option;
+	else
+		IPAERR("Invalid ul ring size =%d: range is only 1 to %d\n",
+			option, IPA_MAX_TETH_AGGR_BYTE_LIMIT);
+	return count;
+}
+
 static ssize_t ipa3_read_hdr(struct file *file, char __user *ubuf, size_t count,
 		loff_t *ppos)
 {
@@ -2571,6 +2694,26 @@
 			.write = ipa3_write_keep_awake,
 		}
 	}, {
+		"mpm_ring_size_dl", IPA_READ_WRITE_MODE, NULL, {
+			.read = ipa3_read_mpm_ring_size_dl,
+			.write = ipa3_write_mpm_ring_size_dl,
+		}
+	}, {
+		"mpm_ring_size_ul", IPA_READ_WRITE_MODE, NULL, {
+			.read = ipa3_read_mpm_ring_size_ul,
+			.write = ipa3_write_mpm_ring_size_ul,
+		}
+	}, {
+		"mpm_uc_thresh", IPA_READ_WRITE_MODE, NULL, {
+			.read = ipa3_read_mpm_uc_thresh,
+			.write = ipa3_write_mpm_uc_thresh,
+		}
+	}, {
+		"mpm_teth_aggr_size", IPA_READ_WRITE_MODE, NULL, {
+			.read = ipa3_read_mpm_teth_aggr_size,
+			.write = ipa3_write_mpm_teth_aggr_size,
+		}
+	}, {
 		"holb", IPA_WRITE_ONLY_MODE, NULL, {
 			.write = ipa3_write_ep_holb,
 		}
@@ -2820,6 +2963,15 @@
 EXPORT_SYMBOL(ipa_debugfs_get_root);
 
 #else /* !CONFIG_DEBUG_FS */
+#define INVALID_NO_OF_CHAR (-1)
 void ipa3_debugfs_init(void) {}
 void ipa3_debugfs_remove(void) {}
+int _ipa_read_ep_reg_v3_0(char *buf, int max_len, int pipe)
+{
+	return INVALID_NO_OF_CHAR;
+}
+int _ipa_read_ep_reg_v4_0(char *buf, int max_len, int pipe)
+{
+	return INVALID_NO_OF_CHAR;
+}
 #endif
diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c b/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c
index dea0560..e897ae2 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c
+++ b/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c
@@ -1781,6 +1781,7 @@
 	if (sys->napi_obj) {
 		ipa_pm_activate_sync(sys->pm_hdl);
 		napi_schedule(sys->napi_obj);
+		IPA_STATS_INC_CNT(sys->napi_sch_cnt);
 	} else
 		ipa3_handle_rx(sys);
 }
@@ -4364,6 +4365,7 @@
 	clk_off = ipa_pm_activate(sys->pm_hdl);
 	if (!clk_off && sys->napi_obj) {
 		napi_schedule(sys->napi_obj);
+		IPA_STATS_INC_CNT(sys->napi_sch_cnt);
 		return;
 	}
 	queue_work(sys->wq, &sys->work);
@@ -5006,6 +5008,7 @@
 	 */
 	if (cnt < weight && ep->sys->len > IPA_DEFAULT_SYS_YELLOW_WM) {
 		napi_complete(ep->sys->napi_obj);
+		IPA_STATS_INC_CNT(ep->sys->napi_comp_cnt);
 		ret = ipa3_rx_switch_to_intr_mode(ep->sys);
 		if (ret == -GSI_STATUS_PENDING_IRQ &&
 				napi_reschedule(ep->sys->napi_obj))
diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_i.h b/drivers/platform/msm/ipa/ipa_v3/ipa_i.h
index fde7001..13bc68a 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipa_i.h
+++ b/drivers/platform/msm/ipa/ipa_v3/ipa_i.h
@@ -62,6 +62,13 @@
 #define IPA_UC_FINISH_MAX 6
 #define IPA_UC_WAIT_MIN_SLEEP 1000
 #define IPA_UC_WAII_MAX_SLEEP 1200
+
+#define IPA_MPM_MAX_RING_LEN 64
+#define IPA_MAX_TETH_AGGR_BYTE_LIMIT 24
+#define IPA_MPM_MAX_UC_THRESH 4
+
+#define IPA_HOLB_TMR_DIS 0x0
+#define IPA_HOLB_TMR_EN 0x1
 /*
  * The transport descriptor size was changed to GSI_CHAN_RE_SIZE_16B, but
  * IPA users still use sps_iovec size as FIFO element size.
@@ -211,6 +218,7 @@
 #define IPA3_ACTIVE_CLIENTS_LOG_NAME_LEN 40
 #define SMEM_IPA_FILTER_TABLE 497
 
+
 enum {
 	SMEM_APPS,
 	SMEM_MODEM,
@@ -1032,6 +1040,8 @@
 	struct workqueue_struct *repl_wq;
 	struct ipa3_status_stats *status_stat;
 	u32 pm_hdl;
+	unsigned int napi_sch_cnt;
+	unsigned int napi_comp_cnt;
 	/* ordering is important - other immutable fields go below */
 };
 
@@ -1817,6 +1827,12 @@
  * @uc_wigig_ctx: WIGIG specific fields for uC interface
  * @ipa_num_pipes: The number of pipes used by IPA HW
  * @skip_uc_pipe_reset: Indicates whether pipe reset via uC needs to be avoided
+ * @mpm_ring_size_dl_cache: To cache the dl ring size configured previously
+ * @mpm_ring_size_dl: MHIP all DL pipe's ring size
+ * @mpm_ring_size_ul_cache: To cache the ul ring size configured previously
+ * @mpm_ring_size_ul: MHIP all UL pipe's ring size
+ * @mpm_teth_aggr_size: MHIP teth aggregation byte size
+ * @mpm_uc_thresh: uc threshold for enabling uc flow control
  * @ipa_client_apps_wan_cons_agg_gro: RMNET_IOCTL_INGRESS_FORMAT_AGG_DATA
  * @apply_rg10_wa: Indicates whether to use register group 10 workaround
  * @gsi_ch20_wa: Indicates whether to apply GSI physical channel 20 workaround
@@ -1837,6 +1853,8 @@
  * @lan_ndev: dummy netdev for LAN rx NAPI
  * @napi_lan_rx: NAPI object for LAN rx
  * @coal_cmd_pyld: holds the coslescing close frame command payload
+ * @gsi_fw_file_name: GSI IPA fw file name
+ * @uc_fw_file_name: uC IPA fw file name
  */
 struct ipa3_context {
 	struct ipa3_char_device_context cdev;
@@ -1952,6 +1970,12 @@
 	u32 wan_rx_ring_size;
 	u32 lan_rx_ring_size;
 	bool skip_uc_pipe_reset;
+	int mpm_ring_size_dl_cache;
+	int mpm_ring_size_dl;
+	int mpm_ring_size_ul_cache;
+	int mpm_ring_size_ul;
+	int mpm_teth_aggr_size;
+	int mpm_uc_thresh;
 	unsigned long gsi_dev_hdl;
 	u32 ee;
 	bool apply_rg10_wa;
@@ -2010,6 +2034,8 @@
 	struct napi_struct napi_lan_rx;
 	struct ipahal_imm_cmd_pyld *coal_cmd_pyld;
 	struct ipa3_app_clock_vote app_clock_vote;
+	char *gsi_fw_file_name;
+	char *uc_fw_file_name;
 };
 
 struct ipa3_plat_drv_res {
@@ -2058,6 +2084,8 @@
 	bool ipa_endp_delay_wa;
 	bool skip_ieob_mask_wa;
 	bool ipa_wan_skb_page;
+	const char *gsi_fw_file_name;
+	const char *uc_fw_file_name;
 };
 
 /**
@@ -3198,4 +3226,5 @@
 int ipa3_uc_send_disable_flow_control(void);
 int ipa3_uc_send_update_flow_control(uint32_t bitmask,
 	uint8_t  add_delete);
+int ipa3_qmi_reg_dereg_for_bw(bool bw_reg);
 #endif /* _IPA3_I_H_ */
diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_mpm.c b/drivers/platform/msm/ipa/ipa_v3/ipa_mpm.c
index d6c668a..f2cdd9b 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipa_mpm.c
+++ b/drivers/platform/msm/ipa/ipa_v3/ipa_mpm.c
@@ -15,6 +15,7 @@
 #include <linux/gfp.h>
 #include "../ipa_common_i.h"
 #include "ipa_i.h"
+#include "ipa_qmi_service.h"
 
 #define IPA_MPM_DRV_NAME "ipa_mpm"
 
@@ -55,17 +56,12 @@
 
 #define IPA_MPM_MAX_MHIP_CHAN 3
 
-#define IPA_MPM_NUM_RING_DESC 6
-#define IPA_MPM_RING_LEN IPA_MPM_NUM_RING_DESC
-
 #define IPA_MPM_MHI_HOST_UL_CHANNEL 4
 #define IPA_MPM_MHI_HOST_DL_CHANNEL  5
-#define TETH_AGGR_TIME_LIMIT 10000 /* 10ms */
+#define TETH_AGGR_TIME_LIMIT 1000 /* 1ms */
 #define TETH_AGGR_BYTE_LIMIT 24
 #define TETH_AGGR_DL_BYTE_LIMIT 16
 #define TRE_BUFF_SIZE 32768
-#define IPA_HOLB_TMR_EN 0x1
-#define IPA_HOLB_TMR_DIS 0x0
 #define RNDIS_IPA_DFLT_RT_HDL 0
 #define IPA_POLL_FOR_EMPTINESS_NUM 50
 #define IPA_POLL_FOR_EMPTINESS_SLEEP_USEC 20
@@ -75,6 +71,7 @@
 #define IPA_MPM_FLOW_CTRL_ADD 1
 #define IPA_MPM_FLOW_CTRL_DELETE 0
 #define IPA_MPM_NUM_OF_INIT_CMD_DESC 2
+#define IPA_UC_FC_DB_ADDR 0x1EC2088
 
 enum mhip_re_type {
 	MHIP_RE_XFER = 0x2,
@@ -356,17 +353,17 @@
 struct producer_rings {
 	struct mhi_p_desc *tr_va;
 	struct mhi_p_desc *er_va;
-	void *tr_buff_va[IPA_MPM_RING_LEN];
+	void *tr_buff_va[IPA_MPM_MAX_RING_LEN];
 	dma_addr_t tr_pa;
 	dma_addr_t er_pa;
-	dma_addr_t tr_buff_c_iova[IPA_MPM_RING_LEN];
+	dma_addr_t tr_buff_c_iova[IPA_MPM_MAX_RING_LEN];
 	/*
 	 * The iova generated for AP CB,
 	 * used only for dma_map_single to flush the cache.
 	 */
 	dma_addr_t ap_iova_er;
 	dma_addr_t ap_iova_tr;
-	dma_addr_t ap_iova_buff[IPA_MPM_RING_LEN];
+	dma_addr_t ap_iova_buff[IPA_MPM_MAX_RING_LEN];
 };
 
 struct ipa_mpm_mhi_driver {
@@ -400,13 +397,17 @@
 	atomic_t flow_ctrl_mask;
 	atomic_t adpl_over_usb_available;
 	atomic_t adpl_over_odl_available;
+	atomic_t active_teth_count;
+	atomic_t voted_before;
 	struct device *parent_pdev;
 	struct ipa_smmu_cb_ctx carved_smmu_cb;
 	struct device *mhi_parent_dev;
+	/* for ipa_uc_fc_db*/
+	phys_addr_t uc_fc_db;
+	unsigned long uc_fc_db_iova;
 };
 
 #define IPA_MPM_DESC_SIZE (sizeof(struct mhi_p_desc))
-#define IPA_MPM_RING_TOTAL_SIZE (IPA_MPM_RING_LEN * IPA_MPM_DESC_SIZE)
 /* WA: Make the IPA_MPM_PAGE_SIZE from 16k (next power of ring size) to
  * 32k. This is to make sure IOMMU map happens for the same size
  * for all TR/ER and doorbells.
@@ -665,8 +666,14 @@
 		cb->next_addr = iova_p + size_p;
 		iova = iova_p;
 	} else {
-		iova = dma_map_single(ipa3_ctx->pdev, va_addr,
-					IPA_MPM_RING_TOTAL_SIZE, dir);
+		if (dir == DMA_TO_HIPA)
+			iova = dma_map_single(ipa3_ctx->pdev, va_addr,
+				ipa3_ctx->mpm_ring_size_dl *
+				IPA_MPM_DESC_SIZE, dir);
+		else
+			iova = dma_map_single(ipa3_ctx->pdev, va_addr,
+				ipa3_ctx->mpm_ring_size_ul *
+				IPA_MPM_DESC_SIZE, dir);
 
 		if (dma_mapping_error(ipa3_ctx->pdev, iova)) {
 			IPA_MPM_ERR("dma_map_single failure for entry\n");
@@ -741,8 +748,14 @@
 		dma_unmap_single(ipa3_ctx->pdev, ap_cb_iova,
 			size_p, dir);
 	} else {
-		dma_unmap_single(ipa3_ctx->pdev, ap_cb_iova,
-			IPA_MPM_RING_TOTAL_SIZE, dir);
+		if (dir == DMA_TO_HIPA)
+			dma_unmap_single(ipa3_ctx->pdev, ap_cb_iova,
+				ipa3_ctx->mpm_ring_size_dl *
+				IPA_MPM_DESC_SIZE, dir);
+		else
+			dma_unmap_single(ipa3_ctx->pdev, ap_cb_iova,
+				ipa3_ctx->mpm_ring_size_ul *
+				IPA_MPM_DESC_SIZE, dir);
 	}
 }
 
@@ -894,6 +907,7 @@
 	int i, k;
 	int result;
 	struct ipa3_ep_context *ep;
+	int ring_size;
 
 	if (mhip_client == IPA_CLIENT_MAX)
 		goto fail_gen;
@@ -917,8 +931,17 @@
 
 	IPA_MPM_FUNC_ENTRY();
 
-	if (IPA_MPM_RING_TOTAL_SIZE > PAGE_SIZE) {
-		IPA_MPM_ERR("Ring Size / allocation mismatch\n");
+	if (IPA_CLIENT_IS_PROD(mhip_client) &&
+		(ipa3_ctx->mpm_ring_size_dl *
+			IPA_MPM_DESC_SIZE > PAGE_SIZE)) {
+		IPA_MPM_ERR("Ring Size dl / allocation mismatch\n");
+		ipa_assert();
+	}
+
+	if (IPA_CLIENT_IS_PROD(mhip_client) &&
+		(ipa3_ctx->mpm_ring_size_ul *
+			IPA_MPM_DESC_SIZE > PAGE_SIZE)) {
+		IPA_MPM_ERR("Ring Size ul / allocation mismatch\n");
 		ipa_assert();
 	}
 
@@ -939,7 +962,12 @@
 		DMA_TO_HIPA : DMA_FROM_HIPA;
 
 	/* allocate transfer ring elements */
-	for (i = 1, k = 1; i < IPA_MPM_RING_LEN; i++, k++) {
+	if (IPA_CLIENT_IS_PROD(mhip_client))
+		ring_size = ipa3_ctx->mpm_ring_size_dl;
+	else
+		ring_size = ipa3_ctx->mpm_ring_size_ul;
+
+	for (i = 1, k = 1; i < ring_size; i++, k++) {
 		buff_va = kzalloc(TRE_BUFF_SIZE, GFP_KERNEL);
 		if (!buff_va)
 			goto fail_buff_alloc;
@@ -1061,7 +1089,7 @@
 	gsi_params.evt_ring_params.intr = GSI_INTR_MSI;
 	gsi_params.evt_ring_params.re_size = GSI_EVT_RING_RE_SIZE_16B;
 	gsi_params.evt_ring_params.ring_len =
-		(IPA_MPM_RING_LEN) * GSI_EVT_RING_RE_SIZE_16B;
+		(ring_size) * GSI_EVT_RING_RE_SIZE_16B;
 	gsi_params.evt_ring_params.ring_base_vaddr = NULL;
 	gsi_params.evt_ring_params.int_modt = 0;
 	gsi_params.evt_ring_params.int_modc = 0;
@@ -1087,7 +1115,7 @@
 	/* chan_id is set in ipa3_request_gsi_channel() */
 	gsi_params.chan_params.re_size = GSI_CHAN_RE_SIZE_16B;
 	gsi_params.chan_params.ring_len =
-		(IPA_MPM_RING_LEN) * GSI_EVT_RING_RE_SIZE_16B;
+		(ring_size) * GSI_EVT_RING_RE_SIZE_16B;
 	gsi_params.chan_params.ring_base_vaddr = NULL;
 	gsi_params.chan_params.use_db_eng = GSI_CHAN_DIRECT_MODE;
 	gsi_params.chan_params.max_prefetch = GSI_ONE_PREFETCH_SEG;
@@ -1187,6 +1215,7 @@
 	int i;
 	int ipa_ep_idx;
 	int result;
+	int ring_size;
 
 	IPA_MPM_FUNC_ENTRY();
 
@@ -1274,7 +1303,12 @@
 	}
 
 	/* deallocate/Unmap transfer ring buffers */
-	for (i = 1; i < IPA_MPM_RING_LEN; i++) {
+	if (IPA_CLIENT_IS_PROD(mhip_client))
+		ring_size = ipa3_ctx->mpm_ring_size_dl_cache;
+	else
+		ring_size = ipa3_ctx->mpm_ring_size_ul_cache;
+
+	for (i = 1; i < ring_size; i++) {
 		if (IPA_CLIENT_IS_PROD(mhip_client)) {
 			ipa_mpm_smmu_unmap(
 			(dma_addr_t)
@@ -1905,6 +1939,10 @@
 		case MHIP_STATUS_SUCCESS:
 			ipa_mpm_ctx->md[probe_id].teth_state =
 						IPA_MPM_TETH_CONNECTED;
+			/* Register for BW indication from Q6 */
+			if (!ipa3_qmi_reg_dereg_for_bw(true))
+				IPA_MPM_ERR(
+					"Failed rgstring for QMIBW Ind, might be SSR");
 			break;
 		case MHIP_STATUS_EP_NOT_READY:
 		case MHIP_STATUS_NO_OP:
@@ -1953,6 +1991,18 @@
 					ret);
 			ipa_assert();
 		}
+
+		/* De-register for BW indication from Q6*/
+		if (atomic_read(&ipa_mpm_ctx->active_teth_count) >= 1) {
+			if (!ipa3_qmi_reg_dereg_for_bw(false))
+				IPA_MPM_DBG(
+					"Failed De-rgstrng QMI BW Indctn,might be SSR");
+		} else {
+			IPA_MPM_ERR(
+				"Active teth count is %d",
+				atomic_read(&ipa_mpm_ctx->active_teth_count));
+		}
+
 		/*
 		 * Make sure to stop Device side channels before
 		 * stopping Host side UL channels. This is to make
@@ -2187,19 +2237,31 @@
 			IPA_MPM_MHI_HOST_UL_CHANNEL;
 		ch->chan_props.ch_ctx.erindex =
 			mhi_dev->ul_event_id;
-		ch->chan_props.ch_ctx.rlen = (IPA_MPM_RING_LEN) *
+		ch->chan_props.ch_ctx.rlen = (ipa3_ctx->mpm_ring_size_ul) *
 			GSI_EVT_RING_RE_SIZE_16B;
 		/* Store Event properties */
 		ch->evt_props.ev_ctx.update_rp_modc = 1;
 		ch->evt_props.ev_ctx.update_rp_intmodt = 0;
 		ch->evt_props.ev_ctx.ertype = 1;
-		ch->evt_props.ev_ctx.rlen = (IPA_MPM_RING_LEN) *
+		ch->evt_props.ev_ctx.rlen = (ipa3_ctx->mpm_ring_size_ul) *
 			GSI_EVT_RING_RE_SIZE_16B;
 		ch->evt_props.ev_ctx.buff_size = TRE_BUFF_SIZE;
 		ch->evt_props.device_db =
 			ipa_mpm_ctx->dev_info.erdb_base +
 			ch->chan_props.ch_ctx.erindex * 8;
 
+		/* Map uc-db and put in reserve2 */
+		if (probe_id == IPA_MPM_MHIP_CH_ID_0) {
+			/* map uc-fc-mb */
+			ipa_mpm_ctx->uc_fc_db_iova =
+				ipa_mpm_smmu_map_doorbell(MHIP_SMMU_DOMAIN_PCIE,
+				ipa_mpm_ctx->uc_fc_db);
+			ch->chan_props.ch_ctx.reserved2 =
+				ipa_mpm_ctx->uc_fc_db_iova;
+			IPA_MPM_DBG("configure reserved2 %lx\n",
+				ch->chan_props.ch_ctx.reserved2);
+		}
+
 		/* connect Host GSI pipes with MHI' protocol */
 		ret = ipa_mpm_connect_mhip_gsi_pipe(ul_prod,
 			probe_id, &ul_out_params);
@@ -2241,13 +2303,13 @@
 		ch->chan_props.ch_ctx.chtype =
 			IPA_MPM_MHI_HOST_DL_CHANNEL;
 		ch->chan_props.ch_ctx.erindex = mhi_dev->dl_event_id;
-		ch->chan_props.ch_ctx.rlen = (IPA_MPM_RING_LEN) *
+		ch->chan_props.ch_ctx.rlen = (ipa3_ctx->mpm_ring_size_dl) *
 			GSI_EVT_RING_RE_SIZE_16B;
 		/* Store Event properties */
 		ch->evt_props.ev_ctx.update_rp_modc = 0;
 		ch->evt_props.ev_ctx.update_rp_intmodt = 0;
 		ch->evt_props.ev_ctx.ertype = 1;
-		ch->evt_props.ev_ctx.rlen = (IPA_MPM_RING_LEN) *
+		ch->evt_props.ev_ctx.rlen = (ipa3_ctx->mpm_ring_size_dl) *
 			GSI_EVT_RING_RE_SIZE_16B;
 		ch->evt_props.ev_ctx.buff_size = TRE_BUFF_SIZE;
 		ch->evt_props.device_db =
@@ -2319,7 +2381,8 @@
 			(phys_addr_t)(ul_out_params.db_reg_phs_addr_lsb), 4);
 
 		wp_addr = ipa_mpm_ctx->md[probe_id].ul_prod_ring.tr_pa +
-			((IPA_MPM_RING_LEN - 1) * GSI_CHAN_RE_SIZE_16B);
+			((ipa3_ctx->mpm_ring_size_ul - 1) *
+			GSI_CHAN_RE_SIZE_16B);
 
 		iowrite32(wp_addr, db_addr);
 
@@ -2352,7 +2415,8 @@
 		db_addr = ioremap((phys_addr_t)(evt_ring_db_addr_low), 4);
 
 		wp_addr = ipa_mpm_ctx->md[probe_id].ul_prod_ring.er_pa +
-			((IPA_MPM_RING_LEN + 1) * GSI_EVT_RING_RE_SIZE_16B);
+			((ipa3_ctx->mpm_ring_size_ul + 1) *
+			GSI_EVT_RING_RE_SIZE_16B);
 		IPA_MPM_DBG("Host UL ER  DB = 0X%pK, wp_addr = 0X%0x",
 			db_addr, wp_addr);
 
@@ -2365,7 +2429,8 @@
 			4);
 
 		wp_addr = ipa_mpm_ctx->md[probe_id].ul_prod_ring.tr_pa +
-			((IPA_MPM_RING_LEN + 1) * GSI_EVT_RING_RE_SIZE_16B);
+			((ipa3_ctx->mpm_ring_size_ul + 1) *
+			GSI_EVT_RING_RE_SIZE_16B);
 
 		iowrite32(wp_addr, db_addr);
 		iounmap(db_addr);
@@ -2378,7 +2443,8 @@
 		4);
 
 		wp_addr = ipa_mpm_ctx->md[probe_id].dl_prod_ring.tr_pa +
-			((IPA_MPM_RING_LEN - 1) * GSI_CHAN_RE_SIZE_16B);
+			((ipa3_ctx->mpm_ring_size_dl - 1) *
+			GSI_CHAN_RE_SIZE_16B);
 
 		IPA_MPM_DBG("Device DL TR  DB = 0X%pK, wp_addr = 0X%0x",
 			db_addr, wp_addr);
@@ -2399,7 +2465,8 @@
 		4);
 
 		wp_addr = ipa_mpm_ctx->md[probe_id].dl_prod_ring.er_pa +
-			((IPA_MPM_RING_LEN + 1) * GSI_EVT_RING_RE_SIZE_16B);
+			((ipa3_ctx->mpm_ring_size_dl + 1) *
+			GSI_EVT_RING_RE_SIZE_16B);
 
 		iowrite32(wp_addr, db_addr);
 		IPA_MPM_DBG("Device  UL ER  DB = 0X%pK,wp_addr = 0X%0x",
@@ -2422,7 +2489,8 @@
 		db_addr = ioremap((phys_addr_t)(evt_ring_db_addr_low), 4);
 
 		wp_addr = ipa_mpm_ctx->md[probe_id].dl_prod_ring.tr_pa +
-			((IPA_MPM_RING_LEN + 1) * GSI_EVT_RING_RE_SIZE_16B);
+			((ipa3_ctx->mpm_ring_size_dl + 1) *
+			GSI_EVT_RING_RE_SIZE_16B);
 		iowrite32(wp_addr, db_addr);
 		IPA_MPM_DBG("Host  DL ER  DB = 0X%pK, wp_addr = 0X%0x",
 			db_addr, wp_addr);
@@ -2481,6 +2549,10 @@
 		if (probe_id == IPA_MPM_MHIP_CH_ID_1) {
 			pipe_idx = ipa3_get_ep_mapping(IPA_CLIENT_USB_PROD);
 			ipa3_xdci_ep_delay_rm(pipe_idx);
+			/* Register for BW indication from Q6*/
+			if (!ipa3_qmi_reg_dereg_for_bw(true))
+				IPA_MPM_DBG(
+					"QMI BW reg Req failed,might be SSR");
 		}
 		break;
 	default:
@@ -2511,8 +2583,11 @@
 	if (probe_id == IPA_MPM_MHIP_CH_ID_0) {
 		ipa_ep_idx = ipa3_get_ep_mapping(ul_prod);
 		ep = &ipa3_ctx->ep[ipa_ep_idx];
+		/* not enable threshold based uc-flow-control */
 		ret = ipa3_uc_send_enable_flow_control(ep->gsi_chan_hdl,
-			IPA_MPM_RING_LEN / 4);
+			0);
+		IPA_MPM_DBG("Updated uc threshold to %d",
+			ipa3_ctx->mpm_uc_thresh);
 		if (ret) {
 			IPA_MPM_ERR("Err %d flow control enable\n", ret);
 			goto fail_flow_control;
@@ -2528,7 +2603,14 @@
 		}
 		IPA_MPM_DBG("Flow Control updated for %d", probe_id);
 	}
+	/* cache the current ring-size */
+	ipa3_ctx->mpm_ring_size_ul_cache = ipa3_ctx->mpm_ring_size_ul;
+	ipa3_ctx->mpm_ring_size_dl_cache = ipa3_ctx->mpm_ring_size_dl;
+	IPA_MPM_DBG("Mpm ring size ul/dl %d / %d",
+		ipa3_ctx->mpm_ring_size_ul, ipa3_ctx->mpm_ring_size_dl);
+
 	IPA_MPM_FUNC_EXIT();
+
 	return 0;
 
 fail_gsi_setup:
@@ -2557,9 +2639,14 @@
 		IPA_CLIENT_MHI_PRIME_TETH_CONS;
 	ipa_mpm_pipes[IPA_MPM_MHIP_CH_ID_0].ul_prod.ep_cfg =
 		mhip_ul_teth_ep_cfg;
+	ipa_mpm_pipes[IPA_MPM_MHIP_CH_ID_0].ul_prod.ep_cfg.aggr.aggr_byte_limit
+			= ipa3_ctx->mpm_teth_aggr_size;
 	ipa_mpm_pipes[IPA_MPM_MHIP_CH_ID_0].mhip_client =
 		IPA_MPM_MHIP_TETH;
 
+	IPA_MPM_DBG("Teth Aggregation byte limit =%d\n",
+		ipa3_ctx->mpm_teth_aggr_size);
+
 	/* IPA_MPM_MHIP_CH_ID_1 => MHIP RMNET PIPES */
 	ipa_mpm_pipes[IPA_MPM_MHIP_CH_ID_1].dl_cons.ipa_client =
 		IPA_CLIENT_MHI_PRIME_RMNET_PROD;
@@ -2605,8 +2692,12 @@
 	ipa_mpm_ctx->md[mhip_idx].init_complete = false;
 	mutex_unlock(&ipa_mpm_ctx->md[mhip_idx].mhi_mutex);
 
-	if (mhip_idx == IPA_MPM_MHIP_CH_ID_0)
+	if (mhip_idx == IPA_MPM_MHIP_CH_ID_0) {
 		ipa3_uc_send_disable_flow_control();
+		/* unmap uc-fc-mb */
+		ipa_mpm_smmu_unmap_doorbell(MHIP_SMMU_DOMAIN_PCIE,
+			ipa_mpm_ctx->uc_fc_db_iova);
+	}
 
 	ipa_mpm_mhip_shutdown(mhip_idx);
 
@@ -2618,6 +2709,8 @@
 		ipa_mpm_ctx->carved_smmu_cb.next_addr =
 			ipa_mpm_ctx->carved_smmu_cb.va_start;
 		atomic_set(&ipa_mpm_ctx->pcie_clk_total_cnt, 0);
+		/* Force set to zero during SSR */
+		atomic_set(&ipa_mpm_ctx->active_teth_count, 0);
 		for (mhip_idx = 0;
 			mhip_idx < IPA_MPM_MHIP_CH_ID_MAX; mhip_idx++) {
 			atomic_set(
@@ -2686,12 +2779,7 @@
 			IPA_MPM_DBG("Already out of lpm\n");
 		}
 		break;
-	case MHI_CB_EE_RDDM:
-	case MHI_CB_PENDING_DATA:
-	case MHI_CB_SYS_ERROR:
-	case MHI_CB_FATAL_ERROR:
-	case MHI_CB_EE_MISSION_MODE:
-	case MHI_CB_DTR_SIGNAL:
+	default:
 		IPA_MPM_ERR("unexpected event %d\n", mhi_cb);
 		break;
 	}
@@ -2821,6 +2909,9 @@
 	case MHIP_STATUS_SUCCESS:
 	case MHIP_STATUS_NO_OP:
 		ipa_mpm_change_teth_state(probe_id, IPA_MPM_TETH_CONNECTED);
+		/* Register for BW indication from Q6*/
+		if (!ipa3_qmi_reg_dereg_for_bw(true))
+			IPA_MPM_DBG("Fail regst QMI BW Indctn,might be SSR");
 
 		pipe_idx = ipa3_get_ep_mapping(IPA_CLIENT_USB_PROD);
 
@@ -2962,6 +3053,16 @@
 	case MHIP_STATUS_NO_OP:
 	case MHIP_STATUS_EP_NOT_READY:
 		ipa_mpm_change_teth_state(probe_id, IPA_MPM_TETH_INIT);
+		/* De-register for BW indication from Q6*/
+		if (atomic_read(&ipa_mpm_ctx->active_teth_count) >= 1) {
+			if (!ipa3_qmi_reg_dereg_for_bw(false))
+				IPA_MPM_DBG(
+					"Failed De-rgstrng QMI BW Indctn,might be SSR");
+		} else {
+			IPA_MPM_ERR(
+				"Active tethe count is %d",
+				atomic_read(&ipa_mpm_ctx->active_teth_count));
+		}
 		break;
 	case MHIP_STATUS_FAIL:
 	case MHIP_STATUS_BAD_STATE:
@@ -2983,7 +3084,6 @@
 		IPA_MPM_ERR("Error cloking off PCIe clk, err = %d\n", ret);
 		return ret;
 	}
-
 	ipa_mpm_ctx->md[probe_id].mhip_client = IPA_MPM_MHIP_NONE;
 
 	return ret;
@@ -3090,6 +3190,9 @@
 	ipa_mpm_ctx->dev_info.pdev = pdev;
 	ipa_mpm_ctx->dev_info.dev = &pdev->dev;
 
+	/* uc_fc_fb, might define in dtsi */
+	ipa_mpm_ctx->uc_fc_db = IPA_UC_FC_DB_ADDR;
+
 	ipa_mpm_init_mhip_channel_info();
 
 	if (of_property_read_u32(pdev->dev.of_node, "qcom,mhi-chdb-base",
@@ -3116,6 +3219,8 @@
 	atomic_set(&ipa_mpm_ctx->ipa_clk_total_cnt, 0);
 	atomic_set(&ipa_mpm_ctx->pcie_clk_total_cnt, 0);
 	atomic_set(&ipa_mpm_ctx->flow_ctrl_mask, 0);
+	atomic_set(&ipa_mpm_ctx->active_teth_count, 0);
+	atomic_set(&ipa_mpm_ctx->voted_before, 1);
 
 	for (idx = 0; idx < IPA_MPM_MHIP_CH_ID_MAX; idx++) {
 		ipa_mpm_ctx->md[idx].ul_prod.gsi_state = GSI_INIT;
@@ -3379,6 +3484,53 @@
 	return ret;
 }
 
+int ipa3_qmi_reg_dereg_for_bw(bool bw_reg)
+{
+	int rt;
+
+	if (bw_reg) {
+		atomic_inc(&ipa_mpm_ctx->active_teth_count);
+		if (atomic_read(&ipa_mpm_ctx->active_teth_count) == 1) {
+			rt = ipa3_qmi_req_ind(true);
+			if (rt < 0) {
+				IPA_MPM_ERR("QMI BW regst fail, rt = %d", rt);
+				atomic_dec(&ipa_mpm_ctx->active_teth_count);
+				/* Using voted_before for keeping track of
+				 * request successful or not, so that we don't
+				 * request for devote when tether turned off
+				 */
+				atomic_set(&ipa_mpm_ctx->voted_before, 0);
+				return false;
+			}
+			IPA_MPM_DBG("QMI BW regst success");
+		} else {
+			IPA_MPM_DBG("bw_change to %d no-op, teth_count = %d",
+				bw_reg,
+				atomic_read(&ipa_mpm_ctx->active_teth_count));
+		}
+	} else {
+		atomic_dec(&ipa_mpm_ctx->active_teth_count);
+		if (atomic_read(&ipa_mpm_ctx->active_teth_count) == 0) {
+			if (atomic_read(&ipa_mpm_ctx->voted_before) == 0) {
+				atomic_inc(&ipa_mpm_ctx->active_teth_count);
+				atomic_set(&ipa_mpm_ctx->voted_before, 1);
+				return false;
+			}
+			rt = ipa3_qmi_req_ind(false);
+			if (rt < 0) {
+				IPA_MPM_ERR("QMI BW de-regst fail, rt= %d", rt);
+				return false;
+			}
+			IPA_MPM_DBG("QMI BW De-regst success");
+		} else {
+			IPA_MPM_DBG("bw_change to %d no-op, teth_count = %d",
+				bw_reg,
+				atomic_read(&ipa_mpm_ctx->active_teth_count));
+		}
+	}
+	return true;
+}
+
 late_initcall(ipa_mpm_init);
 MODULE_LICENSE("GPL v2");
 MODULE_DESCRIPTION("MHI Proxy Manager Driver");
diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_qmi_service.c b/drivers/platform/msm/ipa/ipa_v3/ipa_qmi_service.c
index 0ef5ff4..eb453fd 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipa_qmi_service.c
+++ b/drivers/platform/msm/ipa/ipa_v3/ipa_qmi_service.c
@@ -1508,6 +1508,11 @@
 	int rc;
 	struct ipa_master_driver_init_complt_ind_msg_v01 ind;
 
+	if (unlikely(!ipa_q6_clnt)) {
+		IPAWANERR("Invalid q6 clnt.Ignore sending ind.\n");
+		return;
+	}
+
 	rc = kernel_connect(ipa_q6_clnt->sock,
 		(struct sockaddr *) &ipa3_qmi_ctx->server_sq,
 		sizeof(ipa3_qmi_ctx->server_sq),
@@ -1567,6 +1572,11 @@
 		ind.master_driver_init_status.result =
 			IPA_QMI_RESULT_SUCCESS_V01;
 
+		if (unlikely(!ipa3_svc_handle)) {
+			IPAWANERR("Invalid svc handle.Ignore sending ind.\n");
+			return;
+		}
+
 		rc = qmi_send_indication(ipa3_svc_handle,
 			&ipa3_qmi_ctx->client_sq,
 			QMI_IPA_MASTER_DRIVER_INIT_COMPLETE_IND_V01,
@@ -2061,6 +2071,7 @@
 
 	/* replace to right qmap format */
 	aggr_req.aggr_info[1].aggr_type = aggr_enum_type;
+	aggr_req.aggr_info[1].bytes_count = ipa3_ctx->mpm_teth_aggr_size;
 	aggr_req.aggr_info[2].aggr_type = aggr_enum_type;
 	aggr_req.aggr_info[3].aggr_type = aggr_enum_type;
 	aggr_req.aggr_info[4].aggr_type = aggr_enum_type;
@@ -2101,7 +2112,7 @@
 		resp.resp.error, "ipa_mhi_prime_aggr_info_req_msg_v01");
 }
 
-int ipa3_qmi_req_ind(void)
+int ipa3_qmi_req_ind(bool bw_reg)
 {
 	struct ipa_indication_reg_req_msg_v01 req;
 	struct ipa_indication_reg_resp_msg_v01 resp;
@@ -2112,7 +2123,7 @@
 	memset(&resp, 0, sizeof(struct ipa_indication_reg_resp_msg_v01));
 
 	req.bw_change_ind_valid = true;
-	req.bw_change_ind = true;
+	req.bw_change_ind = bw_reg;
 
 	req_desc.max_msg_len =
 		QMI_IPA_INDICATION_REGISTER_REQ_MAX_MSG_LEN_V01;
diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_qmi_service.h b/drivers/platform/msm/ipa/ipa_v3/ipa_qmi_service.h
index 9973ec6..37406c8 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipa_qmi_service.h
+++ b/drivers/platform/msm/ipa/ipa_v3/ipa_qmi_service.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0 */
 /*
- * Copyright (c) 2013-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2020, The Linux Foundation. All rights reserved.
  */
 
 #ifndef IPA_QMI_SERVICE_H
@@ -319,7 +319,7 @@
 int ipa3_qmi_set_aggr_info(
 	enum ipa_aggr_enum_type_v01 aggr_enum_type);
 
-int ipa3_qmi_req_ind(void);
+int ipa3_qmi_req_ind(bool bw_reg);
 
 int ipa3_qmi_stop_data_qouta(void);
 
diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_uc_wdi.c b/drivers/platform/msm/ipa/ipa_v3/ipa_uc_wdi.c
index c0f66ec..2854c1e 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipa_uc_wdi.c
+++ b/drivers/platform/msm/ipa/ipa_v3/ipa_uc_wdi.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2012-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved.
  */
 
 #include "ipa_i.h"
@@ -9,8 +9,6 @@
 #include <linux/mm.h>
 #include "ipa_qmi_service.h"
 
-#define IPA_HOLB_TMR_DIS 0x0
-
 #define IPA_HW_INTERFACE_WDI_VERSION 0x0001
 #define IPA_HW_WDI_RX_MBOX_START_INDEX 48
 #define IPA_HW_WDI_TX_MBOX_START_INDEX 50
diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_utils.c b/drivers/platform/msm/ipa/ipa_v3/ipa_utils.c
index 9703a56..95b059b 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipa_utils.c
+++ b/drivers/platform/msm/ipa/ipa_v3/ipa_utils.c
@@ -65,7 +65,7 @@
 
 #define IPA_FILT_ROUT_HASH_REG_VAL_v4_2 (0x00000000)
 #define IPA_DMA_TASK_FOR_GSI_TIMEOUT_MSEC (15)
-#define IPA_COAL_CLOSE_FRAME_CMD_TIMEOUT_MSEC (500)
+#define IPA_COAL_CLOSE_FRAME_CMD_TIMEOUT_MSEC (20)
 
 #define IPA_AGGR_BYTE_LIMIT (\
 		IPA_ENDP_INIT_AGGR_N_AGGR_BYTE_LIMIT_BMSK >> \
@@ -5255,19 +5255,23 @@
 
 	IPA_ACTIVE_CLIENTS_INC_EP(ipa3_get_client_mapping(clnt_hdl));
 
-	ipahal_write_reg_n_fields(IPA_ENDP_INIT_HOL_BLOCK_EN_n, clnt_hdl,
-		ep_holb);
-
-	/* IPA4.5 issue requires HOLB_EN to be written twice */
-	if (ipa3_ctx->ipa_hw_type >= IPA_HW_v4_5)
+	if (ep_holb->en == IPA_HOLB_TMR_DIS) {
 		ipahal_write_reg_n_fields(IPA_ENDP_INIT_HOL_BLOCK_EN_n,
 			clnt_hdl, ep_holb);
+		goto success;
+	}
+
+	/* Follow HPG sequence to DIS_HOLB, Configure Timer, and HOLB_EN */
+	if (ipa3_ctx->ipa_hw_type >= IPA_HW_v4_5) {
+		ipa3_ctx->ep[clnt_hdl].holb.en = IPA_HOLB_TMR_DIS;
+		ipahal_write_reg_n_fields(IPA_ENDP_INIT_HOL_BLOCK_EN_n,
+			clnt_hdl, ep_holb);
+	}
 
 	/* Configure timer */
 	if (ipa3_ctx->ipa_hw_type == IPA_HW_v4_2) {
 		ipa3_cal_ep_holb_scale_base_val(ep_holb->tmr_val,
-				&ipa3_ctx->ep[clnt_hdl].holb);
-		goto success;
+			&ipa3_ctx->ep[clnt_hdl].holb);
 	}
 	if (ipa3_ctx->ipa_hw_type >= IPA_HW_v4_5) {
 		int res;
@@ -5283,9 +5287,19 @@
 		}
 	}
 
-success:
 	ipahal_write_reg_n_fields(IPA_ENDP_INIT_HOL_BLOCK_TIMER_n,
 		clnt_hdl, &ipa3_ctx->ep[clnt_hdl].holb);
+
+	/* Enable HOLB */
+	ipa3_ctx->ep[clnt_hdl].holb.en = IPA_HOLB_TMR_EN;
+	ipahal_write_reg_n_fields(IPA_ENDP_INIT_HOL_BLOCK_EN_n,
+		clnt_hdl, ep_holb);
+	/* IPA4.5 issue requires HOLB_EN to be written twice */
+	if (ipa3_ctx->ipa_hw_type >= IPA_HW_v4_5)
+		ipahal_write_reg_n_fields(IPA_ENDP_INIT_HOL_BLOCK_EN_n,
+			clnt_hdl, ep_holb);
+
+success:
 	IPA_ACTIVE_CLIENTS_DEC_EP(ipa3_get_client_mapping(clnt_hdl));
 	IPADBG("cfg holb %u ep=%d tmr=%d\n", ep_holb->en, clnt_hdl,
 		ep_holb->tmr_val);
@@ -5335,6 +5349,9 @@
 		clnt_hdl,
 		ep_deaggr->deaggr_hdr_len);
 
+	IPADBG("syspipe_err_detection=%d\n",
+		ep_deaggr->syspipe_err_detection);
+
 	IPADBG("packet_offset_valid=%d\n",
 		ep_deaggr->packet_offset_valid);
 
@@ -5342,6 +5359,9 @@
 		ep_deaggr->packet_offset_location,
 		ep_deaggr->max_packet_len);
 
+	IPADBG("ignore_min_pkt_err=%d\n",
+		ep_deaggr->ignore_min_pkt_err);
+
 	ep = &ipa3_ctx->ep[clnt_hdl];
 
 	/* copy over EP cfg */
@@ -7594,6 +7614,7 @@
 	struct ipa3_ep_context *ep;
 	enum ipa_client_type client_type;
 	struct IpaHwOffloadStatsAllocCmdData_t *gsi_info;
+	struct ipa_ep_cfg_holb holb_cfg;
 
 	if (clnt_hdl >= ipa3_ctx->ipa_num_pipes ||
 		ipa3_ctx->ep[clnt_hdl].valid == 0) {
@@ -7651,6 +7672,24 @@
 		}
 	}
 
+	/* Enable HOLB on MHIP RMNET CONS before stopping
+	 * USB PROD pipe
+	 */
+	if (ipa3_is_mhip_offload_enabled() &&
+		client_type == IPA_CLIENT_USB_PROD) {
+		memset(&holb_cfg, 0, sizeof(struct ipa_ep_cfg_holb));
+		holb_cfg.en = IPA_HOLB_TMR_EN;
+		holb_cfg.tmr_val = 0;
+		IPADBG("Enabling HOLB on RMNET CONS pipe");
+		res = ipa3_cfg_ep_holb(ipa3_get_ep_mapping(
+				IPA_CLIENT_MHI_PRIME_RMNET_CONS), &holb_cfg);
+		if (res) {
+			IPAERR("Enable HOLB failed ep:%lu\n",
+				ipa3_get_ep_mapping(
+					IPA_CLIENT_MHI_PRIME_RMNET_CONS));
+		}
+	}
+
 	/*
 	 * Apply the GSI stop retry logic if GSI returns err code to retry.
 	 * Apply the retry logic for ipa_client_prod as well as ipa_client_cons.
@@ -7744,6 +7783,16 @@
 			ipa_assert();
 		}
 	} else {
+		if (IPA_CLIENT_IS_APPS_PROD(client) ||
+			(client == IPA_CLIENT_APPS_WAN_CONS &&
+			coal_ep_idx != IPA_EP_NOT_ALLOCATED))
+			goto chan_statrt;
+		if (!atomic_read(&ep->sys->curr_polling_state)) {
+			IPADBG("switch ch %ld to callback\n", ep->gsi_chan_hdl);
+			gsi_config_channel_mode(ep->gsi_chan_hdl,
+					GSI_CHAN_MODE_CALLBACK);
+		}
+chan_statrt:
 		res = gsi_start_channel(ep->gsi_chan_hdl);
 		if (res) {
 			IPAERR("failed to start LAN channel\n");
@@ -7770,12 +7819,7 @@
 		gsi_config_channel_mode(ep->gsi_chan_hdl, GSI_CHAN_MODE_POLL);
 		if (!ipa3_gsi_channel_is_quite(ep))
 			return -EAGAIN;
-	} else if (!atomic_read(&ep->sys->curr_polling_state)) {
-		IPADBG("switch ch %ld to callback\n", ep->gsi_chan_hdl);
-		gsi_config_channel_mode(ep->gsi_chan_hdl,
-			GSI_CHAN_MODE_CALLBACK);
 	}
-
 	return 0;
 }
 
@@ -7791,7 +7835,8 @@
 	ipa3_init_imm_cmd_desc(&desc, ipa3_ctx->coal_cmd_pyld);
 
 	IPADBG("Sending 1 descriptor for coal force close\n");
-	if (ipa3_send_cmd(1, &desc))
+	if (ipa3_send_cmd_timeout(1, &desc,
+				IPA_COAL_CLOSE_FRAME_CMD_TIMEOUT_MSEC))
 		IPADBG("ipa3_send_cmd timedout\n");
 }
 
diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_wdi3_i.c b/drivers/platform/msm/ipa/ipa_v3/ipa_wdi3_i.c
index 463a3d3..f404f5c 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipa_wdi3_i.c
+++ b/drivers/platform/msm/ipa/ipa_v3/ipa_wdi3_i.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2018 - 2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2019 - 2020, The Linux Foundation. All rights reserved.
  */
 
 #include "ipa_i.h"
@@ -673,6 +673,7 @@
 		IPAERR("failed to release gsi channel: %d\n", result);
 		goto exit;
 	}
+	ipa3_release_wdi3_gsi_smmu_mappings(IPA_WDI3_TX_DIR);
 
 	memset(ep_tx, 0, sizeof(struct ipa3_ep_context));
 	IPADBG("tx client (ep: %d) disconnected\n", ipa_ep_idx_tx);
@@ -693,6 +694,7 @@
 		IPAERR("failed to release gsi channel: %d\n", result);
 		goto exit;
 	}
+	ipa3_release_wdi3_gsi_smmu_mappings(IPA_WDI3_RX_DIR);
 
 	if (ipa3_ctx->ipa_hw_type >= IPA_HW_v4_5)
 		ipa3_uc_debug_stats_dealloc(IPA_HW_PROTOCOL_WDI3);
diff --git a/drivers/platform/msm/ipa/ipa_v3/ipahal/ipahal_reg.c b/drivers/platform/msm/ipa/ipa_v3/ipahal/ipahal_reg.c
index 2c0cc1f..4d1527b 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipahal/ipahal_reg.c
+++ b/drivers/platform/msm/ipa/ipa_v3/ipahal/ipahal_reg.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2012-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/init.h>
@@ -1554,6 +1554,37 @@
 		IPA_ENDP_INIT_DEAGGR_n_MAX_PACKET_LEN_BMSK);
 }
 
+static void ipareg_construct_endp_init_deaggr_n_v4_5(
+		enum ipahal_reg_name reg, const void *fields, u32 *val)
+{
+	struct ipa_ep_cfg_deaggr *ep_deaggr =
+		(struct ipa_ep_cfg_deaggr *)fields;
+
+	IPA_SETFIELD_IN_REG(*val, ep_deaggr->deaggr_hdr_len,
+		IPA_ENDP_INIT_DEAGGR_n_DEAGGR_HDR_LEN_SHFT,
+		IPA_ENDP_INIT_DEAGGR_n_DEAGGR_HDR_LEN_BMSK);
+
+	IPA_SETFIELD_IN_REG(*val, ep_deaggr->syspipe_err_detection,
+		IPA_ENDP_INIT_DEAGGR_n_SYSPIPE_ERR_DETECTION_SHFT,
+		IPA_ENDP_INIT_DEAGGR_n_SYSPIPE_ERR_DETECTION_BMSK);
+
+	IPA_SETFIELD_IN_REG(*val, ep_deaggr->packet_offset_valid,
+		IPA_ENDP_INIT_DEAGGR_n_PACKET_OFFSET_VALID_SHFT,
+		IPA_ENDP_INIT_DEAGGR_n_PACKET_OFFSET_VALID_BMSK);
+
+	IPA_SETFIELD_IN_REG(*val, ep_deaggr->packet_offset_location,
+		IPA_ENDP_INIT_DEAGGR_n_PACKET_OFFSET_LOCATION_SHFT,
+		IPA_ENDP_INIT_DEAGGR_n_PACKET_OFFSET_LOCATION_BMSK);
+
+	IPA_SETFIELD_IN_REG(*val, ep_deaggr->ignore_min_pkt_err,
+		IPA_ENDP_INIT_DEAGGR_n_IGNORE_MIN_PKT_ERR_SHFT,
+		IPA_ENDP_INIT_DEAGGR_n_IGNORE_MIN_PKT_ERR_BMSK);
+
+	IPA_SETFIELD_IN_REG(*val, ep_deaggr->max_packet_len,
+		IPA_ENDP_INIT_DEAGGR_n_MAX_PACKET_LEN_SHFT,
+		IPA_ENDP_INIT_DEAGGR_n_MAX_PACKET_LEN_BMSK);
+}
+
 static void ipareg_construct_endp_init_hol_block_en_n(
 	enum ipahal_reg_name reg, const void *fields, u32 *val)
 {
@@ -3167,7 +3198,7 @@
 		ipareg_construct_endp_init_cfg_n, ipareg_parse_dummy,
 		0x00000808, 0x70, 0, 30, 1},
 	[IPA_HW_v4_5][IPA_ENDP_INIT_DEAGGR_n] = {
-		ipareg_construct_endp_init_deaggr_n,
+		ipareg_construct_endp_init_deaggr_n_v4_5,
 		ipareg_parse_dummy,
 		0x00000834, 0x70, 0, 12, 1},
 	[IPA_HW_v4_5][IPA_ENDP_INIT_CTRL_n] = {
diff --git a/drivers/platform/msm/ipa/ipa_v3/ipahal/ipahal_reg_i.h b/drivers/platform/msm/ipa/ipa_v3/ipahal/ipahal_reg_i.h
index 44ecc90..cec3183 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipahal/ipahal_reg_i.h
+++ b/drivers/platform/msm/ipa/ipa_v3/ipahal/ipahal_reg_i.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0 */
 /*
- * Copyright (c) 2012-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved.
  */
 
 #ifndef _IPAHAL_REG_I_H_
@@ -215,10 +215,14 @@
 /* IPA_ENDP_INIT_DEAGGR_n register */
 #define IPA_ENDP_INIT_DEAGGR_n_MAX_PACKET_LEN_BMSK 0xFFFF0000
 #define IPA_ENDP_INIT_DEAGGR_n_MAX_PACKET_LEN_SHFT 0x10
+#define IPA_ENDP_INIT_DEAGGR_n_IGNORE_MIN_PKT_ERR_BMSK 0x4000
+#define IPA_ENDP_INIT_DEAGGR_n_IGNORE_MIN_PKT_ERR_SHFT 0xe
 #define IPA_ENDP_INIT_DEAGGR_n_PACKET_OFFSET_LOCATION_BMSK 0x3F00
 #define IPA_ENDP_INIT_DEAGGR_n_PACKET_OFFSET_LOCATION_SHFT 0x8
 #define IPA_ENDP_INIT_DEAGGR_n_PACKET_OFFSET_VALID_BMSK  0x80
 #define IPA_ENDP_INIT_DEAGGR_n_PACKET_OFFSET_VALID_SHFT 0x7
+#define IPA_ENDP_INIT_DEAGGR_n_SYSPIPE_ERR_DETECTION_BMSK 0x40
+#define IPA_ENDP_INIT_DEAGGR_n_SYSPIPE_ERR_DETECTION_SHFT 0x6
 #define IPA_ENDP_INIT_DEAGGR_n_DEAGGR_HDR_LEN_BMSK 0x3F
 #define IPA_ENDP_INIT_DEAGGR_n_DEAGGR_HDR_LEN_SHFT 0x0
 
diff --git a/drivers/platform/msm/ipa/ipa_v3/rmnet_ipa.c b/drivers/platform/msm/ipa/ipa_v3/rmnet_ipa.c
index 06890ad..a5f7a4c 100644
--- a/drivers/platform/msm/ipa/ipa_v3/rmnet_ipa.c
+++ b/drivers/platform/msm/ipa/ipa_v3/rmnet_ipa.c
@@ -1618,8 +1618,6 @@
 			rc = ipa3_qmi_set_aggr_info(DATA_AGGR_TYPE_QMAP_V01);
 		}
 		rmnet_ipa3_ctx->ipa_mhi_aggr_formet_set = true;
-		/* register Q6 indication */
-		rc = ipa3_qmi_req_ind();
 		return rc;
 	}
 
@@ -2699,8 +2697,8 @@
 MODULE_DEVICE_TABLE(of, rmnet_ipa_dt_match);
 
 static const struct dev_pm_ops rmnet_ipa_pm_ops = {
-	.suspend = rmnet_ipa_ap_suspend,
-	.resume_noirq = rmnet_ipa_ap_resume,
+	.suspend_late = rmnet_ipa_ap_suspend,
+	.resume_early = rmnet_ipa_ap_resume,
 };
 
 static struct platform_driver rmnet_ipa_driver = {
diff --git a/drivers/platform/msm/ipa/test/ipa_ut_framework.c b/drivers/platform/msm/ipa/test/ipa_ut_framework.c
index 0dfb818..ba05c61 100644
--- a/drivers/platform/msm/ipa/test/ipa_ut_framework.c
+++ b/drivers/platform/msm/ipa/test/ipa_ut_framework.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/mutex.h>
@@ -922,7 +922,9 @@
 
 	ipa_assert_on(!ipa_ut_ctx);
 
+#ifdef CONFIG_DEBUG_FS
 	ipa_ut_ctx->ipa_dbgfs_root = ipa_debugfs_get_root();
+#endif
 	if (!ipa_ut_ctx->ipa_dbgfs_root) {
 		IPA_UT_ERR("No IPA debugfs root entry\n");
 		return -EFAULT;
diff --git a/drivers/platform/msm/qcom-geni-se.c b/drivers/platform/msm/qcom-geni-se.c
index bb1df7e..79d52d2 100644
--- a/drivers/platform/msm/qcom-geni-se.c
+++ b/drivers/platform/msm/qcom-geni-se.c
@@ -69,8 +69,6 @@
  * @bus_bw_set_noc:	Clock plan for DDR path.
  * @cur_bus_bw_idx:	Current index within the bus clock plan.
  * @cur_bus_bw_idx_noc:	Current index within the DDR path clock plan.
- * @num_clk_levels:	Number of valid clock levels in clk_perf_tbl.
- * @clk_perf_tbl:	Table of clock frequency input to Serial Engine clock.
  * @log_ctx:		Logging context to hold the debug information.
  * @vectors:		Structure to store Master End and Slave End IDs for
 			QUPv3 clock and DDR path bus BW request.
@@ -107,8 +105,6 @@
 	unsigned long *bus_bw_set_noc;
 	int cur_bus_bw_idx;
 	int cur_bus_bw_idx_noc;
-	unsigned int num_clk_levels;
-	unsigned long *clk_perf_tbl;
 	void *log_ctx;
 	struct bus_vectors *vectors;
 	int num_paths;
@@ -1135,31 +1131,31 @@
 	mutex_lock(&geni_se_dev->geni_dev_lock);
 	*tbl = NULL;
 
-	if (geni_se_dev->clk_perf_tbl) {
-		*tbl = geni_se_dev->clk_perf_tbl;
-		ret = geni_se_dev->num_clk_levels;
+	if (rsc->clk_perf_tbl) {
+		*tbl = rsc->clk_perf_tbl;
+		ret = rsc->num_clk_levels;
 		goto exit_se_clk_tbl_get;
 	}
 
-	geni_se_dev->clk_perf_tbl = kzalloc(sizeof(*geni_se_dev->clk_perf_tbl) *
+	rsc->clk_perf_tbl = kzalloc(sizeof(*rsc->clk_perf_tbl) *
 						MAX_CLK_PERF_LEVEL, GFP_KERNEL);
-	if (!geni_se_dev->clk_perf_tbl) {
+	if (!rsc->clk_perf_tbl) {
 		ret = -ENOMEM;
 		goto exit_se_clk_tbl_get;
 	}
 
 	for (i = 0; i < MAX_CLK_PERF_LEVEL; i++) {
-		geni_se_dev->clk_perf_tbl[i] = clk_round_rate(rsc->se_clk,
+		rsc->clk_perf_tbl[i] = clk_round_rate(rsc->se_clk,
 								prev_freq + 1);
-		if (geni_se_dev->clk_perf_tbl[i] == prev_freq) {
-			geni_se_dev->clk_perf_tbl[i] = 0;
+		if (rsc->clk_perf_tbl[i] == prev_freq) {
+			rsc->clk_perf_tbl[i] = 0;
 			break;
 		}
-		prev_freq = geni_se_dev->clk_perf_tbl[i];
+		prev_freq = rsc->clk_perf_tbl[i];
 	}
-	geni_se_dev->num_clk_levels = i;
-	*tbl = geni_se_dev->clk_perf_tbl;
-	ret = geni_se_dev->num_clk_levels;
+	rsc->num_clk_levels = i;
+	*tbl = rsc->clk_perf_tbl;
+	ret = rsc->num_clk_levels;
 exit_se_clk_tbl_get:
 	mutex_unlock(&geni_se_dev->geni_dev_lock);
 	return ret;
diff --git a/drivers/platform/msm/sps/spsi.h b/drivers/platform/msm/sps/spsi.h
index a2a9a84..45ad64b 100644
--- a/drivers/platform/msm/sps/spsi.h
+++ b/drivers/platform/msm/sps/spsi.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0 */
 /*
- * Copyright (c) 2011-2018, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2018, 2020, The Linux Foundation. All rights reserved.
  */
 /**
  * Smart-Peripheral-Switch (SPS) internal API.
@@ -212,13 +212,13 @@
 		}	\
 	} while (0)
 #else
-#define	SPS_DBG3(x...)		pr_debug(x)
-#define	SPS_DBG2(x...)		pr_debug(x)
-#define	SPS_DBG1(x...)		pr_debug(x)
-#define	SPS_DBG(x...)		pr_debug(x)
-#define	SPS_INFO(x...)		pr_info(x)
-#define	SPS_ERR(x...)		pr_err(x)
-#define	SPS_DUMP(x...)		pr_info(x)
+#define SPS_DBG3(dev, msg, args...)             pr_debug(msg, ##args)
+#define SPS_DBG2(dev, msg, args...)             pr_debug(msg, ##args)
+#define SPS_DBG1(dev, msg, args...)             pr_debug(msg, ##args)
+#define SPS_DBG(dev, msg, args...)              pr_debug(msg, ##args)
+#define SPS_INFO(dev, msg, args...)             pr_info(msg, ##args)
+#define SPS_ERR(dev, msg, args...)              pr_err(msg, ##args)
+#define SPS_DUMP(msg, args...)                  pr_info(msg, ##args)
 #endif
 
 /* End point parameters */
diff --git a/drivers/power/supply/power_supply_core.c b/drivers/power/supply/power_supply_core.c
index 7933873..633e006 100644
--- a/drivers/power/supply/power_supply_core.c
+++ b/drivers/power/supply/power_supply_core.c
@@ -912,14 +912,14 @@
 	}
 
 	spin_lock_init(&psy->changed_lock);
-	rc = device_init_wakeup(dev, ws);
-	if (rc)
-		goto wakeup_init_failed;
-
 	rc = device_add(dev);
 	if (rc)
 		goto device_add_failed;
 
+	rc = device_init_wakeup(dev, ws);
+	if (rc)
+		goto wakeup_init_failed;
+
 	rc = psy_register_thermal(psy);
 	if (rc)
 		goto register_thermal_failed;
@@ -950,8 +950,8 @@
 	psy_unregister_thermal(psy);
 register_thermal_failed:
 	device_del(dev);
-device_add_failed:
 wakeup_init_failed:
+device_add_failed:
 check_supplies_failed:
 dev_set_name_failed:
 	put_device(dev);
diff --git a/drivers/power/supply/power_supply_sysfs.c b/drivers/power/supply/power_supply_sysfs.c
index 1a188a9..f98116d 100644
--- a/drivers/power/supply/power_supply_sysfs.c
+++ b/drivers/power/supply/power_supply_sysfs.c
@@ -481,6 +481,7 @@
 	POWER_SUPPLY_ATTR(cp_ilim),
 	POWER_SUPPLY_ATTR(irq_status),
 	POWER_SUPPLY_ATTR(parallel_output_mode),
+	POWER_SUPPLY_ATTR(fg_type),
 	/* Local extensions of type int64_t */
 	POWER_SUPPLY_ATTR(charge_counter_ext),
 	/* Properties of type `const char *' */
diff --git a/drivers/power/supply/qcom/Kconfig b/drivers/power/supply/qcom/Kconfig
index d2573b7..af7cf6a 100644
--- a/drivers/power/supply/qcom/Kconfig
+++ b/drivers/power/supply/qcom/Kconfig
@@ -15,6 +15,18 @@
 	  VBUS and VCONN regulators are registered for supporting OTG,
 	  and powered Type-C cables respectively.
 
+config QPNP_SMBLITE
+	tristate "SMBLITE Battery Charger"
+	depends on MFD_SPMI_PMIC
+	help
+	  Say Y to enables support for the SMBLITE charging peripheral.
+	  The QPNP SMBLITE charger driver supports the charger peripheral
+	  present in the chip.
+	  The power supply framework is used to communicate battery and
+	  usb properties to userspace and other driver consumers such
+	  as fuel gauge and USB.
+	  VBUS regulator is registered for supporting OTG.
+
 config SMB1390_CHARGE_PUMP_PSY
 	tristate "SMB1390 power supply framework based driver"
 	depends on MFD_I2C_PMIC
diff --git a/drivers/power/supply/qcom/Makefile b/drivers/power/supply/qcom/Makefile
index 0c8d8d3..1035c9d 100644
--- a/drivers/power/supply/qcom/Makefile
+++ b/drivers/power/supply/qcom/Makefile
@@ -8,3 +8,4 @@
 obj-$(CONFIG_QPNP_QG)			+= qpnp-qg.o pmic-voter.o qg-util.o qg-soc.o qg-sdam.o qg-battery-profile.o qg-profile-lib.o fg-alg.o
 obj-$(CONFIG_HL6111R)			+= hl6111r.o
 obj-$(CONFIG_SMB1398_CHARGER)		+= smb1398-charger.o pmic-voter.o
+obj-$(CONFIG_QPNP_SMBLITE)		+= step-chg-jeita.o battery.o qpnp-smblite.o smblite-lib.o pmic-voter.o storm-watch.o schgm-flashlite.o
diff --git a/drivers/power/supply/qcom/fg-core.h b/drivers/power/supply/qcom/fg-core.h
index 6bd4ae8..da5e919 100644
--- a/drivers/power/supply/qcom/fg-core.h
+++ b/drivers/power/supply/qcom/fg-core.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0 */
 /*
- * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2020, The Linux Foundation. All rights reserved.
  */
 
 #ifndef __FG_CORE_H__
@@ -175,6 +175,7 @@
 	FG_SRAM_VBAT_FINAL,
 	FG_SRAM_IBAT_FINAL,
 	FG_SRAM_IBAT_FLT,
+	FG_SRAM_RCONN,
 	FG_SRAM_ESR,
 	FG_SRAM_ESR_MDL,
 	FG_SRAM_ESR_ACT,
diff --git a/drivers/power/supply/qcom/qg-core.h b/drivers/power/supply/qcom/qg-core.h
index 4e29fb6..8704699 100644
--- a/drivers/power/supply/qcom/qg-core.h
+++ b/drivers/power/supply/qcom/qg-core.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0 */
 /*
- * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2018-2020 The Linux Foundation. All rights reserved.
  */
 
 #ifndef __QG_CORE_H__
@@ -112,6 +112,7 @@
 	struct votable		*good_ocv_irq_disable_votable;
 	u32			qg_base;
 	u8			qg_subtype;
+	u8			qg_mode;
 
 	/* local data variables */
 	u32			batt_id_ohm;
@@ -125,6 +126,7 @@
 
 	/* status variable */
 	u32			*debug_mask;
+	u32			qg_version;
 	bool			qg_device_open;
 	bool			profile_loaded;
 	bool			battery_missing;
@@ -157,6 +159,7 @@
 	int			tcss_entry_count;
 	int			max_fcc_limit_ma;
 	int			bsoc_bass_entry;
+	int			qg_v_ibat;
 	u32			fifo_done_count;
 	u32			wa_flags;
 	u32			seq_no;
@@ -167,6 +170,7 @@
 	u32			s2_state_mask;
 	u32			soc_fvss_entry;
 	u32			vbat_fvss_entry;
+	u32			max_fifo_length;
 	ktime_t			last_user_update_time;
 	ktime_t			last_fifo_update_time;
 	unsigned long		last_maint_soc_update_time;
@@ -254,5 +258,14 @@
 	QG_PON_OCV_WA = BIT(3),
 };
 
+enum qg_version {
+	QG_PMIC5,
+	QG_LITE,
+};
+
+enum qg_mode {
+	QG_V_I_MODE,
+	QG_V_MODE,
+};
 
 #endif /* __QG_CORE_H__ */
diff --git a/drivers/power/supply/qcom/qg-reg.h b/drivers/power/supply/qcom/qg-reg.h
index 08b5a87..a7fc4ca 100644
--- a/drivers/power/supply/qcom/qg-reg.h
+++ b/drivers/power/supply/qcom/qg-reg.h
@@ -20,6 +20,7 @@
 #define ESR_MEAS_DONE_BIT			BIT(4)
 
 #define QG_STATUS2_REG				0x09
+#define BATTERY_MISSING_BIT			BIT(3)
 #define GOOD_OCV_BIT				BIT(1)
 
 #define QG_STATUS3_REG				0x0A
@@ -48,6 +49,9 @@
 #define QG_MODE_CTL1_REG			0x43
 #define PARALLEL_IBAT_SENSE_EN_BIT		BIT(7)
 
+#define QG_MODE_CTL2_REG			0x44
+#define VI_MODE_BIT				BIT(0)
+
 #define QG_VBAT_EMPTY_THRESHOLD_REG		0x4B
 #define QG_VBAT_LOW_THRESHOLD_REG		0x4C
 
diff --git a/drivers/power/supply/qcom/qg-util.c b/drivers/power/supply/qcom/qg-util.c
index 2a810d8..170ca87 100644
--- a/drivers/power/supply/qcom/qg-util.c
+++ b/drivers/power/supply/qcom/qg-util.c
@@ -373,6 +373,11 @@
 		return 0;
 	}
 
+	if (chip->qg_mode == QG_V_MODE) {
+		*ibat_ua = chip->qg_v_ibat;
+		return 0;
+	}
+
 	/* hold data */
 	rc = qg_masked_write(chip, chip->qg_base + QG_DATA_CTL2_REG,
 				BURST_AVG_HOLD_FOR_READ_BIT,
@@ -450,6 +455,15 @@
 		return rc;
 	}
 
+	if (last_ibat == FIFO_I_RESET_VAL) {
+		/* First FIFO is not complete, read instantaneous IBAT */
+		rc = qg_get_battery_current(chip, ibat_ua);
+		if (rc < 0)
+			pr_err("Failed to read inst. IBAT rc=%d\n", rc);
+
+		return rc;
+	}
+
 	last_ibat = sign_extend32(last_ibat, 15);
 	*ibat_ua = qg_iraw_to_ua(chip, last_ibat);
 
diff --git a/drivers/power/supply/qcom/qpnp-fg-gen4.c b/drivers/power/supply/qcom/qpnp-fg-gen4.c
index 7ae08c7..dac6aaf 100644
--- a/drivers/power/supply/qcom/qpnp-fg-gen4.c
+++ b/drivers/power/supply/qcom/qpnp-fg-gen4.c
@@ -395,6 +395,8 @@
 		0, NULL, fg_decode_voltage_15b),
 	PARAM(IBAT_FINAL, IBAT_FINAL_WORD, IBAT_FINAL_OFFSET, 2, 1000, 488282,
 		0, NULL, fg_decode_current_16b),
+	PARAM(RCONN, RCONN_WORD, RCONN_OFFSET, 2, 1000, 122070, 0,
+		fg_encode_default, fg_decode_value_16b),
 	PARAM(ESR, ESR_WORD, ESR_OFFSET, 2, 1000, 244141, 0, fg_encode_default,
 		fg_decode_value_16b),
 	PARAM(ESR_MDL, ESR_MDL_WORD, ESR_MDL_OFFSET, 2, 1000, 244141, 0,
@@ -495,6 +497,8 @@
 		0, NULL, fg_decode_current_16b),
 	PARAM(IBAT_FLT, IBAT_FLT_WORD, IBAT_FLT_OFFSET, 4, 10000, 19073, 0,
 		NULL, fg_decode_current_24b),
+	PARAM(RCONN, RCONN_WORD, RCONN_OFFSET, 2, 1000, 122070, 0,
+		fg_encode_default, fg_decode_value_16b),
 	PARAM(ESR, ESR_WORD, ESR_OFFSET, 2, 1000, 244141, 0, fg_encode_default,
 		fg_decode_value_16b),
 	PARAM(ESR_MDL, ESR_MDL_WORD, ESR_MDL_OFFSET, 2, 1000, 244141, 0,
@@ -5454,8 +5458,7 @@
 		}
 
 		if (!buf[0] && !buf[1]) {
-			/* Rconn has same encoding as ESR */
-			fg_encode(fg->sp, FG_SRAM_ESR, chip->dt.rconn_uohms,
+			fg_encode(fg->sp, FG_SRAM_RCONN, chip->dt.rconn_uohms,
 				buf);
 			rc = fg_sram_write(fg, RCONN_WORD, RCONN_OFFSET, buf, 2,
 					FG_IMA_DEFAULT);
diff --git a/drivers/power/supply/qcom/qpnp-qg.c b/drivers/power/supply/qcom/qpnp-qg.c
index 7904595..0acae67 100644
--- a/drivers/power/supply/qcom/qpnp-qg.c
+++ b/drivers/power/supply/qcom/qpnp-qg.c
@@ -16,6 +16,7 @@
 #include <linux/of.h>
 #include <linux/of_irq.h>
 #include <linux/of_batterydata.h>
+#include <linux/of_device.h>
 #include <linux/platform_device.h>
 #include <linux/power_supply.h>
 #include <linux/regmap.h>
@@ -98,14 +99,25 @@
 
 static bool is_battery_present(struct qpnp_qg *chip)
 {
+	bool present = true;
 	u8 reg = 0;
 	int rc;
 
-	rc = qg_read(chip, chip->qg_base + QG_STATUS1_REG, &reg, 1);
-	if (rc < 0)
-		pr_err("Failed to read battery presence, rc=%d\n", rc);
+	if (chip->qg_version == QG_LITE) {
+		rc = qg_read(chip, chip->qg_base + QG_STATUS2_REG, &reg, 1);
+		if (rc < 0)
+			pr_err("Failed to read battery presence, rc=%d\n", rc);
+		else
+			present = !(reg & BATTERY_MISSING_BIT);
+	} else {
+		rc = qg_read(chip, chip->qg_base + QG_STATUS1_REG, &reg, 1);
+		if (rc < 0)
+			pr_err("Failed to read battery presence, rc=%d\n", rc);
+		else
+			present = !!(reg & BATTERY_PRESENT_BIT);
+	}
 
-	return !!(reg & BATTERY_PRESENT_BIT);
+	return present;
 }
 
 #define DEBUG_BATT_ID_LOW	6000
@@ -175,7 +187,7 @@
 	int rc;
 	u8 s3_entry_fifo_length = 0;
 
-	if (!length || length > 8) {
+	if (!length || length > chip->max_fifo_length) {
 		pr_err("Invalid FIFO length %d\n", length);
 		return -EINVAL;
 	}
@@ -430,6 +442,7 @@
 	u8 v_fifo[MAX_FIFO_LENGTH * 2], i_fifo[MAX_FIFO_LENGTH * 2];
 	u32 sample_interval = 0, sample_count = 0, fifo_v = 0, fifo_i = 0;
 	unsigned long rtc_sec = 0;
+	bool qg_v_mode = (chip->qg_mode == QG_V_MODE);
 
 	rc = get_rtc_time(&rtc_sec);
 	if (rc < 0)
@@ -488,7 +501,8 @@
 		fifo_v = v_fifo[i] | (v_fifo[i + 1] << 8);
 		fifo_i = i_fifo[i] | (i_fifo[i + 1] << 8);
 
-		if (fifo_v == FIFO_V_RESET_VAL || fifo_i == FIFO_I_RESET_VAL) {
+		if (fifo_v == FIFO_V_RESET_VAL ||
+			(fifo_i == FIFO_I_RESET_VAL && !qg_v_mode)) {
 			pr_err("Invalid FIFO data V_RAW=%x I_RAW=%x - FIFO rejected\n",
 						fifo_v, fifo_i);
 			return -EINVAL;
@@ -497,7 +511,8 @@
 		temp = sign_extend32(fifo_i, 15);
 
 		chip->kdata.fifo[j].v = V_RAW_TO_UV(fifo_v);
-		chip->kdata.fifo[j].i = qg_iraw_to_ua(chip, temp);
+		chip->kdata.fifo[j].i =
+				qg_v_mode ? 0 : qg_iraw_to_ua(chip, temp);
 		chip->kdata.fifo[j].interval = sample_interval;
 		chip->kdata.fifo[j].count = sample_count;
 
@@ -507,7 +522,7 @@
 		qg_dbg(chip, QG_DEBUG_FIFO, "FIFO %d raw_v=%d uV=%d raw_i=%d uA=%d interval=%d count=%d\n",
 					j, fifo_v,
 					chip->kdata.fifo[j].v,
-					fifo_i,
+					qg_v_mode ? 0 : fifo_i,
 					(int)chip->kdata.fifo[j].i,
 					chip->kdata.fifo[j].interval,
 					chip->kdata.fifo[j].count);
@@ -525,6 +540,7 @@
 	u8 count, index = chip->kdata.fifo_length;
 	u64 acc_v = 0, acc_i = 0;
 	s64 temp = 0;
+	bool qg_v_mode = (chip->qg_mode == QG_V_MODE);
 
 	rc = qg_read(chip, chip->qg_base + QG_ACCUM_CNT_RT_REG,
 			&count, 1);
@@ -561,7 +577,8 @@
 	temp = sign_extend64(acc_i, 23);
 
 	chip->kdata.fifo[index].v = V_RAW_TO_UV(div_u64(acc_v, count));
-	chip->kdata.fifo[index].i = qg_iraw_to_ua(chip, div_s64(temp, count));
+	chip->kdata.fifo[index].i = qg_v_mode ?
+				0 : qg_iraw_to_ua(chip, div_s64(temp, count));
 	chip->kdata.fifo[index].interval = sample_interval;
 	chip->kdata.fifo[index].count = count;
 	chip->kdata.fifo_length++;
@@ -683,7 +700,7 @@
 	int rc, i, temp = 0;
 	u32 vbat_low_uv = 0;
 
-	if ((chip->wa_flags & QG_VBAT_LOW_WA) && chip->vbat_low) {
+	if (chip->wa_flags & QG_VBAT_LOW_WA) {
 		rc = qg_get_battery_temp(chip, &temp);
 		if (rc < 0) {
 			pr_err("Failed to read batt_temp rc=%d\n", rc);
@@ -693,19 +710,19 @@
 		vbat_low_uv = 1000 * ((temp < chip->dt.cold_temp_threshold) ?
 					chip->dt.vbatt_low_cold_mv :
 					chip->dt.vbatt_low_mv);
-		vbat_low_uv += VBAT_LOW_HYST_UV;
-		/*
-		 * PMI632 1.0 does not generate a falling VBAT_LOW IRQ.
-		 * To exit from VBAT_LOW config, check if any of the FIFO
-		 * averages is > vbat_low threshold and reconfigure the
-		 * FIFO length to normal.
-		 */
+
 		for (i = 0; i < chip->kdata.fifo_length; i++) {
-			if (chip->kdata.fifo[i].v > vbat_low_uv) {
+			if ((chip->kdata.fifo[i].v > (vbat_low_uv +
+					VBAT_LOW_HYST_UV)) && chip->vbat_low) {
 				chip->vbat_low = false;
-				pr_info("Exit VBAT_LOW vbat_avg=%duV vbat_low=%duV updated fifo_length=%d\n",
-					chip->kdata.fifo[i].v, vbat_low_uv,
-					chip->dt.s2_fifo_length);
+				pr_info("Exit VBAT_LOW vbat_avg=%duV vbat_low=%duV\n",
+					chip->kdata.fifo[i].v, vbat_low_uv);
+				break;
+			} else if ((chip->kdata.fifo[i].v < vbat_low_uv) &&
+							!chip->vbat_low) {
+				chip->vbat_low = true;
+				pr_info("Enter VBAT_LOW vbat_avg=%duV vbat_low=%duV\n",
+					chip->kdata.fifo[i].v, vbat_low_uv);
 				break;
 			}
 		}
@@ -757,6 +774,9 @@
 						vbat_mv, temp);
 
 config_vbat_low:
+	if (chip->qg_version == QG_LITE)
+		return 0;
+
 	vbat_mv = (temp < chip->dt.cold_temp_threshold) ?
 			chip->dt.vbatt_low_cold_mv :
 			chip->dt.vbatt_low_mv;
@@ -1179,6 +1199,9 @@
 	if (chip->udata.param[QG_FULL_SOC].valid)
 		chip->full_soc = chip->udata.param[QG_FULL_SOC].data;
 
+	if (chip->udata.param[QG_V_IBAT].valid)
+		chip->qg_v_ibat = chip->udata.param[QG_V_IBAT].data;
+
 	if (chip->udata.param[QG_SOC].valid ||
 			chip->udata.param[QG_SYS_SOC].valid) {
 
@@ -1630,9 +1653,9 @@
 	}
 
 	if (chip->cc_soc == INT_MIN)
-		return -EINVAL;
-
-	*cc_soc = chip->cc_soc;
+		*cc_soc = -EINVAL;
+	else
+		*cc_soc = chip->cc_soc;
 
 	return 0;
 }
@@ -2005,6 +2028,7 @@
 static int qg_setprop_batt_age_level(struct qpnp_qg *chip, int batt_age_level)
 {
 	int rc = 0;
+	u16 data = 0;
 
 	if (!chip->dt.multi_profile_load)
 		return 0;
@@ -2030,6 +2054,13 @@
 			pr_err("error in storing batt_age_level rc =%d\n", rc);
 	}
 
+	/* Clear the learned capacity on loading a new profile */
+	rc = qg_sdam_multibyte_write(QG_SDAM_LEARNED_CAPACITY_OFFSET,
+						(u8 *)&data, 2);
+
+	if (rc < 0)
+		pr_err("Failed to clear SDAM learnt capacity rc=%d\n", rc);
+
 	qg_dbg(chip, QG_DEBUG_PROFILE, "Profile with batt_age_level = %d loaded\n",
 						chip->batt_age_level);
 
@@ -2217,6 +2248,9 @@
 	case POWER_SUPPLY_PROP_BATT_AGE_LEVEL:
 		pval->intval = chip->batt_age_level;
 		break;
+	case POWER_SUPPLY_PROP_FG_TYPE:
+		pval->intval = chip->qg_mode;
+		break;
 	default:
 		pr_debug("Unsupported property %d\n", psp);
 		break;
@@ -2279,6 +2313,7 @@
 	POWER_SUPPLY_PROP_POWER_NOW,
 	POWER_SUPPLY_PROP_SCALE_MODE_EN,
 	POWER_SUPPLY_PROP_BATT_AGE_LEVEL,
+	POWER_SUPPLY_PROP_FG_TYPE,
 };
 
 static const struct power_supply_desc qg_psy_desc = {
@@ -3282,7 +3317,9 @@
 		return rc;
 	}
 
-	chip->cc_soc = chip->sys_soc = soc_raw;
+	if (chip->qg_mode == QG_V_I_MODE)
+		chip->cc_soc = soc_raw;
+	chip->sys_soc = soc_raw;
 	chip->last_adj_ssoc = chip->catch_up_soc = chip->msoc = soc;
 	chip->kdata.param[QG_PON_OCV_UV].data = ocv_uv;
 	chip->kdata.param[QG_PON_OCV_UV].valid = true;
@@ -3327,6 +3364,11 @@
 	case PM7250B_SUBTYPE:
 		qg_esr_mod_count = 10;
 		break;
+	case PM2250_SUBTYPE:
+		chip->wa_flags |= QG_CLK_ADJUST_WA |
+				QG_RECHARGE_SOC_WA |
+				QG_VBAT_LOW_WA;
+		break;
 	default:
 		pr_err("Unsupported PMIC subtype %d\n",
 			chip->pmic_rev_id->pmic_subtype);
@@ -3379,6 +3421,9 @@
 	int rc, temp;
 	u8 reg;
 
+	/* read STATUS2 register to clear its last state */
+	qg_read(chip, chip->qg_base + QG_STATUS2_REG, &reg, 1);
+
 	/* read the QG perph_subtype */
 	rc = qg_read(chip, chip->qg_base + PERPH_SUBTYPE_REG,
 					&chip->qg_subtype, 1);
@@ -3392,6 +3437,24 @@
 	else
 		chip->max_fcc_limit_ma = IBAT_10A_FCC_MA;
 
+	if (chip->qg_version == QG_LITE) {
+		rc = qg_read(chip, chip->qg_base + QG_MODE_CTL2_REG, &reg, 1);
+		if (rc < 0) {
+			pr_err("Failed to read QG mode rc=%d\n", rc);
+			return rc;
+		}
+		chip->qg_mode = (reg & VI_MODE_BIT) ? QG_V_I_MODE : QG_V_MODE;
+	} else {
+		chip->qg_mode = QG_V_I_MODE;
+	}
+
+	if (chip->qg_mode == QG_V_MODE) {
+		chip->dt.esr_disable = true;
+		chip->dt.cl_disable = true;
+		chip->dt.tcss_enable = false;
+		chip->dt.bass_enable = false;
+	}
+
 	rc = qg_set_wa_flags(chip);
 	if (rc < 0) {
 		pr_err("Failed to update PMIC type flags, rc=%d\n", rc);
@@ -3453,7 +3516,8 @@
 	}
 	chip->last_fifo_update_time = ktime_get_boottime();
 
-	if (chip->dt.ocv_timer_expiry_min != -EINVAL) {
+	if (chip->dt.ocv_timer_expiry_min != -EINVAL &&
+				chip->qg_version != QG_LITE) {
 		if (chip->dt.ocv_timer_expiry_min < 2)
 			chip->dt.ocv_timer_expiry_min = 2;
 		else if (chip->dt.ocv_timer_expiry_min > 30)
@@ -3488,8 +3552,10 @@
 	if (chip->dt.s3_entry_fifo_length != -EINVAL) {
 		if (chip->dt.s3_entry_fifo_length < 1)
 			chip->dt.s3_entry_fifo_length = 1;
-		else if (chip->dt.s3_entry_fifo_length > 8)
-			chip->dt.s3_entry_fifo_length = 8;
+		else if (chip->dt.s3_entry_fifo_length >
+					chip->max_fifo_length)
+			chip->dt.s3_entry_fifo_length =
+					chip->max_fifo_length;
 
 		reg = chip->dt.s3_entry_fifo_length - 1;
 		rc = qg_masked_write(chip,
@@ -3569,12 +3635,14 @@
 		return rc;
 	}
 
-	/* disable S5 */
-	rc = qg_masked_write(chip, chip->qg_base +
-				QG_S5_OCV_VALIDATE_MEAS_CTL1_REG,
-				ALLOW_S5_BIT, 0);
-	if (rc < 0)
-		pr_err("Failed to disable S5 rc=%d\n", rc);
+	if (chip->qg_version != QG_LITE) {
+		/* disable S5 */
+		rc = qg_masked_write(chip, chip->qg_base +
+					QG_S5_OCV_VALIDATE_MEAS_CTL1_REG,
+					ALLOW_S5_BIT, 0);
+		if (rc < 0)
+			pr_err("Failed to disable S5 rc=%d\n", rc);
+	}
 
 	/* change PON OCV time to 512ms */
 	rc = qg_masked_write(chip, chip->qg_base +
@@ -3624,7 +3692,6 @@
 
 static int qg_post_init(struct qpnp_qg *chip)
 {
-	u8 status = 0;
 	int rc = 0;
 
 	/* disable all IRQs if profile is not loaded */
@@ -3641,9 +3708,6 @@
 	if (!chip->dt.esr_disable)
 		qg_retrieve_esr_params(chip);
 
-	/* read STATUS2 register to clear its last state */
-	qg_read(chip, chip->qg_base + QG_STATUS2_REG, &status, 1);
-
 	/*soh based multi profile init */
 	rc = qg_soh_batt_profile_init(chip);
 	if (rc < 0) {
@@ -3856,6 +3920,13 @@
 	else
 		chip->dt.s2_fifo_length = temp;
 
+	if (chip->dt.s2_fifo_length > chip->max_fifo_length) {
+		pr_err("Invalid S2 fifo-length=%d max_length=%d\n",
+					chip->dt.s2_fifo_length,
+					chip->max_fifo_length);
+		return -EINVAL;
+	}
+
 	rc = of_property_read_u32(node, "qcom,s2-vbat-low-fifo-length", &temp);
 	if (rc < 0)
 		chip->dt.s2_vbat_low_fifo_length = DEFAULT_S2_VBAT_LOW_LENGTH;
@@ -3890,6 +3961,13 @@
 		else
 			chip->dt.sleep_s2_fifo_length = temp;
 
+		if (chip->dt.s2_fifo_length > chip->max_fifo_length) {
+			pr_err("Invalid S2 sleep-fifo-length=%d max_length=%d\n",
+					chip->dt.sleep_s2_fifo_length,
+					chip->max_fifo_length);
+			return -EINVAL;
+		}
+
 		rc = of_property_read_u32(node,
 				"qcom,sleep-s2-acc-length", &temp);
 		if (rc < 0)
@@ -3918,6 +3996,13 @@
 					DEFAULT_FAST_CHG_S2_FIFO_LENGTH;
 		else
 			chip->dt.fast_chg_s2_fifo_length = temp;
+
+		if (chip->dt.fast_chg_s2_fifo_length > chip->max_fifo_length) {
+			pr_err("Invalid S2 fast-fifo-length=%d max_length=%d\n",
+					chip->dt.fast_chg_s2_fifo_length,
+					chip->max_fifo_length);
+			return -EINVAL;
+		}
 	}
 
 	return 0;
@@ -4310,7 +4395,6 @@
 		return 0;
 
 	cancel_delayed_work_sync(&chip->ttf->ttf_work);
-	cancel_delayed_work_sync(&chip->qg_sleep_exit_work);
 
 	chip->suspend_data = false;
 
@@ -4477,6 +4561,9 @@
 	int rc;
 	struct qpnp_qg *chip = dev_get_drvdata(dev);
 
+	/* cancel any pending sleep_exit work */
+	cancel_delayed_work_sync(&chip->qg_sleep_exit_work);
+
 	mutex_lock(&chip->data_lock);
 
 	rc = process_suspend(chip);
@@ -4596,6 +4683,17 @@
 	chip->esr_nominal = -EINVAL;
 	chip->batt_age_level = -EINVAL;
 
+	chip->qg_version = (u8)of_device_get_match_data(&pdev->dev);
+
+	switch (chip->qg_version) {
+	case QG_LITE:
+		chip->max_fifo_length = 5;
+		break;
+	default:
+		chip->max_fifo_length = 8;
+		break;
+	}
+
 	qg_create_debugfs(chip);
 
 	rc = qg_alg_init(chip);
@@ -4735,8 +4833,11 @@
 	}
 
 	qg_get_battery_capacity(chip, &soc);
-	pr_info("QG initialized! battery_profile=%s SOC=%d QG_subtype=%d\n",
-			qg_get_battery_type(chip), soc, chip->qg_subtype);
+
+	pr_info("QG initialized! battery_profile=%s SOC=%d QG_subtype=%d QG_version=%s QG_mode=%s\n",
+			qg_get_battery_type(chip), soc, chip->qg_subtype,
+			(chip->qg_version == QG_LITE) ? "QG_LITE" : "QG_PMIC5",
+			(chip->qg_mode == QG_V_I_MODE) ? "QG_V_I" : "QG_V");
 
 	return rc;
 
@@ -4791,7 +4892,8 @@
 }
 
 static const struct of_device_id match_table[] = {
-	{ .compatible = "qcom,qpnp-qg", },
+	{ .compatible = "qcom,qpnp-qg", .data = (void *)QG_PMIC5, },
+	{ .compatible = "qcom,qpnp-qg-lite", .data = (void *)QG_LITE, },
 	{ },
 };
 
diff --git a/drivers/power/supply/qcom/qpnp-smb5.c b/drivers/power/supply/qcom/qpnp-smb5.c
index 9785605..ca027b3 100644
--- a/drivers/power/supply/qcom/qpnp-smb5.c
+++ b/drivers/power/supply/qcom/qpnp-smb5.c
@@ -1283,7 +1283,9 @@
 		val->intval = chg->flash_active;
 		break;
 	case POWER_SUPPLY_PROP_FLASH_TRIGGER:
-		rc = schgm_flash_get_vreg_ok(chg, &val->intval);
+		val->intval = 0;
+		if (chg->chg_param.smb_version == PMI632_SUBTYPE)
+			rc = schgm_flash_get_vreg_ok(chg, &val->intval);
 		break;
 	case POWER_SUPPLY_PROP_TOGGLE_STAT:
 		val->intval = 0;
@@ -2119,15 +2121,10 @@
 		return rc;
 	}
 
-	val = EN_TRY_SNK_BIT;
-	/* PMI632 doesn't support try snk */
-	if (chg->chg_param.smb_version == PMI632_SUBTYPE)
-		val = 0;
-
 	/* enable try.snk and clear force sink for DRP mode */
 	rc = smblib_masked_write(chg, TYPE_C_MODE_CFG_REG,
 				EN_TRY_SNK_BIT | EN_SNK_ONLY_BIT,
-				val);
+				EN_TRY_SNK_BIT);
 	if (rc < 0) {
 		dev_err(chg->dev,
 			"Couldn't configure TYPE_C_MODE_CFG_REG rc=%d\n", rc);
@@ -2148,18 +2145,21 @@
 		}
 	}
 
-	/* Enable detection of unoriented debug accessory in source mode */
-	rc = smblib_masked_write(chg, DEBUG_ACCESS_SRC_CFG_REG,
-				 EN_UNORIENTED_DEBUG_ACCESS_SRC_BIT,
-				 EN_UNORIENTED_DEBUG_ACCESS_SRC_BIT);
-	if (rc < 0) {
-		dev_err(chg->dev,
-			"Couldn't configure TYPE_C_DEBUG_ACCESS_SRC_CFG_REG rc=%d\n",
-				rc);
-		return rc;
-	}
-
 	if (chg->chg_param.smb_version != PMI632_SUBTYPE) {
+		/*
+		 * Enable detection of unoriented debug
+		 * accessory in source mode.
+		 */
+		rc = smblib_masked_write(chg, DEBUG_ACCESS_SRC_CFG_REG,
+					 EN_UNORIENTED_DEBUG_ACCESS_SRC_BIT,
+					 EN_UNORIENTED_DEBUG_ACCESS_SRC_BIT);
+		if (rc < 0) {
+			dev_err(chg->dev,
+				"Couldn't configure TYPE_C_DEBUG_ACCESS_SRC_CFG_REG rc=%d\n",
+					rc);
+			return rc;
+		}
+
 		rc = smblib_masked_write(chg, USBIN_LOAD_CFG_REG,
 				USBIN_IN_COLLAPSE_GF_SEL_MASK |
 				USBIN_AICL_STEP_TIMING_SEL_MASK,
diff --git a/drivers/power/supply/qcom/qpnp-smblite.c b/drivers/power/supply/qcom/qpnp-smblite.c
new file mode 100644
index 0000000..25f6dcb
--- /dev/null
+++ b/drivers/power/supply/qcom/qpnp-smblite.c
@@ -0,0 +1,1990 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2020 The Linux Foundation. All rights reserved.
+ */
+
+#include <linux/debugfs.h>
+#include <linux/delay.h>
+#include <linux/device.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/regmap.h>
+#include <linux/power_supply.h>
+#include <linux/of.h>
+#include <linux/of_irq.h>
+#include <linux/log2.h>
+#include <linux/qpnp/qpnp-revid.h>
+#include <linux/iio/consumer.h>
+#include <linux/pmic-voter.h>
+#include <linux/usb/typec.h>
+#include "smblite-reg.h"
+#include "smblite-lib.h"
+#include "schgm-flashlite.h"
+
+static struct smb_params smblite_params = {
+	.fcc			= {
+		.name   = "fast charge current",
+		.reg    = CHGR_FAST_CHARGE_CURRENT_CFG_REG,
+		.min_u  = 0,
+		.max_u  = 2000000,
+		.step_u = 100000,
+	},
+	.fv			= {
+		.name   = "float voltage",
+		.reg    = CHGR_FLOAT_VOLTAGE_CFG_REG,
+		.min_u  = 3600000,
+		.max_u  = 4600000,
+		.step_u = 20000,
+	},
+	.usb_icl		= {
+		.name   = "usb input current limit",
+		.reg    = USBIN_CURRENT_LIMIT_CFG_REG,
+		.min_u  = 0,
+		.max_u  = 2000000,
+		.step_u = 100000,
+	},
+	.icl_max_stat		= {
+		.name   = "dcdc icl max status",
+		.reg    = ICL_MAX_STATUS_REG,
+		.min_u  = 0,
+		.max_u  = 2000000,
+		.step_u = 100000,
+	},
+	.icl_stat		= {
+		.name   = "input current limit status",
+		.reg    = ICL_STATUS_REG,
+		.min_u  = 0,
+		.max_u  = 2000000,
+		.step_u = 100000,
+	},
+	.aicl_5v_threshold		= {
+		.name   = "AICL 5V threshold",
+		.reg    = USBIN_LV_AICL_THRESHOLD_REG,
+		.min_u  = 4200,
+		.max_u  = 4800,
+		.step_u = 200,
+	},
+};
+
+struct smb_dt_props {
+	int			usb_icl_ua;
+	struct device_node	*revid_dev_node;
+	int			chg_inhibit_thr_mv;
+	bool			no_battery;
+	int			auto_recharge_soc;
+	int			auto_recharge_vbat_mv;
+	int			wd_bark_time;
+	int			batt_profile_fcc_ua;
+	int			batt_profile_fv_uv;
+	int			term_current_src;
+	int			term_current_thresh_hi_ma;
+	int			term_current_thresh_lo_ma;
+	int			disable_suspend_on_collapse;
+};
+
+struct smblite {
+	struct smb_charger	chg;
+	struct dentry		*dfs_root;
+	struct smb_dt_props	dt;
+};
+
+static int __debug_mask;
+
+static ssize_t weak_chg_icl_ua_show(struct device *dev, struct device_attribute
+				    *attr, char *buf)
+{
+	struct smblite *chip = dev_get_drvdata(dev);
+	struct smb_charger *chg = &chip->chg;
+
+	return scnprintf(buf, PAGE_SIZE, "%d\n", chg->weak_chg_icl_ua);
+}
+
+static ssize_t weak_chg_icl_ua_store(struct device *dev, struct device_attribute
+				 *attr, const char *buf, size_t count)
+{
+	int val;
+	struct smblite *chip = dev_get_drvdata(dev);
+	struct smb_charger *chg = &chip->chg;
+
+	if (kstrtos32(buf, 0, &val))
+		return -EINVAL;
+
+	chg->weak_chg_icl_ua = val;
+
+	return count;
+}
+static DEVICE_ATTR_RW(weak_chg_icl_ua);
+
+static struct attribute *smblite_attrs[] = {
+	&dev_attr_weak_chg_icl_ua.attr,
+	NULL,
+};
+ATTRIBUTE_GROUPS(smblite);
+
+static int smblite_chg_config_init(struct smblite *chip)
+{
+	struct smb_charger *chg = &chip->chg;
+	struct pmic_revid_data *pmic_rev_id;
+	struct device_node *revid_dev_node, *node = chg->dev->of_node;
+	u8 val;
+	int rc = 0;
+
+	revid_dev_node = of_parse_phandle(node, "qcom,pmic-revid", 0);
+	if (!revid_dev_node) {
+		pr_err("Missing qcom,pmic-revid property\n");
+		return -EINVAL;
+	}
+
+	pmic_rev_id = get_revid_data(revid_dev_node);
+	if (IS_ERR_OR_NULL(pmic_rev_id)) {
+		/*
+		 * the revid peripheral must be registered, any failure
+		 * here only indicates that the rev-id module has not
+		 * probed yet.
+		 */
+		rc =  -EPROBE_DEFER;
+		goto out;
+	}
+
+	switch (pmic_rev_id->pmic_subtype) {
+	case PM2250_SUBTYPE:
+		chg->wa_flags |= WEAK_ADAPTER_WA;
+		if (pmic_rev_id->rev4 < 2)
+			chg->wa_flags |= FLASH_DIE_TEMP_DERATE_WA;
+		break;
+	default:
+		pr_err("Unsupported PMIC subtype=%d\n",
+				pmic_rev_id->pmic_subtype);
+		break;
+	}
+
+	rc = smblite_lib_read(chg, DCDC_LDO_CFG_REG, &val);
+	if (rc < 0) {
+		pr_err("Couldn't read LDO config reg rc=%d\n", rc);
+		return rc;
+	}
+	chg->ldo_mode = !!(val & LDO_MODE_BIT);
+
+	chip->chg.chg_param.smb_version = 0;
+	chg->param = smblite_params;
+	chg->name = "PM2250_charger";
+
+out:
+	of_node_put(revid_dev_node);
+	return rc;
+}
+
+#define MICRO_1P5A			1500000
+#define MICRO_P1A			100000
+#define MICRO_1PA			1000000
+#define MICRO_3PA			3000000
+#define OTG_DEFAULT_DEGLITCH_TIME_MS	50
+#define DEFAULT_WD_BARK_TIME		16
+#define DEFAULT_FCC_STEP_SIZE_UA	100000
+#define DEFAULT_FCC_STEP_UPDATE_DELAY_MS	1000
+static int smblite_parse_dt_misc(struct smblite *chip, struct device_node *node)
+{
+	int rc = 0, byte_len;
+	struct smb_charger *chg = &chip->chg;
+
+	chg->typec_legacy_use_rp_icl = of_property_read_bool(node,
+				"qcom,typec-legacy-rp-icl");
+
+	rc = of_property_read_u32(node, "qcom,wd-bark-time-secs",
+					&chip->dt.wd_bark_time);
+	if (rc < 0 || chip->dt.wd_bark_time < MIN_WD_BARK_TIME)
+		chip->dt.wd_bark_time = DEFAULT_WD_BARK_TIME;
+
+
+	chip->dt.no_battery = of_property_read_bool(node,
+						"qcom,batteryless-platform");
+
+	if (of_find_property(node, "qcom,thermal-mitigation", &byte_len)) {
+		chg->thermal_mitigation = devm_kzalloc(chg->dev, byte_len,
+			GFP_KERNEL);
+
+		if (chg->thermal_mitigation == NULL)
+			return -ENOMEM;
+
+		chg->thermal_levels = byte_len / sizeof(u32);
+		rc = of_property_read_u32_array(node,
+				"qcom,thermal-mitigation",
+				chg->thermal_mitigation,
+				chg->thermal_levels);
+		if (rc < 0) {
+			dev_err(chg->dev,
+				"Couldn't read threm limits rc = %d\n", rc);
+			return rc;
+		}
+	}
+
+	chip->dt.auto_recharge_soc = -EINVAL;
+	rc = of_property_read_u32(node, "qcom,auto-recharge-soc",
+				&chip->dt.auto_recharge_soc);
+	if ((rc < 0) || (chip->dt.auto_recharge_soc < 0 ||
+			chip->dt.auto_recharge_soc > 100)) {
+		pr_err("qcom,auto-recharge-soc is incorrect\n");
+		return -EINVAL;
+	}
+	chg->auto_recharge_soc = chip->dt.auto_recharge_soc;
+
+	chg->suspend_input_on_debug_batt = of_property_read_bool(node,
+					"qcom,suspend-input-on-debug-batt");
+
+	chg->fake_chg_status_on_debug_batt = of_property_read_bool(node,
+					"qcom,fake-chg-status-on-debug-batt");
+
+	chg->fcc_stepper_enable = of_property_read_bool(node,
+					"qcom,fcc-stepping-enable");
+
+	chip->dt.disable_suspend_on_collapse = of_property_read_bool(node,
+					"qcom,disable-suspend-on-collapse");
+
+	of_property_read_u32(node, "qcom,fcc-step-delay-ms",
+					&chg->chg_param.fcc_step_delay_ms);
+	if (chg->chg_param.fcc_step_delay_ms <= 0)
+		chg->chg_param.fcc_step_delay_ms =
+					DEFAULT_FCC_STEP_UPDATE_DELAY_MS;
+
+	of_property_read_u32(node, "qcom,fcc-step-size-ua",
+					&chg->chg_param.fcc_step_size_ua);
+	if (chg->chg_param.fcc_step_size_ua <= 0)
+		chg->chg_param.fcc_step_size_ua = DEFAULT_FCC_STEP_SIZE_UA;
+
+	return 0;
+}
+
+static int smblite_parse_dt_adc_channels(struct smb_charger *chg)
+{
+	int rc = 0;
+
+	rc = smblite_lib_get_iio_channel(chg, "usb_in_voltage",
+					&chg->iio.usbin_v_chan);
+	if (rc < 0)
+		return rc;
+
+	rc = smblite_lib_get_iio_channel(chg, "chg_temp",
+					&chg->iio.temp_chan);
+	if (rc < 0)
+		return rc;
+
+	return 0;
+}
+
+static int smblite_parse_dt_currents(struct smblite *chip,
+					struct device_node *node)
+{
+	int rc = 0;
+
+	rc = of_property_read_u32(node,
+			"qcom,fcc-max-ua", &chip->dt.batt_profile_fcc_ua);
+	if (rc < 0)
+		chip->dt.batt_profile_fcc_ua = -EINVAL;
+
+	rc = of_property_read_u32(node,
+				"qcom,usb-icl-ua", &chip->dt.usb_icl_ua);
+	if (rc < 0)
+		chip->dt.usb_icl_ua = -EINVAL;
+
+	rc = of_property_read_u32(node, "qcom,chg-term-src",
+			&chip->dt.term_current_src);
+	if (rc < 0)
+		chip->dt.term_current_src = ITERM_SRC_UNSPECIFIED;
+
+	if (chip->dt.term_current_src == ITERM_SRC_ADC)
+		rc = of_property_read_u32(node, "qcom,chg-term-base-current-ma",
+				&chip->dt.term_current_thresh_lo_ma);
+
+	rc = of_property_read_u32(node, "qcom,chg-term-current-ma",
+			&chip->dt.term_current_thresh_hi_ma);
+
+	return 0;
+}
+
+static int smblite_parse_dt_voltages(struct smblite *chip,
+					struct device_node *node)
+{
+	int rc = 0, delta_mv = 4200;
+
+	rc = of_property_read_u32(node,
+				"qcom,fv-max-uv", &chip->dt.batt_profile_fv_uv);
+	if (rc < 0)
+		chip->dt.batt_profile_fv_uv = -EINVAL;
+	else
+		delta_mv = chip->dt.batt_profile_fv_uv - 50;
+
+	chip->dt.chg_inhibit_thr_mv = -EINVAL;
+	rc = of_property_read_u32(node, "qcom,chg-inhibit-threshold-mv",
+				&chip->dt.chg_inhibit_thr_mv);
+	if (!rc && (chip->dt.chg_inhibit_thr_mv <= 0 ||
+			chip->dt.chg_inhibit_thr_mv > delta_mv)) {
+		pr_err("qcom,chg-inhibit-threshold-mv is incorrect\n");
+		return -EINVAL;
+	}
+
+	chip->dt.auto_recharge_vbat_mv = -EINVAL;
+	rc = of_property_read_u32(node, "qcom,auto-recharge-vbat-mv",
+				&chip->dt.auto_recharge_vbat_mv);
+	if (!rc && (chip->dt.auto_recharge_vbat_mv <= 0 ||
+			chip->dt.auto_recharge_vbat_mv > delta_mv)) {
+		pr_err("qcom,auto-recharge-vbat-mv is incorrect\n");
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static int smblite_parse_dt(struct smblite *chip)
+{
+	struct smb_charger *chg = &chip->chg;
+	struct device_node *node = chg->dev->of_node;
+	int rc = 0;
+
+	if (!node) {
+		pr_err("device tree node missing\n");
+		return -EINVAL;
+	}
+
+	rc = smblite_parse_dt_voltages(chip, node);
+	if (rc < 0)
+		return rc;
+
+	rc = smblite_parse_dt_currents(chip, node);
+	if (rc < 0)
+		return rc;
+
+	rc = smblite_parse_dt_adc_channels(chg);
+	if (rc < 0)
+		return rc;
+
+	rc = smblite_parse_dt_misc(chip, node);
+	if (rc < 0)
+		return rc;
+
+	return 0;
+}
+
+/************************
+ * USB PSY REGISTRATION *
+ ************************/
+static enum power_supply_property smblite_usb_props[] = {
+	POWER_SUPPLY_PROP_PRESENT,
+	POWER_SUPPLY_PROP_ONLINE,
+	POWER_SUPPLY_PROP_VOLTAGE_NOW,
+	POWER_SUPPLY_PROP_SDP_CURRENT_MAX,
+	POWER_SUPPLY_PROP_TYPE,
+	POWER_SUPPLY_PROP_TYPEC_MODE,
+	POWER_SUPPLY_PROP_TYPEC_POWER_ROLE,
+	POWER_SUPPLY_PROP_TYPEC_CC_ORIENTATION,
+	POWER_SUPPLY_PROP_INPUT_CURRENT_SETTLED,
+	POWER_SUPPLY_PROP_HW_CURRENT_MAX,
+	POWER_SUPPLY_PROP_REAL_TYPE,
+	POWER_SUPPLY_PROP_CONNECTOR_TYPE,
+	POWER_SUPPLY_PROP_SCOPE,
+};
+
+static int smblite_usb_get_prop(struct power_supply *psy,
+		enum power_supply_property psp,
+		union power_supply_propval *val)
+{
+	struct smblite *chip = power_supply_get_drvdata(psy);
+	struct smb_charger *chg = &chip->chg;
+	int rc = 0;
+
+	val->intval = 0;
+	switch (psp) {
+	case POWER_SUPPLY_PROP_PRESENT:
+		rc = smblite_lib_get_prop_usb_present(chg, val);
+		break;
+	case POWER_SUPPLY_PROP_ONLINE:
+		rc = smblite_lib_get_usb_online(chg, val);
+		break;
+	case POWER_SUPPLY_PROP_VOLTAGE_NOW:
+		rc = smblite_lib_get_prop_usb_voltage_now(chg, val);
+		break;
+	case POWER_SUPPLY_PROP_SDP_CURRENT_MAX:
+		rc = smblite_lib_get_charge_current(chg, &val->intval);
+		break;
+	case POWER_SUPPLY_PROP_TYPE:
+		val->intval = POWER_SUPPLY_TYPE_USB;
+		break;
+	case POWER_SUPPLY_PROP_REAL_TYPE:
+		val->intval = chg->real_charger_type;
+		break;
+	case POWER_SUPPLY_PROP_TYPEC_MODE:
+		rc = smblite_lib_get_usb_prop_typec_mode(chg, val);
+		break;
+	case POWER_SUPPLY_PROP_TYPEC_POWER_ROLE:
+		rc = smblite_lib_get_prop_typec_power_role(chg, val);
+		break;
+	case POWER_SUPPLY_PROP_TYPEC_CC_ORIENTATION:
+		rc = smblite_lib_get_prop_typec_cc_orientation(chg, val);
+		break;
+	case POWER_SUPPLY_PROP_INPUT_CURRENT_SETTLED:
+		rc = smblite_lib_get_prop_input_current_settled(chg, val);
+		break;
+	case POWER_SUPPLY_PROP_HW_CURRENT_MAX:
+		rc = smblite_lib_get_hw_current_max(chg, &val->intval);
+		break;
+	case POWER_SUPPLY_PROP_CONNECTOR_TYPE:
+		val->intval = chg->connector_type;
+		break;
+	case POWER_SUPPLY_PROP_SCOPE:
+		rc = smblite_lib_get_prop_scope(chg, val);
+		break;
+	default:
+		pr_err("get prop %d is not supported in usb\n", psp);
+		rc = -EINVAL;
+		break;
+	}
+
+	if (rc < 0) {
+		pr_debug("Couldn't get prop %d rc = %d\n", psp, rc);
+		return -ENODATA;
+	}
+
+	return 0;
+}
+
+#define MIN_THERMAL_VOTE_UA	500000
+static int smblite_usb_set_prop(struct power_supply *psy,
+		enum power_supply_property psp,
+		const union power_supply_propval *val)
+{
+	struct smblite *chip = power_supply_get_drvdata(psy);
+	struct smb_charger *chg = &chip->chg;
+	int rc = 0;
+
+	switch (psp) {
+	case POWER_SUPPLY_PROP_SDP_CURRENT_MAX:
+		rc = smblite_lib_set_prop_current_max(chg, val);
+		break;
+	case POWER_SUPPLY_PROP_REAL_TYPE:
+		rc = smblite_lib_set_prop_usb_type(chg, val);
+		break;
+	default:
+		pr_err("set prop %d is not supported\n", psp);
+		rc = -EINVAL;
+		break;
+	}
+
+	return rc;
+}
+
+static int smblite_usb_prop_is_writeable(struct power_supply *psy,
+		enum power_supply_property psp)
+{
+	int rc = 0;
+
+	switch (psp) {
+	default:
+		rc = 0;
+		break;
+	}
+
+	return rc;
+}
+
+static const struct power_supply_desc usb_psy_desc = {
+	.name = "usb",
+	.type = POWER_SUPPLY_TYPE_USB,
+	.properties = smblite_usb_props,
+	.num_properties = ARRAY_SIZE(smblite_usb_props),
+	.get_property = smblite_usb_get_prop,
+	.set_property = smblite_usb_set_prop,
+	.property_is_writeable = smblite_usb_prop_is_writeable,
+};
+
+static int smblite_init_usb_psy(struct smblite *chip)
+{
+	struct power_supply_config usb_cfg = {};
+	struct smb_charger *chg = &chip->chg;
+
+	usb_cfg.drv_data = chip;
+	usb_cfg.of_node = chg->dev->of_node;
+	chg->usb_psy = devm_power_supply_register(chg->dev,
+						  &usb_psy_desc,
+						  &usb_cfg);
+	if (IS_ERR(chg->usb_psy)) {
+		pr_err("Couldn't register USB power supply\n");
+		return PTR_ERR(chg->usb_psy);
+	}
+
+	return 0;
+}
+
+/*****************************
+ * USB MAIN PSY REGISTRATION *
+ *****************************/
+
+static enum power_supply_property smblite_usb_main_props[] = {
+	POWER_SUPPLY_PROP_VOLTAGE_MAX,
+	POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX,
+	POWER_SUPPLY_PROP_TYPE,
+	POWER_SUPPLY_PROP_INPUT_CURRENT_SETTLED,
+	POWER_SUPPLY_PROP_INPUT_VOLTAGE_SETTLED,
+	POWER_SUPPLY_PROP_FCC_DELTA,
+	POWER_SUPPLY_PROP_CURRENT_MAX,
+};
+
+static int smblite_usb_main_get_prop(struct power_supply *psy,
+		enum power_supply_property psp,
+		union power_supply_propval *val)
+{
+	struct smblite *chip = power_supply_get_drvdata(psy);
+	struct smb_charger *chg = &chip->chg;
+	int rc = 0;
+
+	switch (psp) {
+	case POWER_SUPPLY_PROP_VOLTAGE_MAX:
+		rc = smblite_lib_get_charge_param(chg, &chg->param.fv,
+							&val->intval);
+		break;
+	case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX:
+		rc = smblite_lib_get_charge_param(chg, &chg->param.fcc,
+							&val->intval);
+		break;
+	case POWER_SUPPLY_PROP_TYPE:
+		val->intval = POWER_SUPPLY_TYPE_MAIN;
+		break;
+	case POWER_SUPPLY_PROP_INPUT_CURRENT_SETTLED:
+		rc = smblite_lib_get_prop_input_current_settled(chg, val);
+		break;
+	case POWER_SUPPLY_PROP_INPUT_VOLTAGE_SETTLED:
+		rc = smblite_lib_get_prop_input_voltage_settled(chg, val);
+		break;
+	case POWER_SUPPLY_PROP_FCC_DELTA:
+		val->intval = 0;
+		break;
+	case POWER_SUPPLY_PROP_CURRENT_MAX:
+		rc = smblite_lib_get_icl_current(chg, &val->intval);
+		break;
+	default:
+		pr_debug("get prop %d is not supported in usb-main\n", psp);
+		rc = -EINVAL;
+		break;
+	}
+	if (rc < 0)
+		pr_debug("Couldn't get prop %d rc = %d\n", psp, rc);
+
+	return rc;
+}
+
+static int smblite_usb_main_set_prop(struct power_supply *psy,
+		enum power_supply_property psp,
+		const union power_supply_propval *val)
+{
+	struct smblite *chip = power_supply_get_drvdata(psy);
+	struct smb_charger *chg = &chip->chg;
+	int rc = 0;
+
+	switch (psp) {
+	case POWER_SUPPLY_PROP_VOLTAGE_MAX:
+		rc = smblite_lib_set_charge_param(chg, &chg->param.fv,
+						val->intval);
+		break;
+	case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX:
+		rc = smblite_lib_set_charge_param(chg, &chg->param.fcc,
+						val->intval);
+		break;
+	case POWER_SUPPLY_PROP_CURRENT_MAX:
+		rc = smblite_lib_set_icl_current(chg, val->intval);
+		break;
+	default:
+		pr_err("set prop %d is not supported\n", psp);
+		rc = -EINVAL;
+		break;
+	}
+
+	return rc;
+}
+
+static int smblite_usb_main_prop_is_writeable(struct power_supply *psy,
+				enum power_supply_property psp)
+{
+	int rc = 0;
+
+	switch (psp) {
+	default:
+		rc = 0;
+		break;
+	}
+
+	return rc;
+}
+
+static const struct power_supply_desc usb_main_psy_desc = {
+	.name		= "main",
+	.type		= POWER_SUPPLY_TYPE_MAIN,
+	.properties	= smblite_usb_main_props,
+	.num_properties	= ARRAY_SIZE(smblite_usb_main_props),
+	.get_property	= smblite_usb_main_get_prop,
+	.set_property	= smblite_usb_main_set_prop,
+	.property_is_writeable = smblite_usb_main_prop_is_writeable,
+};
+
+static int smblite_init_usb_main_psy(struct smblite *chip)
+{
+	struct power_supply_config usb_main_cfg = {};
+	struct smb_charger *chg = &chip->chg;
+
+	usb_main_cfg.drv_data = chip;
+	usb_main_cfg.of_node = chg->dev->of_node;
+	chg->usb_main_psy = devm_power_supply_register(chg->dev,
+						  &usb_main_psy_desc,
+						  &usb_main_cfg);
+	if (IS_ERR(chg->usb_main_psy)) {
+		pr_err("Couldn't register USB main power supply\n");
+		return PTR_ERR(chg->usb_main_psy);
+	}
+
+	return 0;
+}
+
+/*************************
+ * BATT PSY REGISTRATION *
+ *************************/
+static enum power_supply_property smblite_batt_props[] = {
+	POWER_SUPPLY_PROP_INPUT_SUSPEND,
+	POWER_SUPPLY_PROP_STATUS,
+	POWER_SUPPLY_PROP_HEALTH,
+	POWER_SUPPLY_PROP_PRESENT,
+	POWER_SUPPLY_PROP_CHARGE_TYPE,
+	POWER_SUPPLY_PROP_CAPACITY,
+	POWER_SUPPLY_PROP_CHARGER_TEMP,
+	POWER_SUPPLY_PROP_VOLTAGE_NOW,
+	POWER_SUPPLY_PROP_VOLTAGE_MAX,
+	POWER_SUPPLY_PROP_CURRENT_NOW,
+	POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX,
+	POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT,
+	POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT,
+	POWER_SUPPLY_PROP_TEMP,
+	POWER_SUPPLY_PROP_TECHNOLOGY,
+	POWER_SUPPLY_PROP_STEP_CHARGING_ENABLED,
+	POWER_SUPPLY_PROP_SW_JEITA_ENABLED,
+	POWER_SUPPLY_PROP_CHARGE_DONE,
+	POWER_SUPPLY_PROP_SET_SHIP_MODE,
+	POWER_SUPPLY_PROP_DIE_HEALTH,
+	POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX,
+	POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT,
+	POWER_SUPPLY_PROP_CHARGE_COUNTER,
+	POWER_SUPPLY_PROP_CYCLE_COUNT,
+	POWER_SUPPLY_PROP_RECHARGE_SOC,
+	POWER_SUPPLY_PROP_CHARGE_FULL,
+	POWER_SUPPLY_PROP_FORCE_RECHARGE,
+	POWER_SUPPLY_PROP_FCC_STEPPER_ENABLE,
+	POWER_SUPPLY_PROP_INPUT_CURRENT_LIMITED,
+};
+
+#define DEBUG_ACCESSORY_TEMP_DECIDEGC	250
+static int smblite_batt_get_prop(struct power_supply *psy,
+		enum power_supply_property psp,
+		union power_supply_propval *val)
+{
+	struct smb_charger *chg = power_supply_get_drvdata(psy);
+	int rc = 0;
+
+	switch (psp) {
+	case POWER_SUPPLY_PROP_STATUS:
+		rc = smblite_lib_get_prop_batt_status(chg, val);
+		break;
+	case POWER_SUPPLY_PROP_HEALTH:
+		rc = smblite_lib_get_prop_batt_health(chg, val);
+		break;
+	case POWER_SUPPLY_PROP_PRESENT:
+		rc = smblite_lib_get_prop_batt_present(chg, val);
+		break;
+	case POWER_SUPPLY_PROP_INPUT_SUSPEND:
+		rc = smblite_lib_get_prop_input_suspend(chg, val);
+		break;
+	case POWER_SUPPLY_PROP_CHARGE_TYPE:
+		rc = smblite_lib_get_prop_batt_charge_type(chg, val);
+		break;
+	case POWER_SUPPLY_PROP_CAPACITY:
+		rc = smblite_lib_get_prop_batt_capacity(chg, val);
+		break;
+	case POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT:
+		rc = smblite_lib_get_prop_system_temp_level(chg, val);
+		break;
+	case POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX:
+		rc = smblite_lib_get_prop_system_temp_level_max(chg, val);
+		break;
+	case POWER_SUPPLY_PROP_CHARGER_TEMP:
+		rc = smblite_lib_get_prop_charger_temp(chg, val);
+		break;
+	case POWER_SUPPLY_PROP_STEP_CHARGING_ENABLED:
+		val->intval = chg->step_chg_enabled;
+		break;
+	case POWER_SUPPLY_PROP_SW_JEITA_ENABLED:
+		val->intval = 1;
+		break;
+	case POWER_SUPPLY_PROP_VOLTAGE_NOW:
+		rc = smblite_lib_get_prop_from_bms(chg,
+				POWER_SUPPLY_PROP_VOLTAGE_NOW, val);
+		break;
+	case POWER_SUPPLY_PROP_VOLTAGE_MAX:
+		val->intval = get_client_vote(chg->fv_votable,
+					      BATT_PROFILE_VOTER);
+		break;
+	case POWER_SUPPLY_PROP_CURRENT_NOW:
+		rc = smblite_lib_get_batt_current_now(chg, val);
+		break;
+	case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX:
+		val->intval = get_client_vote(chg->fcc_votable,
+					      BATT_PROFILE_VOTER);
+		break;
+	case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT:
+		val->intval = get_effective_result(chg->fcc_votable);
+		break;
+	case POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT:
+		rc = smblite_lib_get_prop_batt_iterm(chg, val);
+		break;
+	case POWER_SUPPLY_PROP_TEMP:
+		if (chg->typec_mode == POWER_SUPPLY_TYPEC_SINK_DEBUG_ACCESSORY)
+			val->intval = DEBUG_ACCESSORY_TEMP_DECIDEGC;
+		else
+			rc = smblite_lib_get_prop_from_bms(chg,
+						POWER_SUPPLY_PROP_TEMP, val);
+		break;
+	case POWER_SUPPLY_PROP_TECHNOLOGY:
+		val->intval = POWER_SUPPLY_TECHNOLOGY_LION;
+		break;
+	case POWER_SUPPLY_PROP_CHARGE_DONE:
+		rc = smblite_lib_get_prop_batt_charge_done(chg, val);
+		break;
+	case POWER_SUPPLY_PROP_SET_SHIP_MODE:
+		/* Not in ship mode as long as device is active */
+		val->intval = 0;
+		break;
+	case POWER_SUPPLY_PROP_DIE_HEALTH:
+		rc = smblite_lib_get_die_health(chg, val);
+		break;
+	case POWER_SUPPLY_PROP_CHARGE_COUNTER:
+		rc = smblite_lib_get_prop_from_bms(chg,
+				POWER_SUPPLY_PROP_CHARGE_COUNTER, val);
+		break;
+	case POWER_SUPPLY_PROP_CYCLE_COUNT:
+		rc = smblite_lib_get_prop_from_bms(chg,
+				POWER_SUPPLY_PROP_CYCLE_COUNT, val);
+		break;
+	case POWER_SUPPLY_PROP_RECHARGE_SOC:
+		val->intval = chg->auto_recharge_soc;
+		break;
+	case POWER_SUPPLY_PROP_CHARGE_FULL:
+		rc = smblite_lib_get_prop_from_bms(chg,
+				POWER_SUPPLY_PROP_CHARGE_FULL, val);
+		break;
+	case POWER_SUPPLY_PROP_FORCE_RECHARGE:
+		val->intval = 0;
+		break;
+	case POWER_SUPPLY_PROP_FCC_STEPPER_ENABLE:
+		val->intval = chg->fcc_stepper_enable;
+		break;
+	case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMITED:
+		rc = smblite_lib_get_prop_input_current_limited(chg, val);
+		break;
+	default:
+		pr_err("batt power supply prop %d not supported\n", psp);
+		return -EINVAL;
+	}
+
+	if (rc < 0) {
+		pr_debug("Couldn't get prop %d rc = %d\n", psp, rc);
+		return -ENODATA;
+	}
+
+	return 0;
+}
+
+static int smblite_batt_set_prop(struct power_supply *psy,
+		enum power_supply_property prop,
+		const union power_supply_propval *val)
+{
+	int rc = 0;
+	struct smb_charger *chg = power_supply_get_drvdata(psy);
+
+	switch (prop) {
+	case POWER_SUPPLY_PROP_STATUS:
+		rc = smblite_lib_set_prop_batt_status(chg, val);
+		break;
+	case POWER_SUPPLY_PROP_INPUT_SUSPEND:
+		rc = smblite_lib_set_prop_input_suspend(chg, val);
+		break;
+	case POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT:
+		rc = smblite_lib_set_prop_system_temp_level(chg, val);
+		break;
+	case POWER_SUPPLY_PROP_CAPACITY:
+		rc = smblite_lib_set_prop_batt_capacity(chg, val);
+		break;
+	case POWER_SUPPLY_PROP_VOLTAGE_MAX:
+		chg->batt_profile_fv_uv = val->intval;
+		vote(chg->fv_votable, BATT_PROFILE_VOTER, true, val->intval);
+		break;
+	case POWER_SUPPLY_PROP_STEP_CHARGING_ENABLED:
+		chg->step_chg_enabled = !!val->intval;
+		break;
+	case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX:
+		chg->batt_profile_fcc_ua = val->intval;
+		vote(chg->fcc_votable, BATT_PROFILE_VOTER, true, val->intval);
+		break;
+	case POWER_SUPPLY_PROP_SET_SHIP_MODE:
+		/* Not in ship mode as long as the device is active */
+		if (!val->intval)
+			break;
+		if (chg->pl.psy)
+			power_supply_set_property(chg->pl.psy,
+				POWER_SUPPLY_PROP_SET_SHIP_MODE, val);
+		rc = smblite_lib_set_prop_ship_mode(chg, val);
+		break;
+	case POWER_SUPPLY_PROP_DIE_HEALTH:
+		power_supply_changed(chg->batt_psy);
+		break;
+	case POWER_SUPPLY_PROP_RECHARGE_SOC:
+		rc = smblite_lib_set_prop_rechg_soc_thresh(chg, val);
+		break;
+	case POWER_SUPPLY_PROP_FORCE_RECHARGE:
+		/* toggle charging to force recharge */
+		vote(chg->chg_disable_votable, FORCE_RECHARGE_VOTER,
+					true, 0);
+		/* charge disable delay */
+		msleep(50);
+		vote(chg->chg_disable_votable, FORCE_RECHARGE_VOTER,
+					false, 0);
+		break;
+	case POWER_SUPPLY_PROP_FCC_STEPPER_ENABLE:
+		chg->fcc_stepper_enable = val->intval;
+		break;
+	default:
+		rc = -EINVAL;
+	}
+
+	return rc;
+}
+
+static int smblite_batt_prop_is_writeable(struct power_supply *psy,
+		enum power_supply_property psp)
+{
+	int rc = 0;
+
+	switch (psp) {
+	case POWER_SUPPLY_PROP_STATUS:
+	case POWER_SUPPLY_PROP_INPUT_SUSPEND:
+	case POWER_SUPPLY_PROP_SYSTEM_TEMP_LEVEL:
+	case POWER_SUPPLY_PROP_CAPACITY:
+	case POWER_SUPPLY_PROP_DIE_HEALTH:
+	case POWER_SUPPLY_PROP_STEP_CHARGING_ENABLED:
+		rc = 1;
+		break;
+	default:
+		rc = 0;
+		break;
+	}
+
+	return rc;
+}
+
+static const struct power_supply_desc batt_psy_desc = {
+	.name = "battery",
+	.type = POWER_SUPPLY_TYPE_BATTERY,
+	.properties = smblite_batt_props,
+	.num_properties = ARRAY_SIZE(smblite_batt_props),
+	.get_property = smblite_batt_get_prop,
+	.set_property = smblite_batt_set_prop,
+	.property_is_writeable = smblite_batt_prop_is_writeable,
+};
+
+static int smblite_init_batt_psy(struct smblite *chip)
+{
+	struct power_supply_config batt_cfg = {};
+	struct smb_charger *chg = &chip->chg;
+	int rc = 0;
+
+	batt_cfg.drv_data = chg;
+	batt_cfg.of_node = chg->dev->of_node;
+	chg->batt_psy = devm_power_supply_register(chg->dev,
+					   &batt_psy_desc,
+					   &batt_cfg);
+	if (IS_ERR(chg->batt_psy)) {
+		pr_err("Couldn't register battery power supply\n");
+		return PTR_ERR(chg->batt_psy);
+	}
+
+	return rc;
+}
+
+/***************************
+ * HARDWARE INITIALIZATION *
+ ***************************/
+static int smblite_configure_typec(struct smb_charger *chg)
+{
+	union power_supply_propval pval = {0, };
+	int rc;
+	u8 val = 0;
+
+	rc = smblite_lib_read(chg, LEGACY_CABLE_STATUS_REG, &val);
+	if (rc < 0) {
+		dev_err(chg->dev, "Couldn't read Legacy status rc=%d\n", rc);
+		return rc;
+	}
+
+	/*
+	 * Across reboot, standard typeC cables get detected as legacy cables
+	 * due to VBUS attachment prior to CC attach/dettach, reset legacy cable
+	 * detection by disabling/enabling typeC mode.
+	 */
+	if (val & TYPEC_LEGACY_CABLE_STATUS_BIT) {
+		pval.intval = POWER_SUPPLY_TYPEC_PR_NONE;
+		smblite_lib_set_prop_typec_power_role(chg, &pval);
+		if (rc < 0) {
+			dev_err(chg->dev, "Couldn't disable TYPEC rc=%d\n", rc);
+			return rc;
+		}
+
+		/* delay before enabling typeC */
+		msleep(50);
+
+		pval.intval = POWER_SUPPLY_TYPEC_PR_DUAL;
+		smblite_lib_set_prop_typec_power_role(chg, &pval);
+		if (rc < 0) {
+			dev_err(chg->dev, "Couldn't enable TYPEC rc=%d\n", rc);
+			return rc;
+		}
+	}
+
+	/* Use simple write to clear interrupts */
+	rc = smblite_lib_write(chg, TYPE_C_INTERRUPT_EN_CFG_1_REG, 0);
+	if (rc < 0) {
+		dev_err(chg->dev,
+			"Couldn't configure Type-C interrupts rc=%d\n", rc);
+		return rc;
+	}
+
+	rc = smblite_lib_masked_write(chg, TYPE_C_MODE_CFG_REG,
+					EN_SNK_ONLY_BIT, 0);
+	if (rc < 0) {
+		dev_err(chg->dev,
+			"Couldn't configure TYPE_C_MODE_CFG_REG rc=%d\n",
+				rc);
+		return rc;
+	}
+
+	/* Enable detection of unoriented debug accessory in source mode */
+	rc = smblite_lib_masked_write(chg, DEBUG_ACCESS_SRC_CFG_REG,
+				 EN_UNORIENTED_DEBUG_ACCESS_SRC_BIT,
+				 EN_UNORIENTED_DEBUG_ACCESS_SRC_BIT);
+	if (rc < 0) {
+		dev_err(chg->dev,
+			"Couldn't configure TYPE_C_DEBUG_ACCESS_SRC_CFG_REG rc=%d\n",
+				rc);
+		return rc;
+	}
+
+	rc = smblite_lib_masked_write(chg, TYPE_C_EXIT_STATE_CFG_REG,
+				SEL_SRC_UPPER_REF_BIT, SEL_SRC_UPPER_REF_BIT);
+	if (rc < 0)
+		dev_err(chg->dev,
+			"Couldn't configure CC threshold voltage rc=%d\n", rc);
+
+	return rc;
+}
+
+#define RAW_ITERM(iterm_ma, max_range)				\
+		div_s64((int64_t)iterm_ma * ADC_CHG_ITERM_MASK, max_range)
+static int smblite_configure_iterm_thresholds_adc(struct smblite *chip)
+{
+	u8 *buf;
+	int rc = 0;
+	s16 raw_hi_thresh, raw_lo_thresh, max_limit_ma;
+	struct smb_charger *chg = &chip->chg;
+
+	max_limit_ma = ITERM_LIMITS_MA;
+
+	if (chip->dt.term_current_thresh_hi_ma < (-1 * max_limit_ma)
+		|| chip->dt.term_current_thresh_hi_ma > max_limit_ma
+		|| chip->dt.term_current_thresh_lo_ma < (-1 * max_limit_ma)
+		|| chip->dt.term_current_thresh_lo_ma > max_limit_ma) {
+		dev_err(chg->dev, "ITERM threshold out of range rc=%d\n", rc);
+		return -EINVAL;
+	}
+
+	/*
+	 * Conversion:
+	 *	raw (A) = (term_current * ADC_CHG_ITERM_MASK) / max_limit_ma
+	 * Note: raw needs to be converted to big-endian format.
+	 */
+
+	if (chip->dt.term_current_thresh_hi_ma) {
+		raw_hi_thresh = RAW_ITERM(chip->dt.term_current_thresh_hi_ma,
+					max_limit_ma);
+		raw_hi_thresh = sign_extend32(raw_hi_thresh, 15);
+		buf = (u8 *)&raw_hi_thresh;
+		raw_hi_thresh = buf[1] | (buf[0] << 8);
+
+		rc = smblite_lib_batch_write(chg, CHGR_ADC_ITERM_UP_THD_MSB_REG,
+				(u8 *)&raw_hi_thresh, 2);
+		if (rc < 0) {
+			dev_err(chg->dev, "Couldn't configure ITERM threshold HIGH rc=%d\n",
+					rc);
+			return rc;
+		}
+	}
+
+	if (chip->dt.term_current_thresh_lo_ma) {
+		raw_lo_thresh = RAW_ITERM(chip->dt.term_current_thresh_lo_ma,
+					max_limit_ma);
+		raw_lo_thresh = sign_extend32(raw_lo_thresh, 15);
+		buf = (u8 *)&raw_lo_thresh;
+		raw_lo_thresh = buf[1] | (buf[0] << 8);
+
+		rc = smblite_lib_batch_write(chg, CHGR_ADC_ITERM_LO_THD_MSB_REG,
+				(u8 *)&raw_lo_thresh, 2);
+		if (rc < 0) {
+			dev_err(chg->dev, "Couldn't configure ITERM threshold LOW rc=%d\n",
+					rc);
+			return rc;
+		}
+	}
+
+	return rc;
+}
+
+static int smblite_configure_iterm_thresholds(struct smblite *chip)
+{
+	int rc = 0;
+
+	switch (chip->dt.term_current_src) {
+	case ITERM_SRC_ADC:
+		rc = smblite_configure_iterm_thresholds_adc(chip);
+		break;
+	default:
+		break;
+	}
+
+	return rc;
+}
+
+static int smblite_configure_recharging(struct smblite *chip)
+{
+	int rc = 0;
+	struct smb_charger *chg = &chip->chg;
+	union power_supply_propval pval;
+
+	/* Configure VBATT-based or automatic recharging */
+	rc = smblite_lib_masked_write(chg, CHGR_RECHG_CFG_REG, RECHG_MASK,
+				(chip->dt.auto_recharge_vbat_mv > 0) ?
+				VBAT_BASED_RECHG_BIT : 0);
+	if (rc < 0) {
+		dev_err(chg->dev, "Couldn't configure VBAT-rechg CHG_CFG2_REG rc=%d\n",
+			rc);
+		return rc;
+	}
+
+	/* program the auto-recharge VBAT threshold */
+	if (chip->dt.auto_recharge_vbat_mv  > 0) {
+		u32 temp = VBAT_TO_VRAW_ADC(chip->dt.auto_recharge_vbat_mv);
+
+		temp = ((temp & 0xFF00) >> 8) | ((temp & 0xFF) << 8);
+		rc = smblite_lib_batch_write(chg,
+			CHGR_ADC_RECHARGE_THRESHOLD_MSB_REG, (u8 *)&temp, 2);
+		if (rc < 0) {
+			dev_err(chg->dev, "Couldn't configure ADC_RECHARGE_THRESHOLD REG rc=%d\n",
+				rc);
+			return rc;
+		}
+		/* Program the sample count for VBAT based recharge to 3 */
+		rc = smblite_lib_masked_write(chg, CHGR_RECHG_CFG_REG,
+					NO_OF_SAMPLE_FOR_RCHG, 3);
+		if (rc < 0) {
+			dev_err(chg->dev, "Couldn't configure CHGR_NO_SAMPLE_FOR_TERM_RCHG_CFG rc=%d\n",
+				rc);
+			return rc;
+		}
+	}
+
+	rc = smblite_lib_masked_write(chg, CHGR_RECHG_CFG_REG, RECHG_MASK,
+				(chip->dt.auto_recharge_soc != -EINVAL) ?
+				SOC_BASED_RECHG_BIT : VBAT_BASED_RECHG_BIT);
+	if (rc < 0) {
+		dev_err(chg->dev, "Couldn't configure SOC-rechg CHG_CFG2_REG rc=%d\n",
+			rc);
+		return rc;
+	}
+
+	/* program the auto-recharge threshold */
+	if (chip->dt.auto_recharge_soc != -EINVAL) {
+		pval.intval = chip->dt.auto_recharge_soc;
+		rc = smblite_lib_set_prop_rechg_soc_thresh(chg, &pval);
+		if (rc < 0) {
+			dev_err(chg->dev, "Couldn't configure CHG_RCHG_SOC_REG rc=%d\n",
+					rc);
+			return rc;
+		}
+	}
+
+	return 0;
+}
+
+static int smblite_init_connector_type(struct smb_charger *chg)
+{
+	int rc, type = 0;
+	u8 val = 0;
+
+	rc = smblite_lib_read(chg, TYPEC_U_USB_CFG_REG, &val);
+	if (rc < 0) {
+		dev_err(chg->dev, "Couldn't read U_USB config rc=%d\n",
+				rc);
+		return rc;
+	}
+
+	type = !!(val & EN_MICRO_USB_MODE_BIT);
+
+	pr_debug("Connector type=%s\n", type ? "Micro USB" : "TypeC");
+
+	if (type) {
+		chg->connector_type = POWER_SUPPLY_CONNECTOR_MICRO_USB;
+	} else {
+		chg->connector_type = POWER_SUPPLY_CONNECTOR_TYPEC;
+		rc = smblite_configure_typec(chg);
+		if (rc < 0) {
+			dev_err(chg->dev,
+				"Couldn't configure TypeC/micro-USB mode rc=%d\n",
+				rc);
+			return rc;
+		}
+	}
+
+	return 0;
+}
+
+static int smblite_init_hw(struct smblite *chip)
+{
+	struct smb_charger *chg = &chip->chg;
+	int rc;
+	u8 val = 0, mask = 0;
+	u32 temp;
+
+	if (chip->dt.no_battery)
+		chg->fake_capacity = 50;
+
+	if (chip->dt.batt_profile_fcc_ua < 0)
+		smblite_lib_get_charge_param(chg, &chg->param.fcc,
+				&chg->batt_profile_fcc_ua);
+
+	if (chip->dt.batt_profile_fv_uv < 0)
+		smblite_lib_get_charge_param(chg, &chg->param.fv,
+				&chg->batt_profile_fv_uv);
+
+	smblite_lib_get_charge_param(chg, &chg->param.aicl_5v_threshold,
+				&chg->default_aicl_5v_threshold_mv);
+	chg->aicl_5v_threshold_mv = chg->default_aicl_5v_threshold_mv;
+
+	rc = smblite_init_connector_type(chg);
+	if (rc < 0) {
+		dev_err(chg->dev, "Couldn't configure connector type rc=%d\n",
+				rc);
+		return rc;
+	}
+
+	rc = schgm_flashlite_init(chg);
+	if (rc < 0) {
+		pr_err("Couldn't configure flash rc=%d\n", rc);
+		return rc;
+	}
+
+	rc = smblite_lib_icl_override(chg, HW_AUTO_MODE);
+	if (rc < 0) {
+		pr_err("Couldn't disable ICL override rc=%d\n", rc);
+		return rc;
+	}
+
+	/* vote 0mA on usb_icl for non battery platforms */
+	vote(chg->usb_icl_votable,
+		DEFAULT_VOTER, chip->dt.no_battery, 0);
+	vote(chg->fcc_votable, HW_LIMIT_VOTER,
+		chip->dt.batt_profile_fcc_ua > 0, chip->dt.batt_profile_fcc_ua);
+	vote(chg->fv_votable, HW_LIMIT_VOTER,
+		chip->dt.batt_profile_fv_uv > 0, chip->dt.batt_profile_fv_uv);
+	vote(chg->fcc_votable,
+		BATT_PROFILE_VOTER, chg->batt_profile_fcc_ua > 0,
+		chg->batt_profile_fcc_ua);
+	vote(chg->fv_votable,
+		BATT_PROFILE_VOTER, chg->batt_profile_fv_uv > 0,
+		chg->batt_profile_fv_uv);
+
+	/* Some h/w limit maximum supported ICL */
+	vote(chg->usb_icl_votable, HW_LIMIT_VOTER,
+			chip->dt.usb_icl_ua > 0, chip->dt.usb_icl_ua);
+
+	/*
+	 * AICL configuration: enable aicl and aicl rerun and based on DT
+	 * configuration enable/disable ADB based AICL and Suspend on collapse.
+	 */
+
+	mask = USBIN_AICL_PERIODIC_RERUN_EN_BIT | USBIN_AICL_RERUN_TIME_MASK;
+	val = USBIN_AICL_PERIODIC_RERUN_EN_BIT | AICL_RERUN_TIME_12S_VAL;
+	rc = smblite_lib_masked_write(chg, MISC_AICL_RERUN_CFG_REG, mask, val);
+	if (rc < 0) {
+		dev_err(chg->dev, "Couldn't config AICL rerun rc=%d\n", rc);
+		return rc;
+	}
+
+	mask = USBIN_AICL_EN_BIT | USBIN_AICL_START_AT_MAX;
+	val = USBIN_AICL_EN_BIT;
+	rc = smblite_lib_masked_write(chg, USBIN_AICL_OPTIONS_CFG_REG, mask,
+				val);
+	if (rc < 0) {
+		dev_err(chg->dev, "Couldn't config AICL rc=%d\n", rc);
+		return rc;
+	}
+
+	if (!chip->dt.disable_suspend_on_collapse) {
+		rc = smblite_lib_masked_write(chg, USBIN_INPUT_SUSPEND_REG,
+				SUSPEND_ON_COLLAPSE_USBIN_BIT,
+				SUSPEND_ON_COLLAPSE_USBIN_BIT);
+		if (rc < 0) {
+			dev_err(chg->dev, "Couldn't config AICL rc=%d\n", rc);
+			return rc;
+		}
+	}
+
+	/* enable the charging path */
+	rc = vote(chg->chg_disable_votable, DEFAULT_VOTER, false, 0);
+	if (rc < 0) {
+		dev_err(chg->dev, "Couldn't enable charging rc=%d\n", rc);
+		return rc;
+	}
+
+	/* configure VBUS for software control */
+	rc = smblite_lib_masked_write(chg, DCDC_OTG_CFG_REG,
+				OTG_EN_SRC_CFG_BIT, 0);
+	if (rc < 0) {
+		dev_err(chg->dev,
+			"Couldn't configure VBUS for SW control rc=%d\n", rc);
+		return rc;
+	}
+
+	val = (ilog2(chip->dt.wd_bark_time / 16) << BARK_WDOG_TIMEOUT_SHIFT)
+						& BARK_WDOG_TIMEOUT_MASK;
+	val |= BITE_WDOG_TIMEOUT_8S << BITE_WDOG_TIMEOUT_SHIFT;
+
+	rc = smblite_lib_masked_write(chg, SNARL_BARK_BITE_WD_CFG_REG,
+			BARK_WDOG_TIMEOUT_MASK | BITE_WDOG_TIMEOUT_MASK,
+			val);
+	if (rc < 0) {
+		pr_err("Couldn't configue WD time config rc=%d\n", rc);
+		return rc;
+	}
+
+	/* enable WD BARK and enable it on plugin */
+	val = WDOG_TIMER_EN_ON_PLUGIN_BIT | BARK_WDOG_INT_EN_BIT
+		| BITE_WDOG_DISABLE_CHARGING_CFG_BIT | WDOG_TIMER_EN_BIT;
+	rc = smblite_lib_masked_write(chg, WD_CFG_REG, val, val);
+	if (rc < 0) {
+		pr_err("Couldn't configue WD config rc=%d\n", rc);
+		return rc;
+	}
+
+	/* set termination current threshold values */
+	rc = smblite_configure_iterm_thresholds(chip);
+	if (rc < 0) {
+		pr_err("Couldn't configure ITERM thresholds rc=%d\n",
+				rc);
+		return rc;
+	}
+
+	if (chip->dt.chg_inhibit_thr_mv > 0) {
+		temp = VBAT_TO_VRAW_ADC(chip->dt.chg_inhibit_thr_mv);
+		temp = ((temp & 0xFF00) >> 8) | ((temp & 0xFF) << 8);
+		rc = smblite_lib_batch_write(chg,
+			CHGR_INHIBIT_THRESHOLD_CFG_REG, (u8 *)&temp, 2);
+		if (rc < 0) {
+			dev_err(chg->dev, "Couldn't configure ADC_RECHARGE_THRESHOLD REG rc=%d\n",
+				rc);
+			return rc;
+		}
+		rc = smblite_lib_masked_write(chg, CHGR_INHIBIT_REG,
+					CHGR_INHIBIT_BIT, CHGR_INHIBIT_BIT);
+		if (rc < 0) {
+			dev_err(chg->dev, "Couldn't enable INHIBIT rc=%d\n",
+				rc);
+			return rc;
+		}
+	} else {
+		rc = smblite_lib_masked_write(chg, CHGR_INHIBIT_REG,
+					CHGR_INHIBIT_BIT, 0);
+		if (rc < 0) {
+			dev_err(chg->dev, "Couldn't enable INHIBIT rc=%d\n",
+				rc);
+			return rc;
+		}
+	}
+
+	mask = FAST_CHARGE_SAFETY_TIMER_EN_BIT | FAST_CHARGE_SAFETY_TIMER_MASK;
+	val = FAST_CHARGE_SAFETY_TIMER_EN_BIT
+					| FAST_CHARGE_SAFETY_TIMER_768_MIN;
+	rc = smblite_lib_masked_write(chg,
+			CHGR_FAST_CHARGE_SAFETY_TIMER_CFG_REG, mask, val);
+	if (rc < 0) {
+		dev_err(chg->dev, "Couldn't set CHGR_FAST_CHARGE_SAFETY_TIMER_CFG_REG rc=%d\n",
+			rc);
+		return rc;
+	}
+
+	rc = smblite_configure_recharging(chip);
+	if (rc < 0)
+		return rc;
+
+	return rc;
+}
+
+static int smblite_post_init(struct smblite *chip)
+{
+	struct smb_charger *chg = &chip->chg;
+	union power_supply_propval pval;
+	int rc;
+
+	/*
+	 * In case the usb path is suspended, we would have missed disabling
+	 * the icl change interrupt because the interrupt could have been
+	 * not requested
+	 */
+	rerun_election(chg->usb_icl_votable);
+
+	if (chg->connector_type == POWER_SUPPLY_CONNECTOR_TYPEC) {
+		/* configure power role for dual-role */
+		pval.intval = POWER_SUPPLY_TYPEC_PR_DUAL;
+		rc = smblite_lib_set_prop_typec_power_role(chg, &pval);
+		if (rc < 0) {
+			dev_err(chg->dev, "Couldn't configure DRP role rc=%d\n",
+					rc);
+			return rc;
+		}
+	}
+
+	return 0;
+}
+
+/****************************
+ * DETERMINE INITIAL STATUS *
+ ****************************/
+
+static int smblite_determine_initial_status(struct smblite *chip)
+{
+	struct smb_irq_data irq_data = {chip, "determine-initial-status"};
+	struct smb_charger *chg = &chip->chg;
+	union power_supply_propval val;
+	int rc;
+
+	rc = smblite_lib_get_prop_usb_present(chg, &val);
+	if (rc < 0) {
+		pr_err("Couldn't get usb present rc=%d\n", rc);
+		return rc;
+	}
+
+	if (chg->bms_psy)
+		smblite_lib_suspend_on_debug_battery(chg);
+
+	smblite_usb_plugin_irq_handler(0, &irq_data);
+	smblite_typec_attach_detach_irq_handler(0, &irq_data);
+	smblite_typec_state_change_irq_handler(0, &irq_data);
+	smblite_chg_state_change_irq_handler(0, &irq_data);
+	smblite_icl_change_irq_handler(0, &irq_data);
+	smblite_batt_temp_changed_irq_handler(0, &irq_data);
+	smblite_wdog_bark_irq_handler(0, &irq_data);
+	smblite_typec_or_rid_detection_change_irq_handler(0, &irq_data);
+
+	return 0;
+}
+
+/**************************
+ * INTERRUPT REGISTRATION *
+ **************************/
+
+static struct smb_irq_info smblite_irqs[] = {
+	/* CHARGER IRQs */
+	[CHGR_ERROR_IRQ] = {
+		.name		= "chgr-error",
+		.handler	= smblite_default_irq_handler,
+	},
+	[CHG_STATE_CHANGE_IRQ] = {
+		.name		= "chg-state-change",
+		.handler	= smblite_chg_state_change_irq_handler,
+		.wake		= true,
+	},
+	[VPH_OV_IRQ] = {
+		.name		= "vph-ov",
+	},
+	[BUCK_OC_IRQ] = {
+		.name		= "buck-oc",
+	},
+	/* DCDC IRQs */
+	[OTG_FAIL_IRQ] = {
+		.name		= "otg-fail",
+		.handler	= smblite_default_irq_handler,
+	},
+	[OTG_FAULT_IRQ] = {
+		.name		= "otg-fault",
+	},
+	[SKIP_MODE_IRQ] = {
+		.name		= "skip-mode",
+	},
+	[INPUT_CURRENT_LIMITING_IRQ] = {
+		.name		= "input-current-limiting",
+	},
+	[SWITCHER_POWER_OK_IRQ] = {
+		.name		= "switcher-power-ok",
+		.handler	= smblite_switcher_power_ok_irq_handler,
+	},
+	/* BATTERY IRQs */
+	[BAT_TEMP_IRQ] = {
+		.name		= "bat-temp",
+		.handler	= smblite_batt_temp_changed_irq_handler,
+		.wake		= true,
+	},
+	[BAT_THERM_OR_ID_MISSING_IRQ] = {
+		.name		= "bat-therm-or-id-missing",
+		.handler	= smblite_batt_psy_changed_irq_handler,
+	},
+	[BAT_LOW_IRQ] = {
+		.name		= "bat-low",
+		.handler	= smblite_batt_psy_changed_irq_handler,
+	},
+	[BAT_OV_IRQ] = {
+		.name		= "bat-ov",
+		.handler	= smblite_batt_psy_changed_irq_handler,
+	},
+	[BSM_ACTIVE_IRQ] = {
+		.name		= "bsm-active",
+	},
+	/* USB INPUT IRQs */
+	[USBIN_PLUGIN_IRQ] = {
+		.name		= "usbin-plugin",
+		.handler	= smblite_usb_plugin_irq_handler,
+		.wake           = true,
+	},
+	[USBIN_COLLAPSE_IRQ] = {
+		.name		= "usbin-collapse",
+	},
+	[USBIN_UV_IRQ] = {
+		.name		= "usbin-uv",
+		.handler	= smblite_usbin_uv_irq_handler,
+		.wake		= true,
+		.storm_data	= {true, 3000, 5},
+	},
+	[USBIN_OV_IRQ] = {
+		.name		= "usbin-ov",
+		.handler	= smblite_usbin_ov_irq_handler,
+	},
+	[USBIN_GT_VT_IRQ] = {
+		.name		= "usbin-gtvt",
+	},
+	[USBIN_ICL_CHANGE_IRQ] = {
+		.name		= "usbin-icl-change",
+		.handler	= smblite_icl_change_irq_handler,
+		.wake           = true,
+	},
+	/* TYPEC IRQs */
+	[TYPEC_OR_RID_DETECTION_CHANGE_IRQ] = {
+		.name		= "typec-or-rid-detect-change",
+		.handler	=
+			smblite_typec_or_rid_detection_change_irq_handler,
+		.wake           = true,
+	},
+	[TYPEC_VPD_DETECT_IRQ] = {
+		.name		= "typec-vpd-detect",
+	},
+	[TYPEC_CC_STATE_CHANGE_IRQ] = {
+		.name		= "typec-cc-state-change",
+		.handler	= smblite_typec_state_change_irq_handler,
+		.wake           = true,
+	},
+	[TYPEC_VBUS_CHANGE_IRQ] = {
+		.name		= "typec-vbus-change",
+	},
+	[TYPEC_ATTACH_DETACH_IRQ] = {
+		.name		= "typec-attach-detach",
+		.handler	= smblite_typec_attach_detach_irq_handler,
+		.wake		= true,
+	},
+	[TYPEC_LEGACY_CABLE_DETECT_IRQ] = {
+		.name		= "typec-legacy-cable-detect",
+		.handler	= smblite_default_irq_handler,
+	},
+	[TYPEC_TRY_SNK_SRC_DETECT_IRQ] = {
+		.name		= "typec-try-snk-src-detect",
+	},
+	/* MISCELLANEOUS IRQs */
+	[WDOG_SNARL_IRQ] = {
+		.name		= "wdog-snarl",
+	},
+	[WDOG_BARK_IRQ] = {
+		.name		= "wdog-bark",
+		.handler	= smblite_wdog_bark_irq_handler,
+		.wake		= true,
+	},
+	[AICL_FAIL_IRQ] = {
+		.name		= "aicl-fail",
+	},
+	[AICL_DONE_IRQ] = {
+		.name		= "aicl-done",
+	},
+	[IMP_TRIGGER_IRQ] = {
+		.name		= "imp-trigger",
+	},
+	[ALL_CHNL_CONV_DONE_IRQ] = {
+		.name		= "all-chnl-cond-done",
+	},
+	/*
+	 * triggered when DIE temperature across either of the
+	 * _REG_L, _REG_H, _RST, or _SHDN thresholds.
+	 */
+	[TEMP_CHANGE_IRQ] = {
+		.name		= "temp-change",
+		.handler	= smblite_temp_change_irq_handler,
+		.wake		= true,
+	},
+	/* FLASH */
+	[VREG_OK_IRQ] = {
+		.name		= "vreg-ok",
+	},
+	[ILIM_S2_IRQ] = {
+		.name		= "ilim2-s2",
+		.handler	= schgm_flashlite_ilim2_irq_handler,
+	},
+	[ILIM_S1_IRQ] = {
+		.name		= "ilim1-s1",
+	},
+	[FLASH_STATE_CHANGE_IRQ] = {
+		.name		= "flash-state-change",
+		.handler	= schgm_flashlite_state_change_irq_handler,
+	},
+	[TORCH_REQ_IRQ] = {
+		.name		= "torch-req",
+	},
+	[FLASH_EN_IRQ] = {
+		.name		= "flash-en",
+	},
+};
+
+static int smblite_get_irq_index_byname(const char *irq_name)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(smblite_irqs); i++) {
+		if (strcmp(smblite_irqs[i].name, irq_name) == 0)
+			return i;
+	}
+
+	return -ENOENT;
+}
+
+static int smblite_request_interrupt(struct smblite *chip,
+				struct device_node *node, const char *irq_name)
+{
+	struct smb_charger *chg = &chip->chg;
+	int rc, irq, irq_index;
+	struct smb_irq_data *irq_data;
+
+	irq = of_irq_get_byname(node, irq_name);
+	if (irq < 0) {
+		pr_err("Couldn't get irq %s byname\n", irq_name);
+		return irq;
+	}
+
+	irq_index = smblite_get_irq_index_byname(irq_name);
+	if (irq_index < 0) {
+		pr_err("%s is not a defined irq\n", irq_name);
+		return irq_index;
+	}
+
+	if (!smblite_irqs[irq_index].handler)
+		return 0;
+
+	irq_data = devm_kzalloc(chg->dev, sizeof(*irq_data), GFP_KERNEL);
+	if (!irq_data)
+		return -ENOMEM;
+
+	irq_data->parent_data = chip;
+	irq_data->name = irq_name;
+	irq_data->storm_data = smblite_irqs[irq_index].storm_data;
+	mutex_init(&irq_data->storm_data.storm_lock);
+
+	smblite_irqs[irq_index].enabled = true;
+	rc = devm_request_threaded_irq(chg->dev, irq, NULL,
+					smblite_irqs[irq_index].handler,
+					IRQF_ONESHOT, irq_name, irq_data);
+	if (rc < 0) {
+		pr_err("Couldn't request irq %d\n", irq);
+		return rc;
+	}
+
+	smblite_irqs[irq_index].irq = irq;
+	smblite_irqs[irq_index].irq_data = irq_data;
+	if (smblite_irqs[irq_index].wake)
+		enable_irq_wake(irq);
+
+	return rc;
+}
+
+static int smblite_request_interrupts(struct smblite *chip)
+{
+	struct smb_charger *chg = &chip->chg;
+	struct device_node *node = chg->dev->of_node;
+	struct device_node *child;
+	int rc = 0;
+	const char *name;
+	struct property *prop;
+
+	for_each_available_child_of_node(node, child) {
+		of_property_for_each_string(child, "interrupt-names",
+					    prop, name) {
+			rc = smblite_request_interrupt(chip, child, name);
+			if (rc < 0)
+				return rc;
+		}
+	}
+
+	return rc;
+}
+
+static void smblite_disable_interrupts(struct smb_charger *chg)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(smblite_irqs); i++) {
+		if (smblite_irqs[i].irq > 0) {
+			if (smblite_irqs[i].wake)
+				disable_irq_wake(smblite_irqs[i].irq);
+			disable_irq(smblite_irqs[i].irq);
+		}
+	}
+}
+
+#if defined(CONFIG_DEBUG_FS)
+
+static int force_batt_psy_update_write(void *data, u64 val)
+{
+	struct smb_charger *chg = data;
+
+	power_supply_changed(chg->batt_psy);
+	return 0;
+}
+DEFINE_DEBUGFS_ATTRIBUTE(force_batt_psy_update_ops, NULL,
+			force_batt_psy_update_write, "0x%02llx\n");
+
+static int force_usb_psy_update_write(void *data, u64 val)
+{
+	struct smb_charger *chg = data;
+
+	power_supply_changed(chg->usb_psy);
+	return 0;
+}
+DEFINE_DEBUGFS_ATTRIBUTE(force_usb_psy_update_ops, NULL,
+			force_usb_psy_update_write, "0x%02llx\n");
+
+static void smblite_create_debugfs(struct smblite *chip)
+{
+	struct dentry *file;
+
+	chip->dfs_root = debugfs_create_dir("charger", NULL);
+	if (IS_ERR_OR_NULL(chip->dfs_root)) {
+		pr_err("Couldn't create charger debugfs rc=%ld\n",
+			(long)chip->dfs_root);
+		return;
+	}
+
+	file = debugfs_create_file("force_batt_psy_update", 0600,
+			    chip->dfs_root, chip, &force_batt_psy_update_ops);
+	if (IS_ERR_OR_NULL(file))
+		pr_err("Couldn't create force_batt_psy_update file rc=%ld\n",
+			(long)file);
+
+	file = debugfs_create_file("force_usb_psy_update", 0600,
+			    chip->dfs_root, chip, &force_usb_psy_update_ops);
+	if (IS_ERR_OR_NULL(file))
+		pr_err("Couldn't create force_usb_psy_update file rc=%ld\n",
+			(long)file);
+
+	file = debugfs_create_u32("debug_mask", 0600, chip->dfs_root,
+			&__debug_mask);
+	if (IS_ERR_OR_NULL(file))
+		pr_err("Couldn't create debug_mask file rc=%ld\n", (long)file);
+}
+
+#else
+
+static void smblite_create_debugfs(struct smblite *chip)
+{}
+
+#endif
+
+static int smblite_show_charger_status(struct smblite *chip)
+{
+	struct smb_charger *chg = &chip->chg;
+	union power_supply_propval val;
+	int usb_present, batt_present, batt_health, batt_charge_type;
+	int rc;
+
+	rc = smblite_lib_get_prop_usb_present(chg, &val);
+	if (rc < 0) {
+		pr_err("Couldn't get usb present rc=%d\n", rc);
+		return rc;
+	}
+	usb_present = val.intval;
+
+	rc = smblite_lib_get_prop_batt_present(chg, &val);
+	if (rc < 0) {
+		pr_err("Couldn't get batt present rc=%d\n", rc);
+		return rc;
+	}
+	batt_present = val.intval;
+
+	rc = smblite_lib_get_prop_batt_health(chg, &val);
+	if (rc < 0) {
+		pr_err("Couldn't get batt health rc=%d\n", rc);
+		val.intval = POWER_SUPPLY_HEALTH_UNKNOWN;
+	}
+	batt_health = val.intval;
+
+	rc = smblite_lib_get_prop_batt_charge_type(chg, &val);
+	if (rc < 0) {
+		pr_err("Couldn't get batt charge type rc=%d\n", rc);
+		return rc;
+	}
+	batt_charge_type = val.intval;
+
+	pr_info("SMBLITE: Mode=%s Conn=%s USB Present=%d Battery present=%d health=%d charge=%d\n",
+		chg->ldo_mode ? "LDO" : "SMBC",
+		(chg->connector_type == POWER_SUPPLY_CONNECTOR_TYPEC) ?
+			"TYPEC" : "uUSB", usb_present, batt_present,
+			batt_health, batt_charge_type);
+	return rc;
+}
+
+/*********************************
+ * TYPEC CLASS REGISTRATION *
+ **********************************/
+
+static int smblite_init_typec_class(struct smblite *chip)
+{
+	struct smb_charger *chg = &chip->chg;
+	int rc = 0;
+
+	mutex_init(&chg->typec_lock);
+	chg->typec_caps.type = TYPEC_PORT_DRP;
+	chg->typec_caps.data = TYPEC_PORT_DRD;
+	chg->typec_partner_desc.usb_pd = false;
+	chg->typec_partner_desc.accessory = TYPEC_ACCESSORY_NONE;
+	chg->typec_caps.port_type_set = smblite_lib_typec_port_type_set;
+	chg->typec_caps.revision = 0x0130;
+
+	chg->typec_port = typec_register_port(chg->dev, &chg->typec_caps);
+	if (IS_ERR(chg->typec_port)) {
+		rc = PTR_ERR(chg->typec_port);
+		pr_err("Couldn't to register typec_port rc=%d\n", rc);
+		return rc;
+	}
+
+	return rc;
+}
+
+static int smblite_probe(struct platform_device *pdev)
+{
+	struct smblite *chip;
+	struct smb_charger *chg;
+	int rc = 0;
+
+	chip = devm_kzalloc(&pdev->dev, sizeof(*chip), GFP_KERNEL);
+	if (!chip)
+		return -ENOMEM;
+
+	chg = &chip->chg;
+	chg->dev = &pdev->dev;
+	chg->debug_mask = &__debug_mask;
+	chg->weak_chg_icl_ua = 500000;
+	chg->mode = PARALLEL_MASTER;
+	chg->irq_info = smblite_irqs;
+	chg->otg_present = false;
+	chg->step_chg_enabled = true;
+
+	chg->regmap = dev_get_regmap(chg->dev->parent, NULL);
+	if (!chg->regmap) {
+		pr_err("parent regmap is missing\n");
+		return -EINVAL;
+	}
+
+	rc = smblite_chg_config_init(chip);
+	if (rc < 0) {
+		if (rc != -EPROBE_DEFER)
+			pr_err("Couldn't setup chg_config rc=%d\n", rc);
+		return rc;
+	}
+
+	rc = smblite_parse_dt(chip);
+	if (rc < 0) {
+		pr_err("Couldn't parse device tree rc=%d\n", rc);
+		return rc;
+	}
+
+	rc = smblite_lib_init(chg);
+	if (rc < 0) {
+		pr_err("Smblib_init failed rc=%d\n", rc);
+		return rc;
+	}
+
+	/* set driver data before resources request it */
+	platform_set_drvdata(pdev, chip);
+
+	/* extcon registration */
+	chg->extcon = devm_extcon_dev_allocate(chg->dev,
+					smblite_lib_extcon_cable);
+	if (IS_ERR(chg->extcon)) {
+		rc = PTR_ERR(chg->extcon);
+		dev_err(chg->dev, "Couldn't to allocate extcon device rc=%d\n",
+				rc);
+		goto cleanup;
+	}
+
+	rc = devm_extcon_dev_register(chg->dev, chg->extcon);
+	if (rc < 0) {
+		dev_err(chg->dev, "Couldn't to register extcon device rc=%d\n",
+				rc);
+		goto cleanup;
+	}
+
+	/* Support reporting polarity and speed via properties */
+	rc = extcon_set_property_capability(chg->extcon,
+			EXTCON_USB, EXTCON_PROP_USB_TYPEC_POLARITY);
+	rc |= extcon_set_property_capability(chg->extcon,
+			EXTCON_USB, EXTCON_PROP_USB_SS);
+	rc |= extcon_set_property_capability(chg->extcon,
+			EXTCON_USB_HOST, EXTCON_PROP_USB_TYPEC_POLARITY);
+	rc |= extcon_set_property_capability(chg->extcon,
+			EXTCON_USB_HOST, EXTCON_PROP_USB_SS);
+	if (rc < 0) {
+		dev_err(chg->dev,
+			"Couldn't to configure extcon capabilities\n");
+		goto cleanup;
+	}
+
+	rc = smblite_init_hw(chip);
+	if (rc < 0) {
+		pr_err("Couldn't initialize hardware rc=%d\n", rc);
+		goto cleanup;
+	}
+
+	rc = smblite_init_usb_psy(chip);
+	if (rc < 0) {
+		pr_err("Couldn't initialize usb psy rc=%d\n", rc);
+		goto cleanup;
+	}
+
+	rc = smblite_init_usb_main_psy(chip);
+	if (rc < 0) {
+		pr_err("Couldn't initialize usb main psy rc=%d\n", rc);
+		goto cleanup;
+	}
+
+	rc = smblite_init_batt_psy(chip);
+	if (rc < 0) {
+		pr_err("Couldn't initialize batt psy rc=%d\n", rc);
+		goto cleanup;
+	}
+
+	rc = smblite_init_typec_class(chip);
+	if (rc < 0) {
+		pr_err("Couldn't initialize typec class rc=%d\n", rc);
+		goto cleanup;
+	}
+
+	rc = smblite_determine_initial_status(chip);
+	if (rc < 0) {
+		pr_err("Couldn't determine initial status rc=%d\n",
+			rc);
+		goto cleanup;
+	}
+
+	rc = smblite_request_interrupts(chip);
+	if (rc < 0) {
+		pr_err("Couldn't request interrupts rc=%d\n", rc);
+		goto cleanup;
+	}
+
+	rc = smblite_post_init(chip);
+	if (rc < 0) {
+		pr_err("Couldn't in post init rc=%d\n", rc);
+		goto disable_irq;
+	}
+
+	smblite_create_debugfs(chip);
+
+	rc = sysfs_create_groups(&chg->dev->kobj, smblite_groups);
+	if (rc < 0) {
+		pr_err("Couldn't create sysfs files rc=%d\n", rc);
+		goto disable_irq;
+	}
+
+	rc = smblite_show_charger_status(chip);
+	if (rc < 0) {
+		pr_err("Couldn't in getting charger status rc=%d\n", rc);
+		goto disable_irq;
+	}
+
+	device_init_wakeup(chg->dev, true);
+
+	return rc;
+
+disable_irq:
+	smblite_disable_interrupts(chg);
+cleanup:
+	smblite_lib_deinit(chg);
+	platform_set_drvdata(pdev, NULL);
+
+	return rc;
+}
+
+static int smblite_remove(struct platform_device *pdev)
+{
+	struct smblite *chip = platform_get_drvdata(pdev);
+	struct smb_charger *chg = &chip->chg;
+
+	smblite_disable_interrupts(chg);
+	smblite_lib_deinit(chg);
+	sysfs_remove_groups(&chg->dev->kobj, smblite_groups);
+	platform_set_drvdata(pdev, NULL);
+
+	return 0;
+}
+
+static void smblite_shutdown(struct platform_device *pdev)
+{
+	struct smblite *chip = platform_get_drvdata(pdev);
+	struct smb_charger *chg = &chip->chg;
+
+	/* disable all interrupts */
+	smblite_disable_interrupts(chg);
+
+	/* configure power role for UFP */
+	if (chg->connector_type == POWER_SUPPLY_CONNECTOR_TYPEC)
+		smblite_lib_masked_write(chg, TYPE_C_MODE_CFG_REG,
+				TYPEC_POWER_ROLE_CMD_MASK, EN_SNK_ONLY_BIT);
+}
+
+static const struct of_device_id match_table[] = {
+	{ .compatible = "qcom,qpnp-smblite", },
+	{ },
+};
+
+static struct platform_driver smblite_driver = {
+	.driver		= {
+		.name		= "qcom,qpnp-smblite",
+		.of_match_table	= match_table,
+	},
+	.probe		= smblite_probe,
+	.remove		= smblite_remove,
+	.shutdown	= smblite_shutdown,
+};
+module_platform_driver(smblite_driver);
+
+MODULE_DESCRIPTION("QPNP SMBLITE Charger Driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/power/supply/qcom/schgm-flashlite.c b/drivers/power/supply/qcom/schgm-flashlite.c
new file mode 100644
index 0000000..78f3ef3
--- /dev/null
+++ b/drivers/power/supply/qcom/schgm-flashlite.c
@@ -0,0 +1,252 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2018, 2020 The Linux Foundation. All rights reserved.
+ */
+
+#define pr_fmt(fmt) "SCHG-FLASH: %s: " fmt, __func__
+
+#include <linux/device.h>
+#include <linux/delay.h>
+#include <linux/module.h>
+#include <linux/regmap.h>
+#include <linux/power_supply.h>
+#include <linux/interrupt.h>
+#include <linux/of.h>
+#include <linux/of_irq.h>
+#include <linux/printk.h>
+#include <linux/pmic-voter.h>
+#include "smblite-lib.h"
+#include "schgm-flashlite.h"
+
+#define IS_BETWEEN(left, right, value) \
+		(((left) >= (right) && (left) >= (value) \
+			&& (value) >= (right)) \
+		|| ((left) <= (right) && (left) <= (value) \
+			&& (value) <= (right)))
+
+irqreturn_t schgm_flashlite_default_irq_handler(int irq, void *data)
+{
+	struct smb_irq_data *irq_data = data;
+
+	pr_debug("IRQ: %s\n", irq_data->name);
+
+	return IRQ_HANDLED;
+}
+
+irqreturn_t schgm_flashlite_ilim2_irq_handler(int irq, void *data)
+{
+	struct smb_irq_data *irq_data = data;
+	struct smb_charger *chg = irq_data->parent_data;
+	int rc;
+
+	rc = smblite_lib_write(chg, SCHGM_FLASH_S2_LATCH_RESET_CMD_REG,
+				FLASH_S2_LATCH_RESET_BIT);
+	if (rc < 0)
+		pr_err("Couldn't reset S2_LATCH reset rc=%d\n", rc);
+
+	return IRQ_HANDLED;
+}
+
+irqreturn_t schgm_flashlite_state_change_irq_handler(int irq, void *data)
+{
+	struct smb_irq_data *irq_data = data;
+	struct smb_charger *chg = irq_data->parent_data;
+	int rc;
+	u8 reg;
+
+	rc = smblite_lib_read(chg, SCHGM_FLASH_STATUS_3_REG, &reg);
+	if (rc < 0)
+		pr_err("Couldn't read flash status_3 rc=%d\n", rc);
+	else
+		pr_debug("Flash status changed state=[%x]\n",
+					(reg && FLASH_STATE_MASK));
+
+	return IRQ_HANDLED;
+}
+
+#define FIXED_MODE		0
+#define ADAPTIVE_MODE		1
+static void schgm_flashlite_parse_dt(struct smb_charger *chg)
+{
+	struct device_node *node = chg->dev->of_node;
+	u32 val;
+	int rc;
+
+	chg->flash_derating_soc = -EINVAL;
+	rc = of_property_read_u32(node, "qcom,flash-derating-soc", &val);
+	if (!rc) {
+		if (IS_BETWEEN(0, 100, val))
+			chg->flash_derating_soc = (val * 255) / 100;
+	}
+
+	chg->flash_disable_soc = -EINVAL;
+	rc = of_property_read_u32(node, "qcom,flash-disable-soc", &val);
+	if (!rc) {
+		if (IS_BETWEEN(0, 100, val))
+			chg->flash_disable_soc = (val * 255) / 100;
+	}
+
+	chg->headroom_mode = -EINVAL;
+	rc = of_property_read_u32(node, "qcom,headroom-mode", &val);
+	if (!rc) {
+		if (IS_BETWEEN(FIXED_MODE, ADAPTIVE_MODE, val))
+			chg->headroom_mode = val;
+	}
+}
+
+bool is_flashlite_active(struct smb_charger *chg)
+{
+	return chg->flash_active ? true : false;
+}
+
+int schgm_flashlite_get_vreg_ok(struct smb_charger *chg, int *val)
+{
+	int rc, vreg_state;
+	u8 stat = 0;
+
+	if (!chg->flash_init_done)
+		return -EPERM;
+
+	rc = smblite_lib_read(chg, SCHGM_FLASH_STATUS_2_REG, &stat);
+	if (rc < 0) {
+		pr_err("Couldn't read FLASH STATUS_2 rc=%d\n", rc);
+		return rc;
+	}
+	vreg_state = !!(stat & VREG_OK_BIT);
+
+	/* If VREG_OK is not set check for flash error */
+	if (!vreg_state) {
+		rc = smblite_lib_read(chg, SCHGM_FLASH_STATUS_3_REG, &stat);
+		if (rc < 0) {
+			pr_err("Couldn't read FLASH_STATUS_3 rc=%d\n", rc);
+			return rc;
+		}
+		if ((stat & FLASH_STATE_MASK) == FLASH_ERROR_VAL) {
+			vreg_state = -EFAULT;
+			rc = smblite_lib_read(chg, SCHGM_FLASH_STATUS_5_REG,
+					&stat);
+			if (rc < 0) {
+				pr_err("Couldn't read FLASH_STATUS_5 rc=%d\n",
+						rc);
+				return rc;
+			}
+			pr_debug("Flash error: status=%x\n", stat);
+		}
+	}
+
+	/*
+	 * val can be one of the following:
+	 * 1		- VREG_OK is set.
+	 * 0		- VREG_OK is 0 but no Flash error.
+	 * -EFAULT	- Flash Error is set.
+	 */
+	*val = vreg_state;
+
+	return 0;
+}
+
+void schgm_flashlite_torch_priority(struct smb_charger *chg,
+					enum torch_mode mode)
+{
+	int rc;
+	u8 reg;
+
+	/*
+	 * If torch is configured in default BOOST mode, skip any update in the
+	 * mode configuration.
+	 */
+	if (chg->headroom_mode == FIXED_MODE)
+		return;
+
+	if ((mode != TORCH_BOOST_MODE) && (mode != TORCH_BUCK_MODE))
+		return;
+
+	reg = mode;
+	rc = smblite_lib_masked_write(chg, SCHGM_TORCH_PRIORITY_CONTROL_REG,
+					TORCH_PRIORITY_CONTROL_BIT, reg);
+	if (rc < 0)
+		pr_err("Couldn't configure Torch priority control rc=%d\n",
+				rc);
+
+	pr_debug("Torch priority changed to: %d\n", mode);
+}
+
+int schgm_flashlite_init(struct smb_charger *chg)
+{
+	int rc;
+	u8 reg, mask;
+
+	schgm_flashlite_parse_dt(chg);
+
+	if (chg->wa_flags & FLASH_DIE_TEMP_DERATE_WA) {
+		mask = TEMP_DIE_REG_L_DERATE_EN_BIT |
+				TEMP_DIE_REG_H_DERATE_EN_BIT;
+		rc = smblite_lib_masked_write(chg, SCHGM_FLASH_CONTROL_REG,
+				mask, 0);
+		if (rc < 0)
+			pr_err("Couldn't disable die-temp derate rc=%d\n", rc);
+	}
+
+	if (chg->flash_derating_soc != -EINVAL) {
+		rc = smblite_lib_write(chg,
+				SCHGM_SOC_BASED_FLASH_DERATE_TH_CFG_REG,
+				chg->flash_derating_soc);
+		if (rc < 0) {
+			pr_err("Couldn't configure SOC for flash derating rc=%d\n",
+					rc);
+			return rc;
+		}
+	}
+
+	if (chg->flash_disable_soc != -EINVAL) {
+		rc = smblite_lib_write(chg,
+				SCHGM_SOC_BASED_FLASH_DISABLE_TH_CFG_REG,
+				chg->flash_disable_soc);
+		if (rc < 0) {
+			pr_err("Couldn't configure SOC for flash disable rc=%d\n",
+					rc);
+			return rc;
+		}
+	}
+
+	if (chg->headroom_mode != -EINVAL) {
+		/*
+		 * configure headroom management policy for
+		 * flash and torch mode.
+		 */
+		reg = (chg->headroom_mode == FIXED_MODE)
+					? FORCE_FLASH_BOOST_5V_BIT : 0;
+		rc = smblite_lib_write(chg, SCHGM_FORCE_BOOST_CONTROL, reg);
+		if (rc < 0) {
+			pr_err("Couldn't write force boost control reg rc=%d\n",
+					rc);
+			return rc;
+		}
+
+		reg = (chg->headroom_mode == FIXED_MODE)
+					? TORCH_PRIORITY_CONTROL_BIT : 0;
+		rc = smblite_lib_write(chg,
+					SCHGM_TORCH_PRIORITY_CONTROL_REG, reg);
+		if (rc < 0) {
+			pr_err("Couldn't force 5V boost in torch mode rc=%d\n",
+					rc);
+			return rc;
+		}
+	}
+
+	if ((chg->flash_derating_soc != -EINVAL)
+				|| (chg->flash_disable_soc != -EINVAL)) {
+		/* Check if SOC based derating/disable is enabled */
+		rc = smblite_lib_read(chg, SCHGM_FLASH_CONTROL_REG, &reg);
+		if (rc < 0) {
+			pr_err("Couldn't read flash control reg rc=%d\n", rc);
+			return rc;
+		}
+		if (!(reg & SOC_LOW_FOR_FLASH_EN_BIT))
+			pr_warn("Soc based flash derating not enabled\n");
+	}
+
+	chg->flash_init_done = true;
+
+	return 0;
+}
diff --git a/drivers/power/supply/qcom/schgm-flashlite.h b/drivers/power/supply/qcom/schgm-flashlite.h
new file mode 100644
index 0000000..d43e545
--- /dev/null
+++ b/drivers/power/supply/qcom/schgm-flashlite.h
@@ -0,0 +1,57 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (c) 2018, 2020 The Linux Foundation. All rights reserved.
+ */
+
+#ifndef __SCHGM_FLASHLITE_H__
+#define __SCHGM_FLASHLITE_H__
+
+#include <linux/bitops.h>
+
+#define SCHGM_FLASH_BASE			0xA600
+
+#define SCHGM_FLASH_STATUS_2_REG		(SCHGM_FLASH_BASE + 0x07)
+#define VREG_OK_BIT				BIT(4)
+
+#define SCHGM_FLASH_STATUS_3_REG		(SCHGM_FLASH_BASE + 0x08)
+#define FLASH_STATE_MASK			GENMASK(2, 0)
+#define FLASH_ERROR_VAL				0x7
+
+#define SCHGM_FLASH_INT_RT_STS_REG		(SCHGM_FLASH_BASE + 0x10)
+
+#define SCHGM_FLASH_STATUS_5_REG		(SCHGM_FLASH_BASE + 0x0B)
+
+#define SCHGM_FORCE_BOOST_CONTROL		(SCHGM_FLASH_BASE + 0x41)
+#define FORCE_FLASH_BOOST_5V_BIT		BIT(0)
+
+#define SCHGM_FLASH_S2_LATCH_RESET_CMD_REG	(SCHGM_FLASH_BASE + 0x44)
+#define FLASH_S2_LATCH_RESET_BIT		BIT(0)
+
+#define SCHGM_FLASH_CONTROL_REG			(SCHGM_FLASH_BASE + 0x60)
+#define SOC_LOW_FOR_FLASH_EN_BIT		BIT(7)
+#define TEMP_DIE_REG_H_DERATE_EN_BIT		BIT(3)
+#define TEMP_DIE_REG_L_DERATE_EN_BIT		BIT(2)
+
+#define SCHGM_TORCH_PRIORITY_CONTROL_REG	(SCHGM_FLASH_BASE + 0x63)
+#define TORCH_PRIORITY_CONTROL_BIT		BIT(0)
+
+#define SCHGM_SOC_BASED_FLASH_DERATE_TH_CFG_REG	(SCHGM_FLASH_BASE + 0x67)
+
+#define SCHGM_SOC_BASED_FLASH_DISABLE_TH_CFG_REG \
+						(SCHGM_FLASH_BASE + 0x68)
+
+enum torch_mode {
+	TORCH_BUCK_MODE = 0,
+	TORCH_BOOST_MODE,
+};
+
+int schgm_flashlite_get_vreg_ok(struct smb_charger *chg, int *val);
+void schgm_flashlite_torch_priority(struct smb_charger *chg,
+					enum torch_mode mode);
+int schgm_flashlite_init(struct smb_charger *chg);
+bool is_flashlite_active(struct smb_charger *chg);
+
+irqreturn_t schgm_flashlite_default_irq_handler(int irq, void *data);
+irqreturn_t schgm_flashlite_ilim2_irq_handler(int irq, void *data);
+irqreturn_t schgm_flashlite_state_change_irq_handler(int irq, void *data);
+#endif /* __SCHGM_FLASHLITE_H__ */
diff --git a/drivers/power/supply/qcom/smb1398-charger.c b/drivers/power/supply/qcom/smb1398-charger.c
index 15ca324..9999181 100644
--- a/drivers/power/supply/qcom/smb1398-charger.c
+++ b/drivers/power/supply/qcom/smb1398-charger.c
@@ -123,6 +123,9 @@
 #define SMB_EN_NEG_TRIGGER		BIT(1)
 #define SMB_EN_POS_TRIGGER		BIT(0)
 
+#define PERPH0_DIV2_SLAVE		0x2652
+#define CFG_DIV2_SYNC_CLK_PHASE_90		BIT(0)
+
 #define DIV2_LCM_CFG_REG		0x2653
 #define DIV2_LCM_REFRESH_TIMER_SEL_MASK	GENMASK(5, 4)
 #define DIV2_WIN_BURST_HIGH_REF_MASK	GENMASK(3, 2)
@@ -205,6 +208,7 @@
 /* Need to define max ILIM for smb1398 */
 #define DIV2_MAX_ILIM_UA		3200000
 #define DIV2_MAX_ILIM_DUAL_CP_UA	6400000
+#define DIV2_ILIM_CFG_PCT		105
 
 #define TAPER_STEPPER_UA_DEFAULT	100000
 #define TAPER_STEPPER_UA_IN_CC_MODE	200000
@@ -681,7 +685,9 @@
 	 * Follow this procedure to read master CP ISNS:
 	 *   set slave CP TEMP_MUX to HighZ;
 	 *   set master CP TEMP_MUX to IIN_FB;
+	 *   set DIV2_CP switch phase-shift to 0 deg;
 	 *   read corresponding ADC channel in Kekaha;
+	 *   set DIV2_CP switch phase-shif back to 90 deg;
 	 *   set master CP TEMP_MUX to VTEMP;
 	 */
 	mutex_lock(&chip->die_chan_lock);
@@ -703,12 +709,31 @@
 		goto unlock;
 	}
 
+	rc = smb1398_masked_write(chip, PERPH0_DIV2_SLAVE,
+					CFG_DIV2_SYNC_CLK_PHASE_90, 0);
+	if (rc < 0) {
+		dev_err(chip->dev, "Couldn't set PERPH0_DIV2_SLAVE, rc=%d\n",
+				rc);
+		goto unlock;
+	}
+
+	/* Delay for the phase switch to take effect */
+	msleep(20);
+
 	rc = iio_read_channel_processed(chip->die_temp_chan, &temp);
 	if (rc < 0) {
 		dev_err(chip->dev, "Couldn't read die_temp_chan, rc=%d\n", rc);
 		goto unlock;
 	}
 
+	rc = smb1398_masked_write(chip, PERPH0_DIV2_SLAVE,
+			CFG_DIV2_SYNC_CLK_PHASE_90, CFG_DIV2_SYNC_CLK_PHASE_90);
+	if (rc < 0) {
+		dev_err(chip->dev, "Couldn't set PERPH0_DIV2_SLAVE, rc=%d\n",
+				rc);
+		goto unlock;
+	}
+
 	rc = smb1398_div2_cp_isns_mode_control(chip, ISNS_MODE_STANDBY);
 	if (rc < 0) {
 		dev_err(chip->dev, "Couldn't set master ISNS_MODE_STANDBY, rc=%d\n",
@@ -748,7 +773,9 @@
 	 * Follow this procedure to read slave CP ISNS:
 	 *   set master CP TEMP_MUX to HighZ;
 	 *   set slave CP TEMP_MUX to IIN_FB;
+	 *   set DIV2_CP switch phase-shift to 0 deg;
 	 *   read corresponding ADC channel in Kekaha;
+	 *   set DIV2_CP switch phase-shif back to 90 deg;
 	 *   set master CP TEMP_MUX to VTEMP;
 	 */
 	mutex_lock(&chip->die_chan_lock);
@@ -768,12 +795,31 @@
 		goto unlock;
 	}
 
+	rc = smb1398_masked_write(chip, PERPH0_DIV2_SLAVE,
+					CFG_DIV2_SYNC_CLK_PHASE_90, 0);
+	if (rc < 0) {
+		dev_err(chip->dev, "Couldn't set PERPH0_DIV2_SLAVE, rc=%d\n",
+				rc);
+		goto unlock;
+	}
+
+	/* Delay for the phase switch to take effect */
+	msleep(20);
+
 	rc = iio_read_channel_processed(chip->die_temp_chan, &temp);
 	if (rc < 0) {
 		dev_err(chip->dev, "Couldn't get die_temp_chan, rc=%d\n", rc);
 		goto unlock;
 	}
 
+	rc = smb1398_masked_write(chip, PERPH0_DIV2_SLAVE,
+			CFG_DIV2_SYNC_CLK_PHASE_90, CFG_DIV2_SYNC_CLK_PHASE_90);
+	if (rc < 0) {
+		dev_err(chip->dev, "Couldn't set PERPH0_DIV2_SLAVE, rc=%d\n",
+				rc);
+		goto unlock;
+	}
+
 	rc = smb1398_div2_cp_isns_mode_control(chip, ISNS_MODE_STANDBY);
 	if (rc < 0) {
 		dev_err(chip->dev, "Couldn't set master ISNS_MODE_STANDBY, rc=%d\n",
@@ -953,7 +999,8 @@
 		} else {
 			rc = smb1398_get_iin_ma(chip, &ilim_ma);
 			if (!rc)
-				val->intval = ilim_ma * 1000;
+				val->intval = (ilim_ma * 1000 * 100)
+							/ DIV2_ILIM_CFG_PCT;
 		}
 		chip->cp_ilim = val->intval;
 		break;
@@ -1246,6 +1293,9 @@
 	if (disable && (chip->div2_cp_ilim_votable)) {
 		ilim_ua = get_effective_result_locked(
 				chip->div2_cp_ilim_votable);
+
+		ilim_ua = (ilim_ua * DIV2_ILIM_CFG_PCT) / 100;
+
 		if (ilim_ua > DIV2_MAX_ILIM_UA)
 			ilim_ua = DIV2_MAX_ILIM_UA;
 
@@ -1276,6 +1326,8 @@
 	if (!client)
 		return -EINVAL;
 
+	ilim_ua = (ilim_ua * DIV2_ILIM_CFG_PCT) / 100;
+
 	max_ilim_ua = is_cps_available(chip) ?
 		DIV2_MAX_ILIM_DUAL_CP_UA : DIV2_MAX_ILIM_UA;
 	ilim_ua = min(ilim_ua, max_ilim_ua);
diff --git a/drivers/power/supply/qcom/smb5-lib.c b/drivers/power/supply/qcom/smb5-lib.c
index a6329ca..8ed58bf 100644
--- a/drivers/power/supply/qcom/smb5-lib.c
+++ b/drivers/power/supply/qcom/smb5-lib.c
@@ -1983,6 +1983,22 @@
 		}
 	}
 
+	rc = smblib_get_prop_batt_health(chg, &pval);
+	if (rc < 0) {
+		smblib_err(chg, "Couldn't get batt health rc=%d\n", rc);
+		return rc;
+	}
+	/*
+	 * The charger status register shows charging even though the battery
+	 * is discharging when the over voltage condition is hit. Report power
+	 * supply state as NOT_CHARGING when the battery health reports
+	 * over voltage.
+	 */
+	if (pval.intval == POWER_SUPPLY_HEALTH_OVERVOLTAGE) {
+		val->intval = POWER_SUPPLY_STATUS_NOT_CHARGING;
+		return 0;
+	}
+
 	if (chg->dbc_usbov) {
 		rc = smblib_get_prop_usb_present(chg, &pval);
 		if (rc < 0) {
@@ -5873,6 +5889,33 @@
 	smblib_hvdcp_detect_enable(chg, true);
 }
 
+static int smblib_role_switch_failure(struct smb_charger *chg)
+{
+	int rc = 0;
+	union power_supply_propval pval = {0, };
+
+	if (!chg->use_extcon)
+		return 0;
+
+	rc = smblib_get_prop_usb_present(chg, &pval);
+	if (rc < 0) {
+		smblib_err(chg, "Couldn't get usb presence status rc=%d\n",
+				rc);
+		return rc;
+	}
+
+	/*
+	 * When role switch fails notify the
+	 * current charger state to usb driver.
+	 */
+	if (pval.intval) {
+		smblib_dbg(chg, PR_MISC, " Role reversal failed, notifying device mode to usb driver.\n");
+		smblib_notify_device_mode(chg, true);
+	}
+
+	return rc;
+}
+
 static int typec_partner_register(struct smb_charger *chg)
 {
 	int typec_mode, rc = 0;
@@ -5903,6 +5946,15 @@
 
 	if (typec_mode >= POWER_SUPPLY_TYPEC_SOURCE_DEFAULT
 			|| typec_mode == POWER_SUPPLY_TYPEC_NONE) {
+
+		if (chg->typec_role_swap_failed) {
+			rc = smblib_role_switch_failure(chg);
+			if (rc < 0)
+				smblib_err(chg, "Failed to role switch rc=%d\n",
+					rc);
+			chg->typec_role_swap_failed = false;
+		}
+
 		typec_set_data_role(chg->typec_port, TYPEC_DEVICE);
 		typec_set_pwr_role(chg->typec_port, TYPEC_SINK);
 	} else {
@@ -6014,33 +6066,6 @@
 	return rc;
 }
 
-static int smblib_role_switch_failure(struct smb_charger *chg, int mode)
-{
-	int rc = 0;
-	union power_supply_propval pval = {0, };
-
-	if (!chg->use_extcon)
-		return 0;
-
-	rc = smblib_get_prop_usb_present(chg, &pval);
-	if (rc < 0) {
-		smblib_err(chg, "Couldn't get usb presence status rc=%d\n",
-				rc);
-		return rc;
-	}
-
-	/*
-	 * When role switch fails notify the
-	 * current charger state to usb driver.
-	 */
-	if (pval.intval && mode == TYPEC_PORT_SRC) {
-		smblib_dbg(chg, PR_MISC, " Role reversal failed, notifying device mode to usb driver.\n");
-		smblib_notify_device_mode(chg, true);
-	}
-
-	return rc;
-}
-
 static void smblib_typec_role_check_work(struct work_struct *work)
 {
 	struct smb_charger *chg = container_of(work, struct smb_charger,
@@ -6070,14 +6095,12 @@
 			|| chg->typec_mode == POWER_SUPPLY_TYPEC_NONE) {
 			smblib_dbg(chg, PR_MISC, "Role reversal not latched to DFP in %d msecs. Resetting to DRP mode\n",
 						ROLE_REVERSAL_DELAY_MS);
+			chg->pr_swap_in_progress = false;
+			chg->typec_role_swap_failed = true;
 			rc = smblib_force_dr_mode(chg, TYPEC_PORT_DRP);
 			if (rc < 0)
 				smblib_err(chg, "Failed to set DRP mode, rc=%d\n",
 					rc);
-			rc = smblib_role_switch_failure(chg, TYPEC_PORT_SRC);
-			if (rc < 0)
-				smblib_err(chg, "Failed to role switch rc=%d\n",
-					rc);
 		} else {
 			chg->power_role = POWER_SUPPLY_TYPEC_PR_SOURCE;
 			typec_set_pwr_role(chg->typec_port, TYPEC_SOURCE);
@@ -6110,8 +6133,6 @@
 			smblib_notify_usb_host(chg, false);
 		chg->otg_present = false;
 	}
-
-	typec_partner_unregister(chg);
 }
 
 static void typec_src_removal(struct smb_charger *chg)
@@ -6247,7 +6268,6 @@
 	if (chg->use_extcon)
 		smblib_notify_device_mode(chg, false);
 
-	typec_partner_unregister(chg);
 	chg->typec_legacy = false;
 
 	del_timer_sync(&chg->apsd_timer);
@@ -6390,6 +6410,7 @@
 	vote(chg->awake_votable, LPD_VOTER, false, 0);
 }
 
+#define TYPEC_DETACH_DETECT_DELAY_MS 2000
 irqreturn_t typec_attach_detach_irq_handler(int irq, void *data)
 {
 	struct smb_irq_data *irq_data = data;
@@ -6466,8 +6487,25 @@
 		 */
 		mutex_lock(&chg->typec_lock);
 
-		if (chg->typec_port && !chg->pr_swap_in_progress)
+		if (chg->typec_port && !chg->pr_swap_in_progress) {
+
+			/*
+			 * Schedule the work to differentiate actual removal
+			 * of cable and detach interrupt during role swap,
+			 * unregister the partner only during actual cable
+			 * removal.
+			 */
+			cancel_delayed_work(&chg->pr_swap_detach_work);
+			vote(chg->awake_votable, DETACH_DETECT_VOTER, true, 0);
+			schedule_delayed_work(&chg->pr_swap_detach_work,
+				msecs_to_jiffies(TYPEC_DETACH_DETECT_DELAY_MS));
 			smblib_force_dr_mode(chg, TYPEC_PORT_DRP);
+			/*
+			 * To handle cable removal during role
+			 * swap failure.
+			 */
+			chg->typec_role_swap_failed = false;
+		}
 
 		mutex_unlock(&chg->typec_lock);
 
@@ -7093,6 +7131,9 @@
 		rc = smblib_request_dpdm(chg, false);
 		if (rc < 0)
 			smblib_err(chg, "Couldn't disable DPDM rc=%d\n", rc);
+
+		if (chg->typec_port)
+			typec_partner_unregister(chg);
 	}
 out:
 	vote(chg->awake_votable, DETACH_DETECT_VOTER, false, 0);
diff --git a/drivers/power/supply/qcom/smb5-lib.h b/drivers/power/supply/qcom/smb5-lib.h
index a6d14b7..13b7cef 100644
--- a/drivers/power/supply/qcom/smb5-lib.h
+++ b/drivers/power/supply/qcom/smb5-lib.h
@@ -496,6 +496,7 @@
 	bool			ok_to_pd;
 	bool			typec_legacy;
 	bool			typec_irq_en;
+	bool			typec_role_swap_failed;
 
 	/* cached status */
 	bool			system_suspend_supported;
diff --git a/drivers/power/supply/qcom/smblite-lib.c b/drivers/power/supply/qcom/smblite-lib.c
new file mode 100644
index 0000000..a46c3e0
--- /dev/null
+++ b/drivers/power/supply/qcom/smblite-lib.c
@@ -0,0 +1,3249 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2020 The Linux Foundation. All rights reserved.
+ */
+
+#include <linux/device.h>
+#include <linux/regmap.h>
+#include <linux/delay.h>
+#include <linux/power_supply.h>
+#include <linux/qpnp/qpnp-revid.h>
+#include <linux/irq.h>
+#include <linux/iio/consumer.h>
+#include <linux/pmic-voter.h>
+#include <linux/of_batterydata.h>
+#include <linux/ktime.h>
+#include "smblite-lib.h"
+#include "smblite-reg.h"
+#include "schgm-flash.h"
+#include "step-chg-jeita.h"
+#include "storm-watch.h"
+#include "schgm-flash.h"
+
+#define smblite_lib_err(chg, fmt, ...)		\
+	pr_err("%s: %s: " fmt, chg->name,	\
+		__func__, ##__VA_ARGS__)	\
+
+#define smblite_lib_dbg(chg, reason, fmt, ...)			\
+	do {							\
+		if (*chg->debug_mask & (reason))		\
+			pr_info("%s: %s: " fmt, chg->name,	\
+				__func__, ##__VA_ARGS__);	\
+		else						\
+			pr_debug("%s: %s: " fmt, chg->name,	\
+				__func__, ##__VA_ARGS__);	\
+	} while (0)
+
+#define typec_rp_med_high(chg, typec_mode)			\
+	((typec_mode == POWER_SUPPLY_TYPEC_SOURCE_MEDIUM	\
+	|| typec_mode == POWER_SUPPLY_TYPEC_SOURCE_HIGH)	\
+	&& (!chg->typec_legacy || chg->typec_legacy_use_rp_icl))
+
+static void update_sw_icl_max(struct smb_charger *chg,
+				enum power_supply_type type);
+static int smblite_lib_get_prop_typec_mode(struct smb_charger *chg);
+
+int smblite_lib_read(struct smb_charger *chg, u16 addr, u8 *val)
+{
+	unsigned int value;
+	int rc = 0;
+
+	rc = regmap_read(chg->regmap, addr, &value);
+	if (rc >= 0)
+		*val = (u8)value;
+
+	return rc;
+}
+
+int smblite_lib_batch_read(struct smb_charger *chg, u16 addr, u8 *val,
+			int count)
+{
+	return regmap_bulk_read(chg->regmap, addr, val, count);
+}
+
+int smblite_lib_write(struct smb_charger *chg, u16 addr, u8 val)
+{
+	return regmap_write(chg->regmap, addr, val);
+}
+
+int smblite_lib_batch_write(struct smb_charger *chg, u16 addr, u8 *val,
+			int count)
+{
+	return regmap_bulk_write(chg->regmap, addr, val, count);
+}
+
+int smblite_lib_masked_write(struct smb_charger *chg, u16 addr, u8 mask, u8 val)
+{
+	return regmap_update_bits(chg->regmap, addr, mask, val);
+}
+
+int smblite_lib_get_iio_channel(struct smb_charger *chg, const char *propname,
+					struct iio_channel **chan)
+{
+	int rc = 0;
+
+	rc = of_property_match_string(chg->dev->of_node,
+					"io-channel-names", propname);
+	if (rc < 0)
+		return 0;
+
+	*chan = iio_channel_get(chg->dev, propname);
+	if (IS_ERR(*chan)) {
+		rc = PTR_ERR(*chan);
+		if (rc != -EPROBE_DEFER)
+			smblite_lib_err(chg, "%s channel unavailable, %d\n",
+							propname, rc);
+		*chan = NULL;
+	}
+
+	return rc;
+}
+
+#define DIV_FACTOR_MICRO_V_I	1
+#define DIV_FACTOR_MILI_V_I	1000
+#define DIV_FACTOR_DECIDEGC	100
+int smblite_lib_read_iio_channel(struct smb_charger *chg,
+				struct iio_channel *chan, int div, int *data)
+{
+	int rc = 0;
+	*data = -ENODATA;
+
+	if (chan) {
+		rc = iio_read_channel_processed(chan, data);
+		if (rc < 0) {
+			smblite_lib_err(chg, "Error in reading IIO channel data, rc=%d\n",
+					rc);
+			return rc;
+		}
+
+		if (div != 0)
+			*data /= div;
+	}
+
+	return rc;
+}
+
+int smblite_lib_icl_override(struct smb_charger *chg,
+				enum icl_override_mode  mode)
+{
+	int rc;
+	u8 usb51_mode, icl_override;
+
+	switch (mode) {
+	case SW_OVERRIDE_USB51_MODE:
+		usb51_mode = 0;
+		icl_override = ICL_OVERRIDE_BIT;
+		break;
+	case SW_OVERRIDE_HC_MODE:
+		usb51_mode = USBIN_MODE_CHG_BIT;
+		icl_override = ICL_OVERRIDE_BIT;
+		break;
+	case HW_AUTO_MODE:
+	default:
+		usb51_mode = USBIN_MODE_CHG_BIT;
+		icl_override = 0;
+		break;
+	}
+
+	rc = smblite_lib_masked_write(chg, USBIN_ICL_OPTIONS_REG,
+				USBIN_MODE_CHG_BIT, usb51_mode);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't set USBIN_ICL_OPTIONS rc=%d\n",
+					rc);
+		return rc;
+	}
+
+	rc = smblite_lib_masked_write(chg, CMD_ICL_OVERRIDE_REG,
+				ICL_OVERRIDE_BIT, icl_override);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't override ICL rc=%d\n", rc);
+		return rc;
+	}
+
+	return rc;
+}
+
+static void smblite_lib_notify_extcon_props(struct smb_charger *chg, int id)
+{
+	union extcon_property_value val;
+	union power_supply_propval prop_val;
+
+	if (chg->connector_type == POWER_SUPPLY_CONNECTOR_TYPEC) {
+		smblite_lib_get_prop_typec_cc_orientation(chg, &prop_val);
+		val.intval = ((prop_val.intval == 2) ? 1 : 0);
+		extcon_set_property(chg->extcon, id,
+				EXTCON_PROP_USB_TYPEC_POLARITY, val);
+		val.intval = true;
+		extcon_set_property(chg->extcon, id,
+				EXTCON_PROP_USB_SS, val);
+	} else if (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB) {
+		val.intval = false;
+		extcon_set_property(chg->extcon, id,
+				EXTCON_PROP_USB_SS, val);
+	}
+}
+
+static void smblite_lib_notify_device_mode(struct smb_charger *chg, bool enable)
+{
+	if (enable)
+		smblite_lib_notify_extcon_props(chg, EXTCON_USB);
+
+	extcon_set_state_sync(chg->extcon, EXTCON_USB, enable);
+}
+
+static void smblite_lib_notify_usb_host(struct smb_charger *chg, bool enable)
+{
+	int rc = 0;
+
+	/* LDO mode doesn't support OTG */
+	if (chg->ldo_mode)
+		return;
+
+	if (enable) {
+		smblite_lib_dbg(chg, PR_OTG, "enabling VBUS in OTG mode\n");
+		rc = smblite_lib_masked_write(chg, DCDC_CMD_OTG_REG,
+					OTG_EN_BIT, OTG_EN_BIT);
+		if (rc < 0) {
+			smblite_lib_err(chg,
+				"Couldn't enable VBUS in OTG mode rc=%d\n", rc);
+			return;
+		}
+
+		smblite_lib_notify_extcon_props(chg, EXTCON_USB_HOST);
+	} else {
+		smblite_lib_dbg(chg, PR_OTG, "disabling VBUS in OTG mode\n");
+		rc = smblite_lib_masked_write(chg, DCDC_CMD_OTG_REG,
+					OTG_EN_BIT, 0);
+		if (rc < 0) {
+			smblite_lib_err(chg,
+				"Couldn't disable VBUS in OTG mode rc=%d\n",
+				rc);
+			return;
+		}
+	}
+
+	extcon_set_state_sync(chg->extcon, EXTCON_USB_HOST, enable);
+	chg->otg_present = enable;
+}
+
+/********************
+ * REGISTER GETTERS *
+ ********************/
+
+int smblite_lib_get_charge_param(struct smb_charger *chg,
+			    struct smb_chg_param *param, int *val_u)
+{
+	int rc = 0;
+	u8 val_raw;
+
+	rc = smblite_lib_read(chg, param->reg, &val_raw);
+	if (rc < 0) {
+		smblite_lib_err(chg, "%s: Couldn't read from 0x%04x rc=%d\n",
+			param->name, param->reg, rc);
+		return rc;
+	}
+
+	if (param->get_proc)
+		*val_u = param->get_proc(param, val_raw);
+	else
+		*val_u = val_raw * param->step_u + param->min_u;
+	smblite_lib_dbg(chg, PR_REGISTER, "%s = %d (0x%02x)\n",
+		   param->name, *val_u, val_raw);
+
+	return rc;
+}
+
+int smblite_lib_get_usb_suspend(struct smb_charger *chg, int *suspend)
+{
+	int rc = 0;
+	u8 temp;
+
+	rc = smblite_lib_read(chg, USBIN_INPUT_SUSPEND_REG, &temp);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't read USBIN_CMD_IL rc=%d\n", rc);
+		return rc;
+	}
+	*suspend = temp & USBIN_SUSPEND_BIT;
+
+	return rc;
+}
+
+#define INPUT_NOT_PRESENT	0
+#define INPUT_PRESENT_USB	BIT(1)
+static int smblite_lib_is_input_present(struct smb_charger *chg,
+				   int *present)
+{
+	int rc;
+	union power_supply_propval pval = {0, };
+
+	*present = INPUT_NOT_PRESENT;
+
+	rc = smblite_lib_get_prop_usb_present(chg, &pval);
+	if (rc < 0) {
+		pr_err("Couldn't get usb presence status rc=%d\n", rc);
+		return rc;
+	}
+	*present |= pval.intval ? INPUT_PRESENT_USB : INPUT_NOT_PRESENT;
+
+	return 0;
+}
+
+/********************
+ * REGISTER SETTERS *
+ ********************/
+int smblite_lib_set_charge_param(struct smb_charger *chg,
+			    struct smb_chg_param *param, int val_u)
+{
+	int rc = 0;
+	u8 val_raw;
+
+	if (param->set_proc) {
+		rc = param->set_proc(param, val_u, &val_raw);
+		if (rc < 0)
+			return -EINVAL;
+	} else {
+		if (val_u > param->max_u || val_u < param->min_u)
+			smblite_lib_dbg(chg, PR_MISC,
+				"%s: %d is out of range [%d, %d]\n",
+				param->name, val_u, param->min_u, param->max_u);
+
+		if (val_u > param->max_u)
+			val_u = param->max_u;
+		if (val_u < param->min_u)
+			val_u = param->min_u;
+
+		val_raw = (val_u - param->min_u) / param->step_u;
+	}
+
+	rc = smblite_lib_write(chg, param->reg, val_raw);
+	if (rc < 0) {
+		smblite_lib_err(chg, "%s: Couldn't write 0x%02x to 0x%04x rc=%d\n",
+			param->name, val_raw, param->reg, rc);
+		return rc;
+	}
+
+	smblite_lib_dbg(chg, PR_REGISTER, "%s = %d (0x%02x)\n",
+		   param->name, val_u, val_raw);
+
+	return rc;
+}
+
+int smblite_lib_set_usb_suspend(struct smb_charger *chg, bool suspend)
+{
+	int rc = 0;
+
+	if (suspend)
+		vote(chg->icl_irq_disable_votable, USB_SUSPEND_VOTER,
+				true, 0);
+
+	rc = smblite_lib_masked_write(chg, USBIN_INPUT_SUSPEND_REG,
+				USBIN_SUSPEND_BIT,
+				suspend ? USBIN_SUSPEND_BIT : 0);
+	if (rc < 0)
+		smblite_lib_err(chg, "Couldn't write %s to USBIN_SUSPEND_BIT rc=%d\n",
+			suspend ? "suspend" : "resume", rc);
+
+	if (!suspend)
+		vote(chg->icl_irq_disable_votable, USB_SUSPEND_VOTER,
+				false, 0);
+
+	return rc;
+}
+
+/********************
+ * HELPER FUNCTIONS *
+ ********************/
+int smblite_lib_get_prop_from_bms(struct smb_charger *chg,
+				enum power_supply_property psp,
+				union power_supply_propval *val)
+{
+	int rc;
+
+	if (!chg->bms_psy)
+		return -EINVAL;
+
+	rc = power_supply_get_property(chg->bms_psy, psp, val);
+
+	return rc;
+}
+
+static void smblite_lib_update_usb_type(struct smb_charger *chg,
+					enum power_supply_type type)
+{
+	chg->real_charger_type = type;
+}
+
+static int smblite_lib_notifier_call(struct notifier_block *nb,
+		unsigned long ev, void *v)
+{
+	struct power_supply *psy = v;
+	struct smb_charger *chg = container_of(nb, struct smb_charger, nb);
+
+	if (!strcmp(psy->desc->name, "bms")) {
+		if (!chg->bms_psy)
+			chg->bms_psy = psy;
+		if (ev == PSY_EVENT_PROP_CHANGED)
+			schedule_work(&chg->bms_update_work);
+	}
+
+	if (chg->jeita_configured == JEITA_CFG_NONE)
+		schedule_work(&chg->jeita_update_work);
+
+	return NOTIFY_OK;
+}
+
+static int smblite_lib_register_notifier(struct smb_charger *chg)
+{
+	int rc;
+
+	chg->nb.notifier_call = smblite_lib_notifier_call;
+	rc = power_supply_reg_notifier(&chg->nb);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't register psy notifier rc = %d\n",
+					rc);
+		return rc;
+	}
+
+	return 0;
+}
+
+static void smblite_lib_uusb_removal(struct smb_charger *chg)
+{
+	int rc;
+	struct smb_irq_data *data;
+	struct storm_watch *wdata;
+
+	cancel_delayed_work_sync(&chg->pl_enable_work);
+
+	if (chg->wa_flags & BOOST_BACK_WA) {
+		data = chg->irq_info[SWITCHER_POWER_OK_IRQ].irq_data;
+		if (data) {
+			wdata = &data->storm_data;
+			update_storm_count(wdata, WEAK_CHG_STORM_COUNT);
+			vote(chg->usb_icl_votable, BOOST_BACK_VOTER, false, 0);
+			vote(chg->usb_icl_votable, WEAK_CHARGER_VOTER,
+					false, 0);
+		}
+	}
+	vote(chg->pl_disable_votable, PL_DELAY_VOTER, true, 0);
+	vote(chg->awake_votable, PL_DELAY_VOTER, false, 0);
+
+	/* reset both usbin current and voltage votes */
+	vote(chg->pl_enable_votable_indirect, USBIN_I_VOTER, false, 0);
+	vote(chg->pl_enable_votable_indirect, USBIN_V_VOTER, false, 0);
+	vote(chg->usb_icl_votable, SW_ICL_MAX_VOTER, true,
+			is_flash_active(chg) ? USBIN_500UA : USBIN_100UA);
+
+	/* Remove SW thermal regulation votes */
+	vote(chg->usb_icl_votable, SW_THERM_REGULATION_VOTER, false, 0);
+	vote(chg->awake_votable, SW_THERM_REGULATION_VOTER, false, 0);
+
+	/* clear USB ICL vote for USB_PSY_VOTER */
+	rc = vote(chg->usb_icl_votable, USB_PSY_VOTER, false, 0);
+	if (rc < 0)
+		smblite_lib_err(chg, "Couldn't un-vote for USB ICL rc=%d\n",
+					rc);
+}
+
+void smblite_lib_suspend_on_debug_battery(struct smb_charger *chg)
+{
+	int rc;
+	union power_supply_propval val;
+
+	rc = smblite_lib_get_prop_from_bms(chg,
+			POWER_SUPPLY_PROP_DEBUG_BATTERY, &val);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't get debug battery prop rc=%d\n",
+					rc);
+		return;
+	}
+	if (chg->suspend_input_on_debug_batt) {
+		vote(chg->usb_icl_votable, DEBUG_BOARD_VOTER, val.intval, 0);
+		if (val.intval)
+			pr_info("Input suspended: Fake battery\n");
+	} else {
+		vote(chg->chg_disable_votable, DEBUG_BOARD_VOTER,
+					val.intval, 0);
+	}
+}
+
+static int set_sdp_current(struct smb_charger *chg, int icl_ua)
+{
+	int rc;
+	u8 icl_options;
+	enum icl_override_mode icl_override = SW_OVERRIDE_USB51_MODE;
+
+	/* power source is SDP */
+	switch (icl_ua) {
+	case USBIN_100UA:
+	case USBIN_150UA:
+		/* USB 2.0 100mA */
+		icl_options = 0;
+		break;
+	case USBIN_500UA:
+		icl_options = USB51_MODE_BIT;
+		break;
+	/* USB900 mode is not present use ICL configuration register */
+	case USBIN_900UA:
+		icl_override = SW_OVERRIDE_HC_MODE;
+		icl_options = USBIN_MODE_CHG_BIT;
+		rc = smblite_lib_set_charge_param(chg, &chg->param.usb_icl,
+						USBIN_900UA);
+		if (rc < 0) {
+			smblite_lib_err(chg, "Couldn't set HC ICL rc=%d\n", rc);
+			return rc;
+		}
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	rc = smblite_lib_masked_write(chg,
+			USBIN_ICL_OPTIONS_REG, USB51_MODE_BIT, icl_options);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't set ICL options rc=%d\n", rc);
+		return rc;
+	}
+
+	rc = smblite_lib_icl_override(chg, icl_override);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't set ICL override rc=%d\n", rc);
+		return rc;
+	}
+
+	return rc;
+}
+
+int smblite_lib_set_icl_current(struct smb_charger *chg, int icl_ua)
+{
+	int rc = 0;
+	enum icl_override_mode icl_override = HW_AUTO_MODE;
+	/* suspend if 25mA or less is requested */
+	bool suspend = (icl_ua <= USBIN_25UA);
+
+	schgm_flash_torch_priority(chg, suspend ? TORCH_BOOST_MODE :
+							TORCH_BUCK_MODE);
+	/* Do not configure ICL from SW for DAM */
+	if (smblite_lib_get_prop_typec_mode(chg) ==
+			    POWER_SUPPLY_TYPEC_SINK_DEBUG_ACCESSORY)
+		return 0;
+
+	if (suspend)
+		return smblite_lib_set_usb_suspend(chg, true);
+
+	/* No client updated it's vote */
+	if (icl_ua == INT_MAX)
+		goto set_mode;
+
+	/* configure current */
+	if (chg->real_charger_type == POWER_SUPPLY_TYPE_USB
+		&& (chg->typec_legacy
+		|| chg->typec_mode == POWER_SUPPLY_TYPEC_SOURCE_DEFAULT
+		|| chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB)) {
+		rc = set_sdp_current(chg, icl_ua);
+		if (rc < 0) {
+			smblite_lib_err(chg, "Couldn't set SDP ICL rc=%d\n",
+						rc);
+			goto out;
+		}
+
+		goto unsuspend;
+	} else {
+		/*
+		 * Try USB 2.0/3,0 option first on USB path when maximum input
+		 * current limit is 500mA or below for better accuracy; in case
+		 * of error, proceed to use USB high-current mode.
+		 */
+		if (icl_ua <= USBIN_500UA) {
+			rc = set_sdp_current(chg, icl_ua);
+			if (rc >= 0)
+				goto unsuspend;
+		}
+
+		rc = smblite_lib_set_charge_param(chg, &chg->param.usb_icl,
+						icl_ua);
+		if (rc < 0) {
+			smblite_lib_err(chg, "Couldn't set HC ICL rc=%d\n", rc);
+			goto out;
+		}
+		icl_override = SW_OVERRIDE_HC_MODE;
+	}
+
+set_mode:
+	rc = smblite_lib_icl_override(chg, icl_override);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't set ICL override rc=%d\n", rc);
+		goto out;
+	}
+
+unsuspend:
+	/* unsuspend after configuring current and override */
+	rc = smblite_lib_set_usb_suspend(chg, false);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't resume input rc=%d\n", rc);
+		goto out;
+	}
+
+	/* Re-run AICL */
+	if (icl_override != SW_OVERRIDE_HC_MODE)
+		rc = smblite_lib_run_aicl(chg, RERUN_AICL);
+out:
+	return rc;
+}
+
+int smblite_lib_get_icl_current(struct smb_charger *chg, int *icl_ua)
+{
+	int rc;
+
+	rc = smblite_lib_get_charge_param(chg, &chg->param.icl_max_stat,
+						icl_ua);
+	if (rc < 0)
+		smblite_lib_err(chg, "Couldn't get HC ICL rc=%d\n", rc);
+
+	return rc;
+}
+
+/*********************
+ * VOTABLE CALLBACKS *
+ *********************/
+static int smblite_lib_awake_vote_callback(struct votable *votable, void *data,
+			int awake, const char *client)
+{
+	struct smb_charger *chg = data;
+
+	if (awake)
+		pm_stay_awake(chg->dev);
+	else
+		pm_relax(chg->dev);
+
+	return 0;
+}
+
+static int smblite_lib_chg_disable_vote_callback(struct votable *votable,
+				void *data, int chg_disable, const char *client)
+{
+	struct smb_charger *chg = data;
+	int rc;
+
+	rc = smblite_lib_masked_write(chg, CHARGING_ENABLE_CMD_REG,
+				 CHARGING_ENABLE_CMD_BIT,
+				 chg_disable ? 0 : CHARGING_ENABLE_CMD_BIT);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't %s charging rc=%d\n",
+			chg_disable ? "disable" : "enable", rc);
+		return rc;
+	}
+
+	return 0;
+}
+
+static int smblite_lib_icl_irq_disable_vote_callback(struct votable *votable,
+				void *data, int disable, const char *client)
+{
+	struct smb_charger *chg = data;
+
+	if (!chg->irq_info[USBIN_ICL_CHANGE_IRQ].irq)
+		return 0;
+
+	if (chg->irq_info[USBIN_ICL_CHANGE_IRQ].enabled) {
+		if (disable)
+			disable_irq_nosync(
+				chg->irq_info[USBIN_ICL_CHANGE_IRQ].irq);
+	} else {
+		if (!disable)
+			enable_irq(chg->irq_info[USBIN_ICL_CHANGE_IRQ].irq);
+	}
+
+	chg->irq_info[USBIN_ICL_CHANGE_IRQ].enabled = !disable;
+
+	return 0;
+}
+
+/********************
+ * BATT PSY GETTERS *
+ ********************/
+
+int smblite_lib_get_prop_input_suspend(struct smb_charger *chg,
+				  union power_supply_propval *val)
+{
+	val->intval
+		= (get_client_vote(chg->usb_icl_votable, USER_VOTER) == 0);
+	return 0;
+}
+
+int smblite_lib_get_prop_batt_present(struct smb_charger *chg,
+				union power_supply_propval *val)
+{
+	int rc;
+	u8 stat;
+
+	rc = smblite_lib_read(chg, BATIF_BASE + INT_RT_STS_OFFSET, &stat);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't read BATIF_INT_RT_STS rc=%d\n",
+					rc);
+		return rc;
+	}
+
+	val->intval = !(stat & BAT_THERM_OR_ID_MISSING_RT_STS_BIT);
+
+	return rc;
+}
+
+int smblite_lib_get_prop_batt_capacity(struct smb_charger *chg,
+				  union power_supply_propval *val)
+{
+	int rc = -EINVAL;
+
+	if (chg->fake_capacity >= 0) {
+		val->intval = chg->fake_capacity;
+		return 0;
+	}
+
+	rc = smblite_lib_get_prop_from_bms(chg, POWER_SUPPLY_PROP_CAPACITY,
+						val);
+
+	return rc;
+}
+
+static bool is_charging_paused(struct smb_charger *chg)
+{
+	int rc;
+	u8 val;
+
+	rc = smblite_lib_read(chg, CHARGING_ENABLE_CMD_REG, &val);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't read CHARGING_PAUSE_CMD rc=%d\n",
+					rc);
+		return false;
+	}
+
+	return val & CHARGING_PAUSE_CMD_BIT;
+}
+
+int smblite_lib_get_prop_batt_status(struct smb_charger *chg,
+				union power_supply_propval *val)
+{
+	union power_supply_propval pval = {0, };
+	bool usb_online;
+	u8 stat;
+	int rc;
+
+	if (chg->fake_chg_status_on_debug_batt) {
+		rc = smblite_lib_get_prop_from_bms(chg,
+				POWER_SUPPLY_PROP_DEBUG_BATTERY, &pval);
+		if (rc < 0) {
+			pr_err_ratelimited("Couldn't get debug battery prop rc=%d\n",
+					rc);
+		} else if (pval.intval == 1) {
+			val->intval = POWER_SUPPLY_STATUS_UNKNOWN;
+			return 0;
+		}
+	}
+
+	rc = smblite_lib_get_prop_usb_online(chg, &pval);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't get usb online property rc=%d\n",
+			rc);
+		return rc;
+	}
+	usb_online = (bool)pval.intval;
+
+	rc = smblite_lib_read(chg, BATTERY_CHARGER_STATUS_1_REG, &stat);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't read BATTERY_CHARGER_STATUS_1 rc=%d\n",
+			rc);
+		return rc;
+	}
+	stat = stat & BATTERY_CHARGER_STATUS_MASK;
+
+	if (!usb_online) {
+		switch (stat) {
+		case TERMINATE_CHARGE:
+		case INHIBIT_CHARGE:
+			val->intval = POWER_SUPPLY_STATUS_FULL;
+			break;
+		default:
+			val->intval = POWER_SUPPLY_STATUS_DISCHARGING;
+			break;
+		}
+		return rc;
+	}
+
+	switch (stat) {
+	case TRICKLE_CHARGE:
+	case PRE_CHARGE:
+	case FULLON_CHARGE:
+	case TAPER_CHARGE:
+		val->intval = POWER_SUPPLY_STATUS_CHARGING;
+		break;
+	case TERMINATE_CHARGE:
+	case INHIBIT_CHARGE:
+		val->intval = POWER_SUPPLY_STATUS_FULL;
+		break;
+	case DISABLE_CHARGE:
+	case PAUSE_CHARGE:
+		val->intval = POWER_SUPPLY_STATUS_NOT_CHARGING;
+		break;
+	default:
+		val->intval = POWER_SUPPLY_STATUS_UNKNOWN;
+		break;
+	}
+
+	if (is_charging_paused(chg)) {
+		val->intval = POWER_SUPPLY_STATUS_CHARGING;
+		return 0;
+	}
+
+	if (val->intval != POWER_SUPPLY_STATUS_CHARGING)
+		return 0;
+
+	if (!usb_online
+		&& chg->fake_batt_status == POWER_SUPPLY_STATUS_FULL) {
+		val->intval = POWER_SUPPLY_STATUS_FULL;
+		return 0;
+	}
+
+	return 0;
+}
+
+int smblite_lib_get_prop_batt_charge_type(struct smb_charger *chg,
+				union power_supply_propval *val)
+{
+	int rc;
+	u8 stat;
+
+	rc = smblite_lib_read(chg, BATTERY_CHARGER_STATUS_1_REG, &stat);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't read BATTERY_CHARGER_STATUS_1 rc=%d\n",
+			rc);
+		return rc;
+	}
+
+	switch (stat & BATTERY_CHARGER_STATUS_MASK) {
+	case TRICKLE_CHARGE:
+	case PRE_CHARGE:
+		val->intval = POWER_SUPPLY_CHARGE_TYPE_TRICKLE;
+		break;
+	case FULLON_CHARGE:
+		val->intval = POWER_SUPPLY_CHARGE_TYPE_FAST;
+		break;
+	case TAPER_CHARGE:
+		val->intval = POWER_SUPPLY_CHARGE_TYPE_TAPER;
+		break;
+	default:
+		val->intval = POWER_SUPPLY_CHARGE_TYPE_NONE;
+	}
+
+	return rc;
+}
+
+int smblite_lib_get_prop_batt_health(struct smb_charger *chg,
+				union power_supply_propval *val)
+{
+	union power_supply_propval pval;
+	int rc;
+	int effective_fv_uv;
+	u8 stat;
+
+	rc = smblite_lib_read(chg, CHARGER_VBAT_STATUS_REG, &stat);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't read CHARGER_VBAT_STATUS_REG rc=%d\n",
+			rc);
+		return rc;
+	}
+	smblite_lib_dbg(chg, PR_REGISTER, "CHARGER_VBAT_STATUS_REG = 0x%02x\n",
+		   stat);
+
+	if (stat & BAT_OV_BIT) {
+		rc = smblite_lib_get_prop_from_bms(chg,
+				POWER_SUPPLY_PROP_VOLTAGE_NOW, &pval);
+		if (!rc) {
+			/*
+			 * If Vbatt is within 40mV above Vfloat, then don't
+			 * treat it as overvoltage.
+			 */
+			effective_fv_uv = get_effective_result(chg->fv_votable);
+			if (pval.intval >= effective_fv_uv + 40000) {
+				val->intval = POWER_SUPPLY_HEALTH_OVERVOLTAGE;
+				smblite_lib_err(chg, "battery over-voltage vbat_fg = %duV, fv = %duV\n",
+						pval.intval, effective_fv_uv);
+				goto done;
+			}
+		}
+	}
+
+	rc = smblite_lib_read(chg, BATTERY_TEMP_STATUS_REG, &stat);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't read BATTERY_CHARGER_STATUS_2 rc=%d\n",
+			rc);
+		return rc;
+	}
+	if (stat & BAT_TEMP_STATUS_TOO_COLD_BIT)
+		val->intval = POWER_SUPPLY_HEALTH_COLD;
+	else if (stat & BAT_TEMP_STATUS_TOO_HOT_BIT)
+		val->intval = POWER_SUPPLY_HEALTH_OVERHEAT;
+	else if (stat & BAT_TEMP_STATUS_COLD_SOFT_BIT)
+		val->intval = POWER_SUPPLY_HEALTH_COOL;
+	else if (stat & BAT_TEMP_STATUS_HOT_SOFT_BIT)
+		val->intval = POWER_SUPPLY_HEALTH_WARM;
+	else
+		val->intval = POWER_SUPPLY_HEALTH_GOOD;
+
+done:
+	return rc;
+}
+
+int smblite_lib_get_prop_system_temp_level(struct smb_charger *chg,
+				union power_supply_propval *val)
+{
+	val->intval = chg->system_temp_level;
+	return 0;
+}
+
+int smblite_lib_get_prop_system_temp_level_max(struct smb_charger *chg,
+				union power_supply_propval *val)
+{
+	val->intval = chg->thermal_levels;
+	return 0;
+}
+
+int smblite_lib_get_prop_input_current_limited(struct smb_charger *chg,
+				union power_supply_propval *val)
+{
+	u8 stat;
+	int rc;
+
+	rc = smblite_lib_read(chg, AICL_STATUS_REG, &stat);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't read AICL_STATUS rc=%d\n", rc);
+		return rc;
+	}
+
+	val->intval = (stat & SOFT_ILIMIT_BIT);
+
+	return 0;
+}
+
+int smblite_lib_get_prop_batt_iterm(struct smb_charger *chg,
+		union power_supply_propval *val)
+{
+	int rc, temp;
+	u8 stat, buf[2];
+
+	/* Currently, only ADC comparator-based termination is supported
+	 * and validate, hence read only the threshold corresponding to ADC
+	 * source. Proceed only if CHGR_ITERM_USE_ANALOG_BIT is 0.
+	 */
+	rc = smblite_lib_read(chg, CHGR_TERM_CFG_REG, &stat);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't read CHGR_TERM_CFG_REG rc=%d\n",
+				rc);
+		return rc;
+	}
+
+	if (stat & CHGR_ITERM_USE_ANALOG_BIT) {
+		val->intval = -EINVAL;
+		return 0;
+	}
+
+	rc = smblite_lib_batch_read(chg, CHGR_ADC_ITERM_UP_THD_MSB_REG, buf, 2);
+
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't read CHGR_ADC_ITERM_UP_THD_MSB_REG rc=%d\n",
+				rc);
+		return rc;
+	}
+
+	temp = buf[1] | (buf[0] << 8);
+	temp = sign_extend32(temp, 15);
+
+	temp = DIV_ROUND_CLOSEST(temp * ITERM_LIMITS_MA,
+					ADC_CHG_ITERM_MASK);
+
+	val->intval = temp;
+
+	return rc;
+}
+
+int smblite_lib_get_prop_batt_charge_done(struct smb_charger *chg,
+					union power_supply_propval *val)
+{
+	int rc;
+	u8 stat;
+
+	rc = smblite_lib_read(chg, BATTERY_CHARGER_STATUS_1_REG, &stat);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't read BATTERY_CHARGER_STATUS_1 rc=%d\n",
+			rc);
+		return rc;
+	}
+
+	stat = stat & BATTERY_CHARGER_STATUS_MASK;
+	val->intval = (stat == TERMINATE_CHARGE);
+	return 0;
+}
+
+int smblite_lib_get_batt_current_now(struct smb_charger *chg,
+					union power_supply_propval *val)
+{
+	int rc;
+
+	rc = smblite_lib_get_prop_from_bms(chg,
+			POWER_SUPPLY_PROP_CURRENT_NOW, val);
+	if (!rc)
+		val->intval *= (-1);
+
+	return rc;
+}
+
+/***********************
+ * BATTERY PSY SETTERS *
+ ***********************/
+
+int smblite_lib_set_prop_input_suspend(struct smb_charger *chg,
+				  const union power_supply_propval *val)
+{
+	int rc;
+
+	/* vote 0mA when suspended */
+	rc = vote(chg->usb_icl_votable, USER_VOTER, (bool)val->intval, 0);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't vote to %s USB rc=%d\n",
+			(bool)val->intval ? "suspend" : "resume", rc);
+		return rc;
+	}
+
+	power_supply_changed(chg->batt_psy);
+	return rc;
+}
+
+int smblite_lib_set_prop_batt_capacity(struct smb_charger *chg,
+				  const union power_supply_propval *val)
+{
+	chg->fake_capacity = val->intval;
+
+	power_supply_changed(chg->batt_psy);
+
+	return 0;
+}
+
+int smblite_lib_set_prop_batt_status(struct smb_charger *chg,
+				  const union power_supply_propval *val)
+{
+	/* Faking battery full */
+	if (val->intval == POWER_SUPPLY_STATUS_FULL)
+		chg->fake_batt_status = val->intval;
+	else
+		chg->fake_batt_status = -EINVAL;
+
+	power_supply_changed(chg->batt_psy);
+
+	return 0;
+}
+
+int smblite_lib_set_prop_system_temp_level(struct smb_charger *chg,
+				const union power_supply_propval *val)
+{
+	if (val->intval < 0)
+		return -EINVAL;
+
+	if (chg->thermal_levels <= 0)
+		return -EINVAL;
+
+	if (val->intval > chg->thermal_levels)
+		return -EINVAL;
+
+	chg->system_temp_level = val->intval;
+
+	if (chg->system_temp_level == chg->thermal_levels)
+		return vote(chg->chg_disable_votable,
+			THERMAL_DAEMON_VOTER, true, 0);
+
+	vote(chg->chg_disable_votable, THERMAL_DAEMON_VOTER, false, 0);
+	if (chg->system_temp_level == 0)
+		return vote(chg->fcc_votable, THERMAL_DAEMON_VOTER, false, 0);
+
+	vote(chg->fcc_votable, THERMAL_DAEMON_VOTER, true,
+			chg->thermal_mitigation[chg->system_temp_level]);
+	return 0;
+}
+
+int smblite_lib_set_prop_rechg_soc_thresh(struct smb_charger *chg,
+				const union power_supply_propval *val)
+{
+	int rc;
+	u8 new_thr = DIV_ROUND_CLOSEST(val->intval * 255, 100);
+
+	rc = smblite_lib_write(chg, CHARGE_RCHG_SOC_THRESHOLD_CFG_REG,
+			new_thr);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't write to RCHG_SOC_THRESHOLD_CFG_REG rc=%d\n",
+				rc);
+		return rc;
+	}
+
+	chg->auto_recharge_soc = val->intval;
+
+	return rc;
+}
+
+int smblite_lib_run_aicl(struct smb_charger *chg, int type)
+{
+	int rc;
+	u8 stat;
+
+	rc = smblite_lib_read(chg, POWER_PATH_STATUS_REG, &stat);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't read POWER_PATH_STATUS rc=%d\n",
+								rc);
+		return rc;
+	}
+
+	/* USB is suspended so skip re-running AICL */
+	if (stat & USBIN_SUSPEND_STS_BIT)
+		return rc;
+
+	smblite_lib_dbg(chg, PR_MISC, "re-running AICL\n");
+
+	stat = (type == RERUN_AICL) ? RERUN_AICL_BIT : RESTART_AICL_BIT;
+	rc = smblite_lib_masked_write(chg, AICL_CMD_REG, stat, stat);
+	if (rc < 0)
+		smblite_lib_err(chg, "Couldn't write to AICL_CMD_REG rc=%d\n",
+				rc);
+	return 0;
+}
+
+/*******************
+ * USB PSY GETTERS *
+ *******************/
+
+int smblite_lib_get_prop_usb_present(struct smb_charger *chg,
+				union power_supply_propval *val)
+{
+	int rc;
+	u8 stat;
+
+	rc = smblite_lib_read(chg, USBIN_BASE + INT_RT_STS_OFFSET, &stat);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't read USBIN_RT_STS rc=%d\n", rc);
+		return rc;
+	}
+
+	val->intval = (bool)(stat & USBIN_PLUGIN_RT_STS_BIT);
+	return 0;
+}
+
+int smblite_lib_get_prop_usb_online(struct smb_charger *chg,
+			       union power_supply_propval *val)
+{
+	int rc = 0;
+	u8 stat;
+
+	if (get_client_vote_locked(chg->usb_icl_votable, USER_VOTER) == 0) {
+		val->intval = false;
+		return rc;
+	}
+
+	rc = smblite_lib_read(chg, POWER_PATH_STATUS_REG, &stat);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't read POWER_PATH_STATUS rc=%d\n",
+			rc);
+		return rc;
+	}
+	smblite_lib_dbg(chg, PR_REGISTER, "POWER_PATH_STATUS = 0x%02x\n",
+		   stat);
+
+	val->intval = (stat & USE_USBIN_BIT) &&
+		      (stat & VALID_INPUT_POWER_SOURCE_STS_BIT);
+	return rc;
+}
+
+int smblite_lib_get_usb_online(struct smb_charger *chg,
+			union power_supply_propval *val)
+{
+	int rc;
+
+	if (chg->real_charger_type == POWER_SUPPLY_TYPE_UNKNOWN) {
+		val->intval = 0;
+		return 0;
+	}
+
+	rc = smblite_lib_get_prop_usb_online(chg, val);
+	if (!val->intval)
+		goto exit;
+
+exit:
+	return rc;
+}
+
+static int smblite_lib_read_usbin_voltage_chan(struct smb_charger *chg,
+				     union power_supply_propval *val)
+{
+	int rc;
+
+	if (!chg->iio.usbin_v_chan)
+		return -ENODATA;
+
+	rc = iio_read_channel_processed(chg->iio.usbin_v_chan, &val->intval);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't read USBIN channel rc=%d\n", rc);
+		return rc;
+	}
+
+	return 0;
+}
+
+int smblite_lib_get_prop_usb_voltage_now(struct smb_charger *chg,
+				    union power_supply_propval *val)
+{
+	union power_supply_propval pval = {0, };
+	int rc = 0;
+	u8 reg;
+
+	rc = smblite_lib_get_prop_usb_present(chg, &pval);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't get usb presence status rc=%d\n",
+					rc);
+		goto out;
+	}
+
+	/*
+	 * Skip reading voltage only if USB is not present and we are not in
+	 * OTG mode.
+	 */
+	if (!pval.intval) {
+		rc = smblite_lib_read(chg, DCDC_CMD_OTG_REG, &reg);
+		if (rc < 0) {
+			smblite_lib_err(chg, "Couldn't read CMD_OTG rc=%d", rc);
+			goto out;
+		}
+
+		if (!(reg & OTG_EN_BIT))
+			goto out;
+	}
+
+	rc = smblite_lib_read_usbin_voltage_chan(chg, val);
+	if (rc < 0)
+		smblite_lib_err(chg, "Couldn't to read USBIN over vadc, rc=%d\n",
+					rc);
+
+out:
+	return rc;
+}
+
+int smblite_lib_get_prop_charger_temp(struct smb_charger *chg,
+				 union power_supply_propval *val)
+{
+	int temp, rc;
+	int input_present;
+
+	rc = smblite_lib_is_input_present(chg, &input_present);
+	if (rc < 0)
+		return rc;
+
+	if (input_present == INPUT_NOT_PRESENT)
+		return -ENODATA;
+
+	if (chg->iio.temp_chan) {
+		rc = iio_read_channel_processed(chg->iio.temp_chan,
+				&temp);
+		if (rc < 0) {
+			pr_err("Error in reading temp channel, rc=%d\n", rc);
+			return rc;
+		}
+		val->intval = temp / 100;
+	} else {
+		return -ENODATA;
+	}
+
+	return rc;
+}
+
+int smblite_lib_get_prop_typec_cc_orientation(struct smb_charger *chg,
+					 union power_supply_propval *val)
+{
+	int rc = 0;
+	u8 stat;
+
+	val->intval = 0;
+
+	if (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB)
+		return 0;
+
+	rc = smblite_lib_read(chg, TYPE_C_MISC_STATUS_REG, &stat);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't read TYPE_C_STATUS_4 rc=%d\n",
+					rc);
+		return rc;
+	}
+	smblite_lib_dbg(chg, PR_REGISTER, "TYPE_C_STATUS_4 = 0x%02x\n", stat);
+
+	if (stat & CC_ATTACHED_BIT)
+		val->intval = (bool)(stat & CC_ORIENTATION_BIT) + 1;
+
+	return rc;
+}
+
+static const char * const smblite_lib_typec_mode_name[] = {
+	[POWER_SUPPLY_TYPEC_NONE]		  = "NONE",
+	[POWER_SUPPLY_TYPEC_SOURCE_DEFAULT]	  = "SOURCE_DEFAULT",
+	[POWER_SUPPLY_TYPEC_SOURCE_MEDIUM]	  = "SOURCE_MEDIUM",
+	[POWER_SUPPLY_TYPEC_SOURCE_HIGH]	  = "SOURCE_HIGH",
+	[POWER_SUPPLY_TYPEC_NON_COMPLIANT]	  = "NON_COMPLIANT",
+	[POWER_SUPPLY_TYPEC_SINK]		  = "SINK",
+	[POWER_SUPPLY_TYPEC_SINK_POWERED_CABLE]   = "SINK_POWERED_CABLE",
+	[POWER_SUPPLY_TYPEC_SINK_DEBUG_ACCESSORY] = "SINK_DEBUG_ACCESSORY",
+	[POWER_SUPPLY_TYPEC_SINK_AUDIO_ADAPTER]   = "SINK_AUDIO_ADAPTER",
+	[POWER_SUPPLY_TYPEC_POWERED_CABLE_ONLY]   = "POWERED_CABLE_ONLY",
+};
+
+static int smblite_lib_get_prop_ufp_mode(struct smb_charger *chg)
+{
+	int rc;
+	u8 stat;
+
+	rc = smblite_lib_read(chg, TYPE_C_SNK_STATUS_REG, &stat);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't read TYPE_C_STATUS_1 rc=%d\n",
+					rc);
+		return POWER_SUPPLY_TYPEC_NONE;
+	}
+	smblite_lib_dbg(chg, PR_REGISTER, "TYPE_C_STATUS_1 = 0x%02x\n", stat);
+
+	switch (stat & DETECTED_SRC_TYPE_MASK) {
+	case SNK_RP_STD_BIT:
+		return POWER_SUPPLY_TYPEC_SOURCE_DEFAULT;
+	case SNK_RP_1P5_BIT:
+		return POWER_SUPPLY_TYPEC_SOURCE_MEDIUM;
+	case SNK_RP_3P0_BIT:
+		return POWER_SUPPLY_TYPEC_SOURCE_HIGH;
+	case SNK_RP_SHORT_BIT:
+		return POWER_SUPPLY_TYPEC_NON_COMPLIANT;
+	case SNK_DAM_500MA_BIT:
+	case SNK_DAM_1500MA_BIT:
+	case SNK_DAM_3000MA_BIT:
+		return POWER_SUPPLY_TYPEC_SINK_DEBUG_ACCESSORY;
+	default:
+		break;
+	}
+
+	return POWER_SUPPLY_TYPEC_NONE;
+}
+
+static int smblite_lib_get_prop_dfp_mode(struct smb_charger *chg)
+{
+	int rc;
+	u8 stat;
+
+	rc = smblite_lib_read(chg, TYPE_C_SRC_STATUS_REG, &stat);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't read TYPE_C_SRC_STATUS_REG rc=%d\n",
+				rc);
+		return POWER_SUPPLY_TYPEC_NONE;
+	}
+	smblite_lib_dbg(chg, PR_REGISTER, "TYPE_C_SRC_STATUS_REG = 0x%02x\n",
+				stat);
+
+	switch (stat & DETECTED_SNK_TYPE_MASK) {
+	case AUDIO_ACCESS_RA_RA_BIT:
+		return POWER_SUPPLY_TYPEC_SINK_AUDIO_ADAPTER;
+	case SRC_DEBUG_ACCESS_BIT:
+		return POWER_SUPPLY_TYPEC_SINK_DEBUG_ACCESSORY;
+	case SRC_RD_OPEN_BIT:
+		return POWER_SUPPLY_TYPEC_SINK;
+	default:
+		break;
+	}
+
+	return POWER_SUPPLY_TYPEC_NONE;
+}
+
+static int smblite_lib_get_prop_typec_mode(struct smb_charger *chg)
+{
+	int rc;
+	u8 stat;
+
+	if (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB)
+		return POWER_SUPPLY_TYPEC_NONE;
+
+	rc = smblite_lib_read(chg, TYPE_C_MISC_STATUS_REG, &stat);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't read TYPE_C_MISC_STATUS_REG rc=%d\n",
+				rc);
+		return 0;
+	}
+	smblite_lib_dbg(chg, PR_REGISTER, "TYPE_C_MISC_STATUS_REG = 0x%02x\n",
+				stat);
+
+	if (stat & SNK_SRC_MODE_BIT)
+		return smblite_lib_get_prop_dfp_mode(chg);
+	else
+		return smblite_lib_get_prop_ufp_mode(chg);
+}
+
+inline int smblite_lib_get_usb_prop_typec_mode(struct smb_charger *chg,
+				union power_supply_propval *val)
+{
+	if (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB)
+		val->intval = POWER_SUPPLY_TYPEC_NONE;
+	else
+		val->intval = chg->typec_mode;
+
+	return 0;
+}
+
+int smblite_lib_get_prop_typec_power_role(struct smb_charger *chg,
+				     union power_supply_propval *val)
+{
+	int rc = 0;
+	u8 ctrl;
+
+	if (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB) {
+		val->intval = POWER_SUPPLY_TYPEC_PR_NONE;
+		return 0;
+	}
+
+	rc = smblite_lib_read(chg, TYPE_C_MODE_CFG_REG, &ctrl);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't read TYPE_C_MODE_CFG_REG rc=%d\n",
+			rc);
+		return rc;
+	}
+	smblite_lib_dbg(chg, PR_REGISTER, "TYPE_C_MODE_CFG_REG = 0x%02x\n",
+		   ctrl);
+
+	if (ctrl & TYPEC_DISABLE_CMD_BIT) {
+		val->intval = POWER_SUPPLY_TYPEC_PR_NONE;
+		return rc;
+	}
+
+	switch (ctrl & (EN_SRC_ONLY_BIT | EN_SNK_ONLY_BIT)) {
+	case 0:
+		val->intval = POWER_SUPPLY_TYPEC_PR_DUAL;
+		break;
+	case EN_SRC_ONLY_BIT:
+		val->intval = POWER_SUPPLY_TYPEC_PR_SOURCE;
+		break;
+	case EN_SNK_ONLY_BIT:
+		val->intval = POWER_SUPPLY_TYPEC_PR_SINK;
+		break;
+	default:
+		val->intval = POWER_SUPPLY_TYPEC_PR_NONE;
+		smblite_lib_err(chg, "unsupported power role 0x%02lx\n",
+			ctrl & (EN_SRC_ONLY_BIT | EN_SNK_ONLY_BIT));
+		return -EINVAL;
+	}
+
+	chg->power_role = val->intval;
+	return rc;
+}
+
+static inline bool typec_in_src_mode(struct smb_charger *chg)
+{
+	return (chg->typec_mode > POWER_SUPPLY_TYPEC_NONE &&
+		chg->typec_mode < POWER_SUPPLY_TYPEC_SOURCE_DEFAULT);
+}
+
+int smblite_lib_get_prop_input_current_settled(struct smb_charger *chg,
+					  union power_supply_propval *val)
+{
+	return smblite_lib_get_charge_param(chg, &chg->param.icl_stat,
+						&val->intval);
+}
+
+int smblite_lib_get_prop_input_voltage_settled(struct smb_charger *chg,
+						union power_supply_propval *val)
+{
+	/* TODO: do we need to read the real VBUS */
+	val->intval = 5000000;
+	return 0;
+}
+
+int smblite_lib_get_prop_die_health(struct smb_charger *chg)
+{
+	int rc;
+	u8 stat;
+	int input_present;
+
+	rc = smblite_lib_is_input_present(chg, &input_present);
+	if (rc < 0)
+		return rc;
+
+	if (input_present == INPUT_NOT_PRESENT)
+		return POWER_SUPPLY_HEALTH_UNKNOWN;
+
+	rc = smblite_lib_read(chg, DIE_TEMP_STATUS_REG, &stat);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't read DIE_TEMP_STATUS_REG, rc=%d\n",
+				rc);
+		return POWER_SUPPLY_HEALTH_UNKNOWN;
+	}
+
+	if (stat & DIE_TEMP_RST_BIT)
+		return POWER_SUPPLY_HEALTH_OVERHEAT;
+
+	if (stat & DIE_TEMP_UB_BIT)
+		return POWER_SUPPLY_HEALTH_HOT;
+
+	if (stat & DIE_TEMP_LB_BIT)
+		return POWER_SUPPLY_HEALTH_WARM;
+
+	return POWER_SUPPLY_HEALTH_COOL;
+}
+
+int smblite_lib_get_die_health(struct smb_charger *chg,
+			union power_supply_propval *val)
+{
+	val->intval = smblite_lib_get_prop_die_health(chg);
+	return 0;
+}
+
+int smblite_lib_get_prop_scope(struct smb_charger *chg,
+			union power_supply_propval *val)
+{
+	int rc;
+	union power_supply_propval pval;
+
+	val->intval = POWER_SUPPLY_SCOPE_UNKNOWN;
+	rc = smblite_lib_get_prop_usb_present(chg, &pval);
+	if (rc < 0)
+		return rc;
+
+	val->intval = pval.intval ? POWER_SUPPLY_SCOPE_DEVICE
+		: chg->otg_present ? POWER_SUPPLY_SCOPE_SYSTEM
+		: POWER_SUPPLY_SCOPE_UNKNOWN;
+
+	return 0;
+}
+
+static int get_rp_based_dcp_current(struct smb_charger *chg, int typec_mode)
+{
+	int rp_ua;
+
+	switch (typec_mode) {
+	case POWER_SUPPLY_TYPEC_SOURCE_HIGH:
+		rp_ua = TYPEC_HIGH_CURRENT_UA;
+		break;
+	case POWER_SUPPLY_TYPEC_SOURCE_MEDIUM:
+	case POWER_SUPPLY_TYPEC_SOURCE_DEFAULT:
+	/* fall through */
+	default:
+		rp_ua = DCP_CURRENT_UA;
+	}
+
+	return rp_ua;
+}
+
+/*******************
+ * USB PSY SETTERS *
+ * *****************/
+
+int smblite_lib_set_prop_usb_type(struct smb_charger *chg,
+				const union power_supply_propval *val)
+{
+	smblite_lib_dbg(chg, PR_MISC,
+		"Charger type request form USB driver type=%d\n", val->intval);
+	/* update real charger type */
+	smblite_lib_update_usb_type(chg, val->intval);
+
+	/* For SDP rely on USB enumeration based reported the current */
+	if ((chg->real_charger_type == POWER_SUPPLY_TYPE_USB)
+		|| (chg->real_charger_type == POWER_SUPPLY_TYPE_UNKNOWN))
+		return 0;
+
+	vote(chg->usb_icl_votable, USB_PSY_VOTER, false, 0);
+	update_sw_icl_max(chg, chg->real_charger_type);
+
+	power_supply_changed(chg->usb_psy);
+	return 0;
+}
+
+int smblite_lib_set_prop_current_max(struct smb_charger *chg,
+				const union power_supply_propval *val)
+{
+	int rc = 0;
+
+	smblite_lib_dbg(chg, PR_MISC,
+		"Current request from USB driver current=%dmA\n", val->intval);
+	/* ignore current request from USB for charger other than SDP */
+	if (chg->real_charger_type != POWER_SUPPLY_TYPE_USB)
+		return 0;
+
+	rc = vote(chg->usb_icl_votable, USB_PSY_VOTER, true, val->intval);
+	if (rc < 0) {
+		pr_err("Couldn't vote ICL USB_PSY_VOTER rc=%d\n", rc);
+		return rc;
+	}
+
+	rc = vote(chg->usb_icl_votable, SW_ICL_MAX_VOTER, false, 0);
+	if (rc < 0) {
+		pr_err("Couldn't remove SW_ICL_MAX vote rc=%d\n", rc);
+		return rc;
+	}
+
+	/* Update TypeC Rp based current */
+	if (chg->connector_type == POWER_SUPPLY_CONNECTOR_TYPEC)
+		update_sw_icl_max(chg, chg->real_charger_type);
+
+	return 0;
+}
+
+int smblite_lib_set_prop_typec_power_role(struct smb_charger *chg,
+				     const union power_supply_propval *val)
+{
+	int rc = 0;
+	u8 power_role;
+
+	if (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB)
+		return -EINVAL;
+
+	smblite_lib_dbg(chg, PR_MISC, "power role change: %d --> %d!",
+			chg->power_role, val->intval);
+
+	if (chg->power_role == val->intval) {
+		smblite_lib_dbg(chg, PR_MISC, "power role already in %d, ignore!",
+				chg->power_role);
+		return 0;
+	}
+
+	switch (val->intval) {
+	case POWER_SUPPLY_TYPEC_PR_NONE:
+		power_role = TYPEC_DISABLE_CMD_BIT;
+		break;
+	case POWER_SUPPLY_TYPEC_PR_DUAL:
+		power_role = 0;
+		break;
+	case POWER_SUPPLY_TYPEC_PR_SINK:
+		power_role = EN_SNK_ONLY_BIT;
+		break;
+	case POWER_SUPPLY_TYPEC_PR_SOURCE:
+		power_role = EN_SRC_ONLY_BIT;
+		break;
+	default:
+		smblite_lib_err(chg, "power role %d not supported\n",
+					val->intval);
+		return -EINVAL;
+	}
+
+	rc = smblite_lib_masked_write(chg, TYPE_C_MODE_CFG_REG,
+				TYPEC_POWER_ROLE_CMD_MASK | TYPEC_TRY_MODE_MASK,
+				power_role);
+	if (rc < 0) {
+		smblite_lib_err(chg,
+			"Couldn't write 0x%02x to TYPE_C_INTRPT_ENB_SOFTWARE_CTRL rc=%d\n",
+			power_role, rc);
+		return rc;
+	}
+
+	chg->power_role = val->intval;
+	return rc;
+}
+
+int smblite_lib_set_prop_ship_mode(struct smb_charger *chg,
+				const union power_supply_propval *val)
+{
+	int rc;
+
+	smblite_lib_dbg(chg, PR_MISC, "Set ship mode: %d!!\n", !!val->intval);
+
+	rc = smblite_lib_masked_write(chg, SHIP_MODE_REG, SHIP_MODE_EN_BIT,
+			!!val->intval ? SHIP_MODE_EN_BIT : 0);
+	if (rc < 0)
+		dev_err(chg->dev, "Couldn't %s ship mode, rc=%d\n",
+				!!val->intval ? "enable" : "disable", rc);
+
+	return rc;
+}
+
+#define JEITA_SOFT			0
+#define JEITA_HARD			1
+static int smblite_lib_update_jeita(struct smb_charger *chg, u32 *thresholds,
+								int type)
+{
+	int rc;
+	u16 temp, base_low, base_high;
+
+
+	base_low = (type == JEITA_SOFT) ? CHGR_JEITA_COOL_THRESHOLD_REG
+					: CHGR_JEITA_COLD_THRESHOLD_REG;
+	base_high = (type == JEITA_SOFT) ? CHGR_JEITA_WARM_THRESHOLD_REG
+					: CHGR_JEITA_HOT_THRESHOLD_REG;
+	temp = thresholds[1] & 0xFFFF;
+	temp = ((temp & 0xFF00) >> 8) | ((temp & 0xFF) << 8);
+	rc = smblite_lib_batch_write(chg, base_high, (u8 *)&temp, 2);
+	if (rc < 0) {
+		smblite_lib_err(chg,
+			"Couldn't configure Jeita %s hot threshold rc=%d\n",
+			(type == JEITA_SOFT) ? "Soft" : "Hard", rc);
+		return rc;
+	}
+
+	temp = thresholds[0] & 0xFFFF;
+	temp = ((temp & 0xFF00) >> 8) | ((temp & 0xFF) << 8);
+	rc = smblite_lib_batch_write(chg, base_low, (u8 *)&temp, 2);
+	if (rc < 0) {
+		smblite_lib_err(chg,
+			"Couldn't configure Jeita %s cold threshold rc=%d\n",
+			(type == JEITA_SOFT) ? "Soft" : "Hard", rc);
+		return rc;
+	}
+
+	smblite_lib_dbg(chg, PR_MISC, "%s Jeita threshold configured\n",
+				(type == JEITA_SOFT) ? "Soft" : "Hard");
+
+	return 0;
+}
+
+static int smblite_lib_charge_inhibit_en(struct smb_charger *chg, bool enable)
+{
+	int rc;
+
+	rc = smblite_lib_masked_write(chg, CHGR_INHIBIT_REG,
+					CHGR_INHIBIT_BIT,
+					enable ? CHGR_INHIBIT_BIT : 0);
+	return rc;
+}
+
+static int smblite_lib_soft_jeita_arb_wa(struct smb_charger *chg)
+{
+	union power_supply_propval pval;
+	int rc = 0;
+	bool soft_jeita;
+
+	rc = smblite_lib_get_prop_batt_health(chg, &pval);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't get battery health rc=%d\n", rc);
+		return rc;
+	}
+
+	/* Do nothing on entering hard JEITA condition */
+	if (pval.intval == POWER_SUPPLY_HEALTH_COLD ||
+		pval.intval == POWER_SUPPLY_HEALTH_HOT)
+		return 0;
+
+	if (chg->jeita_soft_fcc[0] < 0 || chg->jeita_soft_fcc[1] < 0 ||
+		chg->jeita_soft_fv[0] < 0 || chg->jeita_soft_fv[1] < 0)
+		return 0;
+
+	soft_jeita = (pval.intval == POWER_SUPPLY_HEALTH_COOL) ||
+			(pval.intval == POWER_SUPPLY_HEALTH_WARM);
+
+	/* Do nothing on entering soft JEITA from hard JEITA */
+	if (chg->jeita_arb_flag && soft_jeita)
+		return 0;
+
+	/* Do nothing, initial to health condition */
+	if (!chg->jeita_arb_flag && !soft_jeita)
+		return 0;
+
+	/* Entering soft JEITA from normal state */
+	if (!chg->jeita_arb_flag && soft_jeita) {
+		vote(chg->chg_disable_votable, JEITA_ARB_VOTER, true, 0);
+
+		rc = smblite_lib_charge_inhibit_en(chg, true);
+		if (rc < 0)
+			smblite_lib_err(chg, "Couldn't enable charge inhibit rc=%d\n",
+					rc);
+
+		rc = smblite_lib_update_jeita(chg, chg->jeita_soft_hys_thlds,
+					JEITA_SOFT);
+		if (rc < 0)
+			smblite_lib_err(chg,
+				"Couldn't configure Jeita soft threshold rc=%d\n",
+				rc);
+
+		if (pval.intval == POWER_SUPPLY_HEALTH_COOL) {
+			vote(chg->fcc_votable, JEITA_ARB_VOTER, true,
+						chg->jeita_soft_fcc[0]);
+			vote(chg->fv_votable, JEITA_ARB_VOTER, true,
+						chg->jeita_soft_fv[0]);
+		} else {
+			vote(chg->fcc_votable, JEITA_ARB_VOTER, true,
+						chg->jeita_soft_fcc[1]);
+			vote(chg->fv_votable, JEITA_ARB_VOTER, true,
+						chg->jeita_soft_fv[1]);
+		}
+
+		vote(chg->chg_disable_votable, JEITA_ARB_VOTER, false, 0);
+		chg->jeita_arb_flag = true;
+	} else if (chg->jeita_arb_flag && !soft_jeita) {
+		/* Exit to health state from soft JEITA */
+
+		vote(chg->chg_disable_votable, JEITA_ARB_VOTER, true, 0);
+
+		rc = smblite_lib_charge_inhibit_en(chg, false);
+		if (rc < 0)
+			smblite_lib_err(chg, "Couldn't disable charge inhibit rc=%d\n",
+					rc);
+
+		rc = smblite_lib_update_jeita(chg, chg->jeita_soft_thlds,
+							JEITA_SOFT);
+		if (rc < 0)
+			smblite_lib_err(chg, "Couldn't configure Jeita soft threshold rc=%d\n",
+				rc);
+
+		vote(chg->fcc_votable, JEITA_ARB_VOTER, false, 0);
+		vote(chg->fv_votable, JEITA_ARB_VOTER, false, 0);
+		vote(chg->chg_disable_votable, JEITA_ARB_VOTER, false, 0);
+		chg->jeita_arb_flag = false;
+	}
+
+	smblite_lib_dbg(chg, PR_MISC, "JEITA ARB status %d, soft JEITA status %d\n",
+			chg->jeita_arb_flag, soft_jeita);
+	return rc;
+}
+
+/************************
+ * USB MAIN PSY SETTERS *
+ ************************/
+int smblite_lib_get_hw_current_max(struct smb_charger *chg,
+					int *total_current_ua)
+{
+	union power_supply_propval val = {0, };
+	int rc = 0, typec_source_rd, current_ua;
+	bool non_compliant;
+	u8 stat;
+
+	rc = smblite_lib_read(chg, LEGACY_CABLE_STATUS_REG, &stat);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't read TYPE_C_STATUS_5 rc=%d\n",
+					rc);
+		return rc;
+	}
+	non_compliant = stat & TYPEC_NONCOMP_LEGACY_CABLE_STATUS_BIT;
+
+	/* get settled ICL */
+	rc = smblite_lib_get_prop_input_current_settled(chg, &val);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't get settled ICL rc=%d\n", rc);
+		return rc;
+	}
+
+	typec_source_rd = smblite_lib_get_prop_ufp_mode(chg);
+
+	if ((chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB)
+		|| (non_compliant && !chg->typec_legacy_use_rp_icl)) {
+		switch (chg->real_charger_type) {
+		case POWER_SUPPLY_TYPE_USB_CDP:
+			current_ua = CDP_CURRENT_UA;
+			break;
+		case POWER_SUPPLY_TYPE_USB_DCP:
+			current_ua = DCP_CURRENT_UA;
+			break;
+		default:
+			current_ua = 0;
+			break;
+		}
+
+		*total_current_ua = max(current_ua, val.intval);
+		return 0;
+	}
+
+	switch (typec_source_rd) {
+	case POWER_SUPPLY_TYPEC_SOURCE_DEFAULT:
+		switch (chg->real_charger_type) {
+		case POWER_SUPPLY_TYPE_USB_CDP:
+			current_ua = CDP_CURRENT_UA;
+			break;
+		case POWER_SUPPLY_TYPE_USB_DCP:
+			current_ua = DCP_CURRENT_UA;
+			break;
+		default:
+			current_ua = 0;
+			break;
+		}
+		break;
+	case POWER_SUPPLY_TYPEC_SOURCE_MEDIUM:
+		current_ua = TYPEC_MEDIUM_CURRENT_UA;
+		break;
+	case POWER_SUPPLY_TYPEC_SOURCE_HIGH:
+		current_ua = TYPEC_HIGH_CURRENT_UA;
+		break;
+	case POWER_SUPPLY_TYPEC_NON_COMPLIANT:
+	case POWER_SUPPLY_TYPEC_NONE:
+	default:
+		current_ua = 0;
+		break;
+	}
+
+	*total_current_ua = max(current_ua, val.intval);
+	return 0;
+}
+
+int smblite_lib_get_charge_current(struct smb_charger *chg,
+					int *total_current_ua)
+{
+	if (chg->usb_icl_votable)
+		*total_current_ua = get_effective_result(chg->usb_icl_votable);
+
+	return 0;
+}
+
+/**********************
+ * INTERRUPT HANDLERS *
+ **********************/
+
+irqreturn_t smblite_default_irq_handler(int irq, void *data)
+{
+	struct smb_irq_data *irq_data = data;
+	struct smb_charger *chg = irq_data->parent_data;
+
+	smblite_lib_dbg(chg, PR_INTERRUPT, "IRQ: %s\n", irq_data->name);
+	return IRQ_HANDLED;
+}
+
+irqreturn_t smblite_chg_state_change_irq_handler(int irq, void *data)
+{
+	struct smb_irq_data *irq_data = data;
+	struct smb_charger *chg = irq_data->parent_data;
+	u8 stat;
+	int rc;
+
+	smblite_lib_dbg(chg, PR_INTERRUPT, "IRQ: %s\n", irq_data->name);
+
+	rc = smblite_lib_read(chg, BATTERY_CHARGER_STATUS_1_REG, &stat);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't read BATTERY_CHARGER_STATUS_1 rc=%d\n",
+				rc);
+		return IRQ_HANDLED;
+	}
+
+	stat = stat & BATTERY_CHARGER_STATUS_MASK;
+
+	power_supply_changed(chg->batt_psy);
+	return IRQ_HANDLED;
+}
+
+irqreturn_t smblite_batt_temp_changed_irq_handler(int irq, void *data)
+{
+	struct smb_irq_data *irq_data = data;
+	struct smb_charger *chg = irq_data->parent_data;
+	int rc;
+
+	smblite_lib_dbg(chg, PR_INTERRUPT, "IRQ: %s\n", irq_data->name);
+
+	if (chg->jeita_configured != JEITA_CFG_COMPLETE)
+		return IRQ_HANDLED;
+
+	rc = smblite_lib_soft_jeita_arb_wa(chg);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't fix soft jeita arb rc=%d\n",
+				rc);
+		return IRQ_HANDLED;
+	}
+
+	return IRQ_HANDLED;
+}
+
+irqreturn_t smblite_batt_psy_changed_irq_handler(int irq, void *data)
+{
+	struct smb_irq_data *irq_data = data;
+	struct smb_charger *chg = irq_data->parent_data;
+
+	smblite_lib_dbg(chg, PR_INTERRUPT, "IRQ: %s\n", irq_data->name);
+	power_supply_changed(chg->batt_psy);
+	return IRQ_HANDLED;
+}
+
+#define AICL_STEP_MV		200
+#define MAX_AICL_THRESHOLD_MV	4800
+irqreturn_t smblite_usbin_uv_irq_handler(int irq, void *data)
+{
+	struct smb_irq_data *irq_data = data;
+	struct smb_charger *chg = irq_data->parent_data;
+	struct storm_watch *wdata;
+	int rc;
+
+	smblite_lib_dbg(chg, PR_INTERRUPT, "IRQ: %s\n", irq_data->name);
+
+	if ((chg->wa_flags & WEAK_ADAPTER_WA)
+			&& is_storming(&irq_data->storm_data)) {
+
+		if (chg->aicl_max_reached) {
+			smblite_lib_dbg(chg, PR_MISC,
+					"USBIN_UV storm at max AICL threshold\n");
+			return IRQ_HANDLED;
+		}
+
+		smblite_lib_dbg(chg, PR_MISC, "USBIN_UV storm at threshold %d\n",
+				chg->aicl_5v_threshold_mv);
+
+		/* suspend USBIN before updating AICL threshold */
+		vote(chg->usb_icl_votable, AICL_THRESHOLD_VOTER, true, 0);
+
+		/* delay for VASHDN deglitch */
+		msleep(20);
+
+		if (chg->aicl_5v_threshold_mv > MAX_AICL_THRESHOLD_MV) {
+			/* reached max AICL threshold */
+			chg->aicl_max_reached = true;
+			goto unsuspend_input;
+		}
+
+		/* Increase AICL threshold by 200mV */
+		rc = smblite_lib_set_charge_param(chg,
+				&chg->param.aicl_5v_threshold,
+				chg->aicl_5v_threshold_mv + AICL_STEP_MV);
+		if (rc < 0)
+			dev_err(chg->dev,
+				"Error in setting AICL threshold rc=%d\n", rc);
+		else
+			chg->aicl_5v_threshold_mv += AICL_STEP_MV;
+
+unsuspend_input:
+		/* Force torch in boost mode to ensure it works with low ICL */
+		schgm_flash_torch_priority(chg, TORCH_BOOST_MODE);
+
+		if (chg->aicl_max_reached) {
+			smblite_lib_dbg(chg, PR_MISC,
+				"Reached max AICL threshold resctricting ICL to 100mA\n");
+			vote(chg->usb_icl_votable, AICL_THRESHOLD_VOTER,
+					true, USBIN_100UA);
+			smblite_lib_run_aicl(chg, RESTART_AICL);
+		} else {
+			smblite_lib_run_aicl(chg, RESTART_AICL);
+			vote(chg->usb_icl_votable, AICL_THRESHOLD_VOTER,
+					false, 0);
+		}
+
+		wdata = &chg->irq_info[USBIN_UV_IRQ].irq_data->storm_data;
+		reset_storm_count(wdata);
+	}
+
+	if (!chg->irq_info[SWITCHER_POWER_OK_IRQ].irq_data)
+		return IRQ_HANDLED;
+
+	wdata = &chg->irq_info[SWITCHER_POWER_OK_IRQ].irq_data->storm_data;
+	reset_storm_count(wdata);
+
+	return IRQ_HANDLED;
+}
+
+#define USB_WEAK_INPUT_UA	1400000
+#define ICL_CHANGE_DELAY_MS	1000
+irqreturn_t smblite_icl_change_irq_handler(int irq, void *data)
+{
+	int rc, settled_ua, delay = ICL_CHANGE_DELAY_MS;
+	struct smb_irq_data *irq_data = data;
+	struct smb_charger *chg = irq_data->parent_data;
+
+	if (chg->mode == PARALLEL_MASTER) {
+		rc = smblite_lib_get_charge_param(chg, &chg->param.icl_stat,
+					&settled_ua);
+		if (rc < 0) {
+			smblite_lib_err(chg, "Couldn't get ICL status rc=%d\n",
+						rc);
+			return IRQ_HANDLED;
+		}
+
+		/* If AICL settled then schedule work now */
+		if (settled_ua == get_effective_result(chg->usb_icl_votable))
+			delay = 0;
+
+		cancel_delayed_work_sync(&chg->icl_change_work);
+		schedule_delayed_work(&chg->icl_change_work,
+						msecs_to_jiffies(delay));
+	}
+
+	return IRQ_HANDLED;
+}
+
+static void smblite_lib_micro_usb_plugin(struct smb_charger *chg,
+					bool vbus_rising)
+{
+	if (vbus_rising) {
+		smblite_lib_notify_device_mode(chg, true);
+	} else {
+		smblite_lib_notify_device_mode(chg, false);
+		smblite_lib_uusb_removal(chg);
+	}
+}
+
+#define PL_DELAY_MS	30000
+void smblite_lib_usb_plugin_locked(struct smb_charger *chg)
+{
+	int rc;
+	u8 stat;
+	bool vbus_rising;
+	struct smb_irq_data *data;
+	struct storm_watch *wdata;
+
+	rc = smblite_lib_read(chg, USBIN_BASE + INT_RT_STS_OFFSET, &stat);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't read USB_INT_RT_STS rc=%d\n",
+					rc);
+		return;
+	}
+
+	vbus_rising = (bool)(stat & USBIN_PLUGIN_RT_STS_BIT);
+
+	if (vbus_rising) {
+		/* Remove FCC_STEPPER 1.5A init vote to allow FCC ramp up */
+		if (chg->fcc_stepper_enable)
+			vote(chg->fcc_votable, FCC_STEPPER_VOTER, false, 0);
+
+		/* Schedule work to enable parallel charger */
+		vote(chg->awake_votable, PL_DELAY_VOTER, true, 0);
+		schedule_delayed_work(&chg->pl_enable_work,
+					msecs_to_jiffies(PL_DELAY_MS));
+	} else {
+		smblite_lib_update_usb_type(chg, POWER_SUPPLY_TYPE_UNKNOWN);
+		/* Disable SW Thermal Regulation */
+		if (chg->wa_flags & BOOST_BACK_WA) {
+			data = chg->irq_info[SWITCHER_POWER_OK_IRQ].irq_data;
+			if (data) {
+				wdata = &data->storm_data;
+				update_storm_count(wdata,
+						WEAK_CHG_STORM_COUNT);
+				vote(chg->usb_icl_votable, BOOST_BACK_VOTER,
+						false, 0);
+				vote(chg->usb_icl_votable, WEAK_CHARGER_VOTER,
+						false, 0);
+			}
+		}
+
+		/* Force 1500mA FCC on removal if fcc stepper is enabled */
+		if (chg->fcc_stepper_enable)
+			vote(chg->fcc_votable, FCC_STEPPER_VOTER,
+							true, 1500000);
+
+		if (chg->wa_flags & WEAK_ADAPTER_WA) {
+			chg->aicl_5v_threshold_mv =
+					chg->default_aicl_5v_threshold_mv;
+
+			smblite_lib_set_charge_param(chg,
+					&chg->param.aicl_5v_threshold,
+					chg->aicl_5v_threshold_mv);
+			chg->aicl_max_reached = false;
+
+			/*
+			 * schgm_flash_torch_priority(chg, TORCH_BUCK_MODE);
+			 */
+
+			data = chg->irq_info[USBIN_UV_IRQ].irq_data;
+			if (data) {
+				wdata = &data->storm_data;
+				reset_storm_count(wdata);
+			}
+			vote(chg->usb_icl_votable, AICL_THRESHOLD_VOTER,
+					false, 0);
+		}
+	}
+
+	if (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB)
+		smblite_lib_micro_usb_plugin(chg, vbus_rising);
+
+	power_supply_changed(chg->usb_psy);
+	smblite_lib_dbg(chg, PR_INTERRUPT, "IRQ: usbin-plugin %s\n",
+					vbus_rising ? "attached" : "detached");
+}
+
+irqreturn_t smblite_usb_plugin_irq_handler(int irq, void *data)
+{
+	struct smb_irq_data *irq_data = data;
+	struct smb_charger *chg = irq_data->parent_data;
+
+	smblite_lib_usb_plugin_locked(chg);
+
+	return IRQ_HANDLED;
+}
+
+static void update_sw_icl_max(struct smb_charger *chg,
+				enum power_supply_type type)
+{
+	int typec_mode;
+	int rp_ua;
+
+	if (chg->typec_mode == POWER_SUPPLY_TYPEC_SINK_AUDIO_ADAPTER) {
+		vote(chg->usb_icl_votable, SW_ICL_MAX_VOTER, true, 500000);
+		return;
+	}
+
+	if (chg->real_charger_type == POWER_SUPPLY_TYPE_UNKNOWN) {
+		vote(chg->usb_icl_votable, SW_ICL_MAX_VOTER, true,
+					USBIN_100UA);
+		return;
+	}
+
+	/* TypeC rp med or high, use rp value */
+	typec_mode = smblite_lib_get_prop_typec_mode(chg);
+	if (typec_rp_med_high(chg, typec_mode)) {
+		rp_ua = get_rp_based_dcp_current(chg, typec_mode);
+		vote(chg->usb_icl_votable, SW_ICL_MAX_VOTER, true, rp_ua);
+		vote(chg->usb_icl_votable, USB_PSY_VOTER, false, 0);
+		return;
+	}
+
+	/* rp-std or legacy, USB BC 1.2 */
+	switch (type) {
+	case POWER_SUPPLY_TYPE_USB:
+		/*
+		 * USB_PSY will vote to increase the current to 500/900mA once
+		 * enumeration is done.
+		 */
+		if (!is_client_vote_enabled(chg->usb_icl_votable,
+						USB_PSY_VOTER)) {
+			/* if flash is active force 500mA */
+			vote(chg->usb_icl_votable, USB_PSY_VOTER, true,
+					is_flash_active(chg) ?
+					USBIN_500UA : USBIN_100UA);
+		}
+		vote(chg->usb_icl_votable, SW_ICL_MAX_VOTER, false, 0);
+		break;
+	case POWER_SUPPLY_TYPE_USB_CDP:
+		vote(chg->usb_icl_votable, SW_ICL_MAX_VOTER, true,
+					CDP_CURRENT_UA);
+		break;
+	case POWER_SUPPLY_TYPE_USB_DCP:
+		rp_ua = get_rp_based_dcp_current(chg, typec_mode);
+		vote(chg->usb_icl_votable, SW_ICL_MAX_VOTER, true, rp_ua);
+		break;
+	case POWER_SUPPLY_TYPE_UNKNOWN:
+	default:
+		vote(chg->usb_icl_votable, SW_ICL_MAX_VOTER, true,
+					USBIN_100UA);
+		break;
+	}
+}
+
+static void typec_sink_insertion(struct smb_charger *chg)
+{
+	smblite_lib_notify_usb_host(chg, true);
+}
+
+static void typec_src_insertion(struct smb_charger *chg)
+{
+	int rc = 0;
+	u8 stat;
+
+	smblite_lib_notify_device_mode(chg, true);
+	if (chg->pr_swap_in_progress) {
+		vote(chg->usb_icl_votable, SW_ICL_MAX_VOTER, false, 0);
+		return;
+	}
+
+	rc = smblite_lib_read(chg, LEGACY_CABLE_STATUS_REG, &stat);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't read TYPE_C_STATE_MACHINE_STATUS_REG rc=%d\n",
+					rc);
+		return;
+	}
+
+	chg->typec_legacy = stat & TYPEC_LEGACY_CABLE_STATUS_BIT;
+
+}
+
+static void typec_ra_ra_insertion(struct smb_charger *chg)
+{
+	vote(chg->usb_icl_votable, SW_ICL_MAX_VOTER, true, 500000);
+	vote(chg->usb_icl_votable, USB_PSY_VOTER, false, 0);
+}
+
+static int typec_partner_register(struct smb_charger *chg)
+{
+	int typec_mode, rc = 0;
+
+	if (!chg->typec_port)
+		return 0;
+
+	if (chg->typec_partner && chg->pr_swap_in_progress)
+		return 0;
+
+	if (chg->sink_src_mode == AUDIO_ACCESS_MODE)
+		chg->typec_partner_desc.accessory = TYPEC_ACCESSORY_AUDIO;
+	else
+		chg->typec_partner_desc.accessory = TYPEC_ACCESSORY_NONE;
+
+	chg->typec_partner = typec_register_partner(chg->typec_port,
+			&chg->typec_partner_desc);
+	if (IS_ERR(chg->typec_partner)) {
+		rc = PTR_ERR(chg->typec_partner);
+		pr_err("Couldn't to register typec_partner rc=%d\n", rc);
+		return rc;
+	}
+
+	typec_mode = smblite_lib_get_prop_typec_mode(chg);
+
+	if (typec_mode >= POWER_SUPPLY_TYPEC_SOURCE_DEFAULT
+			|| typec_mode == POWER_SUPPLY_TYPEC_NONE) {
+		typec_set_data_role(chg->typec_port, TYPEC_DEVICE);
+		typec_set_pwr_role(chg->typec_port, TYPEC_SINK);
+	} else {
+		typec_set_data_role(chg->typec_port, TYPEC_HOST);
+		typec_set_pwr_role(chg->typec_port, TYPEC_SOURCE);
+	}
+
+	return rc;
+}
+
+static void typec_partner_unregister(struct smb_charger *chg)
+{
+	if (chg->typec_partner && !chg->pr_swap_in_progress) {
+		smblite_lib_dbg(chg, PR_MISC, "Un-registering typeC partner\n");
+		typec_unregister_partner(chg->typec_partner);
+		chg->typec_partner = NULL;
+	}
+}
+
+static const char * const dr_mode_text[] = {
+	"ufp", "dfp", "none"
+};
+
+static int smblite_lib_force_dr_mode(struct smb_charger *chg, int mode)
+{
+	int rc = 0;
+
+	switch (mode) {
+	case TYPEC_PORT_SNK:
+		rc = smblite_lib_masked_write(chg, TYPE_C_MODE_CFG_REG,
+			TYPEC_POWER_ROLE_CMD_MASK, EN_SNK_ONLY_BIT);
+		if (rc < 0) {
+			smblite_lib_err(chg, "Couldn't enable snk, rc=%d\n",
+						rc);
+			return rc;
+		}
+		break;
+	case TYPEC_PORT_SRC:
+		rc = smblite_lib_masked_write(chg, TYPE_C_MODE_CFG_REG,
+			TYPEC_POWER_ROLE_CMD_MASK, EN_SRC_ONLY_BIT);
+		if (rc < 0) {
+			smblite_lib_err(chg, "Couldn't enable src, rc=%d\n",
+						rc);
+			return rc;
+		}
+		break;
+	case TYPEC_PORT_DRP:
+		rc = smblite_lib_masked_write(chg, TYPE_C_MODE_CFG_REG,
+			TYPEC_POWER_ROLE_CMD_MASK, 0);
+		if (rc < 0) {
+			smblite_lib_err(chg, "Couldn't enable DRP, rc=%d\n",
+						rc);
+			return rc;
+		}
+		break;
+	default:
+		smblite_lib_err(chg, "Power role %d not supported\n", mode);
+		return -EINVAL;
+	}
+
+	chg->dr_mode = mode;
+
+	return rc;
+}
+
+int smblite_lib_typec_port_type_set(const struct typec_capability *cap,
+					enum typec_port_type type)
+{
+	struct smb_charger *chg = container_of(cap,
+					struct smb_charger, typec_caps);
+	int rc = 0;
+
+	if (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB)
+		return 0;
+
+	mutex_lock(&chg->typec_lock);
+
+	if ((chg->pr_swap_in_progress) || (type == TYPEC_PORT_DRP)) {
+		smblite_lib_dbg(chg, PR_MISC, "Ignoring port type request type = %d swap_in_progress = %d\n",
+				type, chg->pr_swap_in_progress);
+		goto unlock;
+	}
+
+	chg->pr_swap_in_progress = true;
+
+	rc = smblite_lib_force_dr_mode(chg, type);
+	if (rc < 0) {
+		chg->pr_swap_in_progress = false;
+		smblite_lib_err(chg, "Couldn't to force mode, rc=%d\n", rc);
+		goto unlock;
+	}
+
+	smblite_lib_dbg(chg, PR_MISC, "Requested role %s\n",
+				type ? "SINK" : "SOURCE");
+
+	/*
+	 * As per the hardware requirements,
+	 * schedule the work with required delay.
+	 */
+	if (!(delayed_work_pending(&chg->role_reversal_check))) {
+		cancel_delayed_work_sync(&chg->role_reversal_check);
+		schedule_delayed_work(&chg->role_reversal_check,
+			msecs_to_jiffies(ROLE_REVERSAL_DELAY_MS));
+		vote(chg->awake_votable, TYPEC_SWAP_VOTER, true, 0);
+	}
+
+unlock:
+	mutex_unlock(&chg->typec_lock);
+	return rc;
+}
+
+static int smblite_lib_role_switch_failure(struct smb_charger *chg, int mode)
+{
+	int rc = 0;
+	union power_supply_propval pval = {0, };
+
+	rc = smblite_lib_get_prop_usb_present(chg, &pval);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't get usb presence status rc=%d\n",
+					rc);
+		return rc;
+	}
+
+	/*
+	 * When role switch fails notify the
+	 * current charger state to usb driver.
+	 */
+	if (pval.intval && mode == TYPEC_PORT_SRC) {
+		smblite_lib_dbg(chg, PR_MISC, "Role reversal failed, notifying device mode to usb driver.\n");
+		smblite_lib_notify_device_mode(chg, true);
+	}
+
+	return rc;
+}
+
+static void smblite_lib_typec_role_check_work(struct work_struct *work)
+{
+	struct smb_charger *chg = container_of(work, struct smb_charger,
+					role_reversal_check.work);
+	int rc = 0;
+
+	if (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB) {
+		chg->pr_swap_in_progress = false;
+		vote(chg->awake_votable, TYPEC_SWAP_VOTER, false, 0);
+		return;
+	}
+
+	mutex_lock(&chg->typec_lock);
+
+	switch (chg->dr_mode) {
+	case TYPEC_PORT_SNK:
+		if (chg->typec_mode < POWER_SUPPLY_TYPEC_SOURCE_DEFAULT) {
+			smblite_lib_dbg(chg, PR_MISC, "Role reversal not latched to UFP in %d msecs. Resetting to DRP mode\n",
+						ROLE_REVERSAL_DELAY_MS);
+			rc = smblite_lib_force_dr_mode(chg, TYPEC_PORT_DRP);
+			if (rc < 0)
+				smblite_lib_err(chg, "Couldn't to set DRP mode, rc=%d\n",
+						rc);
+		} else {
+			chg->power_role = POWER_SUPPLY_TYPEC_PR_SINK;
+			typec_set_pwr_role(chg->typec_port, TYPEC_SINK);
+			typec_set_data_role(chg->typec_port, TYPEC_DEVICE);
+			smblite_lib_dbg(chg, PR_MISC, "Role changed successfully to SINK");
+		}
+		break;
+	case TYPEC_PORT_SRC:
+		if (chg->typec_mode >= POWER_SUPPLY_TYPEC_SOURCE_DEFAULT
+			|| chg->typec_mode == POWER_SUPPLY_TYPEC_NONE) {
+			smblite_lib_dbg(chg, PR_MISC, "Role reversal not latched to DFP in %d msecs. Resetting to DRP mode\n",
+						ROLE_REVERSAL_DELAY_MS);
+			rc = smblite_lib_force_dr_mode(chg,
+							TYPEC_PORT_DRP);
+			if (rc < 0)
+				smblite_lib_err(chg, "Couldn't to set DRP mode, rc=%d\n",
+							rc);
+			rc = smblite_lib_role_switch_failure(chg,
+							TYPEC_PORT_SRC);
+			if (rc < 0)
+				smblite_lib_err(chg, "Couldn't to role switch rc=%d\n",
+							rc);
+		} else {
+			chg->power_role = POWER_SUPPLY_TYPEC_PR_SOURCE;
+			typec_set_pwr_role(chg->typec_port, TYPEC_SOURCE);
+			typec_set_data_role(chg->typec_port, TYPEC_HOST);
+			smblite_lib_dbg(chg, PR_MISC, "Role changed successfully to SOURCE");
+		}
+		break;
+	default:
+		pr_debug("Already in DRP mode\n");
+		break;
+	}
+
+	chg->pr_swap_in_progress = false;
+	vote(chg->awake_votable, TYPEC_SWAP_VOTER, false, 0);
+	mutex_unlock(&chg->typec_lock);
+}
+
+static void typec_sink_removal(struct smb_charger *chg)
+{
+	if (chg->otg_present)
+		smblite_lib_notify_usb_host(chg, false);
+
+	typec_partner_unregister(chg);
+}
+
+static void typec_src_removal(struct smb_charger *chg)
+{
+	struct smb_irq_data *data;
+	struct storm_watch *wdata;
+
+	if (chg->wa_flags & BOOST_BACK_WA) {
+		data = chg->irq_info[SWITCHER_POWER_OK_IRQ].irq_data;
+		if (data) {
+			wdata = &data->storm_data;
+			update_storm_count(wdata, WEAK_CHG_STORM_COUNT);
+			vote(chg->usb_icl_votable, BOOST_BACK_VOTER, false, 0);
+			vote(chg->usb_icl_votable, WEAK_CHARGER_VOTER,
+					false, 0);
+		}
+	}
+
+	cancel_delayed_work_sync(&chg->pl_enable_work);
+
+	/* reset input current limit voters */
+	vote(chg->usb_icl_votable, SW_ICL_MAX_VOTER, true,
+			is_flash_active(chg) ? USBIN_500UA : USBIN_100UA);
+	vote(chg->usb_icl_votable, USB_PSY_VOTER, false, 0);
+
+	/* reset parallel voters */
+	vote(chg->pl_disable_votable, PL_DELAY_VOTER, true, 0);
+	vote(chg->pl_enable_votable_indirect, USBIN_I_VOTER, false, 0);
+	vote(chg->pl_enable_votable_indirect, USBIN_V_VOTER, false, 0);
+	vote(chg->awake_votable, PL_DELAY_VOTER, false, 0);
+
+	/* Remove SW thermal regulation votes */
+	vote(chg->usb_icl_votable, SW_THERM_REGULATION_VOTER, false, 0);
+	vote(chg->awake_votable, SW_THERM_REGULATION_VOTER, false, 0);
+
+	smblite_lib_notify_device_mode(chg, false);
+
+	typec_partner_unregister(chg);
+	chg->typec_legacy = false;
+}
+
+static void typec_mode_unattached(struct smb_charger *chg)
+{
+	vote(chg->usb_icl_votable, SW_ICL_MAX_VOTER, true, USBIN_100UA);
+}
+
+static void smblite_lib_handle_rp_change(struct smb_charger *chg,
+					int typec_mode)
+{
+	/*
+	 * if type is not updated or charger current is not set
+	 * for SDP ignore Rp change requests.
+	 */
+	if (chg->real_charger_type == POWER_SUPPLY_TYPE_UNKNOWN
+		|| (chg->real_charger_type == POWER_SUPPLY_TYPE_USB
+			&& !is_client_vote_enabled(chg->usb_icl_votable,
+							USB_PSY_VOTER)))
+		return;
+
+	update_sw_icl_max(chg, chg->real_charger_type);
+	smblite_lib_dbg(chg, PR_MISC, "CC change old_mode=%d new_mode=%d\n",
+						chg->typec_mode, typec_mode);
+}
+
+irqreturn_t smblite_typec_or_rid_detection_change_irq_handler(int irq,
+								void *data)
+{
+	struct smb_irq_data *irq_data = data;
+	struct smb_charger *chg = irq_data->parent_data;
+
+	smblite_lib_dbg(chg, PR_INTERRUPT, "IRQ: %s\n", irq_data->name);
+	if (chg->usb_psy)
+		power_supply_changed(chg->usb_psy);
+
+	return IRQ_HANDLED;
+}
+
+irqreturn_t smblite_typec_state_change_irq_handler(int irq, void *data)
+{
+	struct smb_irq_data *irq_data = data;
+	struct smb_charger *chg = irq_data->parent_data;
+	int typec_mode;
+
+	if (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB) {
+		smblite_lib_dbg(chg, PR_INTERRUPT,
+				"Ignoring for micro USB\n");
+		return IRQ_HANDLED;
+	}
+
+	typec_mode = smblite_lib_get_prop_typec_mode(chg);
+	if (chg->sink_src_mode != UNATTACHED_MODE
+			&& (typec_mode != chg->typec_mode))
+		smblite_lib_handle_rp_change(chg, typec_mode);
+	chg->typec_mode = typec_mode;
+
+	smblite_lib_dbg(chg, PR_INTERRUPT, "IRQ: cc-state-change; Type-C %s detected\n",
+				smblite_lib_typec_mode_name[chg->typec_mode]);
+
+	power_supply_changed(chg->usb_psy);
+
+	return IRQ_HANDLED;
+}
+
+irqreturn_t smblite_typec_attach_detach_irq_handler(int irq, void *data)
+{
+	struct smb_irq_data *irq_data = data;
+	struct smb_charger *chg = irq_data->parent_data;
+	u8 stat;
+	bool attached = false;
+	int rc;
+
+	smblite_lib_dbg(chg, PR_INTERRUPT, "IRQ: %s\n", irq_data->name);
+
+	rc = smblite_lib_read(chg, TYPE_C_STATE_MACHINE_STATUS_REG, &stat);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't read TYPE_C_STATE_MACHINE_STATUS_REG rc=%d\n",
+			rc);
+		return IRQ_HANDLED;
+	}
+
+	attached = !!(stat & TYPEC_ATTACH_DETACH_STATE_BIT);
+
+	if (attached) {
+		rc = smblite_lib_read(chg, TYPE_C_MISC_STATUS_REG, &stat);
+		if (rc < 0) {
+			smblite_lib_err(chg, "Couldn't read TYPE_C_MISC_STATUS_REG rc=%d\n",
+				rc);
+			return IRQ_HANDLED;
+		}
+
+		if (smblite_lib_get_prop_dfp_mode(chg) ==
+				POWER_SUPPLY_TYPEC_SINK_AUDIO_ADAPTER) {
+			chg->sink_src_mode = AUDIO_ACCESS_MODE;
+			typec_ra_ra_insertion(chg);
+		} else if (stat & SNK_SRC_MODE_BIT) {
+			chg->sink_src_mode = SRC_MODE;
+			typec_sink_insertion(chg);
+		} else {
+			chg->sink_src_mode = SINK_MODE;
+			typec_src_insertion(chg);
+		}
+
+		rc = typec_partner_register(chg);
+		if (rc < 0)
+			smblite_lib_err(chg, "Couldn't to register partner rc =%d\n",
+					rc);
+	} else {
+		switch (chg->sink_src_mode) {
+		case SRC_MODE:
+			typec_sink_removal(chg);
+			break;
+		case SINK_MODE:
+		case AUDIO_ACCESS_MODE:
+			typec_src_removal(chg);
+			break;
+		case UNATTACHED_MODE:
+		default:
+			typec_mode_unattached(chg);
+			break;
+		}
+
+		if (!chg->pr_swap_in_progress)
+			chg->sink_src_mode = UNATTACHED_MODE;
+
+		/*
+		 * Restore DRP mode on type-C cable disconnect if role
+		 * swap is not in progress, to ensure forced sink or src
+		 * mode configuration is reset properly.
+		 */
+
+		if (chg->typec_port && !chg->pr_swap_in_progress)
+			smblite_lib_force_dr_mode(chg, TYPEC_PORT_DRP);
+	}
+
+	rc = smblite_lib_masked_write(chg, USB_CMD_PULLDOWN_REG,
+			EN_PULLDOWN_USB_IN_BIT,
+			attached ?  0 : EN_PULLDOWN_USB_IN_BIT);
+	if (rc < 0)
+		smblite_lib_err(chg, "Couldn't configure pulldown on USB_IN rc=%d\n",
+				rc);
+
+	power_supply_changed(chg->usb_psy);
+
+	return IRQ_HANDLED;
+}
+
+static void smblite_lib_bb_removal_work(struct work_struct *work)
+{
+	struct smb_charger *chg = container_of(work, struct smb_charger,
+						bb_removal_work.work);
+
+	vote(chg->usb_icl_votable, BOOST_BACK_VOTER, false, 0);
+	vote(chg->awake_votable, BOOST_BACK_VOTER, false, 0);
+}
+
+#define BOOST_BACK_UNVOTE_DELAY_MS		750
+#define BOOST_BACK_STORM_COUNT			3
+#define WEAK_CHG_STORM_COUNT			8
+irqreturn_t smblite_switcher_power_ok_irq_handler(int irq, void *data)
+{
+	struct smb_irq_data *irq_data = data;
+	struct smb_charger *chg = irq_data->parent_data;
+	struct storm_watch *wdata = &irq_data->storm_data;
+	int rc, usb_icl;
+	u8 stat;
+
+	if (!(chg->wa_flags & BOOST_BACK_WA))
+		return IRQ_HANDLED;
+
+	rc = smblite_lib_read(chg, POWER_PATH_STATUS_REG, &stat);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't read POWER_PATH_STATUS rc=%d\n",
+					rc);
+		return IRQ_HANDLED;
+	}
+
+	/* skip suspending input if its already suspended by some other voter */
+	usb_icl = get_effective_result(chg->usb_icl_votable);
+	if ((stat & USE_USBIN_BIT) && usb_icl >= 0 && usb_icl <= USBIN_25UA)
+		return IRQ_HANDLED;
+
+	if (is_storming(&irq_data->storm_data)) {
+		/* This could be a weak charger reduce ICL */
+		if (!is_client_vote_enabled(chg->usb_icl_votable,
+						WEAK_CHARGER_VOTER)) {
+			smblite_lib_err(chg,
+				"Weak charger detected: voting %dmA ICL\n",
+				chg->weak_chg_icl_ua / 1000);
+			vote(chg->usb_icl_votable, WEAK_CHARGER_VOTER,
+					true, chg->weak_chg_icl_ua);
+			/*
+			 * reset storm data and set the storm threshold
+			 * to 3 for reverse boost detection.
+			 */
+			update_storm_count(wdata, BOOST_BACK_STORM_COUNT);
+		} else {
+			smblite_lib_err(chg,
+				"Reverse boost detected: voting 0mA to suspend input\n");
+			vote(chg->usb_icl_votable, BOOST_BACK_VOTER, true, 0);
+			vote(chg->awake_votable, BOOST_BACK_VOTER, true, 0);
+			/*
+			 * Remove the boost-back vote after a delay, to avoid
+			 * permanently suspending the input if the boost-back
+			 * condition is unintentionally hit.
+			 */
+			schedule_delayed_work(&chg->bb_removal_work,
+				msecs_to_jiffies(BOOST_BACK_UNVOTE_DELAY_MS));
+		}
+	}
+
+	return IRQ_HANDLED;
+}
+
+irqreturn_t smblite_wdog_bark_irq_handler(int irq, void *data)
+{
+	struct smb_irq_data *irq_data = data;
+	struct smb_charger *chg = irq_data->parent_data;
+	int rc;
+
+	smblite_lib_dbg(chg, PR_INTERRUPT, "IRQ: %s\n", irq_data->name);
+
+	rc = smblite_lib_write(chg, BARK_BITE_WDOG_PET_REG,
+				BARK_BITE_WDOG_PET_BIT);
+	if (rc < 0)
+		smblite_lib_err(chg, "Couldn't pet the dog rc=%d\n", rc);
+
+	power_supply_changed(chg->batt_psy);
+
+	return IRQ_HANDLED;
+}
+
+/*
+ * triggered when DIE temperature across
+ * either of the _REG_L, _REG_H, _RST, or _SHDN thresholds
+ */
+#define THERM_REGULATION_DELAY_MS		1000
+#define THERM_REGULATION_STEP_UA		100000
+irqreturn_t smblite_temp_change_irq_handler(int irq, void *data)
+{
+	struct smb_irq_data *irq_data = data;
+	struct smb_charger *chg = irq_data->parent_data;
+
+	smblite_lib_dbg(chg, PR_INTERRUPT, "IRQ: %s\n", irq_data->name);
+
+	vote(chg->awake_votable, SW_THERM_REGULATION_VOTER, true, 0);
+	cancel_delayed_work_sync(&chg->thermal_regulation_work);
+	schedule_delayed_work(&chg->thermal_regulation_work,
+				msecs_to_jiffies(THERM_REGULATION_DELAY_MS));
+
+	return IRQ_HANDLED;
+}
+
+#define USB_OV_DBC_PERIOD_MS		1000
+irqreturn_t smblite_usbin_ov_irq_handler(int irq, void *data)
+{
+	struct smb_irq_data *irq_data = data;
+	struct smb_charger *chg = irq_data->parent_data;
+
+	smblite_lib_dbg(chg, PR_INTERRUPT, "IRQ: %s\n", irq_data->name);
+
+	return IRQ_HANDLED;
+}
+
+/***************
+ * Work Queues *
+ ***************/
+static void bms_update_work(struct work_struct *work)
+{
+	struct smb_charger *chg = container_of(work, struct smb_charger,
+						bms_update_work);
+
+	smblite_lib_suspend_on_debug_battery(chg);
+
+	if (chg->batt_psy)
+		power_supply_changed(chg->batt_psy);
+}
+
+static void smblite_lib_icl_change_work(struct work_struct *work)
+{
+	struct smb_charger *chg = container_of(work, struct smb_charger,
+							icl_change_work.work);
+	int rc, settled_ua;
+
+	rc = smblite_lib_get_charge_param(chg, &chg->param.icl_stat,
+					&settled_ua);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't get ICL status rc=%d\n", rc);
+		return;
+	}
+
+	power_supply_changed(chg->usb_main_psy);
+
+	smblite_lib_dbg(chg, PR_INTERRUPT, "icl_settled=%d\n", settled_ua);
+}
+
+static void smblite_lib_pl_enable_work(struct work_struct *work)
+{
+	struct smb_charger *chg = container_of(work, struct smb_charger,
+							pl_enable_work.work);
+
+	smblite_lib_dbg(chg, PR_PARALLEL, "timer expired, enabling parallel\n");
+	vote(chg->pl_disable_votable, PL_DELAY_VOTER, false, 0);
+	vote(chg->awake_votable, PL_DELAY_VOTER, false, 0);
+}
+
+static void smblite_lib_thermal_regulation_work(struct work_struct *work)
+{
+	struct smb_charger *chg = container_of(work, struct smb_charger,
+						thermal_regulation_work.work);
+	int rc, icl_ua, input_present;
+	u8 stat;
+
+
+	if (!chg->usb_icl_votable)
+		goto exit;
+
+	rc = smblite_lib_is_input_present(chg, &input_present);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't read input status rc=%d\n", rc);
+		goto exit;
+	}
+
+	if (input_present == INPUT_NOT_PRESENT) {
+		vote(chg->usb_icl_votable, SW_THERM_REGULATION_VOTER, false, 0);
+		goto exit;
+	}
+
+	rc = smblite_lib_read(chg, DIE_TEMP_STATUS_REG, &stat);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't read DIE_TEMP_STATUS_REG, rc=%d\n",
+				rc);
+		goto reschedule;
+	}
+
+	icl_ua = get_effective_result(chg->usb_icl_votable);
+
+	if (stat & DIE_TEMP_RST_BIT) {
+		vote(chg->usb_icl_votable, SW_THERM_REGULATION_VOTER,
+				true, USBIN_500UA);
+		icl_ua = USBIN_500UA;
+		goto exit;
+	}
+
+	if (stat & DIE_TEMP_UB_BIT) {
+		icl_ua = get_effective_result(chg->usb_icl_votable)
+				- THERM_REGULATION_STEP_UA;
+
+		/* Decrement ICL by one step */
+		vote(chg->usb_icl_votable, SW_THERM_REGULATION_VOTER,
+				true, icl_ua - THERM_REGULATION_STEP_UA);
+
+		/* Check if we reached minimum ICL limit */
+		if (icl_ua < USBIN_500UA + THERM_REGULATION_STEP_UA)
+			goto exit;
+
+		goto reschedule;
+	}
+
+	if (stat & DIE_TEMP_LB_BIT) {
+		vote(chg->usb_icl_votable, SW_THERM_REGULATION_VOTER,
+				true, icl_ua + THERM_REGULATION_STEP_UA);
+
+		/*
+		 * Check if we need further increments:
+		 * If thermal is still effective client then work can continue
+		 * with increment otherwise if other voter has voted a lower
+		 * ICL then remove vote and exit work.
+		 */
+		if (!strcmp(get_effective_client(chg->usb_icl_votable),
+				SW_THERM_REGULATION_VOTER))
+			goto reschedule;
+	}
+
+exit:
+	smblite_lib_dbg(chg, PR_MISC,
+			"exiting DIE_TEMP regulation work DIE_TEMP_STATUS=%x icl=%duA\n",
+			stat, icl_ua);
+	vote(chg->awake_votable, SW_THERM_REGULATION_VOTER, false, 0);
+	return;
+
+reschedule:
+	smblite_lib_dbg(chg, PR_MISC,
+			"rescheduling DIE_TEMP regulation work DIE_TEMP_STATUS=%x icl=%duA\n",
+				stat, icl_ua);
+	schedule_delayed_work(&chg->thermal_regulation_work,
+				msecs_to_jiffies(THERM_REGULATION_DELAY_MS));
+}
+
+#define SOFT_JEITA_HYSTERESIS_OFFSET	0x200
+static void jeita_update_work(struct work_struct *work)
+{
+	struct smb_charger *chg = container_of(work, struct smb_charger,
+						jeita_update_work);
+	struct device_node *node = chg->dev->of_node;
+	struct device_node *batt_node, *pnode;
+	union power_supply_propval val;
+	int rc, tmp[2], max_fcc_ma, max_fv_uv;
+	u32 jeita_hard_thresholds[2];
+	u16 addr;
+	u8 buff[2];
+
+	batt_node = of_find_node_by_name(node, "qcom,battery-data");
+	if (!batt_node) {
+		smblite_lib_err(chg, "Batterydata not available\n");
+		goto out;
+	}
+
+	/* if BMS is not ready, defer the work */
+	if (!chg->bms_psy)
+		return;
+
+	rc = smblite_lib_get_prop_from_bms(chg,
+			POWER_SUPPLY_PROP_RESISTANCE_ID, &val);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't to get batt-id rc=%d\n", rc);
+		goto out;
+	}
+
+	/* if BMS hasn't read out the batt_id yet, defer the work */
+	if (val.intval <= 0)
+		return;
+
+	pnode = of_batterydata_get_best_profile(batt_node,
+					val.intval / 1000, NULL);
+	if (IS_ERR(pnode)) {
+		rc = PTR_ERR(pnode);
+		smblite_lib_err(chg, "Couldn't to detect valid battery profile %d\n",
+				rc);
+		goto out;
+	}
+
+	rc = of_property_read_u32_array(pnode, "qcom,jeita-hard-thresholds",
+				jeita_hard_thresholds, 2);
+	if (!rc) {
+		rc = smblite_lib_update_jeita(chg, jeita_hard_thresholds,
+					JEITA_HARD);
+		if (rc < 0) {
+			smblite_lib_err(chg, "Couldn't configure Hard Jeita rc=%d\n",
+					rc);
+			goto out;
+		}
+	}
+
+	rc = of_property_read_u32_array(pnode, "qcom,jeita-soft-thresholds",
+				chg->jeita_soft_thlds, 2);
+	if (!rc) {
+		rc = smblite_lib_update_jeita(chg, chg->jeita_soft_thlds,
+					JEITA_SOFT);
+		if (rc < 0) {
+			smblite_lib_err(chg, "Couldn't configure Soft Jeita rc=%d\n",
+					rc);
+			goto out;
+		}
+
+		rc = of_property_read_u32_array(pnode,
+					"qcom,jeita-soft-hys-thresholds",
+					chg->jeita_soft_hys_thlds, 2);
+		if (rc < 0) {
+			smblite_lib_err(chg, "Couldn't get Soft Jeita hysteresis thresholds rc=%d\n",
+					rc);
+			goto out;
+		}
+	} else {
+		/* Populate the jeita-soft-thresholds */
+		addr = CHGR_JEITA_COOL_THRESHOLD_REG;
+		rc = smblite_lib_batch_read(chg, addr, buff, 2);
+		if (rc < 0) {
+			pr_err("Couldn't to read 0x%4X, rc=%d\n", addr, rc);
+			goto out;
+		}
+		chg->jeita_soft_thlds[0] = buff[1] | buff[0] << 8;
+
+		rc = smblite_lib_batch_read(chg, addr + 2, buff, 2);
+		if (rc < 0) {
+			pr_err("Couldn't to read 0x%4X, rc=%d\n", addr + 2, rc);
+			goto out;
+		}
+		chg->jeita_soft_thlds[1] = buff[1] | buff[0] << 8;
+
+		/*
+		 * Update the soft jeita hysteresis 2 DegC less for warm and
+		 * 2 DegC more for cool than the soft jeita thresholds to avoid
+		 * overwriting the registers with invalid values.
+		 */
+		chg->jeita_soft_hys_thlds[1] =
+			chg->jeita_soft_thlds[0] - SOFT_JEITA_HYSTERESIS_OFFSET;
+		chg->jeita_soft_hys_thlds[0] =
+			chg->jeita_soft_thlds[1] + SOFT_JEITA_HYSTERESIS_OFFSET;
+	}
+
+	chg->jeita_soft_fcc[0] = chg->jeita_soft_fcc[1] = -EINVAL;
+	chg->jeita_soft_fv[0] = chg->jeita_soft_fv[1] = -EINVAL;
+	max_fcc_ma = max_fv_uv = -EINVAL;
+
+	of_property_read_u32(pnode, "qcom,fastchg-current-ma", &max_fcc_ma);
+	of_property_read_u32(pnode, "qcom,max-voltage-uv", &max_fv_uv);
+
+	if (max_fcc_ma <= 0 || max_fv_uv <= 0) {
+		smblite_lib_err(chg, "Incorrect fastchg-current-ma or max-voltage-uv\n");
+		goto out;
+	}
+
+	rc = of_property_read_u32_array(pnode, "qcom,jeita-soft-fcc-ua",
+					tmp, 2);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't get fcc values for soft JEITA rc=%d\n",
+				rc);
+		goto out;
+	}
+
+	max_fcc_ma *= 1000;
+	if (tmp[0] > max_fcc_ma || tmp[1] > max_fcc_ma) {
+		smblite_lib_err(chg, "Incorrect FCC value [%d %d] max: %d\n",
+					tmp[0], tmp[1], max_fcc_ma);
+		goto out;
+	}
+	chg->jeita_soft_fcc[0] = tmp[0];
+	chg->jeita_soft_fcc[1] = tmp[1];
+
+	rc = of_property_read_u32_array(pnode, "qcom,jeita-soft-fv-uv", tmp,
+					2);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't get fv values for soft JEITA rc=%d\n",
+				rc);
+		goto out;
+	}
+
+	if (tmp[0] > max_fv_uv || tmp[1] > max_fv_uv) {
+		smblite_lib_err(chg, "Incorrect FV value [%d %d] max: %d\n",
+					tmp[0], tmp[1], max_fv_uv);
+		goto out;
+	}
+	chg->jeita_soft_fv[0] = tmp[0];
+	chg->jeita_soft_fv[1] = tmp[1];
+
+	rc = smblite_lib_soft_jeita_arb_wa(chg);
+	if (rc < 0) {
+		smblite_lib_err(chg, "Couldn't fix soft jeita arb rc=%d\n",
+				rc);
+		goto out;
+	}
+
+	chg->jeita_configured = JEITA_CFG_COMPLETE;
+	return;
+
+out:
+	chg->jeita_configured = JEITA_CFG_FAILURE;
+}
+
+static int smblite_lib_create_votables(struct smb_charger *chg)
+{
+	int rc = 0;
+
+	chg->fcc_votable = find_votable("FCC");
+	if (chg->fcc_votable == NULL) {
+		rc = -EINVAL;
+		smblite_lib_err(chg, "Couldn't find FCC votable rc=%d\n", rc);
+		return rc;
+	}
+
+	chg->fcc_main_votable = find_votable("FCC_MAIN");
+	if (chg->fcc_main_votable == NULL) {
+		rc = -EINVAL;
+		smblite_lib_err(chg, "Couldn't find FCC Main votable rc=%d\n",
+					rc);
+		return rc;
+	}
+
+	chg->fv_votable = find_votable("FV");
+	if (chg->fv_votable == NULL) {
+		rc = -EINVAL;
+		smblite_lib_err(chg, "Couldn't find FV votable rc=%d\n", rc);
+		return rc;
+	}
+
+	chg->usb_icl_votable = find_votable("USB_ICL");
+	if (chg->usb_icl_votable == NULL) {
+		rc = -EINVAL;
+		smblite_lib_err(chg, "Couldn't find USB_ICL votable rc=%d\n",
+					rc);
+		return rc;
+	}
+
+	chg->pl_disable_votable = find_votable("PL_DISABLE");
+	if (chg->pl_disable_votable == NULL) {
+		rc = -EINVAL;
+		smblite_lib_err(chg, "Couldn't find votable PL_DISABLE rc=%d\n",
+					rc);
+		return rc;
+	}
+
+	chg->pl_enable_votable_indirect = find_votable("PL_ENABLE_INDIRECT");
+	if (chg->pl_enable_votable_indirect == NULL) {
+		rc = -EINVAL;
+		smblite_lib_err(chg,
+			"Couldn't find votable PL_ENABLE_INDIRECT rc=%d\n",
+			rc);
+		return rc;
+	}
+
+	vote(chg->pl_disable_votable, PL_DELAY_VOTER, true, 0);
+
+	chg->awake_votable = create_votable("AWAKE", VOTE_SET_ANY,
+					smblite_lib_awake_vote_callback,
+					chg);
+	if (IS_ERR(chg->awake_votable)) {
+		rc = PTR_ERR(chg->awake_votable);
+		chg->awake_votable = NULL;
+		return rc;
+	}
+
+	chg->chg_disable_votable = create_votable("CHG_DISABLE", VOTE_SET_ANY,
+					smblite_lib_chg_disable_vote_callback,
+					chg);
+	if (IS_ERR(chg->chg_disable_votable)) {
+		rc = PTR_ERR(chg->chg_disable_votable);
+		chg->chg_disable_votable = NULL;
+		return rc;
+	}
+
+	chg->icl_irq_disable_votable = create_votable("USB_ICL_IRQ_DISABLE",
+				VOTE_SET_ANY,
+				smblite_lib_icl_irq_disable_vote_callback,
+				chg);
+	if (IS_ERR(chg->icl_irq_disable_votable)) {
+		rc = PTR_ERR(chg->icl_irq_disable_votable);
+		chg->icl_irq_disable_votable = NULL;
+		return rc;
+	}
+
+	return rc;
+}
+
+static void smblite_lib_destroy_votables(struct smb_charger *chg)
+{
+	if (chg->usb_icl_votable)
+		destroy_votable(chg->usb_icl_votable);
+	if (chg->awake_votable)
+		destroy_votable(chg->awake_votable);
+	if (chg->chg_disable_votable)
+		destroy_votable(chg->chg_disable_votable);
+}
+
+static void smblite_lib_iio_deinit(struct smb_charger *chg)
+{
+	if (!IS_ERR_OR_NULL(chg->iio.usbin_v_chan))
+		iio_channel_release(chg->iio.usbin_v_chan);
+	if (!IS_ERR_OR_NULL(chg->iio.temp_chan))
+		iio_channel_release(chg->iio.temp_chan);
+}
+
+int smblite_lib_init(struct smb_charger *chg)
+{
+	int rc = 0;
+
+	INIT_WORK(&chg->bms_update_work, bms_update_work);
+	INIT_WORK(&chg->jeita_update_work, jeita_update_work);
+	INIT_DELAYED_WORK(&chg->icl_change_work, smblite_lib_icl_change_work);
+	INIT_DELAYED_WORK(&chg->pl_enable_work, smblite_lib_pl_enable_work);
+	INIT_DELAYED_WORK(&chg->bb_removal_work, smblite_lib_bb_removal_work);
+	INIT_DELAYED_WORK(&chg->thermal_regulation_work,
+					smblite_lib_thermal_regulation_work);
+	INIT_DELAYED_WORK(&chg->role_reversal_check,
+					smblite_lib_typec_role_check_work);
+	chg->fake_capacity = -EINVAL;
+	chg->fake_batt_status = -EINVAL;
+	chg->sink_src_mode = UNATTACHED_MODE;
+	chg->jeita_configured = false;
+	chg->dr_mode = TYPEC_PORT_DRP;
+
+	switch (chg->mode) {
+	case PARALLEL_MASTER:
+		rc = qcom_batt_init(&chg->chg_param);
+		if (rc < 0) {
+			smblite_lib_err(chg, "Couldn't init qcom_batt_init rc=%d\n",
+				rc);
+			return rc;
+		}
+
+		rc = qcom_step_chg_init(chg->dev, true, true, false);
+		if (rc < 0) {
+			smblite_lib_err(chg, "Couldn't init qcom_step_chg_init rc=%d\n",
+				rc);
+			return rc;
+		}
+
+		rc = smblite_lib_create_votables(chg);
+		if (rc < 0) {
+			smblite_lib_err(chg, "Couldn't create votables rc=%d\n",
+				rc);
+			return rc;
+		}
+
+		chg->bms_psy = power_supply_get_by_name("bms");
+		rc = smblite_lib_register_notifier(chg);
+		if (rc < 0) {
+			smblite_lib_err(chg,
+				"Couldn't register notifier rc=%d\n", rc);
+			return rc;
+		}
+		break;
+	case PARALLEL_SLAVE:
+		break;
+	default:
+		smblite_lib_err(chg, "Unsupported mode %d\n", chg->mode);
+		return -EINVAL;
+	}
+
+	return rc;
+}
+
+int smblite_lib_deinit(struct smb_charger *chg)
+{
+	switch (chg->mode) {
+	case PARALLEL_MASTER:
+		cancel_work_sync(&chg->bms_update_work);
+		cancel_work_sync(&chg->jeita_update_work);
+		cancel_delayed_work_sync(&chg->icl_change_work);
+		cancel_delayed_work_sync(&chg->pl_enable_work);
+		cancel_delayed_work_sync(&chg->bb_removal_work);
+		cancel_delayed_work_sync(&chg->thermal_regulation_work);
+		cancel_delayed_work_sync(&chg->role_reversal_check);
+		power_supply_unreg_notifier(&chg->nb);
+		smblite_lib_destroy_votables(chg);
+		qcom_step_chg_deinit();
+		qcom_batt_deinit();
+		break;
+	case PARALLEL_SLAVE:
+		break;
+	default:
+		smblite_lib_err(chg, "Unsupported mode %d\n", chg->mode);
+		return -EINVAL;
+	}
+
+	smblite_lib_iio_deinit(chg);
+
+	return 0;
+}
diff --git a/drivers/power/supply/qcom/smblite-lib.h b/drivers/power/supply/qcom/smblite-lib.h
new file mode 100644
index 0000000..4e5208d
--- /dev/null
+++ b/drivers/power/supply/qcom/smblite-lib.h
@@ -0,0 +1,470 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (c) 2020 The Linux Foundation. All rights reserved.
+ */
+
+#ifndef __SMBLITE_LIB_H
+#define __SMBLITE_LIB_H
+#include <linux/alarmtimer.h>
+#include <linux/ktime.h>
+#include <linux/types.h>
+#include <linux/timer.h>
+#include <linux/interrupt.h>
+#include <linux/irqreturn.h>
+#include <linux/regulator/driver.h>
+#include <linux/regulator/consumer.h>
+#include <linux/extcon-provider.h>
+#include <linux/usb/typec.h>
+#include "storm-watch.h"
+#include "battery.h"
+
+enum print_reason {
+	PR_INTERRUPT	= BIT(0),
+	PR_REGISTER	= BIT(1),
+	PR_MISC		= BIT(2),
+	PR_PARALLEL	= BIT(3),
+	PR_OTG		= BIT(4),
+};
+
+#define DEFAULT_VOTER			"DEFAULT_VOTER"
+#define USER_VOTER			"USER_VOTER"
+#define USB_PSY_VOTER			"USB_PSY_VOTER"
+#define USBIN_V_VOTER			"USBIN_V_VOTER"
+#define THERMAL_DAEMON_VOTER		"THERMAL_DAEMON_VOTER"
+#define BOOST_BACK_VOTER		"BOOST_BACK_VOTER"
+#define DEBUG_BOARD_VOTER		"DEBUG_BOARD_VOTER"
+#define PL_DELAY_VOTER			"PL_DELAY_VOTER"
+#define SW_ICL_MAX_VOTER		"SW_ICL_MAX_VOTER"
+#define BATT_PROFILE_VOTER		"BATT_PROFILE_VOTER"
+#define USBIN_I_VOTER			"USBIN_I_VOTER"
+#define WEAK_CHARGER_VOTER		"WEAK_CHARGER_VOTER"
+#define HW_LIMIT_VOTER			"HW_LIMIT_VOTER"
+#define FORCE_RECHARGE_VOTER		"FORCE_RECHARGE_VOTER"
+#define FCC_STEPPER_VOTER		"FCC_STEPPER_VOTER"
+#define SW_THERM_REGULATION_VOTER	"SW_THERM_REGULATION_VOTER"
+#define JEITA_ARB_VOTER			"JEITA_ARB_VOTER"
+#define AICL_THRESHOLD_VOTER		"AICL_THRESHOLD_VOTER"
+#define USB_SUSPEND_VOTER		"USB_SUSPEND_VOTER"
+#define DETACH_DETECT_VOTER		"DETACH_DETECT_VOTER"
+#define ICL_CHANGE_VOTER		"ICL_CHANGE_VOTER"
+#define TYPEC_SWAP_VOTER		"TYPEC_SWAP_VOTER"
+
+#define BOOST_BACK_STORM_COUNT	3
+#define WEAK_CHG_STORM_COUNT	8
+
+#define VBAT_TO_VRAW_ADC(v)		div_u64((u64)v * 1000000UL, 194637UL)
+
+#define ITERM_LIMITS_MA			10000
+#define ADC_CHG_ITERM_MASK		32767
+
+#define USBIN_25UA	25000
+#define USBIN_100UA     100000
+#define USBIN_150UA     150000
+#define USBIN_500UA     500000
+#define USBIN_900UA     900000
+#define CDP_CURRENT_UA			1500000
+#define DCP_CURRENT_UA			1500000
+#define TYPEC_DEFAULT_CURRENT_UA	900000
+#define TYPEC_MEDIUM_CURRENT_UA		1500000
+#define TYPEC_HIGH_CURRENT_UA		3000000
+#define ROLE_REVERSAL_DELAY_MS		500
+
+enum smb_mode {
+	PARALLEL_MASTER = 0,
+	PARALLEL_SLAVE,
+	NUM_MODES,
+};
+
+enum sink_src_mode {
+	SINK_MODE,
+	SRC_MODE,
+	AUDIO_ACCESS_MODE,
+	UNATTACHED_MODE,
+};
+
+enum {
+	BOOST_BACK_WA			= BIT(0),
+	WEAK_ADAPTER_WA			= BIT(1),
+	FLASH_DIE_TEMP_DERATE_WA	= BIT(2),
+};
+
+enum jeita_cfg_stat {
+	JEITA_CFG_NONE = 0,
+	JEITA_CFG_FAILURE,
+	JEITA_CFG_COMPLETE,
+};
+
+enum {
+	RERUN_AICL = 0,
+	RESTART_AICL,
+};
+
+enum smb_irq_index {
+	/* CHGR */
+	CHG_STATE_CHANGE_IRQ = 0,
+	CHGR_ERROR_IRQ,
+	BUCK_OC_IRQ,
+	VPH_OV_IRQ,
+	/* DCDC */
+	OTG_FAIL_IRQ,
+	OTG_FAULT_IRQ,
+	SKIP_MODE_IRQ,
+	INPUT_CURRENT_LIMITING_IRQ,
+	SWITCHER_POWER_OK_IRQ,
+	/* BATIF */
+	BAT_TEMP_IRQ,
+	BAT_THERM_OR_ID_MISSING_IRQ,
+	BAT_LOW_IRQ,
+	BAT_OV_IRQ,
+	BSM_ACTIVE_IRQ,
+	/* USB */
+	USBIN_PLUGIN_IRQ,
+	USBIN_COLLAPSE_IRQ,
+	USBIN_UV_IRQ,
+	USBIN_OV_IRQ,
+	USBIN_GT_VT_IRQ,
+	USBIN_ICL_CHANGE_IRQ,
+	/* TYPEC */
+	TYPEC_OR_RID_DETECTION_CHANGE_IRQ,
+	TYPEC_VPD_DETECT_IRQ,
+	TYPEC_CC_STATE_CHANGE_IRQ,
+	TYPEC_VBUS_CHANGE_IRQ,
+	TYPEC_ATTACH_DETACH_IRQ,
+	TYPEC_LEGACY_CABLE_DETECT_IRQ,
+	TYPEC_TRY_SNK_SRC_DETECT_IRQ,
+	/* MISC */
+	WDOG_SNARL_IRQ,
+	WDOG_BARK_IRQ,
+	AICL_FAIL_IRQ,
+	AICL_DONE_IRQ,
+	IMP_TRIGGER_IRQ,
+	ALL_CHNL_CONV_DONE_IRQ,
+	TEMP_CHANGE_IRQ,
+	/* FLASH */
+	VREG_OK_IRQ,
+	ILIM_S2_IRQ,
+	ILIM_S1_IRQ,
+	VOUT_DOWN_IRQ,
+	VOUT_UP_IRQ,
+	FLASH_STATE_CHANGE_IRQ,
+	TORCH_REQ_IRQ,
+	FLASH_EN_IRQ,
+	SDAM_STS_IRQ,
+	/* END */
+	SMB_IRQ_MAX,
+};
+
+enum chg_term_config_src {
+	ITERM_SRC_UNSPECIFIED,
+	ITERM_SRC_ADC,
+	ITERM_SRC_ANALOG
+};
+
+struct smb_irq_info {
+	const char			*name;
+	const irq_handler_t		handler;
+	const bool			wake;
+	const struct storm_watch	storm_data;
+	struct smb_irq_data		*irq_data;
+	int				irq;
+	bool				enabled;
+};
+
+static const unsigned int smblite_lib_extcon_cable[] = {
+	EXTCON_USB,
+	EXTCON_USB_HOST,
+	EXTCON_NONE,
+};
+
+enum icl_override_mode {
+	/* APSD/Type-C/QC auto */
+	HW_AUTO_MODE,
+	/* 100/150/500/900mA */
+	SW_OVERRIDE_USB51_MODE,
+	/* ICL other than USB51 */
+	SW_OVERRIDE_HC_MODE,
+};
+
+/* EXTCON_USB and EXTCON_USB_HOST are mutually exclusive */
+static const u32 smblite_lib_extcon_exclusive[] = {0x3, 0};
+
+struct smb_irq_data {
+	void                    *parent_data;
+	const char		*name;
+	struct storm_watch	storm_data;
+};
+
+struct smb_chg_param {
+	const char	*name;
+	u16		reg;
+	int		min_u;
+	int		max_u;
+	int		step_u;
+	int		(*get_proc)(struct smb_chg_param *param,
+				    u8 val_raw);
+	int		(*set_proc)(struct smb_chg_param *param,
+				    int val_u,
+				    u8 *val_raw);
+};
+
+struct smb_params {
+	struct smb_chg_param	fcc;
+	struct smb_chg_param	fv;
+	struct smb_chg_param	usb_icl;
+	struct smb_chg_param	icl_max_stat;
+	struct smb_chg_param	icl_stat;
+	struct smb_chg_param	aicl_5v_threshold;
+};
+
+struct parallel_params {
+	struct power_supply	*psy;
+};
+
+struct smb_iio {
+	struct iio_channel	*temp_chan;
+	struct iio_channel	*usbin_v_chan;
+};
+
+struct smb_charger {
+	struct device		*dev;
+	char			*name;
+	struct regmap		*regmap;
+	struct smb_irq_info	*irq_info;
+	struct smb_params	param;
+	struct smb_iio		iio;
+	int			*debug_mask;
+	enum smb_mode		mode;
+	int			weak_chg_icl_ua;
+
+	/* locks */
+	struct mutex		typec_lock;
+
+	/* power supplies */
+	struct power_supply		*batt_psy;
+	struct power_supply		*usb_psy;
+	struct power_supply		*bms_psy;
+	struct power_supply		*usb_main_psy;
+	enum power_supply_type		real_charger_type;
+
+	/* notifiers */
+	struct notifier_block	nb;
+
+	/* parallel charging */
+	struct parallel_params	pl;
+
+	/* typec */
+	struct typec_port	*typec_port;
+	struct typec_capability	typec_caps;
+	struct typec_partner	*typec_partner;
+	struct typec_partner_desc typec_partner_desc;
+
+	/* votables */
+	struct votable		*fcc_votable;
+	struct votable		*fcc_main_votable;
+	struct votable		*fv_votable;
+	struct votable		*usb_icl_votable;
+	struct votable		*awake_votable;
+	struct votable		*pl_disable_votable;
+	struct votable		*chg_disable_votable;
+	struct votable		*pl_enable_votable_indirect;
+	struct votable		*icl_irq_disable_votable;
+
+	/* work */
+	struct work_struct	bms_update_work;
+	struct work_struct	pl_update_work;
+	struct work_struct	jeita_update_work;
+	struct delayed_work	icl_change_work;
+	struct delayed_work	pl_enable_work;
+	struct delayed_work	bb_removal_work;
+	struct delayed_work	thermal_regulation_work;
+	struct delayed_work	role_reversal_check;
+
+	struct charger_param	chg_param;
+
+	/* cached status */
+	int			system_temp_level;
+	int			thermal_levels;
+	int			*thermal_mitigation;
+	int			fake_capacity;
+	int			fake_batt_status;
+	bool			step_chg_enabled;
+	bool			typec_legacy_use_rp_icl;
+	int			connector_type;
+	bool			suspend_input_on_debug_batt;
+	bool			fake_chg_status_on_debug_batt;
+	int			typec_mode;
+	int			dr_mode;
+	int			term_vbat_uv;
+	u32			jeita_status;
+	bool			jeita_arb_flag;
+	bool			typec_legacy;
+	bool			otg_present;
+	int			auto_recharge_soc;
+	enum sink_src_mode	sink_src_mode;
+	enum power_supply_typec_power_role power_role;
+	enum jeita_cfg_stat	jeita_configured;
+	bool			fcc_stepper_enable;
+	u32			jeita_soft_thlds[2];
+	u32			jeita_soft_hys_thlds[2];
+	int			jeita_soft_fcc[2];
+	int			jeita_soft_fv[2];
+	int			aicl_5v_threshold_mv;
+	int			default_aicl_5v_threshold_mv;
+	bool			aicl_max_reached;
+	bool			pr_swap_in_progress;
+	bool			ldo_mode;
+
+	/* workaround flag */
+	u32			wa_flags;
+	int			boost_current_ua;
+
+	/* extcon for VBUS / ID notification to USB for uUSB */
+	struct extcon_dev	*extcon;
+
+	/* battery profile */
+	int			batt_profile_fcc_ua;
+	int			batt_profile_fv_uv;
+
+	/* flash */
+	u32			flash_derating_soc;
+	u32			flash_disable_soc;
+	u32			headroom_mode;
+	bool			flash_init_done;
+	bool			flash_active;
+	u32			irq_status;
+};
+
+int smblite_lib_read(struct smb_charger *chg, u16 addr, u8 *val);
+int smblite_lib_masked_write(struct smb_charger *chg, u16 addr, u8 mask,
+				u8 val);
+int smblite_lib_write(struct smb_charger *chg, u16 addr, u8 val);
+int smblite_lib_batch_write(struct smb_charger *chg, u16 addr, u8 *val,
+				int count);
+int smblite_lib_batch_read(struct smb_charger *chg, u16 addr, u8 *val,
+				int count);
+int smblite_lib_get_charge_param(struct smb_charger *chg,
+				struct smb_chg_param *param, int *val_u);
+int smblite_lib_get_usb_suspend(struct smb_charger *chg, int *suspend);
+int smblite_lib_enable_charging(struct smb_charger *chg, bool enable);
+int smblite_lib_set_charge_param(struct smb_charger *chg,
+				struct smb_chg_param *param, int val_u);
+int smblite_lib_set_usb_suspend(struct smb_charger *chg, bool suspend);
+
+irqreturn_t smblite_default_irq_handler(int irq, void *data);
+irqreturn_t smblite_chg_state_change_irq_handler(int irq, void *data);
+irqreturn_t smblite_batt_temp_changed_irq_handler(int irq, void *data);
+irqreturn_t smblite_batt_psy_changed_irq_handler(int irq, void *data);
+irqreturn_t smblite_usbin_uv_irq_handler(int irq, void *data);
+irqreturn_t smblite_usb_plugin_irq_handler(int irq, void *data);
+irqreturn_t smblite_icl_change_irq_handler(int irq, void *data);
+irqreturn_t smblite_typec_state_change_irq_handler(int irq, void *data);
+irqreturn_t smblite_typec_attach_detach_irq_handler(int irq, void *data);
+irqreturn_t smblite_switcher_power_ok_irq_handler(int irq, void *data);
+irqreturn_t smblite_wdog_bark_irq_handler(int irq, void *data);
+irqreturn_t smblite_typec_or_rid_detection_change_irq_handler(int irq,
+				void *data);
+irqreturn_t smblite_temp_change_irq_handler(int irq, void *data);
+irqreturn_t smblite_usbin_ov_irq_handler(int irq, void *data);
+
+int smblite_lib_get_prop_input_suspend(struct smb_charger *chg,
+				union power_supply_propval *val);
+int smblite_lib_get_prop_batt_present(struct smb_charger *chg,
+				union power_supply_propval *val);
+int smblite_lib_get_prop_batt_capacity(struct smb_charger *chg,
+				union power_supply_propval *val);
+int smblite_lib_get_prop_batt_status(struct smb_charger *chg,
+				union power_supply_propval *val);
+int smblite_lib_get_prop_batt_charge_type(struct smb_charger *chg,
+				union power_supply_propval *val);
+int smblite_lib_get_prop_batt_charge_done(struct smb_charger *chg,
+				union power_supply_propval *val);
+int smblite_lib_get_batt_current_now(struct smb_charger *chg,
+					union power_supply_propval *val);
+int smblite_lib_get_prop_batt_health(struct smb_charger *chg,
+				union power_supply_propval *val);
+int smblite_lib_get_prop_system_temp_level(struct smb_charger *chg,
+				union power_supply_propval *val);
+int smblite_lib_get_prop_system_temp_level_max(struct smb_charger *chg,
+				union power_supply_propval *val);
+int smblite_lib_get_prop_input_current_limited(struct smb_charger *chg,
+				union power_supply_propval *val);
+int smblite_lib_get_prop_batt_iterm(struct smb_charger *chg,
+				union power_supply_propval *val);
+int smblite_lib_set_prop_input_suspend(struct smb_charger *chg,
+				const union power_supply_propval *val);
+int smblite_lib_set_prop_batt_capacity(struct smb_charger *chg,
+				const union power_supply_propval *val);
+int smblite_lib_set_prop_batt_status(struct smb_charger *chg,
+				const union power_supply_propval *val);
+int smblite_lib_set_prop_system_temp_level(struct smb_charger *chg,
+				const union power_supply_propval *val);
+int smblite_lib_get_prop_usb_present(struct smb_charger *chg,
+				union power_supply_propval *val);
+int smblite_lib_get_prop_usb_online(struct smb_charger *chg,
+				union power_supply_propval *val);
+int smblite_lib_get_usb_online(struct smb_charger *chg,
+				union power_supply_propval *val);
+int smblite_lib_get_prop_usb_suspend(struct smb_charger *chg,
+				union power_supply_propval *val);
+int smblite_lib_get_prop_usb_voltage_now(struct smb_charger *chg,
+				union power_supply_propval *val);
+int smblite_lib_get_usb_prop_typec_mode(struct smb_charger *chg,
+				union power_supply_propval *val);
+int smblite_lib_get_prop_typec_cc_orientation(struct smb_charger *chg,
+				union power_supply_propval *val);
+int smblite_lib_get_prop_scope(struct smb_charger *chg,
+			union power_supply_propval *val);
+int smblite_lib_get_prop_typec_power_role(struct smb_charger *chg,
+				union power_supply_propval *val);
+int smblite_lib_get_prop_input_current_settled(struct smb_charger *chg,
+				union power_supply_propval *val);
+int smblite_lib_get_prop_input_voltage_settled(struct smb_charger *chg,
+				union power_supply_propval *val);
+int smblite_lib_get_prop_charger_temp(struct smb_charger *chg,
+				union power_supply_propval *val);
+int smblite_lib_get_prop_die_health(struct smb_charger *chg);
+int smblite_lib_get_die_health(struct smb_charger *chg,
+				union power_supply_propval *val);
+int smblite_lib_set_prop_current_max(struct smb_charger *chg,
+				const union power_supply_propval *val);
+int smblite_lib_set_prop_typec_power_role(struct smb_charger *chg,
+				const union power_supply_propval *val);
+int smblite_lib_set_prop_ship_mode(struct smb_charger *chg,
+				const union power_supply_propval *val);
+int smblite_lib_set_prop_rechg_soc_thresh(struct smb_charger *chg,
+				const union power_supply_propval *val);
+void smblite_lib_suspend_on_debug_battery(struct smb_charger *chg);
+int smblite_lib_get_prop_fcc_delta(struct smb_charger *chg,
+				union power_supply_propval *val);
+int smblite_lib_get_thermal_threshold(struct smb_charger *chg, u16 addr,
+				int *val);
+int smblite_lib_run_aicl(struct smb_charger *chg, int type);
+int smblite_lib_set_icl_current(struct smb_charger *chg, int icl_ua);
+int smblite_lib_get_icl_current(struct smb_charger *chg, int *icl_ua);
+int smblite_lib_get_charge_current(struct smb_charger *chg,
+				int *total_current_ua);
+int smblite_lib_get_hw_current_max(struct smb_charger *chg,
+				int *total_current_ua);
+int smblite_lib_get_prop_pr_swap_in_progress(struct smb_charger *chg,
+				union power_supply_propval *val);
+int smblite_lib_set_prop_pr_swap_in_progress(struct smb_charger *chg,
+				const union power_supply_propval *val);
+int smblite_lib_typec_port_type_set(const struct typec_capability *cap,
+				enum typec_port_type type);
+int smblite_lib_get_prop_from_bms(struct smb_charger *chg,
+				enum power_supply_property psp,
+				union power_supply_propval *val);
+int smblite_lib_get_iio_channel(struct smb_charger *chg, const char *propname,
+					struct iio_channel **chan);
+int smblite_lib_read_iio_channel(struct smb_charger *chg,
+				struct iio_channel *chan, int div, int *data);
+int smblite_lib_icl_override(struct smb_charger *chg,
+				enum icl_override_mode mode);
+int smblite_lib_get_irq_status(struct smb_charger *chg,
+				union power_supply_propval *val);
+int smblite_lib_set_prop_usb_type(struct smb_charger *chg,
+				const union power_supply_propval *val);
+
+int smblite_lib_init(struct smb_charger *chg);
+int smblite_lib_deinit(struct smb_charger *chg);
+#endif /* __SMBLITE_LIB_H */
diff --git a/drivers/power/supply/qcom/smblite-reg.h b/drivers/power/supply/qcom/smblite-reg.h
new file mode 100644
index 0000000..199922e
--- /dev/null
+++ b/drivers/power/supply/qcom/smblite-reg.h
@@ -0,0 +1,312 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (c) 2020 The Linux Foundation. All rights reserved.
+ */
+
+#ifndef __SMBLITE_CHARGER_REG_H
+#define __SMBLITE_CHARGER_REG_H
+
+#include <linux/bitops.h>
+
+#define CHGR_BASE	0x1000
+#define DCDC_BASE	0x1100
+#define BATIF_BASE	0x1200
+#define USBIN_BASE	0x1300
+#define TYPEC_BASE	0X1500
+#define MISC_BASE	0x1600
+
+#define PERPH_TYPE_OFFSET	0x04
+#define TYPE_MASK		GENMASK(7, 0)
+#define PERPH_SUBTYPE_OFFSET	0x05
+#define SUBTYPE_MASK		GENMASK(7, 0)
+#define INT_RT_STS_OFFSET	0x10
+
+/********************************
+ *  CHGR Peripheral Registers  *
+ ********************************/
+#define BATTERY_CHARGER_STATUS_1_REG		(CHGR_BASE + 0x06)
+#define BATTERY_CHARGER_STATUS_MASK		GENMASK(2, 0)
+enum {
+	INHIBIT_CHARGE = 0,
+	TRICKLE_CHARGE,
+	PRE_CHARGE,
+	FULLON_CHARGE,
+	TAPER_CHARGE,
+	TERMINATE_CHARGE,
+	PAUSE_CHARGE,
+	DISABLE_CHARGE,
+};
+
+#define CHARGER_VBAT_STATUS_REG			(CHGR_BASE + 0x08)
+#define BAT_OV_BIT				BIT(7)
+
+#define BATTERY_TEMP_STATUS_REG			(BATIF_BASE + 0x0C)
+#define BAT_TEMP_STATUS_TOO_HOT_AFP_BIT		BIT(5)
+#define BAT_TEMP_STATUS_TOO_HOT_BIT		BIT(4)
+#define BAT_TEMP_STATUS_HOT_SOFT_BIT		BIT(3)
+#define BAT_TEMP_STATUS_COLD_SOFT_BIT		BIT(2)
+#define BAT_TEMP_STATUS_TOO_COLD_BIT		BIT(1)
+#define BAT_TEMP_STATUS_TOO_COLD_AFP_BIT	BIT(0)
+
+#define CHARGING_ENABLE_CMD_REG			(CHGR_BASE + 0x46)
+#define CHARGING_ENABLE_CMD_BIT			BIT(0)
+#define CHARGING_PAUSE_CMD_BIT			BIT(4)
+
+#define CHGR_FAST_CHARGE_CURRENT_CFG_REG	(CHGR_BASE + 0x54)
+#define CHGR_FLOAT_VOLTAGE_CFG_REG		(CHGR_BASE + 0x58)
+
+#define CHGR_TERM_CFG_REG			(CHGR_BASE + 0x60)
+#define CHGR_ITERM_USE_ANALOG_BIT		BIT(3)
+
+#define CHGR_ADC_ITERM_UP_THD_MSB_REG		(CHGR_BASE + 0x64)
+#define CHGR_ADC_ITERM_UP_THD_LSB_REG		(CHGR_BASE + 0x65)
+#define CHGR_ADC_ITERM_LO_THD_MSB_REG		(CHGR_BASE + 0x66)
+#define CHGR_ADC_ITERM_LO_THD_LSB_REG		(CHGR_BASE + 0x67)
+
+#define CHGR_RECHG_CFG_REG			(CHGR_BASE + 0x70)
+#define RECHG_MASK				GENMASK(7, 6)
+#define VBAT_BASED_RECHG_BIT			BIT(7)
+#define SOC_BASED_RECHG_BIT			GENMASK(7, 6)
+#define NO_OF_SAMPLE_FOR_RCHG			GENMASK(1, 0)
+
+#define CHGR_ADC_RECHARGE_THRESHOLD_MSB_REG	(CHGR_BASE + 0x72)
+
+#define CHARGE_RCHG_SOC_THRESHOLD_CFG_REG	(CHGR_BASE + 0x74)
+
+#define CHGR_INHIBIT_REG			(CHGR_BASE + 0x78)
+#define CHGR_INHIBIT_BIT			BIT(7)
+
+#define CHGR_INHIBIT_THRESHOLD_CFG_REG		(CHGR_BASE + 0x7A)
+
+#define CHGR_FAST_CHARGE_SAFETY_TIMER_CFG_REG	(CHGR_BASE + 0x90)
+#define FAST_CHARGE_SAFETY_TIMER_EN_BIT		BIT(3)
+#define FAST_CHARGE_SAFETY_TIMER_MASK		GENMASK(1, 0)
+#define FAST_CHARGE_SAFETY_TIMER_192_MIN	0x0
+#define FAST_CHARGE_SAFETY_TIMER_384_MIN	0x1
+#define FAST_CHARGE_SAFETY_TIMER_768_MIN	0x2
+#define FAST_CHARGE_SAFETY_TIMER_1536_MIN	0x3
+
+/********************************
+ *  DCDC Peripheral Registers  *
+ ********************************/
+#define ICL_MAX_STATUS_REG			(DCDC_BASE + 0x06)
+#define ICL_STATUS_REG				(DCDC_BASE + 0x09)
+
+#define POWER_PATH_STATUS_REG			(DCDC_BASE + 0x0B)
+#define VALID_INPUT_POWER_SOURCE_STS_BIT	BIT(7)
+#define USE_USBIN_BIT				BIT(5)
+#define USBIN_SUSPEND_STS_BIT			BIT(3)
+#define POWER_PATH_MASK				GENMASK(1, 0)
+
+#define DCDC_CMD_OTG_REG			(DCDC_BASE + 0x50)
+#define OTG_EN_BIT				BIT(0)
+
+#define DCDC_OTG_CFG_REG			(DCDC_BASE + 0x56)
+#define OTG_EN_SRC_CFG_BIT			BIT(0)
+
+#define DCDC_LDO_CFG_REG			(DCDC_BASE + 0x70)
+#define LDO_MODE_BIT				BIT(0)
+
+/********************************
+ *  BATIF Peripheral Registers  *
+ ********************************/
+/* BATIF Interrupt Bits	 */
+#define BSM_ACTIVE_RT_STS_BIT			BIT(4)
+#define BAT_OV_RT_STS_BIT			BIT(3)
+#define BAT_LOW_RT_STS_BIT			BIT(2)
+#define BAT_THERM_OR_ID_MISSING_RT_STS_BIT      BIT(1)
+#define BAT_TEMP_RT_STS_BIT			BIT(0)
+
+#define SHIP_MODE_REG				(BATIF_BASE + 0x52)
+#define SHIP_MODE_EN_BIT			BIT(0)
+
+#define CHGR_JEITA_HOT_THRESHOLD_REG		(BATIF_BASE + 0x84)
+#define CHGR_JEITA_WARM_THRESHOLD_REG		(BATIF_BASE + 0x86)
+#define CHGR_JEITA_COOL_THRESHOLD_REG		(BATIF_BASE + 0x88)
+#define CHGR_JEITA_COLD_THRESHOLD_REG		(BATIF_BASE + 0x8A)
+
+
+/********************************
+ *  USBIN Peripheral Registers  *
+ ********************************/
+/* USBIN Interrupt Bits */
+#define USBIN_SOURCE_CHANGE_RT_STS_BIT		BIT(7)
+#define USBIN_ICL_CHANGE_RT_STS_BIT		BIT(6)
+#define USBIN_GT_VT_RT_STS_BIT			BIT(4)
+#define USBIN_OV_RT_STS_BIT			BIT(3)
+#define USBIN_UV_RT_STS_BIT			BIT(2)
+#define USBIN_COLLAPSE_RT_STS_BIT		BIT(1)
+#define USBIN_PLUGIN_RT_STS_BIT			BIT(0)
+
+#define USBIN_ICL_OPTIONS_REG			(USBIN_BASE + 0x50)
+#define USBIN_MODE_CHG_BIT			BIT(2)
+#define	USB51_MODE_BIT				BIT(1)
+
+#define CMD_ICL_OVERRIDE_REG			(USBIN_BASE + 0x51)
+#define ICL_OVERRIDE_BIT			BIT(0)
+
+#define USBIN_CURRENT_LIMIT_CFG_REG		(USBIN_BASE + 0x52)
+
+#define USBIN_INPUT_SUSPEND_REG			(USBIN_BASE + 0x54)
+#define SUSPEND_ON_COLLAPSE_USBIN_BIT		BIT(7)
+#define USBIN_SUSPEND_BIT			BIT(0)
+
+#define USBIN_AICL_OPTIONS_CFG_REG		(USBIN_BASE + 0x60)
+#define USBIN_AICL_EN_BIT			BIT(7)
+#define USBIN_AICL_START_AT_MAX			BIT(4)
+#define USBIN_AICL_STEP_TIMING_SEL_MASK		GENMASK(3, 2)
+#define USBIN_IN_COLLAPSE_GF_SEL_MASK		GENMASK(1, 0)
+
+#define USBIN_LV_AICL_THRESHOLD_REG		(USBIN_BASE + 0x63)
+
+#define USB_CMD_PULLDOWN_REG			(USBIN_BASE + 0x70)
+#define EN_PULLDOWN_USB_IN_BIT			BIT(0)
+
+/********************************
+ *  TYPEC Peripheral Registers  *
+ ********************************/
+#define TYPE_C_SNK_STATUS_REG			(TYPEC_BASE + 0x06)
+#define DETECTED_SRC_TYPE_MASK			GENMASK(6, 0)
+#define SNK_DAM_500MA_BIT			BIT(6)
+#define SNK_DAM_1500MA_BIT			BIT(5)
+#define SNK_DAM_3000MA_BIT			BIT(4)
+#define SNK_RP_STD_BIT				BIT(3)
+#define SNK_RP_1P5_BIT				BIT(2)
+#define SNK_RP_3P0_BIT				BIT(1)
+#define SNK_RP_SHORT_BIT			BIT(0)
+
+#define TYPE_C_SRC_STATUS_REG			(TYPEC_BASE + 0x08)
+#define DETECTED_SNK_TYPE_MASK			GENMASK(4, 0)
+#define SRC_HIGH_BATT_BIT			BIT(5)
+#define SRC_DEBUG_ACCESS_BIT			BIT(4)
+#define SRC_RD_OPEN_BIT				BIT(3)
+#define SRC_RA_OPEN_BIT				BIT(1)
+#define AUDIO_ACCESS_RA_RA_BIT			BIT(0)
+
+#define TYPE_C_STATE_MACHINE_STATUS_REG		(TYPEC_BASE + 0x09)
+#define TYPEC_ATTACH_DETACH_STATE_BIT		BIT(5)
+
+#define TYPE_C_MISC_STATUS_REG			(TYPEC_BASE + 0x0B)
+#define SNK_SRC_MODE_BIT			BIT(6)
+#define TYPEC_VBUS_ERROR_STATUS_BIT		BIT(4)
+#define TYPEC_TCCDEBOUNCE_DONE_STATUS_BIT	BIT(3)
+#define CC_ORIENTATION_BIT			BIT(1)
+#define CC_ATTACHED_BIT				BIT(0)
+
+#define LEGACY_CABLE_STATUS_REG			(TYPEC_BASE + 0x0D)
+#define TYPEC_LEGACY_CABLE_STATUS_BIT		BIT(1)
+#define TYPEC_NONCOMP_LEGACY_CABLE_STATUS_BIT	BIT(0)
+
+#define TYPEC_U_USB_STATUS_REG			(TYPEC_BASE + 0x0F)
+#define U_USB_GROUND_NOVBUS_BIT			BIT(6)
+#define U_USB_GROUND_BIT			BIT(4)
+#define U_USB_FLOAT1_BIT			BIT(2)
+#define U_USB_FLOAT2_BIT			BIT(0)
+
+#define TYPE_C_MODE_CFG_REG			(TYPEC_BASE + 0x44)
+#define TYPEC_TRY_MODE_MASK			GENMASK(4, 3)
+#define EN_TRY_SNK_BIT				BIT(4)
+#define EN_TRY_SRC_BIT				BIT(3)
+#define TYPEC_POWER_ROLE_CMD_MASK		GENMASK(2, 0)
+#define EN_SRC_ONLY_BIT				BIT(2)
+#define EN_SNK_ONLY_BIT				BIT(1)
+#define TYPEC_DISABLE_CMD_BIT			BIT(0)
+
+#define DEBUG_ACCESS_SRC_CFG_REG		(TYPEC_BASE + 0x4C)
+#define EN_UNORIENTED_DEBUG_ACCESS_SRC_BIT	BIT(0)
+
+#define TYPE_C_EXIT_STATE_CFG_REG		(TYPEC_BASE + 0x50)
+#define BYPASS_VSAFE0V_DURING_ROLE_SWAP_BIT	BIT(3)
+#define SEL_SRC_UPPER_REF_BIT			BIT(2)
+#define EXIT_SNK_BASED_ON_CC_BIT		BIT(0)
+
+#define TYPE_C_CURRSRC_CFG_REG			(TYPEC_BASE + 0x52)
+#define TYPEC_SRC_RP_SEL_MASK			GENMASK(1, 0)
+enum {
+	TYPEC_SRC_RP_STD,
+	TYPEC_SRC_RP_1P5A,
+	TYPEC_SRC_RP_3A,
+	TYPEC_SRC_RP_3A_DUPLICATE,
+	TYPEC_SRC_RP_MAX_ELEMENTS
+};
+
+#define TYPE_C_INTERRUPT_EN_CFG_1_REG			(TYPEC_BASE + 0x5E)
+#define TYPEC_LEGACY_CABLE_INT_EN_BIT			BIT(7)
+#define TYPEC_NONCOMPLIANT_LEGACY_CABLE_INT_EN_BIT	BIT(6)
+#define TYPEC_TRYSOURCE_DETECT_INT_EN_BIT		BIT(5)
+#define TYPEC_TRYSINK_DETECT_INT_EN_BIT			BIT(4)
+#define TYPEC_CCOUT_DETACH_INT_EN_BIT			BIT(3)
+#define TYPEC_CCOUT_ATTACH_INT_EN_BIT			BIT(2)
+#define TYPEC_VBUS_DEASSERT_INT_EN_BIT			BIT(1)
+#define TYPEC_VBUS_ASSERT_INT_EN_BIT			BIT(0)
+
+#define TYPE_C_INTERRUPT_EN_CFG_2_REG		(TYPEC_BASE + 0x60)
+#define TYPEC_SRC_BATT_HPWR_INT_EN_BIT		BIT(6)
+#define MICRO_USB_STATE_CHANGE_INT_EN_BIT	BIT(5)
+#define TYPEC_STATE_MACHINE_CHANGE_INT_EN_BIT	BIT(4)
+#define TYPEC_DEBUG_ACCESS_DETECT_INT_EN_BIT	BIT(3)
+#define TYPEC_WATER_DETECTION_INT_EN_BIT	BIT(2)
+#define TYPEC_VBUS_ERROR_INT_EN_BIT		BIT(1)
+#define TYPEC_DEBOUNCE_DONE_INT_EN_BIT		BIT(0)
+
+#define TYPEC_U_USB_CFG_REG			(TYPEC_BASE + 0x70)
+#define EN_MICRO_USB_MODE_BIT			BIT(0)
+
+/********************************
+ *  MISC Peripheral Registers  *
+ ********************************/
+#define TEMP_RANGE_STATUS_REG			(MISC_BASE + 0x08)
+#define THERM_REG_ACTIVE_BIT			BIT(6)
+#define TLIM_BIT				BIT(5)
+#define TEMP_RANGE_MASK				GENMASK(4, 1)
+#define ALERT_LEVEL_BIT				BIT(4)
+#define TEMP_ABOVE_RANGE_BIT			BIT(3)
+#define TEMP_WITHIN_RANGE_BIT			BIT(2)
+#define TEMP_BELOW_RANGE_BIT			BIT(1)
+#define THERMREG_DISABLED_BIT			BIT(0)
+
+#define DIE_TEMP_STATUS_REG			(MISC_BASE + 0x09)
+#define DIE_TEMP_SHDN_BIT			BIT(3)
+#define DIE_TEMP_RST_BIT			BIT(2)
+#define DIE_TEMP_UB_BIT				BIT(1)
+#define DIE_TEMP_LB_BIT				BIT(0)
+
+#define AICL_STATUS_REG				(MISC_BASE + 0x06)
+#define SOFT_ILIMIT_BIT				BIT(6)
+#define AICL_DONE_BIT				BIT(0)
+
+#define AICL_CMD_REG				(MISC_BASE + 0x50)
+#define RESTART_AICL_BIT			BIT(1)
+#define RERUN_AICL_BIT				BIT(0)
+
+#define MISC_SMB_EN_CMD_REG			(MISC_BASE + 0x4C)
+#define SMB_EN_OVERRIDE_VALUE_BIT		BIT(0)
+#define SMB_EN_OVERRIDE_BIT			BIT(1)
+
+#define MISC_AICL_RERUN_CFG_REG			(MISC_BASE + 0x54)
+#define USBIN_AICL_PERIODIC_RERUN_EN_BIT	BIT(5)
+#define USBIN_AICL_RERUN_TIME_MASK		GENMASK(1, 0)
+#define AICL_RERUN_TIME_12S_VAL			0x01
+
+#define WD_CFG_REG				(MISC_BASE + 0x58)
+#define BITE_WDOG_DISABLE_CHARGING_CFG_BIT	BIT(7)
+#define BARK_WDOG_INT_EN_BIT			BIT(4)
+#define WDOG_TIMER_EN_ON_PLUGIN_BIT		BIT(1)
+#define WDOG_TIMER_EN_BIT			BIT(0)
+
+#define SNARL_BARK_BITE_WD_CFG_REG		(MISC_BASE + 0x59)
+#define SNARL_WDOG_TIMEOUT_MASK                 GENMASK(2, 0)
+#define SNARL_WDOG_TMOUT_62P5MS			0x0
+#define SNARL_WDOG_TMOUT_1S			0x4
+#define SNARL_WDOG_TMOUT_8S			0x7
+#define BARK_WDOG_TIMEOUT_MASK			GENMASK(5, 4)
+#define BARK_WDOG_TIMEOUT_SHIFT			4
+#define BITE_WDOG_TIMEOUT_MASK			GENMASK(7, 6)
+#define BITE_WDOG_TIMEOUT_8S			0x3
+#define BITE_WDOG_TIMEOUT_SHIFT			6
+#define MIN_WD_BARK_TIME			16
+
+#define BARK_BITE_WDOG_PET_REG			(MISC_BASE + 0x5A)
+#define BARK_BITE_WDOG_PET_BIT			BIT(0)
+
+#endif /* __SMBLITE_CHARGER_REG_H */
diff --git a/drivers/regulator/rpm-smd-regulator.c b/drivers/regulator/rpm-smd-regulator.c
index 9bc11fe..044a4d6 100644
--- a/drivers/regulator/rpm-smd-regulator.c
+++ b/drivers/regulator/rpm-smd-regulator.c
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: GPL-2.0-only
-/* Copyright (c) 2012-2015, 2018-2019, The Linux Foundation. All rights reserved. */
+/* Copyright (c) 2012-2015, 2018-2020, The Linux Foundation. All rights reserved. */
 
 #define pr_fmt(fmt) "%s: " fmt, __func__
 
@@ -28,7 +28,10 @@
 };
 
 static int rpm_vreg_debug_mask;
+
+#ifdef CONFIG_DEBUG_FS
 static bool is_debugfs_created;
+#endif
 
 #define vreg_err(req, fmt, ...) \
 	pr_err("%s: " fmt, req->rdesc.name, ##__VA_ARGS__)
@@ -1661,6 +1664,7 @@
 	return rc;
 }
 
+#ifdef CONFIG_DEBUG_FS
 static void rpm_vreg_create_debugfs(struct rpm_regulator *reg)
 {
 	struct dentry *entry;
@@ -1682,6 +1686,7 @@
 		is_debugfs_created = true;
 	}
 }
+#endif
 
 /*
  * This probe is called for child rpm-regulator devices which have
diff --git a/drivers/rtc/rtc-pm8xxx.c b/drivers/rtc/rtc-pm8xxx.c
index 9f8cbbd..d38f38d 100644
--- a/drivers/rtc/rtc-pm8xxx.c
+++ b/drivers/rtc/rtc-pm8xxx.c
@@ -22,6 +22,7 @@
 /* RTC_CTRL register bit fields */
 #define PM8xxx_RTC_ENABLE		BIT(7)
 #define PM8xxx_RTC_ALARM_CLEAR		BIT(0)
+#define PM8xxx_RTC_ALARM_ENABLE		BIT(7)
 
 #define NUM_8_BIT_RTC_REGS		0x4
 
@@ -297,6 +298,14 @@
 		alarm->time.tm_sec, alarm->time.tm_mday,
 		alarm->time.tm_mon, alarm->time.tm_year);
 
+	rc = regmap_bulk_read(rtc_dd->regmap, regs->alarm_ctrl, value, 1);
+	if (rc) {
+		dev_err(dev, "Read from ALARM CTRL1 failed\n");
+		return rc;
+	}
+
+	alarm->enabled = !!(value[0] & PM8xxx_RTC_ALARM_ENABLE);
+
 	return 0;
 }
 
diff --git a/drivers/scsi/ufs/ufshcd-pltfrm.c b/drivers/scsi/ufs/ufshcd-pltfrm.c
index 4f0d064..380cbca 100644
--- a/drivers/scsi/ufs/ufshcd-pltfrm.c
+++ b/drivers/scsi/ufs/ufshcd-pltfrm.c
@@ -195,7 +195,10 @@
 		goto out;
 	}
 
-	vreg->min_uA = 0;
+	snprintf(prop_name, MAX_PROP_SIZE, "%s-min-microamp", name);
+	if (of_property_read_u32(np, prop_name, &vreg->min_uA))
+		vreg->min_uA = UFS_VREG_LPM_LOAD_UA;
+
 	if (!strcmp(name, "vcc")) {
 		if (of_property_read_bool(np, "vcc-supply-1p8")) {
 			vreg->min_uV = UFS_VREG_VCC_1P8_MIN_UV;
@@ -231,8 +234,16 @@
 		if (of_property_read_bool(np, "vccq-pwr-collapse-sup"))
 			vreg->sys_suspend_pwr_off = true;
 	} else if (!strcmp(name, "vccq2")) {
-		vreg->min_uV = UFS_VREG_VCCQ2_MIN_UV;
-		vreg->max_uV = UFS_VREG_VCCQ2_MAX_UV;
+		prop = of_get_property(np, "vccq2-voltage-level", &len);
+		if (!prop || (len != (2 * sizeof(__be32)))) {
+			dev_warn(dev, "%s vccq2-voltage-level property.\n",
+				prop ? "invalid format" : "no");
+			vreg->min_uV = UFS_VREG_VCCQ2_MIN_UV;
+			vreg->max_uV = UFS_VREG_VCCQ2_MAX_UV;
+		} else {
+			vreg->min_uV = be32_to_cpup(&prop[0]);
+			vreg->max_uV = be32_to_cpup(&prop[1]);
+		}
 		if (of_property_read_bool(np, "vccq2-pwr-collapse-sup"))
 			vreg->sys_suspend_pwr_off = true;
 	}
diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index 445cbec..7365651 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -2271,6 +2271,8 @@
 	unsigned long flags;
 
 	spin_lock_irqsave(hba->host->host_lock, flags);
+	if (hba->clk_gating.state == CLKS_OFF)
+		goto rel_lock;
 	/*
 	 * In case you are here to cancel this work the gating state
 	 * would be marked as REQ_CLKS_ON. In this case save time by
@@ -3702,8 +3704,11 @@
 			cmd->scsi_done(cmd);
 			return 0;
 		}
-		if (err == -EAGAIN)
+		if (err == -EAGAIN) {
+			hba->ufs_stats.scsi_blk_reqs.ts = ktime_get();
+			hba->ufs_stats.scsi_blk_reqs.busy_ctx = SCALING_BUSY;
 			return SCSI_MLQUEUE_HOST_BUSY;
+		}
 	} else if (err == 1) {
 		has_read_lock = true;
 	}
@@ -3719,6 +3724,8 @@
 	/* if error handling is in progress, return host busy */
 	if (ufshcd_eh_in_progress(hba)) {
 		err = SCSI_MLQUEUE_HOST_BUSY;
+		hba->ufs_stats.scsi_blk_reqs.ts = ktime_get();
+		hba->ufs_stats.scsi_blk_reqs.busy_ctx = EH_IN_PROGRESS;
 		goto out_unlock;
 	}
 
@@ -3728,6 +3735,9 @@
 	case UFSHCD_STATE_EH_SCHEDULED:
 	case UFSHCD_STATE_RESET:
 		err = SCSI_MLQUEUE_HOST_BUSY;
+		hba->ufs_stats.scsi_blk_reqs.ts = ktime_get();
+		hba->ufs_stats.scsi_blk_reqs.busy_ctx =
+			UFS_RESET_OR_EH_SCHEDULED;
 		goto out_unlock;
 	case UFSHCD_STATE_ERROR:
 		set_host_byte(cmd, DID_ERROR);
@@ -3753,6 +3763,8 @@
 		 * completion.
 		 */
 		err = SCSI_MLQUEUE_HOST_BUSY;
+		hba->ufs_stats.scsi_blk_reqs.ts = ktime_get();
+		hba->ufs_stats.scsi_blk_reqs.busy_ctx = LRB_IN_USE;
 		goto out;
 	}
 
@@ -3760,6 +3772,8 @@
 	err = ufshcd_hold(hba, true);
 	if (err) {
 		err = SCSI_MLQUEUE_HOST_BUSY;
+		hba->ufs_stats.scsi_blk_reqs.ts = ktime_get();
+		hba->ufs_stats.scsi_blk_reqs.busy_ctx = UFSHCD_HOLD;
 		clear_bit_unlock(tag, &hba->lrb_in_use);
 		goto out;
 	}
@@ -3770,6 +3784,8 @@
 	if (err) {
 		clear_bit_unlock(tag, &hba->lrb_in_use);
 		err = SCSI_MLQUEUE_HOST_BUSY;
+		hba->ufs_stats.scsi_blk_reqs.ts = ktime_get();
+		hba->ufs_stats.scsi_blk_reqs.busy_ctx = UFSHCD_HIBERN8_HOLD;
 		hba->ufs_stats.clk_rel.ctx = QUEUE_CMD;
 		ufshcd_release(hba, true);
 		goto out;
@@ -6194,8 +6210,8 @@
  */
 static int ufshcd_slave_configure(struct scsi_device *sdev)
 {
-	struct request_queue *q = sdev->request_queue;
 	struct ufs_hba *hba = shost_priv(sdev->host);
+	struct request_queue *q = sdev->request_queue;
 
 	blk_queue_update_dma_pad(q, PRDT_DATA_BYTE_COUNT_PAD - 1);
 	blk_queue_max_segment_size(q, PRDT_DATA_BYTE_COUNT_MAX);
@@ -6499,7 +6515,6 @@
 			result = ufshcd_transfer_rsp_status(hba, lrbp);
 			scsi_dma_unmap(cmd);
 			cmd->result = result;
-			clear_bit_unlock(index, &hba->lrb_in_use);
 			lrbp->compl_time_stamp = ktime_get();
 			update_req_stats(hba, lrbp);
 			/* Mark completed command as NULL in LRB */
@@ -6519,6 +6534,8 @@
 					lrbp, cmd->request);
 			}
 
+			clear_bit_unlock(index, &hba->lrb_in_use);
+
 			/* Do not touch lrbp after scsi done */
 			cmd->scsi_done(cmd);
 		} else if (lrbp->command_type == UTP_CMD_TYPE_DEV_MANAGE ||
@@ -6569,7 +6586,6 @@
 			/* Clear pending transfer requests */
 			ufshcd_clear_cmd(hba, index);
 			ufshcd_outstanding_req_clear(hba, index);
-			clear_bit_unlock(index, &hba->lrb_in_use);
 			lrbp->compl_time_stamp = ktime_get();
 			update_req_stats(hba, lrbp);
 			/* Mark completed command as NULL in LRB */
@@ -6586,6 +6602,7 @@
 				ufshcd_vops_crypto_engine_cfg_end(hba,
 						lrbp, cmd->request);
 			}
+			clear_bit_unlock(index, &hba->lrb_in_use);
 			/* Do not touch lrbp after scsi done */
 			cmd->scsi_done(cmd);
 		} else if (lrbp->command_type == UTP_CMD_TYPE_DEV_MANAGE) {
@@ -9563,8 +9580,7 @@
 	else if (vreg->unused)
 		return 0;
 	else
-		return ufshcd_config_vreg_load(hba->dev, vreg,
-					       UFS_VREG_LPM_LOAD_UA);
+		return ufshcd_config_vreg_load(hba->dev, vreg, vreg->min_uA);
 }
 
 static inline int ufshcd_config_vreg_hpm(struct ufs_hba *hba,
@@ -10543,10 +10559,21 @@
 	ufshcd_wb_buf_flush_disable(hba);
 	if (!ufshcd_is_ufs_dev_active(hba)) {
 		ret = ufshcd_set_dev_pwr_mode(hba, UFS_ACTIVE_PWR_MODE);
-		if (ret)
-			goto set_old_link_state;
+		if (ret) {
+			/*
+			 * In the case of SSU timeout, err_handler must have
+			 * recovered the uic link and dev state to active so
+			 * we can proceed after checking the link and
+			 * dev state.
+			 */
+			if ((host_byte(ret) == DID_TIME_OUT) &&
+			    ufshcd_is_ufs_dev_active(hba) &&
+			    ufshcd_is_link_active(hba))
+				ret = 0;
+			else
+				goto set_old_link_state;
+		}
 	}
-
 	if (ufshcd_keep_autobkops_enabled_except_suspend(hba))
 		ufshcd_enable_auto_bkops(hba);
 	else
@@ -11014,7 +11041,9 @@
 	/* Initialize work queues */
 	snprintf(recovery_wq_name, ARRAY_SIZE(recovery_wq_name), "%s_%d",
 				"ufs_recovery_wq", host->host_no);
-	hba->recovery_wq = create_singlethread_workqueue(recovery_wq_name);
+	hba->recovery_wq = alloc_workqueue("%s",
+			WQ_MEM_RECLAIM|WQ_UNBOUND|WQ_HIGHPRI, 0,
+			recovery_wq_name);
 	if (!hba->recovery_wq) {
 		dev_err(hba->dev, "%s: failed to create the workqueue\n",
 				__func__);
diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h
index a0b8a82..b04ad60 100644
--- a/drivers/scsi/ufs/ufshcd.h
+++ b/drivers/scsi/ufs/ufshcd.h
@@ -627,6 +627,20 @@
 	enum ufshcd_ctx ctx;
 };
 
+enum ufshcd_scsi_host_busy_ctxt {
+	SCALING_BUSY,
+	EH_IN_PROGRESS,
+	UFS_RESET_OR_EH_SCHEDULED,
+	LRB_IN_USE,
+	UFSHCD_HOLD,
+	UFSHCD_HIBERN8_HOLD,
+};
+
+struct ufshcd_blk_ctx {
+	ktime_t ts;
+	enum ufshcd_scsi_host_busy_ctxt busy_ctx;
+};
+
 /**
  * struct ufs_stats - keeps usage/err statistics
  * @enabled: enable tag stats for debugfs
@@ -659,6 +673,7 @@
 	ktime_t last_intr_ts;
 	struct ufshcd_clk_ctx clk_hold;
 	struct ufshcd_clk_ctx clk_rel;
+	struct ufshcd_blk_ctx scsi_blk_reqs;
 	u32 hibern8_exit_cnt;
 	ktime_t last_hibern8_exit_tstamp;
 	u32 power_mode_change_cnt;
diff --git a/drivers/soc/qcom/dcc_v2.c b/drivers/soc/qcom/dcc_v2.c
index 1057e55..a5e2ec0 100644
--- a/drivers/soc/qcom/dcc_v2.c
+++ b/drivers/soc/qcom/dcc_v2.c
@@ -25,9 +25,9 @@
 #define BVAL(val, n)		((val & BIT(n)) >> n)
 
 #define dcc_writel(drvdata, val, off)					\
-	__raw_writel((val), drvdata->base + off)
+	__raw_writel((val), drvdata->base + dcc_offset_conv(drvdata, off))
 #define dcc_readl(drvdata, off)						\
-	__raw_readl(drvdata->base + off)
+	__raw_readl(drvdata->base + dcc_offset_conv(drvdata, off))
 
 #define dcc_sram_readl(drvdata, off)					\
 	__raw_readl(drvdata->ram_base + off)
@@ -37,23 +37,35 @@
 /* DCC registers */
 #define DCC_HW_VERSION			(0x00)
 #define DCC_HW_INFO			(0x04)
-#define DCC_EXEC_CTRL			(0x08)
-#define DCC_STATUS			(0x0C)
-#define DCC_CFG				(0x10)
-#define DCC_FDA_CURR			(0x14)
-#define DCC_LLA_CURR			(0x18)
-#define DCC_LL_LOCK(m)			(0x1C + 0x80 * (m + HLOS_LIST_START))
-#define DCC_LL_CFG(m)			(0x20 + 0x80 * (m + HLOS_LIST_START))
-#define DCC_LL_BASE(m)			(0x24 + 0x80 * (m + HLOS_LIST_START))
-#define DCC_FD_BASE(m)			(0x28 + 0x80 * (m + HLOS_LIST_START))
-#define DCC_LL_TIMEOUT(m)		(0x2c + 0x80 * (m + HLOS_LIST_START))
-#define DCC_LL_INT_ENABLE(m)		(0x30 + 0x80 * (m + HLOS_LIST_START))
-#define DCC_LL_INT_STATUS(m)		(0x34 + 0x80 * (m + HLOS_LIST_START))
-#define DCC_FDA_CAPTURED(m)		(0x38 + 0x80 * (m + HLOS_LIST_START))
-#define DCC_LLA_CAPTURED(m)		(0x3C + 0x80 * (m + HLOS_LIST_START))
-#define DCC_LL_CRC_CAPTURED(m)		(0x40 + 0x80 * (m + HLOS_LIST_START))
-#define DCC_LL_SW_TRIGGER(m)		(0x44 + 0x80 * (m + HLOS_LIST_START))
-#define DCC_LL_BUS_ACCESS_STATUS(m)	(0x48 + 0x80 * (m + HLOS_LIST_START))
+#define DCC_SRAM_SIZE_INFO		(0x08)
+#define DCC_APU_INFO			(0x0C)
+#define DCC_LL_NUM_INFO			(0x10)
+#define DCC_TIMEOUT_SIGNATURE		(0x14)
+#define DCC_EXEC_CTRL			(0x18)
+#define DCC_STATUS			(0x1C)
+#define DCC_CFG				(0x20)
+#define DCC_FDA_CURR			(0x24)
+#define DCC_LLA_CURR			(0x28)
+#define DCC_LL_LOCK(m)			(0x2C + 0x80 * (m + HLOS_LIST_START))
+#define DCC_LL_CFG(m)			(0x30 + 0x80 * (m + HLOS_LIST_START))
+#define DCC_LL_BASE(m)			(0x34 + 0x80 * (m + HLOS_LIST_START))
+#define DCC_FD_BASE(m)			(0x38 + 0x80 * (m + HLOS_LIST_START))
+#define DCC_LL_TIMEOUT(m)		(0x3c + 0x80 * (m + HLOS_LIST_START))
+#define DCC_TRANS_TIMEOUT(m)		(0x40 + 0x80 * (m + HLOS_LIST_START))
+#define DCC_LL_INT_ENABLE(m)		(0x44 + 0x80 * (m + HLOS_LIST_START))
+#define DCC_LL_INT_STATUS(m)		(0x48 + 0x80 * (m + HLOS_LIST_START))
+#define DCC_FDA_CAPTURED(m)		(0x4C + 0x80 * (m + HLOS_LIST_START))
+#define DCC_LLA_CAPTURED(m)		(0x50 + 0x80 * (m + HLOS_LIST_START))
+#define DCC_LL_CRC_CAPTURED(m)		(0x54 + 0x80 * (m + HLOS_LIST_START))
+#define DCC_LL_SW_TRIGGER(m)		(0x58 + 0x80 * (m + HLOS_LIST_START))
+#define DCC_LL_BUS_ACCESS_STATUS(m)	(0x5C + 0x80 * (m + HLOS_LIST_START))
+
+#define DCC_MAP2_LEVEL1			(0x18)
+#define DCC_MAP2_OFFSET1		(0x10)
+#define DCC_MAP2_LEVEL2			(0x44)
+#define DCC_MAP2_OFFSET2		(0x14)
+
+#define DCC_FIX_LOOP_OFFSET		(16)
 
 #define DCC_REG_DUMP_MAGIC_V2		(0x42445953)
 #define DCC_REG_DUMP_VER		(1)
@@ -129,23 +141,36 @@
 	void __iomem		*ram_base;
 	uint32_t		ram_size;
 	uint32_t		ram_offset;
-	enum dcc_data_sink	data_sink[DCC_MAX_LINK_LIST];
-	enum dcc_func_type	func_type[DCC_MAX_LINK_LIST];
+	enum dcc_data_sink	*data_sink;
+	enum dcc_func_type	*func_type;
 	uint32_t		ram_cfg;
 	uint32_t		ram_start;
-	bool			enable[DCC_MAX_LINK_LIST];
-	bool			configured[DCC_MAX_LINK_LIST];
+	bool			*enable;
+	bool			*configured;
 	bool			interrupt_disable;
+	bool			memory_map2;
 	char			*sram_node;
 	struct cdev		sram_dev;
 	struct class		*sram_class;
-	struct list_head	cfg_head[DCC_MAX_LINK_LIST];
-	uint32_t		nr_config[DCC_MAX_LINK_LIST];
+	struct list_head	*cfg_head;
+	uint32_t		*nr_config;
+	uint32_t		nr_link_list;
 	uint8_t			curr_list;
 	uint8_t			cti_trig;
 	uint8_t			loopoff;
 };
 
+static uint32_t dcc_offset_conv(struct dcc_drvdata *drvdata, uint32_t off)
+{
+	if (!drvdata->memory_map2) {
+		if ((off & 0x7F) > DCC_MAP2_LEVEL2)
+			return (off - DCC_MAP2_OFFSET2);
+		else if ((off & 0x7F) > DCC_MAP2_LEVEL1)
+			return (off - DCC_MAP2_OFFSET1);
+	}
+	return (off);
+}
+
 static int dcc_sram_writel(struct dcc_drvdata *drvdata,
 					uint32_t val, uint32_t off)
 {
@@ -217,7 +242,7 @@
 	uint32_t ll_cfg = 0;
 	uint32_t tmp_ll_cfg = 0;
 
-	for (curr_list = 0; curr_list < DCC_MAX_LINK_LIST; curr_list++) {
+	for (curr_list = 0; curr_list < drvdata->nr_link_list; curr_list++) {
 		if (!drvdata->enable[curr_list])
 			continue;
 
@@ -252,7 +277,7 @@
 
 	mutex_lock(&drvdata->mutex);
 
-	for (curr_list = 0; curr_list < DCC_MAX_LINK_LIST; curr_list++) {
+	for (curr_list = 0; curr_list < drvdata->nr_link_list; curr_list++) {
 		if (!drvdata->enable[curr_list])
 			continue;
 		ll_cfg = dcc_readl(drvdata, DCC_LL_CFG(curr_list));
@@ -641,7 +666,7 @@
 	struct dcc_config_entry *entry, *temp;
 	int curr_list;
 
-	for (curr_list = 0; curr_list < DCC_MAX_LINK_LIST; curr_list++) {
+	for (curr_list = 0; curr_list < drvdata->nr_link_list; curr_list++) {
 
 		list_for_each_entry_safe(entry, temp,
 					 &drvdata->cfg_head[curr_list], list) {
@@ -660,6 +685,7 @@
 	__dcc_config_reset(drvdata);
 	mutex_unlock(&drvdata->mutex);
 }
+
 static void __dcc_disable(struct dcc_drvdata *drvdata)
 {
 	int curr_list;
@@ -667,7 +693,7 @@
 	if (!dcc_ready(drvdata))
 		dev_err(drvdata->dev, "DCC is not ready Disabling DCC...\n");
 
-	for (curr_list = 0; curr_list < DCC_MAX_LINK_LIST; curr_list++) {
+	for (curr_list = 0; curr_list < drvdata->nr_link_list; curr_list++) {
 		if (!drvdata->enable[curr_list])
 			continue;
 		dcc_writel(drvdata, 0, DCC_LL_CFG(curr_list));
@@ -701,7 +727,7 @@
 			drvdata->ram_size);
 	}
 
-	for (list = 0; list < DCC_MAX_LINK_LIST; list++) {
+	for (list = 0; list < drvdata->nr_link_list; list++) {
 
 		if (dcc_valid_list(drvdata, list))
 			continue;
@@ -790,7 +816,7 @@
 	if (kstrtoul(buf, 16, &val))
 		return -EINVAL;
 
-	if (val >= DCC_MAX_LINK_LIST)
+	if (val >= drvdata->nr_link_list)
 		return -EINVAL;
 
 	mutex_lock(&drvdata->mutex);
@@ -822,7 +848,7 @@
 	ssize_t len = 0;
 	unsigned int i;
 
-	for (i = 0; i < DCC_MAX_LINK_LIST; i++)
+	for (i = 0; i < drvdata->nr_link_list; i++)
 		len += scnprintf(buf + len, PAGE_SIZE - len, "%u :%s\n",
 				 i, str_dcc_func_type[drvdata->func_type[i]]);
 
@@ -843,7 +869,7 @@
 		return -EINVAL;
 
 	mutex_lock(&drvdata->mutex);
-	if (drvdata->curr_list >= DCC_MAX_LINK_LIST) {
+	if (drvdata->curr_list >= drvdata->nr_link_list) {
 		dev_err(dev,
 			"Select link list to program using curr_list\n");
 		ret = -EINVAL;
@@ -880,7 +906,7 @@
 	ssize_t len = 0;
 	unsigned int i;
 
-	for (i = 0; i < DCC_MAX_LINK_LIST; i++)
+	for (i = 0; i < drvdata->nr_link_list; i++)
 		len += scnprintf(buf + len, PAGE_SIZE - len, "%u :%s\n",
 				 i, str_dcc_data_sink[drvdata->data_sink[i]]);
 
@@ -901,7 +927,7 @@
 		return -EINVAL;
 
 	mutex_lock(&drvdata->mutex);
-	if (drvdata->curr_list >= DCC_MAX_LINK_LIST) {
+	if (drvdata->curr_list >= drvdata->nr_link_list) {
 		dev_err(dev,
 			"Select link list to program using curr_list\n");
 		ret = -EINVAL;
@@ -958,7 +984,7 @@
 	struct dcc_drvdata *drvdata = dev_get_drvdata(dev);
 
 	mutex_lock(&drvdata->mutex);
-	if (drvdata->curr_list >= DCC_MAX_LINK_LIST) {
+	if (drvdata->curr_list >= drvdata->nr_link_list) {
 		dev_err(dev, "Select link list to program using curr_list\n");
 		ret = -EINVAL;
 		goto err;
@@ -1008,7 +1034,7 @@
 	buf[0] = '\0';
 
 	mutex_lock(&drvdata->mutex);
-	if (drvdata->curr_list >= DCC_MAX_LINK_LIST) {
+	if (drvdata->curr_list >= drvdata->nr_link_list) {
 		dev_err(dev, "Select link list to program using curr_list\n");
 		count = -EINVAL;
 		goto err;
@@ -1064,7 +1090,7 @@
 
 	mutex_lock(&drvdata->mutex);
 
-	if (drvdata->curr_list >= DCC_MAX_LINK_LIST) {
+	if (drvdata->curr_list >= drvdata->nr_link_list) {
 		dev_err(drvdata->dev, "Select link list to program using curr_list\n");
 		ret = -EINVAL;
 		goto err;
@@ -1206,7 +1232,7 @@
 	struct dcc_drvdata *drvdata = dev_get_drvdata(dev);
 
 	mutex_lock(&drvdata->mutex);
-	if (drvdata->curr_list >= DCC_MAX_LINK_LIST) {
+	if (drvdata->curr_list >= drvdata->nr_link_list) {
 		dev_err(dev, "Select link list to program using curr_list\n");
 		ret = -EINVAL;
 		goto err;
@@ -1234,7 +1260,7 @@
 
 	mutex_lock(&drvdata->mutex);
 
-	if (drvdata->curr_list >= DCC_MAX_LINK_LIST) {
+	if (drvdata->curr_list >= drvdata->nr_link_list) {
 		dev_err(dev, "Select link list to program using curr_list\n");
 		ret = -EINVAL;
 		goto err;
@@ -1312,7 +1338,7 @@
 		goto err;
 	}
 
-	if (drvdata->curr_list >= DCC_MAX_LINK_LIST) {
+	if (drvdata->curr_list >= drvdata->nr_link_list) {
 		dev_err(dev, "Select link list to program using curr_list\n");
 		ret = -EINVAL;
 		goto err;
@@ -1338,7 +1364,7 @@
 
 	mutex_lock(&drvdata->mutex);
 
-	if (drvdata->curr_list >= DCC_MAX_LINK_LIST) {
+	if (drvdata->curr_list >= drvdata->nr_link_list) {
 		dev_err(drvdata->dev, "Select link list to program using curr_list\n");
 		ret = -EINVAL;
 		goto err;
@@ -1431,7 +1457,7 @@
 		goto err;
 	}
 
-	if (drvdata->curr_list >= DCC_MAX_LINK_LIST) {
+	if (drvdata->curr_list >= drvdata->nr_link_list) {
 		dev_err(dev, "Select link list to program using curr_list\n");
 		ret = -EINVAL;
 		goto err;
@@ -1473,7 +1499,7 @@
 
 	mutex_lock(&drvdata->mutex);
 
-	if (drvdata->curr_list >= DCC_MAX_LINK_LIST) {
+	if (drvdata->curr_list >= drvdata->nr_link_list) {
 		dev_err(dev, "Select link list to program using curr_list\n");
 		ret = -EINVAL;
 		goto out;
@@ -1675,7 +1701,7 @@
 	if (ret)
 		return ret;
 
-	if (curr_link_list >= DCC_MAX_LINK_LIST) {
+	if (curr_link_list >= drvdata->nr_link_list) {
 		dev_err(drvdata->dev, "List configuration failed.\n");
 		return ret;
 	}
@@ -1798,11 +1824,48 @@
 	if (ret)
 		return -EINVAL;
 
-	drvdata->loopoff = get_bitmask_order((drvdata->ram_size +
+	if ((dcc_readl(drvdata, DCC_HW_INFO) & 0x3F) == 0x3F) {
+		drvdata->memory_map2 = true;
+		drvdata->nr_link_list = dcc_readl(drvdata, DCC_LL_NUM_INFO);
+		if (drvdata->nr_link_list == 0)
+			return  -EINVAL;
+	} else {
+		drvdata->memory_map2 = false;
+		drvdata->nr_link_list = DCC_MAX_LINK_LIST;
+	}
+
+	if ((dcc_readl(drvdata, DCC_HW_INFO) & BIT(6)) == BIT(6))
+		drvdata->loopoff = DCC_FIX_LOOP_OFFSET;
+	else
+		drvdata->loopoff = get_bitmask_order((drvdata->ram_size +
 				drvdata->ram_offset) / 4 - 1);
 	mutex_init(&drvdata->mutex);
+	drvdata->data_sink = devm_kzalloc(dev, drvdata->nr_link_list *
+			sizeof(enum dcc_data_sink), GFP_KERNEL);
+	if (!drvdata->data_sink)
+		return -ENOMEM;
+	drvdata->func_type = devm_kzalloc(dev, drvdata->nr_link_list *
+			sizeof(enum dcc_func_type), GFP_KERNEL);
+	if (!drvdata->func_type)
+		return -ENOMEM;
+	drvdata->enable = devm_kzalloc(dev, drvdata->nr_link_list *
+			sizeof(bool), GFP_KERNEL);
+	if (!drvdata->enable)
+		return -ENOMEM;
+	drvdata->configured = devm_kzalloc(dev, drvdata->nr_link_list *
+			sizeof(bool), GFP_KERNEL);
+	if (!drvdata->configured)
+		return -ENOMEM;
+	drvdata->nr_config = devm_kzalloc(dev, drvdata->nr_link_list *
+			sizeof(uint32_t), GFP_KERNEL);
+	if (!drvdata->nr_config)
+		return -ENOMEM;
+	drvdata->cfg_head = devm_kzalloc(dev, drvdata->nr_link_list *
+			sizeof(struct list_head), GFP_KERNEL);
+	if (!drvdata->cfg_head)
+		return -ENOMEM;
 
-	for (i = 0; i < DCC_MAX_LINK_LIST; i++) {
+	for (i = 0; i < drvdata->nr_link_list; i++) {
 		INIT_LIST_HEAD(&drvdata->cfg_head[i]);
 		drvdata->nr_config[i] = 0;
 	}
diff --git a/drivers/soc/qcom/fsa4480-i2c.c b/drivers/soc/qcom/fsa4480-i2c.c
index 2fc871c..cfc61d9 100644
--- a/drivers/soc/qcom/fsa4480-i2c.c
+++ b/drivers/soc/qcom/fsa4480-i2c.c
@@ -118,7 +118,7 @@
 		dev_dbg(dev, "%s: queueing usbc_analog_work\n",
 			__func__);
 		pm_stay_awake(fsa_priv->dev);
-		schedule_work(&fsa_priv->usbc_analog_work);
+		queue_work(system_freezable_wq, &fsa_priv->usbc_analog_work);
 		break;
 	default:
 		break;
@@ -254,7 +254,7 @@
 		goto done;
 	}
 	/* Do not reset switch settings for usb digital hs */
-	if (mode.intval != POWER_SUPPLY_TYPEC_SINK)
+	if (mode.intval == POWER_SUPPLY_TYPEC_SINK_AUDIO_ADAPTER)
 		fsa4480_usbc_update_settings(fsa_priv, 0x18, 0x98);
 	rc = blocking_notifier_chain_unregister
 					(&fsa_priv->fsa4480_notifier, nb);
diff --git a/drivers/soc/qcom/icnss.c b/drivers/soc/qcom/icnss.c
index b9205f4..aef2870 100644
--- a/drivers/soc/qcom/icnss.c
+++ b/drivers/soc/qcom/icnss.c
@@ -571,6 +571,7 @@
 }
 EXPORT_SYMBOL(icnss_power_off);
 
+
 static irqreturn_t fw_error_fatal_handler(int irq, void *ctx)
 {
 	struct icnss_priv *priv = ctx;
@@ -1200,6 +1201,46 @@
 	return 0;
 }
 
+int icnss_update_hang_event_data(struct icnss_priv *priv,
+				 struct icnss_uevent_hang_data *hang_data)
+{
+	if (!priv->hang_event_data_va)
+		return -EINVAL;
+
+	priv->hang_event_data = kmemdup(priv->hang_event_data_va,
+					priv->hang_event_data_len,
+					GFP_ATOMIC);
+	if (!priv->hang_event_data)
+		return -ENOMEM;
+
+	// Update the hang event params
+	hang_data->hang_event_data = priv->hang_event_data;
+	hang_data->hang_event_data_len = priv->hang_event_data_len;
+
+	return 0;
+}
+
+int icnss_send_hang_event_data(struct icnss_priv *priv)
+{
+	struct icnss_uevent_hang_data hang_data = {0};
+	int ret = 0xFF;
+
+	if (priv->early_crash_ind) {
+		ret = icnss_update_hang_event_data(priv, &hang_data);
+		if (ret)
+			icnss_pr_err("Unable to allocate memory for Hang event data\n");
+	}
+	icnss_call_driver_uevent(priv, ICNSS_UEVENT_HANG_DATA,
+				 &hang_data);
+
+	if (!ret) {
+		kfree(priv->hang_event_data);
+		priv->hang_event_data = NULL;
+	}
+
+	return 0;
+}
+
 static int icnss_driver_event_pd_service_down(struct icnss_priv *priv,
 					      void *data)
 {
@@ -1213,6 +1254,8 @@
 	if (priv->force_err_fatal)
 		ICNSS_ASSERT(0);
 
+	icnss_send_hang_event_data(priv);
+
 	if (priv->early_crash_ind) {
 		icnss_pr_dbg("PD Down ignored as early indication is processed: %d, state: 0x%lx\n",
 			     event_data->crashed, priv->state);
@@ -1426,7 +1469,7 @@
 	struct notif_data *notif = data;
 	struct icnss_priv *priv = container_of(nb, struct icnss_priv,
 					       modem_ssr_nb);
-	struct icnss_uevent_fw_down_data fw_down_data;
+	struct icnss_uevent_fw_down_data fw_down_data = {0};
 
 	icnss_pr_vdbg("Modem-Notify: event %lu\n", code);
 
@@ -1449,11 +1492,12 @@
 		set_bit(ICNSS_FW_DOWN, &priv->state);
 		icnss_ignore_fw_timeout(true);
 
-		fw_down_data.crashed = !!notif->crashed;
-		if (test_bit(ICNSS_FW_READY, &priv->state))
+		if (test_bit(ICNSS_FW_READY, &priv->state)) {
+			fw_down_data.crashed = !!notif->crashed;
 			icnss_call_driver_uevent(priv,
 						 ICNSS_UEVENT_FW_DOWN,
 						 &fw_down_data);
+		}
 		return NOTIFY_OK;
 	}
 
@@ -1476,12 +1520,12 @@
 
 	event_data->crashed = notif->crashed;
 
-	fw_down_data.crashed = !!notif->crashed;
-	if (test_bit(ICNSS_FW_READY, &priv->state))
+	if (test_bit(ICNSS_FW_READY, &priv->state)) {
+		fw_down_data.crashed = !!notif->crashed;
 		icnss_call_driver_uevent(priv,
 					 ICNSS_UEVENT_FW_DOWN,
 					 &fw_down_data);
-
+	}
 	icnss_driver_event_post(ICNSS_DRIVER_EVENT_PD_SERVICE_DOWN,
 				ICNSS_EVENT_SYNC, event_data);
 
@@ -1545,7 +1589,7 @@
 					       service_notifier_nb);
 	enum pd_subsys_state *state = data;
 	struct icnss_event_pd_service_down_data *event_data;
-	struct icnss_uevent_fw_down_data fw_down_data;
+	struct icnss_uevent_fw_down_data fw_down_data = {0};
 	enum icnss_pdr_cause_index cause = ICNSS_ROOT_PD_CRASH;
 
 	icnss_pr_dbg("PD service notification: 0x%lx state: 0x%lx\n",
@@ -1598,11 +1642,12 @@
 		set_bit(ICNSS_FW_DOWN, &priv->state);
 		icnss_ignore_fw_timeout(true);
 
-		fw_down_data.crashed = event_data->crashed;
-		if (test_bit(ICNSS_FW_READY, &priv->state))
+		if (test_bit(ICNSS_FW_READY, &priv->state)) {
+			fw_down_data.crashed = event_data->crashed;
 			icnss_call_driver_uevent(priv,
 						 ICNSS_UEVENT_FW_DOWN,
 						 &fw_down_data);
+		}
 	}
 
 	clear_bit(ICNSS_HOST_TRIGGERED_PDR, &priv->state);
@@ -1814,8 +1859,8 @@
 
 	icnss_pr_dbg("Unregistering driver, state: 0x%lx\n", penv->state);
 
-	if (!penv->ops) {
-		icnss_pr_err("Driver not registered\n");
+	if (!penv->ops || (!test_bit(ICNSS_DRIVER_PROBED, &penv->state))) {
+		icnss_pr_err("Driver not registered/probed\n");
 		ret = -ENOENT;
 		goto out;
 	}
@@ -2171,6 +2216,7 @@
 {
 	struct icnss_priv *priv = dev_get_drvdata(dev);
 	unsigned long iova;
+	int prop_len = 0;
 	size_t len;
 	int ret = 0;
 
@@ -2187,9 +2233,10 @@
 	}
 
 	len = roundup(size + paddr - rounddown(paddr, PAGE_SIZE), PAGE_SIZE);
-	iova = roundup(penv->smmu_iova_ipa_start, PAGE_SIZE);
+	iova = roundup(penv->smmu_iova_ipa_current, PAGE_SIZE);
 
-	if (iova >= priv->smmu_iova_ipa_start + priv->smmu_iova_ipa_len) {
+	if (of_get_property(dev->of_node, "qcom,iommu-geometry", &prop_len) &&
+	    iova >= priv->smmu_iova_ipa_start + priv->smmu_iova_ipa_len) {
 		icnss_pr_err("No IOVA space to map, iova %lx, smmu_iova_ipa_start %pad, smmu_iova_ipa_len %zu\n",
 			     iova,
 			     &priv->smmu_iova_ipa_start,
@@ -2197,6 +2244,8 @@
 		return -ENOMEM;
 	}
 
+	icnss_pr_dbg("IOMMU Map: iova %lx, len %zu\n", iova, len);
+
 	ret = iommu_map(priv->iommu_domain, iova,
 			rounddown(paddr, PAGE_SIZE), len,
 			IOMMU_READ | IOMMU_WRITE);
@@ -2205,13 +2254,59 @@
 		return ret;
 	}
 
-	priv->smmu_iova_ipa_start = iova + len;
+	priv->smmu_iova_ipa_current = iova + len;
 	*iova_addr = (uint32_t)(iova + paddr - rounddown(paddr, PAGE_SIZE));
 
+	icnss_pr_dbg("IOVA addr mapped to physical addr %lx\n", *iova_addr);
 	return 0;
 }
 EXPORT_SYMBOL(icnss_smmu_map);
 
+int icnss_smmu_unmap(struct device *dev,
+		     uint32_t iova_addr, size_t size)
+{
+	struct icnss_priv *priv = dev_get_drvdata(dev);
+	unsigned long iova;
+	size_t len, unmapped_len;
+
+	if (!priv) {
+		icnss_pr_err("Invalid drvdata: dev %pK, data %pK\n",
+			     dev, priv);
+		return -EINVAL;
+	}
+
+	if (!iova_addr) {
+		icnss_pr_err("iova_addr is NULL, size %zu\n",
+			     size);
+		return -EINVAL;
+	}
+
+	len = roundup(size + iova_addr - rounddown(iova_addr, PAGE_SIZE),
+		      PAGE_SIZE);
+	iova = rounddown(iova_addr, PAGE_SIZE);
+
+	if (iova >= priv->smmu_iova_ipa_start + priv->smmu_iova_ipa_len) {
+		icnss_pr_err("Out of IOVA space during unmap, iova %lx, smmu_iova_ipa_start %pad, smmu_iova_ipa_len %zu\n",
+			     iova,
+			     &priv->smmu_iova_ipa_start,
+			     priv->smmu_iova_ipa_len);
+		return -ENOMEM;
+	}
+
+	icnss_pr_dbg("IOMMU Unmap: iova %lx, len %zu\n",
+		     iova, len);
+
+	unmapped_len = iommu_unmap(priv->iommu_domain, iova, len);
+	if (unmapped_len != len) {
+		icnss_pr_err("Failed to unmap, %zu\n", unmapped_len);
+		return -EINVAL;
+	}
+
+	priv->smmu_iova_ipa_current = iova;
+	return 0;
+}
+EXPORT_SYMBOL(icnss_smmu_unmap);
+
 unsigned int icnss_socinfo_get_serial_number(struct device *dev)
 {
 	return socinfo_get_serial_number();
@@ -3384,6 +3479,7 @@
 			icnss_pr_err("SMMU IOVA IPA not found\n");
 		} else {
 			priv->smmu_iova_ipa_start = res->start;
+			priv->smmu_iova_ipa_current = res->start;
 			priv->smmu_iova_ipa_len = resource_size(res);
 			icnss_pr_dbg("SMMU IOVA IPA start: %pa, len: %zx\n",
 				     &priv->smmu_iova_ipa_start,
diff --git a/drivers/soc/qcom/icnss2/main.c b/drivers/soc/qcom/icnss2/main.c
index 96b8301..1c33f1a 100644
--- a/drivers/soc/qcom/icnss2/main.c
+++ b/drivers/soc/qcom/icnss2/main.c
@@ -507,6 +507,18 @@
 			goto err_power_on;
 		}
 
+		priv->mem_base_va = devm_ioremap(&priv->pdev->dev,
+							 priv->mem_base_pa,
+							 priv->mem_base_size);
+		if (!priv->mem_base_va) {
+			icnss_pr_err("Ioremap failed for bar address\n");
+			goto err_power_on;
+		}
+
+		icnss_pr_dbg("MEM_BASE pa: %pa, va: 0x%pK\n",
+			     &priv->mem_base_pa,
+			     priv->mem_base_va);
+
 		icnss_wlfw_bdf_dnld_send_sync(priv, ICNSS_BDF_REGDB);
 
 		ret = icnss_wlfw_bdf_dnld_send_sync(priv,
diff --git a/drivers/soc/qcom/icnss2/qmi.c b/drivers/soc/qcom/icnss2/qmi.c
index cbe9c11..10186be 100644
--- a/drivers/soc/qcom/icnss2/qmi.c
+++ b/drivers/soc/qcom/icnss2/qmi.c
@@ -36,10 +36,14 @@
 #define MAX_BDF_FILE_NAME		13
 #define BDF_FILE_NAME_PREFIX		"bdwlan"
 #define ELF_BDF_FILE_NAME		"bdwlan.elf"
+#define ELF_BDF_FILE_NAME_PREFIX	"bdwlan.e"
 #define BIN_BDF_FILE_NAME		"bdwlan.bin"
+#define BIN_BDF_FILE_NAME_PREFIX	"bdwlan.b"
 #define REGDB_FILE_NAME			"regdb.bin"
 #define DUMMY_BDF_FILE_NAME		"bdwlan.dmy"
 
+#define DEVICE_BAR_SIZE			0x200000
+
 #ifdef CONFIG_ICNSS2_DEBUG
 bool ignore_fw_timeout;
 #define ICNSS_QMI_ASSERT() ICNSS_ASSERT(ignore_fw_timeout)
@@ -312,6 +316,19 @@
 	if (resp->bar_size_valid)
 		priv->mem_base_size = resp->bar_size;
 
+	if (!priv->mem_base_pa) {
+		ret = -EINVAL;
+		icnss_qmi_fatal_err("Fail to get bar address\n");
+		goto out;
+	}
+
+	if (priv->mem_base_size <  DEVICE_BAR_SIZE) {
+		ret = -EINVAL;
+		icnss_qmi_fatal_err("Bar size is not proper 0x%x\n",
+				    priv->mem_base_size);
+		goto out;
+	}
+
 	kfree(resp);
 	kfree(req);
 	return 0;
@@ -534,24 +551,26 @@
 			snprintf(filename, filename_len, ELF_BDF_FILE_NAME);
 		else if (priv->board_id < 0xFF)
 			snprintf(filename, filename_len,
-				 BDF_FILE_NAME_PREFIX "e%02x",
+				 ELF_BDF_FILE_NAME_PREFIX "%02x",
 				 priv->board_id);
 		else
 			snprintf(filename, filename_len,
-				 BDF_FILE_NAME_PREFIX "%03x",
-				 priv->board_id);
+				 BDF_FILE_NAME_PREFIX "%02x.e%02x",
+				 priv->board_id >> 8 & 0xFF,
+				 priv->board_id & 0xFF);
 		break;
 	case ICNSS_BDF_BIN:
 		if (priv->board_id == 0xFF)
 			snprintf(filename, filename_len, BIN_BDF_FILE_NAME);
 		else if (priv->board_id < 0xFF)
 			snprintf(filename, filename_len,
-				 BDF_FILE_NAME_PREFIX "b%02x",
+				 BIN_BDF_FILE_NAME_PREFIX "%02x",
 				 priv->board_id);
 		else
 			snprintf(filename, filename_len,
-				 BDF_FILE_NAME_PREFIX "%03x",
-				 priv->board_id);
+				 BDF_FILE_NAME_PREFIX "%02x.b%02x",
+				 priv->board_id >> 8 & 0xFF,
+				 priv->board_id & 0xFF);
 		break;
 	case ICNSS_BDF_REGDB:
 		snprintf(filename, filename_len, REGDB_FILE_NAME);
@@ -1644,14 +1663,14 @@
 
 	if (priv->device_id == WCN6750_DEVICE_ID) {
 		req.shadow_reg_v2_valid = 1;
-		if (config->num_shadow_reg_cfg >
+		if (config->num_shadow_reg_v2_cfg >
 			QMI_WLFW_MAX_NUM_SHADOW_REG_V2_V01)
 			req.shadow_reg_v2_len =
 				QMI_WLFW_MAX_NUM_SHADOW_REG_V2_V01;
 		else
-			req.shadow_reg_v2_len = config->num_shadow_reg_cfg;
+			req.shadow_reg_v2_len = config->num_shadow_reg_v2_cfg;
 
-		memcpy(req.shadow_reg_v2, config->shadow_reg_cfg,
+		memcpy(req.shadow_reg_v2, config->shadow_reg_v2_cfg,
 			 sizeof(struct wlfw_shadow_reg_v2_cfg_s_v01) *
 			 req.shadow_reg_v2_len);
 	} else if (priv->device_id == ADRASTEA_DEVICE_ID) {
diff --git a/drivers/soc/qcom/icnss_private.h b/drivers/soc/qcom/icnss_private.h
index 1c425d1..e864a0b 100644
--- a/drivers/soc/qcom/icnss_private.h
+++ b/drivers/soc/qcom/icnss_private.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
 /*
- * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
  */
 
 #ifndef __ICNSS_PRIVATE_H__
@@ -253,6 +253,7 @@
 #define WLFW_MAX_NUM_CE 12
 #define WLFW_MAX_NUM_SVC 24
 #define WLFW_MAX_NUM_SHADOW_REG 24
+#define WLFW_MAX_HANG_EVENT_DATA_SIZE 400
 
 struct service_notifier_context {
 	void *handle;
@@ -292,6 +293,7 @@
 	void __iomem *mem_base_va;
 	struct iommu_domain *iommu_domain;
 	dma_addr_t smmu_iova_ipa_start;
+	dma_addr_t smmu_iova_ipa_current;
 	size_t smmu_iova_ipa_len;
 	struct qmi_handle qmi;
 	struct list_head event_list;
@@ -349,7 +351,10 @@
 	bool is_ssr;
 	struct kobject *icnss_kobject;
 	atomic_t is_shutdown;
-
+	phys_addr_t hang_event_data_pa;
+	void __iomem *hang_event_data_va;
+	uint16_t hang_event_data_len;
+	void *hang_event_data;
 };
 
 struct icnss_reg_info {
diff --git a/drivers/soc/qcom/icnss_qmi.c b/drivers/soc/qcom/icnss_qmi.c
index 8a59ff5..c955911 100644
--- a/drivers/soc/qcom/icnss_qmi.c
+++ b/drivers/soc/qcom/icnss_qmi.c
@@ -19,6 +19,7 @@
 #include <linux/ipc_logging.h>
 #include <linux/thread_info.h>
 #include <linux/soc/qcom/qmi.h>
+#include <linux/platform_device.h>
 #include <soc/qcom/icnss.h>
 #include <soc/qcom/service-locator.h>
 #include <soc/qcom/service-notifier.h>
@@ -374,11 +375,14 @@
 				    ret);
 		goto out;
 	} else if (resp->resp.result != QMI_RESULT_SUCCESS_V01) {
+		ret = -resp->resp.result;
+		if (resp->resp.error == QMI_ERR_PLAT_CCPM_CLK_INIT_FAILED) {
+			icnss_pr_err("RF card not present\n");
+			goto out;
+		}
+
 		icnss_qmi_fatal_err("QMI Capability request rejected, result:%d error:%d\n",
 			resp->resp.result, resp->resp.error);
-		ret = -resp->resp.result;
-		if (resp->resp.error == QMI_ERR_PLAT_CCPM_CLK_INIT_FAILED)
-			icnss_qmi_fatal_err("RF card not present\n");
 		goto out;
 	}
 
@@ -1009,7 +1013,7 @@
 void icnss_handle_rejuvenate(struct icnss_priv *priv)
 {
 	struct icnss_event_pd_service_down_data *event_data;
-	struct icnss_uevent_fw_down_data fw_down_data;
+	struct icnss_uevent_fw_down_data fw_down_data = {0};
 
 	event_data = kzalloc(sizeof(*event_data), GFP_KERNEL);
 	if (event_data == NULL)
@@ -1044,6 +1048,10 @@
 			     struct qmi_txn *txn, const void *data)
 {
 	struct icnss_priv *priv = container_of(qmi, struct icnss_priv, qmi);
+	struct device *dev = &priv->pdev->dev;
+	const struct wlfw_msa_ready_ind_msg_v01 *ind_msg = data;
+	uint64_t msa_base_addr = priv->msa_pa;
+	phys_addr_t hang_data_phy_addr;
 
 	icnss_pr_dbg("Received MSA Ready Indication\n");
 
@@ -1053,6 +1061,59 @@
 	}
 
 	priv->stats.msa_ready_ind++;
+
+	/* Check if the length is valid &
+	 * the length should not be 0 and
+	 * should be <=  WLFW_MAX_HANG_EVENT_DATA_SIZE(400)
+	 */
+
+	if (ind_msg->hang_data_length_valid &&
+	    ind_msg->hang_data_length &&
+	    ind_msg->hang_data_length <= WLFW_MAX_HANG_EVENT_DATA_SIZE)
+		priv->hang_event_data_len = ind_msg->hang_data_length;
+	else
+		goto out;
+
+	/* Check if the offset is valid &
+	 * the offset should be in range of 0 to msa_mem_size-hang_data_length
+	 */
+
+	if (ind_msg->hang_data_addr_offset_valid &&
+	    (ind_msg->hang_data_addr_offset <= (priv->msa_mem_size -
+						 ind_msg->hang_data_length)))
+		hang_data_phy_addr = msa_base_addr +
+						ind_msg->hang_data_addr_offset;
+	else
+		goto out;
+
+	if (priv->hang_event_data_pa == hang_data_phy_addr)
+		goto exit;
+
+	priv->hang_event_data_pa = hang_data_phy_addr;
+	priv->hang_event_data_va = devm_ioremap(dev, priv->hang_event_data_pa,
+						ind_msg->hang_data_length);
+
+	if (!priv->hang_event_data_va) {
+		icnss_pr_err("Hang Data ioremap failed: phy addr: %pa\n",
+			     &priv->hang_event_data_pa);
+		goto fail;
+	}
+exit:
+	icnss_pr_dbg("Hang Event Data details,Offset:0x%x, Length:0x%x,va_addr: 0x%pK\n",
+		     ind_msg->hang_data_addr_offset,
+		     ind_msg->hang_data_length,
+		     priv->hang_event_data_va);
+
+	return;
+
+out:
+	icnss_pr_err("Invalid Hang Data details, Offset:0x%x, Length:0x%x",
+		     ind_msg->hang_data_addr_offset,
+		     ind_msg->hang_data_length);
+fail:
+	priv->hang_event_data_va = NULL;
+	priv->hang_event_data_pa = 0;
+	priv->hang_event_data_len = 0;
 }
 
 static void pin_connect_result_ind_cb(struct qmi_handle *qmi,
@@ -1171,7 +1232,6 @@
 		ret = -ENODEV;
 		goto out;
 	}
-	set_bit(ICNSS_WLFW_EXISTS, &priv->state);
 
 	sq.sq_family = AF_QIPCRTR;
 	sq.sq_node = event_data->node;
diff --git a/drivers/soc/qcom/llcc-lagoon.c b/drivers/soc/qcom/llcc-lagoon.c
index 21c0e7c..3d19ff1 100644
--- a/drivers/soc/qcom/llcc-lagoon.c
+++ b/drivers/soc/qcom/llcc-lagoon.c
@@ -51,12 +51,13 @@
 	}
 
 static struct llcc_slice_config lagoon_data[] =  {
-	SCT_ENTRY(LLCC_CPUSS,    1, 768, 1, 0, 0xFFF, 0x0, 0, 0, 0, 0, 1, 1),
-	SCT_ENTRY(LLCC_MDM,      8, 256, 2, 0, 0xFFF, 0x0, 0, 0, 0, 0, 1, 0),
+	SCT_ENTRY(LLCC_CPUSS,    1,  768, 1, 0, 0xFFF, 0x0, 0, 0, 0, 0, 1, 1),
+	SCT_ENTRY(LLCC_MDM,      8,  512, 2, 0, 0xFFF, 0x0, 0, 0, 0, 0, 1, 0),
 	SCT_ENTRY(LLCC_GPUHTW,   11, 256, 1, 0, 0xFFF, 0x0, 0, 0, 0, 0, 1, 0),
-	SCT_ENTRY(LLCC_GPU,      12, 256, 1, 0, 0xFFF, 0x0, 0, 0, 0, 0, 1, 0),
-	SCT_ENTRY(LLCC_MDMPNG,   21, 768, 1, 1, 0xFFF, 0x0, 0, 0, 0, 0, 1, 0),
+	SCT_ENTRY(LLCC_GPU,      12, 512, 1, 0, 0xFFF, 0x0, 0, 0, 0, 0, 1, 0),
+	SCT_ENTRY(LLCC_MDMPNG,   21, 768, 0, 1, 0xFFF, 0x0, 0, 0, 0, 0, 1, 0),
 	SCT_ENTRY(LLCC_NPU,      23, 768, 1, 0, 0xFFF, 0x0, 0, 0, 0, 0, 1, 0),
+	SCT_ENTRY(LLCC_MODEMVPE, 29,  64, 1, 1, 0xFFF, 0x0, 0, 0, 0, 0, 1, 0),
 };
 
 static int lagoon_qcom_llcc_probe(struct platform_device *pdev)
diff --git a/drivers/soc/qcom/memshare/msm_memshare.c b/drivers/soc/qcom/memshare/msm_memshare.c
index f784f61..2a7b7fd 100644
--- a/drivers/soc/qcom/memshare/msm_memshare.c
+++ b/drivers/soc/qcom/memshare/msm_memshare.c
@@ -675,21 +675,21 @@
 		.type = QMI_REQUEST,
 		.msg_id = MEM_ALLOC_GENERIC_REQ_MSG_V01,
 		.ei = mem_alloc_generic_req_msg_data_v01_ei,
-		.decoded_size = MEM_ALLOC_REQ_MAX_MSG_LEN_V01,
+		.decoded_size = sizeof(struct mem_alloc_generic_req_msg_v01),
 		.fn = handle_alloc_generic_req,
 	},
 	{
 		.type = QMI_REQUEST,
 		.msg_id = MEM_FREE_GENERIC_REQ_MSG_V01,
 		.ei = mem_free_generic_req_msg_data_v01_ei,
-		.decoded_size = MEM_FREE_REQ_MAX_MSG_LEN_V01,
+		.decoded_size = sizeof(struct mem_free_generic_req_msg_v01),
 		.fn = handle_free_generic_req,
 	},
 	{
 		.type = QMI_REQUEST,
 		.msg_id = MEM_QUERY_SIZE_REQ_MSG_V01,
 		.ei = mem_query_size_req_msg_data_v01_ei,
-		.decoded_size = MEM_QUERY_MAX_MSG_LEN_V01,
+		.decoded_size = sizeof(struct mem_query_size_req_msg_v01),
 		.fn = handle_query_size_req,
 	},
 };
diff --git a/drivers/soc/qcom/msm_bus/msm_bus_dbg.c b/drivers/soc/qcom/msm_bus/msm_bus_dbg.c
index 5cb058d..f88c85a 100644
--- a/drivers/soc/qcom/msm_bus/msm_bus_dbg.c
+++ b/drivers/soc/qcom/msm_bus/msm_bus_dbg.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2010-2012, 2014-2019, The Linux Foundation. All rights
+ * Copyright (c) 2010-2012, 2014-2020, The Linux Foundation. All rights
  */
 
 #define pr_fmt(fmt) "AXI: %s(): " fmt, __func__
@@ -21,7 +21,6 @@
 #include "msm_bus_core.h"
 #include "msm_bus_adhoc.h"
 
-#define CREATE_TRACE_POINTS
 #include <trace/events/trace_msm_bus.h>
 
 #define MAX_BUFF_SIZE 4096
diff --git a/drivers/soc/qcom/msm_bus/msm_bus_dbg_rpmh.c b/drivers/soc/qcom/msm_bus/msm_bus_dbg_rpmh.c
index efe9d23..196e050 100644
--- a/drivers/soc/qcom/msm_bus/msm_bus_dbg_rpmh.c
+++ b/drivers/soc/qcom/msm_bus/msm_bus_dbg_rpmh.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2019-2020, The Linux Foundation. All rights reserved.
  */
 
 #define pr_fmt(fmt) "AXI: %s(): " fmt, __func__
@@ -21,7 +21,6 @@
 #include "msm_bus_core.h"
 #include "msm_bus_rpmh.h"
 
-#define CREATE_TRACE_POINTS
 #include <trace/events/trace_msm_bus.h>
 
 #define MAX_BUFF_SIZE 4096
diff --git a/drivers/soc/qcom/msm_bus/msm_bus_rules.c b/drivers/soc/qcom/msm_bus/msm_bus_rules.c
index e435ea7..124f8e9 100644
--- a/drivers/soc/qcom/msm_bus/msm_bus_rules.c
+++ b/drivers/soc/qcom/msm_bus/msm_bus_rules.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2014-2018, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2014-2018, 2020, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/list_sort.h>
@@ -9,6 +9,7 @@
 #include <linux/slab.h>
 #include <linux/types.h>
 #include <linux/msm-bus.h>
+#define CREATE_TRACE_POINTS
 #include <trace/events/trace_msm_bus.h>
 
 struct node_vote_info {
diff --git a/drivers/soc/qcom/msm_minidump.c b/drivers/soc/qcom/msm_minidump.c
index 56643227..7bd4951 100644
--- a/drivers/soc/qcom/msm_minidump.c
+++ b/drivers/soc/qcom/msm_minidump.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2018,2020 The Linux Foundation. All rights reserved.
  */
 
 #define pr_fmt(fmt) "Minidump: " fmt
@@ -355,6 +355,7 @@
 	struct elf_phdr *phdr;
 	unsigned int strtbl_off, elfh_size, phdr_off;
 	char *banner;
+	size_t linux_banner_len = strlen(linux_banner);
 
 	/* Header buffer contains:
 	 * elf header, MAX_NUM_ENTRIES+4 of section and program elf headers,
@@ -425,7 +426,7 @@
 
 	/* 4th section is linux banner */
 	banner = (char *)ehdr + strtbl_off + MAX_STRTBL_SIZE;
-	strlcpy(banner, linux_banner, strlen(linux_banner) + 1);
+	strlcpy(banner, linux_banner, linux_banner_len + 1);
 
 	shdr->sh_type = SHT_PROGBITS;
 	shdr->sh_offset = (elf_addr_t)(strtbl_off + MAX_STRTBL_SIZE);
diff --git a/drivers/soc/qcom/qdss_bridge.c b/drivers/soc/qcom/qdss_bridge.c
index 420a094..40a6d5c 100644
--- a/drivers/soc/qcom/qdss_bridge.c
+++ b/drivers/soc/qcom/qdss_bridge.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
  */
 
 #define KMSG_COMPONENT "QDSS diag bridge"
@@ -108,6 +108,7 @@
 
 		buf = kzalloc(drvdata->mtu, GFP_KERNEL);
 		usb_req = kzalloc(sizeof(*usb_req), GFP_KERNEL);
+		init_completion(&usb_req->write_done);
 
 		entry->buf = buf;
 		entry->usb_req = usb_req;
@@ -459,7 +460,8 @@
 		break;
 
 	case USB_QDSS_DISCONNECT:
-		/* Leave MHI/USB open.Only close on MHI disconnect */
+		if (drvdata->opened == ENABLE)
+			usb_qdss_free_req(drvdata->usb_ch);
 		break;
 
 	case USB_QDSS_DATA_WRITE_DONE:
diff --git a/drivers/soc/qcom/rpm_master_stat.c b/drivers/soc/qcom/rpm_master_stat.c
index 6ae297a..eda94c6 100644
--- a/drivers/soc/qcom/rpm_master_stat.c
+++ b/drivers/soc/qcom/rpm_master_stat.c
@@ -1,7 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0-only
 
 /*
- * Copyright (c) 2012-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/debugfs.h>
@@ -402,15 +402,17 @@
 	 */
 	for (i = 0; i < pdata->num_masters; i++) {
 		const char *master_name;
+		size_t master_name_len;
 
 		of_property_read_string_index(node, "qcom,masters",
 							i, &master_name);
+		master_name_len = strlen(master_name);
 		pdata->masters[i] = devm_kzalloc(dev, sizeof(char) *
-				strlen(master_name) + 1, GFP_KERNEL);
+				master_name_len + 1, GFP_KERNEL);
 		if (!pdata->masters[i])
 			goto err;
 		strlcpy(pdata->masters[i], master_name,
-					strlen(master_name) + 1);
+					master_name_len + 1);
 	}
 	return pdata;
 err:
diff --git a/drivers/soc/qcom/rq_stats.c b/drivers/soc/qcom/rq_stats.c
index 4906d97..72e1bf1 100644
--- a/drivers/soc/qcom/rq_stats.c
+++ b/drivers/soc/qcom/rq_stats.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2010-2015, 2017, 2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2010-2015, 2017, 2019-2020, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/init.h>
@@ -21,7 +21,7 @@
 static ssize_t show_def_timer_ms(struct kobject *kobj,
 		struct kobj_attribute *attr, char *buf)
 {
-	int64_t diff;
+	uint64_t diff;
 	unsigned int udiff;
 
 	diff = ktime_to_ns(ktime_get()) - rq_info.def_start_time;
diff --git a/drivers/soc/qcom/scm.c b/drivers/soc/qcom/scm.c
index 7b17bbb..bff6cdc 100644
--- a/drivers/soc/qcom/scm.c
+++ b/drivers/soc/qcom/scm.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2010-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2010-2020, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/slab.h>
@@ -660,6 +660,8 @@
 }
 EXPORT_SYMBOL(scm_is_secure_device);
 
+#ifdef CONFIG_ARM64
+
 /*
  * SCM call command ID to protect kernel memory
  * in Hyp Stage 2 page tables.
@@ -668,7 +670,7 @@
  */
 #define TZ_RTIC_ENABLE_MEM_PROTECTION	0x4
 #if IS_ENABLED(CONFIG_QCOM_QHEE_ENABLE_MEM_PROTECTION)
-int scm_enable_mem_protection(void)
+static int __init scm_mem_protection_init(void)
 {
 	struct scm_desc desc = {0};
 	int ret = 0, resp;
@@ -693,10 +695,8 @@
 
 	return resp;
 }
-#else
-inline int scm_enable_mem_protection(void)
-{
-	return 0;
-}
+
+early_initcall(scm_mem_protection_init);
 #endif
-EXPORT_SYMBOL(scm_enable_mem_protection);
+
+#endif
diff --git a/drivers/soc/qcom/smcinvoke.c b/drivers/soc/qcom/smcinvoke.c
index 77e2503..dd41636 100644
--- a/drivers/soc/qcom/smcinvoke.c
+++ b/drivers/soc/qcom/smcinvoke.c
@@ -3,6 +3,8 @@
  * Copyright (c) 2016-2020, The Linux Foundation. All rights reserved.
  */
 
+#define pr_fmt(fmt) "smcinvoke: %s: " fmt, __func__
+
 #include <linux/module.h>
 #include <linux/mod_devicetable.h>
 #include <linux/device.h>
@@ -139,11 +141,12 @@
 static uint16_t g_last_cb_server_id = CBOBJ_SERVER_ID_START;
 static uint16_t g_last_mem_rgn_id, g_last_mem_map_obj_id;
 static size_t g_max_cb_buf_size = SMCINVOKE_TZ_MIN_BUF_SIZE;
+static unsigned int cb_reqs_inflight;
 
 static long smcinvoke_ioctl(struct file *, unsigned int, unsigned long);
 static int smcinvoke_open(struct inode *, struct file *);
 static int smcinvoke_release(struct inode *, struct file *);
-static int destroy_cb_server(uint16_t);
+static int release_cb_server(uint16_t);
 
 static const struct file_operations g_smcinvoke_fops = {
 	.owner		= THIS_MODULE,
@@ -212,6 +215,7 @@
 	uint16_t server_id;
 	uint16_t state;
 	uint32_t txn_id;
+	struct kref ref_cnt;
 	wait_queue_head_t req_wait_q;
 	wait_queue_head_t rsp_wait_q;
 	size_t cb_buf_size;
@@ -247,6 +251,23 @@
 	struct list_head list;
 };
 
+static void destroy_cb_server(struct kref *kref)
+{
+	struct smcinvoke_server_info *server = container_of(kref,
+					struct smcinvoke_server_info, ref_cnt);
+	if (server) {
+		hash_del(&server->hash);
+		kfree(server);
+	}
+}
+
+/*
+ *  A separate find func is reqd mainly for couple of cases:
+ *  next_cb_server_id_locked which checks if server id had been utilized or not.
+ *      - It would be overhead if we do ref_cnt for this case
+ *  smcinvoke_release: which is called when server is closed from userspace.
+ *      - During server creation we init ref count, now put it back
+ */
 static struct smcinvoke_server_info *find_cb_server_locked(uint16_t server_id)
 {
 	struct smcinvoke_server_info *data = NULL;
@@ -258,6 +279,16 @@
 	return  NULL;
 }
 
+struct smcinvoke_server_info *get_cb_server_locked(uint16_t server_id)
+{
+	struct smcinvoke_server_info *server = find_cb_server_locked(server_id);
+
+	if (server)
+		kref_get(&server->ref_cnt);
+
+	return server;
+}
+
 static uint16_t next_cb_server_id_locked(void)
 {
 	if (g_last_cb_server_id == CBOBJ_SERVER_ID_END)
@@ -371,8 +402,10 @@
 	struct smcinvoke_mem_obj *mem_obj = find_mem_obj_locked(
 			TZHANDLE_GET_OBJID(tzhandle), is_mem_regn_obj);
 
-	if (!mem_obj)
+	if (!mem_obj) {
+		pr_err("memory object not found\n");
 		return OBJECT_ERROR_BADOBJ;
+	}
 
 	if (is_mem_regn_obj)
 		kref_put(&mem_obj->mem_regn_ref_cnt, del_mem_regn_obj_locked);
@@ -390,59 +423,74 @@
 	list_del(&obj->list);
 	server = obj->server;
 	kfree(obj);
-	if ((server->state == SMCINVOKE_SERVER_STATE_DEFUNCT) &&
-				list_empty(&server->pending_cbobjs)) {
-		hash_del(&server->hash);
-		kfree(server);
-	}
+	if (server)
+		kref_put(&server->ref_cnt, destroy_cb_server);
 }
 
 static int get_pending_cbobj_locked(uint16_t srvr_id, int16_t obj_id)
 {
+	int ret = 0;
+	bool release_server = true;
 	struct list_head *head = NULL;
 	struct smcinvoke_cbobj *cbobj = NULL;
 	struct smcinvoke_cbobj *obj = NULL;
-	struct smcinvoke_server_info *server = find_cb_server_locked(srvr_id);
+	struct smcinvoke_server_info *server = get_cb_server_locked(srvr_id);
 
-	if (!server)
+	if (!server) {
+		pr_err("%s, server id : %u not found\n", __func__, srvr_id);
 		return OBJECT_ERROR_BADOBJ;
+	}
 
 	head = &server->pending_cbobjs;
 	list_for_each_entry(cbobj, head, list)
 		if (cbobj->cbobj_id == obj_id)  {
 			kref_get(&cbobj->ref_cnt);
-			return 0;
+			goto out;
 		}
 
 	obj = kzalloc(sizeof(*obj), GFP_KERNEL);
-	if (!obj)
-		return OBJECT_ERROR_KMEM;
+	if (!obj) {
+		ret = OBJECT_ERROR_KMEM;
+		goto out;
+	}
 
 	obj->cbobj_id = obj_id;
 	kref_init(&obj->ref_cnt);
 	obj->server = server;
+	/*
+	 * we are holding server ref in cbobj; we will
+	 * release server ref when cbobj is destroyed
+	 */
+	release_server = false;
 	list_add_tail(&obj->list, head);
-
-	return 0;
+out:
+	if (release_server)
+		kref_put(&server->ref_cnt, destroy_cb_server);
+	return ret;
 }
 
 static int put_pending_cbobj_locked(uint16_t srvr_id, int16_t obj_id)
 {
+	int ret = -EINVAL;
 	struct smcinvoke_server_info *srvr_info =
-					find_cb_server_locked(srvr_id);
+					get_cb_server_locked(srvr_id);
 	struct list_head *head = NULL;
 	struct smcinvoke_cbobj *cbobj = NULL;
 
-	if (!srvr_info)
-		return -EINVAL;
+	if (!srvr_info) {
+		pr_err("%s, server id : %u not found\n", __func__, srvr_id);
+		return ret;
+	}
 
 	head = &srvr_info->pending_cbobjs;
 	list_for_each_entry(cbobj, head, list)
 		if (cbobj->cbobj_id == obj_id)  {
 			kref_put(&cbobj->ref_cnt, free_pending_cbobj_locked);
-			return 0;
+			ret = 0;
+			break;
 		}
-	return -EINVAL;
+	kref_put(&srvr_info->ref_cnt, destroy_cb_server);
+	return ret;
 }
 
 static int release_tzhandle_locked(int32_t tzhandle)
@@ -744,8 +792,10 @@
 {
 	struct smcinvoke_tzcb_req *msg = buf;
 
-	if (msg->hdr.counts != OBJECT_COUNTS_PACK(0, 0, 0, 0))
+	if (msg->hdr.counts != OBJECT_COUNTS_PACK(0, 0, 0, 0)) {
+		pr_err("Invalid object count in %s\n", __func__);
 		return OBJECT_ERROR_INVALID;
+	}
 
 	return release_tzhandle_locked(msg->hdr.tzhandle);
 }
@@ -765,9 +815,10 @@
 	struct sg_table *sgt = NULL;
 
 	if (msg->hdr.counts != OBJECT_COUNTS_PACK(0, 1, 1, 1) ||
-		(buf_len - msg->args[0].b.offset <  msg->args[0].b.size))
+		(buf_len - msg->args[0].b.offset <  msg->args[0].b.size)) {
+		pr_err("Invalid counts received for mapping mem obj\n");
 		return OBJECT_ERROR_INVALID;
-
+	}
 	/* args[0] = BO, args[1] = OI, args[2] = OO */
 	ob = buf + msg->args[0].b.offset;
 	oo =  &msg->args[2].handle;
@@ -777,6 +828,7 @@
 						SMCINVOKE_MEM_RGN_OBJ);
 	if (!mem_obj) {
 		mutex_unlock(&g_smcinvoke_lock);
+		pr_err("Memory object not found\n");
 		return OBJECT_ERROR_BADOBJ;
 	}
 
@@ -786,6 +838,7 @@
 					&smcinvoke_pdev->dev);
 		if (IS_ERR(buf_attach)) {
 			ret = OBJECT_ERROR_KMEM;
+			pr_err("dma buf attach failed, ret: %d\n", ret);
 			goto out;
 		}
 		mem_obj->buf_attach = buf_attach;
@@ -793,6 +846,7 @@
 		sgt = dma_buf_map_attachment(buf_attach, DMA_BIDIRECTIONAL);
 		if (IS_ERR(sgt)) {
 			ret = OBJECT_ERROR_KMEM;
+			pr_err("mapping dma buffers failed, ret: %d\n", ret);
 			goto out;
 		}
 		mem_obj->sgt = sgt;
@@ -800,12 +854,14 @@
 		/* contiguous only => nents=1 */
 		if (sgt->nents != 1) {
 			ret = OBJECT_ERROR_INVALID;
+			pr_err("sg enries are not contigous, ret: %d\n", ret);
 			goto out;
 		}
 		mem_obj->p_addr = sg_dma_address(sgt->sgl);
 		mem_obj->p_addr_len = sgt->sgl->length;
 		if (!mem_obj->p_addr) {
 			ret = OBJECT_ERROR_INVALID;
+			pr_err("invalid physical address, ret: %d\n", ret);
 			goto out;
 		}
 		mem_obj->mem_map_obj_id = next_mem_map_obj_id_locked();
@@ -835,6 +891,7 @@
 		cb_req->result = OBJECT_OK;
 		break;
 	default:
+		pr_err(" invalid operation for tz kernel object\n");
 		cb_req->result = OBJECT_ERROR_INVALID;
 		break;
 	}
@@ -862,8 +919,10 @@
 	struct smcinvoke_tzcb_req *cb_req = NULL, *tmp_cb_req = NULL;
 	struct smcinvoke_server_info *srvr_info = NULL;
 
-	if (buf_len < sizeof(struct smcinvoke_tzcb_req))
+	if (buf_len < sizeof(struct smcinvoke_tzcb_req)) {
+		pr_err("smaller buffer length : %u\n", buf_len);
 		return;
+	}
 
 	cb_req = buf;
 
@@ -873,6 +932,7 @@
 	} else if (TZHANDLE_IS_MEM_OBJ(cb_req->hdr.tzhandle)) {
 		return process_mem_obj(buf, buf_len);
 	} else if (!TZHANDLE_IS_CB_OBJ(cb_req->hdr.tzhandle)) {
+		pr_err("Request object is not a callback object\n");
 		cb_req->result = OBJECT_ERROR_INVALID;
 		return;
 	}
@@ -886,12 +946,16 @@
 	if (!tmp_cb_req) {
 		/* we need to return error to caller so fill up result */
 		cb_req->result = OBJECT_ERROR_KMEM;
+		pr_err("failed to create copy of request, set result: %d\n",
+							cb_req->result);
 		return;
 	}
 
 	cb_txn = kzalloc(sizeof(*cb_txn), GFP_KERNEL);
 	if (!cb_txn) {
 		cb_req->result = OBJECT_ERROR_KMEM;
+		pr_err("failed to allocate memory for request, result: %d\n",
+							cb_req->result);
 		kfree(tmp_cb_req);
 		return;
 	}
@@ -905,10 +969,12 @@
 	kref_init(&cb_txn->ref_cnt);
 
 	mutex_lock(&g_smcinvoke_lock);
-	srvr_info = find_cb_server_locked(
+	++cb_reqs_inflight;
+	srvr_info = get_cb_server_locked(
 				TZHANDLE_GET_SERVER(cb_req->hdr.tzhandle));
 	if (!srvr_info || srvr_info->state == SMCINVOKE_SERVER_STATE_DEFUNCT) {
 		/* ret equals Object_ERROR_DEFUNCT, at this point go to out */
+		pr_err("sever is either invalid or defunct\n");
 		mutex_unlock(&g_smcinvoke_lock);
 		goto out;
 	}
@@ -920,10 +986,12 @@
 	 * we need not worry that server_info will be deleted because as long
 	 * as this CBObj is served by this server, srvr_info will be valid.
 	 */
-	wake_up_interruptible(&srvr_info->req_wait_q);
-	ret = wait_event_interruptible(srvr_info->rsp_wait_q,
+	if (wq_has_sleeper(&srvr_info->req_wait_q)) {
+		wake_up_interruptible_all(&srvr_info->req_wait_q);
+		ret = wait_event_interruptible(srvr_info->rsp_wait_q,
 			(cb_txn->state == SMCINVOKE_REQ_PROCESSED) ||
 			(srvr_info->state == SMCINVOKE_SERVER_STATE_DEFUNCT));
+	}
 out:
 	/*
 	 * we could be here because of either: a. Req is PROCESSED
@@ -940,12 +1008,16 @@
 	} else if (!srvr_info ||
 		srvr_info->state == SMCINVOKE_SERVER_STATE_DEFUNCT) {
 		cb_req->result = OBJECT_ERROR_DEFUNCT;
+		pr_err("server invalid, res: %d\n", cb_req->result);
 	} else {
 		pr_debug("%s wait_event interrupted ret = %d\n", __func__, ret);
 		cb_req->result = OBJECT_ERROR_ABORT;
 	}
+	--cb_reqs_inflight;
 	memcpy(buf, cb_req, buf_len);
 	kref_put(&cb_txn->ref_cnt, delete_cb_txn);
+	if (srvr_info)
+		kref_put(&srvr_info->ref_cnt, destroy_cb_server);
 	mutex_unlock(&g_smcinvoke_lock);
 }
 
@@ -1414,18 +1486,21 @@
 	struct smcinvoke_server server_req = {0};
 	struct smcinvoke_server_info *server_info = NULL;
 
-	if (_IOC_SIZE(cmd) != sizeof(server_req))
+	if (_IOC_SIZE(cmd) != sizeof(server_req)) {
+		pr_err("invalid command size received for server request\n");
 		return -EINVAL;
-
+	}
 	ret = copy_from_user(&server_req, (void __user *)(uintptr_t)arg,
 					sizeof(server_req));
-	if (ret)
+	if (ret) {
+		pr_err("copying server request from user failed\n");
 		return -EFAULT;
-
+	}
 	server_info = kzalloc(sizeof(*server_info), GFP_KERNEL);
 	if (!server_info)
 		return -ENOMEM;
 
+	kref_init(&server_info->ref_cnt);
 	init_waitqueue_head(&server_info->req_wait_q);
 	init_waitqueue_head(&server_info->rsp_wait_q);
 	server_info->cb_buf_size = server_req.cb_buf_size;
@@ -1446,7 +1521,7 @@
 				server_info->server_id, &server_fd);
 
 	if (ret)
-		destroy_cb_server(server_info->server_id);
+		release_cb_server(server_info->server_id);
 
 	return server_fd;
 }
@@ -1455,31 +1530,44 @@
 						unsigned long arg)
 {
 	int ret = -1;
-	sigset_t pending_sig;
 	struct smcinvoke_file_data *server_obj = filp->private_data;
 	struct smcinvoke_accept user_args = {0};
 	struct smcinvoke_cb_txn *cb_txn = NULL;
 	struct smcinvoke_server_info *server_info = NULL;
 
-	if (_IOC_SIZE(cmd) != sizeof(struct smcinvoke_accept))
+	if (_IOC_SIZE(cmd) != sizeof(struct smcinvoke_accept)) {
+		pr_err("command size invalid for accept request\n");
 		return -EINVAL;
+	}
 
 	if (copy_from_user(&user_args, (void __user *)arg,
-					sizeof(struct smcinvoke_accept)))
+					sizeof(struct smcinvoke_accept))) {
+		pr_err("copying accept request from user failed\n");
 		return -EFAULT;
+	}
 
-	if (user_args.argsize != sizeof(union smcinvoke_arg))
+	if (user_args.argsize != sizeof(union smcinvoke_arg)) {
+		pr_err("arguments size is invalid for accept thread\n");
 		return -EINVAL;
+	}
 
 	/* ACCEPT is available only on server obj */
-	if (server_obj->context_type != SMCINVOKE_OBJ_TYPE_SERVER)
+	if (server_obj->context_type != SMCINVOKE_OBJ_TYPE_SERVER) {
+		pr_err("invalid object type received for accept req\n");
 		return -EPERM;
+	}
 
 	mutex_lock(&g_smcinvoke_lock);
-	server_info = find_cb_server_locked(server_obj->server_id);
+	server_info = get_cb_server_locked(server_obj->server_id);
 	mutex_unlock(&g_smcinvoke_lock);
-	if (!server_info)
+	if (!server_info) {
+		pr_err("No matching server with server id : %u found\n",
+						server_obj->server_id);
 		return -EINVAL;
+	}
+
+	if (server_info->state == SMCINVOKE_SERVER_STATE_DEFUNCT)
+		server_info->state = 0;
 
 	/* First check if it has response otherwise wait for req */
 	if (user_args.has_resp) {
@@ -1492,10 +1580,13 @@
 		 * invoke thread died while server was processing cb req.
 		 * if invoke thread dies, it would remove req from Q. So
 		 * no matching cb_txn would be on Q and hence NULL cb_txn.
+		 * In this case, we want this thread to come back and start
+		 * waiting for new cb requests, hence return EAGAIN here
 		 */
 		if (!cb_txn) {
 			pr_err("%s txn %d either invalid or removed from Q\n",
 					__func__, user_args.txn_id);
+			ret = -EAGAIN;
 			goto out;
 		}
 		ret = marshal_out_tzcb_req(&user_args, cb_txn,
@@ -1534,17 +1625,12 @@
 			 * server_info invalid. Other accept/invoke threads are
 			 * using server_info and would crash. So dont do that.
 			 */
-			pending_sig = (&current->pending)->signal;
-			if (sigismember(&pending_sig, SIGKILL)) {
-				mutex_lock(&g_smcinvoke_lock);
-				server_info->state =
-					SMCINVOKE_SERVER_STATE_DEFUNCT;
-				wake_up_interruptible(&server_info->rsp_wait_q);
-				mutex_unlock(&g_smcinvoke_lock);
-			}
+			mutex_lock(&g_smcinvoke_lock);
+			server_info->state = SMCINVOKE_SERVER_STATE_DEFUNCT;
+			mutex_unlock(&g_smcinvoke_lock);
+			wake_up_interruptible(&server_info->rsp_wait_q);
 			goto out;
 		}
-
 		mutex_lock(&g_smcinvoke_lock);
 		cb_txn = find_cbtxn_locked(server_info,
 						SMCINVOKE_NEXT_AVAILABLE_TXN,
@@ -1555,6 +1641,7 @@
 			ret = marshal_in_tzcb_req(cb_txn, &user_args,
 							server_obj->server_id);
 			if (ret) {
+				pr_err("failed to marshal in the callback request\n");
 				cb_txn->cb_req->result = OBJECT_ERROR_UNAVAIL;
 				cb_txn->state = SMCINVOKE_REQ_PROCESSED;
 				kref_put(&cb_txn->ref_cnt, delete_cb_txn);
@@ -1571,6 +1658,12 @@
 		}
 	} while (!cb_txn);
 out:
+	if (server_info)
+		kref_put(&server_info->ref_cnt, destroy_cb_server);
+
+	if (ret && ret != -ERESTARTSYS)
+		pr_err("accept thread returning with ret: %d\n", ret);
+
 	return ret;
 }
 
@@ -1596,18 +1689,26 @@
 	int32_t tzhandles_to_release[OBJECT_COUNTS_MAX_OO] = {0};
 	bool tz_acked = false;
 
-	if (_IOC_SIZE(cmd) != sizeof(req))
+	if (_IOC_SIZE(cmd) != sizeof(req)) {
+		pr_err("command size for invoke req is invalid\n");
 		return -EINVAL;
+	}
 
-	if (tzobj->context_type != SMCINVOKE_OBJ_TYPE_TZ_OBJ)
+	if (tzobj->context_type != SMCINVOKE_OBJ_TYPE_TZ_OBJ) {
+		pr_err("object type for invoke req is invalid\n");
 		return -EPERM;
+	}
 
 	ret = copy_from_user(&req, (void __user *)arg, sizeof(req));
-	if (ret)
+	if (ret) {
+		pr_err("copying invoke req failed\n");
 		return -EFAULT;
+	}
 
-	if (req.argsize != sizeof(union smcinvoke_arg))
+	if (req.argsize != sizeof(union smcinvoke_arg)) {
+		pr_err("arguments size for invoke req is invalid\n");
 		return -EINVAL;
+	}
 
 	nr_args = OBJECT_COUNTS_NUM_buffers(req.counts) +
 			OBJECT_COUNTS_NUM_objects(req.counts);
@@ -1630,6 +1731,7 @@
 	ret = qtee_shmbridge_allocate_shm(inmsg_size, &in_shm);
 	if (ret) {
 		ret = -ENOMEM;
+		pr_err("shmbridge alloc failed for in msg in invoke req\n");
 		goto out;
 	}
 	in_msg = in_shm.vaddr;
@@ -1640,14 +1742,17 @@
 	ret = qtee_shmbridge_allocate_shm(outmsg_size, &out_shm);
 	if (ret) {
 		ret = -ENOMEM;
+		pr_err("shmbridge alloc failed for out msg in invoke req\n");
 		goto out;
 	}
 	out_msg = out_shm.vaddr;
 
 	ret = marshal_in_invoke_req(&req, args_buf, tzobj->tzhandle, in_msg,
 			inmsg_size, filp_to_release, tzhandles_to_release);
-	if (ret)
+	if (ret) {
+		pr_err("failed to marshal in invoke req, ret :%d\n", ret);
 		goto out;
+	}
 
 	ret = prepare_send_scm_msg(in_msg, in_shm.paddr, inmsg_size,
 					out_msg, out_shm.paddr, outmsg_size,
@@ -1657,8 +1762,10 @@
 	 * If scm_call is success, TZ owns responsibility to release
 	 * refs for local objs.
 	 */
-	if (!tz_acked)
+	if (!tz_acked) {
+		pr_debug("scm call successful\n");
 		goto out;
+	}
 	memset(tzhandles_to_release, 0, sizeof(tzhandles_to_release));
 
 	/*
@@ -1689,6 +1796,10 @@
 	qtee_shmbridge_free_shm(&in_shm);
 	qtee_shmbridge_free_shm(&out_shm);
 	kfree(args_buf);
+
+	if (ret)
+		pr_err("invoke thread returning with ret = %d\n", ret);
+
 	return ret;
 }
 
@@ -1732,26 +1843,14 @@
 	return 0;
 }
 
-static int destroy_cb_server(uint16_t server_id)
+static int release_cb_server(uint16_t server_id)
 {
 	struct smcinvoke_server_info *server = NULL;
 
 	mutex_lock(&g_smcinvoke_lock);
 	server = find_cb_server_locked(server_id);
-	if (server) {
-		if (!list_empty(&server->pending_cbobjs)) {
-			server->state = SMCINVOKE_SERVER_STATE_DEFUNCT;
-			wake_up_interruptible(&server->rsp_wait_q);
-			/*
-			 * we dont worry about threads waiting on req_wait_q
-			 * because server can't be closed as long as there is
-			 * atleast one accept thread active
-			 */
-		} else {
-			hash_del(&server->hash);
-			kfree(server);
-		}
-	}
+	if (server)
+		kref_put(&server->ref_cnt, destroy_cb_server);
 	mutex_unlock(&g_smcinvoke_lock);
 	return 0;
 }
@@ -1769,7 +1868,7 @@
 	struct qtee_shm in_shm = {0}, out_shm = {0};
 
 	if (file_data->context_type == SMCINVOKE_OBJ_TYPE_SERVER) {
-		ret = destroy_cb_server(file_data->server_id);
+		ret = release_cb_server(file_data->server_id);
 		goto out;
 	}
 
@@ -1781,12 +1880,14 @@
 	ret = qtee_shmbridge_allocate_shm(SMCINVOKE_TZ_MIN_BUF_SIZE, &in_shm);
 	if (ret) {
 		ret = -ENOMEM;
+		pr_err("shmbridge alloc failed for in msg in release\n");
 		goto out;
 	}
 
 	ret = qtee_shmbridge_allocate_shm(SMCINVOKE_TZ_MIN_BUF_SIZE, &out_shm);
 	if (ret) {
 		ret = -ENOMEM;
+		pr_err("shmbridge alloc failed for out msg in release\n");
 		goto out;
 	}
 
@@ -1846,6 +1947,7 @@
 		goto exit_destroy_device;
 	}
 	smcinvoke_pdev = pdev;
+	cb_reqs_inflight = 0;
 
 	return  0;
 
@@ -1869,6 +1971,22 @@
 	return 0;
 }
 
+static int __maybe_unused smcinvoke_suspend(struct platform_device *pdev,
+					pm_message_t state)
+{
+	if (cb_reqs_inflight) {
+		pr_err("Failed to suspend smcinvoke driver\n");
+		return -EIO;
+	}
+
+	return 0;
+}
+
+static int __maybe_unused smcinvoke_resume(struct platform_device *pdev)
+{
+	return 0;
+}
+
 static const struct of_device_id smcinvoke_match[] = {
 	{
 		.compatible = "qcom,smcinvoke",
@@ -1879,6 +1997,8 @@
 static struct platform_driver smcinvoke_plat_driver = {
 	.probe = smcinvoke_probe,
 	.remove = smcinvoke_remove,
+	.suspend = smcinvoke_suspend,
+	.resume = smcinvoke_resume,
 	.driver = {
 		.name = "smcinvoke",
 		.of_match_table = smcinvoke_match,
diff --git a/drivers/soc/qcom/smem.c b/drivers/soc/qcom/smem.c
index 7888648..b5638df 100644
--- a/drivers/soc/qcom/smem.c
+++ b/drivers/soc/qcom/smem.c
@@ -1,7 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
  * Copyright (c) 2015, Sony Mobile Communications AB.
- * Copyright (c) 2012-2013, 2018-2019 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2013, 2018-2020 The Linux Foundation. All rights reserved.
  */
 
 #include <linux/hwspinlock.h>
@@ -192,6 +192,19 @@
 	__le32 offset_free_cached;
 	__le32 reserved[3];
 };
+/**
+ * struct smem_partition_desc - descriptor for partition
+ * @virt_base:	starting virtual address of partition
+ * @phys_base:	starting physical address of partition
+ * @cacheline:	alignment for "cached" entries
+ * @size:	size of partition
+ */
+struct smem_partition_desc {
+	void __iomem *virt_base;
+	u32 phys_base;
+	u32 cacheline;
+	u32 size;
+};
 
 static const u8 SMEM_PART_MAGIC[] = { 0x24, 0x50, 0x52, 0x54 };
 
@@ -248,9 +261,9 @@
  * struct qcom_smem - device data for the smem device
  * @dev:	device pointer
  * @hwlock:	reference to a hwspinlock
- * @global_partition_entry: pointer to global partition entry when in use
- * @ptable_entries: list of pointers to partitions table entry of current
- *		processor/host
+ * @ptable_base: virtual base of partition table
+ * @global_partition_desc: descriptor for global partition when in use
+ * @partition_desc: list of partition descriptor of current processor/host
  * @item_count: max accepted item number
  * @num_regions: number of @regions
  * @regions:	list of the memory regions defining the shared memory
@@ -260,9 +273,10 @@
 
 	struct hwspinlock *hwlock;
 
-	struct smem_ptable_entry *global_partition_entry;
-	struct smem_ptable_entry *ptable_entries[SMEM_HOST_COUNT];
 	u32 item_count;
+	struct smem_ptable *ptable_base;
+	struct smem_partition_desc global_partition_desc;
+	struct smem_partition_desc partition_desc[SMEM_HOST_COUNT];
 
 	unsigned num_regions;
 	struct smem_region regions[0];
@@ -274,12 +288,6 @@
 /* Timeout (ms) for the trylock of remote spinlocks */
 #define HWSPINLOCK_TIMEOUT	1000
 
-static struct smem_partition_header *
-ptable_entry_to_phdr(struct smem_ptable_entry *entry)
-{
-	return __smem->regions[0].virt_base + le32_to_cpu(entry->offset);
-}
-
 static struct smem_private_entry *
 phdr_to_last_uncached_entry(struct smem_partition_header *phdr)
 {
@@ -346,7 +354,7 @@
 }
 
 static int qcom_smem_alloc_private(struct qcom_smem *smem,
-				   struct smem_ptable_entry *entry,
+				   struct smem_partition_desc *p_desc,
 				   unsigned item,
 				   size_t size)
 {
@@ -356,8 +364,8 @@
 	void *cached;
 	void *p_end;
 
-	phdr = ptable_entry_to_phdr(entry);
-	p_end = (void *)phdr + le32_to_cpu(entry->size);
+	phdr = p_desc->virt_base;
+	p_end = (void *)phdr + p_desc->size;
 
 	hdr = phdr_to_first_uncached_entry(phdr);
 	end = phdr_to_last_uncached_entry(phdr);
@@ -450,7 +458,7 @@
  */
 int qcom_smem_alloc(unsigned host, unsigned item, size_t size)
 {
-	struct smem_ptable_entry *entry;
+	struct smem_partition_desc *p_desc;
 	unsigned long flags;
 	int ret;
 
@@ -472,12 +480,12 @@
 	if (ret)
 		return ret;
 
-	if (host < SMEM_HOST_COUNT && __smem->ptable_entries[host]) {
-		entry = __smem->ptable_entries[host];
-		ret = qcom_smem_alloc_private(__smem, entry, item, size);
-	} else if (__smem->global_partition_entry) {
-		entry = __smem->global_partition_entry;
-		ret = qcom_smem_alloc_private(__smem, entry, item, size);
+	if (host < SMEM_HOST_COUNT && __smem->partition_desc[host].virt_base) {
+		p_desc = &__smem->partition_desc[host];
+		ret = qcom_smem_alloc_private(__smem, p_desc, item, size);
+	} else if (__smem->global_partition_desc.virt_base) {
+		p_desc = &__smem->global_partition_desc;
+		ret = qcom_smem_alloc_private(__smem, p_desc, item, size);
 	} else {
 		ret = qcom_smem_alloc_global(__smem, item, size);
 	}
@@ -528,22 +536,20 @@
 }
 
 static void *qcom_smem_get_private(struct qcom_smem *smem,
-				   struct smem_ptable_entry *entry,
+				   struct smem_partition_desc *p_desc,
 				   unsigned item,
 				   size_t *size)
 {
 	struct smem_private_entry *e, *end;
 	struct smem_partition_header *phdr;
 	void *item_ptr, *p_end;
-	u32 partition_size;
 	size_t cacheline;
 	u32 padding_data;
 	u32 e_size;
 
-	phdr = ptable_entry_to_phdr(entry);
-	partition_size = le32_to_cpu(entry->size);
-	p_end = (void *)phdr + partition_size;
-	cacheline = le32_to_cpu(entry->cacheline);
+	phdr = p_desc->virt_base;
+	p_end = (void *)phdr + p_desc->size;
+	cacheline = p_desc->cacheline;
 
 	e = phdr_to_first_uncached_entry(phdr);
 	end = phdr_to_last_uncached_entry(phdr);
@@ -560,7 +566,7 @@
 				e_size = le32_to_cpu(e->size);
 				padding_data = le16_to_cpu(e->padding_data);
 
-				if (e_size < partition_size
+				if (e_size < p_desc->size
 				    && padding_data < e_size)
 					*size = e_size - padding_data;
 				else
@@ -596,7 +602,7 @@
 				e_size = le32_to_cpu(e->size);
 				padding_data = le16_to_cpu(e->padding_data);
 
-				if (e_size < partition_size
+				if (e_size < p_desc->size
 				    && padding_data < e_size)
 					*size = e_size - padding_data;
 				else
@@ -635,7 +641,7 @@
  */
 void *qcom_smem_get(unsigned host, unsigned item, size_t *size)
 {
-	struct smem_ptable_entry *entry;
+	struct smem_partition_desc *p_desc;
 	unsigned long flags;
 	int ret;
 	void *ptr = ERR_PTR(-EPROBE_DEFER);
@@ -652,12 +658,12 @@
 	if (ret)
 		return ERR_PTR(ret);
 
-	if (host < SMEM_HOST_COUNT && __smem->ptable_entries[host]) {
-		entry = __smem->ptable_entries[host];
-		ptr = qcom_smem_get_private(__smem, entry, item, size);
-	} else if (__smem->global_partition_entry) {
-		entry = __smem->global_partition_entry;
-		ptr = qcom_smem_get_private(__smem, entry, item, size);
+	if (host < SMEM_HOST_COUNT && __smem->partition_desc[host].virt_base) {
+		p_desc = &__smem->partition_desc[host];
+		ptr = qcom_smem_get_private(__smem, p_desc, item, size);
+	} else if (__smem->global_partition_desc.virt_base) {
+		p_desc = &__smem->global_partition_desc;
+		ptr = qcom_smem_get_private(__smem, p_desc, item, size);
 	} else {
 		ptr = qcom_smem_get_global(__smem, item, size);
 	}
@@ -679,30 +685,30 @@
 int qcom_smem_get_free_space(unsigned host)
 {
 	struct smem_partition_header *phdr;
-	struct smem_ptable_entry *entry;
+	struct smem_partition_desc *p_desc;
 	struct smem_header *header;
 	unsigned ret;
 
 	if (!__smem)
 		return -EPROBE_DEFER;
 
-	if (host < SMEM_HOST_COUNT && __smem->ptable_entries[host]) {
-		entry = __smem->ptable_entries[host];
-		phdr = ptable_entry_to_phdr(entry);
+	if (host < SMEM_HOST_COUNT && __smem->partition_desc[host].virt_base) {
+		p_desc = &__smem->partition_desc[host];
+		phdr = p_desc->virt_base;
 
 		ret = le32_to_cpu(phdr->offset_free_cached) -
 		      le32_to_cpu(phdr->offset_free_uncached);
 
-		if (ret > le32_to_cpu(entry->size))
+		if (ret > p_desc->size)
 			return -EINVAL;
-	} else if (__smem->global_partition_entry) {
-		entry = __smem->global_partition_entry;
-		phdr = ptable_entry_to_phdr(entry);
+	} else if (__smem->global_partition_desc.virt_base) {
+		p_desc = &__smem->global_partition_desc;
+		phdr = p_desc->virt_base;
 
 		ret = le32_to_cpu(phdr->offset_free_cached) -
 		      le32_to_cpu(phdr->offset_free_uncached);
 
-		if (ret > le32_to_cpu(entry->size))
+		if (ret > p_desc->size)
 			return -EINVAL;
 	} else {
 		header = __smem->regions[0].virt_base;
@@ -716,6 +722,15 @@
 }
 EXPORT_SYMBOL(qcom_smem_get_free_space);
 
+static int addr_in_range(void *virt_base, unsigned int size, void *addr)
+{
+	if (virt_base && addr >= virt_base &&
+			addr < virt_base + size)
+		return 1;
+
+	return 0;
+}
+
 /**
  * qcom_smem_virt_to_phys() - return the physical address associated
  * with an smem item pointer (previously returned by qcom_smem_get()
@@ -725,17 +740,36 @@
  */
 phys_addr_t qcom_smem_virt_to_phys(void *p)
 {
-	unsigned i;
+	struct smem_partition_desc *p_desc;
+	struct smem_region *area;
+	u64 offset;
+	u32 i;
+
+	for (i = 0; i < SMEM_HOST_COUNT; i++) {
+		p_desc = &__smem->partition_desc[i];
+
+		if (addr_in_range(p_desc->virt_base, p_desc->size, p)) {
+			offset = p - p_desc->virt_base;
+
+			return (phys_addr_t)p_desc->phys_base + offset;
+		}
+	}
+
+	p_desc = &__smem->global_partition_desc;
+
+	if (addr_in_range(p_desc->virt_base, p_desc->size, p)) {
+		offset = p - p_desc->virt_base;
+
+		return (phys_addr_t)p_desc->phys_base + offset;
+	}
 
 	for (i = 0; i < __smem->num_regions; i++) {
-		struct smem_region *region = &__smem->regions[i];
+		area = &__smem->regions[i];
 
-		if (p < region->virt_base)
-			continue;
-		if (p < region->virt_base + region->size) {
-			u64 offset = p - region->virt_base;
+		if (addr_in_range(area->virt_base, area->size, p)) {
+			offset = p - area->virt_base;
 
-			return (phys_addr_t)region->aux_base + offset;
+			return (phys_addr_t)area->aux_base + offset;
 		}
 	}
 
@@ -759,7 +793,7 @@
 	struct smem_ptable *ptable;
 	u32 version;
 
-	ptable = smem->regions[0].virt_base + smem->regions[0].size - SZ_4K;
+	ptable = smem->ptable_base;
 	if (memcmp(ptable->magic, SMEM_PTABLE_MAGIC, sizeof(ptable->magic)))
 		return ERR_PTR(-ENOENT);
 
@@ -793,11 +827,12 @@
 	struct smem_partition_header *header;
 	struct smem_ptable_entry *entry;
 	struct smem_ptable *ptable;
+	u32 phys_addr;
 	u32 host0, host1, size;
 	bool found = false;
 	int i;
 
-	if (smem->global_partition_entry) {
+	if (smem->global_partition_desc.virt_base) {
 		dev_err(smem->dev, "Already found the global partition\n");
 		return -EINVAL;
 	}
@@ -827,7 +862,12 @@
 		return -EINVAL;
 	}
 
-	header = smem->regions[0].virt_base + le32_to_cpu(entry->offset);
+	phys_addr = smem->regions[0].aux_base + le32_to_cpu(entry->offset);
+	header = devm_ioremap_wc(smem->dev,
+				  phys_addr, le32_to_cpu(entry->size));
+	if (!header)
+		return -ENOMEM;
+
 	host0 = le16_to_cpu(header->host0);
 	host1 = le16_to_cpu(header->host1);
 
@@ -853,7 +893,10 @@
 		return -EINVAL;
 	}
 
-	smem->global_partition_entry = entry;
+	smem->global_partition_desc.virt_base = (void __iomem *)header;
+	smem->global_partition_desc.phys_base = phys_addr;
+	smem->global_partition_desc.size = le32_to_cpu(entry->size);
+	smem->global_partition_desc.cacheline = le32_to_cpu(entry->cacheline);
 
 	return 0;
 }
@@ -864,6 +907,7 @@
 	struct smem_partition_header *header;
 	struct smem_ptable_entry *entry;
 	struct smem_ptable *ptable;
+	u32 phys_addr;
 	unsigned int remote_host;
 	u32 host0, host1;
 	int i;
@@ -898,14 +942,20 @@
 			return -EINVAL;
 		}
 
-		if (smem->ptable_entries[remote_host]) {
+		if (smem->partition_desc[remote_host].virt_base) {
 			dev_err(smem->dev,
 				"Already found a partition for host %d\n",
 				remote_host);
 			return -EINVAL;
 		}
 
-		header = smem->regions[0].virt_base + le32_to_cpu(entry->offset);
+		phys_addr = smem->regions[0].aux_base +
+				le32_to_cpu(entry->offset);
+		header = devm_ioremap_wc(smem->dev,
+					  phys_addr, le32_to_cpu(entry->size));
+		if (!header)
+			return -ENOMEM;
+
 		host0 = le16_to_cpu(header->host0);
 		host1 = le16_to_cpu(header->host1);
 
@@ -940,7 +990,13 @@
 			return -EINVAL;
 		}
 
-		smem->ptable_entries[remote_host] = entry;
+		smem->partition_desc[remote_host].virt_base =
+						(void __iomem *)header;
+		smem->partition_desc[remote_host].phys_base = phys_addr;
+		smem->partition_desc[remote_host].size =
+						le32_to_cpu(entry->size);
+		smem->partition_desc[remote_host].cacheline =
+						le32_to_cpu(entry->cacheline);
 	}
 
 	return 0;
@@ -973,6 +1029,61 @@
 	return 0;
 }
 
+static int qcom_smem_map_toc(struct qcom_smem *smem, struct device *dev,
+				const char *name, int i)
+{
+	struct device_node *np;
+	struct resource r;
+	int ret;
+
+	np = of_parse_phandle(dev->of_node, name, 0);
+	if (!np) {
+		dev_err(dev, "No %s specified\n", name);
+		return -EINVAL;
+	}
+
+	ret = of_address_to_resource(np, 0, &r);
+	of_node_put(np);
+	if (ret)
+		return ret;
+
+	smem->regions[i].aux_base = (u32)r.start;
+	smem->regions[i].size = resource_size(&r);
+	/* map starting 4K for smem header */
+	smem->regions[i].virt_base = devm_ioremap_wc(dev, r.start, SZ_4K);
+	/* map last 4k for toc */
+	smem->ptable_base = devm_ioremap_wc(dev,
+				r.start + resource_size(&r) - SZ_4K, SZ_4K);
+
+	if (!smem->regions[i].virt_base || !smem->ptable_base)
+		return -ENOMEM;
+
+	return 0;
+}
+
+static int qcom_smem_mamp_legacy(struct qcom_smem *smem)
+{
+	struct smem_header *header;
+	u32 phys_addr;
+	u32 p_size;
+
+	phys_addr = smem->regions[0].aux_base;
+	header = smem->regions[0].virt_base;
+	p_size = header->available;
+
+	/* unmap previously mapped starting 4k for smem header */
+	devm_iounmap(smem->dev, smem->regions[0].virt_base);
+
+	smem->regions[0].size = p_size;
+	smem->regions[0].virt_base = devm_ioremap_wc(smem->dev,
+						      phys_addr, p_size);
+
+	if (!smem->regions[0].virt_base)
+		return -ENOMEM;
+
+	return 0;
+}
+
 static int qcom_smem_probe(struct platform_device *pdev)
 {
 	struct smem_header *header;
@@ -995,7 +1106,7 @@
 	smem->dev = &pdev->dev;
 	smem->num_regions = num_regions;
 
-	ret = qcom_smem_map_memory(smem, &pdev->dev, "memory-region", 0);
+	ret = qcom_smem_map_toc(smem, &pdev->dev, "memory-region", 0);
 	if (ret)
 		return ret;
 
@@ -1019,6 +1130,7 @@
 		smem->item_count = qcom_smem_get_item_count(smem);
 		break;
 	case SMEM_GLOBAL_HEAP_VERSION:
+		qcom_smem_mamp_legacy(smem);
 		smem->item_count = SMEM_ITEM_COUNT;
 		break;
 	default:
diff --git a/drivers/soc/qcom/socinfo.c b/drivers/soc/qcom/socinfo.c
index 3d00736..8734243 100644
--- a/drivers/soc/qcom/socinfo.c
+++ b/drivers/soc/qcom/socinfo.c
@@ -328,6 +328,7 @@
 
 	/* Lagoon ID */
 	[434] = {MSM_CPU_LAGOON, "LAGOON"},
+	[459] = {MSM_CPU_LAGOON, "LAGOON"},
 
 	/* Bengalp ID */
 	[445] = {MSM_CPU_BENGALP, "BENGALP"},
diff --git a/drivers/soc/qcom/spcom.c b/drivers/soc/qcom/spcom.c
index 8a9d08f..33b4fbd 100644
--- a/drivers/soc/qcom/spcom.c
+++ b/drivers/soc/qcom/spcom.c
@@ -476,11 +476,9 @@
 			spcom_pr_warn("rpmsg channel is closing\n");
 			ret = -ERESTART;
 			goto exit_err;
-		} else if (ret < 0 || timeleft == -ERESTARTSYS) {
-			spcom_pr_dbg("wait interrupted: ret=%d, timeleft=%ld\n",
-				 ret, timeleft);
-			if (timeleft == -ERESTARTSYS)
-				ret = -ERESTARTSYS;
+		} else if (ret < 0 || timeleft < 0) {
+			spcom_pr_err("rx wait was interrupted!");
+			ret = -EINTR; /* abort, not restartable */
 			goto exit_err;
 		} else if (ch->actual_rx_size) {
 			spcom_pr_dbg("actual_rx_size is [%zu], txn_id %d\n",
@@ -1920,7 +1918,8 @@
 		mutex_unlock(&ch->lock);
 		break;
 	default:
-		spcom_pr_err("ch [%s] unsupported ioctl:%u\n", op->cmd_id);
+		spcom_pr_err("ch [%s] unsupported ioctl:%u\n",
+			name, op->cmd_id);
 		ret = -EINVAL;
 	}
 	spcom_pr_dbg("name=%s, retval=%d\n", name, op->retval);
diff --git a/drivers/soc/qcom/wlan_firmware_service_v01.c b/drivers/soc/qcom/wlan_firmware_service_v01.c
index 022a52c..b027d31 100644
--- a/drivers/soc/qcom/wlan_firmware_service_v01.c
+++ b/drivers/soc/qcom/wlan_firmware_service_v01.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2018-2020, The Linux Foundation. All rights reserved.
  */
 #include <linux/soc/qcom/qmi.h>
 
@@ -513,6 +513,42 @@
 
 struct qmi_elem_info wlfw_msa_ready_ind_msg_v01_ei[] = {
 	{
+		.data_type      = QMI_OPT_FLAG,
+		.elem_len       = 1,
+		.elem_size      = sizeof(u8),
+		.array_type       = NO_ARRAY,
+		.tlv_type       = 0x10,
+		.offset         = offsetof(struct wlfw_msa_ready_ind_msg_v01,
+					   hang_data_addr_offset_valid),
+	},
+	{
+		.data_type      = QMI_UNSIGNED_4_BYTE,
+		.elem_len       = 1,
+		.elem_size      = sizeof(u32),
+		.array_type       = NO_ARRAY,
+		.tlv_type       = 0x10,
+		.offset         = offsetof(struct wlfw_msa_ready_ind_msg_v01,
+					   hang_data_addr_offset),
+	},
+	{
+		.data_type      = QMI_OPT_FLAG,
+		.elem_len       = 1,
+		.elem_size      = sizeof(u8),
+		.array_type       = NO_ARRAY,
+		.tlv_type       = 0x11,
+		.offset         = offsetof(struct wlfw_msa_ready_ind_msg_v01,
+					   hang_data_length_valid),
+	},
+	{
+		.data_type      = QMI_UNSIGNED_2_BYTE,
+		.elem_len       = 1,
+		.elem_size      = sizeof(u16),
+		.array_type       = NO_ARRAY,
+		.tlv_type       = 0x11,
+		.offset         = offsetof(struct wlfw_msa_ready_ind_msg_v01,
+					   hang_data_length),
+	},
+	{
 		.data_type      = QMI_EOTI,
 		.array_type       = NO_ARRAY,
 		.tlv_type       = QMI_COMMON_TLV_TYPE,
diff --git a/drivers/soc/qcom/wlan_firmware_service_v01.h b/drivers/soc/qcom/wlan_firmware_service_v01.h
index 9becb53..a304b09 100644
--- a/drivers/soc/qcom/wlan_firmware_service_v01.h
+++ b/drivers/soc/qcom/wlan_firmware_service_v01.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
 /*
- * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2018-2020, The Linux Foundation. All rights reserved.
  */
 #ifndef WLAN_FIRMWARE_SERVICE_V01_H
 #define WLAN_FIRMWARE_SERVICE_V01_H
@@ -211,9 +211,12 @@
 extern struct qmi_elem_info wlfw_fw_ready_ind_msg_v01_ei[];
 
 struct wlfw_msa_ready_ind_msg_v01 {
-	char placeholder;
+	u8 hang_data_addr_offset_valid;
+	u32 hang_data_addr_offset;
+	u8 hang_data_length_valid;
+	u16 hang_data_length;
 };
-#define WLFW_MSA_READY_IND_MSG_V01_MAX_MSG_LEN 0
+#define WLFW_MSA_READY_IND_MSG_V01_MAX_MSG_LEN 12
 extern struct qmi_elem_info wlfw_msa_ready_ind_msg_v01_ei[];
 
 struct wlfw_pin_connect_result_ind_msg_v01 {
diff --git a/drivers/soc/tegra/Kconfig b/drivers/soc/tegra/Kconfig
index fe44816..8d05e9c 100644
--- a/drivers/soc/tegra/Kconfig
+++ b/drivers/soc/tegra/Kconfig
@@ -76,6 +76,7 @@
 	select PINCTRL_TEGRA210
 	select SOC_TEGRA_FLOWCTRL
 	select SOC_TEGRA_PMC
+	depends on !LTO_CLANG
 	help
 	  Enable support for the NVIDIA Tegra210 SoC. Also known as Tegra X1,
 	  the Tegra210 has four Cortex-A57 cores paired with four Cortex-A53
diff --git a/drivers/staging/android/ion/ion.c b/drivers/staging/android/ion/ion.c
index c7d45dc..d844c31 100644
--- a/drivers/staging/android/ion/ion.c
+++ b/drivers/staging/android/ion/ion.c
@@ -3,7 +3,7 @@
  * drivers/staging/android/ion/ion.c
  *
  * Copyright (C) 2011 Google, Inc.
- * Copyright (c) 2011-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2020, The Linux Foundation. All rights reserved.
  *
  */
 
@@ -39,6 +39,7 @@
 #include "ion_secure_util.h"
 
 static struct ion_device *internal_dev;
+static atomic_long_t total_heap_bytes;
 
 int ion_walk_heaps(int heap_id, enum ion_heap_type type, void *data,
 		   int (*f)(struct ion_heap *heap, void *data))
@@ -160,6 +161,7 @@
 	ion_buffer_add(dev, buffer);
 	mutex_unlock(&dev->buffer_lock);
 	atomic_long_add(len, &heap->total_allocated);
+	atomic_long_add(len, &total_heap_bytes);
 	return buffer;
 
 err1:
@@ -189,6 +191,7 @@
 	mutex_lock(&dev->buffer_lock);
 	rb_erase(&buffer->node, &dev->buffers);
 	mutex_unlock(&dev->buffer_lock);
+	atomic_long_sub(buffer->size, &total_heap_bytes);
 
 	atomic_long_sub(buffer->size, &buffer->heap->total_allocated);
 	if (heap->flags & ION_HEAP_FLAG_DEFER_FREE)
@@ -334,14 +337,14 @@
 	mutex_lock(&buffer->lock);
 	if (map_attrs & DMA_ATTR_SKIP_CPU_SYNC)
 		trace_ion_dma_map_cmo_skip(attachment->dev,
-					   attachment->dmabuf->name,
+					   attachment->dmabuf->buf_name,
 					   ion_buffer_cached(buffer),
 					   hlos_accessible_buffer(buffer),
 					   attachment->dma_map_attrs,
 					   direction);
 	else
 		trace_ion_dma_map_cmo_apply(attachment->dev,
-					    attachment->dmabuf->name,
+					    attachment->dmabuf->buf_name,
 					    ion_buffer_cached(buffer),
 					    hlos_accessible_buffer(buffer),
 					    attachment->dma_map_attrs,
@@ -383,14 +386,14 @@
 	mutex_lock(&buffer->lock);
 	if (map_attrs & DMA_ATTR_SKIP_CPU_SYNC)
 		trace_ion_dma_unmap_cmo_skip(attachment->dev,
-					     attachment->dmabuf->name,
+					     attachment->dmabuf->buf_name,
 					     ion_buffer_cached(buffer),
 					     hlos_accessible_buffer(buffer),
 					     attachment->dma_map_attrs,
 					     direction);
 	else
 		trace_ion_dma_unmap_cmo_apply(attachment->dev,
-					      attachment->dmabuf->name,
+					      attachment->dmabuf->buf_name,
 					      ion_buffer_cached(buffer),
 					      hlos_accessible_buffer(buffer),
 					      attachment->dma_map_attrs,
@@ -635,7 +638,7 @@
 	int ret = 0;
 
 	if (!hlos_accessible_buffer(buffer)) {
-		trace_ion_begin_cpu_access_cmo_skip(NULL, dmabuf->name,
+		trace_ion_begin_cpu_access_cmo_skip(NULL, dmabuf->buf_name,
 						    ion_buffer_cached(buffer),
 						    false, direction,
 						    sync_only_mapped);
@@ -644,8 +647,8 @@
 	}
 
 	if (!(buffer->flags & ION_FLAG_CACHED)) {
-		trace_ion_begin_cpu_access_cmo_skip(NULL, dmabuf->name, false,
-						    true, direction,
+		trace_ion_begin_cpu_access_cmo_skip(NULL, dmabuf->buf_name,
+						    false, true, direction,
 						    sync_only_mapped);
 		goto out;
 	}
@@ -665,12 +668,14 @@
 					    table->nents, direction);
 
 		if (!ret)
-			trace_ion_begin_cpu_access_cmo_apply(dev, dmabuf->name,
+			trace_ion_begin_cpu_access_cmo_apply(dev,
+							     dmabuf->buf_name,
 							     true, true,
 							     direction,
 							     sync_only_mapped);
 		else
-			trace_ion_begin_cpu_access_cmo_skip(dev, dmabuf->name,
+			trace_ion_begin_cpu_access_cmo_skip(dev,
+							    dmabuf->buf_name,
 							    true, true,
 							    direction,
 							    sync_only_mapped);
@@ -683,7 +688,7 @@
 
 		if (!a->dma_mapped) {
 			trace_ion_begin_cpu_access_notmapped(a->dev,
-							     dmabuf->name,
+							     dmabuf->buf_name,
 							     true, true,
 							     direction,
 							     sync_only_mapped);
@@ -701,14 +706,15 @@
 
 		if (!tmp) {
 			trace_ion_begin_cpu_access_cmo_apply(a->dev,
-							     dmabuf->name,
+							     dmabuf->buf_name,
 							     true, true,
 							     direction,
 							     sync_only_mapped);
 		} else {
 			trace_ion_begin_cpu_access_cmo_skip(a->dev,
-							    dmabuf->name, true,
-							    true, direction,
+							    dmabuf->buf_name,
+							    true, true,
+							    direction,
 							    sync_only_mapped);
 			ret = tmp;
 		}
@@ -728,7 +734,7 @@
 	int ret = 0;
 
 	if (!hlos_accessible_buffer(buffer)) {
-		trace_ion_end_cpu_access_cmo_skip(NULL, dmabuf->name,
+		trace_ion_end_cpu_access_cmo_skip(NULL, dmabuf->buf_name,
 						  ion_buffer_cached(buffer),
 						  false, direction,
 						  sync_only_mapped);
@@ -737,7 +743,7 @@
 	}
 
 	if (!(buffer->flags & ION_FLAG_CACHED)) {
-		trace_ion_end_cpu_access_cmo_skip(NULL, dmabuf->name, false,
+		trace_ion_end_cpu_access_cmo_skip(NULL, dmabuf->buf_name, false,
 						  true, direction,
 						  sync_only_mapped);
 		goto out;
@@ -757,12 +763,13 @@
 					       table->nents, direction);
 
 		if (!ret)
-			trace_ion_end_cpu_access_cmo_apply(dev, dmabuf->name,
+			trace_ion_end_cpu_access_cmo_apply(dev,
+							   dmabuf->buf_name,
 							   true, true,
 							   direction,
 							   sync_only_mapped);
 		else
-			trace_ion_end_cpu_access_cmo_skip(dev, dmabuf->name,
+			trace_ion_end_cpu_access_cmo_skip(dev, dmabuf->buf_name,
 							  true, true, direction,
 							  sync_only_mapped);
 		mutex_unlock(&buffer->lock);
@@ -774,7 +781,7 @@
 
 		if (!a->dma_mapped) {
 			trace_ion_end_cpu_access_notmapped(a->dev,
-							   dmabuf->name,
+							   dmabuf->buf_name,
 							   true, true,
 							   direction,
 							   sync_only_mapped);
@@ -791,12 +798,14 @@
 					       a->table->nents, direction);
 
 		if (!tmp) {
-			trace_ion_end_cpu_access_cmo_apply(a->dev, dmabuf->name,
+			trace_ion_end_cpu_access_cmo_apply(a->dev,
+							   dmabuf->buf_name,
 							   true, true,
 							   direction,
 							   sync_only_mapped);
 		} else {
-			trace_ion_end_cpu_access_cmo_skip(a->dev, dmabuf->name,
+			trace_ion_end_cpu_access_cmo_skip(a->dev,
+							  dmabuf->buf_name,
 							  true, true, direction,
 							  sync_only_mapped);
 			ret = tmp;
@@ -842,7 +851,7 @@
 	int ret = 0;
 
 	if (!hlos_accessible_buffer(buffer)) {
-		trace_ion_begin_cpu_access_cmo_skip(NULL, dmabuf->name,
+		trace_ion_begin_cpu_access_cmo_skip(NULL, dmabuf->buf_name,
 						    ion_buffer_cached(buffer),
 						    false, dir,
 						    false);
@@ -851,8 +860,8 @@
 	}
 
 	if (!(buffer->flags & ION_FLAG_CACHED)) {
-		trace_ion_begin_cpu_access_cmo_skip(NULL, dmabuf->name, false,
-						    true, dir,
+		trace_ion_begin_cpu_access_cmo_skip(NULL, dmabuf->buf_name,
+						    false, true, dir,
 						    false);
 		goto out;
 	}
@@ -866,11 +875,13 @@
 					 offset, len, dir, true);
 
 		if (!ret)
-			trace_ion_begin_cpu_access_cmo_apply(dev, dmabuf->name,
+			trace_ion_begin_cpu_access_cmo_apply(dev,
+							     dmabuf->buf_name,
 							     true, true, dir,
 							     false);
 		else
-			trace_ion_begin_cpu_access_cmo_skip(dev, dmabuf->name,
+			trace_ion_begin_cpu_access_cmo_skip(dev,
+							    dmabuf->buf_name,
 							    true, true, dir,
 							    false);
 		mutex_unlock(&buffer->lock);
@@ -882,7 +893,7 @@
 
 		if (!a->dma_mapped) {
 			trace_ion_begin_cpu_access_notmapped(a->dev,
-							     dmabuf->name,
+							     dmabuf->buf_name,
 							     true, true,
 							     dir,
 							     false);
@@ -894,12 +905,12 @@
 
 		if (!tmp) {
 			trace_ion_begin_cpu_access_cmo_apply(a->dev,
-							     dmabuf->name,
+							     dmabuf->buf_name,
 							     true, true, dir,
 							     false);
 		} else {
 			trace_ion_begin_cpu_access_cmo_skip(a->dev,
-							    dmabuf->name,
+							    dmabuf->buf_name,
 							    true, true, dir,
 							    false);
 			ret = tmp;
@@ -921,7 +932,7 @@
 	int ret = 0;
 
 	if (!hlos_accessible_buffer(buffer)) {
-		trace_ion_end_cpu_access_cmo_skip(NULL, dmabuf->name,
+		trace_ion_end_cpu_access_cmo_skip(NULL, dmabuf->buf_name,
 						  ion_buffer_cached(buffer),
 						  false, direction,
 						  false);
@@ -930,7 +941,7 @@
 	}
 
 	if (!(buffer->flags & ION_FLAG_CACHED)) {
-		trace_ion_end_cpu_access_cmo_skip(NULL, dmabuf->name, false,
+		trace_ion_end_cpu_access_cmo_skip(NULL, dmabuf->buf_name, false,
 						  true, direction,
 						  false);
 		goto out;
@@ -945,11 +956,12 @@
 					 offset, len, direction, false);
 
 		if (!ret)
-			trace_ion_end_cpu_access_cmo_apply(dev, dmabuf->name,
+			trace_ion_end_cpu_access_cmo_apply(dev,
+							   dmabuf->buf_name,
 							   true, true,
 							   direction, false);
 		else
-			trace_ion_end_cpu_access_cmo_skip(dev, dmabuf->name,
+			trace_ion_end_cpu_access_cmo_skip(dev, dmabuf->buf_name,
 							  true, true,
 							  direction, false);
 
@@ -962,7 +974,7 @@
 
 		if (!a->dma_mapped) {
 			trace_ion_end_cpu_access_notmapped(a->dev,
-							   dmabuf->name,
+							   dmabuf->buf_name,
 							   true, true,
 							   direction,
 							   false);
@@ -973,12 +985,14 @@
 					 offset, len, direction, false);
 
 		if (!tmp) {
-			trace_ion_end_cpu_access_cmo_apply(a->dev, dmabuf->name,
+			trace_ion_end_cpu_access_cmo_apply(a->dev,
+							   dmabuf->buf_name,
 							   true, true,
 							   direction, false);
 
 		} else {
-			trace_ion_end_cpu_access_cmo_skip(a->dev, dmabuf->name,
+			trace_ion_end_cpu_access_cmo_skip(a->dev,
+							  dmabuf->buf_name,
 							  true, true, direction,
 							  false);
 			ret = tmp;
@@ -1295,6 +1309,56 @@
 }
 EXPORT_SYMBOL(ion_device_add_heap);
 
+static ssize_t
+total_heaps_kb_show(struct kobject *kobj, struct kobj_attribute *attr,
+		    char *buf)
+{
+	u64 size_in_bytes = atomic_long_read(&total_heap_bytes);
+
+	return sprintf(buf, "%llu\n", div_u64(size_in_bytes, 1024));
+}
+
+static ssize_t
+total_pools_kb_show(struct kobject *kobj, struct kobj_attribute *attr,
+		    char *buf)
+{
+	u64 size_in_bytes = ion_page_pool_nr_pages() * PAGE_SIZE;
+
+	return sprintf(buf, "%llu\n", div_u64(size_in_bytes, 1024));
+}
+
+static struct kobj_attribute total_heaps_kb_attr =
+	__ATTR_RO(total_heaps_kb);
+
+static struct kobj_attribute total_pools_kb_attr =
+	__ATTR_RO(total_pools_kb);
+
+static struct attribute *ion_device_attrs[] = {
+	&total_heaps_kb_attr.attr,
+	&total_pools_kb_attr.attr,
+	NULL,
+};
+
+ATTRIBUTE_GROUPS(ion_device);
+
+static int ion_init_sysfs(void)
+{
+	struct kobject *ion_kobj;
+	int ret;
+
+	ion_kobj = kobject_create_and_add("ion", kernel_kobj);
+	if (!ion_kobj)
+		return -ENOMEM;
+
+	ret = sysfs_create_groups(ion_kobj, ion_device_groups);
+	if (ret) {
+		kobject_put(ion_kobj);
+		return ret;
+	}
+
+	return 0;
+}
+
 struct ion_device *ion_device_create(void)
 {
 	struct ion_device *idev;
@@ -1311,8 +1375,13 @@
 	ret = misc_register(&idev->dev);
 	if (ret) {
 		pr_err("ion: failed to register misc device.\n");
-		kfree(idev);
-		return ERR_PTR(ret);
+		goto err_reg;
+	}
+
+	ret = ion_init_sysfs();
+	if (ret) {
+		pr_err("ion: failed to add sysfs attributes.\n");
+		goto err_sysfs;
 	}
 
 	idev->debug_root = debugfs_create_dir("ion", NULL);
@@ -1322,5 +1391,11 @@
 	plist_head_init(&idev->heaps);
 	internal_dev = idev;
 	return idev;
+
+err_sysfs:
+	misc_deregister(&idev->dev);
+err_reg:
+	kfree(idev);
+	return ERR_PTR(ret);
 }
 EXPORT_SYMBOL(ion_device_create);
diff --git a/drivers/staging/android/ion/ion.h b/drivers/staging/android/ion/ion.h
index 0d7bbb0..da143d3 100644
--- a/drivers/staging/android/ion/ion.h
+++ b/drivers/staging/android/ion/ion.h
@@ -461,6 +461,12 @@
 int ion_page_pool_total(struct ion_page_pool *pool, bool high);
 size_t ion_system_heap_secure_page_pool_total(struct ion_heap *heap, int vmid);
 
+#ifdef CONFIG_ION_SYSTEM_HEAP
+long ion_page_pool_nr_pages(void);
+#else
+static inline long ion_page_pool_nr_pages(void) { return 0; }
+#endif
+
 /** ion_page_pool_shrink - shrinks the size of the memory cached in the pool
  * @pool:		the pool
  * @gfp_mask:		the memory type to reclaim
diff --git a/drivers/staging/android/ion/ion_page_pool.c b/drivers/staging/android/ion/ion_page_pool.c
index 4d29320..5b86c5f 100644
--- a/drivers/staging/android/ion/ion_page_pool.c
+++ b/drivers/staging/android/ion/ion_page_pool.c
@@ -12,6 +12,13 @@
 
 #include "ion.h"
 
+/*
+ * We avoid atomic_long_t to minimize cache flushes at the cost of possible
+ * race which would result in a small accounting inaccuracy that we can
+ * tolerate.
+ */
+static long nr_total_pages;
+
 /* do a simple check to see if we are in any low memory situation */
 static bool pool_refill_ok(struct ion_page_pool *pool)
 {
@@ -72,8 +79,9 @@
 	}
 
 	atomic_inc(&pool->count);
-	mod_node_page_state(page_pgdat(page), NR_INDIRECTLY_RECLAIMABLE_BYTES,
-			    (1 << (PAGE_SHIFT + pool->order)));
+	nr_total_pages += 1 << pool->order;
+	mod_node_page_state(page_pgdat(page), NR_KERNEL_MISC_RECLAIMABLE,
+							1 << pool->order);
 	mutex_unlock(&pool->mutex);
 }
 
@@ -115,8 +123,9 @@
 
 	atomic_dec(&pool->count);
 	list_del(&page->lru);
-	mod_node_page_state(page_pgdat(page), NR_INDIRECTLY_RECLAIMABLE_BYTES,
-			    -(1 << (PAGE_SHIFT + pool->order)));
+	nr_total_pages -= 1 << pool->order;
+	mod_node_page_state(page_pgdat(page), NR_KERNEL_MISC_RECLAIMABLE,
+							-(1 << pool->order));
 	return page;
 }
 
@@ -189,6 +198,16 @@
 	return count << pool->order;
 }
 
+#ifdef CONFIG_ION_SYSTEM_HEAP
+long ion_page_pool_nr_pages(void)
+{
+	/* Correct possible overflow caused by racing writes */
+	if (nr_total_pages < 0)
+		nr_total_pages = 0;
+	return nr_total_pages;
+}
+#endif
+
 int ion_page_pool_shrink(struct ion_page_pool *pool, gfp_t gfp_mask,
 			 int nr_to_scan)
 {
diff --git a/drivers/staging/android/ion/ion_system_heap.c b/drivers/staging/android/ion/ion_system_heap.c
index c667518..4e52520 100644
--- a/drivers/staging/android/ion/ion_system_heap.c
+++ b/drivers/staging/android/ion/ion_system_heap.c
@@ -413,11 +413,13 @@
 	buffer->private_flags |= ION_PRIV_FLAG_SHRINKER_FREE;
 
 	if (vmid > 0)
-		ion_hyp_unassign_sg(table, &vmid, 1, true, false);
+		if (ion_hyp_unassign_sg(table, &vmid, 1, true, false))
+			goto err_free_table_sync;
 
 	for_each_sg(table->sgl, sg, table->nents, i)
 		free_buffer_page(sys_heap, buffer, sg_page(sg),
 				 get_order(sg->length));
+err_free_table_sync:
 	if (nents_sync)
 		sg_free_table(&table_sync);
 err_free_sg:
diff --git a/drivers/tee/tee_shm.c b/drivers/tee/tee_shm.c
index 0b9ab1d..8e7b52a 100644
--- a/drivers/tee/tee_shm.c
+++ b/drivers/tee/tee_shm.c
@@ -263,6 +263,7 @@
 	shm->teedev = teedev;
 	shm->ctx = ctx;
 	shm->id = -1;
+	addr = untagged_addr(addr);
 	start = rounddown(addr, PAGE_SIZE);
 	shm->offset = addr - start;
 	shm->size = length;
diff --git a/drivers/thermal/tsens.h b/drivers/thermal/tsens.h
index 036ee11..c09460d 100644
--- a/drivers/thermal/tsens.h
+++ b/drivers/thermal/tsens.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
 /*
- * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
  */
 
 #ifndef __QCOM_TSENS_H__
@@ -214,6 +214,7 @@
 	struct workqueue_struct		*tsens_reinit_work;
 	struct work_struct		therm_fwk_notify;
 	bool				tsens_reinit_wa;
+	int				tsens_reinit_cnt;
 	struct tsens_sensor             sensor[0];
 };
 
diff --git a/drivers/thermal/tsens2xxx.c b/drivers/thermal/tsens2xxx.c
index ef31fcf..941f7f4 100644
--- a/drivers/thermal/tsens2xxx.c
+++ b/drivers/thermal/tsens2xxx.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2012-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/module.h>
@@ -69,6 +69,7 @@
 
 #define TSENS_INIT_ID	0x5
 #define TSENS_RECOVERY_LOOP_COUNT 5
+#define TSENS_RE_INIT_MAX_COUNT   5
 
 static void msm_tsens_convert_temp(int last_temp, int *temp)
 {
@@ -88,6 +89,7 @@
 	unsigned int code, ret, tsens_ret;
 	void __iomem *sensor_addr, *trdy;
 	int last_temp = 0, last_temp2 = 0, last_temp3 = 0, count = 0;
+	static atomic_t in_tsens_reinit;
 
 	if (!sensor)
 		return -EINVAL;
@@ -100,8 +102,14 @@
 
 	if (!((code & TSENS_TM_TRDY_FIRST_ROUND_COMPLETE) >>
 			TSENS_TM_TRDY_FIRST_ROUND_COMPLETE_SHIFT)) {
+		if (atomic_read(&in_tsens_reinit)) {
+			pr_err("%s: tsens re-init is in progress\n", __func__);
+			return -EAGAIN;
+		}
+
 		pr_err("%s: tsens device first round not complete0x%x\n",
 			__func__, code);
+
 		/* Wait for 2.5 ms for tsens controller to recover */
 		do {
 			udelay(500);
@@ -120,9 +128,26 @@
 		if (tmdev->tsens_reinit_wa) {
 			struct scm_desc desc = { 0 };
 
+			if (atomic_read(&in_tsens_reinit)) {
+				pr_err("%s: tsens re-init is in progress\n",
+					__func__);
+				return -EAGAIN;
+			}
+
+			atomic_set(&in_tsens_reinit, 1);
+
 			if (tmdev->ops->dbg)
 				tmdev->ops->dbg(tmdev, 0,
 					TSENS_DBG_LOG_BUS_ID_DATA, NULL);
+
+			if (tmdev->tsens_reinit_cnt >=
+					TSENS_RE_INIT_MAX_COUNT) {
+				pr_err(
+				"%s: TSENS not recovered after %d re-init\n",
+					__func__, tmdev->tsens_reinit_cnt);
+				BUG();
+			}
+
 			/* Make an scm call to re-init TSENS */
 			TSENS_DBG(tmdev, "%s",
 				   "Calling TZ to re-init TSENS\n");
@@ -141,6 +166,9 @@
 					__func__, tsens_ret);
 				BUG();
 			}
+			tmdev->tsens_reinit_cnt++;
+			atomic_set(&in_tsens_reinit, 0);
+
 			/* Notify thermal fwk */
 			list_for_each_entry(tmdev_itr,
 						&tsens_device_list, list) {
@@ -158,6 +186,7 @@
 sensor_read:
 
 	tmdev->trdy_fail_ctr = 0;
+	tmdev->tsens_reinit_cnt = 0;
 
 	code = readl_relaxed_no_log(sensor_addr +
 			(sensor->hw_id << TSENS_STATUS_ADDR_OFFSET));
diff --git a/drivers/tty/serdev/core.c b/drivers/tty/serdev/core.c
index 9db93f5..2a59f33 100644
--- a/drivers/tty/serdev/core.c
+++ b/drivers/tty/serdev/core.c
@@ -30,7 +30,18 @@
 	if (len != -ENODEV)
 		return len;
 
-	return of_device_modalias(dev, buf, PAGE_SIZE);
+	len = of_device_modalias(dev, buf, PAGE_SIZE);
+	if (len != -ENODEV)
+		return len;
+
+	if (dev->parent->parent->bus == &platform_bus_type) {
+		struct platform_device *pdev =
+			to_platform_device(dev->parent->parent);
+
+		len = snprintf(buf, PAGE_SIZE, "platform:%s\n", pdev->name);
+	}
+
+	return len;
 }
 static DEVICE_ATTR_RO(modalias);
 
@@ -44,13 +55,18 @@
 {
 	int rc;
 
-	/* TODO: platform modalias */
-
 	rc = acpi_device_uevent_modalias(dev, env);
 	if (rc != -ENODEV)
 		return rc;
 
-	return of_device_uevent_modalias(dev, env);
+	rc = of_device_uevent_modalias(dev, env);
+	if (rc != -ENODEV)
+		return rc;
+
+	if (dev->parent->parent->bus == &platform_bus_type)
+		rc = dev->parent->parent->bus->uevent(dev->parent->parent, env);
+
+	return rc;
 }
 
 static void serdev_device_release(struct device *dev)
@@ -86,11 +102,17 @@
 	if (!is_serdev_device(dev))
 		return 0;
 
-	/* TODO: platform matching */
 	if (acpi_driver_match_device(dev, drv))
 		return 1;
 
-	return of_driver_match_device(dev, drv);
+	if (of_driver_match_device(dev, drv))
+		return 1;
+
+	if (dev->parent->parent->bus == &platform_bus_type &&
+	    dev->parent->parent->bus->match(dev->parent->parent, drv))
+		return 1;
+
+	return 0;
 }
 
 /**
@@ -564,6 +586,33 @@
 }
 #endif /* CONFIG_ACPI */
 
+static int platform_serdev_register_devices(struct serdev_controller *ctrl)
+{
+	struct serdev_device *serdev;
+	int err;
+
+	if (ctrl->dev.parent->bus != &platform_bus_type)
+		return -ENODEV;
+
+	serdev = serdev_device_alloc(ctrl);
+	if (!serdev) {
+		dev_err(&ctrl->dev, "failed to allocate serdev device for %s\n",
+				    dev_name(ctrl->dev.parent));
+		return -ENOMEM;
+	}
+
+	pm_runtime_no_callbacks(&serdev->dev);
+
+	err = serdev_device_add(serdev);
+	if (err) {
+		dev_err(&serdev->dev,
+			"failure adding device. status %d\n", err);
+		serdev_device_put(serdev);
+	}
+
+	return err;
+}
+
 /**
  * serdev_controller_add() - Add an serdev controller
  * @ctrl:	controller to be registered.
@@ -573,7 +622,7 @@
  */
 int serdev_controller_add(struct serdev_controller *ctrl)
 {
-	int ret_of, ret_acpi, ret;
+	int ret_of, ret_acpi, ret_platform, ret;
 
 	/* Can't register until after driver model init */
 	if (WARN_ON(!is_registered))
@@ -587,9 +636,11 @@
 
 	ret_of = of_serdev_register_devices(ctrl);
 	ret_acpi = acpi_serdev_register_devices(ctrl);
-	if (ret_of && ret_acpi) {
-		dev_dbg(&ctrl->dev, "no devices registered: of:%d acpi:%d\n",
-			ret_of, ret_acpi);
+	ret_platform = platform_serdev_register_devices(ctrl);
+	if (ret_of && ret_acpi && ret_platform) {
+		dev_dbg(&ctrl->dev, "no devices registered: of:%d acpi:%d "
+				    "platform:%d\n",
+				    ret_of, ret_acpi, ret_platform);
 		ret = -ENODEV;
 		goto err_rpm_disable;
 	}
diff --git a/drivers/tty/serdev/serdev-ttyport.c b/drivers/tty/serdev/serdev-ttyport.c
index fa16729..1b04b4b 100644
--- a/drivers/tty/serdev/serdev-ttyport.c
+++ b/drivers/tty/serdev/serdev-ttyport.c
@@ -273,6 +273,11 @@
 	if (!port || !drv || !parent)
 		return ERR_PTR(-ENODEV);
 
+	if (port->console) {
+		/* can't convert tty's that are already in use */
+		return ERR_PTR(-ENODEV);
+	}
+
 	ctrl = serdev_controller_alloc(parent, sizeof(struct serport));
 	if (!ctrl)
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/tty/serial/msm_geni_serial.c b/drivers/tty/serial/msm_geni_serial.c
index e218a134..eadc216 100644
--- a/drivers/tty/serial/msm_geni_serial.c
+++ b/drivers/tty/serial/msm_geni_serial.c
@@ -115,9 +115,29 @@
 #define WAIT_XFER_MIN_TIMEOUT_US	(9000)
 #define IPC_LOG_PWR_PAGES	(6)
 #define IPC_LOG_MISC_PAGES	(10)
-#define IPC_LOG_TX_RX_PAGES	(8)
+#define IPC_LOG_TX_RX_PAGES	(10)
 #define DATA_BYTES_PER_LINE	(32)
 
+#define M_IRQ_BITS		(M_RX_FIFO_WATERMARK_EN | M_RX_FIFO_LAST_EN |\
+				M_CMD_CANCEL_EN | M_CMD_ABORT_EN)
+#define S_IRQ_BITS		(S_RX_FIFO_WATERMARK_EN | S_RX_FIFO_LAST_EN |\
+				S_CMD_CANCEL_EN | S_CMD_ABORT_EN)
+#define DMA_TX_IRQ_BITS		(TX_RESET_DONE | TX_DMA_DONE |\
+				TX_GENI_CANCEL_IRQ)
+#define DMA_RX_IRQ_BITS		(RX_EOT | RX_GENI_CANCEL_IRQ |\
+				RX_RESET_DONE | UART_DMA_RX_ERRS |\
+				UART_DMA_RX_PARITY_ERR | UART_DMA_RX_BREAK |\
+				RX_DMA_DONE)
+
+/* Required for polling for 100 msecs */
+#define POLL_WAIT_TIMEOUT_MSEC	100
+
+/*
+ * Number of iterrations required while polling
+ * where each iterration has a delay of 100 usecs
+ */
+#define POLL_ITERATIONS		1000
+
 #define IPC_LOG_MSG(ctx, x...) do { \
 	if (ctx) \
 		ipc_log_string(ctx, x); \
@@ -136,7 +156,7 @@
 
 struct msm_geni_serial_port {
 	struct uart_port uport;
-	char name[20];
+	const char *name;
 	unsigned int tx_fifo_depth;
 	unsigned int tx_fifo_width;
 	unsigned int rx_fifo_depth;
@@ -176,6 +196,12 @@
 	bool startup_in_progress;
 	bool is_console;
 	bool rumi_platform;
+	bool m_cmd_done;
+	bool s_cmd_done;
+	bool m_cmd;
+	bool s_cmd;
+	struct completion m_cmd_timeout;
+	struct completion s_cmd_timeout;
 };
 
 static const struct uart_ops msm_geni_serial_pops;
@@ -209,6 +235,156 @@
 
 static struct msm_geni_serial_port msm_geni_console_port;
 static struct msm_geni_serial_port msm_geni_serial_ports[GENI_UART_NR_PORTS];
+static void msm_geni_serial_handle_isr(struct uart_port *uport);
+
+/*
+ * The below API is required to check if uport->lock (spinlock)
+ * is taken by the serial layer or not. If the lock is not taken
+ * then we can rely on the isr to be fired and if the lock is taken
+ * by the serial layer then we need to poll for the interrupts.
+ *
+ * Returns true(1) if spinlock is already taken by framework (serial layer)
+ * Return false(0) if spinlock is not taken by framework.
+ */
+static int msm_geni_serial_spinlocked(struct uart_port *uport)
+{
+	unsigned long flags;
+	bool locked;
+
+	locked = spin_trylock_irqsave(&uport->lock, flags);
+	if (locked)
+		spin_unlock_irqrestore(&uport->lock, flags);
+
+	return !locked;
+}
+
+/*
+ * We are enabling the interrupts once the polling operations
+ * is completed.
+ */
+static void msm_geni_serial_enable_interrupts(struct uart_port *uport)
+{
+	unsigned int geni_m_irq_en, geni_s_irq_en;
+	unsigned int dma_m_irq_en, dma_s_irq_en;
+	struct msm_geni_serial_port *port = GET_DEV_PORT(uport);
+
+	geni_m_irq_en = geni_read_reg_nolog(uport->membase,
+						SE_GENI_M_IRQ_EN);
+	geni_s_irq_en = geni_read_reg_nolog(uport->membase,
+						SE_GENI_S_IRQ_EN);
+	if (port->xfer_mode == SE_DMA) {
+		dma_m_irq_en = geni_read_reg_nolog(uport->membase,
+						SE_DMA_TX_IRQ_EN);
+		dma_s_irq_en = geni_read_reg_nolog(uport->membase,
+						SE_DMA_RX_IRQ_EN);
+	}
+
+	geni_m_irq_en |= M_IRQ_BITS;
+	geni_s_irq_en |= S_IRQ_BITS;
+	if (port->xfer_mode == SE_DMA) {
+		dma_m_irq_en |= DMA_TX_IRQ_BITS;
+		dma_s_irq_en |= DMA_RX_IRQ_BITS;
+	}
+
+	geni_write_reg_nolog(geni_m_irq_en, uport->membase, SE_GENI_M_IRQ_EN);
+	geni_write_reg_nolog(geni_s_irq_en, uport->membase, SE_GENI_S_IRQ_EN);
+	if (port->xfer_mode == SE_DMA) {
+		geni_write_reg_nolog(dma_m_irq_en, uport->membase,
+							SE_DMA_TX_IRQ_EN);
+		geni_write_reg_nolog(dma_s_irq_en, uport->membase,
+							SE_DMA_RX_IRQ_EN);
+	}
+}
+
+/* Disable the interrupts in order to do polling in an atomic contexts. */
+static void msm_geni_serial_disable_interrupts(struct uart_port *uport)
+{
+	unsigned int geni_m_irq_en, geni_s_irq_en;
+	unsigned int dma_m_irq_en, dma_s_irq_en;
+	struct msm_geni_serial_port *port = GET_DEV_PORT(uport);
+
+	/*
+	 * We don't need to disable interrupts if spinlock is not taken
+	 * by framework as we can rely on ISR.
+	 */
+	if (!msm_geni_serial_spinlocked(uport))
+		return;
+
+	geni_m_irq_en = geni_read_reg_nolog(uport->membase, SE_GENI_M_IRQ_EN);
+	geni_s_irq_en = geni_read_reg_nolog(uport->membase, SE_GENI_S_IRQ_EN);
+	if (port->xfer_mode == SE_DMA) {
+		dma_m_irq_en = geni_read_reg_nolog(uport->membase,
+						SE_DMA_TX_IRQ_EN);
+		dma_s_irq_en = geni_read_reg_nolog(uport->membase,
+						SE_DMA_RX_IRQ_EN);
+	}
+
+	geni_m_irq_en &= ~M_IRQ_BITS;
+	geni_s_irq_en &= ~S_IRQ_BITS;
+	if (port->xfer_mode == SE_DMA) {
+		dma_m_irq_en &= ~DMA_TX_IRQ_BITS;
+		dma_s_irq_en &= ~DMA_RX_IRQ_BITS;
+	}
+
+	geni_write_reg_nolog(geni_m_irq_en, uport->membase, SE_GENI_M_IRQ_EN);
+	geni_write_reg_nolog(geni_s_irq_en, uport->membase, SE_GENI_S_IRQ_EN);
+	if (port->xfer_mode == SE_DMA) {
+		geni_write_reg_nolog(dma_m_irq_en, uport->membase,
+							SE_DMA_TX_IRQ_EN);
+		geni_write_reg_nolog(dma_s_irq_en, uport->membase,
+							SE_DMA_RX_IRQ_EN);
+	}
+}
+
+/*
+ * We need to poll for interrupt if we are in an atomic context
+ * as serial framework might be taking spinlocks and depend on the isr
+ * in a non-atomic context. This API decides wheather to poll for
+ * interrupt or depend on the isr based on in_atomic() call.
+ */
+bool geni_wait_for_cmd_done(struct uart_port *uport)
+{
+	struct msm_geni_serial_port *msm_port = GET_DEV_PORT(uport);
+	unsigned long timeout = POLL_ITERATIONS;
+	unsigned long ret;
+
+	/*
+	 * We need to do polling if spinlock is taken
+	 * by framework as we cannot rely on ISR.
+	 */
+	if (msm_geni_serial_spinlocked(uport)) {
+		/*
+		 * Polling is done for 1000 iterrations with
+		 * 10 usecs interval which in total accumulates
+		 * to 10 msecs
+		 */
+		if (msm_port->m_cmd) {
+			while (!msm_port->m_cmd_done && timeout > 0) {
+				msm_geni_serial_handle_isr(uport);
+				timeout--;
+				udelay(100);
+			}
+		} else if (msm_port->s_cmd) {
+			while (!msm_port->s_cmd_done && timeout > 0) {
+				msm_geni_serial_handle_isr(uport);
+				timeout--;
+				udelay(100);
+			}
+		}
+	} else {
+		/* Waiting for 10 milli second for interrupt to be fired */
+		if (msm_port->m_cmd)
+			ret = wait_for_completion_timeout
+					(&msm_port->m_cmd_timeout,
+				msecs_to_jiffies(POLL_WAIT_TIMEOUT_MSEC));
+		else if (msm_port->s_cmd)
+			ret = wait_for_completion_timeout
+					(&msm_port->s_cmd_timeout,
+				msecs_to_jiffies(POLL_WAIT_TIMEOUT_MSEC));
+	}
+
+	return ret ? 0 : 1;
+}
 
 static void msm_geni_serial_config_port(struct uart_port *uport, int cfg_flags)
 {
@@ -528,7 +704,6 @@
 			} else {
 				pm_runtime_get_noresume(uport->dev);
 				pm_runtime_set_active(uport->dev);
-				enable_irq(uport->irq);
 			}
 			pm_runtime_enable(uport->dev);
 			if (lock)
@@ -573,7 +748,6 @@
 	unsigned int fifo_bits = DEF_FIFO_DEPTH_WORDS * DEF_FIFO_WIDTH_BITS;
 	unsigned long total_iter = 1000;
 
-
 	if (uport->private_data && !uart_console(uport)) {
 		port = GET_DEV_PORT(uport);
 		baud = (port->cur_baud ? port->cur_baud : 115200);
@@ -614,60 +788,34 @@
 	mb();
 }
 
-static void msm_geni_serial_poll_cancel_tx(struct uart_port *uport)
+static void msm_geni_serial_poll_tx_done(struct uart_port *uport)
 {
 	int done = 0;
-	unsigned int irq_clear = M_CMD_DONE_EN;
+	unsigned int irq_clear = 0;
 
 	done = msm_geni_serial_poll_bit(uport, SE_GENI_M_IRQ_STATUS,
 						M_CMD_DONE_EN, true);
 	if (!done) {
-		geni_write_reg_nolog(M_GENI_CMD_ABORT, uport->membase,
-					SE_GENI_M_CMD_CTRL_REG);
-		irq_clear |= M_CMD_ABORT_EN;
-		msm_geni_serial_poll_bit(uport, SE_GENI_M_IRQ_STATUS,
-							M_CMD_ABORT_EN, true);
+		/*
+		 * Failure IPC logs are not added as this API is
+		 * used by early console and it doesn't have log handle.
+		 */
+		geni_write_reg(S_GENI_CMD_CANCEL, uport->membase,
+						SE_GENI_S_CMD_CTRL_REG);
+		done = msm_geni_serial_poll_bit(uport, SE_GENI_M_IRQ_STATUS,
+						M_CMD_CANCEL_EN, true);
+		if (!done) {
+			geni_write_reg_nolog(M_GENI_CMD_ABORT, uport->membase,
+						SE_GENI_M_CMD_CTRL_REG);
+			msm_geni_serial_poll_bit(uport, SE_GENI_M_IRQ_STATUS,
+						M_CMD_ABORT_EN, true);
+		}
 	}
+
+	irq_clear = geni_read_reg_nolog(uport->membase, SE_GENI_M_IRQ_STATUS);
 	geni_write_reg_nolog(irq_clear, uport->membase, SE_GENI_M_IRQ_CLEAR);
 }
 
-static void msm_geni_serial_abort_rx(struct uart_port *uport)
-{
-	unsigned int irq_clear = S_CMD_DONE_EN;
-	struct msm_geni_serial_port *port = GET_DEV_PORT(uport);
-
-	geni_abort_s_cmd(uport->membase);
-	/* Ensure this goes through before polling. */
-	mb();
-	irq_clear |= S_CMD_ABORT_EN;
-	msm_geni_serial_poll_bit(uport, SE_GENI_S_CMD_CTRL_REG,
-					S_GENI_CMD_ABORT, false);
-	geni_write_reg_nolog(irq_clear, uport->membase, SE_GENI_S_IRQ_CLEAR);
-	/* FORCE_DEFAULT makes RFR default high, hence set manually Low */
-	msm_geni_serial_set_manual_flow(true, port);
-	geni_write_reg(FORCE_DEFAULT, uport->membase, GENI_FORCE_DEFAULT_REG);
-}
-
-static void msm_geni_serial_complete_rx_eot(struct uart_port *uport)
-{
-	int poll_done = 0, tries = 0;
-	struct msm_geni_serial_port *port = GET_DEV_PORT(uport);
-
-	do {
-		poll_done = msm_geni_serial_poll_bit(uport, SE_DMA_RX_IRQ_STAT,
-								RX_EOT, true);
-		tries++;
-	} while (!poll_done && tries < 5);
-
-	if (!poll_done)
-		IPC_LOG_MSG(port->ipc_log_misc,
-		"%s: RX_EOT, GENI:0x%x, DMA_DEBUG:0x%x\n", __func__,
-		geni_read_reg_nolog(uport->membase, SE_GENI_STATUS),
-		geni_read_reg_nolog(uport->membase, SE_DMA_DEBUG_REG0));
-	else
-		geni_write_reg_nolog(RX_EOT, uport->membase, SE_DMA_RX_IRQ_CLR);
-}
-
 #ifdef CONFIG_CONSOLE_POLL
 static int msm_geni_serial_get_char(struct uart_port *uport)
 {
@@ -721,7 +869,9 @@
 	 * Ensure FIFO write goes through before polling for status but.
 	 */
 	mb();
-	msm_geni_serial_poll_cancel_tx(uport);
+	msm_geni_serial_disable_interrupts(uport);
+	msm_geni_serial_poll_tx_done(uport);
+	msm_geni_serial_enable_interrupts(uport);
 }
 #endif
 
@@ -757,6 +907,7 @@
 					SE_GENI_TX_WATERMARK_REG);
 	msm_geni_serial_setup_tx(uport, bytes_to_send);
 	i = 0;
+
 	while (i < count) {
 		u32 chars_to_write = 0;
 		u32 avail_fifo_bytes = (fifo_depth - tx_wm);
@@ -781,7 +932,9 @@
 		mb();
 		i += chars_to_write;
 	}
-	msm_geni_serial_poll_cancel_tx(uport);
+	msm_geni_serial_disable_interrupts(uport);
+	msm_geni_serial_poll_tx_done(uport);
+	msm_geni_serial_enable_interrupts(uport);
 }
 
 static void msm_geni_serial_console_write(struct console *co, const char *s,
@@ -792,6 +945,7 @@
 	bool locked = true;
 	unsigned long flags;
 	unsigned int geni_status;
+	bool timeout;
 	int irq_en;
 
 	/* Max 1 port supported as of now */
@@ -811,23 +965,39 @@
 
 	/* Cancel the current write to log the fault */
 	if (!locked) {
+		port->m_cmd_done = false;
+		port->m_cmd = true;
+		reinit_completion(&port->m_cmd_timeout);
+		msm_geni_serial_disable_interrupts(uport);
 		geni_cancel_m_cmd(uport->membase);
-		if (!msm_geni_serial_poll_bit(uport, SE_GENI_M_IRQ_STATUS,
-						M_CMD_CANCEL_EN, true)) {
+
+		timeout = geni_wait_for_cmd_done(uport);
+		if (timeout) {
+			IPC_LOG_MSG(port->console_log,
+				"%s: tx_cancel failed 0x%x\n",
+				__func__, geni_read_reg_nolog(uport->membase,
+							SE_GENI_STATUS));
+
+			reinit_completion(&port->m_cmd_timeout);
 			geni_abort_m_cmd(uport->membase);
-			msm_geni_serial_poll_bit(uport, SE_GENI_M_IRQ_STATUS,
-							M_CMD_ABORT_EN, true);
-			geni_write_reg_nolog(M_CMD_ABORT_EN, uport->membase,
-							SE_GENI_M_IRQ_CLEAR);
+			timeout = geni_wait_for_cmd_done(uport);
+			if (timeout)
+				IPC_LOG_MSG(port->console_log,
+				"%s: tx abort failed 0x%x\n", __func__,
+				geni_read_reg_nolog(uport->membase,
+							SE_GENI_STATUS));
 		}
-		writel_relaxed(M_CMD_CANCEL_EN, uport->membase +
-							SE_GENI_M_IRQ_CLEAR);
+
+		msm_geni_serial_enable_interrupts(uport);
+		port->m_cmd = false;
 	} else if ((geni_status & M_GENI_CMD_ACTIVE) &&
 						!port->cur_tx_remaining) {
 		/* It seems we can interrupt existing transfers unless all data
 		 * has been sent, in which case we need to look for done first.
 		 */
-		msm_geni_serial_poll_cancel_tx(uport);
+		msm_geni_serial_disable_interrupts(uport);
+		msm_geni_serial_poll_tx_done(uport);
+		msm_geni_serial_enable_interrupts(uport);
 
 		/* Enable WM interrupt for every new console write op */
 		if (uart_circ_chars_pending(&uport->state->xmit)) {
@@ -855,6 +1025,7 @@
 {
 	int i, c;
 	unsigned char *rx_char;
+	unsigned long flags;
 	struct tty_port *tport;
 	struct msm_geni_serial_port *msm_port = GET_DEV_PORT(uport);
 
@@ -882,8 +1053,18 @@
 				tty_insert_flip_char(tport, rx_char[c], flag);
 		}
 	}
-	if (!drop_rx)
+	if (!drop_rx) {
+		/*
+		 * Driver acquiring port->lock in isr function and calling
+		 * tty_flip_buffer_push() which in turn will wait for
+		 * another lock from framework __queue_work function.
+		 * release the port lock before calling tty_flip_buffer_push()
+		 * to avoid deadlock scenarios.
+		 */
+		spin_unlock_irqrestore(&uport->lock, flags);
 		tty_flip_buffer_push(tport);
+		spin_lock_irqsave(&uport->lock, flags);
+	}
 	return 0;
 }
 #else
@@ -903,6 +1084,8 @@
 	struct msm_geni_serial_port *msm_port = GET_DEV_PORT(uport);
 	struct circ_buf *xmit = &uport->state->xmit;
 	unsigned int xmit_size;
+	unsigned int dma_dbg;
+	bool timeout;
 	int ret = 0;
 
 	xmit_size = uart_circ_chars_pending(xmit);
@@ -920,27 +1103,80 @@
 	msm_geni_serial_setup_tx(uport, xmit_size);
 	ret = geni_se_tx_dma_prep(msm_port->wrapper_dev, uport->membase,
 			&xmit->buf[xmit->tail], xmit_size, &msm_port->tx_dma);
+
 	if (!ret) {
 		msm_port->xmit_size = xmit_size;
 	} else {
-		geni_write_reg_nolog(0, uport->membase,
-					SE_UART_TX_TRANS_LEN);
+		IPC_LOG_MSG(msm_port->ipc_log_misc,
+		    "%s: TX DMA map Fail %d\n", __func__, ret);
+
+		geni_write_reg_nolog(0, uport->membase, SE_UART_TX_TRANS_LEN);
+		msm_port->m_cmd_done = false;
+		msm_port->m_cmd = true;
+		reinit_completion(&msm_port->m_cmd_timeout);
+
+		/*
+		 * Disabling the interrupts before giving the
+		 * cancel command as this might be in an atomic context.
+		 */
+		msm_geni_serial_disable_interrupts(uport);
 		geni_cancel_m_cmd(uport->membase);
-		if (!msm_geni_serial_poll_bit(uport, SE_GENI_M_IRQ_STATUS,
-						M_CMD_CANCEL_EN, true)) {
+
+		timeout = geni_wait_for_cmd_done(uport);
+		if (timeout) {
+			IPC_LOG_MSG(msm_port->console_log,
+			"%s: tx_cancel fail 0x%x\n", __func__,
+			geni_read_reg_nolog(uport->membase, SE_GENI_STATUS));
+
+			IPC_LOG_MSG(msm_port->ipc_log_misc,
+			"%s: tx_cancel failed 0x%x\n", __func__,
+			geni_read_reg_nolog(uport->membase, SE_GENI_STATUS));
+
+			msm_port->m_cmd_done = false;
+			reinit_completion(&msm_port->m_cmd_timeout);
+			/* Give abort command as cancel command failed */
 			geni_abort_m_cmd(uport->membase);
-			msm_geni_serial_poll_bit(uport, SE_GENI_M_IRQ_STATUS,
-							M_CMD_ABORT_EN, true);
-			geni_write_reg_nolog(M_CMD_ABORT_EN, uport->membase,
-							SE_GENI_M_IRQ_CLEAR);
+
+			timeout = geni_wait_for_cmd_done(uport);
+			if (timeout) {
+				IPC_LOG_MSG(msm_port->console_log,
+				"%s: tx abort failed 0x%x\n", __func__,
+				geni_read_reg_nolog(uport->membase,
+							SE_GENI_STATUS));
+				IPC_LOG_MSG(msm_port->ipc_log_misc,
+				"%s: tx abort failed 0x%x\n", __func__,
+				geni_read_reg_nolog(uport->membase,
+							SE_GENI_STATUS));
+			}
 		}
-		geni_write_reg_nolog(M_CMD_CANCEL_EN, uport->membase,
-							SE_GENI_M_IRQ_CLEAR);
-		IPC_LOG_MSG(msm_port->ipc_log_tx, "%s: DMA map failure %d\n",
-								__func__, ret);
-		msm_port->tx_dma = (dma_addr_t)NULL;
+
+		if (msm_port->xfer_mode == SE_DMA) {
+			dma_dbg = geni_read_reg(uport->membase,
+							SE_DMA_DEBUG_REG0);
+			if (dma_dbg & DMA_TX_ACTIVE) {
+				msm_port->m_cmd_done = false;
+				reinit_completion(&msm_port->m_cmd_timeout);
+				geni_write_reg_nolog(1, uport->membase,
+						SE_DMA_TX_FSM_RST);
+
+				timeout = geni_wait_for_cmd_done(uport);
+				if (timeout)
+					IPC_LOG_MSG(msm_port->ipc_log_misc,
+					"%s: tx fsm reset failed\n", __func__);
+			}
+
+			if (msm_port->tx_dma) {
+				geni_se_tx_dma_unprep(msm_port->wrapper_dev,
+					msm_port->tx_dma, msm_port->xmit_size);
+				msm_port->tx_dma = (dma_addr_t)NULL;
+			}
+		}
 		msm_port->xmit_size = 0;
+		/* Enable the interrupts once the cancel operation is done. */
+		msm_geni_serial_enable_interrupts(uport);
+		msm_port->m_cmd = false;
 	}
+
 	return ret;
 }
 
@@ -1003,64 +1239,71 @@
 		msm_geni_serial_power_off(uport);
 }
 
-static void msm_geni_serial_tx_fsm_rst(struct uart_port *uport)
-{
-	unsigned int tx_irq_en;
-	int done = 0;
-	int tries = 0;
-
-	tx_irq_en = geni_read_reg_nolog(uport->membase, SE_DMA_TX_IRQ_EN);
-	geni_write_reg_nolog(0, uport->membase, SE_DMA_TX_IRQ_EN_SET);
-	geni_write_reg_nolog(1, uport->membase, SE_DMA_TX_FSM_RST);
-	do {
-		done = msm_geni_serial_poll_bit(uport, SE_DMA_TX_IRQ_STAT,
-							TX_RESET_DONE, true);
-		tries++;
-	} while (!done && tries < 5);
-	geni_write_reg_nolog(TX_DMA_DONE | TX_RESET_DONE, uport->membase,
-						     SE_DMA_TX_IRQ_CLR);
-	geni_write_reg_nolog(tx_irq_en, uport->membase, SE_DMA_TX_IRQ_EN_SET);
-}
-
 static void stop_tx_sequencer(struct uart_port *uport)
 {
-	unsigned int geni_m_irq_en;
 	unsigned int geni_status;
+	bool timeout;
+	unsigned int dma_dbg;
 	struct msm_geni_serial_port *port = GET_DEV_PORT(uport);
 
-	geni_m_irq_en = geni_read_reg_nolog(uport->membase, SE_GENI_M_IRQ_EN);
-	geni_m_irq_en &= ~M_CMD_DONE_EN;
-	if (port->xfer_mode == FIFO_MODE) {
-		geni_m_irq_en &= ~M_TX_FIFO_WATERMARK_EN;
-		geni_write_reg_nolog(0, uport->membase,
-				     SE_GENI_TX_WATERMARK_REG);
-	} else if (port->xfer_mode == SE_DMA) {
-		if (port->tx_dma) {
-			msm_geni_serial_tx_fsm_rst(uport);
-			geni_se_tx_dma_unprep(port->wrapper_dev, port->tx_dma,
-					   port->xmit_size);
-			port->tx_dma = (dma_addr_t)NULL;
-		}
-	}
-	port->xmit_size = 0;
-	geni_write_reg_nolog(geni_m_irq_en, uport->membase, SE_GENI_M_IRQ_EN);
-	geni_status = geni_read_reg_nolog(uport->membase,
-						SE_GENI_STATUS);
+	geni_status = geni_read_reg_nolog(uport->membase, SE_GENI_STATUS);
 	/* Possible stop tx is called multiple times. */
 	if (!(geni_status & M_GENI_CMD_ACTIVE))
 		return;
 
+	IPC_LOG_MSG(port->ipc_log_misc,
+		    "%s: Start GENI: 0x%x\n", __func__, geni_status);
+
+	port->m_cmd_done = false;
+	port->m_cmd = true;
+	reinit_completion(&port->m_cmd_timeout);
 	geni_cancel_m_cmd(uport->membase);
-	if (!msm_geni_serial_poll_bit(uport, SE_GENI_M_IRQ_STATUS,
-						M_CMD_CANCEL_EN, true)) {
+
+	timeout = geni_wait_for_cmd_done(uport);
+	if (timeout) {
+		IPC_LOG_MSG(port->console_log, "%s: tx_cancel failed 0x%x\n",
+		__func__, geni_read_reg_nolog(uport->membase, SE_GENI_STATUS));
+		IPC_LOG_MSG(port->ipc_log_misc, "%s: tx_cancel failed 0x%x\n",
+		__func__, geni_read_reg_nolog(uport->membase, SE_GENI_STATUS));
+
+		port->m_cmd_done = false;
+		reinit_completion(&port->m_cmd_timeout);
 		geni_abort_m_cmd(uport->membase);
-		msm_geni_serial_poll_bit(uport, SE_GENI_M_IRQ_STATUS,
-						M_CMD_ABORT_EN, true);
-		geni_write_reg_nolog(M_CMD_ABORT_EN, uport->membase,
-							SE_GENI_M_IRQ_CLEAR);
+
+		timeout = geni_wait_for_cmd_done(uport);
+		if (timeout) {
+			IPC_LOG_MSG(port->console_log,
+				"%s: tx abort failed 0x%x\n", __func__,
+			geni_read_reg_nolog(uport->membase, SE_GENI_STATUS));
+			IPC_LOG_MSG(port->ipc_log_misc,
+				"%s: tx abort failed 0x%x\n", __func__,
+			geni_read_reg_nolog(uport->membase, SE_GENI_STATUS));
+		}
 	}
-	geni_write_reg_nolog(M_CMD_CANCEL_EN, uport->membase,
-						SE_GENI_M_IRQ_CLEAR);
+
+	if (port->xfer_mode == SE_DMA) {
+		dma_dbg = geni_read_reg(uport->membase, SE_DMA_DEBUG_REG0);
+		if (dma_dbg & DMA_TX_ACTIVE) {
+			port->m_cmd_done = false;
+			reinit_completion(&port->m_cmd_timeout);
+			geni_write_reg_nolog(1, uport->membase,
+						SE_DMA_TX_FSM_RST);
+
+			timeout = geni_wait_for_cmd_done(uport);
+			if (timeout)
+				IPC_LOG_MSG(port->ipc_log_misc,
+				"%s: tx fsm reset failed\n", __func__);
+		}
+
+		if (port->tx_dma) {
+			geni_se_tx_dma_unprep(port->wrapper_dev,
+					port->tx_dma, port->xmit_size);
+			port->tx_dma = (dma_addr_t)NULL;
+		}
+	}
+	port->m_cmd = false;
+	port->xmit_size = 0;
+
 	/*
 	 * If we end up having to cancel an on-going Tx for non-console usecase
 	 * then it means there was some unsent data in the Tx FIFO, consequently
@@ -1072,7 +1315,10 @@
 		IPC_LOG_MSG(port->ipc_log_misc, "%s:Removing vote\n", __func__);
 		msm_geni_serial_power_off(uport);
 	}
-	IPC_LOG_MSG(port->ipc_log_misc, "%s:\n", __func__);
+
+	geni_status = geni_read_reg_nolog(uport->membase, SE_GENI_STATUS);
+	IPC_LOG_MSG(port->ipc_log_misc, "%s: End GENI:0x%x\n",
+		    __func__, geni_status);
 }
 
 static void msm_geni_serial_stop_tx(struct uart_port *uport)
@@ -1090,8 +1336,6 @@
 
 static void start_rx_sequencer(struct uart_port *uport)
 {
-	unsigned int geni_s_irq_en;
-	unsigned int geni_m_irq_en;
 	unsigned int geni_status;
 	struct msm_geni_serial_port *port = GET_DEV_PORT(uport);
 	u32 geni_se_param = UART_PARAM_RFR_OPEN;
@@ -1100,6 +1344,9 @@
 		return;
 
 	geni_status = geni_read_reg_nolog(uport->membase, SE_GENI_STATUS);
+	IPC_LOG_MSG(port->ipc_log_misc, "%s: 0x%x\n",
+		    __func__, geni_status);
+
 	if (geni_status & S_GENI_CMD_ACTIVE) {
 		if (port->xfer_mode == SE_DMA) {
 			IPC_LOG_MSG(port->ipc_log_misc,
@@ -1111,29 +1358,14 @@
 	}
 
 	/* Start RX with the RFR_OPEN to keep RFR in always ready state */
+	msm_geni_serial_enable_interrupts(uport);
 	geni_setup_s_cmd(uport->membase, UART_START_READ, geni_se_param);
 
-	if (port->xfer_mode == FIFO_MODE) {
-		geni_s_irq_en = geni_read_reg_nolog(uport->membase,
-							SE_GENI_S_IRQ_EN);
-		geni_m_irq_en = geni_read_reg_nolog(uport->membase,
-							SE_GENI_M_IRQ_EN);
-
-		geni_s_irq_en |= S_RX_FIFO_WATERMARK_EN | S_RX_FIFO_LAST_EN;
-		geni_m_irq_en |= M_RX_FIFO_WATERMARK_EN | M_RX_FIFO_LAST_EN;
-
-		geni_write_reg_nolog(geni_s_irq_en, uport->membase,
-							SE_GENI_S_IRQ_EN);
-		geni_write_reg_nolog(geni_m_irq_en, uport->membase,
-							SE_GENI_M_IRQ_EN);
-	} else if (port->xfer_mode == SE_DMA) {
+	if (port->xfer_mode == SE_DMA)
 		geni_se_rx_dma_start(uport->membase, DMA_RX_BUF_SIZE,
 							&port->rx_dma);
-	}
-	/*
-	 * Ensure the writes to the secondary sequencer and interrupt enables
-	 * go through.
-	 */
+
+	/* Ensure that the above writes go through */
 	mb();
 	geni_status = geni_read_reg_nolog(uport->membase, SE_GENI_STATUS);
 	IPC_LOG_MSG(port->ipc_log_misc, "%s: 0x%x, dma_dbg:0x%x\n", __func__,
@@ -1193,79 +1425,88 @@
 		 * doing a stop_rx.
 		 */
 		mb();
-		IPC_LOG_MSG(port->ipc_log_pwr,
+		IPC_LOG_MSG(port->ipc_log_misc,
 			"%s: Manual Flow Enabled, HW Flow OFF\n", __func__);
 	} else {
 		geni_write_reg_nolog(0, port->uport.membase,
 						SE_UART_MANUAL_RFR);
 		/* Ensure that the manual flow off writes go through */
 		mb();
-		IPC_LOG_MSG(port->ipc_log_pwr,
+		IPC_LOG_MSG(port->ipc_log_misc,
 			"%s: Manual Flow Disabled, HW Flow ON\n", __func__);
 	}
 }
 
 static void stop_rx_sequencer(struct uart_port *uport)
 {
-	unsigned int geni_s_irq_en;
-	unsigned int geni_m_irq_en;
 	unsigned int geni_status;
+	bool timeout;
 	struct msm_geni_serial_port *port = GET_DEV_PORT(uport);
-	u32 irq_clear = S_CMD_CANCEL_EN;
-	bool done;
 
 	IPC_LOG_MSG(port->ipc_log_misc, "%s\n", __func__);
-	if (port->xfer_mode == FIFO_MODE) {
-		geni_s_irq_en = geni_read_reg_nolog(uport->membase,
-							SE_GENI_S_IRQ_EN);
-		geni_m_irq_en = geni_read_reg_nolog(uport->membase,
-							SE_GENI_M_IRQ_EN);
-		geni_s_irq_en &= ~(S_RX_FIFO_WATERMARK_EN | S_RX_FIFO_LAST_EN);
-		geni_m_irq_en &= ~(M_RX_FIFO_WATERMARK_EN | M_RX_FIFO_LAST_EN);
-
-		geni_write_reg_nolog(geni_s_irq_en, uport->membase,
-							SE_GENI_S_IRQ_EN);
-		geni_write_reg_nolog(geni_m_irq_en, uport->membase,
-							SE_GENI_M_IRQ_EN);
-	}
 
 	geni_status = geni_read_reg_nolog(uport->membase, SE_GENI_STATUS);
 	/* Possible stop rx is called multiple times. */
-	if (!(geni_status & S_GENI_CMD_ACTIVE))
+	if (!(geni_status & S_GENI_CMD_ACTIVE)) {
+		IPC_LOG_MSG(port->ipc_log_misc,
+			"%s: RX is Inactive, geni_sts: 0x%x\n",
+						__func__, geni_status);
 		goto exit_rx_seq;
+	}
 
+	port->s_cmd_done = false;
+	port->s_cmd = true;
+	reinit_completion(&port->s_cmd_timeout);
+
+	IPC_LOG_MSG(port->ipc_log_misc, "%s: Start 0x%x\n",
+		    __func__, geni_status);
+	/*
+	 * Disabling the interrupts before giving the
+	 * cancel command as this might be in an atomic context.
+	 */
+	msm_geni_serial_disable_interrupts(uport);
 	geni_cancel_s_cmd(uport->membase);
+
 	/*
 	 * Ensure that the cancel goes through before polling for the
 	 * cancel control bit.
 	 */
 	mb();
-	if (!uart_console(uport))
-		msm_geni_serial_complete_rx_eot(uport);
+	timeout = geni_wait_for_cmd_done(uport);
+	if (timeout) {
+		geni_status = geni_read_reg_nolog(uport->membase,
+							SE_GENI_STATUS);
+		IPC_LOG_MSG(port->ipc_log_misc,
+			"%s cancel failed 0x%x\n",  __func__, geni_status);
+		IPC_LOG_MSG(port->console_log,
+			"%s cancel failed 0x%x\n",  __func__, geni_status);
+		port->s_cmd_done = false;
+		reinit_completion(&port->s_cmd_timeout);
+		geni_abort_s_cmd(uport->membase);
+		/* Ensure this goes through before polling. */
+		mb();
 
-	done = msm_geni_serial_poll_bit(uport, SE_GENI_S_CMD_CTRL_REG,
-					S_GENI_CMD_CANCEL, false);
-	if (done) {
-		geni_write_reg_nolog(irq_clear, uport->membase,
-						SE_GENI_S_IRQ_CLEAR);
-		goto exit_rx_seq;
-	} else {
-		IPC_LOG_MSG(port->ipc_log_misc, "%s Cancel fail 0x%x\n",
-						__func__, geni_status);
+		timeout = geni_wait_for_cmd_done(uport);
+		if (timeout) {
+			geni_status = geni_read_reg_nolog(uport->membase,
+							SE_GENI_STATUS);
+			IPC_LOG_MSG(port->ipc_log_misc,
+				"%s abort fail 0x%x\n", __func__, geni_status);
+			IPC_LOG_MSG(port->console_log,
+				"%s abort fail 0x%x\n",  __func__, geni_status);
+		}
 	}
+	/* Enable the interrupts once the cancel operation is done. */
+	msm_geni_serial_enable_interrupts(uport);
+	port->s_cmd = false;
 
-	geni_status = geni_read_reg_nolog(uport->membase, SE_GENI_STATUS);
-	if ((geni_status & S_GENI_CMD_ACTIVE)) {
-		IPC_LOG_MSG(port->ipc_log_misc, "%s:Abort Rx, GENI:0x%x\n",
-						__func__, geni_status);
-		msm_geni_serial_abort_rx(uport);
-	}
 exit_rx_seq:
 	if (port->xfer_mode == SE_DMA && port->rx_dma)
 		msm_geni_serial_rx_fsm_rst(uport);
 
 	geni_status = geni_read_reg_nolog(uport->membase, SE_GENI_STATUS);
-	IPC_LOG_MSG(port->ipc_log_misc, "%s: 0x%x\n", __func__, geni_status);
+	IPC_LOG_MSG(port->ipc_log_misc, "%s: End 0x%x\n",
+		    __func__, geni_status);
 }
 
 static void msm_geni_serial_stop_rx(struct uart_port *uport)
@@ -1450,8 +1691,11 @@
 
 	geni_status = geni_read_reg_nolog(uport->membase, SE_GENI_STATUS);
 	/* Possible stop rx is called */
-	if (!(geni_status & S_GENI_CMD_ACTIVE))
+	if (!(geni_status & S_GENI_CMD_ACTIVE)) {
+		IPC_LOG_MSG(msm_port->ipc_log_misc,
+			    "%s: GENI: 0x%x\n", __func__, geni_status);
 		return 0;
+	}
 
 	if (unlikely(!msm_port->rx_buf)) {
 		IPC_LOG_MSG(msm_port->ipc_log_rx, "%s: NULL Rx_buf\n",
@@ -1481,8 +1725,6 @@
 	dump_ipc(msm_port->ipc_log_rx, "DMA Rx", (char *)msm_port->rx_buf, 0,
 								rx_bytes);
 exit_handle_dma_rx:
-	geni_se_rx_dma_start(uport->membase, DMA_RX_BUF_SIZE,
-							&msm_port->rx_dma);
 
 	return ret;
 }
@@ -1516,33 +1758,27 @@
 	return 0;
 }
 
-static irqreturn_t msm_geni_serial_isr(int isr, void *dev)
+static void msm_geni_serial_handle_isr(struct uart_port *uport)
 {
 	unsigned int m_irq_status;
 	unsigned int s_irq_status;
 	unsigned int dma;
 	unsigned int dma_tx_status;
 	unsigned int dma_rx_status;
-	struct uart_port *uport = dev;
-	unsigned long flags;
 	unsigned int m_irq_en;
 	unsigned int geni_status;
 	struct msm_geni_serial_port *msm_port = GET_DEV_PORT(uport);
 	struct tty_port *tport = &uport->state->port;
 	bool drop_rx = false;
+	bool s_cmd_done = false;
+	bool m_cmd_done = false;
 
-	spin_lock_irqsave(&uport->lock, flags);
 	if (uart_console(uport) && uport->suspended) {
 		IPC_LOG_MSG(msm_port->console_log,
 			"%s. Console in suspend state\n", __func__);
 		goto exit_geni_serial_isr;
 	}
-	if (!uart_console(uport) && pm_runtime_status_suspended(uport->dev)) {
-		dev_err(uport->dev, "%s.Device is suspended.\n", __func__);
-		IPC_LOG_MSG(msm_port->ipc_log_misc,
-				"%s.Device is suspended.\n", __func__);
-		goto exit_geni_serial_isr;
-	}
+
 	m_irq_status = geni_read_reg_nolog(uport->membase,
 						SE_GENI_M_IRQ_STATUS);
 	s_irq_status = geni_read_reg_nolog(uport->membase,
@@ -1550,16 +1786,13 @@
 	if (uart_console(uport))
 		IPC_LOG_MSG(msm_port->console_log,
 			"%s. sirq 0x%x mirq:0x%x\n", __func__, s_irq_status,
-								m_irq_status);
+							m_irq_status);
+
+	geni_write_reg_nolog(m_irq_status, uport->membase,
+						SE_GENI_M_IRQ_CLEAR);
+	geni_write_reg_nolog(s_irq_status, uport->membase,
+						SE_GENI_S_IRQ_CLEAR);
 	m_irq_en = geni_read_reg_nolog(uport->membase, SE_GENI_M_IRQ_EN);
-	dma = geni_read_reg_nolog(uport->membase, SE_GENI_DMA_MODE_EN);
-	dma_tx_status = geni_read_reg_nolog(uport->membase, SE_DMA_TX_IRQ_STAT);
-	dma_rx_status = geni_read_reg_nolog(uport->membase, SE_DMA_RX_IRQ_STAT);
-	geni_status = readl_relaxed(uport->membase + SE_GENI_STATUS);
-
-	geni_write_reg_nolog(m_irq_status, uport->membase, SE_GENI_M_IRQ_CLEAR);
-	geni_write_reg_nolog(s_irq_status, uport->membase, SE_GENI_S_IRQ_CLEAR);
-
 	if ((m_irq_status & M_ILLEGAL_CMD_EN)) {
 		WARN_ON(1);
 		goto exit_geni_serial_isr;
@@ -1573,49 +1806,72 @@
 			__func__, s_irq_status, uport->icount.buf_overrun);
 	}
 
+	dma = geni_read_reg_nolog(uport->membase, SE_GENI_DMA_MODE_EN);
 	if (!dma) {
+		geni_status = readl_relaxed(uport->membase + SE_GENI_STATUS);
+
 		if ((m_irq_status & m_irq_en) &
 		    (M_TX_FIFO_WATERMARK_EN | M_CMD_DONE_EN))
 			msm_geni_serial_handle_tx(uport,
 					m_irq_status & M_CMD_DONE_EN,
 					geni_status & M_GENI_CMD_ACTIVE);
 
-		if ((s_irq_status & S_GP_IRQ_0_EN) ||
-			(s_irq_status & S_GP_IRQ_1_EN)) {
+		if (m_irq_status & (M_CMD_CANCEL_EN | M_CMD_ABORT_EN))
+			m_cmd_done = true;
+
+		if (s_irq_status & (S_GP_IRQ_0_EN | S_GP_IRQ_1_EN)) {
 			if (s_irq_status & S_GP_IRQ_0_EN)
 				uport->icount.parity++;
 			IPC_LOG_MSG(msm_port->ipc_log_misc,
 				"%s.sirq 0x%x parity:%d\n",
 				__func__, s_irq_status, uport->icount.parity);
 			drop_rx = true;
-		} else if ((s_irq_status & S_GP_IRQ_2_EN) ||
-			(s_irq_status & S_GP_IRQ_3_EN)) {
+		} else if (s_irq_status & (S_GP_IRQ_2_EN | S_GP_IRQ_3_EN)) {
 			uport->icount.brk++;
 			IPC_LOG_MSG(msm_port->ipc_log_misc,
 				"%s.sirq 0x%x break:%d\n",
 				__func__, s_irq_status, uport->icount.brk);
 		}
 
-		if ((s_irq_status & S_RX_FIFO_WATERMARK_EN) ||
-			(s_irq_status & S_RX_FIFO_LAST_EN))
+		if (s_irq_status & (S_CMD_CANCEL_EN | S_CMD_ABORT_EN))
+			s_cmd_done = true;
+
+		if (s_irq_status & (S_RX_FIFO_WATERMARK_EN |
+							S_RX_FIFO_LAST_EN))
 			msm_geni_serial_handle_rx(uport, drop_rx);
 	} else {
+		dma_tx_status = geni_read_reg_nolog(uport->membase,
+							SE_DMA_TX_IRQ_STAT);
+		dma_rx_status = geni_read_reg_nolog(uport->membase,
+							SE_DMA_RX_IRQ_STAT);
+
 		if (dma_tx_status) {
+
 			geni_write_reg_nolog(dma_tx_status, uport->membase,
-					     SE_DMA_TX_IRQ_CLR);
+						SE_DMA_TX_IRQ_CLR);
+
 			if (dma_tx_status & TX_DMA_DONE)
 				msm_geni_serial_handle_dma_tx(uport);
+
+			if (dma_tx_status & (TX_RESET_DONE |
+						TX_GENI_CANCEL_IRQ))
+				m_cmd_done = true;
+
+			if (m_irq_status & (M_CMD_CANCEL_EN | M_CMD_ABORT_EN))
+				m_cmd_done = true;
 		}
 
 		if (dma_rx_status) {
 			geni_write_reg_nolog(dma_rx_status, uport->membase,
-					     SE_DMA_RX_IRQ_CLR);
+						SE_DMA_RX_IRQ_CLR);
+
 			if (dma_rx_status & RX_RESET_DONE) {
 				IPC_LOG_MSG(msm_port->ipc_log_misc,
 					"%s.Reset done.  0x%x.\n",
 						__func__, dma_rx_status);
 				goto exit_geni_serial_isr;
 			}
+
 			if (dma_rx_status & UART_DMA_RX_ERRS) {
 				if (dma_rx_status & UART_DMA_RX_PARITY_ERR)
 					uport->icount.parity++;
@@ -1631,12 +1887,51 @@
 					__func__, dma_rx_status,
 					uport->icount.brk);
 			}
-			if (dma_rx_status & RX_DMA_DONE)
-				msm_geni_serial_handle_dma_rx(uport, drop_rx);
+
+			if (dma_rx_status & RX_EOT) {
+				msm_geni_serial_handle_dma_rx(uport,
+							drop_rx);
+				if (!(dma_rx_status & RX_GENI_CANCEL_IRQ)) {
+					geni_se_rx_dma_start(uport->membase,
+					DMA_RX_BUF_SIZE, &msm_port->rx_dma);
+				}
+			}
+
+			if (dma_rx_status & RX_SBE) {
+				IPC_LOG_MSG(msm_port->ipc_log_misc,
+					"%s.Rx Errors.  0x%x\n",
+					__func__, dma_rx_status);
+				WARN_ON(1);
+			}
+
+			if (dma_rx_status & (RX_EOT | RX_GENI_CANCEL_IRQ |
+								RX_DMA_DONE))
+				s_cmd_done = true;
+
+			if (s_irq_status & (S_CMD_CANCEL_EN | S_CMD_ABORT_EN))
+				s_cmd_done = true;
 		}
 	}
 
 exit_geni_serial_isr:
+	if (m_cmd_done) {
+		msm_port->m_cmd_done = true;
+		complete(&msm_port->m_cmd_timeout);
+	}
+
+	if (s_cmd_done) {
+		msm_port->s_cmd_done = true;
+		complete(&msm_port->s_cmd_timeout);
+	}
+}
+
+static irqreturn_t msm_geni_serial_isr(int isr, void *dev)
+{
+	struct uart_port *uport = dev;
+	unsigned long flags;
+
+	spin_lock_irqsave(&uport->lock, flags);
+	msm_geni_serial_handle_isr(uport);
 	spin_unlock_irqrestore(&uport->lock, flags);
 	return IRQ_HANDLED;
 }
@@ -1718,9 +2013,9 @@
 static void msm_geni_serial_shutdown(struct uart_port *uport)
 {
 	struct msm_geni_serial_port *msm_port = GET_DEV_PORT(uport);
-	unsigned long flags;
 	int ret;
 
+	IPC_LOG_MSG(msm_port->ipc_log_misc, "%s:\n", __func__);
 	/* Stop the console before stopping the current tx */
 	if (uart_console(uport)) {
 		console_stop(uport->cons);
@@ -1729,13 +2024,6 @@
 		wait_for_transfers_inflight(uport);
 	}
 
-	disable_irq(uport->irq);
-	free_irq(uport->irq, uport);
-	spin_lock_irqsave(&uport->lock, flags);
-	msm_geni_serial_stop_tx(uport);
-	msm_geni_serial_stop_rx(uport);
-	spin_unlock_irqrestore(&uport->lock, flags);
-
 	if (!uart_console(uport)) {
 		if (msm_port->ioctl_count) {
 			int i;
@@ -1761,7 +2049,7 @@
 			free_irq(msm_port->wakeup_irq, uport);
 		}
 	}
-	IPC_LOG_MSG(msm_port->ipc_log_misc, "%s\n", __func__);
+	IPC_LOG_MSG(msm_port->ipc_log_misc, "%s: End\n", __func__);
 }
 
 static int msm_geni_serial_port_setup(struct uart_port *uport)
@@ -1797,6 +2085,7 @@
 
 		msm_port->rx_buf = dma_alloc_coherent(msm_port->wrapper_dev,
 				DMA_RX_BUF_SIZE, &dma_address, GFP_KERNEL);
+
 		if (!msm_port->rx_buf) {
 			devm_kfree(uport->dev, msm_port->rx_fifo);
 			msm_port->rx_fifo = NULL;
@@ -1810,7 +2099,9 @@
 		 * it else we could end up in data loss scenarios.
 		 */
 		msm_port->xfer_mode = FIFO_MODE;
-		msm_geni_serial_poll_cancel_tx(uport);
+		msm_geni_serial_disable_interrupts(uport);
+		msm_geni_serial_poll_tx_done(uport);
+		msm_geni_serial_enable_interrupts(uport);
 		se_get_packing_config(8, 1, false, &cfg0, &cfg1);
 		geni_write_reg_nolog(cfg0, uport->membase,
 						SE_GENI_TX_PACKING_CFG0);
@@ -1822,6 +2113,7 @@
 		geni_write_reg_nolog(cfg1, uport->membase,
 						SE_GENI_RX_PACKING_CFG1);
 	}
+
 	ret = geni_se_init(uport->membase, msm_port->rx_wm, msm_port->rx_rfr);
 	if (ret) {
 		dev_err(uport->dev, "%s: Fail\n", __func__);
@@ -1855,8 +2147,7 @@
 	int ret = 0;
 	struct msm_geni_serial_port *msm_port = GET_DEV_PORT(uport);
 
-	scnprintf(msm_port->name, sizeof(msm_port->name), "msm_serial_geni%d",
-				uport->line);
+	IPC_LOG_MSG(msm_port->ipc_log_misc, "%s:\n", __func__);
 
 	msm_port->startup_in_progress = true;
 
@@ -1871,8 +2162,13 @@
 
 	get_tx_fifo_size(msm_port);
 	if (!msm_port->port_setup) {
-		if (msm_geni_serial_port_setup(uport))
+		ret = msm_geni_serial_port_setup(uport);
+		if (ret) {
+			IPC_LOG_MSG(msm_port->ipc_log_misc,
+				    "%s: port_setup Fail ret:%d\n",
+				    __func__, ret);
 			goto exit_startup;
+		}
 	}
 
 	/*
@@ -1880,13 +2176,6 @@
 	 * before returning to the framework.
 	 */
 	mb();
-	ret = request_irq(uport->irq, msm_geni_serial_isr, IRQF_TRIGGER_HIGH,
-			msm_port->name, uport);
-	if (unlikely(ret)) {
-		dev_err(uport->dev, "%s: Failed to get IRQ ret %d\n",
-							__func__, ret);
-		goto exit_startup;
-	}
 
 	if (msm_port->wakeup_irq > 0) {
 		ret = request_irq(msm_port->wakeup_irq, msm_geni_wakeup_isr,
@@ -1905,11 +2194,11 @@
 			goto exit_startup;
 		}
 	}
-	IPC_LOG_MSG(msm_port->ipc_log_misc, "%s\n", __func__);
 exit_startup:
 	if (likely(!uart_console(uport)))
 		msm_geni_serial_power_off(&msm_port->uport);
 	msm_port->startup_in_progress = false;
+	IPC_LOG_MSG(msm_port->ipc_log_misc, "%s: ret:%d\n", __func__, ret);
 
 	return ret;
 }
@@ -2000,7 +2289,6 @@
 	unsigned long ser_clk_cfg = 0;
 	struct msm_geni_serial_port *port = GET_DEV_PORT(uport);
 	unsigned long clk_rate;
-	unsigned long flags;
 	unsigned long desired_rate;
 	unsigned int clk_idx;
 	int uart_sampling;
@@ -2022,16 +2310,9 @@
 							__func__, ret);
 			return;
 		}
-		disable_irq(uport->irq);
 		msm_geni_serial_set_manual_flow(false, port);
 	}
-	/* Take a spinlock else stop_rx causes a race with an ISR due to Cancel
-	 * and FSM_RESET. This also has a potential race with the dma_map/unmap
-	 * operations of ISR.
-	 */
-	spin_lock_irqsave(&uport->lock, flags);
 	msm_geni_serial_stop_rx(uport);
-	spin_unlock_irqrestore(&uport->lock, flags);
 	/* baud rate */
 	baud = uart_get_baud_rate(uport, termios, old, 300, 4000000);
 	port->cur_baud = baud;
@@ -2151,10 +2432,9 @@
 	IPC_LOG_MSG(port->ipc_log_misc, "BitsChar%d stop bit%d\n",
 				bits_per_char, stop_bit_len);
 exit_set_termios:
-	if (!uart_console(uport)) {
+	if (!uart_console(uport))
 		msm_geni_serial_set_manual_flow(true, port);
-		enable_irq(uport->irq);
-	}
+
 	msm_geni_serial_start_rx(uport);
 	if (!uart_console(uport))
 		msm_geni_serial_power_off(uport);
@@ -2222,9 +2502,9 @@
 		return size;
 
 	msm_geni_serial_power_on(uport);
-	spin_lock_irqsave(&uport->lock, flags);
 	msm_geni_serial_stop_tx(uport);
 	msm_geni_serial_stop_rx(uport);
+	spin_lock_irqsave(&uport->lock, flags);
 	port->xfer_mode = xfer_mode;
 	geni_se_select_mode(uport->membase, port->xfer_mode);
 	spin_unlock_irqrestore(&uport->lock, flags);
@@ -2308,6 +2588,45 @@
 	__msm_geni_serial_console_write(&dev->port, s, n);
 }
 
+static void msm_geni_serial_cancel_rx(struct uart_port *uport)
+{
+	int done = 0;
+	int i = 0;
+	unsigned int irq_status;
+	u32 rx_fifo_status;
+	u32 rx_fifo_wc;
+
+	geni_cancel_s_cmd(uport->membase);
+	/* Ensure this goes through before polling. */
+	mb();
+
+	done = msm_geni_serial_poll_bit(uport, SE_GENI_S_IRQ_STATUS,
+						S_CMD_CANCEL_EN, true);
+	if (!done) {
+		geni_abort_s_cmd(uport->membase);
+		/* Ensure this goes through before polling. */
+		mb();
+		msm_geni_serial_poll_bit(uport, SE_GENI_S_IRQ_STATUS,
+					S_CMD_ABORT_EN, false);
+	} else if (msm_geni_serial_poll_bit(uport,
+			SE_GENI_S_IRQ_STATUS, S_RX_FIFO_LAST_EN, true)) {
+		rx_fifo_status = geni_read_reg_nolog(uport->membase,
+						SE_GENI_RX_FIFO_STATUS);
+		rx_fifo_wc = rx_fifo_status & RX_FIFO_WC_MSK;
+		for (i = 0; i < rx_fifo_wc; i++)
+			geni_read_reg_nolog(uport->membase,
+							SE_GENI_RX_FIFOn);
+	}
+
+	irq_status = geni_read_reg_nolog(uport->membase,
+						SE_GENI_S_IRQ_STATUS);
+	geni_write_reg_nolog(irq_status, uport->membase, SE_GENI_S_IRQ_CLEAR);
+
+	if (!done)
+		geni_write_reg(FORCE_DEFAULT, uport->membase,
+						GENI_FORCE_DEFAULT_REG);
+}
+
 static int __init
 msm_geni_serial_earlycon_setup(struct earlycon_device *dev,
 		const char *opt)
@@ -2354,6 +2673,7 @@
 	stop_bit = 0;
 	rx_stale = 0x18;
 	clk_div = get_clk_div_rate(baud, &clk_rate);
+
 	if (clk_div <= 0) {
 		ret = -EINVAL;
 		goto exit_geni_serial_earlyconsetup;
@@ -2366,10 +2686,17 @@
 	s_clk_cfg |= (clk_div << CLK_DIV_SHFT);
 
 	/*
-	 * Make an unconditional cancel on the main sequencer to reset
-	 * it else we could end up in data loss scenarios.
+	 * Here we need to poll for command done which indicates that
+	 * the previous tx transfer is done. And if the command done interrupt
+	 * is not getting set, then we need to cancel the command.
 	 */
-	msm_geni_serial_poll_cancel_tx(uport);
+	msm_geni_serial_poll_tx_done(uport);
+
+	/*
+	 * Here cancel rx is done in polling mode as there is
+	 * no isr support during early console time.
+	 */
+	msm_geni_serial_cancel_rx(uport);
 
 	/* Only for earlyconsole */
 	if (IS_ENABLED(CONFIG_SERIAL_MSM_GENI_HALF_SAMPLING)) {
@@ -2388,8 +2715,14 @@
 							SE_UART_TX_TRANS_CFG);
 	geni_write_reg_nolog(tx_parity_cfg, uport->membase,
 							SE_UART_TX_PARITY_CFG);
+	geni_write_reg_nolog(rx_trans_cfg, uport->membase,
+							SE_UART_RX_TRANS_CFG);
+	geni_write_reg_nolog(rx_parity_cfg, uport->membase,
+							SE_UART_RX_PARITY_CFG);
 	geni_write_reg_nolog(bits_per_char, uport->membase,
 							SE_UART_TX_WORD_LEN);
+	geni_write_reg_nolog(bits_per_char, uport->membase,
+							SE_UART_RX_WORD_LEN);
 	geni_write_reg_nolog(stop_bit, uport->membase, SE_UART_TX_STOP_BIT_LEN);
 	geni_write_reg_nolog(s_clk_cfg, uport->membase, GENI_SER_M_CLK_CFG);
 	geni_write_reg_nolog(s_clk_cfg, uport->membase, GENI_SER_S_CLK_CFG);
@@ -2603,6 +2936,8 @@
 			__func__, msm_port->ver_info.hw_major_ver,
 			msm_port->ver_info.hw_minor_ver,
 			msm_port->ver_info.hw_step_ver);
+
+	msm_geni_serial_enable_interrupts(uport);
 exit_ver_info:
 	if (!msm_port->is_console)
 		se_geni_clks_off(&msm_port->serial_rsc);
@@ -2803,6 +3138,9 @@
 	dev_port->tx_fifo_width = DEF_FIFO_WIDTH_BITS;
 	uport->fifosize =
 		((dev_port->tx_fifo_depth * dev_port->tx_fifo_width) >> 3);
+	/* Complete signals to handle cancel cmd completion */
+	init_completion(&dev_port->m_cmd_timeout);
+	init_completion(&dev_port->s_cmd_timeout);
 
 	uport->irq = platform_get_irq(pdev, 0);
 	if (uport->irq < 0) {
@@ -2811,6 +3149,16 @@
 		goto exit_geni_serial_probe;
 	}
 
+	dev_port->name = devm_kasprintf(uport->dev, GFP_KERNEL,
+					"msm_serial_geni%d", uport->line);
+	ret = devm_request_irq(uport->dev, uport->irq, msm_geni_serial_isr,
+				IRQF_TRIGGER_HIGH, dev_port->name, uport);
+	if (ret) {
+		dev_err(uport->dev, "%s: Failed to get IRQ ret %d\n",
+							__func__, ret);
+		goto exit_geni_serial_probe;
+	}
+
 	uport->private_data = (void *)drv;
 	platform_set_drvdata(pdev, dev_port);
 	if (is_console) {
@@ -2833,6 +3181,12 @@
 
 	dev_info(&pdev->dev, "Serial port%d added.FifoSize %d is_console%d\n",
 				line, uport->fifosize, is_console);
+	/*
+	 * We are using this spinlock before the serial layer initialises it.
+	 * Hence, we are initializing it.
+	 */
+	spin_lock_init(&uport->lock);
+
 	device_create_file(uport->dev, &dev_attr_loopback);
 	device_create_file(uport->dev, &dev_attr_xfer_mode);
 	device_create_file(uport->dev, &dev_attr_ver_info);
@@ -2841,9 +3195,14 @@
 	ret = msm_geni_serial_get_ver_info(uport);
 	if (ret)
 		goto exit_geni_serial_probe;
+
+	IPC_LOG_MSG(dev_port->ipc_log_misc, "%s: port:%s irq:%d\n", __func__,
+		    uport->name, uport->irq);
 	return uart_add_one_port(drv, uport);
 
 exit_geni_serial_probe:
+	IPC_LOG_MSG(dev_port->ipc_log_misc, "%s: fail port:%s ret:%d\n",
+		    __func__, uport->name, ret);
 	return ret;
 }
 
@@ -2880,16 +3239,18 @@
 	 * Stop Rx.
 	 * Resources off
 	 */
-	disable_irq(port->uport.irq);
 	stop_rx_sequencer(&port->uport);
 	geni_status = geni_read_reg_nolog(port->uport.membase, SE_GENI_STATUS);
+
 	if ((geni_status & M_GENI_CMD_ACTIVE))
 		stop_tx_sequencer(&port->uport);
+
 	ret = se_geni_resources_off(&port->serial_rsc);
 	if (ret) {
 		dev_err(dev, "%s: Error ret %d\n", __func__, ret);
 		goto exit_runtime_suspend;
 	}
+
 	if (port->wakeup_irq > 0) {
 		port->edge_count = 0;
 		enable_irq(port->wakeup_irq);
@@ -2933,8 +3294,6 @@
 	 * Do not enable irq before interrupt registration which happens
 	 * at port open time.
 	 */
-	if (pm_runtime_enabled(dev) && port->xfer_mode != INVALID)
-		enable_irq(port->uport.irq);
 	IPC_LOG_MSG(port->ipc_log_pwr, "%s:\n", __func__);
 exit_runtime_resume:
 	return ret;
@@ -2979,7 +3338,6 @@
 	    console_suspend_enabled && uport->suspended) {
 		uart_resume_port((struct uart_driver *)uport->private_data,
 									uport);
-		disable_irq(uport->irq);
 	}
 	return 0;
 }
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index d28be09..1879e9f 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -1125,6 +1125,7 @@
  * @bh_completion_time: time taken for taklet completion
  * @bh_handled_evt_cnt: no. of events handled by tasklet per interrupt
  * @bh_dbg_index: index for capturing bh_completion_time and bh_handled_evt_cnt
+ * @last_run_stop: timestamp denoting the last run_stop update
  */
 struct dwc3 {
 	struct work_struct	drd_work;
@@ -1359,6 +1360,7 @@
 	u32			gen2_tx_de_emph1;
 	u32			gen2_tx_de_emph2;
 	u32			gen2_tx_de_emph3;
+	ktime_t			last_run_stop;
 };
 
 #define INCRX_BURST_MODE 0
diff --git a/drivers/usb/dwc3/dwc3-msm.c b/drivers/usb/dwc3/dwc3-msm.c
index e6ae1fe..3f20bf7 100644
--- a/drivers/usb/dwc3/dwc3-msm.c
+++ b/drivers/usb/dwc3/dwc3-msm.c
@@ -95,18 +95,23 @@
 #define GSI_TRB_ADDR_BIT_53_MASK	(1 << 21)
 #define GSI_TRB_ADDR_BIT_55_MASK	(1 << 23)
 
-#define	GSI_GENERAL_CFG_REG(offset) (QSCRATCH_REG_OFFSET + offset)
+#define	GSI_GENERAL_CFG_REG(reg)	(QSCRATCH_REG_OFFSET + \
+						reg[GENERAL_CFG_REG])
 #define	GSI_RESTART_DBL_PNTR_MASK	BIT(20)
 #define	GSI_CLK_EN_MASK			BIT(12)
 #define	BLOCK_GSI_WR_GO_MASK		BIT(1)
 #define	GSI_EN_MASK			BIT(0)
 
-#define GSI_DBL_ADDR_L(offset, n)	((QSCRATCH_REG_OFFSET + offset) + (n*4))
-#define GSI_DBL_ADDR_H(offset, n)	((QSCRATCH_REG_OFFSET + offset) + (n*4))
-#define GSI_RING_BASE_ADDR_L(offset, n)	((QSCRATCH_REG_OFFSET + offset) + (n*4))
-#define GSI_RING_BASE_ADDR_H(offset, n)	((QSCRATCH_REG_OFFSET + offset) + (n*4))
+#define GSI_DBL_ADDR_L(reg, n)		(QSCRATCH_REG_OFFSET + \
+						reg[DBL_ADDR_L] + (n*4))
+#define GSI_DBL_ADDR_H(reg, n)		(QSCRATCH_REG_OFFSET + \
+						reg[DBL_ADDR_H] + (n*4))
+#define GSI_RING_BASE_ADDR_L(reg, n)	(QSCRATCH_REG_OFFSET + \
+						reg[RING_BASE_ADDR_L] + (n*4))
+#define GSI_RING_BASE_ADDR_H(reg, n)	(QSCRATCH_REG_OFFSET + \
+						reg[RING_BASE_ADDR_H] + (n*4))
 
-#define	GSI_IF_STS(offset)	(QSCRATCH_REG_OFFSET + offset)
+#define	GSI_IF_STS(reg)			(QSCRATCH_REG_OFFSET + reg[IF_STS])
 #define	GSI_WR_CTRL_STATE_MASK	BIT(15)
 
 #define DWC3_GEVNTCOUNT_EVNTINTRPTMASK		(1 << 31)
@@ -698,7 +703,7 @@
 	memset(trb_link, 0, sizeof(*trb_link));
 
 	trb_link->bpl = lower_32_bits(req->trb_dma);
-	trb_link->bph = DBM_TRB_BIT |
+	trb_link->bph = upper_32_bits(req->trb_dma) | DBM_TRB_BIT |
 			DBM_TRB_DMA | DBM_TRB_EP_NUM(dep->number);
 	trb_link->size = 0;
 	trb_link->ctrl = DWC3_TRBCTL_LINK_TRB | DWC3_TRB_CTRL_HWO;
@@ -707,7 +712,7 @@
 	 * Now start the transfer
 	 */
 	memset(&params, 0, sizeof(params));
-	params.param0 = 0; /* TDAddr High */
+	params.param0 = upper_32_bits(req->trb_dma); /* TDAddr High */
 	params.param1 = lower_32_bits(req->trb_dma); /* DAddr Low */
 
 	/* DBM requires IOC to be set */
@@ -956,6 +961,8 @@
 
 	memset(&params, 0, sizeof(params));
 	params.param0 = GSI_TRB_ADDR_BIT_53_MASK | GSI_TRB_ADDR_BIT_55_MASK;
+	params.param0 |= upper_32_bits(dwc3_trb_dma_offset(dep,
+						&dep->trb_pool[0]) & 0xffff);
 	params.param0 |= (ep->ep_intr_num << 16);
 	params.param1 = lower_32_bits(dwc3_trb_dma_offset(dep,
 						&dep->trb_pool[0]));
@@ -985,9 +992,14 @@
 	struct dwc3_msm *mdwc = dev_get_drvdata(dwc->dev->parent);
 	int n = ep->ep_intr_num - 1;
 
-	dwc3_msm_write_reg(mdwc->base,
-		GSI_RING_BASE_ADDR_L(mdwc->gsi_reg[RING_BASE_ADDR_L], (n)),
-		dwc3_trb_dma_offset(dep, &dep->trb_pool[0]));
+	dwc3_msm_write_reg(mdwc->base, GSI_RING_BASE_ADDR_L(mdwc->gsi_reg, n),
+		lower_32_bits(dwc3_trb_dma_offset(dep, &dep->trb_pool[0])));
+	dwc3_msm_write_reg(mdwc->base, GSI_RING_BASE_ADDR_H(mdwc->gsi_reg, n),
+		upper_32_bits(dwc3_trb_dma_offset(dep, &dep->trb_pool[0])));
+
+	dev_dbg(mdwc->dev, "Ring Base Addr %d: %x (LSB) %x (MSB)\n", n,
+		lower_32_bits(dwc3_trb_dma_offset(dep, &dep->trb_pool[0])),
+		upper_32_bits(dwc3_trb_dma_offset(dep, &dep->trb_pool[0])));
 
 	if (!request->mapped_db_reg_phs_addr_lsb) {
 		request->mapped_db_reg_phs_addr_lsb =
@@ -1011,20 +1023,14 @@
 	 * Replace dummy doorbell address with real one as IPA connection
 	 * is setup now and GSI must be ready to handle doorbell updates.
 	 */
-	dwc3_msm_write_reg_field(mdwc->base,
-			GSI_DBL_ADDR_H(mdwc->gsi_reg[DBL_ADDR_H], (n)),
-			~0x0, 0x0);
+	dwc3_msm_write_reg(mdwc->base, GSI_DBL_ADDR_H(mdwc->gsi_reg, n),
+		upper_32_bits(request->mapped_db_reg_phs_addr_lsb));
 
-	dwc3_msm_write_reg(mdwc->base,
-		GSI_DBL_ADDR_L(mdwc->gsi_reg[DBL_ADDR_L], (n)),
-		(u32)request->mapped_db_reg_phs_addr_lsb);
-	dev_dbg(mdwc->dev, "Ring Base Addr %d: %x (LSB)\n", n,
-		dwc3_msm_read_reg(mdwc->base,
-			GSI_RING_BASE_ADDR_L(mdwc->gsi_reg[RING_BASE_ADDR_L],
-								(n))));
-	dev_dbg(mdwc->dev, "GSI DB Addr %d: %x (LSB)\n", n,
-		dwc3_msm_read_reg(mdwc->base,
-			GSI_DBL_ADDR_L(mdwc->gsi_reg[DBL_ADDR_L], (n))));
+	dwc3_msm_write_reg(mdwc->base, GSI_DBL_ADDR_L(mdwc->gsi_reg, n),
+		lower_32_bits(request->mapped_db_reg_phs_addr_lsb));
+
+	dev_dbg(mdwc->dev, "GSI DB Addr %d: %pa\n", n,
+		&request->mapped_db_reg_phs_addr_lsb);
 }
 
 /**
@@ -1038,39 +1044,42 @@
 {
 	void __iomem *gsi_dbl_address_lsb;
 	void __iomem *gsi_dbl_address_msb;
-	dma_addr_t offset;
+	dma_addr_t trb_dma;
 	struct dwc3_ep *dep = to_dwc3_ep(ep);
 	struct dwc3	*dwc = dep->dwc;
 	struct dwc3_msm *mdwc = dev_get_drvdata(dwc->dev->parent);
 	int num_trbs = (dep->direction) ? (2 * (request->num_bufs) + 2)
 					: (request->num_bufs + 2);
 
-	gsi_dbl_address_lsb = devm_ioremap_nocache(mdwc->dev,
-				request->db_reg_phs_addr_lsb, sizeof(u32));
+	gsi_dbl_address_lsb = ioremap_nocache(request->db_reg_phs_addr_lsb,
+				sizeof(u32));
 	if (!gsi_dbl_address_lsb) {
-		dev_err(mdwc->dev, "Failed to get GSI DBL address LSB\n");
+		dev_err(mdwc->dev, "Failed to map GSI DBL address LSB 0x%x\n",
+				request->db_reg_phs_addr_lsb);
 		return;
 	}
 
-	gsi_dbl_address_msb = devm_ioremap_nocache(mdwc->dev,
-			request->db_reg_phs_addr_msb, sizeof(u32));
+	gsi_dbl_address_msb = ioremap_nocache(request->db_reg_phs_addr_msb,
+				sizeof(u32));
 	if (!gsi_dbl_address_msb) {
-		dev_err(mdwc->dev, "Failed to get GSI DBL address MSB\n");
+		dev_err(mdwc->dev, "Failed to map GSI DBL address MSB 0x%x\n",
+				request->db_reg_phs_addr_msb);
+		iounmap(gsi_dbl_address_lsb);
 		return;
 	}
 
-	offset = dwc3_trb_dma_offset(dep, &dep->trb_pool[num_trbs-1]);
+	trb_dma = dwc3_trb_dma_offset(dep, &dep->trb_pool[num_trbs-1]);
 	dev_dbg(mdwc->dev, "Writing link TRB addr: %pa to %pK (%x) for ep:%s\n",
-		&offset, gsi_dbl_address_lsb, request->db_reg_phs_addr_lsb,
+		&trb_dma, gsi_dbl_address_lsb, request->db_reg_phs_addr_lsb,
 		ep->name);
 
-	dbg_log_string("ep:%s link TRB addr:%pa db:%x\n",
-		ep->name, &offset, request->db_reg_phs_addr_lsb);
-
-	writel_relaxed(offset, gsi_dbl_address_lsb);
+	writel_relaxed(lower_32_bits(trb_dma), gsi_dbl_address_lsb);
 	readl_relaxed(gsi_dbl_address_lsb);
-	writel_relaxed(0, gsi_dbl_address_msb);
+	writel_relaxed(upper_32_bits(trb_dma), gsi_dbl_address_msb);
 	readl_relaxed(gsi_dbl_address_msb);
+
+	iounmap(gsi_dbl_address_lsb);
+	iounmap(gsi_dbl_address_msb);
 }
 
 /**
@@ -1134,6 +1143,7 @@
 	size_t len;
 	unsigned long dma_attr;
 	dma_addr_t buffer_addr;
+	dma_addr_t trb0_dma;
 	struct dwc3_ep *dep = to_dwc3_ep(ep);
 	struct dwc3		*dwc = dep->dwc;
 	struct dwc3_msm *mdwc = dev_get_drvdata(dwc->dev->parent);
@@ -1176,6 +1186,8 @@
 		goto free_trb_buffer;
 	}
 
+	trb0_dma = dwc3_trb_dma_offset(dep, &dep->trb_pool[0]);
+
 	dep->num_trbs = num_trbs;
 	dma_get_sgtable(dwc->sysdev, &req->sgt_trb_xfer_ring, dep->trb_pool,
 		dep->trb_pool_dma, num_trbs * sizeof(struct dwc3_trb));
@@ -1207,7 +1219,7 @@
 
 			/* Setup n TRBs pointing to valid buffers */
 			trb->bpl = lower_32_bits(buffer_addr);
-			trb->bph = 0;
+			trb->bph = upper_32_bits(buffer_addr);
 			trb->size = 0;
 			trb->ctrl = DWC3_TRBCTL_NORMAL
 					| DWC3_TRB_CTRL_IOC;
@@ -1215,9 +1227,9 @@
 
 			/* Set up the Link TRB at the end */
 			if (i == (num_trbs - 1)) {
-				trb->bpl = dwc3_trb_dma_offset(dep,
-							&dep->trb_pool[0]);
-				trb->bph = (1 << 23) | (1 << 21)
+				trb->bpl = lower_32_bits(trb0_dma);
+				trb->bph = upper_32_bits(trb0_dma & 0xffff);
+				trb->bph |= (1 << 23) | (1 << 21)
 						| (ep->ep_intr_num << 16);
 				trb->size = 0;
 				trb->ctrl = DWC3_TRBCTL_LINK_TRB
@@ -1232,19 +1244,22 @@
 			memset(trb, 0, sizeof(*trb));
 			/* Setup LINK TRB to start with TRB ring */
 			if (i == 0) {
-				trb->bpl = dwc3_trb_dma_offset(dep,
-							&dep->trb_pool[1]);
+				trb->bpl =
+					lower_32_bits(trb0_dma + sizeof(*trb));
+				trb->bph =
+					upper_32_bits(trb0_dma + sizeof(*trb));
 				trb->ctrl = DWC3_TRBCTL_LINK_TRB;
 			} else if (i == (num_trbs - 1)) {
 				/* Set up the Link TRB at the end */
-				trb->bpl = dwc3_trb_dma_offset(dep,
-						&dep->trb_pool[0]);
-				trb->bph = (1 << 23) | (1 << 21)
+				trb->bpl = lower_32_bits(trb0_dma);
+				trb->bph = upper_32_bits(trb0_dma & 0xffff);
+				trb->bph |= (1 << 23) | (1 << 21)
 						| (ep->ep_intr_num << 16);
 				trb->ctrl = DWC3_TRBCTL_LINK_TRB
 						| DWC3_TRB_CTRL_HWO;
 			} else {
 				trb->bpl = lower_32_bits(buffer_addr);
+				trb->bph = upper_32_bits(buffer_addr);
 				trb->size = req->buf_len;
 				buffer_addr += req->buf_len;
 				trb->ctrl = DWC3_TRBCTL_NORMAL
@@ -1335,16 +1350,12 @@
 	int ret;
 
 	/* setup dummy doorbell as IPA connection isn't setup yet */
-	dwc3_msm_write_reg_field(mdwc->base,
-			GSI_DBL_ADDR_H(mdwc->gsi_reg[DBL_ADDR_H], (n)),
-			~0x0, (u32)((u64)mdwc->dummy_gsi_db_dma >> 32));
-
-	dwc3_msm_write_reg_field(mdwc->base,
-			GSI_DBL_ADDR_L(mdwc->gsi_reg[DBL_ADDR_L], (n)),
-			~0x0, (u32)mdwc->dummy_gsi_db_dma);
-	dev_dbg(mdwc->dev, "Dummy DB Addr %pK: %llx %llx (LSB)\n",
-		&mdwc->dummy_gsi_db, mdwc->dummy_gsi_db_dma,
-		(u32)mdwc->dummy_gsi_db_dma);
+	dwc3_msm_write_reg(mdwc->base, GSI_DBL_ADDR_H(mdwc->gsi_reg, n),
+			upper_32_bits(mdwc->dummy_gsi_db_dma));
+	dwc3_msm_write_reg(mdwc->base, GSI_DBL_ADDR_L(mdwc->gsi_reg, n),
+			lower_32_bits(mdwc->dummy_gsi_db_dma));
+	dev_dbg(mdwc->dev, "Dummy DB Addr %pK: %llx\n",
+		&mdwc->dummy_gsi_db, mdwc->dummy_gsi_db_dma);
 
 	memset(&params, 0x00, sizeof(params));
 
@@ -1423,18 +1434,14 @@
 	struct dwc3 *dwc = dep->dwc;
 	struct dwc3_msm *mdwc = dev_get_drvdata(dwc->dev->parent);
 
-	dwc3_msm_write_reg_field(mdwc->base,
-		GSI_GENERAL_CFG_REG(mdwc->gsi_reg[GENERAL_CFG_REG]),
+	dwc3_msm_write_reg_field(mdwc->base, GSI_GENERAL_CFG_REG(mdwc->gsi_reg),
 		GSI_CLK_EN_MASK, 1);
-	dwc3_msm_write_reg_field(mdwc->base,
-		GSI_GENERAL_CFG_REG(mdwc->gsi_reg[GENERAL_CFG_REG]),
+	dwc3_msm_write_reg_field(mdwc->base, GSI_GENERAL_CFG_REG(mdwc->gsi_reg),
 		GSI_RESTART_DBL_PNTR_MASK, 1);
-	dwc3_msm_write_reg_field(mdwc->base,
-		GSI_GENERAL_CFG_REG(mdwc->gsi_reg[GENERAL_CFG_REG]),
+	dwc3_msm_write_reg_field(mdwc->base, GSI_GENERAL_CFG_REG(mdwc->gsi_reg),
 		GSI_RESTART_DBL_PNTR_MASK, 0);
 	dev_dbg(mdwc->dev, "%s: Enable GSI\n", __func__);
-	dwc3_msm_write_reg_field(mdwc->base,
-		GSI_GENERAL_CFG_REG(mdwc->gsi_reg[GENERAL_CFG_REG]),
+	dwc3_msm_write_reg_field(mdwc->base, GSI_GENERAL_CFG_REG(mdwc->gsi_reg),
 		GSI_EN_MASK, 1);
 }
 
@@ -1454,8 +1461,7 @@
 	struct dwc3_msm *mdwc = dev_get_drvdata(dwc->dev->parent);
 
 	dbg_log_string("block_db(%d)", block_db);
-	dwc3_msm_write_reg_field(mdwc->base,
-		GSI_GENERAL_CFG_REG(mdwc->gsi_reg[GENERAL_CFG_REG]),
+	dwc3_msm_write_reg_field(mdwc->base, GSI_GENERAL_CFG_REG(mdwc->gsi_reg),
 		BLOCK_GSI_WR_GO_MASK, block_db);
 }
 
@@ -1469,7 +1475,7 @@
 	u32	timeout = 1500;
 
 	while (dwc3_msm_read_reg_field(mdwc->base,
-		GSI_IF_STS(mdwc->gsi_reg[IF_STS]), GSI_WR_CTRL_STATE_MASK)) {
+		GSI_IF_STS(mdwc->gsi_reg), GSI_WR_CTRL_STATE_MASK)) {
 		if (!timeout--) {
 			dev_err(mdwc->dev,
 			"Unable to suspend GSI ch. WR_CTRL_STATE != 0\n");
@@ -2092,6 +2098,7 @@
 			dwc3_writel(dwc->regs, DWC3_GEVNTADRLO((i+1)),
 				lower_32_bits(evt->dma));
 			dwc3_writel(dwc->regs, DWC3_GEVNTADRHI((i+1)),
+				(upper_32_bits(evt->dma) & 0xffff) |
 				DWC3_GEVNTADRHI_EVNTADRHI_GSI_EN(
 				DWC3_GEVENT_TYPE_GSI) |
 				DWC3_GEVNTADRHI_EVNTADRHI_GSI_IDX((i+1)));
@@ -2156,8 +2163,11 @@
 	case DWC3_CONTROLLER_NOTIFY_CLEAR_DB:
 		dev_dbg(mdwc->dev, "DWC3_CONTROLLER_NOTIFY_CLEAR_DB\n");
 		dwc3_msm_write_reg_field(mdwc->base,
-			GSI_GENERAL_CFG_REG(mdwc->gsi_reg[GENERAL_CFG_REG]),
+			GSI_GENERAL_CFG_REG(mdwc->gsi_reg),
 			BLOCK_GSI_WR_GO_MASK, true);
+		dwc3_msm_write_reg_field(mdwc->base,
+			GSI_GENERAL_CFG_REG(mdwc->gsi_reg),
+			GSI_EN_MASK, 0);
 		break;
 	default:
 		dev_dbg(mdwc->dev, "unknown dwc3 event\n");
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index cfe0baa..5c5b446 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -805,6 +805,7 @@
 
 static void dwc3_remove_requests(struct dwc3 *dwc, struct dwc3_ep *dep)
 {
+	int retries = 40;
 	struct dwc3_request		*req;
 
 	dbg_log_string("START for %s(%d)", dep->name, dep->number);
@@ -824,6 +825,14 @@
 		dwc->eps[1]->trb_enqueue = 0;
 	}
 
+	do {
+		udelay(50);
+	} while ((dep->flags & DWC3_EP_END_TRANSFER_PENDING) && --retries);
+
+	if (!retries)
+		dbg_log_string("ep end_xfer cmd completion timeout for %d",
+				dep->number);
+
 	/* - giveback all requests to gadget driver */
 	while (!list_empty(&dep->started_list)) {
 		req = next_request(&dep->started_list);
@@ -2102,9 +2111,17 @@
 	/* phy sync delay as per data book */
 	msleep(50);
 
+	/*
+	 * Soft reset clears the block on the doorbell,
+	 * set it back to prevent unwanted writes to the doorbell.
+	 */
+	dwc3_notify_event(dwc, DWC3_CONTROLLER_NOTIFY_CLEAR_DB, 0);
+
 	return 0;
 }
 
+#define MIN_RUN_STOP_DELAY_MS 50
+
 static int dwc3_gadget_run_stop(struct dwc3 *dwc, int is_on, int suspend)
 {
 	u32			reg, reg1;
@@ -2213,6 +2230,7 @@
 	struct dwc3		*dwc = gadget_to_dwc(g);
 	unsigned long		flags;
 	int			ret;
+	ktime_t			diff;
 
 	is_on = !!is_on;
 	dwc->softconnect = is_on;
@@ -2231,6 +2249,15 @@
 	dbg_event(0xFF, "Pullup gsync",
 		atomic_read(&dwc->dev->power.usage_count));
 
+	diff = ktime_sub(ktime_get(), dwc->last_run_stop);
+	if (ktime_to_ms(diff) < MIN_RUN_STOP_DELAY_MS) {
+		dbg_event(0xFF, "waitBefRun_Stop",
+			  MIN_RUN_STOP_DELAY_MS - ktime_to_ms(diff));
+		msleep(MIN_RUN_STOP_DELAY_MS - ktime_to_ms(diff));
+	}
+
+	dwc->last_run_stop = ktime_get();
+
 	/*
 	 * Per databook, when we want to stop the gadget, if a control transfer
 	 * is still in process, complete it and get the core into setup phase.
@@ -2253,6 +2280,9 @@
 	/* prevent pending bh to run later */
 	flush_work(&dwc->bh_work);
 
+	if (is_on)
+		dwc3_device_core_soft_reset(dwc);
+
 	spin_lock_irqsave(&dwc->lock, flags);
 	if (dwc->ep0state != EP0_SETUP_PHASE)
 		dbg_event(0xFF, "EP0 is not in SETUP phase\n", 0);
@@ -2384,8 +2414,6 @@
 			 * signaled by the gadget driver.
 			 */
 			ret = dwc3_gadget_run_stop(dwc, 1, false);
-		} else {
-			ret = dwc3_gadget_run_stop(dwc, 0, false);
 		}
 	}
 
@@ -2394,6 +2422,7 @@
 	 * Make sure to let gadget driver know in that case.
 	 */
 	if (!dwc->vbus_active) {
+		ret = dwc3_gadget_run_stop(dwc, 0, false);
 		dev_dbg(dwc->dev, "calling disconnect from %s\n", __func__);
 		dwc3_gadget_disconnect_interrupt(dwc);
 	}
@@ -2634,7 +2663,6 @@
 #define NUM_GSI_OUT_EPS	1
 #define NUM_GSI_IN_EPS	2
 
-
 static int dwc3_gadget_init_control_endpoint(struct dwc3_ep *dep)
 {
 	struct dwc3 *dwc = dep->dwc;
@@ -2739,12 +2767,16 @@
 		/* Reserve EPs at the end for GSI */
 		if (!dep->direction && num >
 				out_count - NUM_GSI_OUT_EPS - 1) {
+			/* Allocation of TRBs are handled by GSI EP ops. */
+			dwc3_free_trb_pool(dep);
 			idx = num - (out_count - NUM_GSI_OUT_EPS - 1);
 			snprintf(dep->name, sizeof(dep->name), "gsi-epout%d",
 					idx);
 			dep->endpoint.ep_type = EP_TYPE_GSI;
 		} else if (dep->direction && num >
 				in_count - NUM_GSI_IN_EPS - 1) {
+			/* Allocation of TRBs are handled by GSI EP ops. */
+			dwc3_free_trb_pool(dep);
 			idx = num - (in_count - NUM_GSI_IN_EPS - 1);
 			snprintf(dep->name, sizeof(dep->name), "gsi-epin%d",
 					idx);
diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig
index d3d4c98..ac94a6f 100644
--- a/drivers/usb/gadget/Kconfig
+++ b/drivers/usb/gadget/Kconfig
@@ -412,6 +412,7 @@
 config USB_CONFIGFS_F_ACC
 	bool "Accessory gadget"
 	depends on USB_CONFIGFS
+	depends on HID=y
 	select USB_F_ACC
 	help
 	  USB gadget Accessory support
diff --git a/drivers/usb/gadget/configfs.c b/drivers/usb/gadget/configfs.c
index 3006274..e62e2cb 100644
--- a/drivers/usb/gadget/configfs.c
+++ b/drivers/usb/gadget/configfs.c
@@ -166,7 +166,7 @@
 		if (!str)
 			return -ENOMEM;
 	}
-	strncpy(str, s, MAX_USB_STRING_WITH_NULL_LEN);
+	strlcpy(str, s, MAX_USB_STRING_WITH_NULL_LEN);
 	if (str[ret - 1] == '\n')
 		str[ret - 1] = '\0';
 	*s_copy = str;
diff --git a/drivers/usb/gadget/function/f_accessory.c b/drivers/usb/gadget/function/f_accessory.c
index 591bff9..3341c92 100644
--- a/drivers/usb/gadget/function/f_accessory.c
+++ b/drivers/usb/gadget/function/f_accessory.c
@@ -567,8 +567,7 @@
 {
 	struct acc_dev *dev = fp->private_data;
 	struct usb_request *req;
-	ssize_t r = count;
-	unsigned xfer;
+	ssize_t r = count, xfer, len;
 	int ret = 0;
 
 	pr_debug("acc_read(%zu)\n", count);
@@ -589,6 +588,8 @@
 		goto done;
 	}
 
+	len = ALIGN(count, dev->ep_out->maxpacket);
+
 	if (dev->rx_done) {
 		// last req cancelled. try to get it.
 		req = dev->rx_req[0];
@@ -598,7 +599,7 @@
 requeue_req:
 	/* queue a request */
 	req = dev->rx_req[0];
-	req->length = count;
+	req->length = len;
 	dev->rx_done = 0;
 	ret = usb_ep_queue(dev->ep_out, req, GFP_KERNEL);
 	if (ret < 0) {
@@ -912,6 +913,8 @@
 			memset(dev->serial, 0, sizeof(dev->serial));
 			dev->start_requested = 0;
 			dev->audio_mode = 0;
+			strlcpy(dev->manufacturer, "Android", ACC_STRING_SIZE);
+			strlcpy(dev->model, "Android", ACC_STRING_SIZE);
 		}
 	}
 
@@ -1214,13 +1217,13 @@
 	INIT_DELAYED_WORK(&dev->start_work, acc_start_work);
 	INIT_WORK(&dev->hid_work, acc_hid_work);
 
-	/* _acc_dev must be set before calling usb_gadget_register_driver */
-	_acc_dev = dev;
-
 	ret = misc_register(&acc_device);
 	if (ret)
 		goto err;
 
+	/* _acc_dev must be set before calling usb_gadget_register_driver */
+	_acc_dev = dev;
+
 	return 0;
 
 err:
diff --git a/drivers/usb/gadget/function/f_cdev.c b/drivers/usb/gadget/function/f_cdev.c
index 3bbf33b..d9554b5 100644
--- a/drivers/usb/gadget/function/f_cdev.c
+++ b/drivers/usb/gadget/function/f_cdev.c
@@ -348,6 +348,23 @@
 	return container_of(cser, struct f_cdev, port_usb);
 }
 
+static unsigned int convert_uart_sigs_to_acm(unsigned int uart_sig)
+{
+	unsigned int acm_sig = 0;
+
+	/* should this needs to be in calling functions ??? */
+	uart_sig &= (TIOCM_RI | TIOCM_CD | TIOCM_DSR);
+
+	if (uart_sig & TIOCM_RI)
+		acm_sig |= ACM_CTRL_RI;
+	if (uart_sig & TIOCM_CD)
+		acm_sig |= ACM_CTRL_DCD;
+	if (uart_sig & TIOCM_DSR)
+		acm_sig |= ACM_CTRL_DSR;
+
+	return acm_sig;
+}
+
 static unsigned int convert_acm_sigs_to_uart(unsigned int acm_sig)
 {
 	unsigned int uart_sig = 0;
@@ -1357,6 +1374,12 @@
 
 	if (cser->serial_state & TIOCM_RI)
 		result |= TIOCM_RI;
+
+	if (cser->serial_state & TIOCM_DSR)
+		result |= TIOCM_DSR;
+
+	if (cser->serial_state & TIOCM_CTS)
+		result |= TIOCM_CTS;
 	return result;
 }
 
@@ -1397,6 +1420,24 @@
 		}
 	}
 
+	if (set & TIOCM_DSR)
+		cser->serial_state |= TIOCM_DSR;
+
+	if (clear & TIOCM_DSR)
+		cser->serial_state &= ~TIOCM_DSR;
+
+	if (set & TIOCM_CTS) {
+		if (cser->send_break) {
+			cser->serial_state |= TIOCM_CTS;
+			status = cser->send_break(cser, 0);
+		}
+	}
+	if (clear & TIOCM_CTS) {
+		if (cser->send_break) {
+			cser->serial_state &= ~TIOCM_CTS;
+			status = cser->send_break(cser, 1);
+		}
+	}
 	return status;
 }
 
@@ -1447,7 +1488,9 @@
 {
 	int temp;
 	struct f_cdev *port = fport;
+	struct cserial *cser;
 
+	cser = &port->port_usb;
 	if (!port) {
 		pr_err("port is null\n");
 		return;
@@ -1463,6 +1506,17 @@
 	port->cbits_to_modem = temp;
 	port->cbits_updated = true;
 
+	 /* if DTR is high, update latest modem info to laptop */
+	if (port->cbits_to_modem & TIOCM_DTR) {
+		unsigned int result;
+		unsigned int cbits_to_laptop;
+
+		result = f_cdev_tiocmget(port);
+		cbits_to_laptop = convert_uart_sigs_to_acm(result);
+		if (cser->send_modem_ctrl_bits)
+			cser->send_modem_ctrl_bits(cser, cbits_to_laptop);
+	}
+
 	wake_up(&port->read_wq);
 }
 
@@ -1512,8 +1566,10 @@
 
 void usb_cser_disconnect(struct f_cdev *port)
 {
+	struct cserial *cser;
 	unsigned long flags;
 
+	cser = &port->port_usb;
 	usb_cser_stop_io(port);
 
 	/* lower DTR to modem */
@@ -1521,6 +1577,7 @@
 
 	spin_lock_irqsave(&port->port_lock, flags);
 	port->is_connected = false;
+	cser->notify_modem = NULL;
 	port->nbytes_from_host = port->nbytes_to_host = 0;
 	port->nbytes_to_port_bridge = 0;
 	spin_unlock_irqrestore(&port->port_lock, flags);
diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
index f916f87..4024d3d 100644
--- a/drivers/usb/gadget/function/f_fs.c
+++ b/drivers/usb/gadget/function/f_fs.c
@@ -1117,6 +1117,7 @@
 
 		ret = usb_ep_queue(ep->ep, req, GFP_ATOMIC);
 		if (unlikely(ret)) {
+			io_data->req = NULL;
 			usb_ep_free_request(ep->ep, req);
 			goto error_lock;
 		}
@@ -1904,6 +1905,10 @@
 	ffs->state = FFS_READ_DESCRIPTORS;
 	ffs->setup_state = FFS_NO_SETUP;
 	ffs->flags = 0;
+
+	ffs->ms_os_descs_ext_prop_count = 0;
+	ffs->ms_os_descs_ext_prop_name_len = 0;
+	ffs->ms_os_descs_ext_prop_data_len = 0;
 }
 
 
diff --git a/drivers/usb/gadget/function/f_gsi.c b/drivers/usb/gadget/function/f_gsi.c
index 19da5e2..870a0ce 100644
--- a/drivers/usb/gadget/function/f_gsi.c
+++ b/drivers/usb/gadget/function/f_gsi.c
@@ -2591,10 +2591,6 @@
 	struct usb_function *f = &gsi->function;
 	int status;
 
-	/* maybe allocate device-global string IDs */
-	if (info->string_defs[0].id != 0)
-		goto skip_string_id_alloc;
-
 	if (info->ctrl_str_idx >= 0 && info->ctrl_desc) {
 		/* ctrl interface label */
 		status = usb_string_id(cdev);
@@ -2631,7 +2627,6 @@
 		info->cdc_eth_desc->iMACAddress = status;
 	}
 
-skip_string_id_alloc:
 	if (info->ctrl_desc)
 		info->ctrl_desc->bInterfaceNumber = gsi->ctrl_id;
 
diff --git a/drivers/usb/gadget/function/f_mtp.c b/drivers/usb/gadget/function/f_mtp.c
index 00dc4cb..19a6511 100644
--- a/drivers/usb/gadget/function/f_mtp.c
+++ b/drivers/usb/gadget/function/f_mtp.c
@@ -1592,7 +1592,7 @@
 	}
 
 	seq_printf(s, "vfs_write(time in usec) min:%d\t max:%d\t avg:%d\n",
-						min, max, sum / iteration);
+				min, max, (iteration ? (sum / iteration) : 0));
 	min = max = sum = iteration = 0;
 	seq_puts(s, "\n=======================\n");
 	seq_puts(s, "MTP Read Stats:\n");
@@ -1614,7 +1614,7 @@
 	}
 
 	seq_printf(s, "vfs_read(time in usec) min:%d\t max:%d\t avg:%d\n",
-						min, max, sum / iteration);
+				min, max, (iteration ? (sum / iteration) : 0));
 	spin_unlock_irqrestore(&dev->lock, flags);
 	return 0;
 }
diff --git a/drivers/usb/gadget/function/f_qdss.c b/drivers/usb/gadget/function/f_qdss.c
index f0ae181..2bb20476 100644
--- a/drivers/usb/gadget/function/f_qdss.c
+++ b/drivers/usb/gadget/function/f_qdss.c
@@ -2,7 +2,7 @@
 /*
  * f_qdss.c -- QDSS function Driver
  *
- * Copyright (c) 2012-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/init.h>
@@ -225,7 +225,7 @@
 	enum qdss_state state;
 	unsigned long flags;
 
-	pr_debug("%s\n", __func__);
+	qdss_log("%s\n", __func__);
 
 	if (qdss->debug_inface_enabled) {
 		in = qdss->port.ctrl_in;
@@ -241,6 +241,7 @@
 	if (!qdss->debug_inface_enabled)
 		list_del(&req->list);
 	list_add_tail(&req->list, list_pool);
+	complete(&d_req->write_done);
 	if (req->length != 0) {
 		d_req->actual = req->actual;
 		d_req->status = req->status;
@@ -258,7 +259,7 @@
 	struct qdss_request *d_req = req->context;
 	unsigned long flags;
 
-	pr_debug("%s\n", __func__);
+	qdss_log("%s\n", __func__);
 
 	d_req->actual = req->actual;
 	d_req->status = req->status;
@@ -278,14 +279,14 @@
 	struct usb_request *req;
 	struct list_head *act, *tmp;
 
-	pr_debug("%s\n", __func__);
-
 	qdss = ch->priv_usb;
 	if (!qdss) {
 		pr_err("%s: qdss ctx is NULL\n", __func__);
 		return;
 	}
 
+	qdss_log("%s: channel name = %s\n", __func__, qdss->ch.name);
+
 	list_for_each_safe(act, tmp, &qdss->data_write_pool) {
 		req = list_entry(act, struct usb_request, list);
 		list_del(&req->list);
@@ -315,7 +316,7 @@
 	struct list_head *list_pool;
 	int i;
 
-	pr_debug("%s\n", __func__);
+	qdss_log("%s\n", __func__);
 
 	if (!qdss) {
 		pr_err("%s: %s closed\n", __func__, ch->name);
@@ -370,7 +371,7 @@
 {
 	struct f_qdss *qdss = func_to_qdss(f);
 
-	pr_debug("%s\n", __func__);
+	qdss_log("%s: channel name = %s\n", __func__, qdss->ch.name);
 
 	if (qdss->port.ctrl_in)
 		qdss->port.ctrl_in->driver_data = NULL;
@@ -382,7 +383,9 @@
 
 static void clear_desc(struct usb_gadget *gadget, struct usb_function *f)
 {
-	pr_debug("%s\n", __func__);
+	struct f_qdss *qdss = func_to_qdss(f);
+
+	qdss_log("%s: channel name = %s\n", __func__, qdss->ch.name);
 
 	usb_free_all_descriptors(f);
 }
@@ -394,7 +397,7 @@
 	struct usb_ep *ep;
 	int iface, id, ret;
 
-	pr_debug("%s\n", __func__);
+	qdss_log("%s: channel name = %s\n", __func__, qdss->ch.name);
 
 	/* Allocate data I/F */
 	iface = usb_interface_id(c, f);
@@ -440,7 +443,7 @@
 		&qdss_data_ep_comp_desc);
 	if (!ep) {
 		pr_err("%s: ep_autoconfig error\n", __func__);
-		goto fail;
+		goto clear_ep;
 	}
 	qdss->port.data = ep;
 	ep->driver_data = qdss;
@@ -450,8 +453,9 @@
 			&qdss_ctrl_in_ep_comp_desc);
 		if (!ep) {
 			pr_err("%s: ep_autoconfig error\n", __func__);
-			goto fail;
+			goto clear_ep;
 		}
+
 		qdss->port.ctrl_in = ep;
 		ep->driver_data = qdss;
 
@@ -459,12 +463,21 @@
 			&qdss_ctrl_out_ep_comp_desc);
 		if (!ep) {
 			pr_err("%s: ep_autoconfig error\n", __func__);
-			goto fail;
+			goto clear_ep;
 		}
 		qdss->port.ctrl_out = ep;
 		ep->driver_data = qdss;
 	}
 
+	if (!strcmp(qdss->ch.name, USB_QDSS_CH_MSM)) {
+		ret = alloc_sps_req(qdss->port.data);
+		if (ret) {
+			pr_err("%s: alloc_sps_req error (%d)\n",
+							__func__, ret);
+			goto clear_ep;
+		}
+	}
+
 	/*update fs descriptors*/
 	qdss_fs_data_desc.bEndpointAddress =
 		qdss_ss_data_desc.bEndpointAddress;
@@ -497,9 +510,18 @@
 		goto fail;
 
 	return 0;
+
 fail:
+	/* check if usb_request allocated */
+	if (qdss->endless_req) {
+		usb_ep_free_request(qdss->port.data,
+				qdss->endless_req);
+		qdss->endless_req = NULL;
+	}
+
+clear_ep:
 	clear_eps(f);
-	clear_desc(gadget, f);
+
 	return -ENOTSUPP;
 }
 
@@ -509,10 +531,16 @@
 	struct f_qdss  *qdss = func_to_qdss(f);
 	struct usb_gadget *gadget = c->cdev->gadget;
 
-	pr_debug("%s\n", __func__);
+	qdss_log("%s: channel name = %s\n", __func__, qdss->ch.name);
 
 	flush_workqueue(qdss->wq);
 
+	if (qdss->endless_req) {
+		usb_ep_free_request(qdss->port.data,
+				qdss->endless_req);
+		qdss->endless_req = NULL;
+	}
+
 	/* Reset string ids */
 	qdss_string_defs[QDSS_DATA_IDX].id = 0;
 	qdss_string_defs[QDSS_CTRL_IDX].id = 0;
@@ -527,7 +555,7 @@
 {
 	struct f_qdss  *qdss = func_to_qdss(f);
 
-	pr_debug("%s\n", __func__);
+	qdss_log("%s: channel name = %s\n", __func__, qdss->ch.name);
 
 	if (qdss->ctrl_in_enabled) {
 		usb_ep_disable(qdss->port.ctrl_in);
@@ -550,10 +578,9 @@
 {
 	struct f_qdss *qdss;
 	int status;
-	unsigned long flags;
 
 	qdss = container_of(work, struct f_qdss, disconnect_w);
-	pr_debug("%s\n", __func__);
+	qdss_log("%s: channel name = %s\n", __func__, qdss->ch.name);
 
 
 	/* Notify qdss to cancel all active transfers */
@@ -572,14 +599,6 @@
 		status = set_qdss_data_connection(qdss, 0);
 		if (status)
 			pr_err("qdss_disconnect error\n");
-
-		spin_lock_irqsave(&qdss->lock, flags);
-		if (qdss->endless_req) {
-			usb_ep_free_request(qdss->port.data,
-					qdss->endless_req);
-			qdss->endless_req = NULL;
-		}
-		spin_unlock_irqrestore(&qdss->lock, flags);
 	}
 
 	/*
@@ -594,7 +613,7 @@
 	struct f_qdss	*qdss = func_to_qdss(f);
 	unsigned long flags;
 
-	pr_debug("%s\n", __func__);
+	qdss_log("%s: channel name = %s\n", __func__, qdss->ch.name);
 	spin_lock_irqsave(&qdss->lock, flags);
 	if (!qdss->usb_connected) {
 		spin_unlock_irqrestore(&qdss->lock, flags);
@@ -619,12 +638,12 @@
 
 	/* If cable is already removed, discard connect_work */
 	if (qdss->usb_connected == 0) {
-		pr_debug("%s: discard connect_work\n", __func__);
+		qdss_log("%s: discard connect_work\n", __func__);
 		cancel_work_sync(&qdss->disconnect_w);
 		return;
 	}
 
-	pr_debug("%s\n", __func__);
+	qdss_log("%s: channel name = %s\n", __func__, qdss->ch.name);
 
 	if (!strcmp(qdss->ch.name, USB_QDSS_CH_MDM))
 		goto notify;
@@ -661,7 +680,7 @@
 	struct usb_qdss_ch *ch = &qdss->ch;
 	int ret = 0;
 
-	pr_debug("%s qdss pointer = %pK\n", __func__, qdss);
+	qdss_log("%s qdss pointer = %pK\n", __func__, qdss);
 	qdss->gadget = gadget;
 
 	if (alt != 0)
@@ -727,12 +746,12 @@
 		if (qdss->ctrl_out_enabled && qdss->ctrl_in_enabled &&
 			qdss->data_enabled) {
 			qdss->usb_connected = 1;
-			pr_debug("%s usb_connected INTF enabled\n", __func__);
+			qdss_log("%s usb_connected INTF enabled\n", __func__);
 		}
 	} else {
 		if (qdss->data_enabled) {
 			qdss->usb_connected = 1;
-			pr_debug("%s usb_connected INTF disabled\n", __func__);
+			qdss_log("%s usb_connected INTF disabled\n", __func__);
 		}
 	}
 
@@ -807,7 +826,7 @@
 	unsigned long flags;
 	struct usb_request *req = NULL;
 
-	pr_debug("%s\n", __func__);
+	qdss_log("%s\n", __func__);
 
 	if (!qdss)
 		return -ENODEV;
@@ -852,7 +871,7 @@
 	unsigned long flags;
 	struct usb_request *req = NULL;
 
-	pr_debug("%s\n", __func__);
+	qdss_log("%s\n", __func__);
 
 	if (!qdss)
 		return -ENODEV;
@@ -896,7 +915,7 @@
 	unsigned long flags;
 	struct usb_request *req = NULL;
 
-	pr_debug("usb_qdss_data_write\n");
+	qdss_log("usb_qdss_data_write\n");
 
 	if (!qdss)
 		return -ENODEV;
@@ -925,10 +944,12 @@
 	req->sg = d_req->sg;
 	req->num_sgs = d_req->num_sgs;
 	req->num_mapped_sgs = d_req->num_mapped_sgs;
+	reinit_completion(&d_req->write_done);
 	if (usb_ep_queue(qdss->port.data, req, GFP_ATOMIC)) {
 		spin_lock_irqsave(&qdss->lock, flags);
 		/* Remove from queued pool and add back to data pool */
 		list_move_tail(&req->list, &qdss->data_write_pool);
+		complete(&d_req->write_done);
 		spin_unlock_irqrestore(&qdss->lock, flags);
 		pr_err("qdss usb_ep_queue failed\n");
 		return -EIO;
@@ -947,7 +968,7 @@
 	unsigned long flags;
 	int found = 0;
 
-	pr_debug("%s\n", __func__);
+	qdss_log("%s\n", __func__);
 
 	if (!notify) {
 		pr_err("%s: notification func is missing\n", __func__);
@@ -965,11 +986,11 @@
 
 	if (!found) {
 		spin_unlock_irqrestore(&qdss_lock, flags);
-		pr_debug("%s failed as %s not found\n", __func__, name);
+		qdss_log("%s failed as %s not found\n", __func__, name);
 		return NULL;
 	}
 
-	pr_debug("%s: qdss ctx found\n", __func__);
+	qdss_log("%s: qdss ctx found\n", __func__);
 	qdss = container_of(ch, struct f_qdss, ch);
 	ch->priv_usb = qdss;
 	ch->priv = priv;
@@ -993,8 +1014,9 @@
 	unsigned long flags;
 	int status;
 	struct usb_request *req;
+	struct qdss_request *d_req;
 
-	pr_debug("%s\n", __func__);
+	qdss_log("%s\n", __func__);
 
 	spin_lock_irqsave(&qdss_lock, flags);
 	if (!qdss)
@@ -1003,12 +1025,10 @@
 	while (!list_empty(&qdss->queued_data_pool)) {
 		req = list_first_entry(&qdss->queued_data_pool,
 				struct usb_request, list);
+		d_req = req->context;
 		spin_unlock_irqrestore(&qdss_lock, flags);
-		if (usb_ep_dequeue(qdss->port.data, req)) {
-			spin_lock_irqsave(&qdss_lock, flags);
-			list_move_tail(&req->list, &qdss->data_write_pool);
-			spin_unlock_irqrestore(&qdss_lock, flags);
-		}
+		usb_ep_dequeue(qdss->port.data, req);
+		wait_for_completion(&d_req->write_done);
 		spin_lock_irqsave(&qdss_lock, flags);
 	}
 	usb_qdss_free_req(ch);
@@ -1025,11 +1045,6 @@
 		spin_unlock_irqrestore(&qdss_lock, flags);
 		usb_ep_dequeue(qdss->port.data, qdss->endless_req);
 		spin_lock_irqsave(&qdss_lock, flags);
-		if (qdss->endless_req) {
-			usb_ep_free_request(qdss->port.data,
-					qdss->endless_req);
-			qdss->endless_req = NULL;
-		}
 	}
 	gadget = qdss->gadget;
 	ch->app_conn = 0;
@@ -1052,7 +1067,7 @@
 	struct usb_qdss_ch *_ch;
 	unsigned long flags;
 
-	pr_debug("%s\n", __func__);
+	qdss_log("%s\n", __func__);
 
 	list_for_each_safe(act, tmp, &usb_qdss_ch_list) {
 		_ch = list_entry(act, struct usb_qdss_ch, list);
@@ -1164,7 +1179,7 @@
 	}
 
 	opts->channel_name = ptr;
-	pr_debug("qdss: channel_name:%s\n", opts->channel_name);
+	qdss_log("qdss: channel_name:%s\n", opts->channel_name);
 
 	usb_qdss = alloc_usb_qdss(opts->channel_name);
 	if (IS_ERR(usb_qdss)) {
@@ -1217,6 +1232,10 @@
 {
 	int ret;
 
+	_qdss_ipc_log = ipc_log_context_create(NUM_PAGES, "usb_qdss", 0);
+	if (IS_ERR_OR_NULL(_qdss_ipc_log))
+		_qdss_ipc_log =  NULL;
+
 	INIT_LIST_HEAD(&usb_qdss_ch_list);
 	ret = usb_function_register(&qdssusb_func);
 	if (ret) {
@@ -1228,6 +1247,7 @@
 
 static void __exit usb_qdss_exit(void)
 {
+	ipc_log_context_destroy(_qdss_ipc_log);
 	usb_function_unregister(&qdssusb_func);
 	qdss_cleanup();
 }
diff --git a/drivers/usb/gadget/function/f_qdss.h b/drivers/usb/gadget/function/f_qdss.h
index 5a68f23..28fee89 100644
--- a/drivers/usb/gadget/function/f_qdss.h
+++ b/drivers/usb/gadget/function/f_qdss.h
@@ -1,12 +1,13 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
 /*
- * Copyright (c) 2012-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved.
  */
 
 #ifndef _F_QDSS_H
 #define _F_QDSS_H
 
 #include <linux/kernel.h>
+#include <linux/ipc_logging.h>
 #include <linux/usb/ch9.h>
 #include <linux/usb/gadget.h>
 #include <linux/usb/composite.h>
@@ -66,6 +67,20 @@
 	bool qdss_close;
 };
 
+static void *_qdss_ipc_log;
+
+#define NUM_PAGES	10 /* # of pages for ipc logging */
+
+#ifdef CONFIG_DYNAMIC_DEBUG
+#define qdss_log(fmt, ...) do { \
+	ipc_log_string(_qdss_ipc_log, "%s: " fmt,  __func__, ##__VA_ARGS__); \
+	dynamic_pr_debug("%s: " fmt, __func__, ##__VA_ARGS__); \
+} while (0)
+#else
+#define qdss_log(fmt, ...) \
+	ipc_log_string(_qdss_ipc_log, "%s: " fmt,  __func__, ##__VA_ARGS__)
+#endif
+
 struct usb_qdss_opts {
 	struct usb_function_instance func_inst;
 	struct f_qdss *usb_qdss;
@@ -74,4 +89,5 @@
 
 int uninit_data(struct usb_ep *ep);
 int set_qdss_data_connection(struct f_qdss *qdss, int enable);
+int alloc_sps_req(struct usb_ep *data_ep);
 #endif
diff --git a/drivers/usb/gadget/function/u_qdss.c b/drivers/usb/gadget/function/u_qdss.c
index 1747d1c..7841295 100644
--- a/drivers/usb/gadget/function/u_qdss.c
+++ b/drivers/usb/gadget/function/u_qdss.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2012-2018, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/kernel.h>
@@ -9,7 +9,7 @@
 #include <linux/dma-mapping.h>
 
 #include "f_qdss.h"
-static int alloc_sps_req(struct usb_ep *data_ep)
+int alloc_sps_req(struct usb_ep *data_ep)
 {
 	struct usb_request *req = NULL;
 	struct f_qdss *qdss = data_ep->driver_data;
@@ -24,8 +24,7 @@
 	}
 
 	req->length = 32*1024;
-	sps_params = MSM_SPS_MODE | MSM_DISABLE_WB |
-			qdss->bam_info.usb_bam_pipe_idx;
+	sps_params = MSM_SPS_MODE | MSM_DISABLE_WB;
 	req->udc_priv = sps_params;
 	qdss->endless_req = req;
 
@@ -98,7 +97,7 @@
 				&bam_info.usb_bam_pipe_idx,
 				NULL, bam_info.data_fifo, NULL);
 
-		alloc_sps_req(qdss->port.data);
+		qdss->endless_req->udc_priv |= qdss->bam_info.usb_bam_pipe_idx;
 		msm_data_fifo_config(qdss->port.data,
 			bam_info.data_fifo->iova,
 			bam_info.data_fifo->size,
diff --git a/drivers/usb/phy/phy-msm-qusb.c b/drivers/usb/phy/phy-msm-qusb.c
index 0b488b1..7f3135c 100644
--- a/drivers/usb/phy/phy-msm-qusb.c
+++ b/drivers/usb/phy/phy-msm-qusb.c
@@ -11,6 +11,8 @@
 #include <linux/delay.h>
 #include <linux/io.h>
 #include <linux/of.h>
+#include <linux/extcon.h>
+#include <linux/extcon-provider.h>
 #include <linux/debugfs.h>
 #include <linux/platform_device.h>
 #include <linux/power_supply.h>
@@ -20,6 +22,17 @@
 #include <linux/usb/phy.h>
 #include <linux/reset.h>
 
+#define QUSB2PHY_PLL_PWR_CTL		0x18
+#define REF_BUF_EN			BIT(0)
+#define REXT_EN				BIT(1)
+#define PLL_BYPASSNL			BIT(2)
+#define REXT_TRIM_0			BIT(4)
+
+#define QUSB2PHY_PLL_AUTOPGM_CTL1	0x1C
+#define PLL_RESET_N_CNT_5		0x5
+#define PLL_RESET_N			BIT(4)
+#define PLL_AUTOPGM_EN			BIT(7)
+
 #define QUSB2PHY_PLL_STATUS	0x38
 #define QUSB2PHY_PLL_LOCK	BIT(5)
 
@@ -48,6 +61,7 @@
 #define CORE_READY_STATUS		BIT(0)
 
 #define QUSB2PHY_PORT_UTMI_CTRL1	0xC0
+#define SUSPEND_N			BIT(5)
 #define TERM_SELECT			BIT(4)
 #define XCVR_SELECT_FS			BIT(2)
 #define OP_MODE_NON_DRIVE		BIT(0)
@@ -56,6 +70,9 @@
 #define UTMI_ULPI_SEL			BIT(7)
 #define UTMI_TEST_MUX_SEL		BIT(6)
 
+#define QUSB2PHY_PLL_AUTOPGM_CTL1	0x1C
+#define QUSB2PHY_PLL_PWR_CTL		0x18
+
 #define QUSB2PHY_PLL_TEST		0x04
 #define CLK_REF_SEL			BIT(7)
 
@@ -75,6 +92,9 @@
 #define DPSE_INTR_HIGH_SEL              BIT(1)
 #define DPSE_INTR_EN                    BIT(0)
 
+#define QUSB2PHY_PORT_INTR_STATUS	0xF0
+#define DPSE_INTR_HIGH			BIT(0)
+
 #define QUSB2PHY_PORT_UTMI_STATUS	0xF4
 #define LINESTATE_DP			BIT(0)
 #define LINESTATE_DM			BIT(1)
@@ -92,6 +112,23 @@
 
 #define HSTX_TRIMSIZE			4
 
+enum port_state {
+	PORT_UNKNOWN,
+	PORT_DISCONNECTED,
+	PORT_DCD_IN_PROGRESS,
+	PORT_PRIMARY_IN_PROGRESS,
+	PORT_SECONDARY_IN_PROGRESS,
+	PORT_CHG_DET_DONE,
+	PORT_HOST_MODE,
+};
+
+enum chg_det_state {
+	STATE_UNKNOWN,
+	STATE_DCD,
+	STATE_PRIMARY,
+	STATE_SECONDARY,
+};
+
 struct qusb_phy {
 	struct usb_phy		phy;
 	void __iomem		*base;
@@ -136,6 +173,14 @@
 	bool			put_into_high_z_state;
 	struct mutex		phy_lock;
 
+	struct extcon_dev	*usb_extcon;
+	bool			vbus_active;
+	bool			id_state;
+	struct power_supply	*usb_psy;
+	struct delayed_work	port_det_w;
+	enum port_state		port_state;
+	unsigned int		dcd_timeout;
+
 	/* debugfs entries */
 	struct dentry		*root;
 	u8			tune1;
@@ -725,6 +770,86 @@
 	return 0;
 }
 
+static int qusb_phy_drive_dp_pulse(struct usb_phy *phy,
+						unsigned int pulse_width)
+{
+	struct qusb_phy *qphy = container_of(phy, struct qusb_phy, phy);
+	int ret;
+
+	dev_dbg(qphy->phy.dev, "connected to a CDP, drive DP up\n");
+	ret = qusb_phy_enable_power(qphy, true);
+	if (ret < 0) {
+		dev_dbg(qphy->phy.dev,
+			"dpdm regulator enable failed:%d\n", ret);
+		return ret;
+	}
+	qusb_phy_gdsc(qphy, true);
+	qusb_phy_enable_clocks(qphy, true);
+
+	ret = reset_control_assert(qphy->phy_reset);
+	if (ret)
+		dev_err(qphy->phy.dev, "phyassert failed\n");
+	usleep_range(100, 150);
+	ret = reset_control_deassert(qphy->phy_reset);
+	if (ret)
+		dev_err(qphy->phy.dev, "deassert failed\n");
+
+	/* Configure PHY to enable control on DP/DM lines */
+	writel_relaxed(CLAMP_N_EN | FREEZIO_N | POWER_DOWN,
+				qphy->base + QUSB2PHY_PORT_POWERDOWN);
+
+	writel_relaxed(TERM_SELECT | XCVR_SELECT_FS | OP_MODE_NON_DRIVE |
+			SUSPEND_N, qphy->base + QUSB2PHY_PORT_UTMI_CTRL1);
+
+	writel_relaxed(UTMI_ULPI_SEL | UTMI_TEST_MUX_SEL,
+				qphy->base + QUSB2PHY_PORT_UTMI_CTRL2);
+
+	writel_relaxed(PLL_RESET_N_CNT_5,
+			qphy->base + QUSB2PHY_PLL_AUTOPGM_CTL1);
+
+	writel_relaxed(CLAMP_N_EN | FREEZIO_N,
+			qphy->base + QUSB2PHY_PORT_POWERDOWN);
+
+	writel_relaxed(REF_BUF_EN | REXT_EN | PLL_BYPASSNL | REXT_TRIM_0,
+			qphy->base + QUSB2PHY_PLL_PWR_CTL);
+
+	usleep_range(5, 10);
+
+	writel_relaxed(0x15, qphy->base + QUSB2PHY_PLL_AUTOPGM_CTL1);
+	writel_relaxed(PLL_RESET_N | PLL_RESET_N_CNT_5,
+			qphy->base + QUSB2PHY_PLL_AUTOPGM_CTL1);
+
+	writel_relaxed(0x00, qphy->base + QUSB2PHY_PORT_QC1);
+	writel_relaxed(0x00, qphy->base + QUSB2PHY_PORT_QC2);
+
+	usleep_range(50, 60);
+	/* Enable Rdp_en to pull DP up to 3V */
+	writel_relaxed(RDP_UP_EN, qphy->base + QUSB2PHY_PORT_QC2);
+	msleep(pulse_width);
+
+	/* Put the PHY and DP back to normal state */
+	writel_relaxed(CLAMP_N_EN | FREEZIO_N | POWER_DOWN,
+			qphy->base + QUSB2PHY_PORT_POWERDOWN);  /* 23 */
+
+	writel_relaxed(PLL_AUTOPGM_EN | PLL_RESET_N | PLL_RESET_N_CNT_5,
+			qphy->base + QUSB2PHY_PLL_AUTOPGM_CTL1);
+
+	writel_relaxed(UTMI_ULPI_SEL, qphy->base + QUSB2PHY_PORT_UTMI_CTRL2);
+
+	writel_relaxed(TERM_SELECT, qphy->base + QUSB2PHY_PORT_UTMI_CTRL1);
+
+	qusb_phy_enable_clocks(qphy, false);
+	qusb_phy_gdsc(qphy, false);
+
+	ret = qusb_phy_enable_power(qphy, false);
+	if (ret < 0) {
+		dev_dbg(qphy->phy.dev,
+			"dpdm regulator disable failed:%d\n", ret);
+		return ret;
+	}
+	return 0;
+}
+
 static int qusb_phy_dpdm_regulator_enable(struct regulator_dev *rdev)
 {
 	int ret = 0;
@@ -878,6 +1003,388 @@
 	debugfs_create_x8("tune5", 0644, qphy->root, &qphy->tune5);
 }
 
+static int qusb_phy_vbus_notifier(struct notifier_block *nb,
+		unsigned long event, void *data)
+{
+	struct usb_phy *phy = container_of(nb, struct usb_phy, vbus_nb);
+	struct qusb_phy *qphy = container_of(phy, struct qusb_phy, phy);
+
+	if (!qphy || !data) {
+		pr_err("Failed to get PHY for vbus_notifier\n");
+		return NOTIFY_DONE;
+	}
+
+	qphy->vbus_active = !!event;
+	dev_dbg(qphy->phy.dev, "Got VBUS notification: %u\n", event);
+	queue_delayed_work(system_freezable_wq, &qphy->port_det_w, 0);
+
+	return NOTIFY_DONE;
+}
+
+static int qusb_phy_id_notifier(struct notifier_block *nb,
+		unsigned long event, void *data)
+{
+	struct usb_phy *phy = container_of(nb, struct usb_phy, id_nb);
+	struct qusb_phy *qphy = container_of(phy, struct qusb_phy, phy);
+
+	if (!qphy || !data) {
+		pr_err("Failed to get PHY for vbus_notifier\n");
+		return NOTIFY_DONE;
+	}
+
+	qphy->id_state = !event;
+	dev_dbg(qphy->phy.dev, "Got id notification: %u\n", event);
+	queue_delayed_work(system_freezable_wq, &qphy->port_det_w, 0);
+
+	return NOTIFY_DONE;
+}
+
+static const unsigned int qusb_phy_extcon_cable[] = {
+	EXTCON_USB,
+	EXTCON_USB_HOST,
+	EXTCON_NONE,
+};
+
+static int qusb_phy_notify_charger(struct qusb_phy *qphy,
+					enum power_supply_type charger_type)
+{
+	union power_supply_propval pval = {0};
+
+	dev_dbg(qphy->phy.dev, "Notify charger type: %d\n", charger_type);
+
+	if (!qphy->usb_psy) {
+		qphy->usb_psy = power_supply_get_by_name("usb");
+		if (!qphy->usb_psy) {
+			dev_err(qphy->phy.dev, "Could not get usb psy\n");
+			return -ENODEV;
+		}
+	}
+
+	pval.intval = charger_type;
+	power_supply_set_property(qphy->usb_psy, POWER_SUPPLY_PROP_REAL_TYPE,
+									&pval);
+	return 0;
+}
+
+static void qusb_phy_notify_extcon(struct qusb_phy *qphy,
+						int extcon_id, int event)
+{
+	struct extcon_dev *edev = qphy->phy.edev;
+	union extcon_property_value val;
+	int ret;
+
+	dev_dbg(qphy->phy.dev, "Notify event: %d for extcon_id: %d\n",
+					event, extcon_id);
+
+	if (event) {
+		ret = extcon_get_property(edev, extcon_id,
+					EXTCON_PROP_USB_TYPEC_POLARITY, &val);
+		if (ret)
+			dev_err(qphy->phy.dev, "Failed to get TYPEC POLARITY\n");
+
+		extcon_set_property(qphy->usb_extcon, extcon_id,
+					EXTCON_PROP_USB_TYPEC_POLARITY, val);
+
+		ret = extcon_get_property(edev, extcon_id,
+						EXTCON_PROP_USB_SS, &val);
+		if (ret)
+			dev_err(qphy->phy.dev, "Failed to get USB_SS property\n");
+
+		extcon_set_property(qphy->usb_extcon, extcon_id,
+						EXTCON_PROP_USB_SS, val);
+	}
+
+	extcon_set_state_sync(qphy->usb_extcon, extcon_id, event);
+}
+
+static bool qusb_phy_chg_det_status(struct qusb_phy *qphy,
+						enum chg_det_state state)
+{
+	u32 reg, status;
+
+	reg = readl_relaxed(qphy->base + QUSB2PHY_PORT_INTR_STATUS);
+	dev_dbg(qphy->phy.dev, "state: %d reg: 0x%x\n", state, reg);
+
+	status = reg & 0xff;
+
+	switch (state) {
+	case STATE_DCD:
+		return (status != DPSE_INTR_HIGH);
+	case STATE_PRIMARY:
+		return (status && (status != DPSE_INTR_HIGH));
+	case STATE_SECONDARY:
+		return status;
+	case STATE_UNKNOWN:
+	default:
+		break;
+	}
+
+	return false;
+}
+
+/*
+ * Different circuit blocks are enabled on DP and DM lines as part
+ * of different phases of charger detection. Then the state of
+ * DP and DM lines are monitored to identify different type of
+ * chargers.
+ * These circuit blocks can be enabled with the configuration of
+ * the QUICKCHARGE1 and QUICKCHARGE2 registers and the DP/DM lines
+ * can be monitored with the status of the INTR_STATUS register.
+ */
+static void qusb_phy_chg_det_enable_seq(struct qusb_phy *qphy, int state)
+{
+	dev_dbg(qphy->phy.dev, "state: %d\n", state);
+	/* Power down the PHY*/
+	writel_relaxed(0x23, qphy->base + QUSB2PHY_PORT_POWERDOWN);
+
+	/* Put the PHY in non driving mode */
+	writel_relaxed(0x35, qphy->base + QUSB2PHY_PORT_UTMI_CTRL1);
+
+	/* Set the PHY to register mode */
+	writel_relaxed(0xC0, qphy->base + QUSB2PHY_PORT_UTMI_CTRL2);
+
+	/* Keep PLL in reset */
+	writel_relaxed(0x05, qphy->base + QUSB2PHY_PLL_AUTOPGM_CTL1);
+
+	/* Enable  PHY */
+	writel_relaxed(0x22, qphy->base + QUSB2PHY_PORT_POWERDOWN);
+
+	writel_relaxed(0x17, qphy->base + QUSB2PHY_PLL_PWR_CTL);
+
+	usleep_range(5, 10);
+
+	writel_relaxed(0x15, qphy->base + QUSB2PHY_PLL_AUTOPGM_CTL1);
+
+	writel_relaxed(0x00, qphy->base + QUSB2PHY_PORT_QC1);
+	writel_relaxed(0x00, qphy->base + QUSB2PHY_PORT_QC2);
+
+	usleep_range(50, 60);
+
+	switch (state) {
+	case STATE_DCD:
+		/* Enable IDP_SRC */
+		writel_relaxed(0x08, qphy->base + QUSB2PHY_PORT_QC1);
+		/* Enable RDM_UP */
+		writel_relaxed(0x01, qphy->base + QUSB2PHY_PORT_QC2);
+
+		writel_relaxed(0x1F, qphy->base + QUSB2PHY_PORT_INTR_CTRL);
+		break;
+	case STATE_PRIMARY:
+		/* Enable VDAT_REF_DM, VDP_SRC and IDM_SINK */
+		writel_relaxed(0x25, qphy->base + QUSB2PHY_PORT_QC1);
+		writel_relaxed(0x00, qphy->base + QUSB2PHY_PORT_QC2);
+
+		writel_relaxed(0x1F, qphy->base + QUSB2PHY_PORT_INTR_CTRL);
+		break;
+	case STATE_SECONDARY:
+		/* Enable VDAT_REF_DP, VDAT_REF_DM, VDP_SRC and IDM_SINK */
+		writel_relaxed(0x72, qphy->base + QUSB2PHY_PORT_QC1);
+		writel_relaxed(0x00, qphy->base + QUSB2PHY_PORT_QC2);
+
+		writel_relaxed(0x1F, qphy->base + QUSB2PHY_PORT_INTR_CTRL);
+		break;
+	case STATE_UNKNOWN:
+	default:
+		break;
+	}
+}
+
+#define CHG_DCD_TIMEOUT_MSEC		750
+#define CHG_DCD_POLL_TIME_MSEC		50
+#define CHG_PRIMARY_DET_TIME_MSEC	100
+#define CHG_SECONDARY_DET_TIME_MSEC	100
+
+static int qusb_phy_enable_phy(struct qusb_phy *qphy)
+{
+	int ret;
+
+	ret = qusb_phy_enable_power(qphy, true);
+	if (ret)
+		return ret;
+
+	if (qphy->tcsr_clamp_dig_n)
+		writel_relaxed(0x1, qphy->tcsr_clamp_dig_n);
+	qusb_phy_enable_clocks(qphy, true);
+
+	return 0;
+}
+
+static void qusb_phy_disable_phy(struct qusb_phy *qphy)
+{
+	int ret;
+
+	ret = reset_control_assert(qphy->phy_reset);
+	if (ret)
+		dev_err(qphy->phy.dev, "phyassert failed\n");
+
+	usleep_range(100, 150);
+
+	ret = reset_control_deassert(qphy->phy_reset);
+	if (ret)
+		dev_err(qphy->phy.dev, "deassert failed\n");
+
+	qusb_phy_enable_clocks(qphy, false);
+	if (qphy->tcsr_clamp_dig_n)
+		writel_relaxed(0x0, qphy->tcsr_clamp_dig_n);
+	qusb_phy_enable_power(qphy, false);
+}
+
+static void qusb_phy_port_state_work(struct work_struct *w)
+{
+	struct qusb_phy *qphy = container_of(w, struct qusb_phy,
+							port_det_w.work);
+	unsigned long delay = 0;
+	int status, ret;
+
+	dev_dbg(qphy->phy.dev, "state: %d\n", qphy->port_state);
+
+	switch (qphy->port_state) {
+	case PORT_UNKNOWN:
+		if (!qphy->id_state) {
+			qphy->port_state = PORT_HOST_MODE;
+			qusb_phy_notify_extcon(qphy, EXTCON_USB_HOST, 1);
+			return;
+		}
+
+		if (qphy->vbus_active) {
+			/* Enable DCD sequence */
+			ret = qusb_phy_enable_phy(qphy);
+			if (ret)
+				return;
+
+			qusb_phy_chg_det_enable_seq(qphy, STATE_DCD);
+			qphy->port_state = PORT_DCD_IN_PROGRESS;
+			qphy->dcd_timeout = 0;
+			delay = CHG_DCD_POLL_TIME_MSEC;
+			break;
+		}
+		return;
+	case PORT_DISCONNECTED:
+		qusb_phy_disable_phy(qphy);
+		qphy->port_state = PORT_UNKNOWN;
+		break;
+	case PORT_DCD_IN_PROGRESS:
+		if (!qphy->vbus_active) {
+			/* Disable PHY sequence */
+			qphy->port_state = PORT_DISCONNECTED;
+			break;
+		}
+
+		status = qusb_phy_chg_det_status(qphy, STATE_DCD);
+		if (!status && qphy->dcd_timeout < CHG_DCD_TIMEOUT_MSEC) {
+			delay = CHG_DCD_POLL_TIME_MSEC;
+			qphy->dcd_timeout += delay;
+		} else if (status) {
+			qusb_phy_chg_det_enable_seq(qphy, STATE_PRIMARY);
+			qphy->port_state = PORT_PRIMARY_IN_PROGRESS;
+			delay = CHG_PRIMARY_DET_TIME_MSEC;
+		} else if (qphy->dcd_timeout >= CHG_DCD_TIMEOUT_MSEC) {
+			qusb_phy_notify_charger(qphy,
+						POWER_SUPPLY_TYPE_USB_DCP);
+			qusb_phy_disable_phy(qphy);
+			qphy->port_state = PORT_CHG_DET_DONE;
+		}
+		break;
+	case PORT_PRIMARY_IN_PROGRESS:
+		if (!qphy->vbus_active) {
+			qphy->port_state = PORT_DISCONNECTED;
+			break;
+		}
+
+		status = qusb_phy_chg_det_status(qphy, STATE_PRIMARY);
+		if (status) {
+			qusb_phy_chg_det_enable_seq(qphy, STATE_SECONDARY);
+			qphy->port_state = PORT_SECONDARY_IN_PROGRESS;
+			delay = CHG_SECONDARY_DET_TIME_MSEC;
+
+		} else {
+			qusb_phy_disable_phy(qphy);
+			qusb_phy_notify_charger(qphy, POWER_SUPPLY_TYPE_USB);
+			qusb_phy_notify_extcon(qphy, EXTCON_USB, 1);
+			qphy->port_state = PORT_CHG_DET_DONE;
+		}
+		break;
+	case PORT_SECONDARY_IN_PROGRESS:
+		if (!qphy->vbus_active) {
+			qphy->port_state = PORT_DISCONNECTED;
+			break;
+		}
+
+		status = qusb_phy_chg_det_status(qphy, STATE_SECONDARY);
+		if (status) {
+			qusb_phy_notify_charger(qphy,
+						POWER_SUPPLY_TYPE_USB_DCP);
+		} else {
+			qusb_phy_notify_charger(qphy,
+						POWER_SUPPLY_TYPE_USB_CDP);
+			qusb_phy_notify_extcon(qphy, EXTCON_USB, 1);
+		}
+
+		qusb_phy_disable_phy(qphy);
+		qphy->port_state = PORT_CHG_DET_DONE;
+		/*
+		 * Fall through to check if cable got disconnected
+		 * during detection.
+		 */
+	case PORT_CHG_DET_DONE:
+		if (!qphy->vbus_active) {
+			qphy->port_state = PORT_UNKNOWN;
+			qusb_phy_notify_extcon(qphy, EXTCON_USB, 0);
+		}
+
+		return;
+	case PORT_HOST_MODE:
+		if (qphy->id_state) {
+			qphy->port_state = PORT_UNKNOWN;
+			qusb_phy_notify_extcon(qphy, EXTCON_USB_HOST, 0);
+		}
+
+		if (!qphy->vbus_active)
+			return;
+
+		break;
+	default:
+		return;
+	}
+
+	queue_delayed_work(system_freezable_wq,
+			&qphy->port_det_w, msecs_to_jiffies(delay));
+}
+
+static int qusb_phy_extcon_register(struct qusb_phy *qphy)
+{
+	int ret;
+
+	/* Register extcon for notifications from charger driver */
+	qphy->phy.vbus_nb.notifier_call = qusb_phy_vbus_notifier;
+
+	qphy->phy.id_nb.notifier_call = qusb_phy_id_notifier;
+
+	/* Register extcon to notify USB driver */
+	qphy->usb_extcon = devm_extcon_dev_allocate(qphy->phy.dev,
+						qusb_phy_extcon_cable);
+	if (IS_ERR(qphy->usb_extcon)) {
+		dev_err(qphy->phy.dev, "failed to allocate extcon device\n");
+		return PTR_ERR(qphy->usb_extcon);
+	}
+
+	ret = devm_extcon_dev_register(qphy->phy.dev, qphy->usb_extcon);
+	if (ret) {
+		dev_err(qphy->phy.dev, "failed to register extcon device\n");
+		return ret;
+	}
+
+	extcon_set_property_capability(qphy->usb_extcon, EXTCON_USB,
+			EXTCON_PROP_USB_TYPEC_POLARITY);
+	extcon_set_property_capability(qphy->usb_extcon, EXTCON_USB,
+			EXTCON_PROP_USB_SS);
+	extcon_set_property_capability(qphy->usb_extcon, EXTCON_USB_HOST,
+			EXTCON_PROP_USB_TYPEC_POLARITY);
+	extcon_set_property_capability(qphy->usb_extcon, EXTCON_USB_HOST,
+			EXTCON_PROP_USB_SS);
+	return 0;
+}
+
 static int qusb_phy_probe(struct platform_device *pdev)
 {
 	struct qusb_phy *qphy;
@@ -1129,6 +1636,7 @@
 	qphy->phy.type			= USB_PHY_TYPE_USB2;
 	qphy->phy.notify_connect        = qusb_phy_notify_connect;
 	qphy->phy.notify_disconnect     = qusb_phy_notify_disconnect;
+	qphy->phy.drive_dp_pulse	= qusb_phy_drive_dp_pulse;
 
 	/*
 	 * On some platforms multiple QUSB PHYs are available. If QUSB PHY is
@@ -1141,6 +1649,15 @@
 			dev_err(dev, "%s:phy_reset assert failed\n", __func__);
 	}
 
+	if (of_property_read_bool(dev->of_node, "extcon")) {
+		INIT_DELAYED_WORK(&qphy->port_det_w, qusb_phy_port_state_work);
+
+		ret = qusb_phy_extcon_register(qphy);
+		if (ret)
+			return ret;
+
+	}
+
 	ret = usb_add_phy_dev(&qphy->phy);
 	if (ret)
 		return ret;
@@ -1166,6 +1683,19 @@
 
 	qphy->suspended = true;
 
+	if (of_property_read_bool(dev->of_node, "extcon")) {
+		qphy->id_state = true;
+		qphy->vbus_active = false;
+
+		if (extcon_get_state(qphy->phy.edev, EXTCON_USB_HOST)) {
+			qusb_phy_id_notifier(&qphy->phy.id_nb,
+							1, qphy->phy.edev);
+		} else if (extcon_get_state(qphy->phy.edev, EXTCON_USB)) {
+			qusb_phy_vbus_notifier(&qphy->phy.vbus_nb,
+							1, qphy->phy.edev);
+		}
+	}
+
 	qusb_phy_create_debugfs(qphy);
 
 	return ret;
diff --git a/drivers/usb/phy/phy-msm-ssusb-qmp.c b/drivers/usb/phy/phy-msm-ssusb-qmp.c
index 4618752..33a4718 100644
--- a/drivers/usb/phy/phy-msm-ssusb-qmp.c
+++ b/drivers/usb/phy/phy-msm-ssusb-qmp.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2013-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2020, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/module.h>
@@ -482,7 +482,7 @@
 	ret = configure_phy_regs(uphy, reg);
 	if (ret) {
 		dev_err(uphy->dev, "Failed the main PHY configuration\n");
-		return ret;
+		goto fail;
 	}
 
 	/* perform software reset of PHY common logic */
@@ -513,10 +513,19 @@
 		dev_err(uphy->dev, "USB3_PHY_PCS_STATUS:%x\n",
 				readl_relaxed(phy->base +
 					phy->phy_reg[USB3_PHY_PCS_STATUS]));
-		return -EBUSY;
+		ret = -EBUSY;
+		goto fail;
 	};
 
 	return 0;
+fail:
+	phy->in_suspend = true;
+	writel_relaxed(0x00,
+		phy->base + phy->phy_reg[USB3_PHY_POWER_DOWN_CONTROL]);
+	msm_ssphy_qmp_enable_clks(phy, false);
+	msm_ssusb_qmp_ldo_enable(phy, 0);
+
+	return ret;
 }
 
 static int msm_ssphy_qmp_dp_combo_reset(struct usb_phy *uphy)
diff --git a/drivers/vfio/Kconfig b/drivers/vfio/Kconfig
index c84333e..9aa91e7 100644
--- a/drivers/vfio/Kconfig
+++ b/drivers/vfio/Kconfig
@@ -22,7 +22,6 @@
 	tristate "VFIO Non-Privileged userspace driver framework"
 	depends on IOMMU_API
 	select VFIO_IOMMU_TYPE1 if (X86 || S390 || ARM_SMMU || ARM_SMMU_V3)
-	select ANON_INODES
 	help
 	  VFIO provides a framework for secure userspace device drivers.
 	  See Documentation/vfio.txt for more details.
diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c
index c362757..e93ce1c 100644
--- a/drivers/vfio/vfio_iommu_type1.c
+++ b/drivers/vfio/vfio_iommu_type1.c
@@ -382,6 +382,8 @@
 
 	down_read(&mm->mmap_sem);
 
+	vaddr = untagged_addr(vaddr);
+
 	vma = find_vma_intersection(mm, vaddr, vaddr + 1);
 
 	if (vma && vma->vm_flags & VM_PFNMAP) {
diff --git a/drivers/virtio/virtio_input.c b/drivers/virtio/virtio_input.c
index 3a0468f..89e14b0 100644
--- a/drivers/virtio/virtio_input.c
+++ b/drivers/virtio/virtio_input.c
@@ -2,6 +2,7 @@
 #include <linux/virtio.h>
 #include <linux/virtio_config.h>
 #include <linux/input.h>
+#include <linux/input/mt.h>
 
 #include <uapi/linux/virtio_ids.h>
 #include <uapi/linux/virtio_input.h>
@@ -163,6 +164,12 @@
 	virtio_cread(vi->vdev, struct virtio_input_config, u.abs.flat, &fl);
 	input_set_abs_params(vi->idev, abs, mi, ma, fu, fl);
 	input_abs_set_res(vi->idev, abs, re);
+	if (abs == ABS_MT_TRACKING_ID)
+		input_mt_init_slots(vi->idev,
+				    ma, /* input max finger */
+				    INPUT_MT_DIRECT
+					| INPUT_MT_DROP_UNUSED
+					| INPUT_MT_TRACK);
 }
 
 static int virtinput_init_vqs(struct virtio_input *vi)
diff --git a/fs/Kconfig b/fs/Kconfig
index ffbd9a4..f0dde0d 100644
--- a/fs/Kconfig
+++ b/fs/Kconfig
@@ -105,6 +105,8 @@
 
 source "fs/crypto/Kconfig"
 
+source "fs/verity/Kconfig"
+
 source "fs/notify/Kconfig"
 
 source "fs/quota/Kconfig"
@@ -314,5 +316,6 @@
 
 source "fs/nls/Kconfig"
 source "fs/dlm/Kconfig"
+source "fs/unicode/Kconfig"
 
 endmenu
diff --git a/fs/Makefile b/fs/Makefile
index 57744e1..af76f22 100644
--- a/fs/Makefile
+++ b/fs/Makefile
@@ -24,7 +24,7 @@
 
 obj-y				+= notify/
 obj-$(CONFIG_EPOLL)		+= eventpoll.o
-obj-$(CONFIG_ANON_INODES)	+= anon_inodes.o
+obj-y				+= anon_inodes.o
 obj-$(CONFIG_SIGNALFD)		+= signalfd.o
 obj-$(CONFIG_TIMERFD)		+= timerfd.o
 obj-$(CONFIG_EVENTFD)		+= eventfd.o
@@ -32,6 +32,7 @@
 obj-$(CONFIG_AIO)               += aio.o
 obj-$(CONFIG_FS_DAX)		+= dax.o
 obj-$(CONFIG_FS_ENCRYPTION)	+= crypto/
+obj-$(CONFIG_FS_VERITY)		+= verity/
 obj-$(CONFIG_FILE_LOCKING)      += locks.o
 obj-$(CONFIG_COMPAT)		+= compat.o compat_ioctl.o
 obj-$(CONFIG_BINFMT_AOUT)	+= binfmt_aout.o
@@ -91,6 +92,7 @@
 obj-$(CONFIG_NFSD)		+= nfsd/
 obj-$(CONFIG_LOCKD)		+= lockd/
 obj-$(CONFIG_NLS)		+= nls/
+obj-$(CONFIG_UNICODE)		+= unicode/
 obj-$(CONFIG_SYSV_FS)		+= sysv/
 obj-$(CONFIG_CIFS)		+= cifs/
 obj-$(CONFIG_HPFS_FS)		+= hpfs/
diff --git a/fs/block_dev.c b/fs/block_dev.c
index c158bad..51c4520 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
@@ -1912,6 +1912,9 @@
 	if (bdev_read_only(I_BDEV(bd_inode)))
 		return -EPERM;
 
+	if (IS_SWAPFILE(bd_inode))
+		return -ETXTBSY;
+
 	if (!iov_iter_count(from))
 		return 0;
 
diff --git a/fs/crypto/Kconfig b/fs/crypto/Kconfig
index f0de238..4f7235e 100644
--- a/fs/crypto/Kconfig
+++ b/fs/crypto/Kconfig
@@ -6,7 +6,6 @@
 	select CRYPTO_ECB
 	select CRYPTO_XTS
 	select CRYPTO_CTS
-	select CRYPTO_SHA256
 	select KEYS
 	help
 	  Enable encryption of files and directories.  This
diff --git a/fs/crypto/bio.c b/fs/crypto/bio.c
index 870fd28..b871f7d 100644
--- a/fs/crypto/bio.c
+++ b/fs/crypto/bio.c
@@ -36,14 +36,13 @@
 		if (fscrypt_using_hardware_encryption(page->mapping->host)) {
 			SetPageUptodate(page);
 		} else {
-			int ret = fscrypt_decrypt_page(page->mapping->host,
-				page, PAGE_SIZE, 0, page->index);
-			if (ret) {
-				WARN_ON_ONCE(1);
+			int ret = fscrypt_decrypt_pagecache_blocks(page,
+								   bv->bv_len,
+								   bv->bv_offset);
+			if (ret)
 				SetPageError(page);
-			} else if (done) {
+			else if (done)
 				SetPageUptodate(page);
-			}
 		}
 		if (done)
 			unlock_page(page);
@@ -58,9 +57,8 @@
 
 static void completion_pages(struct work_struct *work)
 {
-	struct fscrypt_ctx *ctx =
-		container_of(work, struct fscrypt_ctx, r.work);
-	struct bio *bio = ctx->r.bio;
+	struct fscrypt_ctx *ctx = container_of(work, struct fscrypt_ctx, work);
+	struct bio *bio = ctx->bio;
 
 	__fscrypt_decrypt_bio(bio, true);
 	fscrypt_release_ctx(ctx);
@@ -69,57 +67,29 @@
 
 void fscrypt_enqueue_decrypt_bio(struct fscrypt_ctx *ctx, struct bio *bio)
 {
-	INIT_WORK(&ctx->r.work, completion_pages);
-	ctx->r.bio = bio;
-	fscrypt_enqueue_decrypt_work(&ctx->r.work);
+	INIT_WORK(&ctx->work, completion_pages);
+	ctx->bio = bio;
+	fscrypt_enqueue_decrypt_work(&ctx->work);
 }
 EXPORT_SYMBOL(fscrypt_enqueue_decrypt_bio);
 
-void fscrypt_pullback_bio_page(struct page **page, bool restore)
-{
-	struct fscrypt_ctx *ctx;
-	struct page *bounce_page;
-
-	/* The bounce data pages are unmapped. */
-	if ((*page)->mapping)
-		return;
-
-	/* The bounce data page is unmapped. */
-	bounce_page = *page;
-	ctx = (struct fscrypt_ctx *)page_private(bounce_page);
-
-	/* restore control page */
-	*page = ctx->w.control_page;
-
-	if (restore)
-		fscrypt_restore_control_page(bounce_page);
-}
-EXPORT_SYMBOL(fscrypt_pullback_bio_page);
-
 int fscrypt_zeroout_range(const struct inode *inode, pgoff_t lblk,
 				sector_t pblk, unsigned int len)
 {
-	struct fscrypt_ctx *ctx;
-	struct page *ciphertext_page = NULL;
+	const unsigned int blockbits = inode->i_blkbits;
+	const unsigned int blocksize = 1 << blockbits;
+	struct page *ciphertext_page;
 	struct bio *bio;
 	int ret, err = 0;
 
-	BUG_ON(inode->i_sb->s_blocksize != PAGE_SIZE);
-
-	ctx = fscrypt_get_ctx(inode, GFP_NOFS);
-	if (IS_ERR(ctx))
-		return PTR_ERR(ctx);
-
-	ciphertext_page = fscrypt_alloc_bounce_page(ctx, GFP_NOWAIT);
-	if (IS_ERR(ciphertext_page)) {
-		err = PTR_ERR(ciphertext_page);
-		goto errout;
-	}
+	ciphertext_page = fscrypt_alloc_bounce_page(GFP_NOWAIT);
+	if (!ciphertext_page)
+		return -ENOMEM;
 
 	while (len--) {
-		err = fscrypt_do_page_crypto(inode, FS_ENCRYPT, lblk,
-					     ZERO_PAGE(0), ciphertext_page,
-					     PAGE_SIZE, 0, GFP_NOFS);
+		err = fscrypt_crypt_block(inode, FS_ENCRYPT, lblk,
+					  ZERO_PAGE(0), ciphertext_page,
+					  blocksize, 0, GFP_NOFS);
 		if (err)
 			goto errout;
 
@@ -129,14 +99,11 @@
 			goto errout;
 		}
 		bio_set_dev(bio, inode->i_sb->s_bdev);
-		bio->bi_iter.bi_sector =
-			pblk << (inode->i_sb->s_blocksize_bits - 9);
+		bio->bi_iter.bi_sector = pblk << (blockbits - 9);
 		bio_set_op_attrs(bio, REQ_OP_WRITE, REQ_NOENCRYPT);
-		ret = bio_add_page(bio, ciphertext_page,
-					inode->i_sb->s_blocksize, 0);
-		if (ret != inode->i_sb->s_blocksize) {
+		ret = bio_add_page(bio, ciphertext_page, blocksize, 0);
+		if (WARN_ON(ret != blocksize)) {
 			/* should never happen! */
-			WARN_ON(1);
 			bio_put(bio);
 			err = -EIO;
 			goto errout;
@@ -152,7 +119,7 @@
 	}
 	err = 0;
 errout:
-	fscrypt_release_ctx(ctx);
+	fscrypt_free_bounce_page(ciphertext_page);
 	return err;
 }
 EXPORT_SYMBOL(fscrypt_zeroout_range);
diff --git a/fs/crypto/crypto.c b/fs/crypto/crypto.c
index 203e8b6..dcf630d 100644
--- a/fs/crypto/crypto.c
+++ b/fs/crypto/crypto.c
@@ -58,23 +58,16 @@
 EXPORT_SYMBOL(fscrypt_enqueue_decrypt_work);
 
 /**
- * fscrypt_release_ctx() - Releases an encryption context
- * @ctx: The encryption context to release.
+ * fscrypt_release_ctx() - Release a decryption context
+ * @ctx: The decryption context to release.
  *
- * If the encryption context was allocated from the pre-allocated pool, returns
- * it to that pool. Else, frees it.
- *
- * If there's a bounce page in the context, this frees that.
+ * If the decryption context was allocated from the pre-allocated pool, return
+ * it to that pool.  Else, free it.
  */
 void fscrypt_release_ctx(struct fscrypt_ctx *ctx)
 {
 	unsigned long flags;
 
-	if (ctx->flags & FS_CTX_HAS_BOUNCE_BUFFER_FL && ctx->w.bounce_page) {
-		mempool_free(ctx->w.bounce_page, fscrypt_bounce_page_pool);
-		ctx->w.bounce_page = NULL;
-	}
-	ctx->w.control_page = NULL;
 	if (ctx->flags & FS_CTX_REQUIRES_FREE_ENCRYPT_FL) {
 		kmem_cache_free(fscrypt_ctx_cachep, ctx);
 	} else {
@@ -86,33 +79,21 @@
 EXPORT_SYMBOL(fscrypt_release_ctx);
 
 /**
- * fscrypt_get_ctx() - Gets an encryption context
- * @inode:       The inode for which we are doing the crypto
+ * fscrypt_get_ctx() - Get a decryption context
  * @gfp_flags:   The gfp flag for memory allocation
  *
- * Allocates and initializes an encryption context.
+ * Allocate and initialize a decryption context.
  *
- * Return: An allocated and initialized encryption context on success; error
- * value or NULL otherwise.
+ * Return: A new decryption context on success; an ERR_PTR() otherwise.
  */
-struct fscrypt_ctx *fscrypt_get_ctx(const struct inode *inode, gfp_t gfp_flags)
+struct fscrypt_ctx *fscrypt_get_ctx(gfp_t gfp_flags)
 {
-	struct fscrypt_ctx *ctx = NULL;
-	struct fscrypt_info *ci = inode->i_crypt_info;
+	struct fscrypt_ctx *ctx;
 	unsigned long flags;
 
-	if (ci == NULL)
-		return ERR_PTR(-ENOKEY);
-
 	/*
-	 * We first try getting the ctx from a free list because in
-	 * the common case the ctx will have an allocated and
-	 * initialized crypto tfm, so it's probably a worthwhile
-	 * optimization. For the bounce page, we first try getting it
-	 * from the kernel allocator because that's just about as fast
-	 * as getting it from a list and because a cache of free pages
-	 * should generally be a "last resort" option for a filesystem
-	 * to be able to do its job.
+	 * First try getting a ctx from the free list so that we don't have to
+	 * call into the slab allocator.
 	 */
 	spin_lock_irqsave(&fscrypt_ctx_lock, flags);
 	ctx = list_first_entry_or_null(&fscrypt_free_ctxs,
@@ -128,11 +109,31 @@
 	} else {
 		ctx->flags &= ~FS_CTX_REQUIRES_FREE_ENCRYPT_FL;
 	}
-	ctx->flags &= ~FS_CTX_HAS_BOUNCE_BUFFER_FL;
 	return ctx;
 }
 EXPORT_SYMBOL(fscrypt_get_ctx);
 
+struct page *fscrypt_alloc_bounce_page(gfp_t gfp_flags)
+{
+	return mempool_alloc(fscrypt_bounce_page_pool, gfp_flags);
+}
+
+/**
+ * fscrypt_free_bounce_page() - free a ciphertext bounce page
+ *
+ * Free a bounce page that was allocated by fscrypt_encrypt_pagecache_blocks(),
+ * or by fscrypt_alloc_bounce_page() directly.
+ */
+void fscrypt_free_bounce_page(struct page *bounce_page)
+{
+	if (!bounce_page)
+		return;
+	set_page_private(bounce_page, (unsigned long)NULL);
+	ClearPagePrivate(bounce_page);
+	mempool_free(bounce_page, fscrypt_bounce_page_pool);
+}
+EXPORT_SYMBOL(fscrypt_free_bounce_page);
+
 void fscrypt_generate_iv(union fscrypt_iv *iv, u64 lblk_num,
 			 const struct fscrypt_info *ci)
 {
@@ -146,10 +147,11 @@
 		crypto_cipher_encrypt_one(ci->ci_essiv_tfm, iv->raw, iv->raw);
 }
 
-int fscrypt_do_page_crypto(const struct inode *inode, fscrypt_direction_t rw,
-			   u64 lblk_num, struct page *src_page,
-			   struct page *dest_page, unsigned int len,
-			   unsigned int offs, gfp_t gfp_flags)
+/* Encrypt or decrypt a single filesystem block of file contents */
+int fscrypt_crypt_block(const struct inode *inode, fscrypt_direction_t rw,
+			u64 lblk_num, struct page *src_page,
+			struct page *dest_page, unsigned int len,
+			unsigned int offs, gfp_t gfp_flags)
 {
 	union fscrypt_iv iv;
 	struct skcipher_request *req = NULL;
@@ -194,185 +196,207 @@
 	return 0;
 }
 
-struct page *fscrypt_alloc_bounce_page(struct fscrypt_ctx *ctx,
-				       gfp_t gfp_flags)
-{
-	ctx->w.bounce_page = mempool_alloc(fscrypt_bounce_page_pool, gfp_flags);
-	if (ctx->w.bounce_page == NULL)
-		return ERR_PTR(-ENOMEM);
-	ctx->flags |= FS_CTX_HAS_BOUNCE_BUFFER_FL;
-	return ctx->w.bounce_page;
-}
-
 /**
- * fscypt_encrypt_page() - Encrypts a page
- * @inode:     The inode for which the encryption should take place
- * @page:      The page to encrypt. Must be locked for bounce-page
- *             encryption.
- * @len:       Length of data to encrypt in @page and encrypted
- *             data in returned page.
- * @offs:      Offset of data within @page and returned
- *             page holding encrypted data.
- * @lblk_num:  Logical block number. This must be unique for multiple
- *             calls with same inode, except when overwriting
- *             previously written data.
- * @gfp_flags: The gfp flag for memory allocation
+ * fscrypt_encrypt_pagecache_blocks() - Encrypt filesystem blocks from a pagecache page
+ * @page:      The locked pagecache page containing the block(s) to encrypt
+ * @len:       Total size of the block(s) to encrypt.  Must be a nonzero
+ *		multiple of the filesystem's block size.
+ * @offs:      Byte offset within @page of the first block to encrypt.  Must be
+ *		a multiple of the filesystem's block size.
+ * @gfp_flags: Memory allocation flags
  *
- * Encrypts @page using the ctx encryption context. Performs encryption
- * either in-place or into a newly allocated bounce page.
- * Called on the page write path.
+ * A new bounce page is allocated, and the specified block(s) are encrypted into
+ * it.  In the bounce page, the ciphertext block(s) will be located at the same
+ * offsets at which the plaintext block(s) were located in the source page; any
+ * other parts of the bounce page will be left uninitialized.  However, normally
+ * blocksize == PAGE_SIZE and the whole page is encrypted at once.
  *
- * Bounce page allocation is the default.
- * In this case, the contents of @page are encrypted and stored in an
- * allocated bounce page. @page has to be locked and the caller must call
- * fscrypt_restore_control_page() on the returned ciphertext page to
- * release the bounce buffer and the encryption context.
+ * This is for use by the filesystem's ->writepages() method.
  *
- * In-place encryption is used by setting the FS_CFLG_OWN_PAGES flag in
- * fscrypt_operations. Here, the input-page is returned with its content
- * encrypted.
- *
- * Return: A page with the encrypted content on success. Else, an
- * error value or NULL.
+ * Return: the new encrypted bounce page on success; an ERR_PTR() on failure
  */
-struct page *fscrypt_encrypt_page(const struct inode *inode,
-				struct page *page,
-				unsigned int len,
-				unsigned int offs,
-				u64 lblk_num, gfp_t gfp_flags)
+struct page *fscrypt_encrypt_pagecache_blocks(struct page *page,
+					      unsigned int len,
+					      unsigned int offs,
+					      gfp_t gfp_flags)
 
 {
-	struct fscrypt_ctx *ctx;
-	struct page *ciphertext_page = page;
+	const struct inode *inode = page->mapping->host;
+	const unsigned int blockbits = inode->i_blkbits;
+	const unsigned int blocksize = 1 << blockbits;
+	struct page *ciphertext_page;
+	u64 lblk_num = ((u64)page->index << (PAGE_SHIFT - blockbits)) +
+		       (offs >> blockbits);
+	unsigned int i;
 	int err;
 
-	if (inode->i_sb->s_cop->flags & FS_CFLG_OWN_PAGES) {
-		/* with inplace-encryption we just encrypt the page */
-		err = fscrypt_do_page_crypto(inode, FS_ENCRYPT, lblk_num, page,
-					     ciphertext_page, len, offs,
-					     gfp_flags);
-		if (err)
-			return ERR_PTR(err);
-
-		return ciphertext_page;
-	}
-
 	if (WARN_ON_ONCE(!PageLocked(page)))
 		return ERR_PTR(-EINVAL);
 
-	ctx = fscrypt_get_ctx(inode, gfp_flags);
-	if (IS_ERR(ctx))
-		return (struct page *)ctx;
+	if (WARN_ON_ONCE(len <= 0 || !IS_ALIGNED(len | offs, blocksize)))
+		return ERR_PTR(-EINVAL);
 
-	/* The encryption operation will require a bounce page. */
-	ciphertext_page = fscrypt_alloc_bounce_page(ctx, gfp_flags);
-	if (IS_ERR(ciphertext_page))
-		goto errout;
+	ciphertext_page = fscrypt_alloc_bounce_page(gfp_flags);
+	if (!ciphertext_page)
+		return ERR_PTR(-ENOMEM);
 
-	ctx->w.control_page = page;
-	err = fscrypt_do_page_crypto(inode, FS_ENCRYPT, lblk_num,
-				     page, ciphertext_page, len, offs,
-				     gfp_flags);
-	if (err) {
-		ciphertext_page = ERR_PTR(err);
-		goto errout;
+	for (i = offs; i < offs + len; i += blocksize, lblk_num++) {
+		err = fscrypt_crypt_block(inode, FS_ENCRYPT, lblk_num,
+					  page, ciphertext_page,
+					  blocksize, i, gfp_flags);
+		if (err) {
+			fscrypt_free_bounce_page(ciphertext_page);
+			return ERR_PTR(err);
+		}
 	}
 	SetPagePrivate(ciphertext_page);
-	set_page_private(ciphertext_page, (unsigned long)ctx);
-	lock_page(ciphertext_page);
-	return ciphertext_page;
-
-errout:
-	fscrypt_release_ctx(ctx);
+	set_page_private(ciphertext_page, (unsigned long)page);
 	return ciphertext_page;
 }
-EXPORT_SYMBOL(fscrypt_encrypt_page);
+EXPORT_SYMBOL(fscrypt_encrypt_pagecache_blocks);
 
 /**
- * fscrypt_decrypt_page() - Decrypts a page in-place
- * @inode:     The corresponding inode for the page to decrypt.
- * @page:      The page to decrypt. Must be locked in case
- *             it is a writeback page (FS_CFLG_OWN_PAGES unset).
- * @len:       Number of bytes in @page to be decrypted.
- * @offs:      Start of data in @page.
- * @lblk_num:  Logical block number.
+ * fscrypt_encrypt_block_inplace() - Encrypt a filesystem block in-place
+ * @inode:     The inode to which this block belongs
+ * @page:      The page containing the block to encrypt
+ * @len:       Size of block to encrypt.  Doesn't need to be a multiple of the
+ *		fs block size, but must be a multiple of FS_CRYPTO_BLOCK_SIZE.
+ * @offs:      Byte offset within @page at which the block to encrypt begins
+ * @lblk_num:  Filesystem logical block number of the block, i.e. the 0-based
+ *		number of the block within the file
+ * @gfp_flags: Memory allocation flags
  *
- * Decrypts page in-place using the ctx encryption context.
+ * Encrypt a possibly-compressed filesystem block that is located in an
+ * arbitrary page, not necessarily in the original pagecache page.  The @inode
+ * and @lblk_num must be specified, as they can't be determined from @page.
  *
- * Called from the read completion callback.
- *
- * Return: Zero on success, non-zero otherwise.
+ * Return: 0 on success; -errno on failure
  */
-int fscrypt_decrypt_page(const struct inode *inode, struct page *page,
-			unsigned int len, unsigned int offs, u64 lblk_num)
+int fscrypt_encrypt_block_inplace(const struct inode *inode, struct page *page,
+				  unsigned int len, unsigned int offs,
+				  u64 lblk_num, gfp_t gfp_flags)
 {
-	if (WARN_ON_ONCE(!PageLocked(page) &&
-			 !(inode->i_sb->s_cop->flags & FS_CFLG_OWN_PAGES)))
+	return fscrypt_crypt_block(inode, FS_ENCRYPT, lblk_num, page, page,
+				   len, offs, gfp_flags);
+}
+EXPORT_SYMBOL(fscrypt_encrypt_block_inplace);
+
+/**
+ * fscrypt_decrypt_pagecache_blocks() - Decrypt filesystem blocks in a pagecache page
+ * @page:      The locked pagecache page containing the block(s) to decrypt
+ * @len:       Total size of the block(s) to decrypt.  Must be a nonzero
+ *		multiple of the filesystem's block size.
+ * @offs:      Byte offset within @page of the first block to decrypt.  Must be
+ *		a multiple of the filesystem's block size.
+ *
+ * The specified block(s) are decrypted in-place within the pagecache page,
+ * which must still be locked and not uptodate.  Normally, blocksize ==
+ * PAGE_SIZE and the whole page is decrypted at once.
+ *
+ * This is for use by the filesystem's ->readpages() method.
+ *
+ * Return: 0 on success; -errno on failure
+ */
+int fscrypt_decrypt_pagecache_blocks(struct page *page, unsigned int len,
+				     unsigned int offs)
+{
+	const struct inode *inode = page->mapping->host;
+	const unsigned int blockbits = inode->i_blkbits;
+	const unsigned int blocksize = 1 << blockbits;
+	u64 lblk_num = ((u64)page->index << (PAGE_SHIFT - blockbits)) +
+		       (offs >> blockbits);
+	unsigned int i;
+	int err;
+
+	if (WARN_ON_ONCE(!PageLocked(page)))
 		return -EINVAL;
 
-	return fscrypt_do_page_crypto(inode, FS_DECRYPT, lblk_num, page, page,
-				      len, offs, GFP_NOFS);
+	if (WARN_ON_ONCE(len <= 0 || !IS_ALIGNED(len | offs, blocksize)))
+		return -EINVAL;
+
+	for (i = offs; i < offs + len; i += blocksize, lblk_num++) {
+		err = fscrypt_crypt_block(inode, FS_DECRYPT, lblk_num, page,
+					  page, blocksize, i, GFP_NOFS);
+		if (err)
+			return err;
+	}
+	return 0;
 }
-EXPORT_SYMBOL(fscrypt_decrypt_page);
+EXPORT_SYMBOL(fscrypt_decrypt_pagecache_blocks);
+
+/**
+ * fscrypt_decrypt_block_inplace() - Decrypt a filesystem block in-place
+ * @inode:     The inode to which this block belongs
+ * @page:      The page containing the block to decrypt
+ * @len:       Size of block to decrypt.  Doesn't need to be a multiple of the
+ *		fs block size, but must be a multiple of FS_CRYPTO_BLOCK_SIZE.
+ * @offs:      Byte offset within @page at which the block to decrypt begins
+ * @lblk_num:  Filesystem logical block number of the block, i.e. the 0-based
+ *		number of the block within the file
+ *
+ * Decrypt a possibly-compressed filesystem block that is located in an
+ * arbitrary page, not necessarily in the original pagecache page.  The @inode
+ * and @lblk_num must be specified, as they can't be determined from @page.
+ *
+ * Return: 0 on success; -errno on failure
+ */
+int fscrypt_decrypt_block_inplace(const struct inode *inode, struct page *page,
+				  unsigned int len, unsigned int offs,
+				  u64 lblk_num)
+{
+	return fscrypt_crypt_block(inode, FS_DECRYPT, lblk_num, page, page,
+				   len, offs, GFP_NOFS);
+}
+EXPORT_SYMBOL(fscrypt_decrypt_block_inplace);
 
 /*
- * Validate dentries for encrypted directories to make sure we aren't
- * potentially caching stale data after a key has been added or
- * removed.
+ * Validate dentries in encrypted directories to make sure we aren't potentially
+ * caching stale dentries after a key has been added.
  */
 static int fscrypt_d_revalidate(struct dentry *dentry, unsigned int flags)
 {
 	struct dentry *dir;
-	int dir_has_key, cached_with_key;
+	int err;
+	int valid;
+
+	/*
+	 * Plaintext names are always valid, since fscrypt doesn't support
+	 * reverting to ciphertext names without evicting the directory's inode
+	 * -- which implies eviction of the dentries in the directory.
+	 */
+	if (!(dentry->d_flags & DCACHE_ENCRYPTED_NAME))
+		return 1;
+
+	/*
+	 * Ciphertext name; valid if the directory's key is still unavailable.
+	 *
+	 * Although fscrypt forbids rename() on ciphertext names, we still must
+	 * use dget_parent() here rather than use ->d_parent directly.  That's
+	 * because a corrupted fs image may contain directory hard links, which
+	 * the VFS handles by moving the directory's dentry tree in the dcache
+	 * each time ->lookup() finds the directory and it already has a dentry
+	 * elsewhere.  Thus ->d_parent can be changing, and we must safely grab
+	 * a reference to some ->d_parent to prevent it from being freed.
+	 */
 
 	if (flags & LOOKUP_RCU)
 		return -ECHILD;
 
 	dir = dget_parent(dentry);
-	if (!IS_ENCRYPTED(d_inode(dir))) {
-		dput(dir);
-		return 0;
-	}
-
-	spin_lock(&dentry->d_lock);
-	cached_with_key = dentry->d_flags & DCACHE_ENCRYPTED_WITH_KEY;
-	spin_unlock(&dentry->d_lock);
-	dir_has_key = (d_inode(dir)->i_crypt_info != NULL);
+	err = fscrypt_get_encryption_info(d_inode(dir));
+	valid = !fscrypt_has_encryption_key(d_inode(dir));
 	dput(dir);
 
-	/*
-	 * If the dentry was cached without the key, and it is a
-	 * negative dentry, it might be a valid name.  We can't check
-	 * if the key has since been made available due to locking
-	 * reasons, so we fail the validation so ext4_lookup() can do
-	 * this check.
-	 *
-	 * We also fail the validation if the dentry was created with
-	 * the key present, but we no longer have the key, or vice versa.
-	 */
-	if ((!cached_with_key && d_is_negative(dentry)) ||
-			(!cached_with_key && dir_has_key) ||
-			(cached_with_key && !dir_has_key))
-		return 0;
-	return 1;
+	if (err < 0)
+		return err;
+
+	return valid;
 }
 
 const struct dentry_operations fscrypt_d_ops = {
 	.d_revalidate = fscrypt_d_revalidate,
 };
 
-void fscrypt_restore_control_page(struct page *page)
-{
-	struct fscrypt_ctx *ctx;
-
-	ctx = (struct fscrypt_ctx *)page_private(page);
-	set_page_private(page, (unsigned long)NULL);
-	ClearPagePrivate(page);
-	unlock_page(page);
-	fscrypt_release_ctx(ctx);
-}
-EXPORT_SYMBOL(fscrypt_restore_control_page);
-
 static void fscrypt_destroy(void)
 {
 	struct fscrypt_ctx *pos, *n;
diff --git a/fs/crypto/fname.c b/fs/crypto/fname.c
index 7ff40a7..00d150f 100644
--- a/fs/crypto/fname.c
+++ b/fs/crypto/fname.c
@@ -12,7 +12,6 @@
  */
 
 #include <linux/scatterlist.h>
-#include <linux/ratelimit.h>
 #include <crypto/skcipher.h>
 #include "fscrypt_private.h"
 
@@ -269,7 +268,7 @@
 	if (iname->len < FS_CRYPTO_BLOCK_SIZE)
 		return -EUCLEAN;
 
-	if (inode->i_crypt_info)
+	if (fscrypt_has_encryption_key(inode))
 		return fname_decrypt(inode, iname, oname);
 
 	if (iname->len <= FSCRYPT_FNAME_MAX_UNDIGESTED_SIZE) {
@@ -336,7 +335,7 @@
 	if (ret)
 		return ret;
 
-	if (dir->i_crypt_info) {
+	if (fscrypt_has_encryption_key(dir)) {
 		if (!fscrypt_fname_encrypted_size(dir, iname->len,
 						  dir->i_sb->s_cop->max_namelen,
 						  &fname->crypto_buf.len))
@@ -356,6 +355,7 @@
 	}
 	if (!lookup)
 		return -ENOKEY;
+	fname->is_ciphertext_name = true;
 
 	/*
 	 * We don't have the key and we are doing a lookup; decode the
diff --git a/fs/crypto/fscrypt_private.h b/fs/crypto/fscrypt_private.h
index a4a55d5..70e34437 100644
--- a/fs/crypto/fscrypt_private.h
+++ b/fs/crypto/fscrypt_private.h
@@ -106,7 +106,6 @@
 } fscrypt_direction_t;
 
 #define FS_CTX_REQUIRES_FREE_ENCRYPT_FL		0x00000001
-#define FS_CTX_HAS_BOUNCE_BUFFER_FL		0x00000002
 
 static inline bool fscrypt_valid_enc_modes(u32 contents_mode,
 					   u32 filenames_mode)
@@ -133,14 +132,12 @@
 /* crypto.c */
 extern struct kmem_cache *fscrypt_info_cachep;
 extern int fscrypt_initialize(unsigned int cop_flags);
-extern int fscrypt_do_page_crypto(const struct inode *inode,
-				  fscrypt_direction_t rw, u64 lblk_num,
-				  struct page *src_page,
-				  struct page *dest_page,
-				  unsigned int len, unsigned int offs,
-				  gfp_t gfp_flags);
-extern struct page *fscrypt_alloc_bounce_page(struct fscrypt_ctx *ctx,
-					      gfp_t gfp_flags);
+extern int fscrypt_crypt_block(const struct inode *inode,
+			       fscrypt_direction_t rw, u64 lblk_num,
+			       struct page *src_page, struct page *dest_page,
+			       unsigned int len, unsigned int offs,
+			       gfp_t gfp_flags);
+extern struct page *fscrypt_alloc_bounce_page(gfp_t gfp_flags);
 extern const struct dentry_operations fscrypt_d_ops;
 
 extern void __printf(3, 4) __cold
diff --git a/fs/crypto/hooks.c b/fs/crypto/hooks.c
index 56debb1..34c2d03 100644
--- a/fs/crypto/hooks.c
+++ b/fs/crypto/hooks.c
@@ -4,7 +4,6 @@
  * Encryption hooks for higher-level filesystem operations.
  */
 
-#include <linux/ratelimit.h>
 #include "fscrypt_private.h"
 
 /**
@@ -49,7 +48,8 @@
 }
 EXPORT_SYMBOL_GPL(fscrypt_file_open);
 
-int __fscrypt_prepare_link(struct inode *inode, struct inode *dir)
+int __fscrypt_prepare_link(struct inode *inode, struct inode *dir,
+			   struct dentry *dentry)
 {
 	int err;
 
@@ -57,6 +57,10 @@
 	if (err)
 		return err;
 
+	/* ... in case we looked up ciphertext name before key was added */
+	if (dentry->d_flags & DCACHE_ENCRYPTED_NAME)
+		return -ENOKEY;
+
 	if (!fscrypt_has_permitted_context(dir, inode))
 		return -EXDEV;
 
@@ -78,6 +82,11 @@
 	if (err)
 		return err;
 
+	/* ... in case we looked up ciphertext name(s) before key was added */
+	if ((old_dentry->d_flags | new_dentry->d_flags) &
+	    DCACHE_ENCRYPTED_NAME)
+		return -ENOKEY;
+
 	if (old_dir != new_dir) {
 		if (IS_ENCRYPTED(new_dir) &&
 		    !fscrypt_has_permitted_context(new_dir,
@@ -94,21 +103,21 @@
 }
 EXPORT_SYMBOL_GPL(__fscrypt_prepare_rename);
 
-int __fscrypt_prepare_lookup(struct inode *dir, struct dentry *dentry)
+int __fscrypt_prepare_lookup(struct inode *dir, struct dentry *dentry,
+			     struct fscrypt_name *fname)
 {
-	int err = fscrypt_get_encryption_info(dir);
+	int err = fscrypt_setup_filename(dir, &dentry->d_name, 1, fname);
 
-	if (err)
+	if (err && err != -ENOENT)
 		return err;
 
-	if (fscrypt_has_encryption_key(dir)) {
+	if (fname->is_ciphertext_name) {
 		spin_lock(&dentry->d_lock);
-		dentry->d_flags |= DCACHE_ENCRYPTED_WITH_KEY;
+		dentry->d_flags |= DCACHE_ENCRYPTED_NAME;
 		spin_unlock(&dentry->d_lock);
+		d_set_d_op(dentry, &fscrypt_d_ops);
 	}
-
-	d_set_d_op(dentry, &fscrypt_d_ops);
-	return 0;
+	return err;
 }
 EXPORT_SYMBOL_GPL(__fscrypt_prepare_lookup);
 
@@ -179,11 +188,9 @@
 	sd->len = cpu_to_le16(ciphertext_len);
 
 	err = fname_encrypt(inode, &iname, sd->encrypted_path, ciphertext_len);
-	if (err) {
-		if (!disk_link->name)
-			kfree(sd);
-		return err;
-	}
+	if (err)
+		goto err_free_sd;
+
 	/*
 	 * Null-terminating the ciphertext doesn't make sense, but we still
 	 * count the null terminator in the length, so we might as well
@@ -191,9 +198,20 @@
 	 */
 	sd->encrypted_path[ciphertext_len] = '\0';
 
+	/* Cache the plaintext symlink target for later use by get_link() */
+	err = -ENOMEM;
+	inode->i_link = kmemdup(target, len + 1, GFP_NOFS);
+	if (!inode->i_link)
+		goto err_free_sd;
+
 	if (!disk_link->name)
 		disk_link->name = (unsigned char *)sd;
 	return 0;
+
+err_free_sd:
+	if (!disk_link->name)
+		kfree(sd);
+	return err;
 }
 EXPORT_SYMBOL_GPL(__fscrypt_encrypt_symlink);
 
@@ -202,7 +220,7 @@
  * @inode: the symlink inode
  * @caddr: the on-disk contents of the symlink
  * @max_size: size of @caddr buffer
- * @done: if successful, will be set up to free the returned target
+ * @done: if successful, will be set up to free the returned target if needed
  *
  * If the symlink's encryption key is available, we decrypt its target.
  * Otherwise, we encode its target for presentation.
@@ -217,12 +235,18 @@
 {
 	const struct fscrypt_symlink_data *sd;
 	struct fscrypt_str cstr, pstr;
+	bool has_key;
 	int err;
 
 	/* This is for encrypted symlinks only */
 	if (WARN_ON(!IS_ENCRYPTED(inode)))
 		return ERR_PTR(-EINVAL);
 
+	/* If the decrypted target is already cached, just return it. */
+	pstr.name = READ_ONCE(inode->i_link);
+	if (pstr.name)
+		return pstr.name;
+
 	/*
 	 * Try to set up the symlink's encryption key, but we can continue
 	 * regardless of whether the key is available or not.
@@ -230,6 +254,7 @@
 	err = fscrypt_get_encryption_info(inode);
 	if (err)
 		return ERR_PTR(err);
+	has_key = fscrypt_has_encryption_key(inode);
 
 	/*
 	 * For historical reasons, encrypted symlink targets are prefixed with
@@ -261,7 +286,17 @@
 		goto err_kfree;
 
 	pstr.name[pstr.len] = '\0';
-	set_delayed_call(done, kfree_link, pstr.name);
+
+	/*
+	 * Cache decrypted symlink targets in i_link for later use.  Don't cache
+	 * symlink targets encoded without the key, since those become outdated
+	 * once the key is added.  This pairs with the READ_ONCE() above and in
+	 * the VFS path lookup code.
+	 */
+	if (!has_key ||
+	    cmpxchg_release(&inode->i_link, NULL, pstr.name) != NULL)
+		set_delayed_call(done, kfree_link, pstr.name);
+
 	return pstr.name;
 
 err_kfree:
diff --git a/fs/crypto/keyinfo.c b/fs/crypto/keyinfo.c
index 33fd585..123598c 100644
--- a/fs/crypto/keyinfo.c
+++ b/fs/crypto/keyinfo.c
@@ -12,7 +12,6 @@
 #include <keys/user-type.h>
 #include <linux/hashtable.h>
 #include <linux/scatterlist.h>
-#include <linux/ratelimit.h>
 #include <crypto/aes.h>
 #include <crypto/algapi.h>
 #include <crypto/sha.h>
@@ -542,7 +541,7 @@
 	u8 *raw_key = NULL;
 	int res;
 
-	if (inode->i_crypt_info)
+	if (fscrypt_has_encryption_key(inode))
 		return 0;
 
 	res = fscrypt_initialize(inode->i_sb->s_cop->flags);
@@ -611,7 +610,7 @@
 		memcpy(crypt_info->ci_raw_key, raw_key, mode->keysize);
 	}
 
-	if (cmpxchg(&inode->i_crypt_info, NULL, crypt_info) == NULL)
+	if (cmpxchg_release(&inode->i_crypt_info, NULL, crypt_info) == NULL)
 		crypt_info = NULL;
 out:
 	if (res == -ENOKEY)
@@ -622,9 +621,30 @@
 }
 EXPORT_SYMBOL(fscrypt_get_encryption_info);
 
+/**
+ * fscrypt_put_encryption_info - free most of an inode's fscrypt data
+ *
+ * Free the inode's fscrypt_info.  Filesystems must call this when the inode is
+ * being evicted.  An RCU grace period need not have elapsed yet.
+ */
 void fscrypt_put_encryption_info(struct inode *inode)
 {
 	put_crypt_info(inode->i_crypt_info);
 	inode->i_crypt_info = NULL;
 }
 EXPORT_SYMBOL(fscrypt_put_encryption_info);
+
+/**
+ * fscrypt_free_inode - free an inode's fscrypt data requiring RCU delay
+ *
+ * Free the inode's cached decrypted symlink target, if any.  Filesystems must
+ * call this after an RCU grace period, just before they free the inode.
+ */
+void fscrypt_free_inode(struct inode *inode)
+{
+	if (IS_ENCRYPTED(inode) && S_ISLNK(inode->i_mode)) {
+		kfree(inode->i_link);
+		inode->i_link = NULL;
+	}
+}
+EXPORT_SYMBOL(fscrypt_free_inode);
diff --git a/fs/crypto/policy.c b/fs/crypto/policy.c
index a4eca6e..4941fe8 100644
--- a/fs/crypto/policy.c
+++ b/fs/crypto/policy.c
@@ -196,8 +196,8 @@
 	res = fscrypt_get_encryption_info(child);
 	if (res)
 		return 0;
-	parent_ci = parent->i_crypt_info;
-	child_ci = child->i_crypt_info;
+	parent_ci = READ_ONCE(parent->i_crypt_info);
+	child_ci = READ_ONCE(child->i_crypt_info);
 
 	if (parent_ci && child_ci) {
 		return memcmp(parent_ci->ci_master_key_descriptor,
@@ -248,7 +248,7 @@
 	if (res < 0)
 		return res;
 
-	ci = parent->i_crypt_info;
+	ci = READ_ONCE(parent->i_crypt_info);
 	if (ci == NULL)
 		return -ENOKEY;
 
diff --git a/fs/dcache.c b/fs/dcache.c
index 4a1c269..bc5755e3 100644
--- a/fs/dcache.c
+++ b/fs/dcache.c
@@ -18,6 +18,7 @@
 #include <linux/string.h>
 #include <linux/mm.h>
 #include <linux/fs.h>
+#include <linux/fscrypt.h>
 #include <linux/fsnotify.h>
 #include <linux/slab.h>
 #include <linux/init.h>
@@ -257,24 +258,10 @@
 	kmem_cache_free(dentry_cache, dentry); 
 }
 
-static void __d_free_external_name(struct rcu_head *head)
-{
-	struct external_name *name = container_of(head, struct external_name,
-						  u.head);
-
-	mod_node_page_state(page_pgdat(virt_to_page(name)),
-			    NR_INDIRECTLY_RECLAIMABLE_BYTES,
-			    -ksize(name));
-
-	kfree(name);
-}
-
 static void __d_free_external(struct rcu_head *head)
 {
 	struct dentry *dentry = container_of(head, struct dentry, d_u.d_rcu);
-
-	__d_free_external_name(&external_name(dentry)->u.head);
-
+	kfree(external_name(dentry));
 	kmem_cache_free(dentry_cache, dentry);
 }
 
@@ -306,7 +293,7 @@
 		struct external_name *p;
 		p = container_of(name->name, struct external_name, name[0]);
 		if (unlikely(atomic_dec_and_test(&p->u.count)))
-			call_rcu(&p->u.head, __d_free_external_name);
+			kfree_rcu(p, u.head);
 	}
 }
 EXPORT_SYMBOL(release_dentry_name_snapshot);
@@ -1602,7 +1589,6 @@
  
 struct dentry *__d_alloc(struct super_block *sb, const struct qstr *name)
 {
-	struct external_name *ext = NULL;
 	struct dentry *dentry;
 	char *dname;
 	int err;
@@ -1623,14 +1609,15 @@
 		dname = dentry->d_iname;
 	} else if (name->len > DNAME_INLINE_LEN-1) {
 		size_t size = offsetof(struct external_name, name[1]);
-
-		ext = kmalloc(size + name->len, GFP_KERNEL_ACCOUNT);
-		if (!ext) {
+		struct external_name *p = kmalloc(size + name->len,
+						  GFP_KERNEL_ACCOUNT |
+						  __GFP_RECLAIMABLE);
+		if (!p) {
 			kmem_cache_free(dentry_cache, dentry); 
 			return NULL;
 		}
-		atomic_set(&ext->u.count, 1);
-		dname = ext->name;
+		atomic_set(&p->u.count, 1);
+		dname = p->name;
 	} else  {
 		dname = dentry->d_iname;
 	}	
@@ -1669,12 +1656,6 @@
 		}
 	}
 
-	if (unlikely(ext)) {
-		pg_data_t *pgdat = page_pgdat(virt_to_page(ext));
-		mod_node_page_state(pgdat, NR_INDIRECTLY_RECLAIMABLE_BYTES,
-				    ksize(ext));
-	}
-
 	this_cpu_inc(nr_dentry);
 
 	return dentry;
@@ -2707,7 +2688,7 @@
 		dentry->d_name.hash_len = target->d_name.hash_len;
 	}
 	if (old_name && likely(atomic_dec_and_test(&old_name->u.count)))
-		call_rcu(&old_name->u.head, __d_free_external_name);
+		kfree_rcu(old_name, u.head);
 }
 
 /*
@@ -2785,6 +2766,7 @@
 	list_move(&dentry->d_child, &dentry->d_parent->d_subdirs);
 	__d_rehash(dentry);
 	fsnotify_update_flags(dentry);
+	fscrypt_handle_d_move(dentry);
 
 	write_seqcount_end(&target->d_seq);
 	write_seqcount_end(&dentry->d_seq);
diff --git a/fs/ext4/Makefile b/fs/ext4/Makefile
index 8fdfcd3..b17ddc2 100644
--- a/fs/ext4/Makefile
+++ b/fs/ext4/Makefile
@@ -13,3 +13,4 @@
 
 ext4-$(CONFIG_EXT4_FS_POSIX_ACL)	+= acl.o
 ext4-$(CONFIG_EXT4_FS_SECURITY)		+= xattr_security.o
+ext4-$(CONFIG_FS_VERITY)		+= verity.o
diff --git a/fs/ext4/dir.c b/fs/ext4/dir.c
index 17a75fc..2770af6 100644
--- a/fs/ext4/dir.c
+++ b/fs/ext4/dir.c
@@ -26,6 +26,7 @@
 #include <linux/buffer_head.h>
 #include <linux/slab.h>
 #include <linux/iversion.h>
+#include <linux/unicode.h>
 #include "ext4.h"
 #include "xattr.h"
 
@@ -664,3 +665,51 @@
 	.open		= ext4_dir_open,
 	.release	= ext4_release_dir,
 };
+
+#ifdef CONFIG_UNICODE
+static int ext4_d_compare(const struct dentry *dentry, unsigned int len,
+			  const char *str, const struct qstr *name)
+{
+	struct qstr qstr = {.name = str, .len = len };
+	struct inode *inode = dentry->d_parent->d_inode;
+
+	if (!IS_CASEFOLDED(inode) || !EXT4_SB(inode->i_sb)->s_encoding) {
+		if (len != name->len)
+			return -1;
+		return memcmp(str, name->name, len);
+	}
+
+	return ext4_ci_compare(inode, name, &qstr, false);
+}
+
+static int ext4_d_hash(const struct dentry *dentry, struct qstr *str)
+{
+	const struct ext4_sb_info *sbi = EXT4_SB(dentry->d_sb);
+	const struct unicode_map *um = sbi->s_encoding;
+	unsigned char *norm;
+	int len, ret = 0;
+
+	if (!IS_CASEFOLDED(dentry->d_inode) || !um)
+		return 0;
+
+	norm = kmalloc(PATH_MAX, GFP_ATOMIC);
+	if (!norm)
+		return -ENOMEM;
+
+	len = utf8_casefold(um, str, norm, PATH_MAX);
+	if (len < 0) {
+		if (ext4_has_strict_mode(sbi))
+			ret = -EINVAL;
+		goto out;
+	}
+	str->hash = full_name_hash(dentry, norm, len);
+out:
+	kfree(norm);
+	return ret;
+}
+
+const struct dentry_operations ext4_dentry_ops = {
+	.d_hash = ext4_d_hash,
+	.d_compare = ext4_d_compare,
+};
+#endif
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
index 73789fb..734dc63 100644
--- a/fs/ext4/ext4.h
+++ b/fs/ext4/ext4.h
@@ -41,6 +41,7 @@
 #endif
 
 #include <linux/fscrypt.h>
+#include <linux/fsverity.h>
 
 #include <linux/compiler.h>
 
@@ -415,14 +416,16 @@
 #define EXT4_TOPDIR_FL			0x00020000 /* Top of directory hierarchies*/
 #define EXT4_HUGE_FILE_FL               0x00040000 /* Set to each huge file */
 #define EXT4_EXTENTS_FL			0x00080000 /* Inode uses extents */
+#define EXT4_VERITY_FL			0x00100000 /* Verity protected inode */
 #define EXT4_EA_INODE_FL	        0x00200000 /* Inode used for large EA */
 #define EXT4_EOFBLOCKS_FL		0x00400000 /* Blocks allocated beyond EOF */
 #define EXT4_INLINE_DATA_FL		0x10000000 /* Inode has inline data. */
 #define EXT4_PROJINHERIT_FL		0x20000000 /* Create with parents projid */
+#define EXT4_CASEFOLD_FL		0x40000000 /* Casefolded file */
 #define EXT4_RESERVED_FL		0x80000000 /* reserved for ext4 lib */
 
-#define EXT4_FL_USER_VISIBLE		0x304BDFFF /* User visible flags */
-#define EXT4_FL_USER_MODIFIABLE		0x204BC0FF /* User modifiable flags */
+#define EXT4_FL_USER_VISIBLE		0x705BDFFF /* User visible flags */
+#define EXT4_FL_USER_MODIFIABLE		0x604BC0FF /* User modifiable flags */
 
 /* Flags we can manipulate with through EXT4_IOC_FSSETXATTR */
 #define EXT4_FL_XFLAG_VISIBLE		(EXT4_SYNC_FL | \
@@ -437,10 +440,10 @@
 			   EXT4_SYNC_FL | EXT4_NODUMP_FL | EXT4_NOATIME_FL |\
 			   EXT4_NOCOMPR_FL | EXT4_JOURNAL_DATA_FL |\
 			   EXT4_NOTAIL_FL | EXT4_DIRSYNC_FL |\
-			   EXT4_PROJINHERIT_FL)
+			   EXT4_PROJINHERIT_FL | EXT4_CASEFOLD_FL)
 
 /* Flags that are appropriate for regular files (all but dir-specific ones). */
-#define EXT4_REG_FLMASK (~(EXT4_DIRSYNC_FL | EXT4_TOPDIR_FL))
+#define EXT4_REG_FLMASK (~(EXT4_DIRSYNC_FL | EXT4_TOPDIR_FL | EXT4_CASEFOLD_FL))
 
 /* Flags that are appropriate for non-directories/regular files. */
 #define EXT4_OTHER_FLMASK (EXT4_NODUMP_FL | EXT4_NOATIME_FL)
@@ -485,6 +488,7 @@
 	EXT4_INODE_TOPDIR	= 17,	/* Top of directory hierarchies*/
 	EXT4_INODE_HUGE_FILE	= 18,	/* Set to each huge file */
 	EXT4_INODE_EXTENTS	= 19,	/* Inode uses extents */
+	EXT4_INODE_VERITY	= 20,	/* Verity protected inode */
 	EXT4_INODE_EA_INODE	= 21,	/* Inode used for large EA */
 	EXT4_INODE_EOFBLOCKS	= 22,	/* Blocks allocated beyond EOF */
 	EXT4_INODE_INLINE_DATA	= 28,	/* Data in inode. */
@@ -530,6 +534,7 @@
 	CHECK_FLAG_VALUE(TOPDIR);
 	CHECK_FLAG_VALUE(HUGE_FILE);
 	CHECK_FLAG_VALUE(EXTENTS);
+	CHECK_FLAG_VALUE(VERITY);
 	CHECK_FLAG_VALUE(EA_INODE);
 	CHECK_FLAG_VALUE(EOFBLOCKS);
 	CHECK_FLAG_VALUE(INLINE_DATA);
@@ -1329,7 +1334,9 @@
 	__u8	s_first_error_time_hi;
 	__u8	s_last_error_time_hi;
 	__u8	s_pad[2];
-	__le32	s_reserved[96];		/* Padding to the end of the block */
+	__le16  s_encoding;		/* Filename charset encoding */
+	__le16  s_encoding_flags;	/* Filename charset encoding flags */
+	__le32	s_reserved[95];		/* Padding to the end of the block */
 	__le32	s_checksum;		/* crc32c(superblock) */
 };
 
@@ -1354,6 +1361,16 @@
 /* Number of quota types we support */
 #define EXT4_MAXQUOTAS 3
 
+#define EXT4_ENC_UTF8_12_1	1
+
+/*
+ * Flags for ext4_sb_info.s_encoding_flags.
+ */
+#define EXT4_ENC_STRICT_MODE_FL	(1 << 0)
+
+#define ext4_has_strict_mode(sbi) \
+	(sbi->s_encoding_flags & EXT4_ENC_STRICT_MODE_FL)
+
 /*
  * fourth extended-fs super-block data in memory
  */
@@ -1403,6 +1420,10 @@
 	struct kobject s_kobj;
 	struct completion s_kobj_unregister;
 	struct super_block *s_sb;
+#ifdef CONFIG_UNICODE
+	struct unicode_map *s_encoding;
+	__u16 s_encoding_flags;
+#endif
 
 	/* Journaling */
 	struct journal_s *s_journal;
@@ -1558,6 +1579,7 @@
 	EXT4_STATE_MAY_INLINE_DATA,	/* may have in-inode data */
 	EXT4_STATE_EXT_PRECACHED,	/* extents have been precached */
 	EXT4_STATE_LUSTRE_EA_INODE,	/* Lustre-style ea_inode */
+	EXT4_STATE_VERITY_IN_PROGRESS,	/* building fs-verity Merkle tree */
 };
 
 #define EXT4_INODE_BIT_FNS(name, field, offset)				\
@@ -1608,9 +1630,12 @@
 #define EXT4_SB(sb)	(sb)
 #endif
 
-/*
- * Returns true if the inode is inode is encrypted
- */
+static inline bool ext4_verity_in_progress(struct inode *inode)
+{
+	return IS_ENABLED(CONFIG_FS_VERITY) &&
+	       ext4_test_inode_state(inode, EXT4_STATE_VERITY_IN_PROGRESS);
+}
+
 #define NEXT_ORPHAN(inode) EXT4_I(inode)->i_dtime
 
 /*
@@ -1663,6 +1688,7 @@
 #define EXT4_FEATURE_RO_COMPAT_METADATA_CSUM	0x0400
 #define EXT4_FEATURE_RO_COMPAT_READONLY		0x1000
 #define EXT4_FEATURE_RO_COMPAT_PROJECT		0x2000
+#define EXT4_FEATURE_RO_COMPAT_VERITY		0x8000
 
 #define EXT4_FEATURE_INCOMPAT_COMPRESSION	0x0001
 #define EXT4_FEATURE_INCOMPAT_FILETYPE		0x0002
@@ -1679,6 +1705,7 @@
 #define EXT4_FEATURE_INCOMPAT_LARGEDIR		0x4000 /* >2GB or 3-lvl htree */
 #define EXT4_FEATURE_INCOMPAT_INLINE_DATA	0x8000 /* data in inode */
 #define EXT4_FEATURE_INCOMPAT_ENCRYPT		0x10000
+#define EXT4_FEATURE_INCOMPAT_CASEFOLD		0x20000
 
 extern void ext4_update_dynamic_rev(struct super_block *sb);
 
@@ -1756,6 +1783,7 @@
 EXT4_FEATURE_RO_COMPAT_FUNCS(metadata_csum,	METADATA_CSUM)
 EXT4_FEATURE_RO_COMPAT_FUNCS(readonly,		READONLY)
 EXT4_FEATURE_RO_COMPAT_FUNCS(project,		PROJECT)
+EXT4_FEATURE_RO_COMPAT_FUNCS(verity,		VERITY)
 
 EXT4_FEATURE_INCOMPAT_FUNCS(compression,	COMPRESSION)
 EXT4_FEATURE_INCOMPAT_FUNCS(filetype,		FILETYPE)
@@ -1772,6 +1800,7 @@
 EXT4_FEATURE_INCOMPAT_FUNCS(largedir,		LARGEDIR)
 EXT4_FEATURE_INCOMPAT_FUNCS(inline_data,	INLINE_DATA)
 EXT4_FEATURE_INCOMPAT_FUNCS(encrypt,		ENCRYPT)
+EXT4_FEATURE_INCOMPAT_FUNCS(casefold,		CASEFOLD)
 
 #define EXT2_FEATURE_COMPAT_SUPP	EXT4_FEATURE_COMPAT_EXT_ATTR
 #define EXT2_FEATURE_INCOMPAT_SUPP	(EXT4_FEATURE_INCOMPAT_FILETYPE| \
@@ -1799,6 +1828,7 @@
 					 EXT4_FEATURE_INCOMPAT_MMP | \
 					 EXT4_FEATURE_INCOMPAT_INLINE_DATA | \
 					 EXT4_FEATURE_INCOMPAT_ENCRYPT | \
+					 EXT4_FEATURE_INCOMPAT_CASEFOLD | \
 					 EXT4_FEATURE_INCOMPAT_CSUM_SEED | \
 					 EXT4_FEATURE_INCOMPAT_LARGEDIR)
 #define EXT4_FEATURE_RO_COMPAT_SUPP	(EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER| \
@@ -1811,7 +1841,8 @@
 					 EXT4_FEATURE_RO_COMPAT_BIGALLOC |\
 					 EXT4_FEATURE_RO_COMPAT_METADATA_CSUM|\
 					 EXT4_FEATURE_RO_COMPAT_QUOTA |\
-					 EXT4_FEATURE_RO_COMPAT_PROJECT)
+					 EXT4_FEATURE_RO_COMPAT_PROJECT |\
+					 EXT4_FEATURE_RO_COMPAT_VERITY)
 
 #define EXTN_FEATURE_FUNCS(ver) \
 static inline bool ext4_has_unknown_ext##ver##_compat_features(struct super_block *sb) \
@@ -2077,6 +2108,9 @@
 #ifdef CONFIG_FS_ENCRYPTION
 	struct fscrypt_str crypto_buf;
 #endif
+#ifdef CONFIG_UNICODE
+	struct fscrypt_str cf_name;
+#endif
 };
 
 #define fname_name(p) ((p)->disk_name.name)
@@ -2302,24 +2336,62 @@
 					      struct ext4_group_desc *gdp);
 ext4_fsblk_t ext4_inode_to_goal_block(struct inode *);
 
+#ifdef CONFIG_UNICODE
+extern void ext4_fname_setup_ci_filename(struct inode *dir,
+					 const struct qstr *iname,
+					 struct fscrypt_str *fname);
+#endif
+
 #ifdef CONFIG_FS_ENCRYPTION
+static inline void ext4_fname_from_fscrypt_name(struct ext4_filename *dst,
+						const struct fscrypt_name *src)
+{
+	memset(dst, 0, sizeof(*dst));
+
+	dst->usr_fname = src->usr_fname;
+	dst->disk_name = src->disk_name;
+	dst->hinfo.hash = src->hash;
+	dst->hinfo.minor_hash = src->minor_hash;
+	dst->crypto_buf = src->crypto_buf;
+}
+
 static inline int ext4_fname_setup_filename(struct inode *dir,
-			const struct qstr *iname,
-			int lookup, struct ext4_filename *fname)
+					    const struct qstr *iname,
+					    int lookup,
+					    struct ext4_filename *fname)
 {
 	struct fscrypt_name name;
 	int err;
 
-	memset(fname, 0, sizeof(struct ext4_filename));
-
 	err = fscrypt_setup_filename(dir, iname, lookup, &name);
+	if (err)
+		return err;
 
-	fname->usr_fname = name.usr_fname;
-	fname->disk_name = name.disk_name;
-	fname->hinfo.hash = name.hash;
-	fname->hinfo.minor_hash = name.minor_hash;
-	fname->crypto_buf = name.crypto_buf;
-	return err;
+	ext4_fname_from_fscrypt_name(fname, &name);
+
+#ifdef CONFIG_UNICODE
+	ext4_fname_setup_ci_filename(dir, iname, &fname->cf_name);
+#endif
+	return 0;
+}
+
+static inline int ext4_fname_prepare_lookup(struct inode *dir,
+					    struct dentry *dentry,
+					    struct ext4_filename *fname)
+{
+	struct fscrypt_name name;
+	int err;
+
+	err = fscrypt_prepare_lookup(dir, dentry, &name);
+	if (err)
+		return err;
+
+	ext4_fname_from_fscrypt_name(fname, &name);
+
+#ifdef CONFIG_UNICODE
+	ext4_fname_setup_ci_filename(dir, &dentry->d_name, &fname->cf_name);
+#endif
+	return 0;
 }
 
 static inline void ext4_fname_free_filename(struct ext4_filename *fname)
@@ -2332,20 +2404,44 @@
 	fname->crypto_buf.name = NULL;
 	fname->usr_fname = NULL;
 	fname->disk_name.name = NULL;
+
+#ifdef CONFIG_UNICODE
+	kfree(fname->cf_name.name);
+	fname->cf_name.name = NULL;
+#endif
 }
-#else
+#else /* !CONFIG_FS_ENCRYPTION */
 static inline int ext4_fname_setup_filename(struct inode *dir,
-		const struct qstr *iname,
-		int lookup, struct ext4_filename *fname)
+					    const struct qstr *iname,
+					    int lookup,
+					    struct ext4_filename *fname)
 {
 	fname->usr_fname = iname;
 	fname->disk_name.name = (unsigned char *) iname->name;
 	fname->disk_name.len = iname->len;
+
+#ifdef CONFIG_UNICODE
+	ext4_fname_setup_ci_filename(dir, iname, &fname->cf_name);
+#endif
+
 	return 0;
 }
-static inline void ext4_fname_free_filename(struct ext4_filename *fname) { }
 
+static inline int ext4_fname_prepare_lookup(struct inode *dir,
+					    struct dentry *dentry,
+					    struct ext4_filename *fname)
+{
+	return ext4_fname_setup_filename(dir, &dentry->d_name, 1, fname);
+}
+
+static inline void ext4_fname_free_filename(struct ext4_filename *fname)
+{
+#ifdef CONFIG_UNICODE
+	kfree(fname->cf_name.name);
+	fname->cf_name.name = NULL;
 #endif
+}
+#endif /* !CONFIG_FS_ENCRYPTION */
 
 /* dir.c */
 extern int __ext4_check_dir_entry(const char *, unsigned int, struct inode *,
@@ -2393,8 +2489,8 @@
 extern int ext4_sync_file(struct file *, loff_t, loff_t, int);
 
 /* hash.c */
-extern int ext4fs_dirhash(const char *name, int len, struct
-			  dx_hash_info *hinfo);
+extern int ext4fs_dirhash(const struct inode *dir, const char *name, int len,
+			  struct dx_hash_info *hinfo);
 
 /* ialloc.c */
 extern struct inode *__ext4_new_inode(handle_t *, struct inode *, umode_t,
@@ -2989,6 +3085,10 @@
 /* dir.c */
 extern const struct file_operations ext4_dir_operations;
 
+#ifdef CONFIG_UNICODE
+extern const struct dentry_operations ext4_dentry_ops;
+#endif
+
 /* file.c */
 extern const struct inode_operations ext4_file_inode_operations;
 extern const struct file_operations ext4_file_operations;
@@ -3081,6 +3181,10 @@
 extern int ext4_handle_dirty_dirent_node(handle_t *handle,
 					 struct inode *inode,
 					 struct buffer_head *bh);
+extern int ext4_ci_compare(const struct inode *parent,
+			   const struct qstr *fname,
+			   const struct qstr *entry, bool quick);
+
 #define S_SHIFT 12
 static const unsigned char ext4_type_by_mode[(S_IFMT >> S_SHIFT) + 1] = {
 	[S_IFREG >> S_SHIFT]	= EXT4_FT_REG_FILE,
@@ -3103,6 +3207,8 @@
 extern int ext4_mpage_readpages(struct address_space *mapping,
 				struct list_head *pages, struct page *page,
 				unsigned nr_pages, bool is_readahead);
+extern int __init ext4_init_post_read_processing(void);
+extern void ext4_exit_post_read_processing(void);
 
 /* symlink.c */
 extern const struct inode_operations ext4_encrypted_symlink_inode_operations;
@@ -3212,6 +3318,9 @@
 /* mmp.c */
 extern int ext4_multi_mount_protect(struct super_block *, ext4_fsblk_t);
 
+/* verity.c */
+extern const struct fsverity_operations ext4_verityops;
+
 /*
  * Add new method to test whether block and inode bitmaps are properly
  * initialized. With uninit_bg reading the block from disk is not enough
diff --git a/fs/ext4/file.c b/fs/ext4/file.c
index f4a24a4..7ad36a9 100644
--- a/fs/ext4/file.c
+++ b/fs/ext4/file.c
@@ -455,6 +455,10 @@
 	if (ret)
 		return ret;
 
+	ret = fsverity_file_open(inode, filp);
+	if (ret)
+		return ret;
+
 	/*
 	 * Set up the jbd2_inode if we are opening the inode for
 	 * writing and the journal is present
diff --git a/fs/ext4/hash.c b/fs/ext4/hash.c
index e22dcfa..b934206 100644
--- a/fs/ext4/hash.c
+++ b/fs/ext4/hash.c
@@ -6,6 +6,7 @@
  */
 
 #include <linux/fs.h>
+#include <linux/unicode.h>
 #include <linux/compiler.h>
 #include <linux/bitops.h>
 #include "ext4.h"
@@ -196,7 +197,8 @@
  * represented, and whether or not the returned hash is 32 bits or 64
  * bits.  32 bit hashes will return 0 for the minor hash.
  */
-int ext4fs_dirhash(const char *name, int len, struct dx_hash_info *hinfo)
+static int __ext4fs_dirhash(const char *name, int len,
+			    struct dx_hash_info *hinfo)
 {
 	__u32	hash;
 	__u32	minor_hash = 0;
@@ -266,3 +268,33 @@
 	hinfo->minor_hash = minor_hash;
 	return 0;
 }
+
+int ext4fs_dirhash(const struct inode *dir, const char *name, int len,
+		   struct dx_hash_info *hinfo)
+{
+#ifdef CONFIG_UNICODE
+	const struct unicode_map *um = EXT4_SB(dir->i_sb)->s_encoding;
+	int r, dlen;
+	unsigned char *buff;
+	struct qstr qstr = {.name = name, .len = len };
+
+	if (len && IS_CASEFOLDED(dir) && um) {
+		buff = kzalloc(sizeof(char) * PATH_MAX, GFP_KERNEL);
+		if (!buff)
+			return -ENOMEM;
+
+		dlen = utf8_casefold(um, &qstr, buff, PATH_MAX);
+		if (dlen < 0) {
+			kfree(buff);
+			goto opaque_seq;
+		}
+
+		r = __ext4fs_dirhash(buff, dlen, hinfo);
+
+		kfree(buff);
+		return r;
+	}
+opaque_seq:
+#endif
+	return __ext4fs_dirhash(name, len, hinfo);
+}
diff --git a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c
index 61f83fa..47cea9c 100644
--- a/fs/ext4/ialloc.c
+++ b/fs/ext4/ialloc.c
@@ -455,7 +455,7 @@
 		if (qstr) {
 			hinfo.hash_version = DX_HASH_HALF_MD4;
 			hinfo.seed = sbi->s_hash_seed;
-			ext4fs_dirhash(qstr->name, qstr->len, &hinfo);
+			ext4fs_dirhash(parent, qstr->name, qstr->len, &hinfo);
 			grp = hinfo.hash;
 		} else
 			grp = prandom_u32();
diff --git a/fs/ext4/inline.c b/fs/ext4/inline.c
index 8a7394c..d065634 100644
--- a/fs/ext4/inline.c
+++ b/fs/ext4/inline.c
@@ -1421,7 +1421,7 @@
 			}
 		}
 
-		ext4fs_dirhash(de->name, de->name_len, hinfo);
+		ext4fs_dirhash(dir, de->name, de->name_len, hinfo);
 		if ((hinfo->hash < start_hash) ||
 		    ((hinfo->hash == start_hash) &&
 		     (hinfo->minor_hash < start_minor_hash)))
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index 25dea6a..52cbf51 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -1254,8 +1254,7 @@
 	if (unlikely(err))
 		page_zero_new_buffers(page, from, to);
 	else if (decrypt)
-		err = fscrypt_decrypt_page(page->mapping->host, page,
-				PAGE_SIZE, 0, page->index);
+		err = fscrypt_decrypt_pagecache_blocks(page, PAGE_SIZE, 0);
 	return err;
 }
 #endif
@@ -1356,6 +1355,9 @@
 	}
 
 	if (ret) {
+		bool extended = (pos + len > inode->i_size) &&
+				!ext4_verity_in_progress(inode);
+
 		unlock_page(page);
 		/*
 		 * __block_write_begin may have instantiated a few blocks
@@ -1365,11 +1367,11 @@
 		 * Add inode to orphan list in case we crash before
 		 * truncate finishes
 		 */
-		if (pos + len > inode->i_size && ext4_can_truncate(inode))
+		if (extended && ext4_can_truncate(inode))
 			ext4_orphan_add(handle, inode);
 
 		ext4_journal_stop(handle);
-		if (pos + len > inode->i_size) {
+		if (extended) {
 			ext4_truncate_failed_write(inode);
 			/*
 			 * If truncate failed early the inode might
@@ -1422,6 +1424,7 @@
 	int ret = 0, ret2;
 	int i_size_changed = 0;
 	int inline_data = ext4_has_inline_data(inode);
+	bool verity = ext4_verity_in_progress(inode);
 
 	trace_android_fs_datawrite_end(inode, pos, len);
 	trace_ext4_write_end(inode, pos, len, copied);
@@ -1440,12 +1443,16 @@
 	/*
 	 * it's important to update i_size while still holding page lock:
 	 * page writeout could otherwise come in and zero beyond i_size.
+	 *
+	 * If FS_IOC_ENABLE_VERITY is running on this inode, then Merkle tree
+	 * blocks are being written past EOF, so skip the i_size update.
 	 */
-	i_size_changed = ext4_update_inode_size(inode, pos + copied);
+	if (!verity)
+		i_size_changed = ext4_update_inode_size(inode, pos + copied);
 	unlock_page(page);
 	put_page(page);
 
-	if (old_size < pos)
+	if (old_size < pos && !verity)
 		pagecache_isize_extended(inode, old_size, pos);
 	/*
 	 * Don't mark the inode dirty under page lock. First, it unnecessarily
@@ -1456,7 +1463,7 @@
 	if (i_size_changed || inline_data)
 		ext4_mark_inode_dirty(handle, inode);
 
-	if (pos + len > inode->i_size && ext4_can_truncate(inode))
+	if (pos + len > inode->i_size && !verity && ext4_can_truncate(inode))
 		/* if we have allocated more blocks and copied
 		 * less. We will have blocks allocated outside
 		 * inode->i_size. So truncate them
@@ -1467,7 +1474,7 @@
 	if (!ret)
 		ret = ret2;
 
-	if (pos + len > inode->i_size) {
+	if (pos + len > inode->i_size && !verity) {
 		ext4_truncate_failed_write(inode);
 		/*
 		 * If truncate failed early the inode might still be
@@ -1528,6 +1535,7 @@
 	unsigned from, to;
 	int size_changed = 0;
 	int inline_data = ext4_has_inline_data(inode);
+	bool verity = ext4_verity_in_progress(inode);
 
 	trace_android_fs_datawrite_end(inode, pos, len);
 	trace_ext4_journalled_write_end(inode, pos, len, copied);
@@ -1558,13 +1566,14 @@
 		if (!partial)
 			SetPageUptodate(page);
 	}
-	size_changed = ext4_update_inode_size(inode, pos + copied);
+	if (!verity)
+		size_changed = ext4_update_inode_size(inode, pos + copied);
 	ext4_set_inode_state(inode, EXT4_STATE_JDATA);
 	EXT4_I(inode)->i_datasync_tid = handle->h_transaction->t_tid;
 	unlock_page(page);
 	put_page(page);
 
-	if (old_size < pos)
+	if (old_size < pos && !verity)
 		pagecache_isize_extended(inode, old_size, pos);
 
 	if (size_changed || inline_data) {
@@ -1573,7 +1582,7 @@
 			ret = ret2;
 	}
 
-	if (pos + len > inode->i_size && ext4_can_truncate(inode))
+	if (pos + len > inode->i_size && !verity && ext4_can_truncate(inode))
 		/* if we have allocated more blocks and copied
 		 * less. We will have blocks allocated outside
 		 * inode->i_size. So truncate them
@@ -1584,7 +1593,7 @@
 	ret2 = ext4_journal_stop(handle);
 	if (!ret)
 		ret = ret2;
-	if (pos + len > inode->i_size) {
+	if (pos + len > inode->i_size && !verity) {
 		ext4_truncate_failed_write(inode);
 		/*
 		 * If truncate failed early the inode might still be
@@ -2150,7 +2159,8 @@
 
 	trace_ext4_writepage(page);
 	size = i_size_read(inode);
-	if (page->index == size >> PAGE_SHIFT)
+	if (page->index == size >> PAGE_SHIFT &&
+	    !ext4_verity_in_progress(inode))
 		len = size & ~PAGE_MASK;
 	else
 		len = PAGE_SIZE;
@@ -2234,7 +2244,8 @@
 	 * after page tables are updated.
 	 */
 	size = i_size_read(mpd->inode);
-	if (page->index == size >> PAGE_SHIFT)
+	if (page->index == size >> PAGE_SHIFT &&
+	    !ext4_verity_in_progress(mpd->inode))
 		len = size & ~PAGE_MASK;
 	else
 		len = PAGE_SIZE;
@@ -2333,6 +2344,9 @@
 	ext4_lblk_t blocks = (i_size_read(inode) + i_blocksize(inode) - 1)
 							>> inode->i_blkbits;
 
+	if (ext4_verity_in_progress(inode))
+		blocks = EXT_MAX_BLOCKS;
+
 	do {
 		BUG_ON(buffer_locked(bh));
 
@@ -3052,8 +3066,8 @@
 
 	index = pos >> PAGE_SHIFT;
 
-	if (ext4_nonda_switch(inode->i_sb) ||
-	    S_ISLNK(inode->i_mode)) {
+	if (ext4_nonda_switch(inode->i_sb) || S_ISLNK(inode->i_mode) ||
+	    ext4_verity_in_progress(inode)) {
 		*fsdata = (void *)FALL_BACK_TO_NONDELALLOC;
 		return ext4_write_begin(file, mapping, pos,
 					len, flags, pagep, fsdata);
@@ -3917,6 +3931,8 @@
 		&& !fscrypt_using_hardware_encryption(inode))
 		return 0;
 #endif
+	if (fsverity_active(inode))
+		return 0;
 
 	/*
 	 * If we are doing data journalling we don't support O_DIRECT
@@ -4135,8 +4151,8 @@
 			/* We expect the key to be set. */
 			BUG_ON(!fscrypt_has_encryption_key(inode));
 			BUG_ON(blocksize != PAGE_SIZE);
-			WARN_ON_ONCE(fscrypt_decrypt_page(page->mapping->host,
-						page, PAGE_SIZE, 0, page->index));
+			WARN_ON_ONCE(fscrypt_decrypt_pagecache_blocks(
+						page, PAGE_SIZE, 0));
 		}
 	}
 	if (ext4_should_journal_data(inode)) {
@@ -4806,6 +4822,8 @@
 		return false;
 	if (ext4_test_inode_flag(inode, EXT4_INODE_ENCRYPT))
 		return false;
+	if (ext4_test_inode_flag(inode, EXT4_INODE_VERITY))
+		return false;
 	return true;
 }
 
@@ -4828,9 +4846,13 @@
 		new_fl |= S_DAX;
 	if (flags & EXT4_ENCRYPT_FL)
 		new_fl |= S_ENCRYPTED;
+	if (flags & EXT4_CASEFOLD_FL)
+		new_fl |= S_CASEFOLD;
+	if (flags & EXT4_VERITY_FL)
+		new_fl |= S_VERITY;
 	inode_set_flags(inode, new_fl,
 			S_SYNC|S_APPEND|S_IMMUTABLE|S_NOATIME|S_DIRSYNC|S_DAX|
-			S_ENCRYPTED);
+			S_ENCRYPTED|S_CASEFOLD|S_VERITY);
 }
 
 static blkcnt_t ext4_inode_blocks(struct ext4_inode *raw_inode,
@@ -5184,6 +5206,9 @@
 				 "iget: bogus i_mode (%o)", inode->i_mode);
 		goto bad_inode;
 	}
+	if (IS_CASEFOLDED(inode) && !ext4_has_feature_casefold(inode->i_sb))
+		EXT4_ERROR_INODE(inode,
+				 "casefold flag without casefold feature");
 	brelse(iloc.bh);
 
 	unlock_new_inode(inode);
@@ -5624,6 +5649,10 @@
 	if (error)
 		return error;
 
+	error = fsverity_prepare_setattr(dentry, attr);
+	if (error)
+		return error;
+
 	if (is_quota_modification(inode, attr)) {
 		error = dquot_initialize(inode);
 		if (error)
diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c
index c8fa2d1..1385541 100644
--- a/fs/ext4/ioctl.c
+++ b/fs/ext4/ioctl.c
@@ -301,6 +301,7 @@
 	struct ext4_iloc iloc;
 	unsigned int oldflags, mask, i;
 	unsigned int jflag;
+	struct super_block *sb = inode->i_sb;
 
 	/* Is it quota file? Do not allow user to mess with it */
 	if (ext4_is_quota_file(inode))
@@ -345,6 +346,23 @@
 			goto flags_out;
 	}
 
+	if ((flags ^ oldflags) & EXT4_CASEFOLD_FL) {
+		if (!ext4_has_feature_casefold(sb)) {
+			err = -EOPNOTSUPP;
+			goto flags_out;
+		}
+
+		if (!S_ISDIR(inode->i_mode)) {
+			err = -ENOTDIR;
+			goto flags_out;
+		}
+
+		if (!ext4_empty_dir(inode)) {
+			err = -ENOTEMPTY;
+			goto flags_out;
+		}
+	}
+
 	/*
 	 * Wait for all pending directio and then flush all the dirty pages
 	 * for this file.  The flush marks all the pages readonly, so any
@@ -1176,6 +1194,17 @@
 	}
 	case EXT4_IOC_SHUTDOWN:
 		return ext4_shutdown(sb, arg);
+
+	case FS_IOC_ENABLE_VERITY:
+		if (!ext4_has_feature_verity(sb))
+			return -EOPNOTSUPP;
+		return fsverity_ioctl_enable(filp, (const void __user *)arg);
+
+	case FS_IOC_MEASURE_VERITY:
+		if (!ext4_has_feature_verity(sb))
+			return -EOPNOTSUPP;
+		return fsverity_ioctl_measure(filp, (void __user *)arg);
+
 	default:
 		return -ENOTTY;
 	}
@@ -1238,6 +1267,8 @@
 	case EXT4_IOC_GET_ENCRYPTION_POLICY:
 	case EXT4_IOC_SHUTDOWN:
 	case FS_IOC_GETFSMAP:
+	case FS_IOC_ENABLE_VERITY:
+	case FS_IOC_MEASURE_VERITY:
 		break;
 	default:
 		return -ENOIOCTLCMD;
diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
index f941208..37cc47a 100644
--- a/fs/ext4/namei.c
+++ b/fs/ext4/namei.c
@@ -35,6 +35,7 @@
 #include <linux/buffer_head.h>
 #include <linux/bio.h>
 #include <linux/iversion.h>
+#include <linux/unicode.h>
 #include "ext4.h"
 #include "ext4_jbd2.h"
 
@@ -642,7 +643,7 @@
 				}
 				if (!fscrypt_has_encryption_key(dir)) {
 					/* Directory is not encrypted */
-					ext4fs_dirhash(de->name,
+					ext4fs_dirhash(dir, de->name,
 						de->name_len, &h);
 					printk("%*.s:(U)%x.%u ", len,
 					       name, h.hash,
@@ -675,8 +676,8 @@
 						name = fname_crypto_str.name;
 						len = fname_crypto_str.len;
 					}
-					ext4fs_dirhash(de->name, de->name_len,
-						       &h);
+					ext4fs_dirhash(dir, de->name,
+						       de->name_len, &h);
 					printk("%*.s:(E)%x.%u ", len, name,
 					       h.hash, (unsigned) ((char *) de
 								   - base));
@@ -686,7 +687,7 @@
 #else
 				int len = de->name_len;
 				char *name = de->name;
-				ext4fs_dirhash(de->name, de->name_len, &h);
+				ext4fs_dirhash(dir, de->name, de->name_len, &h);
 				printk("%*.s:%x.%u ", len, name, h.hash,
 				       (unsigned) ((char *) de - base));
 #endif
@@ -775,7 +776,7 @@
 		hinfo->hash_version += EXT4_SB(dir->i_sb)->s_hash_unsigned;
 	hinfo->seed = EXT4_SB(dir->i_sb)->s_hash_seed;
 	if (fname && fname_name(fname))
-		ext4fs_dirhash(fname_name(fname), fname_len(fname), hinfo);
+		ext4fs_dirhash(dir, fname_name(fname), fname_len(fname), hinfo);
 	hash = hinfo->hash;
 
 	if (root->info.unused_flags & 1) {
@@ -1024,7 +1025,7 @@
 			/* silently ignore the rest of the block */
 			break;
 		}
-		ext4fs_dirhash(de->name, de->name_len, hinfo);
+		ext4fs_dirhash(dir, de->name, de->name_len, hinfo);
 		if ((hinfo->hash < start_hash) ||
 		    ((hinfo->hash == start_hash) &&
 		     (hinfo->minor_hash < start_minor_hash)))
@@ -1213,7 +1214,7 @@
 
 	while ((char *) de < base + blocksize) {
 		if (de->name_len && de->inode) {
-			ext4fs_dirhash(de->name, de->name_len, &h);
+			ext4fs_dirhash(dir, de->name, de->name_len, &h);
 			map_tail--;
 			map_tail->hash = h.hash;
 			map_tail->offs = ((char *) de - base)>>2;
@@ -1268,15 +1269,83 @@
 	dx_set_count(entries, count + 1);
 }
 
+#ifdef CONFIG_UNICODE
+/*
+ * Test whether a case-insensitive directory entry matches the filename
+ * being searched for.  If quick is set, assume the name being looked up
+ * is already in the casefolded form.
+ *
+ * Returns: 0 if the directory entry matches, more than 0 if it
+ * doesn't match or less than zero on error.
+ */
+int ext4_ci_compare(const struct inode *parent, const struct qstr *name,
+		    const struct qstr *entry, bool quick)
+{
+	const struct ext4_sb_info *sbi = EXT4_SB(parent->i_sb);
+	const struct unicode_map *um = sbi->s_encoding;
+	int ret;
+
+	if (quick)
+		ret = utf8_strncasecmp_folded(um, name, entry);
+	else
+		ret = utf8_strncasecmp(um, name, entry);
+
+	if (ret < 0) {
+		/* Handle invalid character sequence as either an error
+		 * or as an opaque byte sequence.
+		 */
+		if (ext4_has_strict_mode(sbi))
+			return -EINVAL;
+
+		if (name->len != entry->len)
+			return 1;
+
+		return !!memcmp(name->name, entry->name, name->len);
+	}
+
+	return ret;
+}
+
+void ext4_fname_setup_ci_filename(struct inode *dir, const struct qstr *iname,
+				  struct fscrypt_str *cf_name)
+{
+	int len;
+
+	if (!IS_CASEFOLDED(dir) || !EXT4_SB(dir->i_sb)->s_encoding) {
+		cf_name->name = NULL;
+		return;
+	}
+
+	cf_name->name = kmalloc(EXT4_NAME_LEN, GFP_NOFS);
+	if (!cf_name->name)
+		return;
+
+	len = utf8_casefold(EXT4_SB(dir->i_sb)->s_encoding,
+			    iname, cf_name->name,
+			    EXT4_NAME_LEN);
+	if (len <= 0) {
+		kfree(cf_name->name);
+		cf_name->name = NULL;
+		return;
+	}
+	cf_name->len = (unsigned) len;
+
+}
+#endif
+
 /*
  * Test whether a directory entry matches the filename being searched for.
  *
  * Return: %true if the directory entry matches, otherwise %false.
  */
-static inline bool ext4_match(const struct ext4_filename *fname,
+static inline bool ext4_match(const struct inode *parent,
+			      const struct ext4_filename *fname,
 			      const struct ext4_dir_entry_2 *de)
 {
 	struct fscrypt_name f;
+#ifdef CONFIG_UNICODE
+	const struct qstr entry = {.name = de->name, .len = de->name_len};
+#endif
 
 	if (!de->inode)
 		return false;
@@ -1286,6 +1355,19 @@
 #ifdef CONFIG_FS_ENCRYPTION
 	f.crypto_buf = fname->crypto_buf;
 #endif
+
+#ifdef CONFIG_UNICODE
+	if (EXT4_SB(parent->i_sb)->s_encoding && IS_CASEFOLDED(parent)) {
+		if (fname->cf_name.name) {
+			struct qstr cf = {.name = fname->cf_name.name,
+					  .len = fname->cf_name.len};
+			return !ext4_ci_compare(parent, &cf, &entry, true);
+		}
+		return !ext4_ci_compare(parent, fname->usr_fname, &entry,
+					false);
+	}
+#endif
+
 	return fscrypt_match_name(&f, de->name, de->name_len);
 }
 
@@ -1306,7 +1388,7 @@
 		/* this code is executed quadratically often */
 		/* do minimal checking `by hand' */
 		if ((char *) de + de->name_len <= dlimit &&
-		    ext4_match(fname, de)) {
+		    ext4_match(dir, fname, de)) {
 			/* found a match - just to be sure, do
 			 * a full check */
 			if (ext4_check_dir_entry(dir, NULL, de, bh, bh->b_data,
@@ -1343,7 +1425,7 @@
 }
 
 /*
- *	ext4_find_entry()
+ *	__ext4_find_entry()
  *
  * finds an entry in the specified directory with the wanted name. It
  * returns the cache buffer in which the entry was found, and the entry
@@ -1353,39 +1435,32 @@
  * The returned buffer_head has ->b_count elevated.  The caller is expected
  * to brelse() it when appropriate.
  */
-static struct buffer_head * ext4_find_entry (struct inode *dir,
-					const struct qstr *d_name,
-					struct ext4_dir_entry_2 **res_dir,
-					int *inlined)
+static struct buffer_head *__ext4_find_entry(struct inode *dir,
+					     struct ext4_filename *fname,
+					     struct ext4_dir_entry_2 **res_dir,
+					     int *inlined)
 {
 	struct super_block *sb;
 	struct buffer_head *bh_use[NAMEI_RA_SIZE];
 	struct buffer_head *bh, *ret = NULL;
 	ext4_lblk_t start, block;
-	const u8 *name = d_name->name;
+	const u8 *name = fname->usr_fname->name;
 	size_t ra_max = 0;	/* Number of bh's in the readahead
 				   buffer, bh_use[] */
 	size_t ra_ptr = 0;	/* Current index into readahead
 				   buffer */
 	ext4_lblk_t  nblocks;
 	int i, namelen, retval;
-	struct ext4_filename fname;
 
 	*res_dir = NULL;
 	sb = dir->i_sb;
-	namelen = d_name->len;
+	namelen = fname->usr_fname->len;
 	if (namelen > EXT4_NAME_LEN)
 		return NULL;
 
-	retval = ext4_fname_setup_filename(dir, d_name, 1, &fname);
-	if (retval == -ENOENT)
-		return NULL;
-	if (retval)
-		return ERR_PTR(retval);
-
 	if (ext4_has_inline_data(dir)) {
 		int has_inline_data = 1;
-		ret = ext4_find_inline_entry(dir, &fname, res_dir,
+		ret = ext4_find_inline_entry(dir, fname, res_dir,
 					     &has_inline_data);
 		if (has_inline_data) {
 			if (inlined)
@@ -1405,7 +1480,7 @@
 		goto restart;
 	}
 	if (is_dx(dir)) {
-		ret = ext4_dx_find_entry(dir, &fname, res_dir);
+		ret = ext4_dx_find_entry(dir, fname, res_dir);
 		/*
 		 * On success, or if the error was file not found,
 		 * return.  Otherwise, fall back to doing a search the
@@ -1469,7 +1544,7 @@
 			goto cleanup_and_exit;
 		}
 		set_buffer_verified(bh);
-		i = search_dirblock(bh, dir, &fname,
+		i = search_dirblock(bh, dir, fname,
 			    block << EXT4_BLOCK_SIZE_BITS(sb), res_dir);
 		if (i == 1) {
 			EXT4_I(dir)->i_dir_start_lookup = block;
@@ -1500,10 +1575,50 @@
 	/* Clean up the read-ahead blocks */
 	for (; ra_ptr < ra_max; ra_ptr++)
 		brelse(bh_use[ra_ptr]);
-	ext4_fname_free_filename(&fname);
 	return ret;
 }
 
+static struct buffer_head *ext4_find_entry(struct inode *dir,
+					   const struct qstr *d_name,
+					   struct ext4_dir_entry_2 **res_dir,
+					   int *inlined)
+{
+	int err;
+	struct ext4_filename fname;
+	struct buffer_head *bh;
+
+	err = ext4_fname_setup_filename(dir, d_name, 1, &fname);
+	if (err == -ENOENT)
+		return NULL;
+	if (err)
+		return ERR_PTR(err);
+
+	bh = __ext4_find_entry(dir, &fname, res_dir, inlined);
+
+	ext4_fname_free_filename(&fname);
+	return bh;
+}
+
+static struct buffer_head *ext4_lookup_entry(struct inode *dir,
+					     struct dentry *dentry,
+					     struct ext4_dir_entry_2 **res_dir)
+{
+	int err;
+	struct ext4_filename fname;
+	struct buffer_head *bh;
+
+	err = ext4_fname_prepare_lookup(dir, dentry, &fname);
+	if (err == -ENOENT)
+		return NULL;
+	if (err)
+		return ERR_PTR(err);
+
+	bh = __ext4_find_entry(dir, &fname, res_dir, NULL);
+
+	ext4_fname_free_filename(&fname);
+	return bh;
+}
+
 static struct buffer_head * ext4_dx_find_entry(struct inode *dir,
 			struct ext4_filename *fname,
 			struct ext4_dir_entry_2 **res_dir)
@@ -1562,16 +1677,11 @@
 	struct inode *inode;
 	struct ext4_dir_entry_2 *de;
 	struct buffer_head *bh;
-	int err;
-
-	err = fscrypt_prepare_lookup(dir, dentry, flags);
-	if (err)
-		return ERR_PTR(err);
 
 	if (dentry->d_name.len > EXT4_NAME_LEN)
 		return ERR_PTR(-ENAMETOOLONG);
 
-	bh = ext4_find_entry(dir, &dentry->d_name, &de, NULL);
+	bh = ext4_lookup_entry(dir, dentry, &de);
 	if (IS_ERR(bh))
 		return (struct dentry *) bh;
 	inode = NULL;
@@ -1604,6 +1714,17 @@
 			return ERR_PTR(-EPERM);
 		}
 	}
+
+#ifdef CONFIG_UNICODE
+	if (!inode && IS_CASEFOLDED(dir)) {
+		/* Eventually we want to call d_add_ci(dentry, NULL)
+		 * for negative dentries in the encoding case as
+		 * well.  For now, prevent the negative dentry
+		 * from being cached.
+		 */
+		return NULL;
+	}
+#endif
 	return d_splice_alias(inode, dentry);
 }
 
@@ -1814,7 +1935,7 @@
 		if (ext4_check_dir_entry(dir, NULL, de, bh,
 					 buf, buf_size, offset))
 			return -EFSCORRUPTED;
-		if (ext4_match(fname, de))
+		if (ext4_match(dir, fname, de))
 			return -EEXIST;
 		nlen = EXT4_DIR_REC_LEN(de->name_len);
 		rlen = ext4_rec_len_from_disk(de->rec_len, buf_size);
@@ -1999,7 +2120,7 @@
 	if (fname->hinfo.hash_version <= DX_HASH_TEA)
 		fname->hinfo.hash_version += EXT4_SB(dir->i_sb)->s_hash_unsigned;
 	fname->hinfo.seed = EXT4_SB(dir->i_sb)->s_hash_seed;
-	ext4fs_dirhash(fname_name(fname), fname_len(fname), &fname->hinfo);
+	ext4fs_dirhash(dir, fname_name(fname), fname_len(fname), &fname->hinfo);
 
 	memset(frames, 0, sizeof(frames));
 	frame = frames;
@@ -2052,6 +2173,7 @@
 	struct ext4_dir_entry_2 *de;
 	struct ext4_dir_entry_tail *t;
 	struct super_block *sb;
+	struct ext4_sb_info *sbi;
 	struct ext4_filename fname;
 	int	retval;
 	int	dx_fallback=0;
@@ -2063,10 +2185,17 @@
 		csum_size = sizeof(struct ext4_dir_entry_tail);
 
 	sb = dir->i_sb;
+	sbi = EXT4_SB(sb);
 	blocksize = sb->s_blocksize;
 	if (!dentry->d_name.len)
 		return -EINVAL;
 
+#ifdef CONFIG_UNICODE
+	if (ext4_has_strict_mode(sbi) && IS_CASEFOLDED(dir) &&
+	    sbi->s_encoding && utf8_validate(sbi->s_encoding, &dentry->d_name))
+		return -EINVAL;
+#endif
+
 	retval = ext4_fname_setup_filename(dir, &dentry->d_name, 0, &fname);
 	if (retval)
 		return retval;
@@ -3008,6 +3137,17 @@
 	ext4_update_dx_flag(dir);
 	ext4_mark_inode_dirty(handle, dir);
 
+#ifdef CONFIG_UNICODE
+	/* VFS negative dentries are incompatible with Encoding and
+	 * Case-insensitiveness. Eventually we'll want avoid
+	 * invalidating the dentries here, alongside with returning the
+	 * negative dentries at ext4_lookup(), when it is better
+	 * supported by the VFS for the CI case.
+	 */
+	if (IS_CASEFOLDED(dir))
+		d_invalidate(dentry);
+#endif
+
 end_rmdir:
 	brelse(bh);
 	if (handle)
@@ -3076,6 +3216,17 @@
 	inode->i_ctime = current_time(inode);
 	ext4_mark_inode_dirty(handle, inode);
 
+#ifdef CONFIG_UNICODE
+	/* VFS negative dentries are incompatible with Encoding and
+	 * Case-insensitiveness. Eventually we'll want avoid
+	 * invalidating the dentries here, alongside with returning the
+	 * negative dentries at ext4_lookup(), when it is  better
+	 * supported by the VFS for the CI case.
+	 */
+	if (IS_CASEFOLDED(dir))
+		d_invalidate(dentry);
+#endif
+
 end_unlink:
 	brelse(bh);
 	if (handle)
diff --git a/fs/ext4/page-io.c b/fs/ext4/page-io.c
index b69f9bb..1539ab5 100644
--- a/fs/ext4/page-io.c
+++ b/fs/ext4/page-io.c
@@ -66,9 +66,7 @@
 
 	bio_for_each_segment_all(bvec, bio, i) {
 		struct page *page = bvec->bv_page;
-#ifdef CONFIG_FS_ENCRYPTION
-		struct page *data_page = NULL;
-#endif
+		struct page *bounce_page = NULL;
 		struct buffer_head *bh, *head;
 		unsigned bio_start = bvec->bv_offset;
 		unsigned bio_end = bio_start + bvec->bv_len;
@@ -78,13 +76,10 @@
 		if (!page)
 			continue;
 
-#ifdef CONFIG_FS_ENCRYPTION
-		if (!page->mapping) {
-			/* The bounce data pages are unmapped. */
-			data_page = page;
-			fscrypt_pullback_bio_page(&page, false);
+		if (fscrypt_is_bounce_page(page)) {
+			bounce_page = page;
+			page = fscrypt_pagecache_page(bounce_page);
 		}
-#endif
 
 		if (bio->bi_status) {
 			SetPageError(page);
@@ -111,10 +106,7 @@
 		bit_spin_unlock(BH_Uptodate_Lock, &head->b_state);
 		local_irq_restore(flags);
 		if (!under_io) {
-#ifdef CONFIG_FS_ENCRYPTION
-			if (data_page)
-				fscrypt_restore_control_page(data_page);
-#endif
+			fscrypt_free_bounce_page(bounce_page);
 			end_page_writeback(page);
 		}
 	}
@@ -418,7 +410,7 @@
 			struct writeback_control *wbc,
 			bool keep_towrite)
 {
-	struct page *data_page = NULL;
+	struct page *bounce_page = NULL;
 	struct inode *inode = page->mapping->host;
 	unsigned block_start;
 	struct buffer_head *bh, *head;
@@ -485,11 +477,10 @@
 
 	retry_encrypt:
 		if (!fscrypt_using_hardware_encryption(inode))
-			data_page = fscrypt_encrypt_page(inode,
-					page, PAGE_SIZE, 0,
-					page->index, gfp_flags);
-		if (IS_ERR(data_page)) {
-			ret = PTR_ERR(data_page);
+			bounce_page = fscrypt_encrypt_pagecache_blocks(page,
+					PAGE_SIZE,0, gfp_flags);
+		if (IS_ERR(bounce_page)) {
+			ret = PTR_ERR(bounce_page);
 			if (ret == -ENOMEM && wbc->sync_mode == WB_SYNC_ALL) {
 				if (io->io_bio) {
 					ext4_io_submit(io);
@@ -498,7 +489,7 @@
 				gfp_flags |= __GFP_NOFAIL;
 				goto retry_encrypt;
 			}
-			data_page = NULL;
+			bounce_page = NULL;
 			goto out;
 		}
 	}
@@ -507,10 +498,9 @@
 	do {
 		if (!buffer_async_write(bh))
 			continue;
-		if (data_page)
+		if (bounce_page)
 			io->io_flags |= EXT4_IO_ENCRYPTED;
-		ret = io_submit_add_bh(io, inode,
-				       data_page ? data_page : page, bh);
+		ret = io_submit_add_bh(io, inode, bounce_page ?: page, bh);
 		if (ret) {
 			/*
 			 * We only get here on ENOMEM.  Not much else
@@ -526,8 +516,7 @@
 	/* Error stopped previous loop? Clean up buffers... */
 	if (ret) {
 	out:
-		if (data_page)
-			fscrypt_restore_control_page(data_page);
+		fscrypt_free_bounce_page(bounce_page);
 		printk_ratelimited(KERN_ERR "%s: ret = %d\n", __func__, ret);
 		redirty_page_for_writepage(wbc, page);
 		do {
diff --git a/fs/ext4/readpage.c b/fs/ext4/readpage.c
index 8fbb688..72f59b2 100644
--- a/fs/ext4/readpage.c
+++ b/fs/ext4/readpage.c
@@ -48,13 +48,103 @@
 #include "ext4.h"
 #include <trace/events/android_fs.h>
 
-static inline bool ext4_bio_encrypted(struct bio *bio)
+#define NUM_PREALLOC_POST_READ_CTXS	128
+
+static struct kmem_cache *bio_post_read_ctx_cache;
+static mempool_t *bio_post_read_ctx_pool;
+
+/* postprocessing steps for read bios */
+enum bio_post_read_step {
+	STEP_INITIAL = 0,
+	STEP_DECRYPT,
+	STEP_VERITY,
+};
+
+struct bio_post_read_ctx {
+	struct bio *bio;
+	struct work_struct work;
+	unsigned int cur_step;
+	unsigned int enabled_steps;
+};
+
+static void __read_end_io(struct bio *bio)
 {
-#ifdef CONFIG_FS_ENCRYPTION
-	return unlikely(bio->bi_private != NULL);
-#else
-	return false;
-#endif
+	struct page *page;
+	struct bio_vec *bv;
+	int i;
+
+	bio_for_each_segment_all(bv, bio, i) {
+		page = bv->bv_page;
+
+		/* PG_error was set if any post_read step failed */
+		if (bio->bi_status || PageError(page)) {
+			ClearPageUptodate(page);
+			/* will re-read again later */
+			ClearPageError(page);
+		} else {
+			SetPageUptodate(page);
+		}
+		unlock_page(page);
+	}
+	if (bio->bi_private)
+		mempool_free(bio->bi_private, bio_post_read_ctx_pool);
+	bio_put(bio);
+}
+
+static void bio_post_read_processing(struct bio_post_read_ctx *ctx);
+
+static void decrypt_work(struct work_struct *work)
+{
+	struct bio_post_read_ctx *ctx =
+		container_of(work, struct bio_post_read_ctx, work);
+
+	fscrypt_decrypt_bio(ctx->bio);
+
+	bio_post_read_processing(ctx);
+}
+
+static void verity_work(struct work_struct *work)
+{
+	struct bio_post_read_ctx *ctx =
+		container_of(work, struct bio_post_read_ctx, work);
+
+	fsverity_verify_bio(ctx->bio);
+
+	bio_post_read_processing(ctx);
+}
+
+static void bio_post_read_processing(struct bio_post_read_ctx *ctx)
+{
+	/*
+	 * We use different work queues for decryption and for verity because
+	 * verity may require reading metadata pages that need decryption, and
+	 * we shouldn't recurse to the same workqueue.
+	 */
+	switch (++ctx->cur_step) {
+	case STEP_DECRYPT:
+		if (ctx->enabled_steps & (1 << STEP_DECRYPT)) {
+			INIT_WORK(&ctx->work, decrypt_work);
+			fscrypt_enqueue_decrypt_work(&ctx->work);
+			return;
+		}
+		ctx->cur_step++;
+		/* fall-through */
+	case STEP_VERITY:
+		if (ctx->enabled_steps & (1 << STEP_VERITY)) {
+			INIT_WORK(&ctx->work, verity_work);
+			fsverity_enqueue_verify_work(&ctx->work);
+			return;
+		}
+		ctx->cur_step++;
+		/* fall-through */
+	default:
+		__read_end_io(ctx->bio);
+	}
+}
+
+static bool bio_post_read_required(struct bio *bio)
+{
+	return bio->bi_private && !bio->bi_status;
 }
 
 static void
@@ -82,33 +172,56 @@
  */
 static void mpage_end_io(struct bio *bio)
 {
-	struct bio_vec *bv;
-	int i;
-
 	if (trace_android_fs_dataread_start_enabled())
 		ext4_trace_read_completion(bio);
 
-	if (ext4_bio_encrypted(bio)) {
-		if (bio->bi_status) {
-			fscrypt_release_ctx(bio->bi_private);
-		} else {
-			fscrypt_enqueue_decrypt_bio(bio->bi_private, bio);
-			return;
-		}
-	}
-	bio_for_each_segment_all(bv, bio, i) {
-		struct page *page = bv->bv_page;
+	if (bio_post_read_required(bio)) {
+		struct bio_post_read_ctx *ctx = bio->bi_private;
 
-		if (!bio->bi_status) {
-			SetPageUptodate(page);
-		} else {
-			ClearPageUptodate(page);
-			SetPageError(page);
-		}
-		unlock_page(page);
+		ctx->cur_step = STEP_INITIAL;
+		bio_post_read_processing(ctx);
+		return;
 	}
+	__read_end_io(bio);
+}
 
-	bio_put(bio);
+static inline bool ext4_need_verity(const struct inode *inode, pgoff_t idx)
+{
+	return fsverity_active(inode) &&
+	       idx < DIV_ROUND_UP(inode->i_size, PAGE_SIZE);
+}
+
+static struct bio_post_read_ctx *get_bio_post_read_ctx(struct inode *inode,
+						       struct bio *bio,
+						       pgoff_t first_idx)
+{
+	unsigned int post_read_steps = 0;
+	struct bio_post_read_ctx *ctx = NULL;
+
+	if (IS_ENCRYPTED(inode) && S_ISREG(inode->i_mode))
+		post_read_steps |= 1 << STEP_DECRYPT;
+
+	if (ext4_need_verity(inode, first_idx))
+		post_read_steps |= 1 << STEP_VERITY;
+
+	if (post_read_steps) {
+		ctx = mempool_alloc(bio_post_read_ctx_pool, GFP_NOFS);
+		if (!ctx)
+			return ERR_PTR(-ENOMEM);
+		ctx->bio = bio;
+		ctx->enabled_steps = post_read_steps;
+		bio->bi_private = ctx;
+	}
+	return ctx;
+}
+
+static inline loff_t ext4_readpage_limit(struct inode *inode)
+{
+	if (IS_ENABLED(CONFIG_FS_VERITY) &&
+	    (IS_VERITY(inode) || ext4_verity_in_progress(inode)))
+		return inode->i_sb->s_maxbytes;
+
+	return i_size_read(inode);
 }
 
 static void
@@ -179,7 +292,8 @@
 
 		block_in_file = (sector_t)page->index << (PAGE_SHIFT - blkbits);
 		last_block = block_in_file + nr_pages * blocks_per_page;
-		last_block_in_file = (i_size_read(inode) + blocksize - 1) >> blkbits;
+		last_block_in_file = (ext4_readpage_limit(inode) +
+				      blocksize - 1) >> blkbits;
 		if (last_block > last_block_in_file)
 			last_block = last_block_in_file;
 		page_block = 0;
@@ -256,6 +370,9 @@
 			zero_user_segment(page, first_hole << blkbits,
 					  PAGE_SIZE);
 			if (first_hole == 0) {
+				if (ext4_need_verity(inode, page->index) &&
+				    !fsverity_verify_page(page))
+					goto set_error_page;
 				SetPageUptodate(page);
 				unlock_page(page);
 				goto next_page;
@@ -279,19 +396,17 @@
 			bio = NULL;
 		}
 		if (bio == NULL) {
-			struct fscrypt_ctx *ctx = NULL;
+			struct bio_post_read_ctx *ctx;
 			unsigned int flags = 0;
 
-			if (IS_ENCRYPTED(inode) && S_ISREG(inode->i_mode)) {
-				ctx = fscrypt_get_ctx(inode, GFP_NOFS);
-				if (IS_ERR(ctx))
-					goto set_error_page;
-			}
 			bio = bio_alloc(GFP_KERNEL,
 				min_t(int, nr_pages, BIO_MAX_PAGES));
-			if (!bio) {
-				if (ctx)
-					fscrypt_release_ctx(ctx);
+			if (!bio)
+				goto set_error_page;
+			ctx = get_bio_post_read_ctx(inode, bio, page->index);
+			if (IS_ERR(ctx)) {
+				bio_put(bio);
+				bio = NULL;
 				goto set_error_page;
 			}
 			bio_set_dev(bio, bdev);
@@ -334,3 +449,29 @@
 		ext4_submit_bio_read(bio);
 	return 0;
 }
+
+int __init ext4_init_post_read_processing(void)
+{
+	bio_post_read_ctx_cache =
+		kmem_cache_create("ext4_bio_post_read_ctx",
+				  sizeof(struct bio_post_read_ctx), 0, 0, NULL);
+	if (!bio_post_read_ctx_cache)
+		goto fail;
+	bio_post_read_ctx_pool =
+		mempool_create_slab_pool(NUM_PREALLOC_POST_READ_CTXS,
+					 bio_post_read_ctx_cache);
+	if (!bio_post_read_ctx_pool)
+		goto fail_free_cache;
+	return 0;
+
+fail_free_cache:
+	kmem_cache_destroy(bio_post_read_ctx_cache);
+fail:
+	return -ENOMEM;
+}
+
+void ext4_exit_post_read_processing(void)
+{
+	mempool_destroy(bio_post_read_ctx_pool);
+	kmem_cache_destroy(bio_post_read_ctx_cache);
+}
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index 55d33c5..4ff9461 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -42,6 +42,7 @@
 #include <linux/cleancache.h>
 #include <linux/uaccess.h>
 #include <linux/iversion.h>
+#include <linux/unicode.h>
 
 #include <linux/kthread.h>
 #include <linux/freezer.h>
@@ -1056,6 +1057,9 @@
 		crypto_free_shash(sbi->s_chksum_driver);
 	kfree(sbi->s_blockgroup_lock);
 	fs_put_dax(sbi->s_daxdev);
+#ifdef CONFIG_UNICODE
+	utf8_unload(sbi->s_encoding);
+#endif
 	kfree(sbi);
 }
 
@@ -1111,6 +1115,9 @@
 static void ext4_i_callback(struct rcu_head *head)
 {
 	struct inode *inode = container_of(head, struct inode, i_rcu);
+
+	fscrypt_free_inode(inode);
+
 	kmem_cache_free(ext4_inode_cachep, EXT4_I(inode));
 }
 
@@ -1177,6 +1184,7 @@
 		EXT4_I(inode)->jinode = NULL;
 	}
 	fscrypt_put_encryption_info(inode);
+	fsverity_cleanup_inode(inode);
 }
 
 static struct inode *ext4_nfs_get_inode(struct super_block *sb,
@@ -1758,6 +1766,36 @@
 	{Opt_err, 0, 0}
 };
 
+#ifdef CONFIG_UNICODE
+static const struct ext4_sb_encodings {
+	__u16 magic;
+	char *name;
+	char *version;
+} ext4_sb_encoding_map[] = {
+	{EXT4_ENC_UTF8_12_1, "utf8", "12.1.0"},
+};
+
+static int ext4_sb_read_encoding(const struct ext4_super_block *es,
+				 const struct ext4_sb_encodings **encoding,
+				 __u16 *flags)
+{
+	__u16 magic = le16_to_cpu(es->s_encoding);
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(ext4_sb_encoding_map); i++)
+		if (magic == ext4_sb_encoding_map[i].magic)
+			break;
+
+	if (i >= ARRAY_SIZE(ext4_sb_encoding_map))
+		return -EINVAL;
+
+	*encoding = &ext4_sb_encoding_map[i];
+	*flags = le16_to_cpu(es->s_encoding_flags);
+
+	return 0;
+}
+#endif
+
 static int handle_mount_opt(struct super_block *sb, char *opt, int token,
 			    substring_t *args, unsigned long *journal_devnum,
 			    unsigned int *journal_ioprio, int is_remount)
@@ -2888,6 +2926,15 @@
 		return 0;
 	}
 
+#ifndef CONFIG_UNICODE
+	if (ext4_has_feature_casefold(sb)) {
+		ext4_msg(sb, KERN_ERR,
+			 "Filesystem with casefold feature cannot be "
+			 "mounted without CONFIG_UNICODE");
+		return 0;
+	}
+#endif
+
 	if (readonly)
 		return 1;
 
@@ -3781,6 +3828,43 @@
 			   &journal_ioprio, 0))
 		goto failed_mount;
 
+#ifdef CONFIG_UNICODE
+	if (ext4_has_feature_casefold(sb) && !sbi->s_encoding) {
+		const struct ext4_sb_encodings *encoding_info;
+		struct unicode_map *encoding;
+		__u16 encoding_flags;
+
+		if (ext4_has_feature_encrypt(sb)) {
+			ext4_msg(sb, KERN_ERR,
+				 "Can't mount with encoding and encryption");
+			goto failed_mount;
+		}
+
+		if (ext4_sb_read_encoding(es, &encoding_info,
+					  &encoding_flags)) {
+			ext4_msg(sb, KERN_ERR,
+				 "Encoding requested by superblock is unknown");
+			goto failed_mount;
+		}
+
+		encoding = utf8_load(encoding_info->version);
+		if (IS_ERR(encoding)) {
+			ext4_msg(sb, KERN_ERR,
+				 "can't mount with superblock charset: %s-%s "
+				 "not supported by the kernel. flags: 0x%x.",
+				 encoding_info->name, encoding_info->version,
+				 encoding_flags);
+			goto failed_mount;
+		}
+		ext4_msg(sb, KERN_INFO,"Using encoding defined by superblock: "
+			 "%s-%s with flags 0x%hx", encoding_info->name,
+			 encoding_info->version?:"\b", encoding_flags);
+
+		sbi->s_encoding = encoding;
+		sbi->s_encoding_flags = encoding_flags;
+	}
+#endif
+
 	if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) {
 		printk_once(KERN_WARNING "EXT4-fs: Warning: mounting "
 			    "with data=journal disables delayed "
@@ -4221,6 +4305,9 @@
 #ifdef CONFIG_FS_ENCRYPTION
 	sb->s_cop = &ext4_cryptops;
 #endif
+#ifdef CONFIG_FS_VERITY
+	sb->s_vop = &ext4_verityops;
+#endif
 #ifdef CONFIG_QUOTA
 	sb->dq_op = &ext4_quota_operations;
 	if (ext4_has_feature_quota(sb))
@@ -4368,6 +4455,11 @@
 		goto failed_mount_wq;
 	}
 
+	if (ext4_has_feature_verity(sb) && blocksize != PAGE_SIZE) {
+		ext4_msg(sb, KERN_ERR, "Unsupported blocksize for fs-verity");
+		goto failed_mount_wq;
+	}
+
 	if (DUMMY_ENCRYPTION_ENABLED(sbi) && !sb_rdonly(sb) &&
 	    !ext4_has_feature_encrypt(sb)) {
 		ext4_set_feature_encrypt(sb);
@@ -4415,6 +4507,12 @@
 		iput(root);
 		goto failed_mount4;
 	}
+
+#ifdef CONFIG_UNICODE
+	if (sbi->s_encoding)
+		sb->s_d_op = &ext4_dentry_ops;
+#endif
+
 	sb->s_root = d_make_root(root);
 	if (!sb->s_root) {
 		ext4_msg(sb, KERN_ERR, "get root dentry failed");
@@ -4599,6 +4697,11 @@
 failed_mount:
 	if (sbi->s_chksum_driver)
 		crypto_free_shash(sbi->s_chksum_driver);
+
+#ifdef CONFIG_UNICODE
+	utf8_unload(sbi->s_encoding);
+#endif
+
 #ifdef CONFIG_QUOTA
 	for (i = 0; i < EXT4_MAXQUOTAS; i++)
 		kfree(sbi->s_qf_names[i]);
@@ -6052,6 +6155,10 @@
 	if (err)
 		return err;
 
+	err = ext4_init_post_read_processing();
+	if (err)
+		goto out6;
+
 	err = ext4_init_pageio();
 	if (err)
 		goto out5;
@@ -6090,6 +6197,8 @@
 out4:
 	ext4_exit_pageio();
 out5:
+	ext4_exit_post_read_processing();
+out6:
 	ext4_exit_es();
 
 	return err;
@@ -6106,6 +6215,7 @@
 	ext4_exit_sysfs();
 	ext4_exit_system_zone();
 	ext4_exit_pageio();
+	ext4_exit_post_read_processing();
 	ext4_exit_es();
 }
 
diff --git a/fs/ext4/sysfs.c b/fs/ext4/sysfs.c
index 5e4e78f..1eecc3c 100644
--- a/fs/ext4/sysfs.c
+++ b/fs/ext4/sysfs.c
@@ -227,6 +227,12 @@
 #ifdef CONFIG_FS_ENCRYPTION
 EXT4_ATTR_FEATURE(encryption);
 #endif
+#ifdef CONFIG_UNICODE
+EXT4_ATTR_FEATURE(casefold);
+#endif
+#ifdef CONFIG_FS_VERITY
+EXT4_ATTR_FEATURE(verity);
+#endif
 EXT4_ATTR_FEATURE(metadata_csum_seed);
 
 static struct attribute *ext4_feat_attrs[] = {
@@ -236,6 +242,12 @@
 #ifdef CONFIG_FS_ENCRYPTION
 	ATTR_LIST(encryption),
 #endif
+#ifdef CONFIG_UNICODE
+	ATTR_LIST(casefold),
+#endif
+#ifdef CONFIG_FS_VERITY
+	ATTR_LIST(verity),
+#endif
 	ATTR_LIST(metadata_csum_seed),
 	NULL,
 };
diff --git a/fs/ext4/verity.c b/fs/ext4/verity.c
new file mode 100644
index 0000000..d0d8a97
--- /dev/null
+++ b/fs/ext4/verity.c
@@ -0,0 +1,367 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * fs/ext4/verity.c: fs-verity support for ext4
+ *
+ * Copyright 2019 Google LLC
+ */
+
+/*
+ * Implementation of fsverity_operations for ext4.
+ *
+ * ext4 stores the verity metadata (Merkle tree and fsverity_descriptor) past
+ * the end of the file, starting at the first 64K boundary beyond i_size.  This
+ * approach works because (a) verity files are readonly, and (b) pages fully
+ * beyond i_size aren't visible to userspace but can be read/written internally
+ * by ext4 with only some relatively small changes to ext4.  This approach
+ * avoids having to depend on the EA_INODE feature and on rearchitecturing
+ * ext4's xattr support to support paging multi-gigabyte xattrs into memory, and
+ * to support encrypting xattrs.  Note that the verity metadata *must* be
+ * encrypted when the file is, since it contains hashes of the plaintext data.
+ *
+ * Using a 64K boundary rather than a 4K one keeps things ready for
+ * architectures with 64K pages, and it doesn't necessarily waste space on-disk
+ * since there can be a hole between i_size and the start of the Merkle tree.
+ */
+
+#include <linux/quotaops.h>
+
+#include "ext4.h"
+#include "ext4_extents.h"
+#include "ext4_jbd2.h"
+
+static inline loff_t ext4_verity_metadata_pos(const struct inode *inode)
+{
+	return round_up(inode->i_size, 65536);
+}
+
+/*
+ * Read some verity metadata from the inode.  __vfs_read() can't be used because
+ * we need to read beyond i_size.
+ */
+static int pagecache_read(struct inode *inode, void *buf, size_t count,
+			  loff_t pos)
+{
+	while (count) {
+		size_t n = min_t(size_t, count,
+				 PAGE_SIZE - offset_in_page(pos));
+		struct page *page;
+		void *addr;
+
+		page = read_mapping_page(inode->i_mapping, pos >> PAGE_SHIFT,
+					 NULL);
+		if (IS_ERR(page))
+			return PTR_ERR(page);
+
+		addr = kmap_atomic(page);
+		memcpy(buf, addr + offset_in_page(pos), n);
+		kunmap_atomic(addr);
+
+		put_page(page);
+
+		buf += n;
+		pos += n;
+		count -= n;
+	}
+	return 0;
+}
+
+/*
+ * Write some verity metadata to the inode for FS_IOC_ENABLE_VERITY.
+ * kernel_write() can't be used because the file descriptor is readonly.
+ */
+static int pagecache_write(struct inode *inode, const void *buf, size_t count,
+			   loff_t pos)
+{
+	if (pos + count > inode->i_sb->s_maxbytes)
+		return -EFBIG;
+
+	while (count) {
+		size_t n = min_t(size_t, count,
+				 PAGE_SIZE - offset_in_page(pos));
+		struct page *page;
+		void *fsdata;
+		void *addr;
+		int res;
+
+		res = pagecache_write_begin(NULL, inode->i_mapping, pos, n, 0,
+					    &page, &fsdata);
+		if (res)
+			return res;
+
+		addr = kmap_atomic(page);
+		memcpy(addr + offset_in_page(pos), buf, n);
+		kunmap_atomic(addr);
+
+		res = pagecache_write_end(NULL, inode->i_mapping, pos, n, n,
+					  page, fsdata);
+		if (res < 0)
+			return res;
+		if (res != n)
+			return -EIO;
+
+		buf += n;
+		pos += n;
+		count -= n;
+	}
+	return 0;
+}
+
+static int ext4_begin_enable_verity(struct file *filp)
+{
+	struct inode *inode = file_inode(filp);
+	const int credits = 2; /* superblock and inode for ext4_orphan_add() */
+	handle_t *handle;
+	int err;
+
+	if (ext4_verity_in_progress(inode))
+		return -EBUSY;
+
+	/*
+	 * Since the file was opened readonly, we have to initialize the jbd
+	 * inode and quotas here and not rely on ->open() doing it.  This must
+	 * be done before evicting the inline data.
+	 */
+
+	err = ext4_inode_attach_jinode(inode);
+	if (err)
+		return err;
+
+	err = dquot_initialize(inode);
+	if (err)
+		return err;
+
+	err = ext4_convert_inline_data(inode);
+	if (err)
+		return err;
+
+	if (!ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) {
+		ext4_warning_inode(inode,
+				   "verity is only allowed on extent-based files");
+		return -EOPNOTSUPP;
+	}
+
+	/*
+	 * ext4 uses the last allocated block to find the verity descriptor, so
+	 * we must remove any other blocks past EOF which might confuse things.
+	 */
+	err = ext4_truncate(inode);
+	if (err)
+		return err;
+
+	handle = ext4_journal_start(inode, EXT4_HT_INODE, credits);
+	if (IS_ERR(handle))
+		return PTR_ERR(handle);
+
+	err = ext4_orphan_add(handle, inode);
+	if (err == 0)
+		ext4_set_inode_state(inode, EXT4_STATE_VERITY_IN_PROGRESS);
+
+	ext4_journal_stop(handle);
+	return err;
+}
+
+/*
+ * ext4 stores the verity descriptor beginning on the next filesystem block
+ * boundary after the Merkle tree.  Then, the descriptor size is stored in the
+ * last 4 bytes of the last allocated filesystem block --- which is either the
+ * block in which the descriptor ends, or the next block after that if there
+ * weren't at least 4 bytes remaining.
+ *
+ * We can't simply store the descriptor in an xattr because it *must* be
+ * encrypted when ext4 encryption is used, but ext4 encryption doesn't encrypt
+ * xattrs.  Also, if the descriptor includes a large signature blob it may be
+ * too large to store in an xattr without the EA_INODE feature.
+ */
+static int ext4_write_verity_descriptor(struct inode *inode, const void *desc,
+					size_t desc_size, u64 merkle_tree_size)
+{
+	const u64 desc_pos = round_up(ext4_verity_metadata_pos(inode) +
+				      merkle_tree_size, i_blocksize(inode));
+	const u64 desc_end = desc_pos + desc_size;
+	const __le32 desc_size_disk = cpu_to_le32(desc_size);
+	const u64 desc_size_pos = round_up(desc_end + sizeof(desc_size_disk),
+					   i_blocksize(inode)) -
+				  sizeof(desc_size_disk);
+	int err;
+
+	err = pagecache_write(inode, desc, desc_size, desc_pos);
+	if (err)
+		return err;
+
+	return pagecache_write(inode, &desc_size_disk, sizeof(desc_size_disk),
+			       desc_size_pos);
+}
+
+static int ext4_end_enable_verity(struct file *filp, const void *desc,
+				  size_t desc_size, u64 merkle_tree_size)
+{
+	struct inode *inode = file_inode(filp);
+	const int credits = 2; /* superblock and inode for ext4_orphan_del() */
+	handle_t *handle;
+	int err = 0;
+	int err2;
+
+	if (desc != NULL) {
+		/* Succeeded; write the verity descriptor. */
+		err = ext4_write_verity_descriptor(inode, desc, desc_size,
+						   merkle_tree_size);
+
+		/* Write all pages before clearing VERITY_IN_PROGRESS. */
+		if (!err)
+			err = filemap_write_and_wait(inode->i_mapping);
+	}
+
+	/* If we failed, truncate anything we wrote past i_size. */
+	if (desc == NULL || err)
+		ext4_truncate(inode);
+
+	/*
+	 * We must always clean up by clearing EXT4_STATE_VERITY_IN_PROGRESS and
+	 * deleting the inode from the orphan list, even if something failed.
+	 * If everything succeeded, we'll also set the verity bit in the same
+	 * transaction.
+	 */
+
+	ext4_clear_inode_state(inode, EXT4_STATE_VERITY_IN_PROGRESS);
+
+	handle = ext4_journal_start(inode, EXT4_HT_INODE, credits);
+	if (IS_ERR(handle)) {
+		ext4_orphan_del(NULL, inode);
+		return PTR_ERR(handle);
+	}
+
+	err2 = ext4_orphan_del(handle, inode);
+	if (err2)
+		goto out_stop;
+
+	if (desc != NULL && !err) {
+		struct ext4_iloc iloc;
+
+		err = ext4_reserve_inode_write(handle, inode, &iloc);
+		if (err)
+			goto out_stop;
+		ext4_set_inode_flag(inode, EXT4_INODE_VERITY);
+		ext4_set_inode_flags(inode);
+		err = ext4_mark_iloc_dirty(handle, inode, &iloc);
+	}
+out_stop:
+	ext4_journal_stop(handle);
+	return err ?: err2;
+}
+
+static int ext4_get_verity_descriptor_location(struct inode *inode,
+					       size_t *desc_size_ret,
+					       u64 *desc_pos_ret)
+{
+	struct ext4_ext_path *path;
+	struct ext4_extent *last_extent;
+	u32 end_lblk;
+	u64 desc_size_pos;
+	__le32 desc_size_disk;
+	u32 desc_size;
+	u64 desc_pos;
+	int err;
+
+	/*
+	 * Descriptor size is in last 4 bytes of last allocated block.
+	 * See ext4_write_verity_descriptor().
+	 */
+
+	if (!ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) {
+		EXT4_ERROR_INODE(inode, "verity file doesn't use extents");
+		return -EFSCORRUPTED;
+	}
+
+	path = ext4_find_extent(inode, EXT_MAX_BLOCKS - 1, NULL, 0);
+	if (IS_ERR(path))
+		return PTR_ERR(path);
+
+	last_extent = path[path->p_depth].p_ext;
+	if (!last_extent) {
+		EXT4_ERROR_INODE(inode, "verity file has no extents");
+		ext4_ext_drop_refs(path);
+		kfree(path);
+		return -EFSCORRUPTED;
+	}
+
+	end_lblk = le32_to_cpu(last_extent->ee_block) +
+		   ext4_ext_get_actual_len(last_extent);
+	desc_size_pos = (u64)end_lblk << inode->i_blkbits;
+	ext4_ext_drop_refs(path);
+	kfree(path);
+
+	if (desc_size_pos < sizeof(desc_size_disk))
+		goto bad;
+	desc_size_pos -= sizeof(desc_size_disk);
+
+	err = pagecache_read(inode, &desc_size_disk, sizeof(desc_size_disk),
+			     desc_size_pos);
+	if (err)
+		return err;
+	desc_size = le32_to_cpu(desc_size_disk);
+
+	/*
+	 * The descriptor is stored just before the desc_size_disk, but starting
+	 * on a filesystem block boundary.
+	 */
+
+	if (desc_size > INT_MAX || desc_size > desc_size_pos)
+		goto bad;
+
+	desc_pos = round_down(desc_size_pos - desc_size, i_blocksize(inode));
+	if (desc_pos < ext4_verity_metadata_pos(inode))
+		goto bad;
+
+	*desc_size_ret = desc_size;
+	*desc_pos_ret = desc_pos;
+	return 0;
+
+bad:
+	EXT4_ERROR_INODE(inode, "verity file corrupted; can't find descriptor");
+	return -EFSCORRUPTED;
+}
+
+static int ext4_get_verity_descriptor(struct inode *inode, void *buf,
+				      size_t buf_size)
+{
+	size_t desc_size = 0;
+	u64 desc_pos = 0;
+	int err;
+
+	err = ext4_get_verity_descriptor_location(inode, &desc_size, &desc_pos);
+	if (err)
+		return err;
+
+	if (buf_size) {
+		if (desc_size > buf_size)
+			return -ERANGE;
+		err = pagecache_read(inode, buf, desc_size, desc_pos);
+		if (err)
+			return err;
+	}
+	return desc_size;
+}
+
+static struct page *ext4_read_merkle_tree_page(struct inode *inode,
+					       pgoff_t index)
+{
+	index += ext4_verity_metadata_pos(inode) >> PAGE_SHIFT;
+
+	return read_mapping_page(inode->i_mapping, index, NULL);
+}
+
+static int ext4_write_merkle_tree_block(struct inode *inode, const void *buf,
+					u64 index, int log_blocksize)
+{
+	loff_t pos = ext4_verity_metadata_pos(inode) + (index << log_blocksize);
+
+	return pagecache_write(inode, buf, 1 << log_blocksize, pos);
+}
+
+const struct fsverity_operations ext4_verityops = {
+	.begin_enable_verity	= ext4_begin_enable_verity,
+	.end_enable_verity	= ext4_end_enable_verity,
+	.get_verity_descriptor	= ext4_get_verity_descriptor,
+	.read_merkle_tree_page	= ext4_read_merkle_tree_page,
+	.write_merkle_tree_block = ext4_write_merkle_tree_block,
+};
diff --git a/fs/f2fs/Kconfig b/fs/f2fs/Kconfig
index 1494326..f3414f2 100644
--- a/fs/f2fs/Kconfig
+++ b/fs/f2fs/Kconfig
@@ -1,6 +1,7 @@
 config F2FS_FS
 	tristate "F2FS filesystem support"
 	depends on BLOCK
+	select NLS
 	select CRYPTO
 	select CRYPTO_CRC32
 	select F2FS_FS_XATTR if FS_ENCRYPTION
@@ -59,7 +60,9 @@
 	  Security Models (LSMs) accepted by AppArmor, SELinux, Smack and TOMOYO
 	  Linux. This option enables an extended attribute handler for file
 	  security labels in the f2fs filesystem, so that it requires enabling
-	  the extended attribute support in advance.
+	  the extended attribute support in advance. In particular you need this
+	  option if you use the setcap command to assign initial process capabi-
+	  lities to executables (the security.* extended attributes).
 
 	  If you are not using a security module, say N.
 
diff --git a/fs/f2fs/Makefile b/fs/f2fs/Makefile
index 776c4b9..2aaecc6 100644
--- a/fs/f2fs/Makefile
+++ b/fs/f2fs/Makefile
@@ -8,3 +8,4 @@
 f2fs-$(CONFIG_F2FS_FS_XATTR) += xattr.o
 f2fs-$(CONFIG_F2FS_FS_POSIX_ACL) += acl.o
 f2fs-$(CONFIG_F2FS_IO_TRACE) += trace.o
+f2fs-$(CONFIG_FS_VERITY) += verity.o
diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
index e1354c3..670da21 100644
--- a/fs/f2fs/checkpoint.c
+++ b/fs/f2fs/checkpoint.c
@@ -146,8 +146,8 @@
 
 	exist = f2fs_test_bit(offset, se->cur_valid_map);
 	if (!exist && type == DATA_GENERIC_ENHANCE) {
-		f2fs_msg(sbi->sb, KERN_ERR, "Inconsistent error "
-			"blkaddr:%u, sit bitmap:%d", blkaddr, exist);
+		f2fs_err(sbi, "Inconsistent error blkaddr:%u, sit bitmap:%d",
+			 blkaddr, exist);
 		set_sbi_flag(sbi, SBI_NEED_FSCK);
 		WARN_ON(1);
 	}
@@ -184,8 +184,8 @@
 	case DATA_GENERIC_ENHANCE_READ:
 		if (unlikely(blkaddr >= MAX_BLKADDR(sbi) ||
 				blkaddr < MAIN_BLKADDR(sbi))) {
-			f2fs_msg(sbi->sb, KERN_WARNING,
-				"access invalid blkaddr:%u", blkaddr);
+			f2fs_warn(sbi, "access invalid blkaddr:%u",
+				  blkaddr);
 			set_sbi_flag(sbi, SBI_NEED_FSCK);
 			WARN_ON(1);
 			return false;
@@ -581,7 +581,7 @@
 
 	if (time_to_inject(sbi, FAULT_ORPHAN)) {
 		spin_unlock(&im->ino_lock);
-		f2fs_show_injection_info(FAULT_ORPHAN);
+		f2fs_show_injection_info(sbi, FAULT_ORPHAN);
 		return -ENOSPC;
 	}
 
@@ -657,9 +657,8 @@
 
 err_out:
 	set_sbi_flag(sbi, SBI_NEED_FSCK);
-	f2fs_msg(sbi->sb, KERN_WARNING,
-			"%s: orphan failed (ino=%x), run fsck to fix.",
-			__func__, ino);
+	f2fs_warn(sbi, "%s: orphan failed (ino=%x), run fsck to fix.",
+		  __func__, ino);
 	return err;
 }
 
@@ -676,13 +675,12 @@
 		return 0;
 
 	if (bdev_read_only(sbi->sb->s_bdev)) {
-		f2fs_msg(sbi->sb, KERN_INFO, "write access "
-			"unavailable, skipping orphan cleanup");
+		f2fs_info(sbi, "write access unavailable, skipping orphan cleanup");
 		return 0;
 	}
 
 	if (s_flags & SB_RDONLY) {
-		f2fs_msg(sbi->sb, KERN_INFO, "orphan cleanup on readonly fs");
+		f2fs_info(sbi, "orphan cleanup on readonly fs");
 		sbi->sb->s_flags &= ~SB_RDONLY;
 	}
 
@@ -827,26 +825,14 @@
 	if (crc_offset < CP_MIN_CHKSUM_OFFSET ||
 			crc_offset > CP_CHKSUM_OFFSET) {
 		f2fs_put_page(*cp_page, 1);
-		f2fs_msg(sbi->sb, KERN_WARNING,
-			"invalid crc_offset: %zu", crc_offset);
+		f2fs_warn(sbi, "invalid crc_offset: %zu", crc_offset);
 		return -EINVAL;
 	}
 
-	if (__is_set_ckpt_flags(*cp_block, CP_LARGE_NAT_BITMAP_FLAG)) {
-		if (crc_offset != CP_MIN_CHKSUM_OFFSET) {
-			f2fs_put_page(*cp_page, 1);
-			f2fs_msg(sbi->sb, KERN_WARNING,
-				"layout of large_nat_bitmap is deprecated, "
-				"run fsck to repair, chksum_offset: %zu",
-				crc_offset);
-			return -EINVAL;
-		}
-	}
-
 	crc = f2fs_checkpoint_chksum(sbi, *cp_block);
 	if (crc != cur_cp_crc(*cp_block)) {
 		f2fs_put_page(*cp_page, 1);
-		f2fs_msg(sbi->sb, KERN_WARNING, "invalid crc value");
+		f2fs_warn(sbi, "invalid crc value");
 		return -EINVAL;
 	}
 
@@ -869,9 +855,8 @@
 
 	if (le32_to_cpu(cp_block->cp_pack_total_block_count) >
 					sbi->blocks_per_seg) {
-		f2fs_msg(sbi->sb, KERN_WARNING,
-			"invalid cp_pack_total_block_count:%u",
-			le32_to_cpu(cp_block->cp_pack_total_block_count));
+		f2fs_warn(sbi, "invalid cp_pack_total_block_count:%u",
+			  le32_to_cpu(cp_block->cp_pack_total_block_count));
 		goto invalid_cp;
 	}
 	pre_version = *version;
@@ -1148,17 +1133,24 @@
 
 static bool __need_flush_quota(struct f2fs_sb_info *sbi)
 {
+	bool ret = false;
+
 	if (!is_journalled_quota(sbi))
 		return false;
-	if (is_sbi_flag_set(sbi, SBI_QUOTA_SKIP_FLUSH))
-		return false;
-	if (is_sbi_flag_set(sbi, SBI_QUOTA_NEED_REPAIR))
-		return false;
-	if (is_sbi_flag_set(sbi, SBI_QUOTA_NEED_FLUSH))
-		return true;
-	if (get_pages(sbi, F2FS_DIRTY_QDATA))
-		return true;
-	return false;
+
+	down_write(&sbi->quota_sem);
+	if (is_sbi_flag_set(sbi, SBI_QUOTA_SKIP_FLUSH)) {
+		ret = false;
+	} else if (is_sbi_flag_set(sbi, SBI_QUOTA_NEED_REPAIR)) {
+		ret = false;
+	} else if (is_sbi_flag_set(sbi, SBI_QUOTA_NEED_FLUSH)) {
+		clear_sbi_flag(sbi, SBI_QUOTA_NEED_FLUSH);
+		ret = true;
+	} else if (get_pages(sbi, F2FS_DIRTY_QDATA)) {
+		ret = true;
+	}
+	up_write(&sbi->quota_sem);
+	return ret;
 }
 
 /*
@@ -1177,26 +1169,22 @@
 	blk_start_plug(&plug);
 
 retry_flush_quotas:
+	f2fs_lock_all(sbi);
 	if (__need_flush_quota(sbi)) {
 		int locked;
 
 		if (++cnt > DEFAULT_RETRY_QUOTA_FLUSH_COUNT) {
 			set_sbi_flag(sbi, SBI_QUOTA_SKIP_FLUSH);
-			f2fs_lock_all(sbi);
+			set_sbi_flag(sbi, SBI_QUOTA_NEED_FLUSH);
 			goto retry_flush_dents;
 		}
-		clear_sbi_flag(sbi, SBI_QUOTA_NEED_FLUSH);
+		f2fs_unlock_all(sbi);
 
 		/* only failed during mount/umount/freeze/quotactl */
 		locked = down_read_trylock(&sbi->sb->s_umount);
 		f2fs_quota_sync(sbi->sb, -1);
 		if (locked)
 			up_read(&sbi->sb->s_umount);
-	}
-
-	f2fs_lock_all(sbi);
-	if (__need_flush_quota(sbi)) {
-		f2fs_unlock_all(sbi);
 		cond_resched();
 		goto retry_flush_quotas;
 	}
@@ -1218,12 +1206,6 @@
 	 */
 	down_write(&sbi->node_change);
 
-	if (__need_flush_quota(sbi)) {
-		up_write(&sbi->node_change);
-		f2fs_unlock_all(sbi);
-		goto retry_flush_quotas;
-	}
-
 	if (get_pages(sbi, F2FS_DIRTY_IMETA)) {
 		up_write(&sbi->node_change);
 		f2fs_unlock_all(sbi);
@@ -1319,7 +1301,8 @@
 	else
 		__clear_ckpt_flags(ckpt, CP_ORPHAN_PRESENT_FLAG);
 
-	if (is_sbi_flag_set(sbi, SBI_NEED_FSCK))
+	if (is_sbi_flag_set(sbi, SBI_NEED_FSCK) ||
+		is_sbi_flag_set(sbi, SBI_IS_RESIZEFS))
 		__set_ckpt_flags(ckpt, CP_FSCK_FLAG);
 
 	if (is_sbi_flag_set(sbi, SBI_CP_DISABLED))
@@ -1579,8 +1562,7 @@
 	if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED))) {
 		if (cpc->reason != CP_PAUSE)
 			return 0;
-		f2fs_msg(sbi->sb, KERN_WARNING,
-				"Start checkpoint disabled!");
+		f2fs_warn(sbi, "Start checkpoint disabled!");
 	}
 	mutex_lock(&sbi->cp_mutex);
 
@@ -1646,8 +1628,7 @@
 	stat_inc_cp_count(sbi->stat_info);
 
 	if (cpc->reason & CP_RECOVERY)
-		f2fs_msg(sbi->sb, KERN_NOTICE,
-			"checkpoint: version = %llx", ckpt_ver);
+		f2fs_notice(sbi, "checkpoint: version = %llx", ckpt_ver);
 
 	/* do checkpoint periodically */
 	f2fs_update_time(sbi, CP_TIME);
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 0ca5f1f..d2c0075 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -14,6 +14,7 @@
 #include <linux/pagevec.h>
 #include <linux/blkdev.h>
 #include <linux/bio.h>
+#include <linux/swap.h>
 #include <linux/prefetch.h>
 #include <linux/uio.h>
 #include <linux/cleancache.h>
@@ -29,6 +30,7 @@
 #define NUM_PREALLOC_POST_READ_CTXS	128
 
 static struct kmem_cache *bio_post_read_ctx_cache;
+static struct kmem_cache *bio_entry_slab;
 static mempool_t *bio_post_read_ctx_pool;
 
 static bool __is_cp_guaranteed(struct page *page)
@@ -55,7 +57,7 @@
 
 static enum count_type __read_io_type(struct page *page)
 {
-	struct address_space *mapping = page->mapping;
+	struct address_space *mapping = page_file_mapping(page);
 
 	if (mapping) {
 		struct inode *inode = mapping->host;
@@ -74,6 +76,7 @@
 enum bio_post_read_step {
 	STEP_INITIAL = 0,
 	STEP_DECRYPT,
+	STEP_VERITY,
 };
 
 struct bio_post_read_ctx {
@@ -120,8 +123,23 @@
 	bio_post_read_processing(ctx);
 }
 
+static void verity_work(struct work_struct *work)
+{
+	struct bio_post_read_ctx *ctx =
+		container_of(work, struct bio_post_read_ctx, work);
+
+	fsverity_verify_bio(ctx->bio);
+
+	bio_post_read_processing(ctx);
+}
+
 static void bio_post_read_processing(struct bio_post_read_ctx *ctx)
 {
+	/*
+	 * We use different work queues for decryption and for verity because
+	 * verity may require reading metadata pages that need decryption, and
+	 * we shouldn't recurse to the same workqueue.
+	 */
 	switch (++ctx->cur_step) {
 	case STEP_DECRYPT:
 		if (ctx->enabled_steps & (1 << STEP_DECRYPT)) {
@@ -131,6 +149,14 @@
 		}
 		ctx->cur_step++;
 		/* fall-through */
+	case STEP_VERITY:
+		if (ctx->enabled_steps & (1 << STEP_VERITY)) {
+			INIT_WORK(&ctx->work, verity_work);
+			fsverity_enqueue_verify_work(&ctx->work);
+			return;
+		}
+		ctx->cur_step++;
+		/* fall-through */
 	default:
 		__read_end_io(ctx->bio);
 	}
@@ -144,10 +170,10 @@
 static void f2fs_read_end_io(struct bio *bio)
 {
 	struct page *first_page = bio->bi_io_vec[0].bv_page;
+	struct f2fs_sb_info *sbi = F2FS_P_SB(first_page);
 
-	if (time_to_inject(F2FS_P_SB(bio_first_page_all(bio)),
-						FAULT_READ_IO)) {
-		f2fs_show_injection_info(FAULT_READ_IO);
+	if (time_to_inject(sbi, FAULT_READ_IO)) {
+		f2fs_show_injection_info(sbi, FAULT_READ_IO);
 		bio->bi_status = BLK_STS_IOERR;
 	}
 
@@ -176,7 +202,7 @@
 	int i;
 
 	if (time_to_inject(sbi, FAULT_WRITE_IO)) {
-		f2fs_show_injection_info(FAULT_WRITE_IO);
+		f2fs_show_injection_info(sbi, FAULT_WRITE_IO);
 		bio->bi_status = BLK_STS_IOERR;
 	}
 
@@ -195,7 +221,7 @@
 			continue;
 		}
 
-		fscrypt_pullback_bio_page(&page, true);
+		fscrypt_finalize_bounce_page(&page);
 
 		if (unlikely(bio->bi_status)) {
 			mapping_set_error(page->mapping, -EIO);
@@ -268,26 +294,25 @@
 /*
  * Low-level block read/write IO operations.
  */
-static struct bio *__bio_alloc(struct f2fs_sb_info *sbi, block_t blk_addr,
-				struct writeback_control *wbc,
-				int npages, bool is_read,
-				enum page_type type, enum temp_type temp)
+static struct bio *__bio_alloc(struct f2fs_io_info *fio, int npages)
 {
+	struct f2fs_sb_info *sbi = fio->sbi;
 	struct bio *bio;
 
 	bio = f2fs_bio_alloc(sbi, npages, true);
 
-	f2fs_target_device(sbi, blk_addr, bio);
-	if (is_read) {
+	f2fs_target_device(sbi, fio->new_blkaddr, bio);
+	if (is_read_io(fio->op)) {
 		bio->bi_end_io = f2fs_read_end_io;
 		bio->bi_private = NULL;
 	} else {
 		bio->bi_end_io = f2fs_write_end_io;
 		bio->bi_private = sbi;
-		bio->bi_write_hint = f2fs_io_type_to_rw_hint(sbi, type, temp);
+		bio->bi_write_hint = f2fs_io_type_to_rw_hint(sbi,
+						fio->type, fio->temp);
 	}
-	if (wbc)
-		wbc_init_bio(wbc, bio);
+	if (fio->io_wbc)
+		wbc_init_bio(fio->io_wbc, bio);
 
 	return bio;
 }
@@ -304,6 +329,9 @@
 		if (test_opt(sbi, LFS) && current->plug)
 			blk_finish_plug(current->plug);
 
+		if (F2FS_IO_ALIGNED(sbi))
+			goto submit_io;
+
 		start = bio->bi_iter.bi_size >> F2FS_BLKSIZE_BITS;
 		start %= F2FS_IO_SIZE(sbi);
 
@@ -383,25 +411,24 @@
 	io->bio = NULL;
 }
 
-static bool __has_merged_page(struct f2fs_bio_info *io, struct inode *inode,
+static bool __has_merged_page(struct bio *bio, struct inode *inode,
 						struct page *page, nid_t ino)
 {
 	struct bio_vec *bvec;
 	struct page *target;
 	int i;
 
-	if (!io->bio)
+	if (!bio)
 		return false;
 
 	if (!inode && !page && !ino)
 		return true;
 
-	bio_for_each_segment_all(bvec, io->bio, i) {
+	bio_for_each_segment_all(bvec, bio, i) {
 
-		if (bvec->bv_page->mapping)
-			target = bvec->bv_page;
-		else
-			target = fscrypt_control_page(bvec->bv_page);
+		target = bvec->bv_page;
+		if (fscrypt_is_bounce_page(target))
+			target = fscrypt_pagecache_page(target);
 
 		if (inode && inode == target->mapping->host)
 			return true;
@@ -447,7 +474,7 @@
 			struct f2fs_bio_info *io = sbi->write_io[btype] + temp;
 
 			down_read(&io->io_rwsem);
-			ret = __has_merged_page(io, inode, page, ino);
+			ret = __has_merged_page(io->bio, inode, page, ino);
 			up_read(&io->io_rwsem);
 		}
 		if (ret)
@@ -498,8 +525,7 @@
 	f2fs_trace_ios(fio, 0);
 
 	/* Allocate a new bio */
-	bio = __bio_alloc(fio->sbi, fio->new_blkaddr, fio->io_wbc,
-				1, is_read_io(fio->op), fio->type, fio->temp);
+	bio = __bio_alloc(fio, 1);
 
 	if (f2fs_may_encrypt_bio(inode, fio))
 		fscrypt_set_ice_dun(inode, bio, PG_DUN(inode, fio->page));
@@ -522,6 +548,220 @@
 	return 0;
 }
 
+static bool page_is_mergeable(struct f2fs_sb_info *sbi, struct bio *bio,
+				block_t last_blkaddr, block_t cur_blkaddr)
+{
+	if (last_blkaddr + 1 != cur_blkaddr)
+		return false;
+	return __same_bdev(sbi, cur_blkaddr, bio);
+}
+
+static bool io_type_is_mergeable(struct f2fs_bio_info *io,
+						struct f2fs_io_info *fio)
+{
+	if (io->fio.op != fio->op)
+		return false;
+	return io->fio.op_flags == fio->op_flags;
+}
+
+static bool io_is_mergeable(struct f2fs_sb_info *sbi, struct bio *bio,
+					struct f2fs_bio_info *io,
+					struct f2fs_io_info *fio,
+					block_t last_blkaddr,
+					block_t cur_blkaddr)
+{
+	if (F2FS_IO_ALIGNED(sbi) && (fio->type == DATA || fio->type == NODE)) {
+		unsigned int filled_blocks =
+				F2FS_BYTES_TO_BLK(bio->bi_iter.bi_size);
+		unsigned int io_size = F2FS_IO_SIZE(sbi);
+		unsigned int left_vecs = bio->bi_max_vecs - bio->bi_vcnt;
+
+		/* IOs in bio is aligned and left space of vectors is not enough */
+		if (!(filled_blocks % io_size) && left_vecs < io_size)
+			return false;
+	}
+	if (!page_is_mergeable(sbi, bio, last_blkaddr, cur_blkaddr))
+		return false;
+	return io_type_is_mergeable(io, fio);
+}
+
+static void add_bio_entry(struct f2fs_sb_info *sbi, struct bio *bio,
+				struct page *page, enum temp_type temp)
+{
+	struct f2fs_bio_info *io = sbi->write_io[DATA] + temp;
+	struct bio_entry *be;
+
+	be = f2fs_kmem_cache_alloc(bio_entry_slab, GFP_NOFS);
+	be->bio = bio;
+	bio_get(bio);
+
+	if (bio_add_page(bio, page, PAGE_SIZE, 0) != PAGE_SIZE)
+		f2fs_bug_on(sbi, 1);
+
+	down_write(&io->bio_list_lock);
+	list_add_tail(&be->list, &io->bio_list);
+	up_write(&io->bio_list_lock);
+}
+
+static void del_bio_entry(struct bio_entry *be)
+{
+	list_del(&be->list);
+	kmem_cache_free(bio_entry_slab, be);
+}
+
+static int add_ipu_page(struct f2fs_sb_info *sbi, struct bio **bio,
+							struct page *page)
+{
+	enum temp_type temp;
+	bool found = false;
+	int ret = -EAGAIN;
+
+	for (temp = HOT; temp < NR_TEMP_TYPE && !found; temp++) {
+		struct f2fs_bio_info *io = sbi->write_io[DATA] + temp;
+		struct list_head *head = &io->bio_list;
+		struct bio_entry *be;
+
+		down_write(&io->bio_list_lock);
+		list_for_each_entry(be, head, list) {
+			if (be->bio != *bio)
+				continue;
+
+			found = true;
+
+			if (bio_add_page(*bio, page, PAGE_SIZE, 0) == PAGE_SIZE) {
+				ret = 0;
+				break;
+			}
+
+			/* bio is full */
+			del_bio_entry(be);
+			__submit_bio(sbi, *bio, DATA);
+			break;
+		}
+		up_write(&io->bio_list_lock);
+	}
+
+	if (ret) {
+		bio_put(*bio);
+		*bio = NULL;
+	}
+
+	return ret;
+}
+
+void f2fs_submit_merged_ipu_write(struct f2fs_sb_info *sbi,
+					struct bio **bio, struct page *page)
+{
+	enum temp_type temp;
+	bool found = false;
+	struct bio *target = bio ? *bio : NULL;
+
+	for (temp = HOT; temp < NR_TEMP_TYPE && !found; temp++) {
+		struct f2fs_bio_info *io = sbi->write_io[DATA] + temp;
+		struct list_head *head = &io->bio_list;
+		struct bio_entry *be;
+
+		if (list_empty(head))
+			continue;
+
+		down_read(&io->bio_list_lock);
+		list_for_each_entry(be, head, list) {
+			if (target)
+				found = (target == be->bio);
+			else
+				found = __has_merged_page(be->bio, NULL,
+								page, 0);
+			if (found)
+				break;
+		}
+		up_read(&io->bio_list_lock);
+
+		if (!found)
+			continue;
+
+		found = false;
+
+		down_write(&io->bio_list_lock);
+		list_for_each_entry(be, head, list) {
+			if (target)
+				found = (target == be->bio);
+			else
+				found = __has_merged_page(be->bio, NULL,
+								page, 0);
+			if (found) {
+				target = be->bio;
+				del_bio_entry(be);
+				break;
+			}
+		}
+		up_write(&io->bio_list_lock);
+	}
+
+	if (found)
+		__submit_bio(sbi, target, DATA);
+	if (bio && *bio) {
+		bio_put(*bio);
+		*bio = NULL;
+	}
+}
+
+int f2fs_merge_page_bio(struct f2fs_io_info *fio)
+{
+	struct bio *bio = *fio->bio;
+	struct page *page = fio->encrypted_page ?
+			fio->encrypted_page : fio->page;
+	struct inode *inode;
+	bool bio_encrypted;
+	int bi_crypt_skip;
+	u64 dun;
+
+	if (!f2fs_is_valid_blkaddr(fio->sbi, fio->new_blkaddr,
+			__is_meta_io(fio) ? META_GENERIC : DATA_GENERIC))
+		return -EFSCORRUPTED;
+
+	trace_f2fs_submit_page_bio(page, fio);
+	f2fs_trace_ios(fio, 0);
+
+	inode = fio->page->mapping->host;
+	dun = PG_DUN(inode, fio->page);
+	bi_crypt_skip = fio->encrypted_page ? 1 : 0;
+	bio_encrypted = f2fs_may_encrypt_bio(inode, fio);
+	fio->op_flags |= fio->encrypted_page ? REQ_NOENCRYPT : 0;
+
+	if (bio && !page_is_mergeable(fio->sbi, bio, *fio->last_block,
+						fio->new_blkaddr))
+		f2fs_submit_merged_ipu_write(fio->sbi, &bio, NULL);
+
+	/* ICE support */
+	if (bio && !fscrypt_mergeable_bio(bio, dun,
+				bio_encrypted, bi_crypt_skip))
+		f2fs_submit_merged_ipu_write(fio->sbi, &bio, NULL);
+alloc_new:
+	if (!bio) {
+		bio = __bio_alloc(fio, BIO_MAX_PAGES);
+		bio_set_op_attrs(bio, fio->op, fio->op_flags);
+
+		if (bio_encrypted)
+			fscrypt_set_ice_dun(inode, bio, dun);
+		fscrypt_set_ice_skip(bio, bi_crypt_skip);
+
+		add_bio_entry(fio->sbi, bio, page, fio->temp);
+	} else {
+		if (add_ipu_page(fio->sbi, &bio, page))
+			goto alloc_new;
+	}
+
+	if (fio->io_wbc)
+		wbc_account_io(fio->io_wbc, page, PAGE_SIZE);
+
+	inc_page_count(fio->sbi, WB_DATA_TYPE(page));
+
+	*fio->last_block = fio->new_blkaddr;
+	*fio->bio = bio;
+
+	return 0;
+}
+
 void f2fs_submit_page_write(struct f2fs_io_info *fio)
 {
 	struct f2fs_sb_info *sbi = fio->sbi;
@@ -563,9 +803,8 @@
 
 	inc_page_count(sbi, WB_DATA_TYPE(bio_page));
 
-	if (io->bio && (io->last_block_in_bio != fio->new_blkaddr - 1 ||
-	    (io->fio.op != fio->op || io->fio.op_flags != fio->op_flags) ||
-			!__same_bdev(sbi, fio->new_blkaddr, io->bio)))
+	if (io->bio && !io_is_mergeable(sbi, io->bio, io, fio,
+			io->last_block_in_bio, fio->new_blkaddr))
 		__submit_merged_bio(io);
 
 	/* ICE support */
@@ -574,18 +813,19 @@
 
 alloc_new:
 	if (io->bio == NULL) {
-		if ((fio->type == DATA || fio->type == NODE) &&
+		if (F2FS_IO_ALIGNED(sbi) &&
+				(fio->type == DATA || fio->type == NODE) &&
 				fio->new_blkaddr & F2FS_IO_SIZE_MASK(sbi)) {
 			dec_page_count(sbi, WB_DATA_TYPE(bio_page));
 			fio->retry = true;
 			goto skip;
 		}
-		io->bio = __bio_alloc(sbi, fio->new_blkaddr, fio->io_wbc,
-						BIO_MAX_PAGES, false,
-						fio->type, fio->temp);
+		io->bio = __bio_alloc(fio, BIO_MAX_PAGES);
+
 		if (bio_encrypted)
 			fscrypt_set_ice_dun(inode, io->bio, dun);
 		fscrypt_set_ice_skip(io->bio, bi_crypt_skip);
+
 		io->fio = *fio;
 	}
 
@@ -606,13 +846,20 @@
 		goto next;
 out:
 	if (is_sbi_flag_set(sbi, SBI_IS_SHUTDOWN) ||
-				f2fs_is_checkpoint_ready(sbi))
+				!f2fs_is_checkpoint_ready(sbi))
 		__submit_merged_bio(io);
 	up_write(&io->io_rwsem);
 }
 
+static inline bool f2fs_need_verity(const struct inode *inode, pgoff_t idx)
+{
+	return fsverity_active(inode) &&
+	       idx < DIV_ROUND_UP(inode->i_size, PAGE_SIZE);
+}
+
 static struct bio *f2fs_grab_read_bio(struct inode *inode, block_t blkaddr,
-					unsigned nr_pages, unsigned op_flag)
+				      unsigned nr_pages, unsigned op_flag,
+				      pgoff_t first_idx)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	struct bio *bio;
@@ -630,6 +877,10 @@
 	if (f2fs_encrypted_file(inode) &&
 		!fscrypt_using_hardware_encryption(inode))
 		post_read_steps |= 1 << STEP_DECRYPT;
+
+	if (f2fs_need_verity(inode, first_idx))
+		post_read_steps |= 1 << STEP_VERITY;
+
 	if (post_read_steps) {
 		ctx = mempool_alloc(bio_post_read_ctx_pool, GFP_NOFS);
 		if (!ctx) {
@@ -651,7 +902,7 @@
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	struct bio *bio;
 
-	bio = f2fs_grab_read_bio(inode, blkaddr, 1, 0);
+	bio = f2fs_grab_read_bio(inode, blkaddr, 1, 0, page->index);
 	if (IS_ERR(bio))
 		return PTR_ERR(bio);
 
@@ -797,7 +1048,7 @@
 		dn.data_blkaddr = ei.blk + index - ei.fofs;
 		if (!f2fs_is_valid_blkaddr(F2FS_I_SB(inode), dn.data_blkaddr,
 						DATA_GENERIC_ENHANCE_READ)) {
-			err = -EFAULT;
+			err = -EFSCORRUPTED;
 			goto put_err;
 		}
 		goto got_it;
@@ -817,7 +1068,7 @@
 			!f2fs_is_valid_blkaddr(F2FS_I_SB(inode),
 						dn.data_blkaddr,
 						DATA_GENERIC_ENHANCE)) {
-		err = -EFAULT;
+		err = -EFSCORRUPTED;
 		goto put_err;
 	}
 got_it:
@@ -995,7 +1246,7 @@
 	if (GET_SEGNO(sbi, old_blkaddr) != NULL_SEGNO)
 		invalidate_mapping_pages(META_MAPPING(sbi),
 					old_blkaddr, old_blkaddr);
-	f2fs_set_data_blkaddr(dn);
+	f2fs_update_data_blkaddr(dn, dn->data_blkaddr);
 
 	/*
 	 * i_size will be updated by direct_IO. Otherwise, we'll get stale
@@ -1172,10 +1423,10 @@
 		if (test_opt(sbi, LFS) && flag == F2FS_GET_BLOCK_DIO &&
 							map->m_may_create) {
 			err = __allocate_data_block(&dn, map->m_seg_type);
-			if (!err) {
-				blkaddr = dn.data_blkaddr;
-				set_inode_flag(inode, FI_APPEND_WRITE);
-			}
+			if (err)
+				goto sync_out;
+			blkaddr = dn.data_blkaddr;
+			set_inode_flag(inode, FI_APPEND_WRITE);
 		}
 	} else {
 		if (create) {
@@ -1380,7 +1631,7 @@
 	return __get_data_block(inode, iblock, bh_result, create,
 				F2FS_GET_BLOCK_DIO, NULL,
 				f2fs_rw_hint_to_seg_type(inode->i_write_hint),
-				true);
+				IS_SWAPFILE(inode) ? false : true);
 }
 
 static int get_data_block_dio(struct inode *inode, sector_t iblock,
@@ -1511,7 +1762,7 @@
 		goto out;
 	}
 
-	if (f2fs_has_inline_data(inode)) {
+	if (f2fs_has_inline_data(inode) || f2fs_has_inline_dentry(inode)) {
 		ret = f2fs_inline_data_fiemap(inode, fieinfo, start, len);
 		if (ret != -EAGAIN)
 			goto out;
@@ -1577,6 +1828,15 @@
 	return ret;
 }
 
+static inline loff_t f2fs_readpage_limit(struct inode *inode)
+{
+	if (IS_ENABLED(CONFIG_FS_VERITY) &&
+	    (IS_VERITY(inode) || f2fs_verity_in_progress(inode)))
+		return inode->i_sb->s_maxbytes;
+
+	return i_size_read(inode);
+}
+
 static int f2fs_read_single_page(struct inode *inode, struct page *page,
 					unsigned nr_pages,
 					struct f2fs_map_blocks *map,
@@ -1595,9 +1855,9 @@
 	u64 dun;
 	int ret = 0;
 
-	block_in_file = (sector_t)page->index;
+	block_in_file = (sector_t)page_index(page);
 	last_block = block_in_file + nr_pages;
-	last_block_in_file = (i_size_read(inode) + blocksize - 1) >>
+	last_block_in_file = (f2fs_readpage_limit(inode) + blocksize - 1) >>
 							blkbits;
 	if (last_block > last_block_in_file)
 		last_block = last_block_in_file;
@@ -1628,19 +1888,25 @@
 		block_nr = map->m_pblk + block_in_file - map->m_lblk;
 		SetPageMappedToDisk(page);
 
-		if (!PageUptodate(page) && !cleancache_get_page(page)) {
+		if (!PageUptodate(page) && (!PageSwapCache(page) &&
+					!cleancache_get_page(page))) {
 			SetPageUptodate(page);
 			goto confused;
 		}
 
 		if (!f2fs_is_valid_blkaddr(F2FS_I_SB(inode), block_nr,
 						DATA_GENERIC_ENHANCE_READ)) {
-			ret = -EFAULT;
+			ret = -EFSCORRUPTED;
 			goto out;
 		}
 	} else {
 zero_out:
 		zero_user_segment(page, 0, PAGE_SIZE);
+		if (f2fs_need_verity(inode, page->index) &&
+		    !fsverity_verify_page(page)) {
+			ret = -EIO;
+			goto out;
+		}
 		if (!PageUptodate(page))
 			SetPageUptodate(page);
 		unlock_page(page);
@@ -1651,8 +1917,8 @@
 	 * This page will go to BIO.  Do we need to send this
 	 * BIO off first?
 	 */
-	if (bio && (*last_block_in_bio != block_nr - 1 ||
-		!__same_bdev(F2FS_I_SB(inode), block_nr, bio))) {
+	if (bio && !page_is_mergeable(F2FS_I_SB(inode), bio,
+				*last_block_in_bio, block_nr)) {
 submit_and_realloc:
 		__f2fs_submit_read_bio(F2FS_I_SB(inode), bio, DATA);
 		bio = NULL;
@@ -1667,7 +1933,7 @@
 
 	if (bio == NULL) {
 		bio = f2fs_grab_read_bio(inode, block_nr, nr_pages,
-				is_readahead ? REQ_RAHEAD : 0);
+				is_readahead ? REQ_RAHEAD : 0, page->index);
 		if (IS_ERR(bio)) {
 			ret = PTR_ERR(bio);
 			bio = NULL;
@@ -1736,7 +2002,7 @@
 			prefetchw(&page->flags);
 			list_del(&page->lru);
 			if (add_to_page_cache_lru(page, mapping,
-						  page->index,
+						  page_index(page),
 						  readahead_gfp_mask(mapping)))
 				goto next_page;
 		}
@@ -1760,7 +2026,7 @@
 
 static int f2fs_read_data_page(struct file *file, struct page *page)
 {
-	struct inode *inode = page->mapping->host;
+	struct inode *inode = page_file_mapping(page)->host;
 	int ret = -EAGAIN;
 
 	trace_f2fs_readpage(page, DATA);
@@ -1769,7 +2035,8 @@
 	if (f2fs_has_inline_data(inode))
 		ret = f2fs_read_inline_data(inode, page);
 	if (ret == -EAGAIN)
-		ret = f2fs_mpage_readpages(page->mapping, NULL, page, 1, false);
+		ret = f2fs_mpage_readpages(page_file_mapping(page),
+						NULL, page, 1, false);
 	return ret;
 }
 
@@ -1805,8 +2072,9 @@
 	if (fscrypt_using_hardware_encryption(inode))
 		return 0;
 
-	fio->encrypted_page = fscrypt_encrypt_page(inode, fio->page,
-			PAGE_SIZE, 0, fio->page->index, gfp_flags);
+	fio->encrypted_page = fscrypt_encrypt_pagecache_blocks(fio->page,
+							       PAGE_SIZE, 0,
+							       gfp_flags);
 	if (IS_ERR(fio->encrypted_page)) {
 		/* flush pending IOs and wait for a while in the ENOMEM case */
 		if (PTR_ERR(fio->encrypted_page) == -ENOMEM) {
@@ -1978,8 +2246,7 @@
 		err = f2fs_inplace_write_data(fio);
 		if (err) {
 			if (f2fs_encrypted_file(inode))
-				fscrypt_pullback_bio_page(&fio->encrypted_page,
-									true);
+				fscrypt_finalize_bounce_page(&fio->encrypted_page);
 			if (PageWriteback(page))
 				end_page_writeback(page);
 		} else {
@@ -2025,6 +2292,8 @@
 }
 
 static int __write_data_page(struct page *page, bool *submitted,
+				struct bio **bio,
+				sector_t *last_block,
 				struct writeback_control *wbc,
 				enum iostat_type io_type)
 {
@@ -2033,7 +2302,7 @@
 	loff_t i_size = i_size_read(inode);
 	const pgoff_t end_index = ((unsigned long long) i_size)
 							>> PAGE_SHIFT;
-	loff_t psize = (page->index + 1) << PAGE_SHIFT;
+	loff_t psize = (loff_t)(page->index + 1) << PAGE_SHIFT;
 	unsigned offset = 0;
 	bool need_balance_fs = false;
 	int err = 0;
@@ -2050,6 +2319,8 @@
 		.need_lock = LOCK_RETRY,
 		.io_type = io_type,
 		.io_wbc = wbc,
+		.bio = bio,
+		.last_block = last_block,
 	};
 
 	trace_f2fs_writepage(page, DATA);
@@ -2069,7 +2340,7 @@
 	if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING)))
 		goto redirty_out;
 
-	if (page->index < end_index)
+	if (page->index < end_index || f2fs_verity_in_progress(inode))
 		goto write;
 
 	/*
@@ -2153,6 +2424,7 @@
 
 	if (unlikely(f2fs_cp_error(sbi))) {
 		f2fs_submit_merged_write(sbi, DATA);
+		f2fs_submit_merged_ipu_write(sbi, bio, NULL);
 		submitted = NULL;
 	}
 
@@ -2178,7 +2450,7 @@
 static int f2fs_write_data_page(struct page *page,
 					struct writeback_control *wbc)
 {
-	return __write_data_page(page, NULL, wbc, FS_DATA_IO);
+	return __write_data_page(page, NULL, NULL, NULL, wbc, FS_DATA_IO);
 }
 
 /*
@@ -2194,6 +2466,8 @@
 	int done = 0;
 	struct pagevec pvec;
 	struct f2fs_sb_info *sbi = F2FS_M_SB(mapping);
+	struct bio *bio = NULL;
+	sector_t last_block;
 	int nr_pages;
 	pgoff_t uninitialized_var(writeback_index);
 	pgoff_t index;
@@ -2280,7 +2554,8 @@
 			if (!clear_page_dirty_for_io(page))
 				goto continue_unlock;
 
-			ret = __write_data_page(page, &submitted, wbc, io_type);
+			ret = __write_data_page(page, &submitted, &bio,
+					&last_block, wbc, io_type);
 			if (unlikely(ret)) {
 				/*
 				 * keep nr_to_write, since vfs uses this to
@@ -2329,6 +2604,9 @@
 	if (nwritten)
 		f2fs_submit_merged_write_cond(F2FS_M_SB(mapping), mapping->host,
 								NULL, 0, DATA);
+	/* submit cached bio of IPU write */
+	if (bio)
+		f2fs_submit_merged_ipu_write(sbi, &bio, NULL);
 
 	return ret;
 }
@@ -2340,6 +2618,9 @@
 		return false;
 	if (IS_NOQUOTA(inode))
 		return false;
+	/* to avoid deadlock in path of data flush */
+	if (F2FS_I(inode)->cp_task)
+		return false;
 	if (wbc->sync_mode != WB_SYNC_ALL)
 		return true;
 	if (get_dirty_pages(inode) >= SM_I(F2FS_I_SB(inode))->min_seq_blocks)
@@ -2430,7 +2711,8 @@
 	struct inode *inode = mapping->host;
 	loff_t i_size = i_size_read(inode);
 
-	if (to > i_size) {
+	/* In the fs-verity case, f2fs_end_enable_verity() does the truncate */
+	if (to > i_size && !f2fs_verity_in_progress(inode)) {
 		down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
 		down_write(&F2FS_I(inode)->i_mmap_sem);
 
@@ -2461,7 +2743,8 @@
 	 * the block addresses when there is no need to fill the page.
 	 */
 	if (!f2fs_has_inline_data(inode) && len == PAGE_SIZE &&
-			!is_inode_flag_set(inode, FI_NO_PREALLOC))
+	    !is_inode_flag_set(inode, FI_NO_PREALLOC) &&
+	    !f2fs_verity_in_progress(inode))
 		return 0;
 
 	/* f2fs_lock_op avoids race between write CP and convert_inline_page */
@@ -2552,9 +2835,10 @@
 	}
 	trace_f2fs_write_begin(inode, pos, len, flags);
 
-	err = f2fs_is_checkpoint_ready(sbi);
-	if (err)
+	if (!f2fs_is_checkpoint_ready(sbi)) {
+		err = -ENOSPC;
 		goto fail;
+	}
 
 	if ((f2fs_is_atomic_file(inode) &&
 			!f2fs_available_free_memory(sbi, INMEM_PAGES)) ||
@@ -2610,7 +2894,8 @@
 	if (len == PAGE_SIZE || PageUptodate(page))
 		return 0;
 
-	if (!(pos & (PAGE_SIZE - 1)) && (pos + len) >= i_size_read(inode)) {
+	if (!(pos & (PAGE_SIZE - 1)) && (pos + len) >= i_size_read(inode) &&
+	    !f2fs_verity_in_progress(inode)) {
 		zero_user_segment(page, len, PAGE_SIZE);
 		return 0;
 	}
@@ -2621,7 +2906,7 @@
 	} else {
 		if (!f2fs_is_valid_blkaddr(sbi, blkaddr,
 				DATA_GENERIC_ENHANCE_READ)) {
-			err = -EFAULT;
+			err = -EFSCORRUPTED;
 			goto fail;
 		}
 		err = f2fs_submit_page_read(inode, page, blkaddr);
@@ -2674,7 +2959,8 @@
 
 	set_page_dirty(page);
 
-	if (pos + copied > i_size_read(inode))
+	if (pos + copied > i_size_read(inode) &&
+	    !f2fs_verity_in_progress(inode))
 		f2fs_i_size_write(inode, pos + copied);
 unlock_out:
 	f2fs_put_page(page, 1);
@@ -2897,13 +3183,14 @@
 
 static int f2fs_set_data_page_dirty(struct page *page)
 {
-	struct address_space *mapping = page->mapping;
-	struct inode *inode = mapping->host;
+	struct inode *inode = page_file_mapping(page)->host;
 
 	trace_f2fs_set_page_dirty(page, DATA);
 
 	if (!PageUptodate(page))
 		SetPageUptodate(page);
+	if (PageSwapCache(page))
+		return __set_page_dirty_nobuffers(page);
 
 	if (f2fs_is_atomic_file(inode) && !f2fs_is_commit_atomic_write(inode)) {
 		if (!IS_ATOMIC_WRITTEN_PAGE(page)) {
@@ -2995,6 +3282,126 @@
 }
 #endif
 
+#ifdef CONFIG_SWAP
+/* Copied from generic_swapfile_activate() to check any holes */
+static int check_swap_activate(struct file *swap_file, unsigned int max)
+{
+	struct address_space *mapping = swap_file->f_mapping;
+	struct inode *inode = mapping->host;
+	unsigned blocks_per_page;
+	unsigned long page_no;
+	unsigned blkbits;
+	sector_t probe_block;
+	sector_t last_block;
+	sector_t lowest_block = -1;
+	sector_t highest_block = 0;
+
+	blkbits = inode->i_blkbits;
+	blocks_per_page = PAGE_SIZE >> blkbits;
+
+	/*
+	 * Map all the blocks into the extent list.  This code doesn't try
+	 * to be very smart.
+	 */
+	probe_block = 0;
+	page_no = 0;
+	last_block = i_size_read(inode) >> blkbits;
+	while ((probe_block + blocks_per_page) <= last_block && page_no < max) {
+		unsigned block_in_page;
+		sector_t first_block;
+
+		cond_resched();
+
+		first_block = bmap(inode, probe_block);
+		if (first_block == 0)
+			goto bad_bmap;
+
+		/*
+		 * It must be PAGE_SIZE aligned on-disk
+		 */
+		if (first_block & (blocks_per_page - 1)) {
+			probe_block++;
+			goto reprobe;
+		}
+
+		for (block_in_page = 1; block_in_page < blocks_per_page;
+					block_in_page++) {
+			sector_t block;
+
+			block = bmap(inode, probe_block + block_in_page);
+			if (block == 0)
+				goto bad_bmap;
+			if (block != first_block + block_in_page) {
+				/* Discontiguity */
+				probe_block++;
+				goto reprobe;
+			}
+		}
+
+		first_block >>= (PAGE_SHIFT - blkbits);
+		if (page_no) {	/* exclude the header page */
+			if (first_block < lowest_block)
+				lowest_block = first_block;
+			if (first_block > highest_block)
+				highest_block = first_block;
+		}
+
+		page_no++;
+		probe_block += blocks_per_page;
+reprobe:
+		continue;
+	}
+	return 0;
+
+bad_bmap:
+	pr_err("swapon: swapfile has holes\n");
+	return -EINVAL;
+}
+
+static int f2fs_swap_activate(struct swap_info_struct *sis, struct file *file,
+				sector_t *span)
+{
+	struct inode *inode = file_inode(file);
+	int ret;
+
+	if (!S_ISREG(inode->i_mode))
+		return -EINVAL;
+
+	if (f2fs_readonly(F2FS_I_SB(inode)->sb))
+		return -EROFS;
+
+	ret = f2fs_convert_inline_inode(inode);
+	if (ret)
+		return ret;
+
+	ret = check_swap_activate(file, sis->max);
+	if (ret)
+		return ret;
+
+	set_inode_flag(inode, FI_PIN_FILE);
+	f2fs_precache_extents(inode);
+	f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
+	return 0;
+}
+
+static void f2fs_swap_deactivate(struct file *file)
+{
+	struct inode *inode = file_inode(file);
+
+	clear_inode_flag(inode, FI_PIN_FILE);
+}
+#else
+static int f2fs_swap_activate(struct swap_info_struct *sis, struct file *file,
+				sector_t *span)
+{
+	return -EOPNOTSUPP;
+}
+
+static void f2fs_swap_deactivate(struct file *file)
+{
+}
+#endif
+
 const struct address_space_operations f2fs_dblock_aops = {
 	.readpage	= f2fs_read_data_page,
 	.readpages	= f2fs_read_data_pages,
@@ -3007,6 +3414,8 @@
 	.releasepage	= f2fs_release_page,
 	.direct_IO	= f2fs_direct_IO,
 	.bmap		= f2fs_bmap,
+	.swap_activate  = f2fs_swap_activate,
+	.swap_deactivate = f2fs_swap_deactivate,
 #ifdef CONFIG_MIGRATION
 	.migratepage    = f2fs_migrate_page,
 #endif
@@ -3025,7 +3434,9 @@
 
 int __init f2fs_init_post_read_processing(void)
 {
-	bio_post_read_ctx_cache = KMEM_CACHE(bio_post_read_ctx, 0);
+	bio_post_read_ctx_cache =
+		kmem_cache_create("f2fs_bio_post_read_ctx",
+				  sizeof(struct bio_post_read_ctx), 0, 0, NULL);
 	if (!bio_post_read_ctx_cache)
 		goto fail;
 	bio_post_read_ctx_pool =
@@ -3041,8 +3452,22 @@
 	return -ENOMEM;
 }
 
-void __exit f2fs_destroy_post_read_processing(void)
+void f2fs_destroy_post_read_processing(void)
 {
 	mempool_destroy(bio_post_read_ctx_pool);
 	kmem_cache_destroy(bio_post_read_ctx_cache);
 }
+
+int __init f2fs_init_bio_entry_cache(void)
+{
+	bio_entry_slab = f2fs_kmem_cache_create("bio_entry_slab",
+			sizeof(struct bio_entry));
+	if (!bio_entry_slab)
+		return -ENOMEM;
+	return 0;
+}
+
+void __exit f2fs_destroy_bio_entry_cache(void)
+{
+	kmem_cache_destroy(bio_entry_slab);
+}
diff --git a/fs/f2fs/debug.c b/fs/f2fs/debug.c
index 99e9a5c..9b0bedd 100644
--- a/fs/f2fs/debug.c
+++ b/fs/f2fs/debug.c
@@ -27,8 +27,15 @@
 static void update_general_status(struct f2fs_sb_info *sbi)
 {
 	struct f2fs_stat_info *si = F2FS_STAT(sbi);
+	struct f2fs_super_block *raw_super = F2FS_RAW_SUPER(sbi);
 	int i;
 
+	/* these will be changed if online resize is done */
+	si->main_area_segs = le32_to_cpu(raw_super->segment_count_main);
+	si->main_area_sections = le32_to_cpu(raw_super->section_count);
+	si->main_area_zones = si->main_area_sections /
+				le32_to_cpu(raw_super->secs_per_zone);
+
 	/* validation check of the segment numbers */
 	si->hit_largest = atomic64_read(&sbi->read_hit_largest);
 	si->hit_cached = atomic64_read(&sbi->read_hit_cached);
@@ -60,7 +67,7 @@
 	si->nr_rd_data = get_pages(sbi, F2FS_RD_DATA);
 	si->nr_rd_node = get_pages(sbi, F2FS_RD_NODE);
 	si->nr_rd_meta = get_pages(sbi, F2FS_RD_META);
-	if (SM_I(sbi) && SM_I(sbi)->fcc_info) {
+	if (SM_I(sbi)->fcc_info) {
 		si->nr_flushed =
 			atomic_read(&SM_I(sbi)->fcc_info->issued_flush);
 		si->nr_flushing =
@@ -68,7 +75,7 @@
 		si->flush_list_empty =
 			llist_empty(&SM_I(sbi)->fcc_info->issue_list);
 	}
-	if (SM_I(sbi) && SM_I(sbi)->dcc_info) {
+	if (SM_I(sbi)->dcc_info) {
 		si->nr_discarded =
 			atomic_read(&SM_I(sbi)->dcc_info->issued_discard);
 		si->nr_discarding =
diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index 6dd1e4a..dbb9f5a 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -8,6 +8,7 @@
 #include <linux/fs.h>
 #include <linux/f2fs_fs.h>
 #include <linux/sched/signal.h>
+#include <linux/unicode.h>
 #include "f2fs.h"
 #include "node.h"
 #include "acl.h"
@@ -81,7 +82,8 @@
 	return bidx;
 }
 
-static struct f2fs_dir_entry *find_in_block(struct page *dentry_page,
+static struct f2fs_dir_entry *find_in_block(struct inode *dir,
+				struct page *dentry_page,
 				struct fscrypt_name *fname,
 				f2fs_hash_t namehash,
 				int *max_slots,
@@ -93,7 +95,7 @@
 
 	dentry_blk = (struct f2fs_dentry_block *)page_address(dentry_page);
 
-	make_dentry_ptr_block(NULL, &d, dentry_blk);
+	make_dentry_ptr_block(dir, &d, dentry_blk);
 	de = f2fs_find_target_dentry(fname, namehash, max_slots, &d);
 	if (de)
 		*res_page = dentry_page;
@@ -101,14 +103,116 @@
 	return de;
 }
 
+#ifdef CONFIG_UNICODE
+/*
+ * Test whether a case-insensitive directory entry matches the filename
+ * being searched for.
+ *
+ * Returns: 0 if the directory entry matches, more than 0 if it
+ * doesn't match or less than zero on error.
+ */
+int f2fs_ci_compare(const struct inode *parent, const struct qstr *name,
+				const struct qstr *entry, bool quick)
+{
+	const struct f2fs_sb_info *sbi = F2FS_SB(parent->i_sb);
+	const struct unicode_map *um = sbi->s_encoding;
+	int ret;
+
+	if (quick)
+		ret = utf8_strncasecmp_folded(um, name, entry);
+	else
+		ret = utf8_strncasecmp(um, name, entry);
+
+	if (ret < 0) {
+		/* Handle invalid character sequence as either an error
+		 * or as an opaque byte sequence.
+		 */
+		if (f2fs_has_strict_mode(sbi))
+			return -EINVAL;
+
+		if (name->len != entry->len)
+			return 1;
+
+		return !!memcmp(name->name, entry->name, name->len);
+	}
+
+	return ret;
+}
+
+static void f2fs_fname_setup_ci_filename(struct inode *dir,
+					const struct qstr *iname,
+					struct fscrypt_str *cf_name)
+{
+	struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
+
+	if (!IS_CASEFOLDED(dir)) {
+		cf_name->name = NULL;
+		return;
+	}
+
+	cf_name->name = f2fs_kmalloc(sbi, F2FS_NAME_LEN, GFP_NOFS);
+	if (!cf_name->name)
+		return;
+
+	cf_name->len = utf8_casefold(sbi->s_encoding,
+					iname, cf_name->name,
+					F2FS_NAME_LEN);
+	if ((int)cf_name->len <= 0) {
+		kvfree(cf_name->name);
+		cf_name->name = NULL;
+	}
+}
+#endif
+
+static inline bool f2fs_match_name(struct f2fs_dentry_ptr *d,
+					struct f2fs_dir_entry *de,
+					struct fscrypt_name *fname,
+					struct fscrypt_str *cf_str,
+					unsigned long bit_pos,
+					f2fs_hash_t namehash)
+{
+#ifdef CONFIG_UNICODE
+	struct inode *parent = d->inode;
+	struct f2fs_sb_info *sbi = F2FS_I_SB(parent);
+	struct qstr entry;
+#endif
+
+	if (de->hash_code != namehash)
+		return false;
+
+#ifdef CONFIG_UNICODE
+	entry.name = d->filename[bit_pos];
+	entry.len = de->name_len;
+
+	if (sbi->s_encoding && IS_CASEFOLDED(parent)) {
+		if (cf_str->name) {
+			struct qstr cf = {.name = cf_str->name,
+					  .len = cf_str->len};
+			return !f2fs_ci_compare(parent, &cf, &entry, true);
+		}
+		return !f2fs_ci_compare(parent, fname->usr_fname, &entry,
+					false);
+	}
+#endif
+	if (fscrypt_match_name(fname, d->filename[bit_pos],
+				le16_to_cpu(de->name_len)))
+		return true;
+	return false;
+}
+
 struct f2fs_dir_entry *f2fs_find_target_dentry(struct fscrypt_name *fname,
 			f2fs_hash_t namehash, int *max_slots,
 			struct f2fs_dentry_ptr *d)
 {
 	struct f2fs_dir_entry *de;
+	struct fscrypt_str cf_str = { .name = NULL, .len = 0 };
 	unsigned long bit_pos = 0;
 	int max_len = 0;
 
+#ifdef CONFIG_UNICODE
+	f2fs_fname_setup_ci_filename(d->inode, fname->usr_fname, &cf_str);
+#endif
+
 	if (max_slots)
 		*max_slots = 0;
 	while (bit_pos < d->max) {
@@ -125,9 +229,7 @@
 			continue;
 		}
 
-		if (de->hash_code == namehash &&
-		    fscrypt_match_name(fname, d->filename[bit_pos],
-				       le16_to_cpu(de->name_len)))
+		if (f2fs_match_name(d, de, fname, &cf_str, bit_pos, namehash))
 			goto found;
 
 		if (max_slots && max_len > *max_slots)
@@ -141,6 +243,10 @@
 found:
 	if (max_slots && max_len > *max_slots)
 		*max_slots = max_len;
+
+#ifdef CONFIG_UNICODE
+	kvfree(cf_str.name);
+#endif
 	return de;
 }
 
@@ -157,7 +263,7 @@
 	struct f2fs_dir_entry *de = NULL;
 	bool room = false;
 	int max_slots;
-	f2fs_hash_t namehash = f2fs_dentry_hash(&name, fname);
+	f2fs_hash_t namehash = f2fs_dentry_hash(dir, &name, fname);
 
 	nbucket = dir_buckets(level, F2FS_I(dir)->i_dir_level);
 	nblock = bucket_blocks(level);
@@ -179,8 +285,8 @@
 			}
 		}
 
-		de = find_in_block(dentry_page, fname, namehash, &max_slots,
-								res_page);
+		de = find_in_block(dir, dentry_page, fname, namehash,
+							&max_slots, res_page);
 		if (de)
 			break;
 
@@ -218,9 +324,8 @@
 
 	max_depth = F2FS_I(dir)->i_current_depth;
 	if (unlikely(max_depth > MAX_DIR_HASH_DEPTH)) {
-		f2fs_msg(F2FS_I_SB(dir)->sb, KERN_WARNING,
-				"Corrupted max_depth of %lu: %u",
-				dir->i_ino, max_depth);
+		f2fs_warn(F2FS_I_SB(dir), "Corrupted max_depth of %lu: %u",
+			  dir->i_ino, max_depth);
 		max_depth = MAX_DIR_HASH_DEPTH;
 		f2fs_i_depth_write(dir, max_depth);
 	}
@@ -251,6 +356,14 @@
 	struct fscrypt_name fname;
 	int err;
 
+#ifdef CONFIG_UNICODE
+	if (f2fs_has_strict_mode(F2FS_I_SB(dir)) && IS_CASEFOLDED(dir) &&
+			utf8_validate(F2FS_I_SB(dir)->s_encoding, child)) {
+		*res_page = ERR_PTR(-EINVAL);
+		return NULL;
+	}
+#endif
+
 	err = fscrypt_setup_filename(dir, child, 1, &fname);
 	if (err) {
 		if (err == -ENOENT)
@@ -505,7 +618,7 @@
 
 	level = 0;
 	slots = GET_DENTRY_SLOTS(new_name->len);
-	dentry_hash = f2fs_dentry_hash(new_name, NULL);
+	dentry_hash = f2fs_dentry_hash(dir, new_name, NULL);
 
 	current_depth = F2FS_I(dir)->i_current_depth;
 	if (F2FS_I(dir)->chash == dentry_hash) {
@@ -515,7 +628,7 @@
 
 start:
 	if (time_to_inject(F2FS_I_SB(dir), FAULT_DIR_DEPTH)) {
-		f2fs_show_injection_info(FAULT_DIR_DEPTH);
+		f2fs_show_injection_info(F2FS_I_SB(dir), FAULT_DIR_DEPTH);
 		return -ENOSPC;
 	}
 
@@ -569,6 +682,11 @@
 
 	if (inode) {
 		f2fs_i_pino_write(inode, dir->i_ino);
+
+		/* synchronize inode page's data from inode cache */
+		if (is_inode_flag_set(inode, FI_NEW_INODE))
+			f2fs_update_inode(inode, page);
+
 		f2fs_put_page(page, 1);
 	}
 
@@ -801,8 +919,9 @@
 			bit_pos++;
 			ctx->pos = start_pos + bit_pos;
 			printk_ratelimited(
-				"%s, invalid namelen(0), ino:%u, run fsck to fix.",
-				KERN_WARNING, le32_to_cpu(de->ino));
+				"%sF2FS-fs (%s): invalid namelen(0), ino:%u, run fsck to fix.",
+				KERN_WARNING, sbi->sb->s_id,
+				le32_to_cpu(de->ino));
 			set_sbi_flag(sbi, SBI_NEED_FSCK);
 			continue;
 		}
@@ -816,11 +935,10 @@
 		bit_pos += GET_DENTRY_SLOTS(le16_to_cpu(de->name_len));
 		if (unlikely(bit_pos > d->max ||
 				le16_to_cpu(de->name_len) > F2FS_NAME_LEN)) {
-			f2fs_msg(sbi->sb, KERN_WARNING,
-				"%s: corrupted namelen=%d, run fsck to fix.",
-				__func__, le16_to_cpu(de->name_len));
+			f2fs_warn(sbi, "%s: corrupted namelen=%d, run fsck to fix.",
+				  __func__, le16_to_cpu(de->name_len));
 			set_sbi_flag(sbi, SBI_NEED_FSCK);
-			err = -EINVAL;
+			err = -EFSCORRUPTED;
 			goto out;
 		}
 
@@ -828,8 +946,8 @@
 			int save_len = fstr->len;
 
 			err = fscrypt_fname_disk_to_usr(d->inode,
-						(u32)de->hash_code, 0,
-						&de_name, fstr);
+						(u32)le32_to_cpu(de->hash_code),
+						0, &de_name, fstr);
 			if (err)
 				goto out;
 
@@ -945,3 +1063,50 @@
 	.compat_ioctl   = f2fs_compat_ioctl,
 #endif
 };
+
+#ifdef CONFIG_UNICODE
+static int f2fs_d_compare(const struct dentry *dentry, unsigned int len,
+			  const char *str, const struct qstr *name)
+{
+	struct qstr qstr = {.name = str, .len = len };
+
+	if (!IS_CASEFOLDED(dentry->d_parent->d_inode)) {
+		if (len != name->len)
+			return -1;
+		return memcmp(str, name, len);
+	}
+
+	return f2fs_ci_compare(dentry->d_parent->d_inode, name, &qstr, false);
+}
+
+static int f2fs_d_hash(const struct dentry *dentry, struct qstr *str)
+{
+	struct f2fs_sb_info *sbi = F2FS_SB(dentry->d_sb);
+	const struct unicode_map *um = sbi->s_encoding;
+	unsigned char *norm;
+	int len, ret = 0;
+
+	if (!IS_CASEFOLDED(dentry->d_inode))
+		return 0;
+
+	norm = f2fs_kmalloc(sbi, PATH_MAX, GFP_ATOMIC);
+	if (!norm)
+		return -ENOMEM;
+
+	len = utf8_casefold(um, str, norm, PATH_MAX);
+	if (len < 0) {
+		if (f2fs_has_strict_mode(sbi))
+			ret = -EINVAL;
+		goto out;
+	}
+	str->hash = full_name_hash(dentry, norm, len);
+out:
+	kvfree(norm);
+	return ret;
+}
+
+const struct dentry_operations f2fs_dentry_ops = {
+	.d_hash = f2fs_d_hash,
+	.d_compare = f2fs_d_compare,
+};
+#endif
diff --git a/fs/f2fs/extent_cache.c b/fs/f2fs/extent_cache.c
index caf77fe..e600784 100644
--- a/fs/f2fs/extent_cache.c
+++ b/fs/f2fs/extent_cache.c
@@ -184,10 +184,9 @@
 		next_re = rb_entry(next, struct rb_entry, rb_node);
 
 		if (cur_re->ofs + cur_re->len > next_re->ofs) {
-			f2fs_msg(sbi->sb, KERN_INFO, "inconsistent rbtree, "
-				"cur(%u, %u) next(%u, %u)",
-				cur_re->ofs, cur_re->len,
-				next_re->ofs, next_re->len);
+			f2fs_info(sbi, "inconsistent rbtree, cur(%u, %u) next(%u, %u)",
+				  cur_re->ofs, cur_re->len,
+				  next_re->ofs, next_re->len);
 			return false;
 		}
 
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 5d18cf2..0bb27ec 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -25,6 +25,7 @@
 #include <crypto/hash.h>
 
 #include <linux/fscrypt.h>
+#include <linux/fsverity.h>
 
 #ifdef CONFIG_F2FS_CHECK_FS
 #define f2fs_bug_on(sbi, condition)	BUG_ON(condition)
@@ -136,6 +137,9 @@
 	int alloc_mode;			/* segment allocation policy */
 	int fsync_mode;			/* fsync policy */
 	bool test_dummy_encryption;	/* test dummy encryption */
+	block_t unusable_cap;		/* Amount of space allowed to be
+					 * unusable when disabling checkpoint
+					 */
 };
 
 #define F2FS_FEATURE_ENCRYPT		0x0001
@@ -148,8 +152,9 @@
 #define F2FS_FEATURE_QUOTA_INO		0x0080
 #define F2FS_FEATURE_INODE_CRTIME	0x0100
 #define F2FS_FEATURE_LOST_FOUND		0x0200
-#define F2FS_FEATURE_VERITY		0x0400	/* reserved */
+#define F2FS_FEATURE_VERITY		0x0400
 #define F2FS_FEATURE_SB_CHKSUM		0x0800
+#define F2FS_FEATURE_CASEFOLD		0x1000
 
 #define __F2FS_HAS_FEATURE(raw_super, mask)				\
 	((raw_super->feature & cpu_to_le32(mask)) != 0)
@@ -412,6 +417,10 @@
 #define F2FS_IOC_SET_PIN_FILE		_IOW(F2FS_IOCTL_MAGIC, 13, __u32)
 #define F2FS_IOC_GET_PIN_FILE		_IOR(F2FS_IOCTL_MAGIC, 14, __u32)
 #define F2FS_IOC_PRECACHE_EXTENTS	_IO(F2FS_IOCTL_MAGIC, 15)
+#define F2FS_IOC_RESIZE_FS		_IOW(F2FS_IOCTL_MAGIC, 16, __u64)
+
+#define F2FS_IOC_GET_VOLUME_NAME	FS_IOC_GETFSLABEL
+#define F2FS_IOC_SET_VOLUME_NAME	FS_IOC_SETFSLABEL
 
 #define F2FS_IOC_SET_ENCRYPTION_POLICY	FS_IOC_SET_ENCRYPTION_POLICY
 #define F2FS_IOC_GET_ENCRYPTION_POLICY	FS_IOC_GET_ENCRYPTION_POLICY
@@ -476,8 +485,8 @@
 #define NR_INLINE_DENTRY(inode)	(MAX_INLINE_DATA(inode) * BITS_PER_BYTE / \
 				((SIZE_OF_DIR_ENTRY + F2FS_SLOT_LEN) * \
 				BITS_PER_BYTE + 1))
-#define INLINE_DENTRY_BITMAP_SIZE(inode)	((NR_INLINE_DENTRY(inode) + \
-					BITS_PER_BYTE - 1) / BITS_PER_BYTE)
+#define INLINE_DENTRY_BITMAP_SIZE(inode) \
+	DIV_ROUND_UP(NR_INLINE_DENTRY(inode), BITS_PER_BYTE)
 #define INLINE_RESERVED_SIZE(inode)	(MAX_INLINE_DATA(inode) - \
 				((SIZE_OF_DIR_ENTRY + F2FS_SLOT_LEN) * \
 				NR_INLINE_DENTRY(inode) + \
@@ -626,7 +635,7 @@
 #define FADVISE_ENC_NAME_BIT	0x08
 #define FADVISE_KEEP_SIZE_BIT	0x10
 #define FADVISE_HOT_BIT		0x20
-#define FADVISE_VERITY_BIT	0x40	/* reserved */
+#define FADVISE_VERITY_BIT	0x40
 
 #define FADVISE_MODIFIABLE_BITS	(FADVISE_COLD_BIT | FADVISE_HOT_BIT)
 
@@ -646,6 +655,8 @@
 #define file_is_hot(inode)	is_file(inode, FADVISE_HOT_BIT)
 #define file_set_hot(inode)	set_file(inode, FADVISE_HOT_BIT)
 #define file_clear_hot(inode)	clear_file(inode, FADVISE_HOT_BIT)
+#define file_is_verity(inode)	is_file(inode, FADVISE_VERITY_BIT)
+#define file_set_verity(inode)	set_file(inode, FADVISE_VERITY_BIT)
 
 #define DEF_DIR_LEVEL		0
 
@@ -879,6 +890,7 @@
 	CURSEG_WARM_NODE,	/* direct node blocks of normal files */
 	CURSEG_COLD_NODE,	/* indirect node blocks */
 	NO_CHECK_TYPE,
+	CURSEG_COLD_DATA_PINNED,/* cold data for pinned file */
 };
 
 struct flush_cmd {
@@ -1052,9 +1064,16 @@
 	bool retry;		/* need to reallocate block address */
 	enum iostat_type io_type;	/* io type */
 	struct writeback_control *io_wbc; /* writeback control */
+	struct bio **bio;		/* bio for ipu */
+	sector_t *last_block;		/* last block number in bio */
 	unsigned char version;		/* version of the node */
 };
 
+struct bio_entry {
+	struct bio *bio;
+	struct list_head list;
+};
+
 #define is_read_io(rw) ((rw) == READ)
 struct f2fs_bio_info {
 	struct f2fs_sb_info *sbi;	/* f2fs superblock */
@@ -1064,6 +1083,8 @@
 	struct rw_semaphore io_rwsem;	/* blocking op for bio */
 	spinlock_t io_lock;		/* serialize DATA/NODE IOs */
 	struct list_head io_list;	/* track fios */
+	struct list_head bio_list;	/* bio entry list head */
+	struct rw_semaphore bio_list_lock;	/* lock to protect bio entry list */
 };
 
 #define FDEV(i)				(sbi->devs[i])
@@ -1111,6 +1132,7 @@
 	SBI_QUOTA_NEED_FLUSH,			/* need to flush quota info in CP */
 	SBI_QUOTA_SKIP_FLUSH,			/* skip flushing quota in current CP */
 	SBI_QUOTA_NEED_REPAIR,			/* quota file may be corrupted */
+	SBI_IS_RESIZEFS,			/* resizefs is in process */
 };
 
 enum {
@@ -1162,6 +1184,10 @@
 	int valid_super_block;			/* valid super block no */
 	unsigned long s_flag;				/* flags for sbi */
 	struct mutex writepages;		/* mutex for writepages() */
+#ifdef CONFIG_UNICODE
+	struct unicode_map *s_encoding;
+	__u16 s_encoding_flags;
+#endif
 
 #ifdef CONFIG_BLK_DEV_ZONED
 	unsigned int blocks_per_blkz;		/* F2FS blocks per zone */
@@ -1207,6 +1233,7 @@
 	/* for inode management */
 	struct list_head inode_list[NR_INODE_TYPE];	/* dirty inode list */
 	spinlock_t inode_lock[NR_INODE_TYPE];	/* for dirty inode list lock */
+	struct mutex flush_lock;		/* for flush exclusion */
 
 	/* for extent tree cache */
 	struct radix_tree_root extent_tree_root;/* cache extent cache entries */
@@ -1230,6 +1257,7 @@
 	unsigned int segs_per_sec;		/* segments per section */
 	unsigned int secs_per_zone;		/* sections per zone */
 	unsigned int total_sections;		/* total section count */
+	struct mutex resize_mutex;		/* for resize exclusion */
 	unsigned int total_node_count;		/* total node block count */
 	unsigned int total_valid_node_count;	/* valid node block count */
 	loff_t max_file_blocks;			/* max block index of file */
@@ -1247,6 +1275,7 @@
 	block_t unusable_block_count;		/* # of blocks saved by last cp */
 
 	unsigned int nquota_files;		/* # of quota sysfile */
+	struct rw_semaphore quota_sem;		/* blocking cp for flags */
 
 	/* # of pages, see count_type */
 	atomic_t nr_pages[NR_COUNT_TYPE];
@@ -1268,11 +1297,13 @@
 	unsigned int gc_mode;			/* current GC state */
 	unsigned int next_victim_seg[2];	/* next segment in victim section */
 	/* for skip statistic */
+	unsigned int atomic_files;              /* # of opened atomic file */
 	unsigned long long skipped_atomic_files[2];	/* FG_GC and BG_GC */
 	unsigned long long skipped_gc_rwsem;		/* FG_GC only */
 
 	/* threshold for gc trials on pinned files */
 	u64 gc_pin_file_threshold;
+	struct rw_semaphore pin_sem;
 
 	/* maximum # of trials to find a victim segment for SSR and GC */
 	unsigned int max_victim_search;
@@ -1344,9 +1375,10 @@
 };
 
 #ifdef CONFIG_F2FS_FAULT_INJECTION
-#define f2fs_show_injection_info(type)					\
-	printk_ratelimited("%sF2FS-fs : inject %s in %s of %pF\n",	\
-		KERN_INFO, f2fs_fault_name[type],			\
+#define f2fs_show_injection_info(sbi, type)					\
+	printk_ratelimited("%sF2FS-fs (%s) : inject %s in %s of %pS\n",	\
+		KERN_INFO, sbi->sb->s_id,				\
+		f2fs_fault_name[type],					\
 		__func__, __builtin_return_address(0))
 static inline bool time_to_inject(struct f2fs_sb_info *sbi, int type)
 {
@@ -1366,7 +1398,7 @@
 	return false;
 }
 #else
-#define f2fs_show_injection_info(type) do { } while (0)
+#define f2fs_show_injection_info(sbi, type) do { } while (0)
 static inline bool time_to_inject(struct f2fs_sb_info *sbi, int type)
 {
 	return false;
@@ -1489,7 +1521,7 @@
 
 static inline struct f2fs_sb_info *F2FS_P_SB(struct page *page)
 {
-	return F2FS_M_SB(page->mapping);
+	return F2FS_M_SB(page_file_mapping(page));
 }
 
 static inline struct f2fs_super_block *F2FS_RAW_SUPER(struct f2fs_sb_info *sbi)
@@ -1631,6 +1663,7 @@
 static inline void disable_nat_bits(struct f2fs_sb_info *sbi, bool lock)
 {
 	unsigned long flags;
+	unsigned char *nat_bits;
 
 	/*
 	 * In order to re-enable nat_bits we need to call fsck.f2fs by
@@ -1641,10 +1674,12 @@
 	if (lock)
 		spin_lock_irqsave(&sbi->cp_lock, flags);
 	__clear_ckpt_flags(F2FS_CKPT(sbi), CP_NAT_BITS_FLAG);
-	kvfree(NM_I(sbi)->nat_bits);
+	nat_bits = NM_I(sbi)->nat_bits;
 	NM_I(sbi)->nat_bits = NULL;
 	if (lock)
 		spin_unlock_irqrestore(&sbi->cp_lock, flags);
+
+	kvfree(nat_bits);
 }
 
 static inline bool enabled_nat_bits(struct f2fs_sb_info *sbi,
@@ -1749,9 +1784,9 @@
 		return ret;
 
 	if (time_to_inject(sbi, FAULT_BLOCK)) {
-		f2fs_show_injection_info(FAULT_BLOCK);
+		f2fs_show_injection_info(sbi, FAULT_BLOCK);
 		release = *count;
-		goto enospc;
+		goto release_quota;
 	}
 
 	/*
@@ -1767,8 +1802,12 @@
 
 	if (!__allow_reserved_blocks(sbi, inode, true))
 		avail_user_block_count -= F2FS_OPTION(sbi).root_reserved_blocks;
-	if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED)))
-		avail_user_block_count -= sbi->unusable_block_count;
+	if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED))) {
+		if (avail_user_block_count > sbi->unusable_block_count)
+			avail_user_block_count -= sbi->unusable_block_count;
+		else
+			avail_user_block_count = 0;
+	}
 	if (unlikely(sbi->total_valid_block_count > avail_user_block_count)) {
 		diff = sbi->total_valid_block_count - avail_user_block_count;
 		if (diff > *count)
@@ -1792,11 +1831,25 @@
 
 enospc:
 	percpu_counter_sub(&sbi->alloc_valid_block_count, release);
+release_quota:
 	dquot_release_reservation_block(inode, release);
 	return -ENOSPC;
 }
 
-void f2fs_msg(struct super_block *sb, const char *level, const char *fmt, ...);
+__printf(2, 3)
+void f2fs_printk(struct f2fs_sb_info *sbi, const char *fmt, ...);
+
+#define f2fs_err(sbi, fmt, ...)						\
+	f2fs_printk(sbi, KERN_ERR fmt, ##__VA_ARGS__)
+#define f2fs_warn(sbi, fmt, ...)					\
+	f2fs_printk(sbi, KERN_WARNING fmt, ##__VA_ARGS__)
+#define f2fs_notice(sbi, fmt, ...)					\
+	f2fs_printk(sbi, KERN_NOTICE fmt, ##__VA_ARGS__)
+#define f2fs_info(sbi, fmt, ...)					\
+	f2fs_printk(sbi, KERN_INFO fmt, ##__VA_ARGS__)
+#define f2fs_debug(sbi, fmt, ...)					\
+	f2fs_printk(sbi, KERN_DEBUG fmt, ##__VA_ARGS__)
+
 static inline void dec_valid_block_count(struct f2fs_sb_info *sbi,
 						struct inode *inode,
 						block_t count)
@@ -1812,11 +1865,10 @@
 					sbi->current_reserved_blocks + count);
 	spin_unlock(&sbi->stat_lock);
 	if (unlikely(inode->i_blocks < sectors)) {
-		f2fs_msg(sbi->sb, KERN_WARNING,
-			"Inconsistent i_blocks, ino:%lu, iblocks:%llu, sectors:%llu",
-			inode->i_ino,
-			(unsigned long long)inode->i_blocks,
-			(unsigned long long)sectors);
+		f2fs_warn(sbi, "Inconsistent i_blocks, ino:%lu, iblocks:%llu, sectors:%llu",
+			  inode->i_ino,
+			  (unsigned long long)inode->i_blocks,
+			  (unsigned long long)sectors);
 		set_sbi_flag(sbi, SBI_NEED_FSCK);
 		return;
 	}
@@ -1968,7 +2020,7 @@
 					struct inode *inode, bool is_inode)
 {
 	block_t	valid_block_count;
-	unsigned int valid_node_count;
+	unsigned int valid_node_count, user_block_count;
 	int err;
 
 	if (is_inode) {
@@ -1984,7 +2036,7 @@
 	}
 
 	if (time_to_inject(sbi, FAULT_BLOCK)) {
-		f2fs_show_injection_info(FAULT_BLOCK);
+		f2fs_show_injection_info(sbi, FAULT_BLOCK);
 		goto enospc;
 	}
 
@@ -1995,10 +2047,11 @@
 
 	if (!__allow_reserved_blocks(sbi, inode, false))
 		valid_block_count += F2FS_OPTION(sbi).root_reserved_blocks;
+	user_block_count = sbi->user_block_count;
 	if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED)))
-		valid_block_count += sbi->unusable_block_count;
+		user_block_count -= sbi->unusable_block_count;
 
-	if (unlikely(valid_block_count > sbi->user_block_count)) {
+	if (unlikely(valid_block_count > user_block_count)) {
 		spin_unlock(&sbi->stat_lock);
 		goto enospc;
 	}
@@ -2053,10 +2106,9 @@
 		dquot_free_inode(inode);
 	} else {
 		if (unlikely(inode->i_blocks == 0)) {
-			f2fs_msg(sbi->sb, KERN_WARNING,
-				"Inconsistent i_blocks, ino:%lu, iblocks:%llu",
-				inode->i_ino,
-				(unsigned long long)inode->i_blocks);
+			f2fs_warn(sbi, "Inconsistent i_blocks, ino:%lu, iblocks:%llu",
+				  inode->i_ino,
+				  (unsigned long long)inode->i_blocks);
 			set_sbi_flag(sbi, SBI_NEED_FSCK);
 			return;
 		}
@@ -2099,7 +2151,8 @@
 			return page;
 
 		if (time_to_inject(F2FS_M_SB(mapping), FAULT_PAGE_ALLOC)) {
-			f2fs_show_injection_info(FAULT_PAGE_ALLOC);
+			f2fs_show_injection_info(F2FS_M_SB(mapping),
+							FAULT_PAGE_ALLOC);
 			return NULL;
 		}
 	}
@@ -2114,7 +2167,7 @@
 				int fgp_flags, gfp_t gfp_mask)
 {
 	if (time_to_inject(F2FS_M_SB(mapping), FAULT_PAGE_GET)) {
-		f2fs_show_injection_info(FAULT_PAGE_GET);
+		f2fs_show_injection_info(F2FS_M_SB(mapping), FAULT_PAGE_GET);
 		return NULL;
 	}
 
@@ -2183,7 +2236,7 @@
 		return bio;
 	}
 	if (time_to_inject(sbi, FAULT_ALLOC_BIO)) {
-		f2fs_show_injection_info(FAULT_ALLOC_BIO);
+		f2fs_show_injection_info(sbi, FAULT_ALLOC_BIO);
 		return NULL;
 	}
 
@@ -2192,6 +2245,9 @@
 
 static inline bool is_idle(struct f2fs_sb_info *sbi, int type)
 {
+	if (sbi->gc_mode == GC_URGENT)
+		return true;
+
 	if (get_pages(sbi, F2FS_RD_DATA) || get_pages(sbi, F2FS_RD_NODE) ||
 		get_pages(sbi, F2FS_RD_META) || get_pages(sbi, F2FS_WB_DATA) ||
 		get_pages(sbi, F2FS_WB_CP_DATA) ||
@@ -2321,57 +2377,26 @@
 }
 
 /*
- * Inode flags
+ * On-disk inode flags (f2fs_inode::i_flags)
  */
-#define F2FS_SECRM_FL			0x00000001 /* Secure deletion */
-#define F2FS_UNRM_FL			0x00000002 /* Undelete */
-#define F2FS_COMPR_FL			0x00000004 /* Compress file */
 #define F2FS_SYNC_FL			0x00000008 /* Synchronous updates */
 #define F2FS_IMMUTABLE_FL		0x00000010 /* Immutable file */
 #define F2FS_APPEND_FL			0x00000020 /* writes to file may only append */
 #define F2FS_NODUMP_FL			0x00000040 /* do not dump file */
 #define F2FS_NOATIME_FL			0x00000080 /* do not update atime */
-/* Reserved for compression usage... */
-#define F2FS_DIRTY_FL			0x00000100
-#define F2FS_COMPRBLK_FL		0x00000200 /* One or more compressed clusters */
-#define F2FS_NOCOMPR_FL			0x00000400 /* Don't compress */
-#define F2FS_ENCRYPT_FL			0x00000800 /* encrypted file */
-/* End compression flags --- maybe not all used */
 #define F2FS_INDEX_FL			0x00001000 /* hash-indexed directory */
-#define F2FS_IMAGIC_FL			0x00002000 /* AFS directory */
-#define F2FS_JOURNAL_DATA_FL		0x00004000 /* file data should be journaled */
-#define F2FS_NOTAIL_FL			0x00008000 /* file tail should not be merged */
 #define F2FS_DIRSYNC_FL			0x00010000 /* dirsync behaviour (directories only) */
-#define F2FS_TOPDIR_FL			0x00020000 /* Top of directory hierarchies*/
-#define F2FS_HUGE_FILE_FL               0x00040000 /* Set to each huge file */
-#define F2FS_EXTENTS_FL			0x00080000 /* Inode uses extents */
-#define F2FS_EA_INODE_FL	        0x00200000 /* Inode used for large EA */
-#define F2FS_EOFBLOCKS_FL		0x00400000 /* Blocks allocated beyond EOF */
-#define F2FS_NOCOW_FL			0x00800000 /* Do not cow file */
-#define F2FS_INLINE_DATA_FL		0x10000000 /* Inode has inline data. */
 #define F2FS_PROJINHERIT_FL		0x20000000 /* Create with parents projid */
-#define F2FS_RESERVED_FL		0x80000000 /* reserved for ext4 lib */
-
-#define F2FS_FL_USER_VISIBLE		0x30CBDFFF /* User visible flags */
-#define F2FS_FL_USER_MODIFIABLE		0x204BC0FF /* User modifiable flags */
-
-/* Flags we can manipulate with through F2FS_IOC_FSSETXATTR */
-#define F2FS_FL_XFLAG_VISIBLE		(F2FS_SYNC_FL | \
-					 F2FS_IMMUTABLE_FL | \
-					 F2FS_APPEND_FL | \
-					 F2FS_NODUMP_FL | \
-					 F2FS_NOATIME_FL | \
-					 F2FS_PROJINHERIT_FL)
+#define F2FS_CASEFOLD_FL		0x40000000 /* Casefolded file */
 
 /* Flags that should be inherited by new inodes from their parent. */
-#define F2FS_FL_INHERITED (F2FS_SECRM_FL | F2FS_UNRM_FL | F2FS_COMPR_FL |\
-			   F2FS_SYNC_FL | F2FS_NODUMP_FL | F2FS_NOATIME_FL |\
-			   F2FS_NOCOMPR_FL | F2FS_JOURNAL_DATA_FL |\
-			   F2FS_NOTAIL_FL | F2FS_DIRSYNC_FL |\
-			   F2FS_PROJINHERIT_FL)
+#define F2FS_FL_INHERITED (F2FS_SYNC_FL | F2FS_NODUMP_FL | F2FS_NOATIME_FL | \
+			   F2FS_DIRSYNC_FL | F2FS_PROJINHERIT_FL | \
+			   F2FS_CASEFOLD_FL)
 
 /* Flags that are appropriate for regular files (all but dir-specific ones). */
-#define F2FS_REG_FLMASK		(~(F2FS_DIRSYNC_FL | F2FS_TOPDIR_FL))
+#define F2FS_REG_FLMASK		(~(F2FS_DIRSYNC_FL | F2FS_PROJINHERIT_FL | \
+				F2FS_CASEFOLD_FL))
 
 /* Flags that are appropriate for non-directories/regular files. */
 #define F2FS_OTHER_FLMASK	(F2FS_NODUMP_FL | F2FS_NOATIME_FL)
@@ -2418,6 +2443,7 @@
 	FI_PROJ_INHERIT,	/* indicate file inherits projectid */
 	FI_PIN_FILE,		/* indicate file should not be gced */
 	FI_ATOMIC_REVOKE_REQUEST, /* request to drop atomic data */
+	FI_VERITY_IN_PROGRESS,	/* building fs-verity Merkle tree */
 };
 
 static inline void __mark_inode_dirty_flag(struct inode *inode,
@@ -2457,6 +2483,12 @@
 	__mark_inode_dirty_flag(inode, flag, false);
 }
 
+static inline bool f2fs_verity_in_progress(struct inode *inode)
+{
+	return IS_ENABLED(CONFIG_FS_VERITY) &&
+	       is_inode_flag_set(inode, FI_VERITY_IN_PROGRESS);
+}
+
 static inline void set_acl_inode(struct inode *inode, umode_t mode)
 {
 	F2FS_I(inode)->i_acl_mode = mode;
@@ -2771,7 +2803,7 @@
 	void *ret;
 
 	if (time_to_inject(sbi, FAULT_KMALLOC)) {
-		f2fs_show_injection_info(FAULT_KMALLOC);
+		f2fs_show_injection_info(sbi, FAULT_KMALLOC);
 		return NULL;
 	}
 
@@ -2792,7 +2824,7 @@
 					size_t size, gfp_t flags)
 {
 	if (time_to_inject(sbi, FAULT_KVMALLOC)) {
-		f2fs_show_injection_info(FAULT_KVMALLOC);
+		f2fs_show_injection_info(sbi, FAULT_KVMALLOC);
 		return NULL;
 	}
 
@@ -2864,9 +2896,8 @@
 					block_t blkaddr, int type)
 {
 	if (!f2fs_is_valid_blkaddr(sbi, blkaddr, type)) {
-		f2fs_msg(sbi->sb, KERN_ERR,
-			"invalid blkaddr: %u, type: %d, run fsck to fix.",
-			blkaddr, type);
+		f2fs_err(sbi, "invalid blkaddr: %u, type: %d, run fsck to fix.",
+			 blkaddr, type);
 		f2fs_bug_on(sbi, 1);
 	}
 }
@@ -2939,6 +2970,11 @@
 							bool hot, bool set);
 struct dentry *f2fs_get_parent(struct dentry *child);
 
+extern int f2fs_ci_compare(const struct inode *parent,
+			   const struct qstr *name,
+			   const struct qstr *entry,
+			   bool quick);
+
 /*
  * dir.c
  */
@@ -2997,15 +3033,13 @@
 void f2fs_quota_off_umount(struct super_block *sb);
 int f2fs_commit_super(struct f2fs_sb_info *sbi, bool recover);
 int f2fs_sync_fs(struct super_block *sb, int sync);
-extern __printf(3, 4)
-void f2fs_msg(struct super_block *sb, const char *level, const char *fmt, ...);
 int f2fs_sanity_check_ckpt(struct f2fs_sb_info *sbi);
 
 /*
  * hash.c
  */
-f2fs_hash_t f2fs_dentry_hash(const struct qstr *name_info,
-				struct fscrypt_name *fname);
+f2fs_hash_t f2fs_dentry_hash(const struct inode *dir,
+		const struct qstr *name_info, struct fscrypt_name *fname);
 
 /*
  * node.c
@@ -3082,10 +3116,13 @@
 void f2fs_clear_prefree_segments(struct f2fs_sb_info *sbi,
 					struct cp_control *cpc);
 void f2fs_dirty_to_prefree(struct f2fs_sb_info *sbi);
-int f2fs_disable_cp_again(struct f2fs_sb_info *sbi);
+block_t f2fs_get_unusable_blocks(struct f2fs_sb_info *sbi);
+int f2fs_disable_cp_again(struct f2fs_sb_info *sbi, block_t unusable);
 void f2fs_release_discard_addrs(struct f2fs_sb_info *sbi);
 int f2fs_npages_for_summary_flush(struct f2fs_sb_info *sbi, bool for_ra);
-void f2fs_allocate_new_segments(struct f2fs_sb_info *sbi);
+void allocate_segment_for_resize(struct f2fs_sb_info *sbi, int type,
+					unsigned int start, unsigned int end);
+void f2fs_allocate_new_segments(struct f2fs_sb_info *sbi, int type);
 int f2fs_trim_fs(struct f2fs_sb_info *sbi, struct fstrim_range *range);
 bool f2fs_exist_trim_candidates(struct f2fs_sb_info *sbi,
 					struct cp_control *cpc);
@@ -3171,12 +3208,17 @@
  */
 int f2fs_init_post_read_processing(void);
 void f2fs_destroy_post_read_processing(void);
+int f2fs_init_bio_entry_cache(void);
+void f2fs_destroy_bio_entry_cache(void);
 void f2fs_submit_merged_write(struct f2fs_sb_info *sbi, enum page_type type);
 void f2fs_submit_merged_write_cond(struct f2fs_sb_info *sbi,
 				struct inode *inode, struct page *page,
 				nid_t ino, enum page_type type);
+void f2fs_submit_merged_ipu_write(struct f2fs_sb_info *sbi,
+					struct bio **bio, struct page *page);
 void f2fs_flush_merged_writes(struct f2fs_sb_info *sbi);
 int f2fs_submit_page_bio(struct f2fs_io_info *fio);
+int f2fs_merge_page_bio(struct f2fs_io_info *fio);
 void f2fs_submit_page_write(struct f2fs_io_info *fio);
 struct block_device *f2fs_target_device(struct f2fs_sb_info *sbi,
 			block_t blk_addr, struct bio *bio);
@@ -3222,6 +3264,7 @@
 int f2fs_gc(struct f2fs_sb_info *sbi, bool sync, bool background,
 			unsigned int segno);
 void f2fs_build_gc_manager(struct f2fs_sb_info *sbi);
+int f2fs_resize_fs(struct f2fs_sb_info *sbi, __u64 block_count);
 
 /*
  * recovery.c
@@ -3443,6 +3486,9 @@
 #endif
 
 extern const struct file_operations f2fs_dir_operations;
+#ifdef CONFIG_UNICODE
+extern const struct dentry_operations f2fs_dentry_ops;
+#endif
 extern const struct file_operations f2fs_file_operations;
 extern const struct inode_operations f2fs_file_inode_operations;
 extern const struct address_space_operations f2fs_dblock_aops;
@@ -3532,6 +3578,9 @@
 int f2fs_register_sysfs(struct f2fs_sb_info *sbi);
 void f2fs_unregister_sysfs(struct f2fs_sb_info *sbi);
 
+/* verity.c */
+extern const struct fsverity_operations f2fs_verityops;
+
 /*
  * crypto support
  */
@@ -3555,7 +3604,8 @@
 static inline bool f2fs_post_read_required(struct inode *inode)
 {
 	return (f2fs_encrypted_file(inode)
-			&& !fscrypt_using_hardware_encryption(inode));
+			&& !fscrypt_using_hardware_encryption(inode))
+	|| fsverity_active(inode);
 }
 
 #define F2FS_FEATURE_FUNCS(name, flagname) \
@@ -3573,7 +3623,9 @@
 F2FS_FEATURE_FUNCS(quota_ino, QUOTA_INO);
 F2FS_FEATURE_FUNCS(inode_crtime, INODE_CRTIME);
 F2FS_FEATURE_FUNCS(lost_found, LOST_FOUND);
+F2FS_FEATURE_FUNCS(verity, VERITY);
 F2FS_FEATURE_FUNCS(sb_chksum, SB_CHKSUM);
+F2FS_FEATURE_FUNCS(casefold, CASEFOLD);
 
 #ifdef CONFIG_BLK_DEV_ZONED
 static inline bool f2fs_blkz_is_seq(struct f2fs_sb_info *sbi, int devi,
@@ -3692,10 +3744,14 @@
 	 */
 	if (f2fs_sb_has_blkzoned(sbi))
 		return true;
-	if (test_opt(sbi, LFS) && (rw == WRITE) &&
-				block_unaligned_IO(inode, iocb, iter))
-		return true;
-	if (is_sbi_flag_set(F2FS_I_SB(inode), SBI_CP_DISABLED))
+	if (test_opt(sbi, LFS) && (rw == WRITE)) {
+		if (block_unaligned_IO(inode, iocb, iter))
+			return true;
+		if (F2FS_IO_ALIGNED(sbi))
+			return true;
+	}
+	if (is_sbi_flag_set(F2FS_I_SB(inode), SBI_CP_DISABLED) &&
+					!IS_SWAPFILE(inode))
 		return true;
 
 	return false;
@@ -3731,6 +3787,9 @@
 	return false;
 }
 
+#define EFSBADCRC	EBADMSG		/* Bad CRC detected */
+#define EFSCORRUPTED	EUCLEAN		/* Filesystem is corrupted */
+
 #endif /* _LINUX_F2FS_H */
 
 #define EFSBADCRC	EBADMSG		/* Bad CRC detected */
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index 2cbb9be..c4ac231 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -20,6 +20,7 @@
 #include <linux/uio.h>
 #include <linux/uuid.h>
 #include <linux/file.h>
+#include <linux/nls.h>
 
 #include "f2fs.h"
 #include "node.h"
@@ -61,6 +62,11 @@
 	/* should do out of any locked page */
 	f2fs_balance_fs(sbi, true);
 
+	if (!f2fs_is_checkpoint_ready(sbi)) {
+		err = -ENOSPC;
+		goto err;
+	}
+
 	sb_start_pagefault(inode->i_sb);
 
 	f2fs_bug_on(sbi, f2fs_has_inline_data(inode));
@@ -509,6 +515,10 @@
 	if (err)
 		return err;
 
+	err = fsverity_file_open(inode, filp);
+	if (err)
+		return err;
+
 	filp->f_mode |= FMODE_NOWAIT;
 
 	return dquot_file_open(inode, filp);
@@ -684,7 +694,7 @@
 	trace_f2fs_truncate(inode);
 
 	if (time_to_inject(F2FS_I_SB(inode), FAULT_TRUNCATE)) {
-		f2fs_show_injection_info(FAULT_TRUNCATE);
+		f2fs_show_injection_info(F2FS_I_SB(inode), FAULT_TRUNCATE);
 		return -EIO;
 	}
 
@@ -720,11 +730,9 @@
 		stat->btime.tv_nsec = fi->i_crtime.tv_nsec;
 	}
 
-	flags = fi->i_flags & F2FS_FL_USER_VISIBLE;
+	flags = fi->i_flags;
 	if (flags & F2FS_APPEND_FL)
 		stat->attributes |= STATX_ATTR_APPEND;
-	if (flags & F2FS_COMPR_FL)
-		stat->attributes |= STATX_ATTR_COMPRESSED;
 	if (IS_ENCRYPTED(inode))
 		stat->attributes |= STATX_ATTR_ENCRYPTED;
 	if (flags & F2FS_IMMUTABLE_FL)
@@ -733,7 +741,6 @@
 		stat->attributes |= STATX_ATTR_NODUMP;
 
 	stat->attributes_mask |= (STATX_ATTR_APPEND |
-				  STATX_ATTR_COMPRESSED |
 				  STATX_ATTR_ENCRYPTED |
 				  STATX_ATTR_IMMUTABLE |
 				  STATX_ATTR_NODUMP);
@@ -794,6 +801,10 @@
 	if (err)
 		return err;
 
+	err = fsverity_prepare_setattr(dentry, attr);
+	if (err)
+		return err;
+
 	if (is_quota_modification(inode, attr)) {
 		err = dquot_initialize(inode);
 		if (err)
@@ -824,14 +835,24 @@
 	}
 
 	if (attr->ia_valid & ATTR_SIZE) {
-		bool to_smaller = (attr->ia_size <= i_size_read(inode));
+		loff_t old_size = i_size_read(inode);
+
+		if (attr->ia_size > MAX_INLINE_DATA(inode)) {
+			/*
+			 * should convert inline inode before i_size_write to
+			 * keep smaller than inline_data size with inline flag.
+			 */
+			err = f2fs_convert_inline_inode(inode);
+			if (err)
+				return err;
+		}
 
 		down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
 		down_write(&F2FS_I(inode)->i_mmap_sem);
 
 		truncate_setsize(inode, attr->ia_size);
 
-		if (to_smaller)
+		if (attr->ia_size <= old_size)
 			err = f2fs_truncate(inode);
 		/*
 		 * do not trim all blocks after i_size if target size is
@@ -839,21 +860,11 @@
 		 */
 		up_write(&F2FS_I(inode)->i_mmap_sem);
 		up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
-
 		if (err)
 			return err;
 
-		if (!to_smaller) {
-			/* should convert inline inode here */
-			if (!f2fs_may_inline_data(inode)) {
-				err = f2fs_convert_inline_inode(inode);
-				if (err)
-					return err;
-			}
-			inode->i_mtime = inode->i_ctime = current_time(inode);
-		}
-
 		down_write(&F2FS_I(inode)->i_sem);
+		inode->i_mtime = inode->i_ctime = current_time(inode);
 		F2FS_I(inode)->last_disk_size = i_size_read(inode);
 		up_write(&F2FS_I(inode)->i_sem);
 	}
@@ -1039,14 +1050,14 @@
 			!f2fs_is_valid_blkaddr(sbi, *blkaddr,
 					DATA_GENERIC_ENHANCE)) {
 			f2fs_put_dnode(&dn);
-			return -EFAULT;
+			return -EFSCORRUPTED;
 		}
 
 		if (!f2fs_is_checkpointed_data(sbi, *blkaddr)) {
 
 			if (test_opt(sbi, LFS)) {
 				f2fs_put_dnode(&dn);
-				return -ENOTSUPP;
+				return -EOPNOTSUPP;
 			}
 
 			/* do not invalidate this block address */
@@ -1138,7 +1149,7 @@
 				}
 				dn.ofs_in_node++;
 				i++;
-				new_size = (dst + i) << PAGE_SHIFT;
+				new_size = (loff_t)(dst + i) << PAGE_SHIFT;
 				if (dst_inode->i_size < new_size)
 					f2fs_i_size_write(dst_inode, new_size);
 			} while (--ilen && (do_replace[i] || blkaddr[i] == NULL_ADDR));
@@ -1227,7 +1238,7 @@
 static int f2fs_do_collapse(struct inode *inode, loff_t offset, loff_t len)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
-	pgoff_t nrpages = (i_size_read(inode) + PAGE_SIZE - 1) / PAGE_SIZE;
+	pgoff_t nrpages = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
 	pgoff_t start = offset >> PAGE_SHIFT;
 	pgoff_t end = (offset + len) >> PAGE_SHIFT;
 	int ret;
@@ -1480,7 +1491,7 @@
 	pg_start = offset >> PAGE_SHIFT;
 	pg_end = (offset + len) >> PAGE_SHIFT;
 	delta = pg_end - pg_start;
-	idx = (i_size_read(inode) + PAGE_SIZE - 1) / PAGE_SIZE;
+	idx = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
 
 	/* avoid gc operation during block exchange */
 	down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
@@ -1544,7 +1555,44 @@
 	if (off_end)
 		map.m_len++;
 
-	err = f2fs_map_blocks(inode, &map, 1, F2FS_GET_BLOCK_PRE_AIO);
+	if (!map.m_len)
+		return 0;
+
+	if (f2fs_is_pinned_file(inode)) {
+		block_t len = (map.m_len >> sbi->log_blocks_per_seg) <<
+					sbi->log_blocks_per_seg;
+		block_t done = 0;
+
+		if (map.m_len % sbi->blocks_per_seg)
+			len += sbi->blocks_per_seg;
+
+		map.m_len = sbi->blocks_per_seg;
+next_alloc:
+		if (has_not_enough_free_secs(sbi, 0,
+			GET_SEC_FROM_SEG(sbi, overprovision_segments(sbi)))) {
+			mutex_lock(&sbi->gc_mutex);
+			err = f2fs_gc(sbi, true, false, NULL_SEGNO);
+			if (err && err != -ENODATA && err != -EAGAIN)
+				goto out_err;
+		}
+
+		down_write(&sbi->pin_sem);
+		map.m_seg_type = CURSEG_COLD_DATA_PINNED;
+		f2fs_allocate_new_segments(sbi, CURSEG_COLD_DATA);
+		err = f2fs_map_blocks(inode, &map, 1, F2FS_GET_BLOCK_PRE_DIO);
+		up_write(&sbi->pin_sem);
+
+		done += map.m_len;
+		len -= map.m_len;
+		map.m_lblk += map.m_len;
+		if (!err && len)
+			goto next_alloc;
+
+		map.m_len = done;
+	} else {
+		err = f2fs_map_blocks(inode, &map, 1, F2FS_GET_BLOCK_PRE_AIO);
+	}
+out_err:
 	if (err) {
 		pgoff_t last_off;
 
@@ -1578,6 +1626,8 @@
 
 	if (unlikely(f2fs_cp_error(F2FS_I_SB(inode))))
 		return -EIO;
+	if (!f2fs_is_checkpoint_ready(F2FS_I_SB(inode)))
+		return -ENOSPC;
 
 	/* f2fs only support ->fallocate for regular file */
 	if (!S_ISREG(inode->i_mode))
@@ -1661,44 +1711,22 @@
 	return 0;
 }
 
-static int f2fs_ioc_getflags(struct file *filp, unsigned long arg)
-{
-	struct inode *inode = file_inode(filp);
-	struct f2fs_inode_info *fi = F2FS_I(inode);
-	unsigned int flags = fi->i_flags;
-
-	if (IS_ENCRYPTED(inode))
-		flags |= F2FS_ENCRYPT_FL;
-	if (f2fs_has_inline_data(inode) || f2fs_has_inline_dentry(inode))
-		flags |= F2FS_INLINE_DATA_FL;
-	if (is_inode_flag_set(inode, FI_PIN_FILE))
-		flags |= F2FS_NOCOW_FL;
-
-	flags &= F2FS_FL_USER_VISIBLE;
-
-	return put_user(flags, (int __user *)arg);
-}
-
-static int __f2fs_ioc_setflags(struct inode *inode, unsigned int flags)
+static int f2fs_setflags_common(struct inode *inode, u32 iflags, u32 mask)
 {
 	struct f2fs_inode_info *fi = F2FS_I(inode);
-	unsigned int oldflags;
 
 	/* Is it quota file? Do not allow user to mess with it */
 	if (IS_NOQUOTA(inode))
 		return -EPERM;
 
-	flags = f2fs_mask_flags(inode->i_mode, flags);
+	if ((iflags ^ fi->i_flags) & F2FS_CASEFOLD_FL) {
+		if (!f2fs_sb_has_casefold(F2FS_I_SB(inode)))
+			return -EOPNOTSUPP;
+		if (!f2fs_empty_dir(inode))
+			return -ENOTEMPTY;
+	}
 
-	oldflags = fi->i_flags;
-
-	if ((flags ^ oldflags) & (F2FS_APPEND_FL | F2FS_IMMUTABLE_FL))
-		if (!capable(CAP_LINUX_IMMUTABLE))
-			return -EPERM;
-
-	flags = flags & F2FS_FL_USER_MODIFIABLE;
-	flags |= oldflags & ~F2FS_FL_USER_MODIFIABLE;
-	fi->i_flags = flags;
+	fi->i_flags = iflags | (fi->i_flags & ~mask);
 
 	if (fi->i_flags & F2FS_PROJINHERIT_FL)
 		set_inode_flag(inode, FI_PROJ_INHERIT);
@@ -1711,26 +1739,137 @@
 	return 0;
 }
 
+/* FS_IOC_GETFLAGS and FS_IOC_SETFLAGS support */
+
+/*
+ * To make a new on-disk f2fs i_flag gettable via FS_IOC_GETFLAGS, add an entry
+ * for it to f2fs_fsflags_map[], and add its FS_*_FL equivalent to
+ * F2FS_GETTABLE_FS_FL.  To also make it settable via FS_IOC_SETFLAGS, also add
+ * its FS_*_FL equivalent to F2FS_SETTABLE_FS_FL.
+ */
+
+static const struct {
+	u32 iflag;
+	u32 fsflag;
+} f2fs_fsflags_map[] = {
+	{ F2FS_SYNC_FL,		FS_SYNC_FL },
+	{ F2FS_IMMUTABLE_FL,	FS_IMMUTABLE_FL },
+	{ F2FS_APPEND_FL,	FS_APPEND_FL },
+	{ F2FS_NODUMP_FL,	FS_NODUMP_FL },
+	{ F2FS_NOATIME_FL,	FS_NOATIME_FL },
+	{ F2FS_INDEX_FL,	FS_INDEX_FL },
+	{ F2FS_DIRSYNC_FL,	FS_DIRSYNC_FL },
+	{ F2FS_PROJINHERIT_FL,	FS_PROJINHERIT_FL },
+	{ F2FS_CASEFOLD_FL,	FS_CASEFOLD_FL },
+};
+
+#define F2FS_GETTABLE_FS_FL (		\
+		FS_SYNC_FL |		\
+		FS_IMMUTABLE_FL |	\
+		FS_APPEND_FL |		\
+		FS_NODUMP_FL |		\
+		FS_NOATIME_FL |		\
+		FS_INDEX_FL |		\
+		FS_DIRSYNC_FL |		\
+		FS_PROJINHERIT_FL |	\
+		FS_ENCRYPT_FL |		\
+		FS_INLINE_DATA_FL |	\
+		FS_NOCOW_FL |		\
+		FS_VERITY_FL |		\
+		FS_CASEFOLD_FL)
+
+#define F2FS_SETTABLE_FS_FL (		\
+		FS_SYNC_FL |		\
+		FS_IMMUTABLE_FL |	\
+		FS_APPEND_FL |		\
+		FS_NODUMP_FL |		\
+		FS_NOATIME_FL |		\
+		FS_DIRSYNC_FL |		\
+		FS_PROJINHERIT_FL |	\
+		FS_CASEFOLD_FL)
+
+/* Convert f2fs on-disk i_flags to FS_IOC_{GET,SET}FLAGS flags */
+static inline u32 f2fs_iflags_to_fsflags(u32 iflags)
+{
+	u32 fsflags = 0;
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(f2fs_fsflags_map); i++)
+		if (iflags & f2fs_fsflags_map[i].iflag)
+			fsflags |= f2fs_fsflags_map[i].fsflag;
+
+	return fsflags;
+}
+
+/* Convert FS_IOC_{GET,SET}FLAGS flags to f2fs on-disk i_flags */
+static inline u32 f2fs_fsflags_to_iflags(u32 fsflags)
+{
+	u32 iflags = 0;
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(f2fs_fsflags_map); i++)
+		if (fsflags & f2fs_fsflags_map[i].fsflag)
+			iflags |= f2fs_fsflags_map[i].iflag;
+
+	return iflags;
+}
+
+static int f2fs_ioc_getflags(struct file *filp, unsigned long arg)
+{
+	struct inode *inode = file_inode(filp);
+	struct f2fs_inode_info *fi = F2FS_I(inode);
+	u32 fsflags = f2fs_iflags_to_fsflags(fi->i_flags);
+
+	if (IS_ENCRYPTED(inode))
+		fsflags |= FS_ENCRYPT_FL;
+	if (IS_VERITY(inode))
+		fsflags |= FS_VERITY_FL;
+	if (f2fs_has_inline_data(inode) || f2fs_has_inline_dentry(inode))
+		fsflags |= FS_INLINE_DATA_FL;
+	if (is_inode_flag_set(inode, FI_PIN_FILE))
+		fsflags |= FS_NOCOW_FL;
+
+	fsflags &= F2FS_GETTABLE_FS_FL;
+
+	return put_user(fsflags, (int __user *)arg);
+}
+
 static int f2fs_ioc_setflags(struct file *filp, unsigned long arg)
 {
 	struct inode *inode = file_inode(filp);
-	unsigned int flags;
+	struct f2fs_inode_info *fi = F2FS_I(inode);
+	u32 fsflags, old_fsflags;
+	u32 iflags;
 	int ret;
 
 	if (!inode_owner_or_capable(inode))
 		return -EACCES;
 
-	if (get_user(flags, (int __user *)arg))
+	if (get_user(fsflags, (int __user *)arg))
 		return -EFAULT;
 
+	if (fsflags & ~F2FS_GETTABLE_FS_FL)
+		return -EOPNOTSUPP;
+	fsflags &= F2FS_SETTABLE_FS_FL;
+
+	iflags = f2fs_fsflags_to_iflags(fsflags);
+	if (f2fs_mask_flags(inode->i_mode, iflags) != iflags)
+		return -EOPNOTSUPP;
+
 	ret = mnt_want_write_file(filp);
 	if (ret)
 		return ret;
 
 	inode_lock(inode);
 
-	ret = __f2fs_ioc_setflags(inode, flags);
+	old_fsflags = f2fs_iflags_to_fsflags(fi->i_flags);
+	ret = vfs_ioc_setflags_prepare(inode, old_fsflags, fsflags);
+	if (ret)
+		goto out;
 
+	ret = f2fs_setflags_common(inode, iflags,
+			f2fs_fsflags_to_iflags(F2FS_SETTABLE_FS_FL));
+out:
 	inode_unlock(inode);
 	mnt_drop_write_file(filp);
 	return ret;
@@ -1756,6 +1895,9 @@
 	if (!S_ISREG(inode->i_mode))
 		return -EINVAL;
 
+	if (filp->f_flags & O_DIRECT)
+		return -EINVAL;
+
 	ret = mnt_want_write_file(filp);
 	if (ret)
 		return ret;
@@ -1779,9 +1921,8 @@
 	 * f2fs_is_atomic_file.
 	 */
 	if (get_dirty_pages(inode))
-		f2fs_msg(F2FS_I_SB(inode)->sb, KERN_WARNING,
-		"Unexpected flush for atomic writes: ino=%lu, npages=%u",
-					inode->i_ino, get_dirty_pages(inode));
+		f2fs_warn(F2FS_I_SB(inode), "Unexpected flush for atomic writes: ino=%lu, npages=%u",
+			  inode->i_ino, get_dirty_pages(inode));
 	ret = filemap_write_and_wait_range(inode->i_mapping, 0, LLONG_MAX);
 	if (ret) {
 		up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
@@ -1791,6 +1932,7 @@
 	spin_lock(&sbi->inode_lock[ATOMIC_FILE]);
 	if (list_empty(&fi->inmem_ilist))
 		list_add_tail(&fi->inmem_ilist, &sbi->inode_list[ATOMIC_FILE]);
+	sbi->atomic_files++;
 	spin_unlock(&sbi->inode_lock[ATOMIC_FILE]);
 
 	/* add inode in inmem_list first and set atomic_file */
@@ -2219,8 +2361,7 @@
 		return -EROFS;
 
 	if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED))) {
-		f2fs_msg(sbi->sb, KERN_INFO,
-			"Skipping Checkpoint. Checkpoints currently disabled.");
+		f2fs_info(sbi, "Skipping Checkpoint. Checkpoints currently disabled.");
 		return -EINVAL;
 	}
 
@@ -2306,10 +2447,12 @@
 		map.m_lblk += map.m_len;
 	}
 
-	if (!fragmented)
+	if (!fragmented) {
+		total = 0;
 		goto out;
+	}
 
-	sec_num = (total + BLKS_PER_SEC(sbi) - 1) / BLKS_PER_SEC(sbi);
+	sec_num = DIV_ROUND_UP(total, BLKS_PER_SEC(sbi));
 
 	/*
 	 * make sure there are enough free section for LFS allocation, this can
@@ -2337,7 +2480,7 @@
 
 		if (!(map.m_flags & F2FS_MAP_FLAGS)) {
 			map.m_lblk = next_pgofs;
-			continue;
+			goto check;
 		}
 
 		set_inode_flag(inode, FI_DO_DEFRAG);
@@ -2361,8 +2504,8 @@
 		}
 
 		map.m_lblk = idx;
-
-		if (idx < pg_end && cnt < blk_per_seg)
+check:
+		if (map.m_lblk < pg_end && cnt < blk_per_seg)
 			goto do_map;
 
 		clear_inode_flag(inode, FI_DO_DEFRAG);
@@ -2605,10 +2748,8 @@
 
 	if (!f2fs_is_multi_device(sbi) || sbi->s_ndevs - 1 <= range.dev_num ||
 			__is_large_section(sbi)) {
-		f2fs_msg(sbi->sb, KERN_WARNING,
-			"Can't flush %u in %d for segs_per_sec %u != 1",
-				range.dev_num, sbi->s_ndevs,
-				sbi->segs_per_sec);
+		f2fs_warn(sbi, "Can't flush %u in %d for segs_per_sec %u != 1",
+			  range.dev_num, sbi->s_ndevs, sbi->segs_per_sec);
 		return -EINVAL;
 	}
 
@@ -2745,100 +2886,87 @@
 }
 #endif
 
-/* Transfer internal flags to xflags */
-static inline __u32 f2fs_iflags_to_xflags(unsigned long iflags)
-{
-	__u32 xflags = 0;
+/* FS_IOC_FSGETXATTR and FS_IOC_FSSETXATTR support */
 
-	if (iflags & F2FS_SYNC_FL)
-		xflags |= FS_XFLAG_SYNC;
-	if (iflags & F2FS_IMMUTABLE_FL)
-		xflags |= FS_XFLAG_IMMUTABLE;
-	if (iflags & F2FS_APPEND_FL)
-		xflags |= FS_XFLAG_APPEND;
-	if (iflags & F2FS_NODUMP_FL)
-		xflags |= FS_XFLAG_NODUMP;
-	if (iflags & F2FS_NOATIME_FL)
-		xflags |= FS_XFLAG_NOATIME;
-	if (iflags & F2FS_PROJINHERIT_FL)
-		xflags |= FS_XFLAG_PROJINHERIT;
+/*
+ * To make a new on-disk f2fs i_flag gettable via FS_IOC_FSGETXATTR and settable
+ * via FS_IOC_FSSETXATTR, add an entry for it to f2fs_xflags_map[], and add its
+ * FS_XFLAG_* equivalent to F2FS_SUPPORTED_XFLAGS.
+ */
+
+static const struct {
+	u32 iflag;
+	u32 xflag;
+} f2fs_xflags_map[] = {
+	{ F2FS_SYNC_FL,		FS_XFLAG_SYNC },
+	{ F2FS_IMMUTABLE_FL,	FS_XFLAG_IMMUTABLE },
+	{ F2FS_APPEND_FL,	FS_XFLAG_APPEND },
+	{ F2FS_NODUMP_FL,	FS_XFLAG_NODUMP },
+	{ F2FS_NOATIME_FL,	FS_XFLAG_NOATIME },
+	{ F2FS_PROJINHERIT_FL,	FS_XFLAG_PROJINHERIT },
+};
+
+#define F2FS_SUPPORTED_XFLAGS (		\
+		FS_XFLAG_SYNC |		\
+		FS_XFLAG_IMMUTABLE |	\
+		FS_XFLAG_APPEND |	\
+		FS_XFLAG_NODUMP |	\
+		FS_XFLAG_NOATIME |	\
+		FS_XFLAG_PROJINHERIT)
+
+/* Convert f2fs on-disk i_flags to FS_IOC_FS{GET,SET}XATTR flags */
+static inline u32 f2fs_iflags_to_xflags(u32 iflags)
+{
+	u32 xflags = 0;
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(f2fs_xflags_map); i++)
+		if (iflags & f2fs_xflags_map[i].iflag)
+			xflags |= f2fs_xflags_map[i].xflag;
+
 	return xflags;
 }
 
-#define F2FS_SUPPORTED_FS_XFLAGS (FS_XFLAG_SYNC | FS_XFLAG_IMMUTABLE | \
-				  FS_XFLAG_APPEND | FS_XFLAG_NODUMP | \
-				  FS_XFLAG_NOATIME | FS_XFLAG_PROJINHERIT)
-
-/* Transfer xflags flags to internal */
-static inline unsigned long f2fs_xflags_to_iflags(__u32 xflags)
+/* Convert FS_IOC_FS{GET,SET}XATTR flags to f2fs on-disk i_flags */
+static inline u32 f2fs_xflags_to_iflags(u32 xflags)
 {
-	unsigned long iflags = 0;
+	u32 iflags = 0;
+	int i;
 
-	if (xflags & FS_XFLAG_SYNC)
-		iflags |= F2FS_SYNC_FL;
-	if (xflags & FS_XFLAG_IMMUTABLE)
-		iflags |= F2FS_IMMUTABLE_FL;
-	if (xflags & FS_XFLAG_APPEND)
-		iflags |= F2FS_APPEND_FL;
-	if (xflags & FS_XFLAG_NODUMP)
-		iflags |= F2FS_NODUMP_FL;
-	if (xflags & FS_XFLAG_NOATIME)
-		iflags |= F2FS_NOATIME_FL;
-	if (xflags & FS_XFLAG_PROJINHERIT)
-		iflags |= F2FS_PROJINHERIT_FL;
+	for (i = 0; i < ARRAY_SIZE(f2fs_xflags_map); i++)
+		if (xflags & f2fs_xflags_map[i].xflag)
+			iflags |= f2fs_xflags_map[i].iflag;
 
 	return iflags;
 }
 
+static void f2fs_fill_fsxattr(struct inode *inode, struct fsxattr *fa)
+{
+	struct f2fs_inode_info *fi = F2FS_I(inode);
+
+	simple_fill_fsxattr(fa, f2fs_iflags_to_xflags(fi->i_flags));
+
+	if (f2fs_sb_has_project_quota(F2FS_I_SB(inode)))
+		fa->fsx_projid = from_kprojid(&init_user_ns, fi->i_projid);
+}
+
 static int f2fs_ioc_fsgetxattr(struct file *filp, unsigned long arg)
 {
 	struct inode *inode = file_inode(filp);
-	struct f2fs_inode_info *fi = F2FS_I(inode);
 	struct fsxattr fa;
 
-	memset(&fa, 0, sizeof(struct fsxattr));
-	fa.fsx_xflags = f2fs_iflags_to_xflags(fi->i_flags &
-				F2FS_FL_USER_VISIBLE);
-
-	if (f2fs_sb_has_project_quota(F2FS_I_SB(inode)))
-		fa.fsx_projid = (__u32)from_kprojid(&init_user_ns,
-							fi->i_projid);
+	f2fs_fill_fsxattr(inode, &fa);
 
 	if (copy_to_user((struct fsxattr __user *)arg, &fa, sizeof(fa)))
 		return -EFAULT;
 	return 0;
 }
 
-static int f2fs_ioctl_check_project(struct inode *inode, struct fsxattr *fa)
-{
-	/*
-	 * Project Quota ID state is only allowed to change from within the init
-	 * namespace. Enforce that restriction only if we are trying to change
-	 * the quota ID state. Everything else is allowed in user namespaces.
-	 */
-	if (current_user_ns() == &init_user_ns)
-		return 0;
-
-	if (__kprojid_val(F2FS_I(inode)->i_projid) != fa->fsx_projid)
-		return -EINVAL;
-
-	if (F2FS_I(inode)->i_flags & F2FS_PROJINHERIT_FL) {
-		if (!(fa->fsx_xflags & FS_XFLAG_PROJINHERIT))
-			return -EINVAL;
-	} else {
-		if (fa->fsx_xflags & FS_XFLAG_PROJINHERIT)
-			return -EINVAL;
-	}
-
-	return 0;
-}
-
 static int f2fs_ioc_fssetxattr(struct file *filp, unsigned long arg)
 {
 	struct inode *inode = file_inode(filp);
-	struct f2fs_inode_info *fi = F2FS_I(inode);
-	struct fsxattr fa;
-	unsigned int flags;
+	struct fsxattr fa, old_fa;
+	u32 iflags;
 	int err;
 
 	if (copy_from_user(&fa, (struct fsxattr __user *)arg, sizeof(fa)))
@@ -2848,11 +2976,11 @@
 	if (!inode_owner_or_capable(inode))
 		return -EACCES;
 
-	if (fa.fsx_xflags & ~F2FS_SUPPORTED_FS_XFLAGS)
+	if (fa.fsx_xflags & ~F2FS_SUPPORTED_XFLAGS)
 		return -EOPNOTSUPP;
 
-	flags = f2fs_xflags_to_iflags(fa.fsx_xflags);
-	if (f2fs_mask_flags(inode->i_mode, flags) != flags)
+	iflags = f2fs_xflags_to_iflags(fa.fsx_xflags);
+	if (f2fs_mask_flags(inode->i_mode, iflags) != iflags)
 		return -EOPNOTSUPP;
 
 	err = mnt_want_write_file(filp);
@@ -2860,12 +2988,14 @@
 		return err;
 
 	inode_lock(inode);
-	err = f2fs_ioctl_check_project(inode, &fa);
+
+	f2fs_fill_fsxattr(inode, &old_fa);
+	err = vfs_ioc_fssetxattr_check(inode, &old_fa, &fa);
 	if (err)
 		goto out;
-	flags = (fi->i_flags & ~F2FS_FL_XFLAG_VISIBLE) |
-				(flags & F2FS_FL_XFLAG_VISIBLE);
-	err = __f2fs_ioc_setflags(inode, flags);
+
+	err = f2fs_setflags_common(inode, iflags,
+			f2fs_xflags_to_iflags(F2FS_SUPPORTED_XFLAGS));
 	if (err)
 		goto out;
 
@@ -2887,10 +3017,9 @@
 				fi->i_gc_failures[GC_FAILURE_PIN] + 1);
 
 	if (fi->i_gc_failures[GC_FAILURE_PIN] > sbi->gc_pin_file_threshold) {
-		f2fs_msg(sbi->sb, KERN_WARNING,
-			"%s: Enable GC = ino %lx after %x GC trials",
-			__func__, inode->i_ino,
-			fi->i_gc_failures[GC_FAILURE_PIN]);
+		f2fs_warn(sbi, "%s: Enable GC = ino %lx after %x GC trials",
+			  __func__, inode->i_ino,
+			  fi->i_gc_failures[GC_FAILURE_PIN]);
 		clear_inode_flag(inode, FI_PIN_FILE);
 		return -EAGAIN;
 	}
@@ -2903,9 +3032,6 @@
 	__u32 pin;
 	int ret = 0;
 
-	if (!capable(CAP_SYS_ADMIN))
-		return -EPERM;
-
 	if (get_user(pin, (__u32 __user *)arg))
 		return -EFAULT;
 
@@ -2998,10 +3124,119 @@
 	return f2fs_precache_extents(file_inode(filp));
 }
 
+static int f2fs_ioc_resize_fs(struct file *filp, unsigned long arg)
+{
+	struct f2fs_sb_info *sbi = F2FS_I_SB(file_inode(filp));
+	__u64 block_count;
+	int ret;
+
+	if (!capable(CAP_SYS_ADMIN))
+		return -EPERM;
+
+	if (f2fs_readonly(sbi->sb))
+		return -EROFS;
+
+	if (copy_from_user(&block_count, (void __user *)arg,
+			   sizeof(block_count)))
+		return -EFAULT;
+
+	ret = f2fs_resize_fs(sbi, block_count);
+
+	return ret;
+}
+
+static int f2fs_ioc_enable_verity(struct file *filp, unsigned long arg)
+{
+	struct inode *inode = file_inode(filp);
+
+	f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
+
+	if (!f2fs_sb_has_verity(F2FS_I_SB(inode))) {
+		f2fs_warn(F2FS_I_SB(inode),
+			  "Can't enable fs-verity on inode %lu: the verity feature is not enabled on this filesystem.\n",
+			  inode->i_ino);
+		return -EOPNOTSUPP;
+	}
+
+	return fsverity_ioctl_enable(filp, (const void __user *)arg);
+}
+
+static int f2fs_ioc_measure_verity(struct file *filp, unsigned long arg)
+{
+	if (!f2fs_sb_has_verity(F2FS_I_SB(file_inode(filp))))
+		return -EOPNOTSUPP;
+
+	return fsverity_ioctl_measure(filp, (void __user *)arg);
+}
+
+static int f2fs_get_volume_name(struct file *filp, unsigned long arg)
+{
+	struct inode *inode = file_inode(filp);
+	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
+	char *vbuf;
+	int count;
+	int err = 0;
+
+	vbuf = f2fs_kzalloc(sbi, MAX_VOLUME_NAME, GFP_KERNEL);
+	if (!vbuf)
+		return -ENOMEM;
+
+	down_read(&sbi->sb_lock);
+	count = utf16s_to_utf8s(sbi->raw_super->volume_name,
+			ARRAY_SIZE(sbi->raw_super->volume_name),
+			UTF16_LITTLE_ENDIAN, vbuf, MAX_VOLUME_NAME);
+	up_read(&sbi->sb_lock);
+
+	if (copy_to_user((char __user *)arg, vbuf,
+				min(FSLABEL_MAX, count)))
+		err = -EFAULT;
+
+	kvfree(vbuf);
+	return err;
+}
+
+static int f2fs_set_volume_name(struct file *filp, unsigned long arg)
+{
+	struct inode *inode = file_inode(filp);
+	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
+	char *vbuf;
+	int err = 0;
+
+	if (!capable(CAP_SYS_ADMIN))
+		return -EPERM;
+
+	vbuf = strndup_user((const char __user *)arg, FSLABEL_MAX);
+	if (IS_ERR(vbuf))
+		return PTR_ERR(vbuf);
+
+	err = mnt_want_write_file(filp);
+	if (err)
+		goto out;
+
+	down_write(&sbi->sb_lock);
+
+	memset(sbi->raw_super->volume_name, 0,
+			sizeof(sbi->raw_super->volume_name));
+	utf8s_to_utf16s(vbuf, strlen(vbuf), UTF16_LITTLE_ENDIAN,
+			sbi->raw_super->volume_name,
+			ARRAY_SIZE(sbi->raw_super->volume_name));
+
+	err = f2fs_commit_super(sbi, false);
+
+	up_write(&sbi->sb_lock);
+
+	mnt_drop_write_file(filp);
+out:
+	kfree(vbuf);
+	return err;
+}
+
 long f2fs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
 {
 	if (unlikely(f2fs_cp_error(F2FS_I_SB(file_inode(filp)))))
 		return -EIO;
+	if (!f2fs_is_checkpoint_ready(F2FS_I_SB(file_inode(filp))))
+		return -ENOSPC;
 
 	switch (cmd) {
 	case F2FS_IOC_GETFLAGS:
@@ -3054,6 +3289,16 @@
 		return f2fs_ioc_set_pin_file(filp, arg);
 	case F2FS_IOC_PRECACHE_EXTENTS:
 		return f2fs_ioc_precache_extents(filp, arg);
+	case F2FS_IOC_RESIZE_FS:
+		return f2fs_ioc_resize_fs(filp, arg);
+	case FS_IOC_ENABLE_VERITY:
+		return f2fs_ioc_enable_verity(filp, arg);
+	case FS_IOC_MEASURE_VERITY:
+		return f2fs_ioc_measure_verity(filp, arg);
+	case F2FS_IOC_GET_VOLUME_NAME:
+		return f2fs_get_volume_name(filp, arg);
+	case F2FS_IOC_SET_VOLUME_NAME:
+		return f2fs_set_volume_name(filp, arg);
 	default:
 		return -ENOTTY;
 	}
@@ -3070,16 +3315,12 @@
 		goto out;
 	}
 
-	if ((iocb->ki_flags & IOCB_NOWAIT) && !(iocb->ki_flags & IOCB_DIRECT)) {
-		ret = -EINVAL;
-		goto out;
-	}
-
-	if (!inode_trylock(inode)) {
-		if (iocb->ki_flags & IOCB_NOWAIT) {
+	if (iocb->ki_flags & IOCB_NOWAIT) {
+		if (!inode_trylock(inode)) {
 			ret = -EAGAIN;
 			goto out;
 		}
+	} else {
 		inode_lock(inode);
 	}
 
@@ -3167,6 +3408,11 @@
 	case F2FS_IOC_GET_PIN_FILE:
 	case F2FS_IOC_SET_PIN_FILE:
 	case F2FS_IOC_PRECACHE_EXTENTS:
+	case F2FS_IOC_RESIZE_FS:
+	case FS_IOC_ENABLE_VERITY:
+	case FS_IOC_MEASURE_VERITY:
+	case F2FS_IOC_GET_VOLUME_NAME:
+	case F2FS_IOC_SET_VOLUME_NAME:
 		break;
 	default:
 		return -ENOIOCTLCMD;
diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
index f953085..b3d3996 100644
--- a/fs/f2fs/gc.c
+++ b/fs/f2fs/gc.c
@@ -54,7 +54,7 @@
 		}
 
 		if (time_to_inject(sbi, FAULT_CHECKPOINT)) {
-			f2fs_show_injection_info(FAULT_CHECKPOINT);
+			f2fs_show_injection_info(sbi, FAULT_CHECKPOINT);
 			f2fs_stop_checkpoint(sbi, false);
 		}
 
@@ -311,10 +311,11 @@
 	struct sit_info *sm = SIT_I(sbi);
 	struct victim_sel_policy p;
 	unsigned int secno, last_victim;
-	unsigned int last_segment = MAIN_SEGS(sbi);
+	unsigned int last_segment;
 	unsigned int nsearched = 0;
 
 	mutex_lock(&dirty_i->seglist_lock);
+	last_segment = MAIN_SECS(sbi) * sbi->segs_per_sec;
 
 	p.alloc_mode = alloc_mode;
 	select_policy(sbi, gc_type, type, &p);
@@ -381,13 +382,24 @@
 			nsearched++;
 		}
 
+#ifdef CONFIG_F2FS_CHECK_FS
+		/*
+		 * skip selecting the invalid segno (that is failed due to block
+		 * validity check failure during GC) to avoid endless GC loop in
+		 * such cases.
+		 */
+		if (test_bit(segno, sm->invalid_segmap))
+			goto next;
+#endif
+
 		secno = GET_SEC_FROM_SEG(sbi, segno);
 
 		if (sec_usage_check(sbi, secno))
 			goto next;
 		/* Don't touch checkpointed data */
 		if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED) &&
-					get_ckpt_valid_blocks(sbi, segno)))
+					get_ckpt_valid_blocks(sbi, segno) &&
+					p.alloc_mode != SSR))
 			goto next;
 		if (gc_type == BG_GC && test_bit(secno, dirty_i->victim_secmap))
 			goto next;
@@ -404,7 +416,8 @@
 				sm->last_victim[p.gc_mode] = last_victim + 1;
 			else
 				sm->last_victim[p.gc_mode] = segno + 1;
-			sm->last_victim[p.gc_mode] %= MAIN_SEGS(sbi);
+			sm->last_victim[p.gc_mode] %=
+				(MAIN_SECS(sbi) * sbi->segs_per_sec);
 			break;
 		}
 	}
@@ -615,9 +628,8 @@
 	}
 
 	if (sum->version != dni->version) {
-		f2fs_msg(sbi->sb, KERN_WARNING,
-				"%s: valid data with mismatched node version.",
-				__func__);
+		f2fs_warn(sbi, "%s: valid data with mismatched node version.",
+			  __func__);
 		set_sbi_flag(sbi, SBI_NEED_FSCK);
 	}
 
@@ -625,8 +637,21 @@
 	source_blkaddr = datablock_addr(NULL, node_page, ofs_in_node);
 	f2fs_put_page(node_page, 1);
 
-	if (source_blkaddr != blkaddr)
+	if (source_blkaddr != blkaddr) {
+#ifdef CONFIG_F2FS_CHECK_FS
+		unsigned int segno = GET_SEGNO(sbi, blkaddr);
+		unsigned long offset = GET_BLKOFF_FROM_SEG0(sbi, blkaddr);
+
+		if (unlikely(check_valid_map(sbi, segno, offset))) {
+			if (!test_and_set_bit(segno, SIT_I(sbi)->invalid_segmap)) {
+				f2fs_err(sbi, "mismatched blkaddr %u (source_blkaddr %u) in seg %u\n",
+						blkaddr, source_blkaddr, segno);
+				f2fs_bug_on(sbi, 1);
+			}
+		}
+#endif
 		return false;
+	}
 	return true;
 }
 
@@ -658,7 +683,7 @@
 		dn.data_blkaddr = ei.blk + index - ei.fofs;
 		if (unlikely(!f2fs_is_valid_blkaddr(sbi, dn.data_blkaddr,
 						DATA_GENERIC_ENHANCE_READ))) {
-			err = -EFAULT;
+			err = -EFSCORRUPTED;
 			goto put_page;
 		}
 		goto got_it;
@@ -794,6 +819,29 @@
 	if (lfs_mode)
 		down_write(&fio.sbi->io_order_lock);
 
+	mpage = f2fs_grab_cache_page(META_MAPPING(fio.sbi),
+					fio.old_blkaddr, false);
+	if (!mpage)
+		goto up_out;
+
+	fio.encrypted_page = mpage;
+
+	/* read source block in mpage */
+	if (!PageUptodate(mpage)) {
+		err = f2fs_submit_page_bio(&fio);
+		if (err) {
+			f2fs_put_page(mpage, 1);
+			goto up_out;
+		}
+		lock_page(mpage);
+		if (unlikely(mpage->mapping != META_MAPPING(fio.sbi) ||
+						!PageUptodate(mpage))) {
+			err = -EIO;
+			f2fs_put_page(mpage, 1);
+			goto up_out;
+		}
+	}
+
 	f2fs_allocate_data_block(fio.sbi, NULL, fio.old_blkaddr, &newaddr,
 					&sum, CURSEG_COLD_DATA, NULL, false);
 
@@ -801,44 +849,18 @@
 				newaddr, FGP_LOCK | FGP_CREAT, GFP_NOFS);
 	if (!fio.encrypted_page) {
 		err = -ENOMEM;
+		f2fs_put_page(mpage, 1);
 		goto recover_block;
 	}
 
-	mpage = f2fs_pagecache_get_page(META_MAPPING(fio.sbi),
-					fio.old_blkaddr, FGP_LOCK, GFP_NOFS);
-	if (mpage) {
-		bool updated = false;
-
-		if (PageUptodate(mpage)) {
-			memcpy(page_address(fio.encrypted_page),
-					page_address(mpage), PAGE_SIZE);
-			updated = true;
-		}
-		f2fs_put_page(mpage, 1);
-		invalidate_mapping_pages(META_MAPPING(fio.sbi),
-					fio.old_blkaddr, fio.old_blkaddr);
-		if (updated)
-			goto write_page;
-	}
-
-	err = f2fs_submit_page_bio(&fio);
-	if (err)
-		goto put_page_out;
-
-	/* write page */
-	lock_page(fio.encrypted_page);
-
-	if (unlikely(fio.encrypted_page->mapping != META_MAPPING(fio.sbi))) {
-		err = -EIO;
-		goto put_page_out;
-	}
-	if (unlikely(!PageUptodate(fio.encrypted_page))) {
-		err = -EIO;
-		goto put_page_out;
-	}
-
-write_page:
+	/* write target block */
 	f2fs_wait_on_page_writeback(fio.encrypted_page, DATA, true, true);
+	memcpy(page_address(fio.encrypted_page),
+				page_address(mpage), PAGE_SIZE);
+	f2fs_put_page(mpage, 1);
+	invalidate_mapping_pages(META_MAPPING(fio.sbi),
+				fio.old_blkaddr, fio.old_blkaddr);
+
 	set_page_dirty(fio.encrypted_page);
 	if (clear_page_dirty_for_io(fio.encrypted_page))
 		dec_page_count(fio.sbi, F2FS_DIRTY_META);
@@ -869,11 +891,12 @@
 put_page_out:
 	f2fs_put_page(fio.encrypted_page, 1);
 recover_block:
-	if (lfs_mode)
-		up_write(&fio.sbi->io_order_lock);
 	if (err)
 		f2fs_do_replace_block(fio.sbi, &sum, newaddr, fio.old_blkaddr,
 								true, true);
+up_out:
+	if (lfs_mode)
+		up_write(&fio.sbi->io_order_lock);
 put_out:
 	f2fs_put_dnode(&dn);
 out:
@@ -989,8 +1012,14 @@
 		block_t start_bidx;
 		nid_t nid = le32_to_cpu(entry->nid);
 
-		/* stop BG_GC if there is not enough free sections. */
-		if (gc_type == BG_GC && has_not_enough_free_secs(sbi, 0, 0))
+		/*
+		 * stop BG_GC if there is not enough free sections.
+		 * Or, stop GC if the segment becomes fully valid caused by
+		 * race condition along with SSR block allocation.
+		 */
+		if ((gc_type == BG_GC && has_not_enough_free_secs(sbi, 0, 0)) ||
+				get_valid_blocks(sbi, segno, false) ==
+							sbi->blocks_per_seg)
 			return submitted;
 
 		if (check_valid_map(sbi, segno, off) == 0)
@@ -1180,9 +1209,8 @@
 
 		sum = page_address(sum_page);
 		if (type != GET_SUM_TYPE((&sum->footer))) {
-			f2fs_msg(sbi->sb, KERN_ERR, "Inconsistent segment (%u) "
-				"type [%d, %d] in SSA and SIT",
-				segno, type, GET_SUM_TYPE((&sum->footer)));
+			f2fs_err(sbi, "Inconsistent segment (%u) type [%d, %d] in SSA and SIT",
+				 segno, type, GET_SUM_TYPE((&sum->footer)));
 			set_sbi_flag(sbi, SBI_NEED_FSCK);
 			f2fs_stop_checkpoint(sbi, false);
 			goto skip;
@@ -1304,7 +1332,7 @@
 		round++;
 	}
 
-	if (gc_type == FG_GC)
+	if (gc_type == FG_GC && seg_freed)
 		sbi->cur_victim_sec = NULL_SEGNO;
 
 	if (sync)
@@ -1360,3 +1388,206 @@
 		SIT_I(sbi)->last_victim[ALLOC_NEXT] =
 				GET_SEGNO(sbi, FDEV(0).end_blk) + 1;
 }
+
+static int free_segment_range(struct f2fs_sb_info *sbi, unsigned int start,
+							unsigned int end)
+{
+	int type;
+	unsigned int segno, next_inuse;
+	int err = 0;
+
+	/* Move out cursegs from the target range */
+	for (type = CURSEG_HOT_DATA; type < NR_CURSEG_TYPE; type++)
+		allocate_segment_for_resize(sbi, type, start, end);
+
+	/* do GC to move out valid blocks in the range */
+	for (segno = start; segno <= end; segno += sbi->segs_per_sec) {
+		struct gc_inode_list gc_list = {
+			.ilist = LIST_HEAD_INIT(gc_list.ilist),
+			.iroot = RADIX_TREE_INIT(gc_list.iroot, GFP_NOFS),
+		};
+
+		mutex_lock(&sbi->gc_mutex);
+		do_garbage_collect(sbi, segno, &gc_list, FG_GC);
+		mutex_unlock(&sbi->gc_mutex);
+		put_gc_inode(&gc_list);
+
+		if (get_valid_blocks(sbi, segno, true))
+			return -EAGAIN;
+	}
+
+	err = f2fs_sync_fs(sbi->sb, 1);
+	if (err)
+		return err;
+
+	next_inuse = find_next_inuse(FREE_I(sbi), end + 1, start);
+	if (next_inuse <= end) {
+		f2fs_err(sbi, "segno %u should be free but still inuse!",
+			 next_inuse);
+		f2fs_bug_on(sbi, 1);
+	}
+	return err;
+}
+
+static void update_sb_metadata(struct f2fs_sb_info *sbi, int secs)
+{
+	struct f2fs_super_block *raw_sb = F2FS_RAW_SUPER(sbi);
+	int section_count = le32_to_cpu(raw_sb->section_count);
+	int segment_count = le32_to_cpu(raw_sb->segment_count);
+	int segment_count_main = le32_to_cpu(raw_sb->segment_count_main);
+	long long block_count = le64_to_cpu(raw_sb->block_count);
+	int segs = secs * sbi->segs_per_sec;
+
+	raw_sb->section_count = cpu_to_le32(section_count + secs);
+	raw_sb->segment_count = cpu_to_le32(segment_count + segs);
+	raw_sb->segment_count_main = cpu_to_le32(segment_count_main + segs);
+	raw_sb->block_count = cpu_to_le64(block_count +
+					(long long)segs * sbi->blocks_per_seg);
+	if (f2fs_is_multi_device(sbi)) {
+		int last_dev = sbi->s_ndevs - 1;
+		int dev_segs =
+			le32_to_cpu(raw_sb->devs[last_dev].total_segments);
+
+		raw_sb->devs[last_dev].total_segments =
+						cpu_to_le32(dev_segs + segs);
+	}
+}
+
+static void update_fs_metadata(struct f2fs_sb_info *sbi, int secs)
+{
+	int segs = secs * sbi->segs_per_sec;
+	long long blks = (long long)segs * sbi->blocks_per_seg;
+	long long user_block_count =
+				le64_to_cpu(F2FS_CKPT(sbi)->user_block_count);
+
+	SM_I(sbi)->segment_count = (int)SM_I(sbi)->segment_count + segs;
+	MAIN_SEGS(sbi) = (int)MAIN_SEGS(sbi) + segs;
+	FREE_I(sbi)->free_sections = (int)FREE_I(sbi)->free_sections + secs;
+	FREE_I(sbi)->free_segments = (int)FREE_I(sbi)->free_segments + segs;
+	F2FS_CKPT(sbi)->user_block_count = cpu_to_le64(user_block_count + blks);
+
+	if (f2fs_is_multi_device(sbi)) {
+		int last_dev = sbi->s_ndevs - 1;
+
+		FDEV(last_dev).total_segments =
+				(int)FDEV(last_dev).total_segments + segs;
+		FDEV(last_dev).end_blk =
+				(long long)FDEV(last_dev).end_blk + blks;
+#ifdef CONFIG_BLK_DEV_ZONED
+		FDEV(last_dev).nr_blkz = (int)FDEV(last_dev).nr_blkz +
+					(int)(blks >> sbi->log_blocks_per_blkz);
+#endif
+	}
+}
+
+int f2fs_resize_fs(struct f2fs_sb_info *sbi, __u64 block_count)
+{
+	__u64 old_block_count, shrunk_blocks;
+	unsigned int secs;
+	int gc_mode, gc_type;
+	int err = 0;
+	__u32 rem;
+
+	old_block_count = le64_to_cpu(F2FS_RAW_SUPER(sbi)->block_count);
+	if (block_count > old_block_count)
+		return -EINVAL;
+
+	if (f2fs_is_multi_device(sbi)) {
+		int last_dev = sbi->s_ndevs - 1;
+		__u64 last_segs = FDEV(last_dev).total_segments;
+
+		if (block_count + last_segs * sbi->blocks_per_seg <=
+								old_block_count)
+			return -EINVAL;
+	}
+
+	/* new fs size should align to section size */
+	div_u64_rem(block_count, BLKS_PER_SEC(sbi), &rem);
+	if (rem)
+		return -EINVAL;
+
+	if (block_count == old_block_count)
+		return 0;
+
+	if (is_sbi_flag_set(sbi, SBI_NEED_FSCK)) {
+		f2fs_err(sbi, "Should run fsck to repair first.");
+		return -EFSCORRUPTED;
+	}
+
+	if (test_opt(sbi, DISABLE_CHECKPOINT)) {
+		f2fs_err(sbi, "Checkpoint should be enabled.");
+		return -EINVAL;
+	}
+
+	freeze_bdev(sbi->sb->s_bdev);
+
+	shrunk_blocks = old_block_count - block_count;
+	secs = div_u64(shrunk_blocks, BLKS_PER_SEC(sbi));
+	spin_lock(&sbi->stat_lock);
+	if (shrunk_blocks + valid_user_blocks(sbi) +
+		sbi->current_reserved_blocks + sbi->unusable_block_count +
+		F2FS_OPTION(sbi).root_reserved_blocks > sbi->user_block_count)
+		err = -ENOSPC;
+	else
+		sbi->user_block_count -= shrunk_blocks;
+	spin_unlock(&sbi->stat_lock);
+	if (err) {
+		thaw_bdev(sbi->sb->s_bdev, sbi->sb);
+		return err;
+	}
+
+	mutex_lock(&sbi->resize_mutex);
+	set_sbi_flag(sbi, SBI_IS_RESIZEFS);
+
+	mutex_lock(&DIRTY_I(sbi)->seglist_lock);
+
+	MAIN_SECS(sbi) -= secs;
+
+	for (gc_mode = 0; gc_mode < MAX_GC_POLICY; gc_mode++)
+		if (SIT_I(sbi)->last_victim[gc_mode] >=
+					MAIN_SECS(sbi) * sbi->segs_per_sec)
+			SIT_I(sbi)->last_victim[gc_mode] = 0;
+
+	for (gc_type = BG_GC; gc_type <= FG_GC; gc_type++)
+		if (sbi->next_victim_seg[gc_type] >=
+					MAIN_SECS(sbi) * sbi->segs_per_sec)
+			sbi->next_victim_seg[gc_type] = NULL_SEGNO;
+
+	mutex_unlock(&DIRTY_I(sbi)->seglist_lock);
+
+	err = free_segment_range(sbi, MAIN_SECS(sbi) * sbi->segs_per_sec,
+			MAIN_SEGS(sbi) - 1);
+	if (err)
+		goto out;
+
+	update_sb_metadata(sbi, -secs);
+
+	err = f2fs_commit_super(sbi, false);
+	if (err) {
+		update_sb_metadata(sbi, secs);
+		goto out;
+	}
+
+	update_fs_metadata(sbi, -secs);
+	clear_sbi_flag(sbi, SBI_IS_RESIZEFS);
+	err = f2fs_sync_fs(sbi->sb, 1);
+	if (err) {
+		update_fs_metadata(sbi, secs);
+		update_sb_metadata(sbi, secs);
+		f2fs_commit_super(sbi, false);
+	}
+out:
+	if (err) {
+		set_sbi_flag(sbi, SBI_NEED_FSCK);
+		f2fs_err(sbi, "resize_fs failed, should run fsck to repair!");
+
+		MAIN_SECS(sbi) += secs;
+		spin_lock(&sbi->stat_lock);
+		sbi->user_block_count += shrunk_blocks;
+		spin_unlock(&sbi->stat_lock);
+	}
+	clear_sbi_flag(sbi, SBI_IS_RESIZEFS);
+	mutex_unlock(&sbi->resize_mutex);
+	thaw_bdev(sbi->sb->s_bdev, sbi->sb);
+	return err;
+}
diff --git a/fs/f2fs/hash.c b/fs/f2fs/hash.c
index cc82f14..5bc4dcd 100644
--- a/fs/f2fs/hash.c
+++ b/fs/f2fs/hash.c
@@ -14,6 +14,7 @@
 #include <linux/f2fs_fs.h>
 #include <linux/cryptohash.h>
 #include <linux/pagemap.h>
+#include <linux/unicode.h>
 
 #include "f2fs.h"
 
@@ -67,7 +68,7 @@
 		*buf++ = pad;
 }
 
-f2fs_hash_t f2fs_dentry_hash(const struct qstr *name_info,
+static f2fs_hash_t __f2fs_dentry_hash(const struct qstr *name_info,
 				struct fscrypt_name *fname)
 {
 	__u32 hash;
@@ -103,3 +104,37 @@
 	f2fs_hash = cpu_to_le32(hash & ~F2FS_HASH_COL_BIT);
 	return f2fs_hash;
 }
+
+f2fs_hash_t f2fs_dentry_hash(const struct inode *dir,
+		const struct qstr *name_info, struct fscrypt_name *fname)
+{
+#ifdef CONFIG_UNICODE
+	struct f2fs_sb_info *sbi = F2FS_SB(dir->i_sb);
+	const struct unicode_map *um = sbi->s_encoding;
+	int r, dlen;
+	unsigned char *buff;
+	struct qstr folded;
+
+	if (!name_info->len || !IS_CASEFOLDED(dir))
+		goto opaque_seq;
+
+	buff = f2fs_kzalloc(sbi, sizeof(char) * PATH_MAX, GFP_KERNEL);
+	if (!buff)
+		return -ENOMEM;
+
+	dlen = utf8_casefold(um, name_info, buff, PATH_MAX);
+	if (dlen < 0) {
+		kvfree(buff);
+		goto opaque_seq;
+	}
+	folded.name = buff;
+	folded.len = dlen;
+	r = __f2fs_dentry_hash(&folded, fname);
+
+	kvfree(buff);
+	return r;
+
+opaque_seq:
+#endif
+	return __f2fs_dentry_hash(name_info, fname);
+}
diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index b65c056..e98d53d 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -149,6 +149,7 @@
 
 	err = f2fs_get_node_info(fio.sbi, dn->nid, &ni);
 	if (err) {
+		f2fs_truncate_data_blocks_range(dn, 1);
 		f2fs_put_dnode(dn);
 		return err;
 	}
@@ -158,10 +159,8 @@
 	if (unlikely(dn->data_blkaddr != NEW_ADDR)) {
 		f2fs_put_dnode(dn);
 		set_sbi_flag(fio.sbi, SBI_NEED_FSCK);
-		f2fs_msg(fio.sbi->sb, KERN_WARNING,
-			"%s: corrupted inline inode ino=%lx, i_addr[0]:0x%x, "
-			"run fsck to fix.",
-			__func__, dn->inode->i_ino, dn->data_blkaddr);
+		f2fs_warn(fio.sbi, "%s: corrupted inline inode ino=%lx, i_addr[0]:0x%x, run fsck to fix.",
+			  __func__, dn->inode->i_ino, dn->data_blkaddr);
 		return -EFSCORRUPTED;
 	}
 
@@ -340,7 +339,7 @@
 		return NULL;
 	}
 
-	namehash = f2fs_dentry_hash(&name, fname);
+	namehash = f2fs_dentry_hash(dir, &name, fname);
 
 	inline_dentry = inline_data_addr(dir, ipage);
 
@@ -401,10 +400,8 @@
 	if (unlikely(dn.data_blkaddr != NEW_ADDR)) {
 		f2fs_put_dnode(&dn);
 		set_sbi_flag(F2FS_P_SB(page), SBI_NEED_FSCK);
-		f2fs_msg(F2FS_P_SB(page)->sb, KERN_WARNING,
-			"%s: corrupted inline inode ino=%lx, i_addr[0]:0x%x, "
-			"run fsck to fix.",
-			__func__, dir->i_ino, dn.data_blkaddr);
+		f2fs_warn(F2FS_P_SB(page), "%s: corrupted inline inode ino=%lx, i_addr[0]:0x%x, run fsck to fix.",
+			  __func__, dir->i_ino, dn.data_blkaddr);
 		err = -EFSCORRUPTED;
 		goto out;
 	}
@@ -602,7 +599,7 @@
 
 	f2fs_wait_on_page_writeback(ipage, NODE, true, true);
 
-	name_hash = f2fs_dentry_hash(new_name, NULL);
+	name_hash = f2fs_dentry_hash(dir, new_name, NULL);
 	f2fs_update_dentry(ino, mode, &d, new_name, name_hash, bit_pos);
 
 	set_page_dirty(ipage);
@@ -610,6 +607,11 @@
 	/* we don't need to mark_inode_dirty now */
 	if (inode) {
 		f2fs_i_pino_write(inode, dir->i_ino);
+
+		/* synchronize inode page's data from inode cache */
+		if (is_inode_flag_set(inode, FI_NEW_INODE))
+			f2fs_update_inode(inode, page);
+
 		f2fs_put_page(page, 1);
 	}
 
@@ -726,7 +728,13 @@
 	if (IS_ERR(ipage))
 		return PTR_ERR(ipage);
 
-	if (!f2fs_has_inline_data(inode)) {
+	if ((S_ISREG(inode->i_mode) || S_ISLNK(inode->i_mode)) &&
+				!f2fs_has_inline_data(inode)) {
+		err = -EAGAIN;
+		goto out;
+	}
+
+	if (S_ISDIR(inode->i_mode) && !f2fs_has_inline_dentry(inode)) {
 		err = -EAGAIN;
 		goto out;
 	}
diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index 15d0923..502bd49 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -46,9 +46,13 @@
 		new_fl |= S_DIRSYNC;
 	if (file_is_encrypt(inode))
 		new_fl |= S_ENCRYPTED;
+	if (file_is_verity(inode))
+		new_fl |= S_VERITY;
+	if (flags & F2FS_CASEFOLD_FL)
+		new_fl |= S_CASEFOLD;
 	inode_set_flags(inode, new_fl,
 			S_SYNC|S_APPEND|S_IMMUTABLE|S_NOATIME|S_DIRSYNC|
-			S_ENCRYPTED);
+			S_ENCRYPTED|S_VERITY|S_CASEFOLD);
 }
 
 static void __get_inode_rdev(struct inode *inode, struct f2fs_inode *ri)
@@ -176,9 +180,8 @@
 	calculated = f2fs_inode_chksum(sbi, page);
 
 	if (provided != calculated)
-		f2fs_msg(sbi->sb, KERN_WARNING,
-			"checksum invalid, nid = %lu, ino_of_node = %x, %x vs. %x",
-			page->index, ino_of_node(page), provided, calculated);
+		f2fs_warn(sbi, "checksum invalid, nid = %lu, ino_of_node = %x, %x vs. %x",
+			  page->index, ino_of_node(page), provided, calculated);
 
 	return provided == calculated;
 }
@@ -202,50 +205,41 @@
 	iblocks = le64_to_cpu(F2FS_INODE(node_page)->i_blocks);
 	if (!iblocks) {
 		set_sbi_flag(sbi, SBI_NEED_FSCK);
-		f2fs_msg(sbi->sb, KERN_WARNING,
-			"%s: corrupted inode i_blocks i_ino=%lx iblocks=%llu, "
-			"run fsck to fix.",
-			__func__, inode->i_ino, iblocks);
+		f2fs_warn(sbi, "%s: corrupted inode i_blocks i_ino=%lx iblocks=%llu, run fsck to fix.",
+			  __func__, inode->i_ino, iblocks);
 		return false;
 	}
 
 	if (ino_of_node(node_page) != nid_of_node(node_page)) {
 		set_sbi_flag(sbi, SBI_NEED_FSCK);
-		f2fs_msg(sbi->sb, KERN_WARNING,
-			"%s: corrupted inode footer i_ino=%lx, ino,nid: "
-			"[%u, %u] run fsck to fix.",
-			__func__, inode->i_ino,
-			ino_of_node(node_page), nid_of_node(node_page));
+		f2fs_warn(sbi, "%s: corrupted inode footer i_ino=%lx, ino,nid: [%u, %u] run fsck to fix.",
+			  __func__, inode->i_ino,
+			  ino_of_node(node_page), nid_of_node(node_page));
 		return false;
 	}
 
 	if (f2fs_sb_has_flexible_inline_xattr(sbi)
 			&& !f2fs_has_extra_attr(inode)) {
 		set_sbi_flag(sbi, SBI_NEED_FSCK);
-		f2fs_msg(sbi->sb, KERN_WARNING,
-			"%s: corrupted inode ino=%lx, run fsck to fix.",
-			__func__, inode->i_ino);
+		f2fs_warn(sbi, "%s: corrupted inode ino=%lx, run fsck to fix.",
+			  __func__, inode->i_ino);
 		return false;
 	}
 
 	if (f2fs_has_extra_attr(inode) &&
 			!f2fs_sb_has_extra_attr(sbi)) {
 		set_sbi_flag(sbi, SBI_NEED_FSCK);
-		f2fs_msg(sbi->sb, KERN_WARNING,
-			"%s: inode (ino=%lx) is with extra_attr, "
-			"but extra_attr feature is off",
-			__func__, inode->i_ino);
+		f2fs_warn(sbi, "%s: inode (ino=%lx) is with extra_attr, but extra_attr feature is off",
+			  __func__, inode->i_ino);
 		return false;
 	}
 
 	if (fi->i_extra_isize > F2FS_TOTAL_EXTRA_ATTR_SIZE ||
 			fi->i_extra_isize % sizeof(__le32)) {
 		set_sbi_flag(sbi, SBI_NEED_FSCK);
-		f2fs_msg(sbi->sb, KERN_WARNING,
-			"%s: inode (ino=%lx) has corrupted i_extra_isize: %d, "
-			"max: %zu",
-			__func__, inode->i_ino, fi->i_extra_isize,
-			F2FS_TOTAL_EXTRA_ATTR_SIZE);
+		f2fs_warn(sbi, "%s: inode (ino=%lx) has corrupted i_extra_isize: %d, max: %zu",
+			  __func__, inode->i_ino, fi->i_extra_isize,
+			  F2FS_TOTAL_EXTRA_ATTR_SIZE);
 		return false;
 	}
 
@@ -255,11 +249,9 @@
 		(!fi->i_inline_xattr_size ||
 		fi->i_inline_xattr_size > MAX_INLINE_XATTR_SIZE)) {
 		set_sbi_flag(sbi, SBI_NEED_FSCK);
-		f2fs_msg(sbi->sb, KERN_WARNING,
-			"%s: inode (ino=%lx) has corrupted "
-			"i_inline_xattr_size: %d, max: %zu",
-			__func__, inode->i_ino, fi->i_inline_xattr_size,
-			MAX_INLINE_XATTR_SIZE);
+		f2fs_warn(sbi, "%s: inode (ino=%lx) has corrupted i_inline_xattr_size: %d, max: %zu",
+			  __func__, inode->i_ino, fi->i_inline_xattr_size,
+			  MAX_INLINE_XATTR_SIZE);
 		return false;
 	}
 
@@ -272,11 +264,9 @@
 			!f2fs_is_valid_blkaddr(sbi, ei->blk + ei->len - 1,
 						DATA_GENERIC_ENHANCE))) {
 			set_sbi_flag(sbi, SBI_NEED_FSCK);
-			f2fs_msg(sbi->sb, KERN_WARNING,
-				"%s: inode (ino=%lx) extent info [%u, %u, %u] "
-				"is incorrect, run fsck to fix",
-				__func__, inode->i_ino,
-				ei->blk, ei->fofs, ei->len);
+			f2fs_warn(sbi, "%s: inode (ino=%lx) extent info [%u, %u, %u] is incorrect, run fsck to fix",
+				  __func__, inode->i_ino,
+				  ei->blk, ei->fofs, ei->len);
 			return false;
 		}
 	}
@@ -284,19 +274,15 @@
 	if (f2fs_has_inline_data(inode) &&
 			(!S_ISREG(inode->i_mode) && !S_ISLNK(inode->i_mode))) {
 		set_sbi_flag(sbi, SBI_NEED_FSCK);
-		f2fs_msg(sbi->sb, KERN_WARNING,
-			"%s: inode (ino=%lx, mode=%u) should not have "
-			"inline_data, run fsck to fix",
-			__func__, inode->i_ino, inode->i_mode);
+		f2fs_warn(sbi, "%s: inode (ino=%lx, mode=%u) should not have inline_data, run fsck to fix",
+			  __func__, inode->i_ino, inode->i_mode);
 		return false;
 	}
 
 	if (f2fs_has_inline_dentry(inode) && !S_ISDIR(inode->i_mode)) {
 		set_sbi_flag(sbi, SBI_NEED_FSCK);
-		f2fs_msg(sbi->sb, KERN_WARNING,
-			"%s: inode (ino=%lx, mode=%u) should not have "
-			"inline_dentry, run fsck to fix",
-			__func__, inode->i_ino, inode->i_mode);
+		f2fs_warn(sbi, "%s: inode (ino=%lx, mode=%u) should not have inline_dentry, run fsck to fix",
+			  __func__, inode->i_ino, inode->i_mode);
 		return false;
 	}
 
@@ -343,6 +329,8 @@
 					le16_to_cpu(ri->i_gc_failures);
 	fi->i_xattr_nid = le32_to_cpu(ri->i_xattr_nid);
 	fi->i_flags = le32_to_cpu(ri->i_flags);
+	if (S_ISREG(inode->i_mode))
+		fi->i_flags &= ~F2FS_PROJINHERIT_FL;
 	fi->flags = 0;
 	fi->i_advise = ri->i_advise;
 	fi->i_pino = le32_to_cpu(ri->i_pino);
@@ -634,7 +622,7 @@
 		!is_inode_flag_set(inode, FI_DIRTY_INODE))
 		return 0;
 
-	if (f2fs_is_checkpoint_ready(sbi))
+	if (!f2fs_is_checkpoint_ready(sbi))
 		return -ENOSPC;
 
 	/*
@@ -693,7 +681,7 @@
 		err = f2fs_truncate(inode);
 
 	if (time_to_inject(sbi, FAULT_EVICT_INODE)) {
-		f2fs_show_injection_info(FAULT_EVICT_INODE);
+		f2fs_show_injection_info(sbi, FAULT_EVICT_INODE);
 		err = -EIO;
 	}
 
@@ -713,7 +701,8 @@
 
 	if (err) {
 		f2fs_update_inode_page(inode);
-		set_sbi_flag(sbi, SBI_QUOTA_NEED_REPAIR);
+		if (dquot_initialize_needed(inode))
+			set_sbi_flag(sbi, SBI_QUOTA_NEED_REPAIR);
 	}
 	sb_end_intwrite(inode->i_sb);
 no_delete:
@@ -723,7 +712,7 @@
 	stat_dec_inline_dir(inode);
 	stat_dec_inline_inode(inode);
 
-	if (likely(!is_set_ckpt_flags(sbi, CP_ERROR_FLAG) &&
+	if (likely(!f2fs_cp_error(sbi) &&
 				!is_sbi_flag_set(sbi, SBI_CP_DISABLED)))
 		f2fs_bug_on(sbi, is_inode_flag_set(inode, FI_DIRTY_INODE));
 	else
@@ -753,6 +742,7 @@
 	}
 out_clear:
 	fscrypt_put_encryption_info(inode);
+	fsverity_cleanup_inode(inode);
 	clear_inode(inode);
 }
 
@@ -787,8 +777,7 @@
 	err = f2fs_get_node_info(sbi, inode->i_ino, &ni);
 	if (err) {
 		set_sbi_flag(sbi, SBI_NEED_FSCK);
-		f2fs_msg(sbi->sb, KERN_WARNING,
-			"May loss orphan inode, run fsck to fix.");
+		f2fs_warn(sbi, "May loss orphan inode, run fsck to fix.");
 		goto out;
 	}
 
@@ -796,8 +785,7 @@
 		err = f2fs_acquire_orphan_inode(sbi);
 		if (err) {
 			set_sbi_flag(sbi, SBI_NEED_FSCK);
-			f2fs_msg(sbi->sb, KERN_WARNING,
-				"Too many orphan inodes, run fsck to fix.");
+			f2fs_warn(sbi, "Too many orphan inodes, run fsck to fix.");
 		} else {
 			f2fs_add_orphan_inode(inode);
 		}
diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c
index dddd245..a1c507b 100644
--- a/fs/f2fs/namei.c
+++ b/fs/f2fs/namei.c
@@ -272,9 +272,8 @@
 
 	if (unlikely(f2fs_cp_error(sbi)))
 		return -EIO;
-	err = f2fs_is_checkpoint_ready(sbi);
-	if (err)
-		return err;
+	if (!f2fs_is_checkpoint_ready(sbi))
+		return -ENOSPC;
 
 	err = dquot_initialize(dir);
 	if (err)
@@ -321,9 +320,8 @@
 
 	if (unlikely(f2fs_cp_error(sbi)))
 		return -EIO;
-	err = f2fs_is_checkpoint_ready(sbi);
-	if (err)
-		return err;
+	if (!f2fs_is_checkpoint_ready(sbi))
+		return -ENOSPC;
 
 	err = fscrypt_prepare_link(old_dentry, dir, dentry);
 	if (err)
@@ -385,9 +383,8 @@
 	int err = 0;
 
 	if (f2fs_readonly(sbi->sb)) {
-		f2fs_msg(sbi->sb, KERN_INFO,
-			"skip recovering inline_dots inode (ino:%lu, pino:%u) "
-			"in readonly mountpoint", dir->i_ino, pino);
+		f2fs_info(sbi, "skip recovering inline_dots inode (ino:%lu, pino:%u) in readonly mountpoint",
+			  dir->i_ino, pino);
 		return 0;
 	}
 
@@ -436,19 +433,23 @@
 	nid_t ino = -1;
 	int err = 0;
 	unsigned int root_ino = F2FS_ROOT_INO(F2FS_I_SB(dir));
+	struct fscrypt_name fname;
 
 	trace_f2fs_lookup_start(dir, dentry, flags);
 
-	err = fscrypt_prepare_lookup(dir, dentry, flags);
-	if (err)
-		goto out;
-
 	if (dentry->d_name.len > F2FS_NAME_LEN) {
 		err = -ENAMETOOLONG;
 		goto out;
 	}
 
-	de = f2fs_find_entry(dir, &dentry->d_name, &page);
+	err = fscrypt_prepare_lookup(dir, dentry, &fname);
+	if (err == -ENOENT)
+		goto out_splice;
+	if (err)
+		goto out;
+	de = __f2fs_find_entry(dir, &fname, &page);
+	fscrypt_free_filename(&fname);
+
 	if (!de) {
 		if (IS_ERR(page)) {
 			err = PTR_ERR(page);
@@ -480,16 +481,25 @@
 	if (IS_ENCRYPTED(dir) &&
 	    (S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode)) &&
 	    !fscrypt_has_permitted_context(dir, inode)) {
-		f2fs_msg(inode->i_sb, KERN_WARNING,
-			 "Inconsistent encryption contexts: %lu/%lu",
-			 dir->i_ino, inode->i_ino);
+		f2fs_warn(F2FS_I_SB(inode), "Inconsistent encryption contexts: %lu/%lu",
+			  dir->i_ino, inode->i_ino);
 		err = -EPERM;
 		goto out_iput;
 	}
 out_splice:
+#ifdef CONFIG_UNICODE
+	if (!inode && IS_CASEFOLDED(dir)) {
+		/* Eventually we want to call d_add_ci(dentry, NULL)
+		 * for negative dentries in the encoding case as
+		 * well.  For now, prevent the negative dentry
+		 * from being cached.
+		 */
+		trace_f2fs_lookup_end(dir, dentry, ino, err);
+		return NULL;
+	}
+#endif
 	new = d_splice_alias(inode, dentry);
-	if (IS_ERR(new))
-		err = PTR_ERR(new);
+	err = PTR_ERR_OR_ZERO(new);
 	trace_f2fs_lookup_end(dir, dentry, ino, err);
 	return new;
 out_iput:
@@ -536,6 +546,16 @@
 		goto fail;
 	}
 	f2fs_delete_entry(de, page, dir, inode);
+#ifdef CONFIG_UNICODE
+	/* VFS negative dentries are incompatible with Encoding and
+	 * Case-insensitiveness. Eventually we'll want avoid
+	 * invalidating the dentries here, alongside with returning the
+	 * negative dentries at f2fs_lookup(), when it is  better
+	 * supported by the VFS for the CI case.
+	 */
+	if (IS_CASEFOLDED(dir))
+		d_invalidate(dentry);
+#endif
 	f2fs_unlock_op(sbi);
 
 	if (IS_DIRSYNC(dir))
@@ -570,9 +590,8 @@
 
 	if (unlikely(f2fs_cp_error(sbi)))
 		return -EIO;
-	err = f2fs_is_checkpoint_ready(sbi);
-	if (err)
-		return err;
+	if (!f2fs_is_checkpoint_ready(sbi))
+		return -ENOSPC;
 
 	err = fscrypt_prepare_symlink(dir, symname, len, dir->i_sb->s_blocksize,
 				      &disk_link);
@@ -702,9 +721,8 @@
 
 	if (unlikely(f2fs_cp_error(sbi)))
 		return -EIO;
-	err = f2fs_is_checkpoint_ready(sbi);
-	if (err)
-		return err;
+	if (!f2fs_is_checkpoint_ready(sbi))
+		return -ENOSPC;
 
 	err = dquot_initialize(dir);
 	if (err)
@@ -803,6 +821,8 @@
 
 	if (unlikely(f2fs_cp_error(sbi)))
 		return -EIO;
+	if (!f2fs_is_checkpoint_ready(sbi))
+		return -ENOSPC;
 
 	if (IS_ENCRYPTED(dir) || DUMMY_ENCRYPTION_ENABLED(sbi)) {
 		int err = fscrypt_get_encryption_info(dir);
@@ -839,9 +859,8 @@
 
 	if (unlikely(f2fs_cp_error(sbi)))
 		return -EIO;
-	err = f2fs_is_checkpoint_ready(sbi);
-	if (err)
-		return err;
+	if (!f2fs_is_checkpoint_ready(sbi))
+		return -ENOSPC;
 
 	if (is_inode_flag_set(new_dir, FI_PROJ_INHERIT) &&
 			(!projid_eq(F2FS_I(new_dir)->i_projid,
@@ -1035,9 +1054,8 @@
 
 	if (unlikely(f2fs_cp_error(sbi)))
 		return -EIO;
-	err = f2fs_is_checkpoint_ready(sbi);
-	if (err)
-		return err;
+	if (!f2fs_is_checkpoint_ready(sbi))
+		return -ENOSPC;
 
 	if ((is_inode_flag_set(new_dir, FI_PROJ_INHERIT) &&
 			!projid_eq(F2FS_I(new_dir)->i_projid,
@@ -1258,6 +1276,7 @@
 #ifdef CONFIG_F2FS_FS_XATTR
 	.listxattr	= f2fs_listxattr,
 #endif
+	.fiemap		= f2fs_fiemap,
 };
 
 const struct inode_operations f2fs_symlink_inode_operations = {
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 8410408..9b4d197 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -34,9 +34,8 @@
 {
 	if (unlikely(nid < F2FS_ROOT_INO(sbi) || nid >= NM_I(sbi)->max_nid)) {
 		set_sbi_flag(sbi, SBI_NEED_FSCK);
-		f2fs_msg(sbi->sb, KERN_WARNING,
-				"%s: out-of-range nid=%x, run fsck to fix.",
-				__func__, nid);
+		f2fs_warn(sbi, "%s: out-of-range nid=%x, run fsck to fix.",
+			  __func__, nid);
 		return -EFSCORRUPTED;
 	}
 	return 0;
@@ -1187,10 +1186,8 @@
 	}
 
 	if (unlikely(inode->i_blocks != 0 && inode->i_blocks != 8)) {
-		f2fs_msg(F2FS_I_SB(inode)->sb, KERN_WARNING,
-			"Inconsistent i_blocks, ino:%lu, iblocks:%llu",
-			inode->i_ino,
-			(unsigned long long)inode->i_blocks);
+		f2fs_warn(F2FS_I_SB(inode), "Inconsistent i_blocks, ino:%lu, iblocks:%llu",
+			  inode->i_ino, (unsigned long long)inode->i_blocks);
 		set_sbi_flag(F2FS_I_SB(inode), SBI_NEED_FSCK);
 	}
 
@@ -1380,11 +1377,10 @@
 	}
 page_hit:
 	if(unlikely(nid != nid_of_node(page))) {
-		f2fs_msg(sbi->sb, KERN_WARNING, "inconsistent node block, "
-			"nid:%lu, node_footer[nid:%u,ino:%u,ofs:%u,cpver:%llu,blkaddr:%u]",
-			nid, nid_of_node(page), ino_of_node(page),
-			ofs_of_node(page), cpver_of_node(page),
-			next_blkaddr_of_node(page));
+		f2fs_warn(sbi, "inconsistent node block, nid:%lu, node_footer[nid:%u,ino:%u,ofs:%u,cpver:%llu,blkaddr:%u]",
+			  nid, nid_of_node(page), ino_of_node(page),
+			  ofs_of_node(page), cpver_of_node(page),
+			  next_blkaddr_of_node(page));
 		err = -EINVAL;
 out_err:
 		ClearPageUptodate(page);
@@ -1528,7 +1524,8 @@
 	if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING)))
 		goto redirty_out;
 
-	if (wbc->sync_mode == WB_SYNC_NONE &&
+	if (!is_sbi_flag_set(sbi, SBI_CP_DISABLED) &&
+			wbc->sync_mode == WB_SYNC_NONE &&
 			IS_DNODE(page) && is_cold_node(page))
 		goto redirty_out;
 
@@ -1752,9 +1749,8 @@
 			break;
 	}
 	if (!ret && atomic && !marked) {
-		f2fs_msg(sbi->sb, KERN_DEBUG,
-			"Retry to write fsync mark: ino=%u, idx=%lx",
-					ino, last_page->index);
+		f2fs_debug(sbi, "Retry to write fsync mark: ino=%u, idx=%lx",
+			   ino, last_page->index);
 		lock_page(last_page);
 		f2fs_wait_on_page_writeback(last_page, NODE, true, true);
 		set_page_dirty(last_page);
@@ -1767,6 +1763,47 @@
 	return ret ? -EIO: 0;
 }
 
+static int f2fs_match_ino(struct inode *inode, unsigned long ino, void *data)
+{
+	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
+	bool clean;
+
+	if (inode->i_ino != ino)
+		return 0;
+
+	if (!is_inode_flag_set(inode, FI_DIRTY_INODE))
+		return 0;
+
+	spin_lock(&sbi->inode_lock[DIRTY_META]);
+	clean = list_empty(&F2FS_I(inode)->gdirty_list);
+	spin_unlock(&sbi->inode_lock[DIRTY_META]);
+
+	if (clean)
+		return 0;
+
+	inode = igrab(inode);
+	if (!inode)
+		return 0;
+	return 1;
+}
+
+static bool flush_dirty_inode(struct page *page)
+{
+	struct f2fs_sb_info *sbi = F2FS_P_SB(page);
+	struct inode *inode;
+	nid_t ino = ino_of_node(page);
+
+	inode = find_inode_nowait(sbi->sb, ino, f2fs_match_ino, NULL);
+	if (!inode)
+		return false;
+
+	f2fs_update_inode(inode, page);
+	unlock_page(page);
+
+	iput(inode);
+	return true;
+}
+
 int f2fs_sync_node_pages(struct f2fs_sb_info *sbi,
 				struct writeback_control *wbc,
 				bool do_balance, enum iostat_type io_type)
@@ -1790,6 +1827,7 @@
 		for (i = 0; i < nr_pages; i++) {
 			struct page *page = pvec.pages[i];
 			bool submitted = false;
+			bool may_dirty = true;
 
 			/* give a priority to WB_SYNC threads */
 			if (atomic_read(&sbi->wb_sync_req[NODE]) &&
@@ -1837,6 +1875,13 @@
 				goto lock_node;
 			}
 
+			/* flush dirty inode */
+			if (IS_INODE(page) && may_dirty) {
+				may_dirty = false;
+				if (flush_dirty_inode(page))
+					goto lock_node;
+			}
+
 			f2fs_wait_on_page_writeback(page, NODE, true, true);
 
 			if (!clear_page_dirty_for_io(page))
@@ -1865,7 +1910,8 @@
 	}
 
 	if (step < 2) {
-		if (wbc->sync_mode == WB_SYNC_NONE && step == 1)
+		if (!is_sbi_flag_set(sbi, SBI_CP_DISABLED) &&
+				wbc->sync_mode == WB_SYNC_NONE && step == 1)
 			goto out;
 		step++;
 		goto next_step;
@@ -2303,9 +2349,7 @@
 
 			if (ret) {
 				up_read(&nm_i->nat_tree_lock);
-				f2fs_bug_on(sbi, !mount);
-				f2fs_msg(sbi->sb, KERN_ERR,
-					"NAT is corrupt, run fsck to fix it");
+				f2fs_err(sbi, "NAT is corrupt, run fsck to fix it");
 				return ret;
 			}
 		}
@@ -2354,7 +2398,7 @@
 	struct free_nid *i = NULL;
 retry:
 	if (time_to_inject(sbi, FAULT_ALLOC_NID)) {
-		f2fs_show_injection_info(FAULT_ALLOC_NID);
+		f2fs_show_injection_info(sbi, FAULT_ALLOC_NID);
 		return false;
 	}
 
@@ -2725,7 +2769,7 @@
 		i = 1;
 	}
 	for (; i < NAT_ENTRY_PER_BLOCK; i++) {
-		if (nat_blk->entries[i].block_addr != NULL_ADDR)
+		if (le32_to_cpu(nat_blk->entries[i].block_addr) != NULL_ADDR)
 			valid++;
 	}
 	if (valid == 0) {
@@ -2915,7 +2959,7 @@
 	nm_i->full_nat_bits = nm_i->nat_bits + 8;
 	nm_i->empty_nat_bits = nm_i->full_nat_bits + nat_bits_bytes;
 
-	f2fs_msg(sbi->sb, KERN_NOTICE, "Found nat_bits in checkpoint");
+	f2fs_notice(sbi, "Found nat_bits in checkpoint");
 	return 0;
 }
 
@@ -2970,7 +3014,7 @@
 
 	/* not used nids: 0, node, meta, (and root counted as valid node) */
 	nm_i->available_nids = nm_i->max_nid - sbi->total_valid_node_count -
-				sbi->nquota_files - F2FS_RESERVED_NODE_NUM;
+						F2FS_RESERVED_NODE_NUM;
 	nm_i->nid_cnt[FREE_NID] = 0;
 	nm_i->nid_cnt[PREALLOC_NID] = 0;
 	nm_i->nat_cnt = 0;
diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
index 8579a0b..76477f7 100644
--- a/fs/f2fs/recovery.c
+++ b/fs/f2fs/recovery.c
@@ -188,10 +188,9 @@
 		name = "<encrypted>";
 	else
 		name = raw_inode->i_name;
-	f2fs_msg(inode->i_sb, KERN_NOTICE,
-			"%s: ino = %x, name = %s, dir = %lx, err = %d",
-			__func__, ino_of_node(ipage), name,
-			IS_ERR(dir) ? 0 : dir->i_ino, err);
+	f2fs_notice(F2FS_I_SB(inode), "%s: ino = %x, name = %s, dir = %lx, err = %d",
+		    __func__, ino_of_node(ipage), name,
+		    IS_ERR(dir) ? 0 : dir->i_ino, err);
 	return err;
 }
 
@@ -292,9 +291,8 @@
 	else
 		name = F2FS_INODE(page)->i_name;
 
-	f2fs_msg(inode->i_sb, KERN_NOTICE,
-		"recover_inode: ino = %x, name = %s, inline = %x",
-			ino_of_node(page), name, raw->i_inline);
+	f2fs_notice(F2FS_I_SB(inode), "recover_inode: ino = %x, name = %s, inline = %x",
+		    ino_of_node(page), name, raw->i_inline);
 	return 0;
 }
 
@@ -371,10 +369,9 @@
 		/* sanity check in order to detect looped node chain */
 		if (++loop_cnt >= free_blocks ||
 			blkaddr == next_blkaddr_of_node(page)) {
-			f2fs_msg(sbi->sb, KERN_NOTICE,
-				"%s: detect looped node chain, "
-				"blkaddr:%u, next:%u",
-				__func__, blkaddr, next_blkaddr_of_node(page));
+			f2fs_notice(sbi, "%s: detect looped node chain, blkaddr:%u, next:%u",
+				    __func__, blkaddr,
+				    next_blkaddr_of_node(page));
 			f2fs_put_page(page, 1);
 			err = -EINVAL;
 			break;
@@ -553,10 +550,9 @@
 	f2fs_bug_on(sbi, ni.ino != ino_of_node(page));
 
 	if (ofs_of_node(dn.node_page) != ofs_of_node(page)) {
-		f2fs_msg(sbi->sb, KERN_WARNING,
-			"Inconsistent ofs_of_node, ino:%lu, ofs:%u, %u",
-			inode->i_ino, ofs_of_node(dn.node_page),
-			ofs_of_node(page));
+		f2fs_warn(sbi, "Inconsistent ofs_of_node, ino:%lu, ofs:%u, %u",
+			  inode->i_ino, ofs_of_node(dn.node_page),
+			  ofs_of_node(page));
 		err = -EFSCORRUPTED;
 		goto err;
 	}
@@ -569,13 +565,13 @@
 
 		if (__is_valid_data_blkaddr(src) &&
 			!f2fs_is_valid_blkaddr(sbi, src, META_POR)) {
-			err = -EFAULT;
+			err = -EFSCORRUPTED;
 			goto err;
 		}
 
 		if (__is_valid_data_blkaddr(dest) &&
 			!f2fs_is_valid_blkaddr(sbi, dest, META_POR)) {
-			err = -EFAULT;
+			err = -EFSCORRUPTED;
 			goto err;
 		}
 
@@ -642,11 +638,9 @@
 err:
 	f2fs_put_dnode(&dn);
 out:
-	f2fs_msg(sbi->sb, KERN_NOTICE,
-		"recover_data: ino = %lx (i_size: %s) recovered = %d, err = %d",
-		inode->i_ino,
-		file_keep_isize(inode) ? "keep" : "recover",
-		recovered, err);
+	f2fs_notice(sbi, "recover_data: ino = %lx (i_size: %s) recovered = %d, err = %d",
+		    inode->i_ino, file_keep_isize(inode) ? "keep" : "recover",
+		    recovered, err);
 	return err;
 }
 
@@ -717,7 +711,7 @@
 		f2fs_put_page(page, 1);
 	}
 	if (!err)
-		f2fs_allocate_new_segments(sbi);
+		f2fs_allocate_new_segments(sbi, NO_CHECK_TYPE);
 	return err;
 }
 
@@ -734,8 +728,7 @@
 #endif
 
 	if (s_flags & SB_RDONLY) {
-		f2fs_msg(sbi->sb, KERN_INFO,
-				"recover fsync data on readonly fs");
+		f2fs_info(sbi, "recover fsync data on readonly fs");
 		sbi->sb->s_flags &= ~SB_RDONLY;
 	}
 
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 3231ced..fa32ce92 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -288,6 +288,8 @@
 	struct list_head *head = &sbi->inode_list[ATOMIC_FILE];
 	struct inode *inode;
 	struct f2fs_inode_info *fi;
+	unsigned int count = sbi->atomic_files;
+	unsigned int looped = 0;
 next:
 	spin_lock(&sbi->inode_lock[ATOMIC_FILE]);
 	if (list_empty(head)) {
@@ -296,22 +298,26 @@
 	}
 	fi = list_first_entry(head, struct f2fs_inode_info, inmem_ilist);
 	inode = igrab(&fi->vfs_inode);
+	if (inode)
+		list_move_tail(&fi->inmem_ilist, head);
 	spin_unlock(&sbi->inode_lock[ATOMIC_FILE]);
 
 	if (inode) {
 		if (gc_failure) {
-			if (fi->i_gc_failures[GC_FAILURE_ATOMIC])
-				goto drop;
-			goto skip;
+			if (!fi->i_gc_failures[GC_FAILURE_ATOMIC])
+				goto skip;
 		}
-drop:
 		set_inode_flag(inode, FI_ATOMIC_REVOKE_REQUEST);
 		f2fs_drop_inmem_pages(inode);
+skip:
 		iput(inode);
 	}
-skip:
 	congestion_wait(BLK_RW_ASYNC, HZ/50);
 	cond_resched();
+	if (gc_failure) {
+		if (++looped >= count)
+			return;
+	}
 	goto next;
 }
 
@@ -327,13 +333,16 @@
 		mutex_unlock(&fi->inmem_lock);
 	}
 
-	clear_inode_flag(inode, FI_ATOMIC_FILE);
 	fi->i_gc_failures[GC_FAILURE_ATOMIC] = 0;
 	stat_dec_atomic_write(inode);
 
 	spin_lock(&sbi->inode_lock[ATOMIC_FILE]);
 	if (!list_empty(&fi->inmem_ilist))
 		list_del_init(&fi->inmem_ilist);
+	if (f2fs_is_atomic_file(inode)) {
+		clear_inode_flag(inode, FI_ATOMIC_FILE);
+		sbi->atomic_files--;
+	}
 	spin_unlock(&sbi->inode_lock[ATOMIC_FILE]);
 }
 
@@ -480,7 +489,7 @@
 void f2fs_balance_fs(struct f2fs_sb_info *sbi, bool need)
 {
 	if (time_to_inject(sbi, FAULT_CHECKPOINT)) {
-		f2fs_show_injection_info(FAULT_CHECKPOINT);
+		f2fs_show_injection_info(sbi, FAULT_CHECKPOINT);
 		f2fs_stop_checkpoint(sbi, false);
 	}
 
@@ -488,7 +497,7 @@
 	if (need && excess_cached_nats(sbi))
 		f2fs_balance_fs_bg(sbi);
 
-	if (f2fs_is_checkpoint_ready(sbi))
+	if (!f2fs_is_checkpoint_ready(sbi))
 		return;
 
 	/*
@@ -533,9 +542,13 @@
 		if (test_opt(sbi, DATA_FLUSH)) {
 			struct blk_plug plug;
 
+			mutex_lock(&sbi->flush_lock);
+
 			blk_start_plug(&plug);
 			f2fs_sync_dirty_inodes(sbi, FILE_INODE);
 			blk_finish_plug(&plug);
+
+			mutex_unlock(&sbi->flush_lock);
 		}
 		f2fs_sync_fs(sbi->sb, true);
 		stat_inc_bg_cp_count(sbi->stat_info);
@@ -800,9 +813,13 @@
 		if (test_and_clear_bit(segno, dirty_i->dirty_segmap[t]))
 			dirty_i->nr_dirty[t]--;
 
-		if (get_valid_blocks(sbi, segno, true) == 0)
+		if (get_valid_blocks(sbi, segno, true) == 0) {
 			clear_bit(GET_SEC_FROM_SEG(sbi, segno),
 						dirty_i->victim_secmap);
+#ifdef CONFIG_F2FS_CHECK_FS
+			clear_bit(segno, SIT_I(sbi)->invalid_segmap);
+#endif
+		}
 	}
 }
 
@@ -856,11 +873,14 @@
 	mutex_unlock(&dirty_i->seglist_lock);
 }
 
-int f2fs_disable_cp_again(struct f2fs_sb_info *sbi)
+block_t f2fs_get_unusable_blocks(struct f2fs_sb_info *sbi)
 {
+	int ovp_hole_segs =
+		(overprovision_segments(sbi) - reserved_segments(sbi));
+	block_t ovp_holes = ovp_hole_segs << sbi->log_blocks_per_seg;
 	struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
-	block_t ovp = overprovision_segments(sbi) << sbi->log_blocks_per_seg;
 	block_t holes[2] = {0, 0};	/* DATA and NODE */
+	block_t unusable;
 	struct seg_entry *se;
 	unsigned int segno;
 
@@ -874,10 +894,20 @@
 	}
 	mutex_unlock(&dirty_i->seglist_lock);
 
-	if (holes[DATA] > ovp || holes[NODE] > ovp)
+	unusable = holes[DATA] > holes[NODE] ? holes[DATA] : holes[NODE];
+	if (unusable > ovp_holes)
+		return unusable - ovp_holes;
+	return 0;
+}
+
+int f2fs_disable_cp_again(struct f2fs_sb_info *sbi, block_t unusable)
+{
+	int ovp_hole_segs =
+		(overprovision_segments(sbi) - reserved_segments(sbi));
+	if (unusable > F2FS_OPTION(sbi).unusable_cap)
 		return -EAGAIN;
 	if (is_sbi_flag_set(sbi, SBI_CP_DISABLED_QUICK) &&
-		dirty_segments(sbi) > overprovision_segments(sbi))
+		dirty_segments(sbi) > ovp_hole_segs)
 		return -EAGAIN;
 	return 0;
 }
@@ -987,8 +1017,9 @@
 
 	if (dc->error)
 		printk_ratelimited(
-			"%sF2FS-fs: Issue discard(%u, %u, %u) failed, ret: %d",
-			KERN_INFO, dc->lstart, dc->start, dc->len, dc->error);
+			"%sF2FS-fs (%s): Issue discard(%u, %u, %u) failed, ret: %d",
+			KERN_INFO, sbi->sb->s_id,
+			dc->lstart, dc->start, dc->len, dc->error);
 	__detach_discard_cmd(dcc, dc);
 }
 
@@ -1128,7 +1159,7 @@
 		dc->len += len;
 
 		if (time_to_inject(sbi, FAULT_DISCARD)) {
-			f2fs_show_injection_info(FAULT_DISCARD);
+			f2fs_show_injection_info(sbi, FAULT_DISCARD);
 			err = -EIO;
 			goto submit;
 		}
@@ -1467,6 +1498,10 @@
 		list_for_each_entry_safe(dc, tmp, pend_list, list) {
 			f2fs_bug_on(sbi, dc->state != D_PREP);
 
+			if (dpolicy->timeout != 0 &&
+				f2fs_time_over(sbi, dpolicy->timeout))
+				break;
+
 			if (dpolicy->io_aware && i < dpolicy->io_aware_gran &&
 						!is_idle(sbi, DISCARD_TIME)) {
 				io_interrupted = true;
@@ -1727,8 +1762,7 @@
 		devi = f2fs_target_device_index(sbi, blkstart);
 		if (blkstart < FDEV(devi).start_blk ||
 		    blkstart > FDEV(devi).end_blk) {
-			f2fs_msg(sbi->sb, KERN_ERR, "Invalid block %x",
-				 blkstart);
+			f2fs_err(sbi, "Invalid block %x", blkstart);
 			return -EIO;
 		}
 		blkstart -= FDEV(devi).start_blk;
@@ -1741,10 +1775,9 @@
 
 		if (sector & (bdev_zone_sectors(bdev) - 1) ||
 				nr_sects != bdev_zone_sectors(bdev)) {
-			f2fs_msg(sbi->sb, KERN_ERR,
-				"(%d) %s: Unaligned zone reset attempted (block %x + %x)",
-				devi, sbi->s_ndevs ? FDEV(devi).path: "",
-				blkstart, blklen);
+			f2fs_err(sbi, "(%d) %s: Unaligned zone reset attempted (block %x + %x)",
+				 devi, sbi->s_ndevs ? FDEV(devi).path : "",
+				 blkstart, blklen);
 			return -EIO;
 		}
 		trace_f2fs_issue_reset_zone(bdev, blkstart);
@@ -2052,6 +2085,13 @@
 
 	f2fs_stop_discard_thread(sbi);
 
+	/*
+	 * Recovery can cache discard commands, so in error path of
+	 * fill_super(), it needs to give a chance to handle them.
+	 */
+	if (unlikely(atomic_read(&dcc->discard_cmd_cnt)))
+		f2fs_issue_discard_timeout(sbi);
+
 	kvfree(dcc);
 	SM_I(sbi)->dcc_info = NULL;
 }
@@ -2108,15 +2148,14 @@
 		mir_exist = f2fs_test_and_set_bit(offset,
 						se->cur_valid_map_mir);
 		if (unlikely(exist != mir_exist)) {
-			f2fs_msg(sbi->sb, KERN_ERR, "Inconsistent error "
-				"when setting bitmap, blk:%u, old bit:%d",
-				blkaddr, exist);
+			f2fs_err(sbi, "Inconsistent error when setting bitmap, blk:%u, old bit:%d",
+				 blkaddr, exist);
 			f2fs_bug_on(sbi, 1);
 		}
 #endif
 		if (unlikely(exist)) {
-			f2fs_msg(sbi->sb, KERN_ERR,
-				"Bitmap was wrongly set, blk:%u", blkaddr);
+			f2fs_err(sbi, "Bitmap was wrongly set, blk:%u",
+				 blkaddr);
 			f2fs_bug_on(sbi, 1);
 			se->valid_blocks--;
 			del = 0;
@@ -2125,9 +2164,11 @@
 		if (!f2fs_test_and_set_bit(offset, se->discard_map))
 			sbi->discard_blks--;
 
-		/* don't overwrite by SSR to keep node chain */
-		if (IS_NODESEG(se->type) &&
-				!is_sbi_flag_set(sbi, SBI_CP_DISABLED)) {
+		/*
+		 * SSR should never reuse block which is checkpointed
+		 * or newly invalidated.
+		 */
+		if (!is_sbi_flag_set(sbi, SBI_CP_DISABLED)) {
 			if (!f2fs_test_and_set_bit(offset, se->ckpt_valid_map))
 				se->ckpt_valid_blocks++;
 		}
@@ -2137,15 +2178,14 @@
 		mir_exist = f2fs_test_and_clear_bit(offset,
 						se->cur_valid_map_mir);
 		if (unlikely(exist != mir_exist)) {
-			f2fs_msg(sbi->sb, KERN_ERR, "Inconsistent error "
-				"when clearing bitmap, blk:%u, old bit:%d",
-				blkaddr, exist);
+			f2fs_err(sbi, "Inconsistent error when clearing bitmap, blk:%u, old bit:%d",
+				 blkaddr, exist);
 			f2fs_bug_on(sbi, 1);
 		}
 #endif
 		if (unlikely(!exist)) {
-			f2fs_msg(sbi->sb, KERN_ERR,
-				"Bitmap was wrongly cleared, blk:%u", blkaddr);
+			f2fs_err(sbi, "Bitmap was wrongly cleared, blk:%u",
+				 blkaddr);
 			f2fs_bug_on(sbi, 1);
 			se->valid_blocks++;
 			del = 0;
@@ -2627,7 +2667,40 @@
 	stat_inc_seg_type(sbi, curseg);
 }
 
-void f2fs_allocate_new_segments(struct f2fs_sb_info *sbi)
+void allocate_segment_for_resize(struct f2fs_sb_info *sbi, int type,
+					unsigned int start, unsigned int end)
+{
+	struct curseg_info *curseg = CURSEG_I(sbi, type);
+	unsigned int segno;
+
+	down_read(&SM_I(sbi)->curseg_lock);
+	mutex_lock(&curseg->curseg_mutex);
+	down_write(&SIT_I(sbi)->sentry_lock);
+
+	segno = CURSEG_I(sbi, type)->segno;
+	if (segno < start || segno > end)
+		goto unlock;
+
+	if (f2fs_need_SSR(sbi) && get_ssr_segment(sbi, type))
+		change_curseg(sbi, type);
+	else
+		new_curseg(sbi, type, true);
+
+	stat_inc_seg_type(sbi, curseg);
+
+	locate_dirty_segment(sbi, segno);
+unlock:
+	up_write(&SIT_I(sbi)->sentry_lock);
+
+	if (segno != curseg->segno)
+		f2fs_notice(sbi, "For resize: curseg of type %d: %u ==> %u",
+			    type, segno, curseg->segno);
+
+	mutex_unlock(&curseg->curseg_mutex);
+	up_read(&SM_I(sbi)->curseg_lock);
+}
+
+void f2fs_allocate_new_segments(struct f2fs_sb_info *sbi, int type)
 {
 	struct curseg_info *curseg;
 	unsigned int old_segno;
@@ -2636,10 +2709,17 @@
 	down_write(&SIT_I(sbi)->sentry_lock);
 
 	for (i = CURSEG_HOT_DATA; i <= CURSEG_COLD_DATA; i++) {
+		if (type != NO_CHECK_TYPE && i != type)
+			continue;
+
 		curseg = CURSEG_I(sbi, i);
-		old_segno = curseg->segno;
-		SIT_I(sbi)->s_ops->allocate_segment(sbi, i, true);
-		locate_dirty_segment(sbi, old_segno);
+		if (type == NO_CHECK_TYPE || curseg->next_blkoff ||
+				get_valid_blocks(sbi, curseg->segno, false) ||
+				get_ckpt_valid_blocks(sbi, curseg->segno)) {
+			old_segno = curseg->segno;
+			SIT_I(sbi)->s_ops->allocate_segment(sbi, i, true);
+			locate_dirty_segment(sbi, old_segno);
+		}
 	}
 
 	up_write(&SIT_I(sbi)->sentry_lock);
@@ -2759,8 +2839,7 @@
 		goto out;
 
 	if (is_sbi_flag_set(sbi, SBI_NEED_FSCK)) {
-		f2fs_msg(sbi->sb, KERN_WARNING,
-			"Found FS corruption, run fsck to fix.");
+		f2fs_warn(sbi, "Found FS corruption, run fsck to fix.");
 		return -EFSCORRUPTED;
 	}
 
@@ -3006,6 +3085,19 @@
 {
 	struct sit_info *sit_i = SIT_I(sbi);
 	struct curseg_info *curseg = CURSEG_I(sbi, type);
+	bool put_pin_sem = false;
+
+	if (type == CURSEG_COLD_DATA) {
+		/* GC during CURSEG_COLD_DATA_PINNED allocation */
+		if (down_read_trylock(&sbi->pin_sem)) {
+			put_pin_sem = true;
+		} else {
+			type = CURSEG_WARM_DATA;
+			curseg = CURSEG_I(sbi, type);
+		}
+	} else if (type == CURSEG_COLD_DATA_PINNED) {
+		type = CURSEG_COLD_DATA;
+	}
 
 	down_read(&SM_I(sbi)->curseg_lock);
 
@@ -3054,12 +3146,14 @@
 		f2fs_inode_chksum_set(sbi, page);
 	}
 
+	if (F2FS_IO_ALIGNED(sbi))
+		fio->retry = false;
+
 	if (add_list) {
 		struct f2fs_bio_info *io;
 
 		INIT_LIST_HEAD(&fio->list);
 		fio->in_list = true;
-		fio->retry = false;
 		io = sbi->write_io[fio->type] + fio->temp;
 		spin_lock(&io->io_lock);
 		list_add_tail(&fio->list, &io->io_list);
@@ -3069,6 +3163,9 @@
 	mutex_unlock(&curseg->curseg_mutex);
 
 	up_read(&SM_I(sbi)->curseg_lock);
+
+	if (put_pin_sem)
+		up_read(&sbi->pin_sem);
 }
 
 static void update_device_state(struct f2fs_io_info *fio)
@@ -3184,12 +3281,17 @@
 
 	if (!IS_DATASEG(get_seg_entry(sbi, segno)->type)) {
 		set_sbi_flag(sbi, SBI_NEED_FSCK);
+		f2fs_warn(sbi, "%s: incorrect segment(%u) type, run fsck to fix.",
+			  __func__, segno);
 		return -EFSCORRUPTED;
 	}
 
 	stat_inc_inplace_blocks(fio->sbi);
 
-	err = f2fs_submit_page_bio(fio);
+	if (fio->bio)
+		err = f2fs_merge_page_bio(fio);
+	else
+		err = f2fs_submit_page_bio(fio);
 	if (!err) {
 		update_device_state(fio);
 		f2fs_update_iostat(fio->sbi, fio->io_type, F2FS_BLKSIZE);
@@ -3310,7 +3412,10 @@
 	if (PageWriteback(page)) {
 		struct f2fs_sb_info *sbi = F2FS_P_SB(page);
 
+		/* submit cached LFS IO */
 		f2fs_submit_merged_write_cond(sbi, NULL, page, 0, type);
+		/* sbumit cached IPU IO */
+		f2fs_submit_merged_ipu_write(sbi, NULL, page);
 		if (ordered) {
 			wait_on_page_writeback(page);
 			f2fs_bug_on(sbi, locked && PageWriteback(page));
@@ -3517,8 +3622,11 @@
 
 	/* sanity check for summary blocks */
 	if (nats_in_cursum(nat_j) > NAT_JOURNAL_ENTRIES ||
-			sits_in_cursum(sit_j) > SIT_JOURNAL_ENTRIES)
+			sits_in_cursum(sit_j) > SIT_JOURNAL_ENTRIES) {
+		f2fs_err(sbi, "invalid journal entries nats %u sits %u\n",
+			 nats_in_cursum(nat_j), sits_in_cursum(sit_j));
 		return -EINVAL;
+	}
 
 	return 0;
 }
@@ -3749,7 +3857,7 @@
 	struct f2fs_journal *journal = curseg->journal;
 	struct sit_entry_set *ses, *tmp;
 	struct list_head *head = &SM_I(sbi)->sit_entry_set;
-	bool to_journal = true;
+	bool to_journal = !is_sbi_flag_set(sbi, SBI_IS_RESIZEFS);
 	struct seg_entry *se;
 
 	down_write(&sit_i->sentry_lock);
@@ -3768,7 +3876,8 @@
 	 * entries, remove all entries from journal and add and account
 	 * them in sit entry set.
 	 */
-	if (!__has_cursum_space(journal, sit_i->dirty_sentries, SIT_JOURNAL))
+	if (!__has_cursum_space(journal, sit_i->dirty_sentries, SIT_JOURNAL) ||
+								!to_journal)
 		remove_sits_in_journal(sbi);
 
 	/*
@@ -3865,8 +3974,8 @@
 	struct f2fs_super_block *raw_super = F2FS_RAW_SUPER(sbi);
 	struct sit_info *sit_i;
 	unsigned int sit_segs, start;
-	char *src_bitmap;
-	unsigned int bitmap_size;
+	char *src_bitmap, *bitmap;
+	unsigned int bitmap_size, main_bitmap_size, sit_bitmap_size;
 
 	/* allocate memory for SIT information */
 	sit_i = f2fs_kzalloc(sbi, sizeof(struct sit_info), GFP_KERNEL);
@@ -3882,33 +3991,37 @@
 	if (!sit_i->sentries)
 		return -ENOMEM;
 
-	bitmap_size = f2fs_bitmap_size(MAIN_SEGS(sbi));
-	sit_i->dirty_sentries_bitmap = f2fs_kvzalloc(sbi, bitmap_size,
+	main_bitmap_size = f2fs_bitmap_size(MAIN_SEGS(sbi));
+	sit_i->dirty_sentries_bitmap = f2fs_kvzalloc(sbi, main_bitmap_size,
 								GFP_KERNEL);
 	if (!sit_i->dirty_sentries_bitmap)
 		return -ENOMEM;
 
+#ifdef CONFIG_F2FS_CHECK_FS
+	bitmap_size = MAIN_SEGS(sbi) * SIT_VBLOCK_MAP_SIZE * 4;
+#else
+	bitmap_size = MAIN_SEGS(sbi) * SIT_VBLOCK_MAP_SIZE * 3;
+#endif
+	sit_i->bitmap = f2fs_kvzalloc(sbi, bitmap_size, GFP_KERNEL);
+	if (!sit_i->bitmap)
+		return -ENOMEM;
+
+	bitmap = sit_i->bitmap;
+
 	for (start = 0; start < MAIN_SEGS(sbi); start++) {
-		sit_i->sentries[start].cur_valid_map
-			= f2fs_kzalloc(sbi, SIT_VBLOCK_MAP_SIZE, GFP_KERNEL);
-		sit_i->sentries[start].ckpt_valid_map
-			= f2fs_kzalloc(sbi, SIT_VBLOCK_MAP_SIZE, GFP_KERNEL);
-		if (!sit_i->sentries[start].cur_valid_map ||
-				!sit_i->sentries[start].ckpt_valid_map)
-			return -ENOMEM;
+		sit_i->sentries[start].cur_valid_map = bitmap;
+		bitmap += SIT_VBLOCK_MAP_SIZE;
+
+		sit_i->sentries[start].ckpt_valid_map = bitmap;
+		bitmap += SIT_VBLOCK_MAP_SIZE;
 
 #ifdef CONFIG_F2FS_CHECK_FS
-		sit_i->sentries[start].cur_valid_map_mir
-			= f2fs_kzalloc(sbi, SIT_VBLOCK_MAP_SIZE, GFP_KERNEL);
-		if (!sit_i->sentries[start].cur_valid_map_mir)
-			return -ENOMEM;
+		sit_i->sentries[start].cur_valid_map_mir = bitmap;
+		bitmap += SIT_VBLOCK_MAP_SIZE;
 #endif
 
-		sit_i->sentries[start].discard_map
-			= f2fs_kzalloc(sbi, SIT_VBLOCK_MAP_SIZE,
-							GFP_KERNEL);
-		if (!sit_i->sentries[start].discard_map)
-			return -ENOMEM;
+		sit_i->sentries[start].discard_map = bitmap;
+		bitmap += SIT_VBLOCK_MAP_SIZE;
 	}
 
 	sit_i->tmp_map = f2fs_kzalloc(sbi, SIT_VBLOCK_MAP_SIZE, GFP_KERNEL);
@@ -3928,17 +4041,23 @@
 	sit_segs = le32_to_cpu(raw_super->segment_count_sit) >> 1;
 
 	/* setup SIT bitmap from ckeckpoint pack */
-	bitmap_size = __bitmap_size(sbi, SIT_BITMAP);
+	sit_bitmap_size = __bitmap_size(sbi, SIT_BITMAP);
 	src_bitmap = __bitmap_ptr(sbi, SIT_BITMAP);
 
-	sit_i->sit_bitmap = kmemdup(src_bitmap, bitmap_size, GFP_KERNEL);
+	sit_i->sit_bitmap = kmemdup(src_bitmap, sit_bitmap_size, GFP_KERNEL);
 	if (!sit_i->sit_bitmap)
 		return -ENOMEM;
 
 #ifdef CONFIG_F2FS_CHECK_FS
-	sit_i->sit_bitmap_mir = kmemdup(src_bitmap, bitmap_size, GFP_KERNEL);
+	sit_i->sit_bitmap_mir = kmemdup(src_bitmap,
+					sit_bitmap_size, GFP_KERNEL);
 	if (!sit_i->sit_bitmap_mir)
 		return -ENOMEM;
+
+	sit_i->invalid_segmap = f2fs_kvzalloc(sbi,
+					main_bitmap_size, GFP_KERNEL);
+	if (!sit_i->invalid_segmap)
+		return -ENOMEM;
 #endif
 
 	/* init SIT information */
@@ -3947,7 +4066,7 @@
 	sit_i->sit_base_addr = le32_to_cpu(raw_super->sit_blkaddr);
 	sit_i->sit_blocks = sit_segs << sbi->log_blocks_per_seg;
 	sit_i->written_valid_blocks = 0;
-	sit_i->bitmap_size = bitmap_size;
+	sit_i->bitmap_size = sit_bitmap_size;
 	sit_i->dirty_sentries = 0;
 	sit_i->sents_per_block = SIT_ENTRY_PER_BLOCK;
 	sit_i->elapsed_time = le64_to_cpu(sbi->ckpt->elapsed_time);
@@ -4083,10 +4202,8 @@
 
 		start = le32_to_cpu(segno_in_journal(journal, i));
 		if (start >= MAIN_SEGS(sbi)) {
-			f2fs_msg(sbi->sb, KERN_ERR,
-					"Wrong journal entry on segno %u",
-					start);
-			set_sbi_flag(sbi, SBI_NEED_FSCK);
+			f2fs_err(sbi, "Wrong journal entry on segno %u",
+				 start);
 			err = -EFSCORRUPTED;
 			break;
 		}
@@ -4124,10 +4241,8 @@
 	up_read(&curseg->journal_rwsem);
 
 	if (!err && total_node_blocks != valid_node_count(sbi)) {
-		f2fs_msg(sbi->sb, KERN_ERR,
-			"SIT is corrupted node# %u vs %u",
-			total_node_blocks, valid_node_count(sbi));
-		set_sbi_flag(sbi, SBI_NEED_FSCK);
+		f2fs_err(sbi, "SIT is corrupted node# %u vs %u",
+			 total_node_blocks, valid_node_count(sbi));
 		err = -EFSCORRUPTED;
 	}
 
@@ -4242,12 +4357,10 @@
 			if (!f2fs_test_bit(blkofs, se->cur_valid_map))
 				continue;
 out:
-			f2fs_msg(sbi->sb, KERN_ERR,
-				"Current segment's next free block offset is "
-				"inconsistent with bitmap, logtype:%u, "
-				"segno:%u, type:%u, next_blkoff:%u, blkofs:%u",
-				i, curseg->segno, curseg->alloc_type,
-				curseg->next_blkoff, blkofs);
+			f2fs_err(sbi,
+				 "Current segment's next free block offset is inconsistent with bitmap, logtype:%u, segno:%u, type:%u, next_blkoff:%u, blkofs:%u",
+				 i, curseg->segno, curseg->alloc_type,
+				 curseg->next_blkoff, blkofs);
 			return -EFSCORRUPTED;
 		}
 	}
@@ -4420,21 +4533,12 @@
 static void destroy_sit_info(struct f2fs_sb_info *sbi)
 {
 	struct sit_info *sit_i = SIT_I(sbi);
-	unsigned int start;
 
 	if (!sit_i)
 		return;
 
-	if (sit_i->sentries) {
-		for (start = 0; start < MAIN_SEGS(sbi); start++) {
-			kvfree(sit_i->sentries[start].cur_valid_map);
-#ifdef CONFIG_F2FS_CHECK_FS
-			kvfree(sit_i->sentries[start].cur_valid_map_mir);
-#endif
-			kvfree(sit_i->sentries[start].ckpt_valid_map);
-			kvfree(sit_i->sentries[start].discard_map);
-		}
-	}
+	if (sit_i->sentries)
+		kvfree(sit_i->bitmap);
 	kvfree(sit_i->tmp_map);
 
 	kvfree(sit_i->sentries);
@@ -4445,6 +4549,7 @@
 	kvfree(sit_i->sit_bitmap);
 #ifdef CONFIG_F2FS_CHECK_FS
 	kvfree(sit_i->sit_bitmap_mir);
+	kvfree(sit_i->invalid_segmap);
 #endif
 	kvfree(sit_i);
 }
diff --git a/fs/f2fs/segment.h b/fs/f2fs/segment.h
index 4bd151f..a95467b 100644
--- a/fs/f2fs/segment.h
+++ b/fs/f2fs/segment.h
@@ -109,7 +109,7 @@
 #define	START_SEGNO(segno)		\
 	(SIT_BLOCK_OFFSET(segno) * SIT_ENTRY_PER_BLOCK)
 #define SIT_BLK_CNT(sbi)			\
-	((MAIN_SEGS(sbi) + SIT_ENTRY_PER_BLOCK - 1) / SIT_ENTRY_PER_BLOCK)
+	DIV_ROUND_UP(MAIN_SEGS(sbi), SIT_ENTRY_PER_BLOCK)
 #define f2fs_bitmap_size(nr)			\
 	(BITS_TO_LONGS(nr) * sizeof(unsigned long))
 
@@ -226,9 +226,13 @@
 	block_t sit_base_addr;		/* start block address of SIT area */
 	block_t sit_blocks;		/* # of blocks used by SIT area */
 	block_t written_valid_blocks;	/* # of valid blocks in main area */
+	char *bitmap;			/* all bitmaps pointer */
 	char *sit_bitmap;		/* SIT bitmap pointer */
 #ifdef CONFIG_F2FS_CHECK_FS
 	char *sit_bitmap_mir;		/* SIT bitmap mirror */
+
+	/* bitmap of segments to be ignored by GC in case of errors */
+	unsigned long *invalid_segmap;
 #endif
 	unsigned int bitmap_size;	/* SIT bitmap size */
 
@@ -309,6 +313,8 @@
  */
 static inline struct curseg_info *CURSEG_I(struct f2fs_sb_info *sbi, int type)
 {
+	if (type == CURSEG_COLD_DATA_PINNED)
+		type = CURSEG_COLD_DATA;
 	return (struct curseg_info *)(SM_I(sbi)->curseg_array + type);
 }
 
@@ -582,13 +588,13 @@
 		reserved_sections(sbi) + needed);
 }
 
-static inline int f2fs_is_checkpoint_ready(struct f2fs_sb_info *sbi)
+static inline bool f2fs_is_checkpoint_ready(struct f2fs_sb_info *sbi)
 {
 	if (likely(!is_sbi_flag_set(sbi, SBI_CP_DISABLED)))
-		return 0;
+		return true;
 	if (likely(!has_not_enough_free_secs(sbi, 0, 0)))
-		return 0;
-	return -ENOSPC;
+		return true;
+	return false;
 }
 
 static inline bool excess_prefree_segs(struct f2fs_sb_info *sbi)
@@ -693,9 +699,8 @@
 	} while (cur_pos < sbi->blocks_per_seg);
 
 	if (unlikely(GET_SIT_VBLOCKS(raw_sit) != valid_blocks)) {
-		f2fs_msg(sbi->sb, KERN_ERR,
-				"Mismatch valid blocks %d vs. %d",
-					GET_SIT_VBLOCKS(raw_sit), valid_blocks);
+		f2fs_err(sbi, "Mismatch valid blocks %d vs. %d",
+			 GET_SIT_VBLOCKS(raw_sit), valid_blocks);
 		set_sbi_flag(sbi, SBI_NEED_FSCK);
 		return -EFSCORRUPTED;
 	}
@@ -703,9 +708,8 @@
 	/* check segment usage, and check boundary of a given segment number */
 	if (unlikely(GET_SIT_VBLOCKS(raw_sit) > sbi->blocks_per_seg
 					|| segno > TOTAL_SEGS(sbi) - 1)) {
-		f2fs_msg(sbi->sb, KERN_ERR,
-				"Wrong valid blocks %d or segno %u",
-					GET_SIT_VBLOCKS(raw_sit), segno);
+		f2fs_err(sbi, "Wrong valid blocks %d or segno %u",
+			 GET_SIT_VBLOCKS(raw_sit), segno);
 		set_sbi_flag(sbi, SBI_NEED_FSCK);
 		return -EFSCORRUPTED;
 	}
diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
index 23384f9..9c2e10d 100644
--- a/fs/f2fs/super.c
+++ b/fs/f2fs/super.c
@@ -23,6 +23,7 @@
 #include <linux/f2fs_fs.h>
 #include <linux/sysfs.h>
 #include <linux/quota.h>
+#include <linux/unicode.h>
 
 #include "f2fs.h"
 #include "node.h"
@@ -136,7 +137,10 @@
 	Opt_alloc,
 	Opt_fsync,
 	Opt_test_dummy_encryption,
-	Opt_checkpoint,
+	Opt_checkpoint_disable,
+	Opt_checkpoint_disable_cap,
+	Opt_checkpoint_disable_cap_perc,
+	Opt_checkpoint_enable,
 	Opt_err,
 };
 
@@ -195,45 +199,82 @@
 	{Opt_alloc, "alloc_mode=%s"},
 	{Opt_fsync, "fsync_mode=%s"},
 	{Opt_test_dummy_encryption, "test_dummy_encryption"},
-	{Opt_checkpoint, "checkpoint=%s"},
+	{Opt_checkpoint_disable, "checkpoint=disable"},
+	{Opt_checkpoint_disable_cap, "checkpoint=disable:%u"},
+	{Opt_checkpoint_disable_cap_perc, "checkpoint=disable:%u%%"},
+	{Opt_checkpoint_enable, "checkpoint=enable"},
 	{Opt_err, NULL},
 };
 
-void f2fs_msg(struct super_block *sb, const char *level, const char *fmt, ...)
+void f2fs_printk(struct f2fs_sb_info *sbi, const char *fmt, ...)
 {
 	struct va_format vaf;
 	va_list args;
+	int level;
 
 	va_start(args, fmt);
-	vaf.fmt = fmt;
+
+	level = printk_get_level(fmt);
+	vaf.fmt = printk_skip_level(fmt);
 	vaf.va = &args;
-	printk("%sF2FS-fs (%s): %pV\n", level, sb->s_id, &vaf);
+	printk("%c%cF2FS-fs (%s): %pV\n",
+	       KERN_SOH_ASCII, level, sbi->sb->s_id, &vaf);
+
 	va_end(args);
 }
 
+#ifdef CONFIG_UNICODE
+static const struct f2fs_sb_encodings {
+	__u16 magic;
+	char *name;
+	char *version;
+} f2fs_sb_encoding_map[] = {
+	{F2FS_ENC_UTF8_12_1, "utf8", "12.1.0"},
+};
+
+static int f2fs_sb_read_encoding(const struct f2fs_super_block *sb,
+				 const struct f2fs_sb_encodings **encoding,
+				 __u16 *flags)
+{
+	__u16 magic = le16_to_cpu(sb->s_encoding);
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(f2fs_sb_encoding_map); i++)
+		if (magic == f2fs_sb_encoding_map[i].magic)
+			break;
+
+	if (i >= ARRAY_SIZE(f2fs_sb_encoding_map))
+		return -EINVAL;
+
+	*encoding = &f2fs_sb_encoding_map[i];
+	*flags = le16_to_cpu(sb->s_encoding_flags);
+
+	return 0;
+}
+#endif
+
 static inline void limit_reserve_root(struct f2fs_sb_info *sbi)
 {
-	block_t limit = (sbi->user_block_count << 1) / 1000;
+	block_t limit = min((sbi->user_block_count << 1) / 1000,
+			sbi->user_block_count - sbi->reserved_blocks);
 
 	/* limit is 0.2% */
 	if (test_opt(sbi, RESERVE_ROOT) &&
 			F2FS_OPTION(sbi).root_reserved_blocks > limit) {
 		F2FS_OPTION(sbi).root_reserved_blocks = limit;
-		f2fs_msg(sbi->sb, KERN_INFO,
-			"Reduce reserved blocks for root = %u",
-			F2FS_OPTION(sbi).root_reserved_blocks);
+		f2fs_info(sbi, "Reduce reserved blocks for root = %u",
+			  F2FS_OPTION(sbi).root_reserved_blocks);
 	}
 	if (!test_opt(sbi, RESERVE_ROOT) &&
 		(!uid_eq(F2FS_OPTION(sbi).s_resuid,
 				make_kuid(&init_user_ns, F2FS_DEF_RESUID)) ||
 		!gid_eq(F2FS_OPTION(sbi).s_resgid,
 				make_kgid(&init_user_ns, F2FS_DEF_RESGID))))
-		f2fs_msg(sbi->sb, KERN_INFO,
-			"Ignore s_resuid=%u, s_resgid=%u w/o reserve_root",
-				from_kuid_munged(&init_user_ns,
-					F2FS_OPTION(sbi).s_resuid),
-				from_kgid_munged(&init_user_ns,
-					F2FS_OPTION(sbi).s_resgid));
+		f2fs_info(sbi, "Ignore s_resuid=%u, s_resgid=%u w/o reserve_root",
+			  from_kuid_munged(&init_user_ns,
+					   F2FS_OPTION(sbi).s_resuid),
+			  from_kgid_munged(&init_user_ns,
+					   F2FS_OPTION(sbi).s_resgid));
 }
 
 static void init_once(void *foo)
@@ -254,35 +295,29 @@
 	int ret = -EINVAL;
 
 	if (sb_any_quota_loaded(sb) && !F2FS_OPTION(sbi).s_qf_names[qtype]) {
-		f2fs_msg(sb, KERN_ERR,
-			"Cannot change journaled "
-			"quota options when quota turned on");
+		f2fs_err(sbi, "Cannot change journaled quota options when quota turned on");
 		return -EINVAL;
 	}
 	if (f2fs_sb_has_quota_ino(sbi)) {
-		f2fs_msg(sb, KERN_INFO,
-			"QUOTA feature is enabled, so ignore qf_name");
+		f2fs_info(sbi, "QUOTA feature is enabled, so ignore qf_name");
 		return 0;
 	}
 
 	qname = match_strdup(args);
 	if (!qname) {
-		f2fs_msg(sb, KERN_ERR,
-			"Not enough memory for storing quotafile name");
+		f2fs_err(sbi, "Not enough memory for storing quotafile name");
 		return -ENOMEM;
 	}
 	if (F2FS_OPTION(sbi).s_qf_names[qtype]) {
 		if (strcmp(F2FS_OPTION(sbi).s_qf_names[qtype], qname) == 0)
 			ret = 0;
 		else
-			f2fs_msg(sb, KERN_ERR,
-				 "%s quota file already specified",
+			f2fs_err(sbi, "%s quota file already specified",
 				 QTYPE2NAME(qtype));
 		goto errout;
 	}
 	if (strchr(qname, '/')) {
-		f2fs_msg(sb, KERN_ERR,
-			"quotafile must be on filesystem root");
+		f2fs_err(sbi, "quotafile must be on filesystem root");
 		goto errout;
 	}
 	F2FS_OPTION(sbi).s_qf_names[qtype] = qname;
@@ -298,8 +333,7 @@
 	struct f2fs_sb_info *sbi = F2FS_SB(sb);
 
 	if (sb_any_quota_loaded(sb) && F2FS_OPTION(sbi).s_qf_names[qtype]) {
-		f2fs_msg(sb, KERN_ERR, "Cannot change journaled quota options"
-			" when quota turned on");
+		f2fs_err(sbi, "Cannot change journaled quota options when quota turned on");
 		return -EINVAL;
 	}
 	kvfree(F2FS_OPTION(sbi).s_qf_names[qtype]);
@@ -315,8 +349,7 @@
 	 * to support legacy quotas in quota files.
 	 */
 	if (test_opt(sbi, PRJQUOTA) && !f2fs_sb_has_project_quota(sbi)) {
-		f2fs_msg(sbi->sb, KERN_ERR, "Project quota feature not enabled. "
-			 "Cannot enable project quota enforcement.");
+		f2fs_err(sbi, "Project quota feature not enabled. Cannot enable project quota enforcement.");
 		return -1;
 	}
 	if (F2FS_OPTION(sbi).s_qf_names[USRQUOTA] ||
@@ -336,21 +369,18 @@
 
 		if (test_opt(sbi, GRPQUOTA) || test_opt(sbi, USRQUOTA) ||
 				test_opt(sbi, PRJQUOTA)) {
-			f2fs_msg(sbi->sb, KERN_ERR, "old and new quota "
-					"format mixing");
+			f2fs_err(sbi, "old and new quota format mixing");
 			return -1;
 		}
 
 		if (!F2FS_OPTION(sbi).s_jquota_fmt) {
-			f2fs_msg(sbi->sb, KERN_ERR, "journaled quota format "
-					"not specified");
+			f2fs_err(sbi, "journaled quota format not specified");
 			return -1;
 		}
 	}
 
 	if (f2fs_sb_has_quota_ino(sbi) && F2FS_OPTION(sbi).s_jquota_fmt) {
-		f2fs_msg(sbi->sb, KERN_INFO,
-			"QUOTA feature is enabled, so ignore jquota_fmt");
+		f2fs_info(sbi, "QUOTA feature is enabled, so ignore jquota_fmt");
 		F2FS_OPTION(sbi).s_jquota_fmt = 0;
 	}
 	return 0;
@@ -418,8 +448,7 @@
 			break;
 		case Opt_nodiscard:
 			if (f2fs_sb_has_blkzoned(sbi)) {
-				f2fs_msg(sb, KERN_WARNING,
-					"discard is required for zoned block devices");
+				f2fs_warn(sbi, "discard is required for zoned block devices");
 				return -EINVAL;
 			}
 			clear_opt(sbi, DISCARD);
@@ -451,20 +480,16 @@
 			break;
 #else
 		case Opt_user_xattr:
-			f2fs_msg(sb, KERN_INFO,
-				"user_xattr options not supported");
+			f2fs_info(sbi, "user_xattr options not supported");
 			break;
 		case Opt_nouser_xattr:
-			f2fs_msg(sb, KERN_INFO,
-				"nouser_xattr options not supported");
+			f2fs_info(sbi, "nouser_xattr options not supported");
 			break;
 		case Opt_inline_xattr:
-			f2fs_msg(sb, KERN_INFO,
-				"inline_xattr options not supported");
+			f2fs_info(sbi, "inline_xattr options not supported");
 			break;
 		case Opt_noinline_xattr:
-			f2fs_msg(sb, KERN_INFO,
-				"noinline_xattr options not supported");
+			f2fs_info(sbi, "noinline_xattr options not supported");
 			break;
 #endif
 #ifdef CONFIG_F2FS_FS_POSIX_ACL
@@ -476,10 +501,10 @@
 			break;
 #else
 		case Opt_acl:
-			f2fs_msg(sb, KERN_INFO, "acl options not supported");
+			f2fs_info(sbi, "acl options not supported");
 			break;
 		case Opt_noacl:
-			f2fs_msg(sb, KERN_INFO, "noacl options not supported");
+			f2fs_info(sbi, "noacl options not supported");
 			break;
 #endif
 		case Opt_active_logs:
@@ -529,9 +554,8 @@
 			if (args->from && match_int(args, &arg))
 				return -EINVAL;
 			if (test_opt(sbi, RESERVE_ROOT)) {
-				f2fs_msg(sb, KERN_INFO,
-					"Preserve previous reserve_root=%u",
-					F2FS_OPTION(sbi).root_reserved_blocks);
+				f2fs_info(sbi, "Preserve previous reserve_root=%u",
+					  F2FS_OPTION(sbi).root_reserved_blocks);
 			} else {
 				F2FS_OPTION(sbi).root_reserved_blocks = arg;
 				set_opt(sbi, RESERVE_ROOT);
@@ -542,8 +566,7 @@
 				return -EINVAL;
 			uid = make_kuid(current_user_ns(), arg);
 			if (!uid_valid(uid)) {
-				f2fs_msg(sb, KERN_ERR,
-					"Invalid uid value %d", arg);
+				f2fs_err(sbi, "Invalid uid value %d", arg);
 				return -EINVAL;
 			}
 			F2FS_OPTION(sbi).s_resuid = uid;
@@ -553,8 +576,7 @@
 				return -EINVAL;
 			gid = make_kgid(current_user_ns(), arg);
 			if (!gid_valid(gid)) {
-				f2fs_msg(sb, KERN_ERR,
-					"Invalid gid value %d", arg);
+				f2fs_err(sbi, "Invalid gid value %d", arg);
 				return -EINVAL;
 			}
 			F2FS_OPTION(sbi).s_resgid = gid;
@@ -567,9 +589,7 @@
 			if (strlen(name) == 8 &&
 					!strncmp(name, "adaptive", 8)) {
 				if (f2fs_sb_has_blkzoned(sbi)) {
-					f2fs_msg(sb, KERN_WARNING,
-						 "adaptive mode is not allowed with "
-						 "zoned block device feature");
+					f2fs_warn(sbi, "adaptive mode is not allowed with zoned block device feature");
 					kvfree(name);
 					return -EINVAL;
 				}
@@ -587,9 +607,8 @@
 			if (args->from && match_int(args, &arg))
 				return -EINVAL;
 			if (arg <= 0 || arg > __ilog2_u32(BIO_MAX_PAGES)) {
-				f2fs_msg(sb, KERN_WARNING,
-					"Not support %d, larger than %d",
-					1 << arg, BIO_MAX_PAGES);
+				f2fs_warn(sbi, "Not support %d, larger than %d",
+					  1 << arg, BIO_MAX_PAGES);
 				return -EINVAL;
 			}
 			F2FS_OPTION(sbi).write_io_size_bits = arg;
@@ -610,13 +629,11 @@
 			break;
 #else
 		case Opt_fault_injection:
-			f2fs_msg(sb, KERN_INFO,
-				"fault_injection options not supported");
+			f2fs_info(sbi, "fault_injection options not supported");
 			break;
 
 		case Opt_fault_type:
-			f2fs_msg(sb, KERN_INFO,
-				"fault_type options not supported");
+			f2fs_info(sbi, "fault_type options not supported");
 			break;
 #endif
 		case Opt_lazytime:
@@ -696,8 +713,7 @@
 		case Opt_jqfmt_vfsv0:
 		case Opt_jqfmt_vfsv1:
 		case Opt_noquota:
-			f2fs_msg(sb, KERN_INFO,
-					"quota operations not supported");
+			f2fs_info(sbi, "quota operations not supported");
 			break;
 #endif
 		case Opt_whint:
@@ -759,39 +775,44 @@
 		case Opt_test_dummy_encryption:
 #ifdef CONFIG_FS_ENCRYPTION
 			if (!f2fs_sb_has_encrypt(sbi)) {
-				f2fs_msg(sb, KERN_ERR, "Encrypt feature is off");
+				f2fs_err(sbi, "Encrypt feature is off");
 				return -EINVAL;
 			}
 
 			F2FS_OPTION(sbi).test_dummy_encryption = true;
-			f2fs_msg(sb, KERN_INFO,
-					"Test dummy encryption mode enabled");
+			f2fs_info(sbi, "Test dummy encryption mode enabled");
 #else
-			f2fs_msg(sb, KERN_INFO,
-					"Test dummy encryption mount option ignored");
+			f2fs_info(sbi, "Test dummy encryption mount option ignored");
 #endif
 			break;
-		case Opt_checkpoint:
-			name = match_strdup(&args[0]);
-			if (!name)
-				return -ENOMEM;
-
-			if (strlen(name) == 6 &&
-					!strncmp(name, "enable", 6)) {
-				clear_opt(sbi, DISABLE_CHECKPOINT);
-			} else if (strlen(name) == 7 &&
-					!strncmp(name, "disable", 7)) {
-				set_opt(sbi, DISABLE_CHECKPOINT);
-			} else {
-				kvfree(name);
+		case Opt_checkpoint_disable_cap_perc:
+			if (args->from && match_int(args, &arg))
 				return -EINVAL;
-			}
-			kvfree(name);
+			if (arg < 0 || arg > 100)
+				return -EINVAL;
+			if (arg == 100)
+				F2FS_OPTION(sbi).unusable_cap =
+					sbi->user_block_count;
+			else
+				F2FS_OPTION(sbi).unusable_cap =
+					(sbi->user_block_count / 100) *	arg;
+			set_opt(sbi, DISABLE_CHECKPOINT);
+			break;
+		case Opt_checkpoint_disable_cap:
+			if (args->from && match_int(args, &arg))
+				return -EINVAL;
+			F2FS_OPTION(sbi).unusable_cap = arg;
+			set_opt(sbi, DISABLE_CHECKPOINT);
+			break;
+		case Opt_checkpoint_disable:
+			set_opt(sbi, DISABLE_CHECKPOINT);
+			break;
+		case Opt_checkpoint_enable:
+			clear_opt(sbi, DISABLE_CHECKPOINT);
 			break;
 		default:
-			f2fs_msg(sb, KERN_ERR,
-				"Unrecognized mount option \"%s\" or missing value",
-				p);
+			f2fs_err(sbi, "Unrecognized mount option \"%s\" or missing value",
+				 p);
 			return -EINVAL;
 		}
 	}
@@ -800,23 +821,25 @@
 		return -EINVAL;
 #else
 	if (f2fs_sb_has_quota_ino(sbi) && !f2fs_readonly(sbi->sb)) {
-		f2fs_msg(sbi->sb, KERN_INFO,
-			 "Filesystem with quota feature cannot be mounted RDWR "
-			 "without CONFIG_QUOTA");
+		f2fs_info(sbi, "Filesystem with quota feature cannot be mounted RDWR without CONFIG_QUOTA");
 		return -EINVAL;
 	}
 	if (f2fs_sb_has_project_quota(sbi) && !f2fs_readonly(sbi->sb)) {
-		f2fs_msg(sb, KERN_ERR,
-			"Filesystem with project quota feature cannot be "
-			"mounted RDWR without CONFIG_QUOTA");
+		f2fs_err(sbi, "Filesystem with project quota feature cannot be mounted RDWR without CONFIG_QUOTA");
+		return -EINVAL;
+	}
+#endif
+#ifndef CONFIG_UNICODE
+	if (f2fs_sb_has_casefold(sbi)) {
+		f2fs_err(sbi,
+			"Filesystem with casefold feature cannot be mounted without CONFIG_UNICODE");
 		return -EINVAL;
 	}
 #endif
 
 	if (F2FS_IO_SIZE_BITS(sbi) && !test_opt(sbi, LFS)) {
-		f2fs_msg(sb, KERN_ERR,
-				"Should set mode=lfs with %uKB-sized IO",
-				F2FS_IO_SIZE_KB(sbi));
+		f2fs_err(sbi, "Should set mode=lfs with %uKB-sized IO",
+			 F2FS_IO_SIZE_KB(sbi));
 		return -EINVAL;
 	}
 
@@ -825,15 +848,11 @@
 
 		if (!f2fs_sb_has_extra_attr(sbi) ||
 			!f2fs_sb_has_flexible_inline_xattr(sbi)) {
-			f2fs_msg(sb, KERN_ERR,
-					"extra_attr or flexible_inline_xattr "
-					"feature is off");
+			f2fs_err(sbi, "extra_attr or flexible_inline_xattr feature is off");
 			return -EINVAL;
 		}
 		if (!test_opt(sbi, INLINE_XATTR)) {
-			f2fs_msg(sb, KERN_ERR,
-					"inline_xattr_size option should be "
-					"set with inline_xattr option");
+			f2fs_err(sbi, "inline_xattr_size option should be set with inline_xattr option");
 			return -EINVAL;
 		}
 
@@ -842,16 +861,14 @@
 
 		if (F2FS_OPTION(sbi).inline_xattr_size < min_size ||
 				F2FS_OPTION(sbi).inline_xattr_size > max_size) {
-			f2fs_msg(sb, KERN_ERR,
-				"inline xattr size is out of range: %d ~ %d",
-				min_size, max_size);
+			f2fs_err(sbi, "inline xattr size is out of range: %d ~ %d",
+				 min_size, max_size);
 			return -EINVAL;
 		}
 	}
 
 	if (test_opt(sbi, DISABLE_CHECKPOINT) && test_opt(sbi, LFS)) {
-		f2fs_msg(sb, KERN_ERR,
-				"LFS not compatible with checkpoint=disable\n");
+		f2fs_err(sbi, "LFS not compatible with checkpoint=disable\n");
 		return -EINVAL;
 	}
 
@@ -894,7 +911,21 @@
 
 static int f2fs_drop_inode(struct inode *inode)
 {
+	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	int ret;
+
+	/*
+	 * during filesystem shutdown, if checkpoint is disabled,
+	 * drop useless meta/node dirty pages.
+	 */
+	if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED))) {
+		if (inode->i_ino == F2FS_NODE_INO(sbi) ||
+			inode->i_ino == F2FS_META_INO(sbi)) {
+			trace_f2fs_drop_inode(inode, 1);
+			return 1;
+		}
+	}
+
 	/*
 	 * This is to avoid a deadlock condition like below.
 	 * writeback_single_inode(inode)
@@ -1003,6 +1034,9 @@
 static void f2fs_i_callback(struct rcu_head *head)
 {
 	struct inode *inode = container_of(head, struct inode, i_rcu);
+
+	fscrypt_free_inode(inode);
+
 	kmem_cache_free(f2fs_inode_cachep, F2FS_I(inode));
 }
 
@@ -1136,6 +1170,9 @@
 	destroy_percpu_info(sbi);
 	for (i = 0; i < NR_PAGE_TYPE; i++)
 		kvfree(sbi->write_io[i]);
+#ifdef CONFIG_UNICODE
+	utf8_unload(sbi->s_encoding);
+#endif
 	kvfree(sbi);
 }
 
@@ -1203,9 +1240,13 @@
 		return PTR_ERR(dquot);
 	spin_lock(&dquot->dq_dqb_lock);
 
-	limit = (dquot->dq_dqb.dqb_bsoftlimit ?
-		 dquot->dq_dqb.dqb_bsoftlimit :
-		 dquot->dq_dqb.dqb_bhardlimit) >> sb->s_blocksize_bits;
+	limit = 0;
+	if (dquot->dq_dqb.dqb_bsoftlimit)
+		limit = dquot->dq_dqb.dqb_bsoftlimit;
+	if (dquot->dq_dqb.dqb_bhardlimit &&
+			(!limit || dquot->dq_dqb.dqb_bhardlimit < limit))
+		limit = dquot->dq_dqb.dqb_bhardlimit;
+
 	if (limit && buf->f_blocks > limit) {
 		curblock = dquot->dq_dqb.dqb_curspace >> sb->s_blocksize_bits;
 		buf->f_blocks = limit;
@@ -1214,9 +1255,13 @@
 			 (buf->f_blocks - curblock) : 0;
 	}
 
-	limit = dquot->dq_dqb.dqb_isoftlimit ?
-		dquot->dq_dqb.dqb_isoftlimit :
-		dquot->dq_dqb.dqb_ihardlimit;
+	limit = 0;
+	if (dquot->dq_dqb.dqb_isoftlimit)
+		limit = dquot->dq_dqb.dqb_isoftlimit;
+	if (dquot->dq_dqb.dqb_ihardlimit &&
+			(!limit || dquot->dq_dqb.dqb_ihardlimit < limit))
+		limit = dquot->dq_dqb.dqb_ihardlimit;
+
 	if (limit && buf->f_files > limit) {
 		buf->f_files = limit;
 		buf->f_ffree =
@@ -1261,8 +1306,7 @@
 	else
 		buf->f_bavail = 0;
 
-	avail_node_count = sbi->total_node_count - sbi->nquota_files -
-						F2FS_RESERVED_NODE_NUM;
+	avail_node_count = sbi->total_node_count - F2FS_RESERVED_NODE_NUM;
 
 	if (avail_node_count > user_block_count) {
 		buf->f_files = user_block_count;
@@ -1339,6 +1383,8 @@
 		seq_puts(seq, ",disable_roll_forward");
 	if (test_opt(sbi, DISCARD))
 		seq_puts(seq, ",discard");
+	else
+		seq_puts(seq, ",nodiscard");
 	if (test_opt(sbi, NOHEAP))
 		seq_puts(seq, ",no_heap");
 	else
@@ -1435,8 +1481,8 @@
 		seq_printf(seq, ",alloc_mode=%s", "reuse");
 
 	if (test_opt(sbi, DISABLE_CHECKPOINT))
-		seq_puts(seq, ",checkpoint=disable");
-
+		seq_printf(seq, ",checkpoint=disable:%u",
+				F2FS_OPTION(sbi).unusable_cap);
 	if (F2FS_OPTION(sbi).fsync_mode == FSYNC_MODE_POSIX)
 		seq_printf(seq, ",fsync_mode=%s", "posix");
 	else if (F2FS_OPTION(sbi).fsync_mode == FSYNC_MODE_STRICT)
@@ -1465,6 +1511,7 @@
 	set_opt(sbi, EXTENT_CACHE);
 	set_opt(sbi, NOHEAP);
 	clear_opt(sbi, DISABLE_CHECKPOINT);
+	F2FS_OPTION(sbi).unusable_cap = 0;
 	sbi->sb->s_flags |= SB_LAZYTIME;
 	set_opt(sbi, FLUSH_MERGE);
 	set_opt(sbi, DISCARD);
@@ -1493,10 +1540,10 @@
 	struct cp_control cpc;
 	int err = 0;
 	int ret;
+	block_t unusable;
 
 	if (s_flags & SB_RDONLY) {
-		f2fs_msg(sbi->sb, KERN_ERR,
-				"checkpoint=disable on readonly fs");
+		f2fs_err(sbi, "checkpoint=disable on readonly fs");
 		return -EINVAL;
 	}
 	sbi->sb->s_flags |= SB_ACTIVE;
@@ -1520,7 +1567,8 @@
 		goto restore_flag;
 	}
 
-	if (f2fs_disable_cp_again(sbi)) {
+	unusable = f2fs_get_unusable_blocks(sbi);
+	if (f2fs_disable_cp_again(sbi, unusable)) {
 		err = -EAGAIN;
 		goto restore_flag;
 	}
@@ -1533,7 +1581,7 @@
 		goto out_unlock;
 
 	spin_lock(&sbi->stat_lock);
-	sbi->unusable_block_count = 0;
+	sbi->unusable_block_count = unusable;
 	spin_unlock(&sbi->stat_lock);
 
 out_unlock:
@@ -1565,6 +1613,7 @@
 	bool need_stop_gc = false;
 	bool no_extent_cache = !test_opt(sbi, EXTENT_CACHE);
 	bool disable_checkpoint = test_opt(sbi, DISABLE_CHECKPOINT);
+	bool no_io_align = !F2FS_IO_ALIGNED(sbi);
 	bool checkpoint_changed;
 #ifdef CONFIG_QUOTA
 	int i, j;
@@ -1598,8 +1647,8 @@
 	/* recover superblocks we couldn't write due to previous RO mount */
 	if (!(*flags & SB_RDONLY) && is_sbi_flag_set(sbi, SBI_NEED_SB_WRITE)) {
 		err = f2fs_commit_super(sbi, false);
-		f2fs_msg(sb, KERN_INFO,
-			"Try to recover all the superblocks, ret: %d", err);
+		f2fs_info(sbi, "Try to recover all the superblocks, ret: %d",
+			  err);
 		if (!err)
 			clear_sbi_flag(sbi, SBI_NEED_SB_WRITE);
 	}
@@ -1640,15 +1689,19 @@
 	/* disallow enable/disable extent_cache dynamically */
 	if (no_extent_cache == !!test_opt(sbi, EXTENT_CACHE)) {
 		err = -EINVAL;
-		f2fs_msg(sbi->sb, KERN_WARNING,
-				"switch extent_cache option is not allowed");
+		f2fs_warn(sbi, "switch extent_cache option is not allowed");
+		goto restore_opts;
+	}
+
+	if (no_io_align == !!F2FS_IO_ALIGNED(sbi)) {
+		err = -EINVAL;
+		f2fs_warn(sbi, "switch io_bits option is not allowed");
 		goto restore_opts;
 	}
 
 	if ((*flags & SB_RDONLY) && test_opt(sbi, DISABLE_CHECKPOINT)) {
 		err = -EINVAL;
-		f2fs_msg(sbi->sb, KERN_WARNING,
-			"disabling checkpoint not compatible with read-only");
+		f2fs_warn(sbi, "disabling checkpoint not compatible with read-only");
 		goto restore_opts;
 	}
 
@@ -1718,8 +1771,7 @@
 restore_gc:
 	if (need_restart_gc) {
 		if (f2fs_start_gc_thread(sbi))
-			f2fs_msg(sbi->sb, KERN_WARNING,
-				"background gc thread has stopped");
+			f2fs_warn(sbi, "background gc thread has stopped");
 	} else if (need_stop_gc) {
 		f2fs_stop_gc_thread(sbi);
 	}
@@ -1858,8 +1910,7 @@
 static int f2fs_quota_on_mount(struct f2fs_sb_info *sbi, int type)
 {
 	if (is_set_ckpt_flags(sbi, CP_QUOTA_NEED_FSCK_FLAG)) {
-		f2fs_msg(sbi->sb, KERN_ERR,
-			"quota sysfile may be corrupted, skip loading it");
+		f2fs_err(sbi, "quota sysfile may be corrupted, skip loading it");
 		return 0;
 	}
 
@@ -1875,8 +1926,7 @@
 	if (f2fs_sb_has_quota_ino(sbi) && rdonly) {
 		err = f2fs_enable_quotas(sbi->sb);
 		if (err) {
-			f2fs_msg(sbi->sb, KERN_ERR,
-					"Cannot turn on quota_ino: %d", err);
+			f2fs_err(sbi, "Cannot turn on quota_ino: %d", err);
 			return 0;
 		}
 		return 1;
@@ -1889,8 +1939,8 @@
 				enabled = 1;
 				continue;
 			}
-			f2fs_msg(sbi->sb, KERN_ERR,
-				"Cannot turn on quotas: %d on %d", err, i);
+			f2fs_err(sbi, "Cannot turn on quotas: %d on %d",
+				 err, i);
 		}
 	}
 	return enabled;
@@ -1911,8 +1961,7 @@
 
 	qf_inode = f2fs_iget(sb, qf_inum);
 	if (IS_ERR(qf_inode)) {
-		f2fs_msg(sb, KERN_ERR,
-			"Bad quota inode %u:%lu", type, qf_inum);
+		f2fs_err(F2FS_SB(sb), "Bad quota inode %u:%lu", type, qf_inum);
 		return PTR_ERR(qf_inode);
 	}
 
@@ -1925,17 +1974,17 @@
 
 static int f2fs_enable_quotas(struct super_block *sb)
 {
+	struct f2fs_sb_info *sbi = F2FS_SB(sb);
 	int type, err = 0;
 	unsigned long qf_inum;
 	bool quota_mopt[MAXQUOTAS] = {
-		test_opt(F2FS_SB(sb), USRQUOTA),
-		test_opt(F2FS_SB(sb), GRPQUOTA),
-		test_opt(F2FS_SB(sb), PRJQUOTA),
+		test_opt(sbi, USRQUOTA),
+		test_opt(sbi, GRPQUOTA),
+		test_opt(sbi, PRJQUOTA),
 	};
 
 	if (is_set_ckpt_flags(F2FS_SB(sb), CP_QUOTA_NEED_FSCK_FLAG)) {
-		f2fs_msg(sb, KERN_ERR,
-			"quota file may be corrupted, skip loading it");
+		f2fs_err(sbi, "quota file may be corrupted, skip loading it");
 		return 0;
 	}
 
@@ -1948,10 +1997,8 @@
 				DQUOT_USAGE_ENABLED |
 				(quota_mopt[type] ? DQUOT_LIMITS_ENABLED : 0));
 			if (err) {
-				f2fs_msg(sb, KERN_ERR,
-					"Failed to enable quota tracking "
-					"(type=%d, err=%d). Please run "
-					"fsck to fix.", type, err);
+				f2fs_err(sbi, "Failed to enable quota tracking (type=%d, err=%d). Please run fsck to fix.",
+					 type, err);
 				for (type--; type >= 0; type--)
 					dquot_quota_off(sb, type);
 				set_sbi_flag(F2FS_SB(sb),
@@ -1970,6 +2017,18 @@
 	int cnt;
 	int ret;
 
+	/*
+	 * do_quotactl
+	 *  f2fs_quota_sync
+	 *  down_read(quota_sem)
+	 *  dquot_writeback_dquots()
+	 *  f2fs_dquot_commit
+	 *                            block_operation
+	 *                            down_read(quota_sem)
+	 */
+	f2fs_lock_op(sbi);
+
+	down_read(&sbi->quota_sem);
 	ret = dquot_writeback_dquots(sb, type);
 	if (ret)
 		goto out;
@@ -2007,6 +2066,8 @@
 out:
 	if (ret)
 		set_sbi_flag(F2FS_SB(sb), SBI_QUOTA_NEED_REPAIR);
+	up_read(&sbi->quota_sem);
+	f2fs_unlock_op(sbi);
 	return ret;
 }
 
@@ -2016,6 +2077,12 @@
 	struct inode *inode;
 	int err;
 
+	/* if quota sysfile exists, deny enabling quota with specific file */
+	if (f2fs_sb_has_quota_ino(F2FS_SB(sb))) {
+		f2fs_err(F2FS_SB(sb), "quota sysfile already exists");
+		return -EBUSY;
+	}
+
 	err = f2fs_quota_sync(sb, type);
 	if (err)
 		return err;
@@ -2035,7 +2102,7 @@
 	return 0;
 }
 
-static int f2fs_quota_off(struct super_block *sb, int type)
+static int __f2fs_quota_off(struct super_block *sb, int type)
 {
 	struct inode *inode = sb_dqopt(sb)->files[type];
 	int err;
@@ -2061,20 +2128,35 @@
 	return err;
 }
 
+static int f2fs_quota_off(struct super_block *sb, int type)
+{
+	struct f2fs_sb_info *sbi = F2FS_SB(sb);
+	int err;
+
+	err = __f2fs_quota_off(sb, type);
+
+	/*
+	 * quotactl can shutdown journalled quota, result in inconsistence
+	 * between quota record and fs data by following updates, tag the
+	 * flag to let fsck be aware of it.
+	 */
+	if (is_journalled_quota(sbi))
+		set_sbi_flag(sbi, SBI_QUOTA_NEED_REPAIR);
+	return err;
+}
+
 void f2fs_quota_off_umount(struct super_block *sb)
 {
 	int type;
 	int err;
 
 	for (type = 0; type < MAXQUOTAS; type++) {
-		err = f2fs_quota_off(sb, type);
+		err = __f2fs_quota_off(sb, type);
 		if (err) {
 			int ret = dquot_quota_off(sb, type);
 
-			f2fs_msg(sb, KERN_ERR,
-				"Fail to turn off disk quota "
-				"(type: %d, err: %d, ret:%d), Please "
-				"run fsck to fix it.", type, err, ret);
+			f2fs_err(F2FS_SB(sb), "Fail to turn off disk quota (type: %d, err: %d, ret:%d), Please run fsck to fix it.",
+				 type, err, ret);
 			set_sbi_flag(F2FS_SB(sb), SBI_QUOTA_NEED_REPAIR);
 		}
 	}
@@ -2100,32 +2182,40 @@
 
 static int f2fs_dquot_commit(struct dquot *dquot)
 {
+	struct f2fs_sb_info *sbi = F2FS_SB(dquot->dq_sb);
 	int ret;
 
+	down_read(&sbi->quota_sem);
 	ret = dquot_commit(dquot);
 	if (ret < 0)
-		set_sbi_flag(F2FS_SB(dquot->dq_sb), SBI_QUOTA_NEED_REPAIR);
+		set_sbi_flag(sbi, SBI_QUOTA_NEED_REPAIR);
+	up_read(&sbi->quota_sem);
 	return ret;
 }
 
 static int f2fs_dquot_acquire(struct dquot *dquot)
 {
+	struct f2fs_sb_info *sbi = F2FS_SB(dquot->dq_sb);
 	int ret;
 
+	down_read(&sbi->quota_sem);
 	ret = dquot_acquire(dquot);
 	if (ret < 0)
-		set_sbi_flag(F2FS_SB(dquot->dq_sb), SBI_QUOTA_NEED_REPAIR);
-
+		set_sbi_flag(sbi, SBI_QUOTA_NEED_REPAIR);
+	up_read(&sbi->quota_sem);
 	return ret;
 }
 
 static int f2fs_dquot_release(struct dquot *dquot)
 {
+	struct f2fs_sb_info *sbi = F2FS_SB(dquot->dq_sb);
 	int ret;
 
+	down_read(&sbi->quota_sem);
 	ret = dquot_release(dquot);
 	if (ret < 0)
-		set_sbi_flag(F2FS_SB(dquot->dq_sb), SBI_QUOTA_NEED_REPAIR);
+		set_sbi_flag(sbi, SBI_QUOTA_NEED_REPAIR);
+	up_read(&sbi->quota_sem);
 	return ret;
 }
 
@@ -2135,22 +2225,27 @@
 	struct f2fs_sb_info *sbi = F2FS_SB(sb);
 	int ret;
 
+	down_read(&sbi->quota_sem);
 	ret = dquot_mark_dquot_dirty(dquot);
 
 	/* if we are using journalled quota */
 	if (is_journalled_quota(sbi))
 		set_sbi_flag(sbi, SBI_QUOTA_NEED_FLUSH);
 
+	up_read(&sbi->quota_sem);
 	return ret;
 }
 
 static int f2fs_dquot_commit_info(struct super_block *sb, int type)
 {
+	struct f2fs_sb_info *sbi = F2FS_SB(sb);
 	int ret;
 
+	down_read(&sbi->quota_sem);
 	ret = dquot_commit_info(sb, type);
 	if (ret < 0)
-		set_sbi_flag(F2FS_SB(sb), SBI_QUOTA_NEED_REPAIR);
+		set_sbi_flag(sbi, SBI_QUOTA_NEED_REPAIR);
+	up_read(&sbi->quota_sem);
 	return ret;
 }
 
@@ -2374,55 +2469,49 @@
 				(segment_count << log_blocks_per_seg);
 
 	if (segment0_blkaddr != cp_blkaddr) {
-		f2fs_msg(sb, KERN_INFO,
-			"Mismatch start address, segment0(%u) cp_blkaddr(%u)",
-			segment0_blkaddr, cp_blkaddr);
+		f2fs_info(sbi, "Mismatch start address, segment0(%u) cp_blkaddr(%u)",
+			  segment0_blkaddr, cp_blkaddr);
 		return true;
 	}
 
 	if (cp_blkaddr + (segment_count_ckpt << log_blocks_per_seg) !=
 							sit_blkaddr) {
-		f2fs_msg(sb, KERN_INFO,
-			"Wrong CP boundary, start(%u) end(%u) blocks(%u)",
-			cp_blkaddr, sit_blkaddr,
-			segment_count_ckpt << log_blocks_per_seg);
+		f2fs_info(sbi, "Wrong CP boundary, start(%u) end(%u) blocks(%u)",
+			  cp_blkaddr, sit_blkaddr,
+			  segment_count_ckpt << log_blocks_per_seg);
 		return true;
 	}
 
 	if (sit_blkaddr + (segment_count_sit << log_blocks_per_seg) !=
 							nat_blkaddr) {
-		f2fs_msg(sb, KERN_INFO,
-			"Wrong SIT boundary, start(%u) end(%u) blocks(%u)",
-			sit_blkaddr, nat_blkaddr,
-			segment_count_sit << log_blocks_per_seg);
+		f2fs_info(sbi, "Wrong SIT boundary, start(%u) end(%u) blocks(%u)",
+			  sit_blkaddr, nat_blkaddr,
+			  segment_count_sit << log_blocks_per_seg);
 		return true;
 	}
 
 	if (nat_blkaddr + (segment_count_nat << log_blocks_per_seg) !=
 							ssa_blkaddr) {
-		f2fs_msg(sb, KERN_INFO,
-			"Wrong NAT boundary, start(%u) end(%u) blocks(%u)",
-			nat_blkaddr, ssa_blkaddr,
-			segment_count_nat << log_blocks_per_seg);
+		f2fs_info(sbi, "Wrong NAT boundary, start(%u) end(%u) blocks(%u)",
+			  nat_blkaddr, ssa_blkaddr,
+			  segment_count_nat << log_blocks_per_seg);
 		return true;
 	}
 
 	if (ssa_blkaddr + (segment_count_ssa << log_blocks_per_seg) !=
 							main_blkaddr) {
-		f2fs_msg(sb, KERN_INFO,
-			"Wrong SSA boundary, start(%u) end(%u) blocks(%u)",
-			ssa_blkaddr, main_blkaddr,
-			segment_count_ssa << log_blocks_per_seg);
+		f2fs_info(sbi, "Wrong SSA boundary, start(%u) end(%u) blocks(%u)",
+			  ssa_blkaddr, main_blkaddr,
+			  segment_count_ssa << log_blocks_per_seg);
 		return true;
 	}
 
 	if (main_end_blkaddr > seg_end_blkaddr) {
-		f2fs_msg(sb, KERN_INFO,
-			"Wrong MAIN_AREA boundary, start(%u) end(%u) block(%u)",
-			main_blkaddr,
-			segment0_blkaddr +
-				(segment_count << log_blocks_per_seg),
-			segment_count_main << log_blocks_per_seg);
+		f2fs_info(sbi, "Wrong MAIN_AREA boundary, start(%u) end(%u) block(%u)",
+			  main_blkaddr,
+			  segment0_blkaddr +
+			  (segment_count << log_blocks_per_seg),
+			  segment_count_main << log_blocks_per_seg);
 		return true;
 	} else if (main_end_blkaddr < seg_end_blkaddr) {
 		int err = 0;
@@ -2439,12 +2528,11 @@
 			err = __f2fs_commit_super(bh, NULL);
 			res = err ? "failed" : "done";
 		}
-		f2fs_msg(sb, KERN_INFO,
-			"Fix alignment : %s, start(%u) end(%u) block(%u)",
-			res, main_blkaddr,
-			segment0_blkaddr +
-				(segment_count << log_blocks_per_seg),
-			segment_count_main << log_blocks_per_seg);
+		f2fs_info(sbi, "Fix alignment : %s, start(%u) end(%u) block(%u)",
+			  res, main_blkaddr,
+			  segment0_blkaddr +
+			  (segment_count << log_blocks_per_seg),
+			  segment_count_main << log_blocks_per_seg);
 		if (err)
 			return true;
 	}
@@ -2458,58 +2546,57 @@
 	block_t total_sections, blocks_per_seg;
 	struct f2fs_super_block *raw_super = (struct f2fs_super_block *)
 					(bh->b_data + F2FS_SUPER_OFFSET);
-	struct super_block *sb = sbi->sb;
 	unsigned int blocksize;
 	size_t crc_offset = 0;
 	__u32 crc = 0;
 
+	if (le32_to_cpu(raw_super->magic) != F2FS_SUPER_MAGIC) {
+		f2fs_info(sbi, "Magic Mismatch, valid(0x%x) - read(0x%x)",
+			  F2FS_SUPER_MAGIC, le32_to_cpu(raw_super->magic));
+		return -EINVAL;
+	}
+
 	/* Check checksum_offset and crc in superblock */
 	if (__F2FS_HAS_FEATURE(raw_super, F2FS_FEATURE_SB_CHKSUM)) {
 		crc_offset = le32_to_cpu(raw_super->checksum_offset);
 		if (crc_offset !=
 			offsetof(struct f2fs_super_block, crc)) {
-			f2fs_msg(sb, KERN_INFO,
-				"Invalid SB checksum offset: %zu",
-				crc_offset);
-			return 1;
+			f2fs_info(sbi, "Invalid SB checksum offset: %zu",
+				  crc_offset);
+			return -EFSCORRUPTED;
 		}
 		crc = le32_to_cpu(raw_super->crc);
 		if (!f2fs_crc_valid(sbi, crc, raw_super, crc_offset)) {
-			f2fs_msg(sb, KERN_INFO,
-				"Invalid SB checksum value: %u", crc);
-			return 1;
+			f2fs_info(sbi, "Invalid SB checksum value: %u", crc);
+			return -EFSCORRUPTED;
 		}
 	}
 
 	if (le32_to_cpu(raw_super->magic) != F2FS_SUPER_MAGIC) {
-		f2fs_msg(sb, KERN_INFO,
-			"Magic Mismatch, valid(0x%x) - read(0x%x)",
-			F2FS_SUPER_MAGIC, le32_to_cpu(raw_super->magic));
+		f2fs_info(sbi, "Magic Mismatch, valid(0x%x) - read(0x%x)",
+			  F2FS_SUPER_MAGIC, le32_to_cpu(raw_super->magic));
 		return -EINVAL;
 	}
 
 	/* Currently, support only 4KB page cache size */
 	if (F2FS_BLKSIZE != PAGE_SIZE) {
-		f2fs_msg(sb, KERN_INFO,
-			"Invalid page_cache_size (%lu), supports only 4KB",
-			PAGE_SIZE);
+		f2fs_info(sbi, "Invalid page_cache_size (%lu), supports only 4KB",
+			  PAGE_SIZE);
 		return -EFSCORRUPTED;
 	}
 
 	/* Currently, support only 4KB block size */
 	blocksize = 1 << le32_to_cpu(raw_super->log_blocksize);
 	if (blocksize != F2FS_BLKSIZE) {
-		f2fs_msg(sb, KERN_INFO,
-			"Invalid blocksize (%u), supports only 4KB",
-			blocksize);
+		f2fs_info(sbi, "Invalid blocksize (%u), supports only 4KB",
+			  blocksize);
 		return -EFSCORRUPTED;
 	}
 
 	/* check log blocks per segment */
 	if (le32_to_cpu(raw_super->log_blocks_per_seg) != 9) {
-		f2fs_msg(sb, KERN_INFO,
-			"Invalid log blocks per segment (%u)",
-			le32_to_cpu(raw_super->log_blocks_per_seg));
+		f2fs_info(sbi, "Invalid log blocks per segment (%u)",
+			  le32_to_cpu(raw_super->log_blocks_per_seg));
 		return -EFSCORRUPTED;
 	}
 
@@ -2518,17 +2605,16 @@
 				F2FS_MAX_LOG_SECTOR_SIZE ||
 		le32_to_cpu(raw_super->log_sectorsize) <
 				F2FS_MIN_LOG_SECTOR_SIZE) {
-		f2fs_msg(sb, KERN_INFO, "Invalid log sectorsize (%u)",
-			le32_to_cpu(raw_super->log_sectorsize));
+		f2fs_info(sbi, "Invalid log sectorsize (%u)",
+			  le32_to_cpu(raw_super->log_sectorsize));
 		return -EFSCORRUPTED;
 	}
 	if (le32_to_cpu(raw_super->log_sectors_per_block) +
 		le32_to_cpu(raw_super->log_sectorsize) !=
 			F2FS_MAX_LOG_SECTOR_SIZE) {
-		f2fs_msg(sb, KERN_INFO,
-			"Invalid log sectors per block(%u) log sectorsize(%u)",
-			le32_to_cpu(raw_super->log_sectors_per_block),
-			le32_to_cpu(raw_super->log_sectorsize));
+		f2fs_info(sbi, "Invalid log sectors per block(%u) log sectorsize(%u)",
+			  le32_to_cpu(raw_super->log_sectors_per_block),
+			  le32_to_cpu(raw_super->log_sectorsize));
 		return -EFSCORRUPTED;
 	}
 
@@ -2542,59 +2628,66 @@
 
 	if (segment_count > F2FS_MAX_SEGMENT ||
 				segment_count < F2FS_MIN_SEGMENTS) {
-		f2fs_msg(sb, KERN_INFO,
-			"Invalid segment count (%u)",
-			segment_count);
+		f2fs_info(sbi, "Invalid segment count (%u)", segment_count);
 		return -EFSCORRUPTED;
 	}
 
 	if (total_sections > segment_count ||
 			total_sections < F2FS_MIN_SEGMENTS ||
 			segs_per_sec > segment_count || !segs_per_sec) {
-		f2fs_msg(sb, KERN_INFO,
-			"Invalid segment/section count (%u, %u x %u)",
-			segment_count, total_sections, segs_per_sec);
+		f2fs_info(sbi, "Invalid segment/section count (%u, %u x %u)",
+			  segment_count, total_sections, segs_per_sec);
 		return -EFSCORRUPTED;
 	}
 
 	if ((segment_count / segs_per_sec) < total_sections) {
-		f2fs_msg(sb, KERN_INFO,
-			"Small segment_count (%u < %u * %u)",
-			segment_count, segs_per_sec, total_sections);
+		f2fs_info(sbi, "Small segment_count (%u < %u * %u)",
+			  segment_count, segs_per_sec, total_sections);
 		return -EFSCORRUPTED;
 	}
 
 	if (segment_count > (le64_to_cpu(raw_super->block_count) >> 9)) {
-		f2fs_msg(sb, KERN_INFO,
-			"Wrong segment_count / block_count (%u > %llu)",
-			segment_count, le64_to_cpu(raw_super->block_count));
+		f2fs_info(sbi, "Wrong segment_count / block_count (%u > %llu)",
+			  segment_count, le64_to_cpu(raw_super->block_count));
 		return -EFSCORRUPTED;
 	}
 
+	if (RDEV(0).path[0]) {
+		block_t dev_seg_count = le32_to_cpu(RDEV(0).total_segments);
+		int i = 1;
+
+		while (i < MAX_DEVICES && RDEV(i).path[0]) {
+			dev_seg_count += le32_to_cpu(RDEV(i).total_segments);
+			i++;
+		}
+		if (segment_count != dev_seg_count) {
+			f2fs_info(sbi, "Segment count (%u) mismatch with total segments from devices (%u)",
+					segment_count, dev_seg_count);
+			return -EFSCORRUPTED;
+		}
+	}
+
 	if (secs_per_zone > total_sections || !secs_per_zone) {
-		f2fs_msg(sb, KERN_INFO,
-			"Wrong secs_per_zone / total_sections (%u, %u)",
-			secs_per_zone, total_sections);
+		f2fs_info(sbi, "Wrong secs_per_zone / total_sections (%u, %u)",
+			  secs_per_zone, total_sections);
 		return -EFSCORRUPTED;
 	}
 	if (le32_to_cpu(raw_super->extension_count) > F2FS_MAX_EXTENSION ||
 			raw_super->hot_ext_count > F2FS_MAX_EXTENSION ||
 			(le32_to_cpu(raw_super->extension_count) +
 			raw_super->hot_ext_count) > F2FS_MAX_EXTENSION) {
-		f2fs_msg(sb, KERN_INFO,
-			"Corrupted extension count (%u + %u > %u)",
-			le32_to_cpu(raw_super->extension_count),
-			raw_super->hot_ext_count,
-			F2FS_MAX_EXTENSION);
+		f2fs_info(sbi, "Corrupted extension count (%u + %u > %u)",
+			  le32_to_cpu(raw_super->extension_count),
+			  raw_super->hot_ext_count,
+			  F2FS_MAX_EXTENSION);
 		return -EFSCORRUPTED;
 	}
 
 	if (le32_to_cpu(raw_super->cp_payload) >
 				(blocks_per_seg - F2FS_CP_PACKS)) {
-		f2fs_msg(sb, KERN_INFO,
-			"Insane cp_payload (%u > %u)",
-			le32_to_cpu(raw_super->cp_payload),
-			blocks_per_seg - F2FS_CP_PACKS);
+		f2fs_info(sbi, "Insane cp_payload (%u > %u)",
+			  le32_to_cpu(raw_super->cp_payload),
+			  blocks_per_seg - F2FS_CP_PACKS);
 		return -EFSCORRUPTED;
 	}
 
@@ -2602,11 +2695,10 @@
 	if (le32_to_cpu(raw_super->node_ino) != 1 ||
 		le32_to_cpu(raw_super->meta_ino) != 2 ||
 		le32_to_cpu(raw_super->root_ino) != 3) {
-		f2fs_msg(sb, KERN_INFO,
-			"Invalid Fs Meta Ino: node(%u) meta(%u) root(%u)",
-			le32_to_cpu(raw_super->node_ino),
-			le32_to_cpu(raw_super->meta_ino),
-			le32_to_cpu(raw_super->root_ino));
+		f2fs_info(sbi, "Invalid Fs Meta Ino: node(%u) meta(%u) root(%u)",
+			  le32_to_cpu(raw_super->node_ino),
+			  le32_to_cpu(raw_super->meta_ino),
+			  le32_to_cpu(raw_super->root_ino));
 		return -EFSCORRUPTED;
 	}
 
@@ -2650,8 +2742,7 @@
 
 	if (unlikely(fsmeta < F2FS_MIN_SEGMENTS ||
 			ovp_segments == 0 || reserved_segments == 0)) {
-		f2fs_msg(sbi->sb, KERN_ERR,
-			"Wrong layout: check mkfs.f2fs version");
+		f2fs_err(sbi, "Wrong layout: check mkfs.f2fs version");
 		return 1;
 	}
 
@@ -2660,26 +2751,23 @@
 	log_blocks_per_seg = le32_to_cpu(raw_super->log_blocks_per_seg);
 	if (!user_block_count || user_block_count >=
 			segment_count_main << log_blocks_per_seg) {
-		f2fs_msg(sbi->sb, KERN_ERR,
-			"Wrong user_block_count: %u", user_block_count);
+		f2fs_err(sbi, "Wrong user_block_count: %u",
+			 user_block_count);
 		return 1;
 	}
 
 	valid_user_blocks = le64_to_cpu(ckpt->valid_block_count);
 	if (valid_user_blocks > user_block_count) {
-		f2fs_msg(sbi->sb, KERN_ERR,
-			"Wrong valid_user_blocks: %u, user_block_count: %u",
-			valid_user_blocks, user_block_count);
+		f2fs_err(sbi, "Wrong valid_user_blocks: %u, user_block_count: %u",
+			 valid_user_blocks, user_block_count);
 		return 1;
 	}
 
 	valid_node_count = le32_to_cpu(ckpt->valid_node_count);
-	avail_node_count = sbi->total_node_count - sbi->nquota_files -
-						F2FS_RESERVED_NODE_NUM;
+	avail_node_count = sbi->total_node_count - F2FS_RESERVED_NODE_NUM;
 	if (valid_node_count > avail_node_count) {
-		f2fs_msg(sbi->sb, KERN_ERR,
-			"Wrong valid_node_count: %u, avail_node_count: %u",
-			valid_node_count, avail_node_count);
+		f2fs_err(sbi, "Wrong valid_node_count: %u, avail_node_count: %u",
+			 valid_node_count, avail_node_count);
 		return 1;
 	}
 
@@ -2693,10 +2781,9 @@
 		for (j = i + 1; j < NR_CURSEG_NODE_TYPE; j++) {
 			if (le32_to_cpu(ckpt->cur_node_segno[i]) ==
 				le32_to_cpu(ckpt->cur_node_segno[j])) {
-				f2fs_msg(sbi->sb, KERN_ERR,
-					"Node segment (%u, %u) has the same "
-					"segno: %u", i, j,
-					le32_to_cpu(ckpt->cur_node_segno[i]));
+				f2fs_err(sbi, "Node segment (%u, %u) has the same segno: %u",
+					 i, j,
+					 le32_to_cpu(ckpt->cur_node_segno[i]));
 				return 1;
 			}
 		}
@@ -2708,10 +2795,9 @@
 		for (j = i + 1; j < NR_CURSEG_DATA_TYPE; j++) {
 			if (le32_to_cpu(ckpt->cur_data_segno[i]) ==
 				le32_to_cpu(ckpt->cur_data_segno[j])) {
-				f2fs_msg(sbi->sb, KERN_ERR,
-					"Data segment (%u, %u) has the same "
-					"segno: %u", i, j,
-					le32_to_cpu(ckpt->cur_data_segno[i]));
+				f2fs_err(sbi, "Data segment (%u, %u) has the same segno: %u",
+					 i, j,
+					 le32_to_cpu(ckpt->cur_data_segno[i]));
 				return 1;
 			}
 		}
@@ -2720,10 +2806,9 @@
 		for (j = 0; j < NR_CURSEG_DATA_TYPE; j++) {
 			if (le32_to_cpu(ckpt->cur_node_segno[i]) ==
 				le32_to_cpu(ckpt->cur_data_segno[j])) {
-				f2fs_msg(sbi->sb, KERN_ERR,
-					"Node segment (%u) and Data segment (%u)"
-					" has the same segno: %u", i, j,
-					le32_to_cpu(ckpt->cur_node_segno[i]));
+				f2fs_err(sbi, "Node segment (%u) and Data segment (%u) has the same segno: %u",
+					 i, j,
+					 le32_to_cpu(ckpt->cur_node_segno[i]));
 				return 1;
 			}
 		}
@@ -2734,9 +2819,8 @@
 
 	if (sit_bitmap_size != ((sit_segs / 2) << log_blocks_per_seg) / 8 ||
 		nat_bitmap_size != ((nat_segs / 2) << log_blocks_per_seg) / 8) {
-		f2fs_msg(sbi->sb, KERN_ERR,
-			"Wrong bitmap size: sit: %u, nat:%u",
-			sit_bitmap_size, nat_bitmap_size);
+		f2fs_err(sbi, "Wrong bitmap size: sit: %u, nat:%u",
+			 sit_bitmap_size, nat_bitmap_size);
 		return 1;
 	}
 
@@ -2745,14 +2829,22 @@
 	if (cp_pack_start_sum < cp_payload + 1 ||
 		cp_pack_start_sum > blocks_per_seg - 1 -
 			NR_CURSEG_TYPE) {
-		f2fs_msg(sbi->sb, KERN_ERR,
-			"Wrong cp_pack_start_sum: %u",
-			cp_pack_start_sum);
+		f2fs_err(sbi, "Wrong cp_pack_start_sum: %u",
+			 cp_pack_start_sum);
+		return 1;
+	}
+
+	if (__is_set_ckpt_flags(ckpt, CP_LARGE_NAT_BITMAP_FLAG) &&
+		le32_to_cpu(ckpt->checksum_offset) != CP_MIN_CHKSUM_OFFSET) {
+		f2fs_warn(sbi, "using deprecated layout of large_nat_bitmap, "
+			  "please run fsck v1.13.0 or higher to repair, chksum_offset: %u, "
+			  "fixed with patch: \"f2fs-tools: relocate chksum_offset for large_nat_bitmap feature\"",
+			  le32_to_cpu(ckpt->checksum_offset));
 		return 1;
 	}
 
 	if (unlikely(f2fs_cp_error(sbi))) {
-		f2fs_msg(sbi->sb, KERN_ERR, "A bug case: need to run fsck");
+		f2fs_err(sbi, "A bug case: need to run fsck");
 		return 1;
 	}
 	return 0;
@@ -2809,6 +2901,7 @@
 	spin_lock_init(&sbi->dev_lock);
 
 	init_rwsem(&sbi->sb_lock);
+	init_rwsem(&sbi->pin_sem);
 }
 
 static int init_percpu_info(struct f2fs_sb_info *sbi)
@@ -2921,19 +3014,20 @@
 	for (block = 0; block < 2; block++) {
 		bh = sb_bread(sb, block);
 		if (!bh) {
-			f2fs_msg(sb, KERN_ERR, "Unable to read %dth superblock",
-				block + 1);
+			f2fs_err(sbi, "Unable to read %dth superblock",
+				 block + 1);
 			err = -EIO;
+			*recovery = 1;
 			continue;
 		}
 
 		/* sanity checking of raw super */
 		err = sanity_check_raw_super(sbi, bh);
 		if (err) {
-			f2fs_msg(sb, KERN_ERR,
-				"Can't find valid F2FS filesystem in %dth superblock",
-				block + 1);
+			f2fs_err(sbi, "Can't find valid F2FS filesystem in %dth superblock",
+				 block + 1);
 			brelse(bh);
+			*recovery = 1;
 			continue;
 		}
 
@@ -2946,10 +3040,6 @@
 		brelse(bh);
 	}
 
-	/* Fail to read any one of the superblocks*/
-	if (err < 0)
-		*recovery = 1;
-
 	/* No valid superblock */
 	if (!*raw_super)
 		kvfree(super);
@@ -3061,36 +3151,79 @@
 #ifdef CONFIG_BLK_DEV_ZONED
 		if (bdev_zoned_model(FDEV(i).bdev) == BLK_ZONED_HM &&
 				!f2fs_sb_has_blkzoned(sbi)) {
-			f2fs_msg(sbi->sb, KERN_ERR,
-				"Zoned block device feature not enabled\n");
+			f2fs_err(sbi, "Zoned block device feature not enabled\n");
 			return -EINVAL;
 		}
 		if (bdev_zoned_model(FDEV(i).bdev) != BLK_ZONED_NONE) {
 			if (init_blkz_info(sbi, i)) {
-				f2fs_msg(sbi->sb, KERN_ERR,
-					"Failed to initialize F2FS blkzone information");
+				f2fs_err(sbi, "Failed to initialize F2FS blkzone information");
 				return -EINVAL;
 			}
 			if (max_devices == 1)
 				break;
-			f2fs_msg(sbi->sb, KERN_INFO,
-				"Mount Device [%2d]: %20s, %8u, %8x - %8x (zone: %s)",
-				i, FDEV(i).path,
-				FDEV(i).total_segments,
-				FDEV(i).start_blk, FDEV(i).end_blk,
-				bdev_zoned_model(FDEV(i).bdev) == BLK_ZONED_HA ?
-				"Host-aware" : "Host-managed");
+			f2fs_info(sbi, "Mount Device [%2d]: %20s, %8u, %8x - %8x (zone: %s)",
+				  i, FDEV(i).path,
+				  FDEV(i).total_segments,
+				  FDEV(i).start_blk, FDEV(i).end_blk,
+				  bdev_zoned_model(FDEV(i).bdev) == BLK_ZONED_HA ?
+				  "Host-aware" : "Host-managed");
 			continue;
 		}
 #endif
-		f2fs_msg(sbi->sb, KERN_INFO,
-			"Mount Device [%2d]: %20s, %8u, %8x - %8x",
-				i, FDEV(i).path,
-				FDEV(i).total_segments,
-				FDEV(i).start_blk, FDEV(i).end_blk);
+		f2fs_info(sbi, "Mount Device [%2d]: %20s, %8u, %8x - %8x",
+			  i, FDEV(i).path,
+			  FDEV(i).total_segments,
+			  FDEV(i).start_blk, FDEV(i).end_blk);
 	}
-	f2fs_msg(sbi->sb, KERN_INFO,
-			"IO Block Size: %8d KB", F2FS_IO_SIZE_KB(sbi));
+	f2fs_info(sbi,
+		  "IO Block Size: %8d KB", F2FS_IO_SIZE_KB(sbi));
+	return 0;
+}
+
+static int f2fs_setup_casefold(struct f2fs_sb_info *sbi)
+{
+#ifdef CONFIG_UNICODE
+	if (f2fs_sb_has_casefold(sbi) && !sbi->s_encoding) {
+		const struct f2fs_sb_encodings *encoding_info;
+		struct unicode_map *encoding;
+		__u16 encoding_flags;
+
+		if (f2fs_sb_has_encrypt(sbi)) {
+			f2fs_err(sbi,
+				"Can't mount with encoding and encryption");
+			return -EINVAL;
+		}
+
+		if (f2fs_sb_read_encoding(sbi->raw_super, &encoding_info,
+					  &encoding_flags)) {
+			f2fs_err(sbi,
+				 "Encoding requested by superblock is unknown");
+			return -EINVAL;
+		}
+
+		encoding = utf8_load(encoding_info->version);
+		if (IS_ERR(encoding)) {
+			f2fs_err(sbi,
+				 "can't mount with superblock charset: %s-%s "
+				 "not supported by the kernel. flags: 0x%x.",
+				 encoding_info->name, encoding_info->version,
+				 encoding_flags);
+			return PTR_ERR(encoding);
+		}
+		f2fs_info(sbi, "Using encoding defined by superblock: "
+			 "%s-%s with flags 0x%hx", encoding_info->name,
+			 encoding_info->version?:"\b", encoding_flags);
+
+		sbi->s_encoding = encoding;
+		sbi->s_encoding_flags = encoding_flags;
+		sbi->sb->s_d_op = &f2fs_dentry_ops;
+	}
+#else
+	if (f2fs_sb_has_casefold(sbi)) {
+		f2fs_err(sbi, "Filesystem with casefold feature cannot be mounted without CONFIG_UNICODE");
+		return -EINVAL;
+	}
+#endif
 	return 0;
 }
 
@@ -3136,7 +3269,7 @@
 	/* Load the checksum driver */
 	sbi->s_chksum_driver = crypto_alloc_shash("crc32", 0, 0);
 	if (IS_ERR(sbi->s_chksum_driver)) {
-		f2fs_msg(sb, KERN_ERR, "Cannot load crc32 driver.");
+		f2fs_err(sbi, "Cannot load crc32 driver.");
 		err = PTR_ERR(sbi->s_chksum_driver);
 		sbi->s_chksum_driver = NULL;
 		goto free_sbi;
@@ -3144,7 +3277,7 @@
 
 	/* set a block size */
 	if (unlikely(!sb_set_blocksize(sb, F2FS_BLKSIZE))) {
-		f2fs_msg(sb, KERN_ERR, "unable to set blocksize");
+		f2fs_err(sbi, "unable to set blocksize");
 		goto free_sbi;
 	}
 
@@ -3168,8 +3301,7 @@
 	 */
 #ifndef CONFIG_BLK_DEV_ZONED
 	if (f2fs_sb_has_blkzoned(sbi)) {
-		f2fs_msg(sb, KERN_ERR,
-			 "Zoned block device support is not enabled");
+		f2fs_err(sbi, "Zoned block device support is not enabled");
 		err = -EOPNOTSUPP;
 		goto free_sb_buf;
 	}
@@ -3191,6 +3323,10 @@
 				le32_to_cpu(raw_super->log_blocksize);
 	sb->s_max_links = F2FS_LINK_MAX;
 
+	err = f2fs_setup_casefold(sbi);
+	if (err)
+		goto free_options;
+
 #ifdef CONFIG_QUOTA
 	sb->dq_op = &f2fs_quota_operations;
 	sb->s_qcop = &f2fs_quotactl_ops;
@@ -3208,6 +3344,9 @@
 #ifdef CONFIG_FS_ENCRYPTION
 	sb->s_cop = &f2fs_cryptops;
 #endif
+#ifdef CONFIG_FS_VERITY
+	sb->s_vop = &f2fs_verityops;
+#endif
 	sb->s_xattr = f2fs_xattr_handlers;
 	sb->s_export_op = &f2fs_export_ops;
 	sb->s_magic = F2FS_SUPER_MAGIC;
@@ -3222,6 +3361,7 @@
 	mutex_init(&sbi->gc_mutex);
 	mutex_init(&sbi->writepages);
 	mutex_init(&sbi->cp_mutex);
+	mutex_init(&sbi->resize_mutex);
 	init_rwsem(&sbi->node_write);
 	init_rwsem(&sbi->node_change);
 
@@ -3253,10 +3393,13 @@
 			sbi->write_io[i][j].bio = NULL;
 			spin_lock_init(&sbi->write_io[i][j].io_lock);
 			INIT_LIST_HEAD(&sbi->write_io[i][j].io_list);
+			INIT_LIST_HEAD(&sbi->write_io[i][j].bio_list);
+			init_rwsem(&sbi->write_io[i][j].bio_list_lock);
 		}
 	}
 
 	init_rwsem(&sbi->cp_rwsem);
+	init_rwsem(&sbi->quota_sem);
 	init_waitqueue_head(&sbi->cp_wait);
 	init_sb_info(sbi);
 
@@ -3264,7 +3407,7 @@
 	if (err)
 		goto free_bio_info;
 
-	if (F2FS_IO_SIZE(sbi) > 1) {
+	if (F2FS_IO_ALIGNED(sbi)) {
 		sbi->write_io_dummy =
 			mempool_create_page_pool(2 * (F2FS_IO_SIZE(sbi) - 1), 0);
 		if (!sbi->write_io_dummy) {
@@ -3276,14 +3419,14 @@
 	/* get an inode for meta space */
 	sbi->meta_inode = f2fs_iget(sb, F2FS_META_INO(sbi));
 	if (IS_ERR(sbi->meta_inode)) {
-		f2fs_msg(sb, KERN_ERR, "Failed to read F2FS meta data inode");
+		f2fs_err(sbi, "Failed to read F2FS meta data inode");
 		err = PTR_ERR(sbi->meta_inode);
 		goto free_io_dummy;
 	}
 
 	err = f2fs_get_valid_checkpoint(sbi);
 	if (err) {
-		f2fs_msg(sb, KERN_ERR, "Failed to get valid F2FS checkpoint");
+		f2fs_err(sbi, "Failed to get valid F2FS checkpoint");
 		goto free_meta_inode;
 	}
 
@@ -3294,10 +3437,13 @@
 		sbi->interval_time[DISABLE_TIME] = DEF_DISABLE_QUICK_INTERVAL;
 	}
 
+	if (__is_set_ckpt_flags(F2FS_CKPT(sbi), CP_FSCK_FLAG))
+		set_sbi_flag(sbi, SBI_NEED_FSCK);
+
 	/* Initialize device list */
 	err = f2fs_scan_devices(sbi);
 	if (err) {
-		f2fs_msg(sb, KERN_ERR, "Failed to find devices");
+		f2fs_err(sbi, "Failed to find devices");
 		goto free_devices;
 	}
 
@@ -3317,6 +3463,7 @@
 		INIT_LIST_HEAD(&sbi->inode_list[i]);
 		spin_lock_init(&sbi->inode_lock[i]);
 	}
+	mutex_init(&sbi->flush_lock);
 
 	f2fs_init_extent_cache_info(sbi);
 
@@ -3327,14 +3474,14 @@
 	/* setup f2fs internal modules */
 	err = f2fs_build_segment_manager(sbi);
 	if (err) {
-		f2fs_msg(sb, KERN_ERR,
-			"Failed to initialize F2FS segment manager");
+		f2fs_err(sbi, "Failed to initialize F2FS segment manager (%d)",
+			 err);
 		goto free_sm;
 	}
 	err = f2fs_build_node_manager(sbi);
 	if (err) {
-		f2fs_msg(sb, KERN_ERR,
-			"Failed to initialize F2FS node manager");
+		f2fs_err(sbi, "Failed to initialize F2FS node manager (%d)",
+			 err);
 		goto free_nm;
 	}
 
@@ -3359,7 +3506,7 @@
 	/* get an inode for node space */
 	sbi->node_inode = f2fs_iget(sb, F2FS_NODE_INO(sbi));
 	if (IS_ERR(sbi->node_inode)) {
-		f2fs_msg(sb, KERN_ERR, "Failed to read node inode");
+		f2fs_err(sbi, "Failed to read node inode");
 		err = PTR_ERR(sbi->node_inode);
 		goto free_stats;
 	}
@@ -3367,7 +3514,7 @@
 	/* read root inode and dentry */
 	root = f2fs_iget(sb, F2FS_ROOT_INO(sbi));
 	if (IS_ERR(root)) {
-		f2fs_msg(sb, KERN_ERR, "Failed to read root inode");
+		f2fs_err(sbi, "Failed to read root inode");
 		err = PTR_ERR(root);
 		goto free_node_inode;
 	}
@@ -3393,8 +3540,7 @@
 	if (f2fs_sb_has_quota_ino(sbi) && !f2fs_readonly(sb)) {
 		err = f2fs_enable_quotas(sb);
 		if (err)
-			f2fs_msg(sb, KERN_ERR,
-				"Cannot turn on quotas: error %d", err);
+			f2fs_err(sbi, "Cannot turn on quotas: error %d", err);
 	}
 #endif
 	/* if there are nt orphan nodes free them */
@@ -3414,13 +3560,10 @@
 		if (f2fs_hw_is_readonly(sbi)) {
 			if (!is_set_ckpt_flags(sbi, CP_UMOUNT_FLAG)) {
 				err = -EROFS;
-				f2fs_msg(sb, KERN_ERR,
-					"Need to recover fsync data, but "
-					"write access unavailable");
+				f2fs_err(sbi, "Need to recover fsync data, but write access unavailable");
 				goto free_meta;
 			}
-			f2fs_msg(sbi->sb, KERN_INFO, "write access "
-				"unavailable, skipping recovery");
+			f2fs_info(sbi, "write access unavailable, skipping recovery");
 			goto reset_checkpoint;
 		}
 
@@ -3435,8 +3578,8 @@
 			if (err != -ENOMEM)
 				skip_recovery = true;
 			need_fsck = true;
-			f2fs_msg(sb, KERN_ERR,
-				"Cannot recover all fsync data errno=%d", err);
+			f2fs_err(sbi, "Cannot recover all fsync data errno=%d",
+				 err);
 			goto free_meta;
 		}
 	} else {
@@ -3444,8 +3587,7 @@
 
 		if (!f2fs_readonly(sb) && err > 0) {
 			err = -EINVAL;
-			f2fs_msg(sb, KERN_ERR,
-				"Need to recover fsync data");
+			f2fs_err(sbi, "Need to recover fsync data");
 			goto free_meta;
 		}
 	}
@@ -3476,17 +3618,16 @@
 	/* recover broken superblock */
 	if (recovery) {
 		err = f2fs_commit_super(sbi, true);
-		f2fs_msg(sb, KERN_INFO,
-			"Try to recover %dth superblock, ret: %d",
-			sbi->valid_super_block ? 1 : 2, err);
+		f2fs_info(sbi, "Try to recover %dth superblock, ret: %d",
+			  sbi->valid_super_block ? 1 : 2, err);
 	}
 
 	f2fs_join_shrinker(sbi);
 
 	f2fs_tuning_parameters(sbi);
 
-	f2fs_msg(sbi->sb, KERN_NOTICE, "Mounted with checkpoint version = %llx",
-				cur_cp_version(F2FS_CKPT(sbi)));
+	f2fs_notice(sbi, "Mounted with checkpoint version = %llx",
+		    cur_cp_version(F2FS_CKPT(sbi)));
 	f2fs_update_time(sbi, CP_TIME);
 	f2fs_update_time(sbi, REQ_TIME);
 	clear_sbi_flag(sbi, SBI_CP_DISABLED_QUICK);
@@ -3541,6 +3682,10 @@
 free_bio_info:
 	for (i = 0; i < NR_PAGE_TYPE; i++)
 		kvfree(sbi->write_io[i]);
+
+#ifdef CONFIG_UNICODE
+	utf8_unload(sbi->s_encoding);
+#endif
 free_options:
 #ifdef CONFIG_QUOTA
 	for (i = 0; i < MAXQUOTAS; i++)
@@ -3661,8 +3806,13 @@
 	err = f2fs_init_post_read_processing();
 	if (err)
 		goto free_root_stats;
+	err = f2fs_init_bio_entry_cache();
+	if (err)
+		goto free_post_read;
 	return 0;
 
+free_post_read:
+	f2fs_destroy_post_read_processing();
 free_root_stats:
 	f2fs_destroy_root_stats();
 	unregister_filesystem(&f2fs_fs_type);
@@ -3686,6 +3836,7 @@
 
 static void __exit exit_f2fs_fs(void)
 {
+	f2fs_destroy_bio_entry_cache();
 	f2fs_destroy_post_read_processing();
 	f2fs_destroy_root_stats();
 	unregister_filesystem(&f2fs_fs_type);
diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c
index 729f46a..62fab5f 100644
--- a/fs/f2fs/sysfs.c
+++ b/fs/f2fs/sysfs.c
@@ -10,6 +10,7 @@
 #include <linux/proc_fs.h>
 #include <linux/f2fs_fs.h>
 #include <linux/seq_file.h>
+#include <linux/unicode.h>
 
 #include "f2fs.h"
 #include "segment.h"
@@ -68,6 +69,33 @@
 		(unsigned long long)(dirty_segments(sbi)));
 }
 
+static ssize_t unusable_show(struct f2fs_attr *a,
+		struct f2fs_sb_info *sbi, char *buf)
+{
+	block_t unusable;
+
+	if (test_opt(sbi, DISABLE_CHECKPOINT))
+		unusable = sbi->unusable_block_count;
+	else
+		unusable = f2fs_get_unusable_blocks(sbi);
+	return snprintf(buf, PAGE_SIZE, "%llu\n",
+		(unsigned long long)unusable);
+}
+
+static ssize_t encoding_show(struct f2fs_attr *a,
+		struct f2fs_sb_info *sbi, char *buf)
+{
+#ifdef CONFIG_UNICODE
+	if (f2fs_sb_has_casefold(sbi))
+		return snprintf(buf, PAGE_SIZE, "%s (%d.%d.%d)\n",
+			sbi->s_encoding->charset,
+			(sbi->s_encoding->version >> 16) & 0xff,
+			(sbi->s_encoding->version >> 8) & 0xff,
+			sbi->s_encoding->version & 0xff);
+#endif
+	return snprintf(buf, PAGE_SIZE, "(none)");
+}
+
 static ssize_t lifetime_write_kbytes_show(struct f2fs_attr *a,
 		struct f2fs_sb_info *sbi, char *buf)
 {
@@ -117,9 +145,17 @@
 	if (f2fs_sb_has_lost_found(sbi))
 		len += snprintf(buf + len, PAGE_SIZE - len, "%s%s",
 				len ? ", " : "", "lost_found");
+	if (f2fs_sb_has_verity(sbi))
+		len += snprintf(buf + len, PAGE_SIZE - len, "%s%s",
+				len ? ", " : "", "verity");
 	if (f2fs_sb_has_sb_chksum(sbi))
 		len += snprintf(buf + len, PAGE_SIZE - len, "%s%s",
 				len ? ", " : "", "sb_checksum");
+	if (f2fs_sb_has_casefold(sbi))
+		len += snprintf(buf + len, PAGE_SIZE - len, "%s%s",
+				len ? ", " : "", "casefold");
+	len += snprintf(buf + len, PAGE_SIZE - len, "%s%s",
+				len ? ", " : "", "pin_file");
 	len += snprintf(buf + len, PAGE_SIZE - len, "\n");
 	return len;
 }
@@ -350,7 +386,9 @@
 	FEAT_QUOTA_INO,
 	FEAT_INODE_CRTIME,
 	FEAT_LOST_FOUND,
+	FEAT_VERITY,
 	FEAT_SB_CHECKSUM,
+	FEAT_CASEFOLD,
 };
 
 static ssize_t f2fs_feature_show(struct f2fs_attr *a,
@@ -367,7 +405,9 @@
 	case FEAT_QUOTA_INO:
 	case FEAT_INODE_CRTIME:
 	case FEAT_LOST_FOUND:
+	case FEAT_VERITY:
 	case FEAT_SB_CHECKSUM:
+	case FEAT_CASEFOLD:
 		return snprintf(buf, PAGE_SIZE, "supported\n");
 	}
 	return 0;
@@ -405,6 +445,7 @@
 F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, gc_idle, gc_mode);
 F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, gc_urgent, gc_mode);
 F2FS_RW_ATTR(SM_INFO, f2fs_sm_info, reclaim_segments, rec_prefree_segments);
+F2FS_RW_ATTR(SM_INFO, f2fs_sm_info, main_blkaddr, main_blkaddr);
 F2FS_RW_ATTR(DCC_INFO, discard_cmd_control, max_small_discards, max_discards);
 F2FS_RW_ATTR(DCC_INFO, discard_cmd_control, discard_granularity, discard_granularity);
 F2FS_RW_ATTR(RESERVED_BLOCKS, f2fs_sb_info, reserved_blocks, reserved_blocks);
@@ -440,6 +481,8 @@
 F2FS_GENERAL_RO_ATTR(lifetime_write_kbytes);
 F2FS_GENERAL_RO_ATTR(features);
 F2FS_GENERAL_RO_ATTR(current_reserved_blocks);
+F2FS_GENERAL_RO_ATTR(unusable);
+F2FS_GENERAL_RO_ATTR(encoding);
 
 #ifdef CONFIG_FS_ENCRYPTION
 F2FS_FEATURE_RO_ATTR(encryption, FEAT_CRYPTO);
@@ -455,7 +498,11 @@
 F2FS_FEATURE_RO_ATTR(quota_ino, FEAT_QUOTA_INO);
 F2FS_FEATURE_RO_ATTR(inode_crtime, FEAT_INODE_CRTIME);
 F2FS_FEATURE_RO_ATTR(lost_found, FEAT_LOST_FOUND);
+#ifdef CONFIG_FS_VERITY
+F2FS_FEATURE_RO_ATTR(verity, FEAT_VERITY);
+#endif
 F2FS_FEATURE_RO_ATTR(sb_checksum, FEAT_SB_CHECKSUM);
+F2FS_FEATURE_RO_ATTR(casefold, FEAT_CASEFOLD);
 
 #define ATTR_LIST(name) (&f2fs_attr_##name.attr)
 static struct attribute *f2fs_attrs[] = {
@@ -466,6 +513,7 @@
 	ATTR_LIST(gc_idle),
 	ATTR_LIST(gc_urgent),
 	ATTR_LIST(reclaim_segments),
+	ATTR_LIST(main_blkaddr),
 	ATTR_LIST(max_small_discards),
 	ATTR_LIST(discard_granularity),
 	ATTR_LIST(batched_trim_sections),
@@ -495,10 +543,12 @@
 	ATTR_LIST(inject_type),
 #endif
 	ATTR_LIST(dirty_segments),
+	ATTR_LIST(unusable),
 	ATTR_LIST(lifetime_write_kbytes),
 	ATTR_LIST(features),
 	ATTR_LIST(reserved_blocks),
 	ATTR_LIST(current_reserved_blocks),
+	ATTR_LIST(encoding),
 	NULL,
 };
 
@@ -517,7 +567,11 @@
 	ATTR_LIST(quota_ino),
 	ATTR_LIST(inode_crtime),
 	ATTR_LIST(lost_found),
+#ifdef CONFIG_FS_VERITY
+	ATTR_LIST(verity),
+#endif
 	ATTR_LIST(sb_checksum),
+	ATTR_LIST(casefold),
 	NULL,
 };
 
@@ -566,8 +620,7 @@
 
 		if ((i % 10) == 0)
 			seq_printf(seq, "%-10d", i);
-		seq_printf(seq, "%d|%-3u", se->type,
-					get_valid_blocks(sbi, i, false));
+		seq_printf(seq, "%d|%-3u", se->type, se->valid_blocks);
 		if ((i % 10) == 9 || i == (total_segs - 1))
 			seq_putc(seq, '\n');
 		else
@@ -593,8 +646,7 @@
 		struct seg_entry *se = get_seg_entry(sbi, i);
 
 		seq_printf(seq, "%-10d", i);
-		seq_printf(seq, "%d|%-3u|", se->type,
-					get_valid_blocks(sbi, i, false));
+		seq_printf(seq, "%d|%-3u|", se->type, se->valid_blocks);
 		for (j = 0; j < SIT_VBLOCK_MAP_SIZE; j++)
 			seq_printf(seq, " %.2x", se->cur_valid_map[j]);
 		seq_putc(seq, '\n');
diff --git a/fs/f2fs/verity.c b/fs/f2fs/verity.c
new file mode 100644
index 0000000..a401ef7
--- /dev/null
+++ b/fs/f2fs/verity.c
@@ -0,0 +1,247 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * fs/f2fs/verity.c: fs-verity support for f2fs
+ *
+ * Copyright 2019 Google LLC
+ */
+
+/*
+ * Implementation of fsverity_operations for f2fs.
+ *
+ * Like ext4, f2fs stores the verity metadata (Merkle tree and
+ * fsverity_descriptor) past the end of the file, starting at the first 64K
+ * boundary beyond i_size.  This approach works because (a) verity files are
+ * readonly, and (b) pages fully beyond i_size aren't visible to userspace but
+ * can be read/written internally by f2fs with only some relatively small
+ * changes to f2fs.  Extended attributes cannot be used because (a) f2fs limits
+ * the total size of an inode's xattr entries to 4096 bytes, which wouldn't be
+ * enough for even a single Merkle tree block, and (b) f2fs encryption doesn't
+ * encrypt xattrs, yet the verity metadata *must* be encrypted when the file is
+ * because it contains hashes of the plaintext data.
+ *
+ * Using a 64K boundary rather than a 4K one keeps things ready for
+ * architectures with 64K pages, and it doesn't necessarily waste space on-disk
+ * since there can be a hole between i_size and the start of the Merkle tree.
+ */
+
+#include <linux/f2fs_fs.h>
+
+#include "f2fs.h"
+#include "xattr.h"
+
+static inline loff_t f2fs_verity_metadata_pos(const struct inode *inode)
+{
+	return round_up(inode->i_size, 65536);
+}
+
+/*
+ * Read some verity metadata from the inode.  __vfs_read() can't be used because
+ * we need to read beyond i_size.
+ */
+static int pagecache_read(struct inode *inode, void *buf, size_t count,
+			  loff_t pos)
+{
+	while (count) {
+		size_t n = min_t(size_t, count,
+				 PAGE_SIZE - offset_in_page(pos));
+		struct page *page;
+		void *addr;
+
+		page = read_mapping_page(inode->i_mapping, pos >> PAGE_SHIFT,
+					 NULL);
+		if (IS_ERR(page))
+			return PTR_ERR(page);
+
+		addr = kmap_atomic(page);
+		memcpy(buf, addr + offset_in_page(pos), n);
+		kunmap_atomic(addr);
+
+		put_page(page);
+
+		buf += n;
+		pos += n;
+		count -= n;
+	}
+	return 0;
+}
+
+/*
+ * Write some verity metadata to the inode for FS_IOC_ENABLE_VERITY.
+ * kernel_write() can't be used because the file descriptor is readonly.
+ */
+static int pagecache_write(struct inode *inode, const void *buf, size_t count,
+			   loff_t pos)
+{
+	if (pos + count > inode->i_sb->s_maxbytes)
+		return -EFBIG;
+
+	while (count) {
+		size_t n = min_t(size_t, count,
+				 PAGE_SIZE - offset_in_page(pos));
+		struct page *page;
+		void *fsdata;
+		void *addr;
+		int res;
+
+		res = pagecache_write_begin(NULL, inode->i_mapping, pos, n, 0,
+					    &page, &fsdata);
+		if (res)
+			return res;
+
+		addr = kmap_atomic(page);
+		memcpy(addr + offset_in_page(pos), buf, n);
+		kunmap_atomic(addr);
+
+		res = pagecache_write_end(NULL, inode->i_mapping, pos, n, n,
+					  page, fsdata);
+		if (res < 0)
+			return res;
+		if (res != n)
+			return -EIO;
+
+		buf += n;
+		pos += n;
+		count -= n;
+	}
+	return 0;
+}
+
+/*
+ * Format of f2fs verity xattr.  This points to the location of the verity
+ * descriptor within the file data rather than containing it directly because
+ * the verity descriptor *must* be encrypted when f2fs encryption is used.  But,
+ * f2fs encryption does not encrypt xattrs.
+ */
+struct fsverity_descriptor_location {
+	__le32 version;
+	__le32 size;
+	__le64 pos;
+};
+
+static int f2fs_begin_enable_verity(struct file *filp)
+{
+	struct inode *inode = file_inode(filp);
+	int err;
+
+	if (f2fs_verity_in_progress(inode))
+		return -EBUSY;
+
+	if (f2fs_is_atomic_file(inode) || f2fs_is_volatile_file(inode))
+		return -EOPNOTSUPP;
+
+	/*
+	 * Since the file was opened readonly, we have to initialize the quotas
+	 * here and not rely on ->open() doing it.  This must be done before
+	 * evicting the inline data.
+	 */
+	err = dquot_initialize(inode);
+	if (err)
+		return err;
+
+	err = f2fs_convert_inline_inode(inode);
+	if (err)
+		return err;
+
+	set_inode_flag(inode, FI_VERITY_IN_PROGRESS);
+	return 0;
+}
+
+static int f2fs_end_enable_verity(struct file *filp, const void *desc,
+				  size_t desc_size, u64 merkle_tree_size)
+{
+	struct inode *inode = file_inode(filp);
+	u64 desc_pos = f2fs_verity_metadata_pos(inode) + merkle_tree_size;
+	struct fsverity_descriptor_location dloc = {
+		.version = cpu_to_le32(1),
+		.size = cpu_to_le32(desc_size),
+		.pos = cpu_to_le64(desc_pos),
+	};
+	int err = 0;
+
+	if (desc != NULL) {
+		/* Succeeded; write the verity descriptor. */
+		err = pagecache_write(inode, desc, desc_size, desc_pos);
+
+		/* Write all pages before clearing FI_VERITY_IN_PROGRESS. */
+		if (!err)
+			err = filemap_write_and_wait(inode->i_mapping);
+	}
+
+	/* If we failed, truncate anything we wrote past i_size. */
+	if (desc == NULL || err)
+		f2fs_truncate(inode);
+
+	clear_inode_flag(inode, FI_VERITY_IN_PROGRESS);
+
+	if (desc != NULL && !err) {
+		err = f2fs_setxattr(inode, F2FS_XATTR_INDEX_VERITY,
+				    F2FS_XATTR_NAME_VERITY, &dloc, sizeof(dloc),
+				    NULL, XATTR_CREATE);
+		if (!err) {
+			file_set_verity(inode);
+			f2fs_set_inode_flags(inode);
+			f2fs_mark_inode_dirty_sync(inode, true);
+		}
+	}
+	return err;
+}
+
+static int f2fs_get_verity_descriptor(struct inode *inode, void *buf,
+				      size_t buf_size)
+{
+	struct fsverity_descriptor_location dloc;
+	int res;
+	u32 size;
+	u64 pos;
+
+	/* Get the descriptor location */
+	res = f2fs_getxattr(inode, F2FS_XATTR_INDEX_VERITY,
+			    F2FS_XATTR_NAME_VERITY, &dloc, sizeof(dloc), NULL);
+	if (res < 0 && res != -ERANGE)
+		return res;
+	if (res != sizeof(dloc) || dloc.version != cpu_to_le32(1)) {
+		f2fs_warn(F2FS_I_SB(inode), "unknown verity xattr format");
+		return -EINVAL;
+	}
+	size = le32_to_cpu(dloc.size);
+	pos = le64_to_cpu(dloc.pos);
+
+	/* Get the descriptor */
+	if (pos + size < pos || pos + size > inode->i_sb->s_maxbytes ||
+	    pos < f2fs_verity_metadata_pos(inode) || size > INT_MAX) {
+		f2fs_warn(F2FS_I_SB(inode), "invalid verity xattr");
+		return -EFSCORRUPTED;
+	}
+	if (buf_size) {
+		if (size > buf_size)
+			return -ERANGE;
+		res = pagecache_read(inode, buf, size, pos);
+		if (res)
+			return res;
+	}
+	return size;
+}
+
+static struct page *f2fs_read_merkle_tree_page(struct inode *inode,
+					       pgoff_t index)
+{
+	index += f2fs_verity_metadata_pos(inode) >> PAGE_SHIFT;
+
+	return read_mapping_page(inode->i_mapping, index, NULL);
+}
+
+static int f2fs_write_merkle_tree_block(struct inode *inode, const void *buf,
+					u64 index, int log_blocksize)
+{
+	loff_t pos = f2fs_verity_metadata_pos(inode) + (index << log_blocksize);
+
+	return pagecache_write(inode, buf, 1 << log_blocksize, pos);
+}
+
+const struct fsverity_operations f2fs_verityops = {
+	.begin_enable_verity	= f2fs_begin_enable_verity,
+	.end_enable_verity	= f2fs_end_enable_verity,
+	.get_verity_descriptor	= f2fs_get_verity_descriptor,
+	.read_merkle_tree_page	= f2fs_read_merkle_tree_page,
+	.write_merkle_tree_block = f2fs_write_merkle_tree_block,
+};
diff --git a/fs/f2fs/xattr.c b/fs/f2fs/xattr.c
index 9632420..296b318 100644
--- a/fs/f2fs/xattr.c
+++ b/fs/f2fs/xattr.c
@@ -21,6 +21,7 @@
 #include <linux/posix_acl_xattr.h>
 #include "f2fs.h"
 #include "xattr.h"
+#include "segment.h"
 
 static int f2fs_xattr_generic_get(const struct xattr_handler *handler,
 		struct dentry *unused, struct inode *inode,
@@ -346,6 +347,9 @@
 
 	*xe = __find_xattr(cur_addr, last_txattr_addr, index, len, name);
 	if (!*xe) {
+		f2fs_err(F2FS_I_SB(inode), "inode (%lu) has corrupted xattr",
+								inode->i_ino);
+		set_sbi_flag(F2FS_I_SB(inode), SBI_NEED_FSCK);
 		err = -EFSCORRUPTED;
 		goto out;
 	}
@@ -535,8 +539,9 @@
 ssize_t f2fs_listxattr(struct dentry *dentry, char *buffer, size_t buffer_size)
 {
 	struct inode *inode = d_inode(dentry);
+	nid_t xnid = F2FS_I(inode)->i_xattr_nid;
 	struct f2fs_xattr_entry *entry;
-	void *base_addr;
+	void *base_addr, *last_base_addr;
 	int error = 0;
 	size_t rest = buffer_size;
 
@@ -546,6 +551,8 @@
 	if (error)
 		return error;
 
+	last_base_addr = (void *)base_addr + XATTR_SIZE(xnid, inode);
+
 	list_for_each_xattr(entry, base_addr) {
 		const struct xattr_handler *handler =
 			f2fs_xattr_handler(entry->e_name_index);
@@ -553,6 +560,15 @@
 		size_t prefix_len;
 		size_t size;
 
+		if ((void *)(entry) + sizeof(__u32) > last_base_addr ||
+			(void *)XATTR_NEXT_ENTRY(entry) > last_base_addr) {
+			f2fs_err(F2FS_I_SB(inode), "inode (%lu) has corrupted xattr",
+						inode->i_ino);
+			set_sbi_flag(F2FS_I_SB(inode), SBI_NEED_FSCK);
+			error = -EFSCORRUPTED;
+			goto cleanup;
+		}
+
 		if (!handler || (handler->list && !handler->list(dentry)))
 			continue;
 
@@ -622,6 +638,9 @@
 	/* find entry with wanted name. */
 	here = __find_xattr(base_addr, last_base_addr, index, len, name);
 	if (!here) {
+		f2fs_err(F2FS_I_SB(inode), "inode (%lu) has corrupted xattr",
+								inode->i_ino);
+		set_sbi_flag(F2FS_I_SB(inode), SBI_NEED_FSCK);
 		error = -EFSCORRUPTED;
 		goto exit;
 	}
@@ -723,6 +742,11 @@
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	int err;
 
+	if (unlikely(f2fs_cp_error(sbi)))
+		return -EIO;
+	if (!f2fs_is_checkpoint_ready(sbi))
+		return -ENOSPC;
+
 	err = dquot_initialize(inode);
 	if (err)
 		return err;
diff --git a/fs/f2fs/xattr.h b/fs/f2fs/xattr.h
index a90920e..de0c600 100644
--- a/fs/f2fs/xattr.h
+++ b/fs/f2fs/xattr.h
@@ -34,8 +34,10 @@
 #define F2FS_XATTR_INDEX_ADVISE			7
 /* Should be same as EXT4_XATTR_INDEX_ENCRYPTION */
 #define F2FS_XATTR_INDEX_ENCRYPTION		9
+#define F2FS_XATTR_INDEX_VERITY			11
 
 #define F2FS_XATTR_NAME_ENCRYPTION_CONTEXT	"c"
+#define F2FS_XATTR_NAME_VERITY			"v"
 
 struct f2fs_xattr_header {
 	__le32  h_magic;        /* magic number for identification */
diff --git a/fs/fuse/file.c b/fs/fuse/file.c
index f4f9ad9..3964325 100644
--- a/fs/fuse/file.c
+++ b/fs/fuse/file.c
@@ -845,9 +845,9 @@
 	unsigned nr_pages;
 };
 
-static int fuse_readpages_fill(struct file *_data, struct page *page)
+static int fuse_readpages_fill(void *_data, struct page *page)
 {
-	struct fuse_fill_data *data = (struct fuse_fill_data *)_data;
+	struct fuse_fill_data *data = _data;
 	struct fuse_req *req = data->req;
 	struct inode *inode = data->inode;
 	struct fuse_conn *fc = get_fuse_conn(inode);
diff --git a/fs/inode.c b/fs/inode.c
index 7c19642..befe45f 100644
--- a/fs/inode.c
+++ b/fs/inode.c
@@ -2168,3 +2168,89 @@
 	return timespec64_trunc(now, inode->i_sb->s_time_gran);
 }
 EXPORT_SYMBOL(current_time);
+
+/*
+ * Generic function to check FS_IOC_SETFLAGS values and reject any invalid
+ * configurations.
+ *
+ * Note: the caller should be holding i_mutex, or else be sure that they have
+ * exclusive access to the inode structure.
+ */
+int vfs_ioc_setflags_prepare(struct inode *inode, unsigned int oldflags,
+			     unsigned int flags)
+{
+	/*
+	 * The IMMUTABLE and APPEND_ONLY flags can only be changed by
+	 * the relevant capability.
+	 *
+	 * This test looks nicer. Thanks to Pauline Middelink
+	 */
+	if ((flags ^ oldflags) & (FS_APPEND_FL | FS_IMMUTABLE_FL) &&
+	    !capable(CAP_LINUX_IMMUTABLE))
+		return -EPERM;
+
+	return 0;
+}
+EXPORT_SYMBOL(vfs_ioc_setflags_prepare);
+
+/*
+ * Generic function to check FS_IOC_FSSETXATTR values and reject any invalid
+ * configurations.
+ *
+ * Note: the caller should be holding i_mutex, or else be sure that they have
+ * exclusive access to the inode structure.
+ */
+int vfs_ioc_fssetxattr_check(struct inode *inode, const struct fsxattr *old_fa,
+			     struct fsxattr *fa)
+{
+	/*
+	 * Can't modify an immutable/append-only file unless we have
+	 * appropriate permission.
+	 */
+	if ((old_fa->fsx_xflags ^ fa->fsx_xflags) &
+			(FS_XFLAG_IMMUTABLE | FS_XFLAG_APPEND) &&
+	    !capable(CAP_LINUX_IMMUTABLE))
+		return -EPERM;
+
+	/*
+	 * Project Quota ID state is only allowed to change from within the init
+	 * namespace. Enforce that restriction only if we are trying to change
+	 * the quota ID state. Everything else is allowed in user namespaces.
+	 */
+	if (current_user_ns() != &init_user_ns) {
+		if (old_fa->fsx_projid != fa->fsx_projid)
+			return -EINVAL;
+		if ((old_fa->fsx_xflags ^ fa->fsx_xflags) &
+				FS_XFLAG_PROJINHERIT)
+			return -EINVAL;
+	}
+
+	/* Check extent size hints. */
+	if ((fa->fsx_xflags & FS_XFLAG_EXTSIZE) && !S_ISREG(inode->i_mode))
+		return -EINVAL;
+
+	if ((fa->fsx_xflags & FS_XFLAG_EXTSZINHERIT) &&
+			!S_ISDIR(inode->i_mode))
+		return -EINVAL;
+
+	if ((fa->fsx_xflags & FS_XFLAG_COWEXTSIZE) &&
+	    !S_ISREG(inode->i_mode) && !S_ISDIR(inode->i_mode))
+		return -EINVAL;
+
+	/*
+	 * It is only valid to set the DAX flag on regular files and
+	 * directories on filesystems.
+	 */
+	if ((fa->fsx_xflags & FS_XFLAG_DAX) &&
+	    !(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode)))
+		return -EINVAL;
+
+	/* Extent size hints of zero turn off the flags. */
+	if (fa->fsx_extsize == 0)
+		fa->fsx_xflags &= ~(FS_XFLAG_EXTSIZE | FS_XFLAG_EXTSZINHERIT);
+	if (fa->fsx_cowextsize == 0)
+		fa->fsx_xflags &= ~FS_XFLAG_COWEXTSIZE;
+
+	return 0;
+}
+EXPORT_SYMBOL(vfs_ioc_fssetxattr_check);
diff --git a/fs/mpage.c b/fs/mpage.c
index a526582..ddf7bb8 100644
--- a/fs/mpage.c
+++ b/fs/mpage.c
@@ -39,6 +39,8 @@
 EXPORT_TRACEPOINT_SYMBOL(android_fs_datawrite_end);
 EXPORT_TRACEPOINT_SYMBOL(android_fs_dataread_start);
 EXPORT_TRACEPOINT_SYMBOL(android_fs_dataread_end);
+EXPORT_TRACEPOINT_SYMBOL(android_fs_fsync_start);
+EXPORT_TRACEPOINT_SYMBOL(android_fs_fsync_end);
 
 /*
  * I/O completion handler for multipage BIOs.
diff --git a/fs/namei.c b/fs/namei.c
index dfb16d8..af523d9 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -44,6 +44,9 @@
 #include "internal.h"
 #include "mount.h"
 
+#define CREATE_TRACE_POINTS
+#include <trace/events/namei.h>
+
 /* [Feb-1997 T. Schoebel-Theuer]
  * Fundamental changes in the pathname lookup mechanisms (namei)
  * were necessary because of omirr.  The reason is that omirr needs
@@ -779,6 +782,81 @@
 		return 1;
 }
 
+#define INIT_PATH_SIZE 64
+
+static void success_walk_trace(struct nameidata *nd)
+{
+	struct path *pt = &nd->path;
+	struct inode *i = nd->inode;
+	char buf[INIT_PATH_SIZE], *try_buf;
+	int cur_path_size;
+	char *p;
+
+	/* When eBPF/ tracepoint is disabled, keep overhead low. */
+	if (!trace_inodepath_enabled())
+		return;
+
+	/* First try stack allocated buffer. */
+	try_buf = buf;
+	cur_path_size = INIT_PATH_SIZE;
+
+	while (cur_path_size <= PATH_MAX) {
+		/* Free previous heap allocation if we are now trying
+		 * a second or later heap allocation.
+		 */
+		if (try_buf != buf)
+			kfree(try_buf);
+
+		/* All but the first alloc are on the heap. */
+		if (cur_path_size != INIT_PATH_SIZE) {
+			try_buf = kmalloc(cur_path_size, GFP_KERNEL);
+			if (!try_buf) {
+				try_buf = buf;
+				sprintf(try_buf, "error:buf_alloc_failed");
+				break;
+			}
+		}
+
+		p = d_path(pt, try_buf, cur_path_size);
+
+		if (!IS_ERR(p)) {
+			char *end = mangle_path(try_buf, p, "\n");
+
+			if (end) {
+				try_buf[end - try_buf] = 0;
+				break;
+			} else {
+				/* On mangle errors, double path size
+				 * till PATH_MAX.
+				 */
+				cur_path_size = cur_path_size << 1;
+				continue;
+			}
+		}
+
+		if (PTR_ERR(p) == -ENAMETOOLONG) {
+			/* If d_path complains that name is too long,
+			 * then double path size till PATH_MAX.
+			 */
+			cur_path_size = cur_path_size << 1;
+			continue;
+		}
+
+		sprintf(try_buf, "error:d_path_failed_%lu",
+			-1 * PTR_ERR(p));
+		break;
+	}
+
+	if (cur_path_size > PATH_MAX)
+		sprintf(try_buf, "error:d_path_name_too_long");
+
+	trace_inodepath(i, try_buf);
+
+	if (try_buf != buf)
+		kfree(try_buf);
+	return;
+}
+
 /**
  * complete_walk - successful completion of path walk
  * @nd:  pointer nameidata
@@ -801,15 +879,21 @@
 			return -ECHILD;
 	}
 
-	if (likely(!(nd->flags & LOOKUP_JUMPED)))
+	if (likely(!(nd->flags & LOOKUP_JUMPED))) {
+		success_walk_trace(nd);
 		return 0;
+	}
 
-	if (likely(!(dentry->d_flags & DCACHE_OP_WEAK_REVALIDATE)))
+	if (likely(!(dentry->d_flags & DCACHE_OP_WEAK_REVALIDATE))) {
+		success_walk_trace(nd);
 		return 0;
+	}
 
 	status = dentry->d_op->d_weak_revalidate(dentry, nd->flags);
-	if (status > 0)
+	if (status > 0) {
+		success_walk_trace(nd);
 		return 0;
+	}
 
 	if (!status)
 		status = -ESTALE;
@@ -1078,7 +1162,7 @@
 		return ERR_PTR(error);
 
 	nd->last_type = LAST_BIND;
-	res = inode->i_link;
+	res = READ_ONCE(inode->i_link);
 	if (!res) {
 		const char * (*get)(struct dentry *, struct inode *,
 				struct delayed_call *);
@@ -4819,7 +4903,7 @@
 		spin_unlock(&inode->i_lock);
 	}
 
-	link = inode->i_link;
+	link = READ_ONCE(inode->i_link);
 	if (!link) {
 		link = inode->i_op->get_link(dentry, inode, &done);
 		if (IS_ERR(link))
diff --git a/fs/namespace.c b/fs/namespace.c
index ba90c5d..7899153 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -2741,7 +2741,7 @@
 	 * the remainder of the page.
 	 */
 	/* copy_from_user cannot cross TASK_SIZE ! */
-	size = TASK_SIZE - (unsigned long)data;
+	size = TASK_SIZE - (unsigned long)untagged_addr(data);
 	if (size > PAGE_SIZE)
 		size = PAGE_SIZE;
 
diff --git a/fs/notify/fanotify/Kconfig b/fs/notify/fanotify/Kconfig
index 41355ce..f5b0b3a 100644
--- a/fs/notify/fanotify/Kconfig
+++ b/fs/notify/fanotify/Kconfig
@@ -1,7 +1,6 @@
 config FANOTIFY
 	bool "Filesystem wide access notification"
 	select FSNOTIFY
-	select ANON_INODES
 	default n
 	---help---
 	   Say Y here to enable fanotify support.  fanotify is a file access
diff --git a/fs/notify/inotify/Kconfig b/fs/notify/inotify/Kconfig
index b981fc0..0161c74 100644
--- a/fs/notify/inotify/Kconfig
+++ b/fs/notify/inotify/Kconfig
@@ -1,6 +1,5 @@
 config INOTIFY_USER
 	bool "Inotify support for userspace"
-	select ANON_INODES
 	select FSNOTIFY
 	default y
 	---help---
diff --git a/fs/proc/base.c b/fs/proc/base.c
index d538123..307ed92b 100644
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -3352,7 +3352,7 @@
 	REG("mountinfo",  S_IRUGO, proc_mountinfo_operations),
 	REG("mountstats", S_IRUSR, proc_mountstats_operations),
 #ifdef CONFIG_PROCESS_RECLAIM
-	REG("reclaim", 0200, proc_reclaim_operations),
+	REG("reclaim", 0222, proc_reclaim_operations),
 #endif
 #ifdef CONFIG_PROC_PAGE_MONITOR
 	REG("clear_refs", S_IWUSR, proc_clear_refs_operations),
@@ -3432,6 +3432,15 @@
 	.llseek		= generic_file_llseek,
 };
 
+struct pid *tgid_pidfd_to_pid(const struct file *file)
+{
+	if (!d_is_dir(file->f_path.dentry) ||
+	    (file->f_op != &proc_tgid_base_operations))
+		return ERR_PTR(-EBADF);
+
+	return proc_pid(file_inode(file));
+}
+
 static struct dentry *proc_tgid_base_lookup(struct inode *dir, struct dentry *dentry, unsigned int flags)
 {
 	return proc_pident_lookup(dir, dentry,
diff --git a/fs/proc/meminfo.c b/fs/proc/meminfo.c
index 172536c..f2dab6c 100644
--- a/fs/proc/meminfo.c
+++ b/fs/proc/meminfo.c
@@ -38,6 +38,7 @@
 	long cached;
 	long available;
 	unsigned long pages[NR_LRU_LISTS];
+	unsigned long sreclaimable, sunreclaim;
 	int lru;
 
 	si_meminfo(&i);
@@ -53,6 +54,8 @@
 		pages[lru] = global_node_page_state(NR_LRU_BASE + lru);
 
 	available = si_mem_available();
+	sreclaimable = global_node_page_state(NR_SLAB_RECLAIMABLE);
+	sunreclaim = global_node_page_state(NR_SLAB_UNRECLAIMABLE);
 
 	show_val_kb(m, "MemTotal:       ", i.totalram);
 	show_val_kb(m, "MemFree:        ", i.freeram);
@@ -94,16 +97,17 @@
 	show_val_kb(m, "Mapped:         ",
 		    global_node_page_state(NR_FILE_MAPPED));
 	show_val_kb(m, "Shmem:          ", i.sharedram);
-	show_val_kb(m, "Slab:           ",
-		    global_node_page_state(NR_SLAB_RECLAIMABLE) +
-		    global_node_page_state(NR_SLAB_UNRECLAIMABLE));
-
-	show_val_kb(m, "SReclaimable:   ",
-		    global_node_page_state(NR_SLAB_RECLAIMABLE));
-	show_val_kb(m, "SUnreclaim:     ",
-		    global_node_page_state(NR_SLAB_UNRECLAIMABLE));
+	show_val_kb(m, "KReclaimable:   ", sreclaimable +
+		    global_node_page_state(NR_KERNEL_MISC_RECLAIMABLE));
+	show_val_kb(m, "Slab:           ", sreclaimable + sunreclaim);
+	show_val_kb(m, "SReclaimable:   ", sreclaimable);
+	show_val_kb(m, "SUnreclaim:     ", sunreclaim);
 	seq_printf(m, "KernelStack:    %8lu kB\n",
 		   global_zone_page_state(NR_KERNEL_STACK_KB));
+#ifdef CONFIG_SHADOW_CALL_STACK
+	seq_printf(m, "ShadowCallStack:%8lu kB\n",
+		   global_zone_page_state(NR_KERNEL_SCS_BYTES) / 1024);
+#endif
 	show_val_kb(m, "PageTables:     ",
 		    global_zone_page_state(NR_PAGETABLE));
 #ifdef CONFIG_QUICKLIST
diff --git a/fs/ubifs/crypto.c b/fs/ubifs/crypto.c
index 4aaedf2..22be7ae 100644
--- a/fs/ubifs/crypto.c
+++ b/fs/ubifs/crypto.c
@@ -29,8 +29,8 @@
 {
 	struct ubifs_info *c = inode->i_sb->s_fs_info;
 	void *p = &dn->data;
-	struct page *ret;
 	unsigned int pad_len = round_up(in_len, UBIFS_CIPHER_BLOCK_SIZE);
+	int err;
 
 	ubifs_assert(c, pad_len <= *out_len);
 	dn->compr_size = cpu_to_le16(in_len);
@@ -39,11 +39,11 @@
 	if (pad_len != in_len)
 		memset(p + in_len, 0, pad_len - in_len);
 
-	ret = fscrypt_encrypt_page(inode, virt_to_page(&dn->data), pad_len,
-			offset_in_page(&dn->data), block, GFP_NOFS);
-	if (IS_ERR(ret)) {
-		ubifs_err(c, "fscrypt_encrypt_page failed: %ld", PTR_ERR(ret));
-		return PTR_ERR(ret);
+	err = fscrypt_encrypt_block_inplace(inode, virt_to_page(p), pad_len,
+					    offset_in_page(p), block, GFP_NOFS);
+	if (err) {
+		ubifs_err(c, "fscrypt_encrypt_block_inplace() failed: %d", err);
+		return err;
 	}
 	*out_len = pad_len;
 
@@ -64,10 +64,11 @@
 	}
 
 	ubifs_assert(c, dlen <= UBIFS_BLOCK_SIZE);
-	err = fscrypt_decrypt_page(inode, virt_to_page(&dn->data), dlen,
-			offset_in_page(&dn->data), block);
+	err = fscrypt_decrypt_block_inplace(inode, virt_to_page(&dn->data),
+					    dlen, offset_in_page(&dn->data),
+					    block);
 	if (err) {
-		ubifs_err(c, "fscrypt_decrypt_page failed: %i", err);
+		ubifs_err(c, "fscrypt_decrypt_block_inplace() failed: %d", err);
 		return err;
 	}
 	*out_len = clen;
diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c
index 5767b37..b73de6d 100644
--- a/fs/ubifs/dir.c
+++ b/fs/ubifs/dir.c
@@ -220,11 +220,9 @@
 
 	dbg_gen("'%pd' in dir ino %lu", dentry, dir->i_ino);
 
-	err = fscrypt_prepare_lookup(dir, dentry, flags);
-	if (err)
-		return ERR_PTR(err);
-
-	err = fscrypt_setup_filename(dir, &dentry->d_name, 1, &nm);
+	err = fscrypt_prepare_lookup(dir, dentry, &nm);
+	if (err == -ENOENT)
+		return d_splice_alias(NULL, dentry);
 	if (err)
 		return ERR_PTR(err);
 
diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c
index 7c98ccc..ebb9e84 100644
--- a/fs/ubifs/super.c
+++ b/fs/ubifs/super.c
@@ -276,6 +276,8 @@
 {
 	struct inode *inode = container_of(head, struct inode, i_rcu);
 	struct ubifs_inode *ui = ubifs_inode(inode);
+
+	fscrypt_free_inode(inode);
 	kmem_cache_free(ubifs_inode_slab, ui);
 }
 
diff --git a/fs/unicode/.gitignore b/fs/unicode/.gitignore
new file mode 100644
index 0000000..0381e22
--- /dev/null
+++ b/fs/unicode/.gitignore
@@ -0,0 +1,2 @@
+mkutf8data
+utf8data.h
diff --git a/fs/unicode/Kconfig b/fs/unicode/Kconfig
new file mode 100644
index 0000000..b560a87
--- /dev/null
+++ b/fs/unicode/Kconfig
@@ -0,0 +1,13 @@
+#
+# UTF-8 normalization
+#
+config UNICODE
+	bool "UTF-8 normalization and casefolding support"
+	help
+	  Say Y here to enable UTF-8 NFD normalization and NFD+CF casefolding
+	  support.
+
+config UNICODE_NORMALIZATION_SELFTEST
+	tristate "Test UTF-8 normalization support"
+	depends on UNICODE
+	default n
diff --git a/fs/unicode/Makefile b/fs/unicode/Makefile
new file mode 100644
index 0000000..d46e9ba
--- /dev/null
+++ b/fs/unicode/Makefile
@@ -0,0 +1,38 @@
+# SPDX-License-Identifier: GPL-2.0
+
+obj-$(CONFIG_UNICODE) += unicode.o
+obj-$(CONFIG_UNICODE_NORMALIZATION_SELFTEST) += utf8-selftest.o
+
+unicode-y := utf8-norm.o utf8-core.o
+
+$(obj)/utf8-norm.o: $(obj)/utf8data.h
+
+# In the normal build, the checked-in utf8data.h is just shipped.
+#
+# To generate utf8data.h from UCD, put *.txt files in this directory
+# and pass REGENERATE_UTF8DATA=1 from the command line.
+ifdef REGENERATE_UTF8DATA
+
+quiet_cmd_utf8data = GEN     $@
+      cmd_utf8data = $< \
+		-a $(srctree)/$(src)/DerivedAge.txt \
+		-c $(srctree)/$(src)/DerivedCombiningClass.txt \
+		-p $(srctree)/$(src)/DerivedCoreProperties.txt \
+		-d $(srctree)/$(src)/UnicodeData.txt \
+		-f $(srctree)/$(src)/CaseFolding.txt \
+		-n $(srctree)/$(src)/NormalizationCorrections.txt \
+		-t $(srctree)/$(src)/NormalizationTest.txt \
+		-o $@
+
+$(obj)/utf8data.h: $(obj)/mkutf8data $(filter %.txt, $(cmd_utf8data)) FORCE
+	$(call if_changed,utf8data)
+
+else
+
+$(obj)/utf8data.h: $(src)/utf8data.h_shipped FORCE
+	$(call if_changed,shipped)
+
+endif
+
+targets += utf8data.h
+hostprogs-y += mkutf8data
diff --git a/fs/unicode/README.utf8data b/fs/unicode/README.utf8data
new file mode 100644
index 0000000..c737868
--- /dev/null
+++ b/fs/unicode/README.utf8data
@@ -0,0 +1,57 @@
+The utf8data.h file in this directory is generated from the Unicode
+Character Database for version 12.1.0 of the Unicode standard.
+
+The full set of files can be found here:
+
+  http://www.unicode.org/Public/12.1.0/ucd/
+
+Individual source links:
+
+  https://www.unicode.org/Public/12.1.0/ucd/CaseFolding.txt
+  https://www.unicode.org/Public/12.1.0/ucd/DerivedAge.txt
+  https://www.unicode.org/Public/12.1.0/ucd/extracted/DerivedCombiningClass.txt
+  https://www.unicode.org/Public/12.1.0/ucd/DerivedCoreProperties.txt
+  https://www.unicode.org/Public/12.1.0/ucd/NormalizationCorrections.txt
+  https://www.unicode.org/Public/12.1.0/ucd/NormalizationTest.txt
+  https://www.unicode.org/Public/12.1.0/ucd/UnicodeData.txt
+
+md5sums (verify by running "md5sum -c README.utf8data"):
+
+  900e76da1d822a160fd6b8c0b1d70094  CaseFolding.txt
+  131256380bff4fea8ad4a851616f2f10  DerivedAge.txt
+  e731a4089b30002144e107e3d6f8d1fa  DerivedCombiningClass.txt
+  a47c9fbd7ff92a9b261ba9831e68778a  DerivedCoreProperties.txt
+  fcab6dad15e440879d92f315978f93d3  NormalizationCorrections.txt
+  f9ff1c55a60decf436100f791b44aa98  NormalizationTest.txt
+  755f6af699f8c8d2d958da411f78f6c6  UnicodeData.txt
+
+sha1sums (verify by running "sha1sum -c README.utf8data"):
+
+  dc9245f6803c4ac99555c361f5052e0b13eb779b  CaseFolding.txt
+  3281104f237184cdb5d869e86eb8573678ada7da  DerivedAge.txt
+  2f5f995ccb96e0fa84b15151b35d5e2681535175  DerivedCombiningClass.txt
+  5b8698a3fcd5018e1987f296b02e2c17e696415e  DerivedCoreProperties.txt
+  cd83935fbc012345d8792d2c704f69497e753835  NormalizationCorrections.txt
+  ea419aae505b337b0d99a83fa83fe58ddff7c19f  NormalizationTest.txt
+  dc973c0fc93d6f09d9ab9f70d1c9f89c447f0526  UnicodeData.txt
+
+
+To update to the newer version of the Unicode standard, the latest
+released version of the UCD can be found here:
+
+  http://www.unicode.org/Public/UCD/latest/
+
+Then, build under fs/unicode/ with REGENERATE_UTF8DATA=1:
+
+	make REGENERATE_UTF8DATA=1 fs/unicode/
+
+After sanity checking the newly generated utf8data.h file (the
+version generated from the 12.1.0 UCD should be 4,109 lines long, and
+have a total size of 324k) and/or comparing it with the older version
+of utf8data.h_shipped, rename it to utf8data.h_shipped.
+
+If you are a kernel developer updating to a newer version of the
+Unicode Character Database, please update this README.utf8data file
+with the version of the UCD that was used, the md5sum and sha1sums of
+the *.txt files, before checking in the new versions of the utf8data.h
+and README.utf8data files.
diff --git a/fs/unicode/mkutf8data.c b/fs/unicode/mkutf8data.c
new file mode 100644
index 0000000..ff2025ac
--- /dev/null
+++ b/fs/unicode/mkutf8data.c
@@ -0,0 +1,3419 @@
+/*
+ * Copyright (c) 2014 SGI.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it would be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write the Free Software Foundation,
+ * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+/* Generator for a compact trie for unicode normalization */
+
+#include <sys/types.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <assert.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+
+/* Default names of the in- and output files. */
+
+#define AGE_NAME	"DerivedAge.txt"
+#define CCC_NAME	"DerivedCombiningClass.txt"
+#define PROP_NAME	"DerivedCoreProperties.txt"
+#define DATA_NAME	"UnicodeData.txt"
+#define FOLD_NAME	"CaseFolding.txt"
+#define NORM_NAME	"NormalizationCorrections.txt"
+#define TEST_NAME	"NormalizationTest.txt"
+#define UTF8_NAME	"utf8data.h"
+
+const char	*age_name  = AGE_NAME;
+const char	*ccc_name  = CCC_NAME;
+const char	*prop_name = PROP_NAME;
+const char	*data_name = DATA_NAME;
+const char	*fold_name = FOLD_NAME;
+const char	*norm_name = NORM_NAME;
+const char	*test_name = TEST_NAME;
+const char	*utf8_name = UTF8_NAME;
+
+int verbose = 0;
+
+/* An arbitrary line size limit on input lines. */
+
+#define LINESIZE	1024
+char line[LINESIZE];
+char buf0[LINESIZE];
+char buf1[LINESIZE];
+char buf2[LINESIZE];
+char buf3[LINESIZE];
+
+const char *argv0;
+
+#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
+
+/* ------------------------------------------------------------------ */
+
+/*
+ * Unicode version numbers consist of three parts: major, minor, and a
+ * revision.  These numbers are packed into an unsigned int to obtain
+ * a single version number.
+ *
+ * To save space in the generated trie, the unicode version is not
+ * stored directly, instead we calculate a generation number from the
+ * unicode versions seen in the DerivedAge file, and use that as an
+ * index into a table of unicode versions.
+ */
+#define UNICODE_MAJ_SHIFT		(16)
+#define UNICODE_MIN_SHIFT		(8)
+
+#define UNICODE_MAJ_MAX			((unsigned short)-1)
+#define UNICODE_MIN_MAX			((unsigned char)-1)
+#define UNICODE_REV_MAX			((unsigned char)-1)
+
+#define UNICODE_AGE(MAJ,MIN,REV)			\
+	(((unsigned int)(MAJ) << UNICODE_MAJ_SHIFT) |	\
+	 ((unsigned int)(MIN) << UNICODE_MIN_SHIFT) |	\
+	 ((unsigned int)(REV)))
+
+unsigned int *ages;
+int ages_count;
+
+unsigned int unicode_maxage;
+
+static int age_valid(unsigned int major, unsigned int minor,
+		     unsigned int revision)
+{
+	if (major > UNICODE_MAJ_MAX)
+		return 0;
+	if (minor > UNICODE_MIN_MAX)
+		return 0;
+	if (revision > UNICODE_REV_MAX)
+		return 0;
+	return 1;
+}
+
+/* ------------------------------------------------------------------ */
+
+/*
+ * utf8trie_t
+ *
+ * A compact binary tree, used to decode UTF-8 characters.
+ *
+ * Internal nodes are one byte for the node itself, and up to three
+ * bytes for an offset into the tree.  The first byte contains the
+ * following information:
+ *  NEXTBYTE  - flag        - advance to next byte if set
+ *  BITNUM    - 3 bit field - the bit number to tested
+ *  OFFLEN    - 2 bit field - number of bytes in the offset
+ * if offlen == 0 (non-branching node)
+ *  RIGHTPATH - 1 bit field - set if the following node is for the
+ *                            right-hand path (tested bit is set)
+ *  TRIENODE  - 1 bit field - set if the following node is an internal
+ *                            node, otherwise it is a leaf node
+ * if offlen != 0 (branching node)
+ *  LEFTNODE  - 1 bit field - set if the left-hand node is internal
+ *  RIGHTNODE - 1 bit field - set if the right-hand node is internal
+ *
+ * Due to the way utf8 works, there cannot be branching nodes with
+ * NEXTBYTE set, and moreover those nodes always have a righthand
+ * descendant.
+ */
+typedef unsigned char utf8trie_t;
+#define BITNUM		0x07
+#define NEXTBYTE	0x08
+#define OFFLEN		0x30
+#define OFFLEN_SHIFT	4
+#define RIGHTPATH	0x40
+#define TRIENODE	0x80
+#define RIGHTNODE	0x40
+#define LEFTNODE	0x80
+
+/*
+ * utf8leaf_t
+ *
+ * The leaves of the trie are embedded in the trie, and so the same
+ * underlying datatype, unsigned char.
+ *
+ * leaf[0]: The unicode version, stored as a generation number that is
+ *          an index into utf8agetab[].  With this we can filter code
+ *          points based on the unicode version in which they were
+ *          defined.  The CCC of a non-defined code point is 0.
+ * leaf[1]: Canonical Combining Class. During normalization, we need
+ *          to do a stable sort into ascending order of all characters
+ *          with a non-zero CCC that occur between two characters with
+ *          a CCC of 0, or at the begin or end of a string.
+ *          The unicode standard guarantees that all CCC values are
+ *          between 0 and 254 inclusive, which leaves 255 available as
+ *          a special value.
+ *          Code points with CCC 0 are known as stoppers.
+ * leaf[2]: Decomposition. If leaf[1] == 255, then leaf[2] is the
+ *          start of a NUL-terminated string that is the decomposition
+ *          of the character.
+ *          The CCC of a decomposable character is the same as the CCC
+ *          of the first character of its decomposition.
+ *          Some characters decompose as the empty string: these are
+ *          characters with the Default_Ignorable_Code_Point property.
+ *          These do affect normalization, as they all have CCC 0.
+ *
+ * The decompositions in the trie have been fully expanded.
+ *
+ * Casefolding, if applicable, is also done using decompositions.
+ */
+typedef unsigned char utf8leaf_t;
+
+#define LEAF_GEN(LEAF)	((LEAF)[0])
+#define LEAF_CCC(LEAF)	((LEAF)[1])
+#define LEAF_STR(LEAF)	((const char*)((LEAF) + 2))
+
+#define MAXGEN		(255)
+
+#define MINCCC		(0)
+#define MAXCCC		(254)
+#define STOPPER		(0)
+#define DECOMPOSE	(255)
+#define HANGUL		((char)(255))
+
+#define UTF8HANGULLEAF	(12)
+
+struct tree;
+static utf8leaf_t *utf8nlookup(struct tree *, unsigned char *,
+			       const char *, size_t);
+static utf8leaf_t *utf8lookup(struct tree *, unsigned char *, const char *);
+
+unsigned char *utf8data;
+size_t utf8data_size;
+
+utf8trie_t *nfdi;
+utf8trie_t *nfdicf;
+
+/* ------------------------------------------------------------------ */
+
+/*
+ * UTF8 valid ranges.
+ *
+ * The UTF-8 encoding spreads the bits of a 32bit word over several
+ * bytes. This table gives the ranges that can be held and how they'd
+ * be represented.
+ *
+ * 0x00000000 0x0000007F: 0xxxxxxx
+ * 0x00000000 0x000007FF: 110xxxxx 10xxxxxx
+ * 0x00000000 0x0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
+ * 0x00000000 0x001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
+ * 0x00000000 0x03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+ * 0x00000000 0x7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+ *
+ * There is an additional requirement on UTF-8, in that only the
+ * shortest representation of a 32bit value is to be used.  A decoder
+ * must not decode sequences that do not satisfy this requirement.
+ * Thus the allowed ranges have a lower bound.
+ *
+ * 0x00000000 0x0000007F: 0xxxxxxx
+ * 0x00000080 0x000007FF: 110xxxxx 10xxxxxx
+ * 0x00000800 0x0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
+ * 0x00010000 0x001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
+ * 0x00200000 0x03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+ * 0x04000000 0x7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+ *
+ * Actual unicode characters are limited to the range 0x0 - 0x10FFFF,
+ * 17 planes of 65536 values.  This limits the sequences actually seen
+ * even more, to just the following.
+ *
+ *          0 -     0x7f: 0                     0x7f
+ *       0x80 -    0x7ff: 0xc2 0x80             0xdf 0xbf
+ *      0x800 -   0xffff: 0xe0 0xa0 0x80        0xef 0xbf 0xbf
+ *    0x10000 - 0x10ffff: 0xf0 0x90 0x80 0x80   0xf4 0x8f 0xbf 0xbf
+ *
+ * Even within those ranges not all values are allowed: the surrogates
+ * 0xd800 - 0xdfff should never be seen.
+ *
+ * Note that the longest sequence seen with valid usage is 4 bytes,
+ * the same a single UTF-32 character.  This makes the UTF-8
+ * representation of Unicode strictly smaller than UTF-32.
+ *
+ * The shortest sequence requirement was introduced by:
+ *    Corrigendum #1: UTF-8 Shortest Form
+ * It can be found here:
+ *    http://www.unicode.org/versions/corrigendum1.html
+ *
+ */
+
+#define UTF8_2_BITS     0xC0
+#define UTF8_3_BITS     0xE0
+#define UTF8_4_BITS     0xF0
+#define UTF8_N_BITS     0x80
+#define UTF8_2_MASK     0xE0
+#define UTF8_3_MASK     0xF0
+#define UTF8_4_MASK     0xF8
+#define UTF8_N_MASK     0xC0
+#define UTF8_V_MASK     0x3F
+#define UTF8_V_SHIFT    6
+
+static int utf8encode(char *str, unsigned int val)
+{
+	int len;
+
+	if (val < 0x80) {
+		str[0] = val;
+		len = 1;
+	} else if (val < 0x800) {
+		str[1] = val & UTF8_V_MASK;
+		str[1] |= UTF8_N_BITS;
+		val >>= UTF8_V_SHIFT;
+		str[0] = val;
+		str[0] |= UTF8_2_BITS;
+		len = 2;
+	} else if (val < 0x10000) {
+		str[2] = val & UTF8_V_MASK;
+		str[2] |= UTF8_N_BITS;
+		val >>= UTF8_V_SHIFT;
+		str[1] = val & UTF8_V_MASK;
+		str[1] |= UTF8_N_BITS;
+		val >>= UTF8_V_SHIFT;
+		str[0] = val;
+		str[0] |= UTF8_3_BITS;
+		len = 3;
+	} else if (val < 0x110000) {
+		str[3] = val & UTF8_V_MASK;
+		str[3] |= UTF8_N_BITS;
+		val >>= UTF8_V_SHIFT;
+		str[2] = val & UTF8_V_MASK;
+		str[2] |= UTF8_N_BITS;
+		val >>= UTF8_V_SHIFT;
+		str[1] = val & UTF8_V_MASK;
+		str[1] |= UTF8_N_BITS;
+		val >>= UTF8_V_SHIFT;
+		str[0] = val;
+		str[0] |= UTF8_4_BITS;
+		len = 4;
+	} else {
+		printf("%#x: illegal val\n", val);
+		len = 0;
+	}
+	return len;
+}
+
+static unsigned int utf8decode(const char *str)
+{
+	const unsigned char *s = (const unsigned char*)str;
+	unsigned int unichar = 0;
+
+	if (*s < 0x80) {
+		unichar = *s;
+	} else if (*s < UTF8_3_BITS) {
+		unichar = *s++ & 0x1F;
+		unichar <<= UTF8_V_SHIFT;
+		unichar |= *s & 0x3F;
+	} else if (*s < UTF8_4_BITS) {
+		unichar = *s++ & 0x0F;
+		unichar <<= UTF8_V_SHIFT;
+		unichar |= *s++ & 0x3F;
+		unichar <<= UTF8_V_SHIFT;
+		unichar |= *s & 0x3F;
+	} else {
+		unichar = *s++ & 0x0F;
+		unichar <<= UTF8_V_SHIFT;
+		unichar |= *s++ & 0x3F;
+		unichar <<= UTF8_V_SHIFT;
+		unichar |= *s++ & 0x3F;
+		unichar <<= UTF8_V_SHIFT;
+		unichar |= *s & 0x3F;
+	}
+	return unichar;
+}
+
+static int utf32valid(unsigned int unichar)
+{
+	return unichar < 0x110000;
+}
+
+#define HANGUL_SYLLABLE(U)	((U) >= 0xAC00 && (U) <= 0xD7A3)
+
+#define NODE 1
+#define LEAF 0
+
+struct tree {
+	void *root;
+	int childnode;
+	const char *type;
+	unsigned int maxage;
+	struct tree *next;
+	int (*leaf_equal)(void *, void *);
+	void (*leaf_print)(void *, int);
+	int (*leaf_mark)(void *);
+	int (*leaf_size)(void *);
+	int *(*leaf_index)(struct tree *, void *);
+	unsigned char *(*leaf_emit)(void *, unsigned char *);
+	int leafindex[0x110000];
+	int index;
+};
+
+struct node {
+	int index;
+	int offset;
+	int mark;
+	int size;
+	struct node *parent;
+	void *left;
+	void *right;
+	unsigned char bitnum;
+	unsigned char nextbyte;
+	unsigned char leftnode;
+	unsigned char rightnode;
+	unsigned int keybits;
+	unsigned int keymask;
+};
+
+/*
+ * Example lookup function for a tree.
+ */
+static void *lookup(struct tree *tree, const char *key)
+{
+	struct node *node;
+	void *leaf = NULL;
+
+	node = tree->root;
+	while (!leaf && node) {
+		if (node->nextbyte)
+			key++;
+		if (*key & (1 << (node->bitnum & 7))) {
+			/* Right leg */
+			if (node->rightnode == NODE) {
+				node = node->right;
+			} else if (node->rightnode == LEAF) {
+				leaf = node->right;
+			} else {
+				node = NULL;
+			}
+		} else {
+			/* Left leg */
+			if (node->leftnode == NODE) {
+				node = node->left;
+			} else if (node->leftnode == LEAF) {
+				leaf = node->left;
+			} else {
+				node = NULL;
+			}
+		}
+	}
+
+	return leaf;
+}
+
+/*
+ * A simple non-recursive tree walker: keep track of visits to the
+ * left and right branches in the leftmask and rightmask.
+ */
+static void tree_walk(struct tree *tree)
+{
+	struct node *node;
+	unsigned int leftmask;
+	unsigned int rightmask;
+	unsigned int bitmask;
+	int indent = 1;
+	int nodes, singletons, leaves;
+
+	nodes = singletons = leaves = 0;
+
+	printf("%s_%x root %p\n", tree->type, tree->maxage, tree->root);
+	if (tree->childnode == LEAF) {
+		assert(tree->root);
+		tree->leaf_print(tree->root, indent);
+		leaves = 1;
+	} else {
+		assert(tree->childnode == NODE);
+		node = tree->root;
+		leftmask = rightmask = 0;
+		while (node) {
+			printf("%*snode @ %p bitnum %d nextbyte %d"
+			       " left %p right %p mask %x bits %x\n",
+				indent, "", node,
+				node->bitnum, node->nextbyte,
+				node->left, node->right,
+				node->keymask, node->keybits);
+			nodes += 1;
+			if (!(node->left && node->right))
+				singletons += 1;
+
+			while (node) {
+				bitmask = 1 << node->bitnum;
+				if ((leftmask & bitmask) == 0) {
+					leftmask |= bitmask;
+					if (node->leftnode == LEAF) {
+						assert(node->left);
+						tree->leaf_print(node->left,
+								 indent+1);
+						leaves += 1;
+					} else if (node->left) {
+						assert(node->leftnode == NODE);
+						indent += 1;
+						node = node->left;
+						break;
+					}
+				}
+				if ((rightmask & bitmask) == 0) {
+					rightmask |= bitmask;
+					if (node->rightnode == LEAF) {
+						assert(node->right);
+						tree->leaf_print(node->right,
+								 indent+1);
+						leaves += 1;
+					} else if (node->right) {
+						assert(node->rightnode == NODE);
+						indent += 1;
+						node = node->right;
+						break;
+					}
+				}
+				leftmask &= ~bitmask;
+				rightmask &= ~bitmask;
+				node = node->parent;
+				indent -= 1;
+			}
+		}
+	}
+	printf("nodes %d leaves %d singletons %d\n",
+	       nodes, leaves, singletons);
+}
+
+/*
+ * Allocate an initialize a new internal node.
+ */
+static struct node *alloc_node(struct node *parent)
+{
+	struct node *node;
+	int bitnum;
+
+	node = malloc(sizeof(*node));
+	node->left = node->right = NULL;
+	node->parent = parent;
+	node->leftnode = NODE;
+	node->rightnode = NODE;
+	node->keybits = 0;
+	node->keymask = 0;
+	node->mark = 0;
+	node->index = 0;
+	node->offset = -1;
+	node->size = 4;
+
+	if (node->parent) {
+		bitnum = parent->bitnum;
+		if ((bitnum & 7) == 0) {
+			node->bitnum = bitnum + 7 + 8;
+			node->nextbyte = 1;
+		} else {
+			node->bitnum = bitnum - 1;
+			node->nextbyte = 0;
+		}
+	} else {
+		node->bitnum = 7;
+		node->nextbyte = 0;
+	}
+
+	return node;
+}
+
+/*
+ * Insert a new leaf into the tree, and collapse any subtrees that are
+ * fully populated and end in identical leaves. A nextbyte tagged
+ * internal node will not be removed to preserve the tree's integrity.
+ * Note that due to the structure of utf8, no nextbyte tagged node
+ * will be a candidate for removal.
+ */
+static int insert(struct tree *tree, char *key, int keylen, void *leaf)
+{
+	struct node *node;
+	struct node *parent;
+	void **cursor;
+	int keybits;
+
+	assert(keylen >= 1 && keylen <= 4);
+
+	node = NULL;
+	cursor = &tree->root;
+	keybits = 8 * keylen;
+
+	/* Insert, creating path along the way. */
+	while (keybits) {
+		if (!*cursor)
+			*cursor = alloc_node(node);
+		node = *cursor;
+		if (node->nextbyte)
+			key++;
+		if (*key & (1 << (node->bitnum & 7)))
+			cursor = &node->right;
+		else
+			cursor = &node->left;
+		keybits--;
+	}
+	*cursor = leaf;
+
+	/* Merge subtrees if possible. */
+	while (node) {
+		if (*key & (1 << (node->bitnum & 7)))
+			node->rightnode = LEAF;
+		else
+			node->leftnode = LEAF;
+		if (node->nextbyte)
+			break;
+		if (node->leftnode == NODE || node->rightnode == NODE)
+			break;
+		assert(node->left);
+		assert(node->right);
+		/* Compare */
+		if (! tree->leaf_equal(node->left, node->right))
+			break;
+		/* Keep left, drop right leaf. */
+		leaf = node->left;
+		/* Check in parent */
+		parent = node->parent;
+		if (!parent) {
+			/* root of tree! */
+			tree->root = leaf;
+			tree->childnode = LEAF;
+		} else if (parent->left == node) {
+			parent->left = leaf;
+			parent->leftnode = LEAF;
+			if (parent->right) {
+				parent->keymask = 0;
+				parent->keybits = 0;
+			} else {
+				parent->keymask |= (1 << node->bitnum);
+			}
+		} else if (parent->right == node) {
+			parent->right = leaf;
+			parent->rightnode = LEAF;
+			if (parent->left) {
+				parent->keymask = 0;
+				parent->keybits = 0;
+			} else {
+				parent->keymask |= (1 << node->bitnum);
+				parent->keybits |= (1 << node->bitnum);
+			}
+		} else {
+			/* internal tree error */
+			assert(0);
+		}
+		free(node);
+		node = parent;
+	}
+
+	/* Propagate keymasks up along singleton chains. */
+	while (node) {
+		parent = node->parent;
+		if (!parent)
+			break;
+		/* Nix the mask for parents with two children. */
+		if (node->keymask == 0) {
+			parent->keymask = 0;
+			parent->keybits = 0;
+		} else if (parent->left && parent->right) {
+			parent->keymask = 0;
+			parent->keybits = 0;
+		} else {
+			assert((parent->keymask & node->keymask) == 0);
+			parent->keymask |= node->keymask;
+			parent->keymask |= (1 << parent->bitnum);
+			parent->keybits |= node->keybits;
+			if (parent->right)
+				parent->keybits |= (1 << parent->bitnum);
+		}
+		node = parent;
+	}
+
+	return 0;
+}
+
+/*
+ * Prune internal nodes.
+ *
+ * Fully populated subtrees that end at the same leaf have already
+ * been collapsed.  There are still internal nodes that have for both
+ * their left and right branches a sequence of singletons that make
+ * identical choices and end in identical leaves.  The keymask and
+ * keybits collected in the nodes describe the choices made in these
+ * singleton chains.  When they are identical for the left and right
+ * branch of a node, and the two leaves comare identical, the node in
+ * question can be removed.
+ *
+ * Note that nodes with the nextbyte tag set will not be removed by
+ * this to ensure tree integrity.  Note as well that the structure of
+ * utf8 ensures that these nodes would not have been candidates for
+ * removal in any case.
+ */
+static void prune(struct tree *tree)
+{
+	struct node *node;
+	struct node *left;
+	struct node *right;
+	struct node *parent;
+	void *leftleaf;
+	void *rightleaf;
+	unsigned int leftmask;
+	unsigned int rightmask;
+	unsigned int bitmask;
+	int count;
+
+	if (verbose > 0)
+		printf("Pruning %s_%x\n", tree->type, tree->maxage);
+
+	count = 0;
+	if (tree->childnode == LEAF)
+		return;
+	if (!tree->root)
+		return;
+
+	leftmask = rightmask = 0;
+	node = tree->root;
+	while (node) {
+		if (node->nextbyte)
+			goto advance;
+		if (node->leftnode == LEAF)
+			goto advance;
+		if (node->rightnode == LEAF)
+			goto advance;
+		if (!node->left)
+			goto advance;
+		if (!node->right)
+			goto advance;
+		left = node->left;
+		right = node->right;
+		if (left->keymask == 0)
+			goto advance;
+		if (right->keymask == 0)
+			goto advance;
+		if (left->keymask != right->keymask)
+			goto advance;
+		if (left->keybits != right->keybits)
+			goto advance;
+		leftleaf = NULL;
+		while (!leftleaf) {
+			assert(left->left || left->right);
+			if (left->leftnode == LEAF)
+				leftleaf = left->left;
+			else if (left->rightnode == LEAF)
+				leftleaf = left->right;
+			else if (left->left)
+				left = left->left;
+			else if (left->right)
+				left = left->right;
+			else
+				assert(0);
+		}
+		rightleaf = NULL;
+		while (!rightleaf) {
+			assert(right->left || right->right);
+			if (right->leftnode == LEAF)
+				rightleaf = right->left;
+			else if (right->rightnode == LEAF)
+				rightleaf = right->right;
+			else if (right->left)
+				right = right->left;
+			else if (right->right)
+				right = right->right;
+			else
+				assert(0);
+		}
+		if (! tree->leaf_equal(leftleaf, rightleaf))
+			goto advance;
+		/*
+		 * This node has identical singleton-only subtrees.
+		 * Remove it.
+		 */
+		parent = node->parent;
+		left = node->left;
+		right = node->right;
+		if (parent->left == node)
+			parent->left = left;
+		else if (parent->right == node)
+			parent->right = left;
+		else
+			assert(0);
+		left->parent = parent;
+		left->keymask |= (1 << node->bitnum);
+		node->left = NULL;
+		while (node) {
+			bitmask = 1 << node->bitnum;
+			leftmask &= ~bitmask;
+			rightmask &= ~bitmask;
+			if (node->leftnode == NODE && node->left) {
+				left = node->left;
+				free(node);
+				count++;
+				node = left;
+			} else if (node->rightnode == NODE && node->right) {
+				right = node->right;
+				free(node);
+				count++;
+				node = right;
+			} else {
+				node = NULL;
+			}
+		}
+		/* Propagate keymasks up along singleton chains. */
+		node = parent;
+		/* Force re-check */
+		bitmask = 1 << node->bitnum;
+		leftmask &= ~bitmask;
+		rightmask &= ~bitmask;
+		for (;;) {
+			if (node->left && node->right)
+				break;
+			if (node->left) {
+				left = node->left;
+				node->keymask |= left->keymask;
+				node->keybits |= left->keybits;
+			}
+			if (node->right) {
+				right = node->right;
+				node->keymask |= right->keymask;
+				node->keybits |= right->keybits;
+			}
+			node->keymask |= (1 << node->bitnum);
+			node = node->parent;
+			/* Force re-check */
+			bitmask = 1 << node->bitnum;
+			leftmask &= ~bitmask;
+			rightmask &= ~bitmask;
+		}
+	advance:
+		bitmask = 1 << node->bitnum;
+		if ((leftmask & bitmask) == 0 &&
+		    node->leftnode == NODE &&
+		    node->left) {
+			leftmask |= bitmask;
+			node = node->left;
+		} else if ((rightmask & bitmask) == 0 &&
+			   node->rightnode == NODE &&
+			   node->right) {
+			rightmask |= bitmask;
+			node = node->right;
+		} else {
+			leftmask &= ~bitmask;
+			rightmask &= ~bitmask;
+			node = node->parent;
+		}
+	}
+	if (verbose > 0)
+		printf("Pruned %d nodes\n", count);
+}
+
+/*
+ * Mark the nodes in the tree that lead to leaves that must be
+ * emitted.
+ */
+static void mark_nodes(struct tree *tree)
+{
+	struct node *node;
+	struct node *n;
+	unsigned int leftmask;
+	unsigned int rightmask;
+	unsigned int bitmask;
+	int marked;
+
+	marked = 0;
+	if (verbose > 0)
+		printf("Marking %s_%x\n", tree->type, tree->maxage);
+	if (tree->childnode == LEAF)
+		goto done;
+
+	assert(tree->childnode == NODE);
+	node = tree->root;
+	leftmask = rightmask = 0;
+	while (node) {
+		bitmask = 1 << node->bitnum;
+		if ((leftmask & bitmask) == 0) {
+			leftmask |= bitmask;
+			if (node->leftnode == LEAF) {
+				assert(node->left);
+				if (tree->leaf_mark(node->left)) {
+					n = node;
+					while (n && !n->mark) {
+						marked++;
+						n->mark = 1;
+						n = n->parent;
+					}
+				}
+			} else if (node->left) {
+				assert(node->leftnode == NODE);
+				node = node->left;
+				continue;
+			}
+		}
+		if ((rightmask & bitmask) == 0) {
+			rightmask |= bitmask;
+			if (node->rightnode == LEAF) {
+				assert(node->right);
+				if (tree->leaf_mark(node->right)) {
+					n = node;
+					while (n && !n->mark) {
+						marked++;
+						n->mark = 1;
+						n = n->parent;
+					}
+				}
+			} else if (node->right) {
+				assert(node->rightnode == NODE);
+				node = node->right;
+				continue;
+			}
+		}
+		leftmask &= ~bitmask;
+		rightmask &= ~bitmask;
+		node = node->parent;
+	}
+
+	/* second pass: left siblings and singletons */
+
+	assert(tree->childnode == NODE);
+	node = tree->root;
+	leftmask = rightmask = 0;
+	while (node) {
+		bitmask = 1 << node->bitnum;
+		if ((leftmask & bitmask) == 0) {
+			leftmask |= bitmask;
+			if (node->leftnode == LEAF) {
+				assert(node->left);
+				if (tree->leaf_mark(node->left)) {
+					n = node;
+					while (n && !n->mark) {
+						marked++;
+						n->mark = 1;
+						n = n->parent;
+					}
+				}
+			} else if (node->left) {
+				assert(node->leftnode == NODE);
+				node = node->left;
+				if (!node->mark && node->parent->mark) {
+					marked++;
+					node->mark = 1;
+				}
+				continue;
+			}
+		}
+		if ((rightmask & bitmask) == 0) {
+			rightmask |= bitmask;
+			if (node->rightnode == LEAF) {
+				assert(node->right);
+				if (tree->leaf_mark(node->right)) {
+					n = node;
+					while (n && !n->mark) {
+						marked++;
+						n->mark = 1;
+						n = n->parent;
+					}
+				}
+			} else if (node->right) {
+				assert(node->rightnode == NODE);
+				node = node->right;
+				if (!node->mark && node->parent->mark &&
+				    !node->parent->left) {
+					marked++;
+					node->mark = 1;
+				}
+				continue;
+			}
+		}
+		leftmask &= ~bitmask;
+		rightmask &= ~bitmask;
+		node = node->parent;
+	}
+done:
+	if (verbose > 0)
+		printf("Marked %d nodes\n", marked);
+}
+
+/*
+ * Compute the index of each node and leaf, which is the offset in the
+ * emitted trie.  These values must be pre-computed because relative
+ * offsets between nodes are used to navigate the tree.
+ */
+static int index_nodes(struct tree *tree, int index)
+{
+	struct node *node;
+	unsigned int leftmask;
+	unsigned int rightmask;
+	unsigned int bitmask;
+	int count;
+	int indent;
+
+	/* Align to a cache line (or half a cache line?). */
+	while (index % 64)
+		index++;
+	tree->index = index;
+	indent = 1;
+	count = 0;
+
+	if (verbose > 0)
+		printf("Indexing %s_%x: %d\n", tree->type, tree->maxage, index);
+	if (tree->childnode == LEAF) {
+		index += tree->leaf_size(tree->root);
+		goto done;
+	}
+
+	assert(tree->childnode == NODE);
+	node = tree->root;
+	leftmask = rightmask = 0;
+	while (node) {
+		if (!node->mark)
+			goto skip;
+		count++;
+		if (node->index != index)
+			node->index = index;
+		index += node->size;
+skip:
+		while (node) {
+			bitmask = 1 << node->bitnum;
+			if (node->mark && (leftmask & bitmask) == 0) {
+				leftmask |= bitmask;
+				if (node->leftnode == LEAF) {
+					assert(node->left);
+					*tree->leaf_index(tree, node->left) =
+									index;
+					index += tree->leaf_size(node->left);
+					count++;
+				} else if (node->left) {
+					assert(node->leftnode == NODE);
+					indent += 1;
+					node = node->left;
+					break;
+				}
+			}
+			if (node->mark && (rightmask & bitmask) == 0) {
+				rightmask |= bitmask;
+				if (node->rightnode == LEAF) {
+					assert(node->right);
+					*tree->leaf_index(tree, node->right) = index;
+					index += tree->leaf_size(node->right);
+					count++;
+				} else if (node->right) {
+					assert(node->rightnode == NODE);
+					indent += 1;
+					node = node->right;
+					break;
+				}
+			}
+			leftmask &= ~bitmask;
+			rightmask &= ~bitmask;
+			node = node->parent;
+			indent -= 1;
+		}
+	}
+done:
+	/* Round up to a multiple of 16 */
+	while (index % 16)
+		index++;
+	if (verbose > 0)
+		printf("Final index %d\n", index);
+	return index;
+}
+
+/*
+ * Mark the nodes in a subtree, helper for size_nodes().
+ */
+static int mark_subtree(struct node *node)
+{
+	int changed;
+
+	if (!node || node->mark)
+		return 0;
+	node->mark = 1;
+	node->index = node->parent->index;
+	changed = 1;
+	if (node->leftnode == NODE)
+		changed += mark_subtree(node->left);
+	if (node->rightnode == NODE)
+		changed += mark_subtree(node->right);
+	return changed;
+}
+
+/*
+ * Compute the size of nodes and leaves. We start by assuming that
+ * each node needs to store a three-byte offset. The indexes of the
+ * nodes are calculated based on that, and then this function is
+ * called to see if the sizes of some nodes can be reduced.  This is
+ * repeated until no more changes are seen.
+ */
+static int size_nodes(struct tree *tree)
+{
+	struct tree *next;
+	struct node *node;
+	struct node *right;
+	struct node *n;
+	unsigned int leftmask;
+	unsigned int rightmask;
+	unsigned int bitmask;
+	unsigned int pathbits;
+	unsigned int pathmask;
+	unsigned int nbit;
+	int changed;
+	int offset;
+	int size;
+	int indent;
+
+	indent = 1;
+	changed = 0;
+	size = 0;
+
+	if (verbose > 0)
+		printf("Sizing %s_%x\n", tree->type, tree->maxage);
+	if (tree->childnode == LEAF)
+		goto done;
+
+	assert(tree->childnode == NODE);
+	pathbits = 0;
+	pathmask = 0;
+	node = tree->root;
+	leftmask = rightmask = 0;
+	while (node) {
+		if (!node->mark)
+			goto skip;
+		offset = 0;
+		if (!node->left || !node->right) {
+			size = 1;
+		} else {
+			if (node->rightnode == NODE) {
+				/*
+				 * If the right node is not marked,
+				 * look for a corresponding node in
+				 * the next tree.  Such a node need
+				 * not exist.
+				 */
+				right = node->right;
+				next = tree->next;
+				while (!right->mark) {
+					assert(next);
+					n = next->root;
+					while (n->bitnum != node->bitnum) {
+						nbit = 1 << n->bitnum;
+						if (!(pathmask & nbit))
+							break;
+						if (pathbits & nbit) {
+							if (n->rightnode == LEAF)
+								break;
+							n = n->right;
+						} else {
+							if (n->leftnode == LEAF)
+								break;
+							n = n->left;
+						}
+					}
+					if (n->bitnum != node->bitnum)
+						break;
+					n = n->right;
+					right = n;
+					next = next->next;
+				}
+				/* Make sure the right node is marked. */
+				if (!right->mark)
+					changed += mark_subtree(right);
+				offset = right->index - node->index;
+			} else {
+				offset = *tree->leaf_index(tree, node->right);
+				offset -= node->index;
+			}
+			assert(offset >= 0);
+			assert(offset <= 0xffffff);
+			if (offset <= 0xff) {
+				size = 2;
+			} else if (offset <= 0xffff) {
+				size = 3;
+			} else { /* offset <= 0xffffff */
+				size = 4;
+			}
+		}
+		if (node->size != size || node->offset != offset) {
+			node->size = size;
+			node->offset = offset;
+			changed++;
+		}
+skip:
+		while (node) {
+			bitmask = 1 << node->bitnum;
+			pathmask |= bitmask;
+			if (node->mark && (leftmask & bitmask) == 0) {
+				leftmask |= bitmask;
+				if (node->leftnode == LEAF) {
+					assert(node->left);
+				} else if (node->left) {
+					assert(node->leftnode == NODE);
+					indent += 1;
+					node = node->left;
+					break;
+				}
+			}
+			if (node->mark && (rightmask & bitmask) == 0) {
+				rightmask |= bitmask;
+				pathbits |= bitmask;
+				if (node->rightnode == LEAF) {
+					assert(node->right);
+				} else if (node->right) {
+					assert(node->rightnode == NODE);
+					indent += 1;
+					node = node->right;
+					break;
+				}
+			}
+			leftmask &= ~bitmask;
+			rightmask &= ~bitmask;
+			pathmask &= ~bitmask;
+			pathbits &= ~bitmask;
+			node = node->parent;
+			indent -= 1;
+		}
+	}
+done:
+	if (verbose > 0)
+		printf("Found %d changes\n", changed);
+	return changed;
+}
+
+/*
+ * Emit a trie for the given tree into the data array.
+ */
+static void emit(struct tree *tree, unsigned char *data)
+{
+	struct node *node;
+	unsigned int leftmask;
+	unsigned int rightmask;
+	unsigned int bitmask;
+	int offlen;
+	int offset;
+	int index;
+	int indent;
+	int size;
+	int bytes;
+	int leaves;
+	int nodes[4];
+	unsigned char byte;
+
+	nodes[0] = nodes[1] = nodes[2] = nodes[3] = 0;
+	leaves = 0;
+	bytes = 0;
+	index = tree->index;
+	data += index;
+	indent = 1;
+	if (verbose > 0)
+		printf("Emitting %s_%x\n", tree->type, tree->maxage);
+	if (tree->childnode == LEAF) {
+		assert(tree->root);
+		tree->leaf_emit(tree->root, data);
+		size = tree->leaf_size(tree->root);
+		index += size;
+		leaves++;
+		goto done;
+	}
+
+	assert(tree->childnode == NODE);
+	node = tree->root;
+	leftmask = rightmask = 0;
+	while (node) {
+		if (!node->mark)
+			goto skip;
+		assert(node->offset != -1);
+		assert(node->index == index);
+
+		byte = 0;
+		if (node->nextbyte)
+			byte |= NEXTBYTE;
+		byte |= (node->bitnum & BITNUM);
+		if (node->left && node->right) {
+			if (node->leftnode == NODE)
+				byte |= LEFTNODE;
+			if (node->rightnode == NODE)
+				byte |= RIGHTNODE;
+			if (node->offset <= 0xff)
+				offlen = 1;
+			else if (node->offset <= 0xffff)
+				offlen = 2;
+			else
+				offlen = 3;
+			nodes[offlen]++;
+			offset = node->offset;
+			byte |= offlen << OFFLEN_SHIFT;
+			*data++ = byte;
+			index++;
+			while (offlen--) {
+				*data++ = offset & 0xff;
+				index++;
+				offset >>= 8;
+			}
+		} else if (node->left) {
+			if (node->leftnode == NODE)
+				byte |= TRIENODE;
+			nodes[0]++;
+			*data++ = byte;
+			index++;
+		} else if (node->right) {
+			byte |= RIGHTNODE;
+			if (node->rightnode == NODE)
+				byte |= TRIENODE;
+			nodes[0]++;
+			*data++ = byte;
+			index++;
+		} else {
+			assert(0);
+		}
+skip:
+		while (node) {
+			bitmask = 1 << node->bitnum;
+			if (node->mark && (leftmask & bitmask) == 0) {
+				leftmask |= bitmask;
+				if (node->leftnode == LEAF) {
+					assert(node->left);
+					data = tree->leaf_emit(node->left,
+							       data);
+					size = tree->leaf_size(node->left);
+					index += size;
+					bytes += size;
+					leaves++;
+				} else if (node->left) {
+					assert(node->leftnode == NODE);
+					indent += 1;
+					node = node->left;
+					break;
+				}
+			}
+			if (node->mark && (rightmask & bitmask) == 0) {
+				rightmask |= bitmask;
+				if (node->rightnode == LEAF) {
+					assert(node->right);
+					data = tree->leaf_emit(node->right,
+							       data);
+					size = tree->leaf_size(node->right);
+					index += size;
+					bytes += size;
+					leaves++;
+				} else if (node->right) {
+					assert(node->rightnode == NODE);
+					indent += 1;
+					node = node->right;
+					break;
+				}
+			}
+			leftmask &= ~bitmask;
+			rightmask &= ~bitmask;
+			node = node->parent;
+			indent -= 1;
+		}
+	}
+done:
+	if (verbose > 0) {
+		printf("Emitted %d (%d) leaves",
+			leaves, bytes);
+		printf(" %d (%d+%d+%d+%d) nodes",
+			nodes[0] + nodes[1] + nodes[2] + nodes[3],
+			nodes[0], nodes[1], nodes[2], nodes[3]);
+		printf(" %d total\n", index - tree->index);
+	}
+}
+
+/* ------------------------------------------------------------------ */
+
+/*
+ * Unicode data.
+ *
+ * We need to keep track of the Canonical Combining Class, the Age,
+ * and decompositions for a code point.
+ *
+ * For the Age, we store the index into the ages table.  Effectively
+ * this is a generation number that the table maps to a unicode
+ * version.
+ *
+ * The correction field is used to indicate that this entry is in the
+ * corrections array, which contains decompositions that were
+ * corrected in later revisions.  The value of the correction field is
+ * the Unicode version in which the mapping was corrected.
+ */
+struct unicode_data {
+	unsigned int code;
+	int ccc;
+	int gen;
+	int correction;
+	unsigned int *utf32nfdi;
+	unsigned int *utf32nfdicf;
+	char *utf8nfdi;
+	char *utf8nfdicf;
+};
+
+struct unicode_data unicode_data[0x110000];
+struct unicode_data *corrections;
+int    corrections_count;
+
+struct tree *nfdi_tree;
+struct tree *nfdicf_tree;
+
+struct tree *trees;
+int          trees_count;
+
+/*
+ * Check the corrections array to see if this entry was corrected at
+ * some point.
+ */
+static struct unicode_data *corrections_lookup(struct unicode_data *u)
+{
+	int i;
+
+	for (i = 0; i != corrections_count; i++)
+		if (u->code == corrections[i].code)
+			return &corrections[i];
+	return u;
+}
+
+static int nfdi_equal(void *l, void *r)
+{
+	struct unicode_data *left = l;
+	struct unicode_data *right = r;
+
+	if (left->gen != right->gen)
+		return 0;
+	if (left->ccc != right->ccc)
+		return 0;
+	if (left->utf8nfdi && right->utf8nfdi &&
+	    strcmp(left->utf8nfdi, right->utf8nfdi) == 0)
+		return 1;
+	if (left->utf8nfdi || right->utf8nfdi)
+		return 0;
+	return 1;
+}
+
+static int nfdicf_equal(void *l, void *r)
+{
+	struct unicode_data *left = l;
+	struct unicode_data *right = r;
+
+	if (left->gen != right->gen)
+		return 0;
+	if (left->ccc != right->ccc)
+		return 0;
+	if (left->utf8nfdicf && right->utf8nfdicf &&
+	    strcmp(left->utf8nfdicf, right->utf8nfdicf) == 0)
+		return 1;
+	if (left->utf8nfdicf && right->utf8nfdicf)
+		return 0;
+	if (left->utf8nfdicf || right->utf8nfdicf)
+		return 0;
+	if (left->utf8nfdi && right->utf8nfdi &&
+	    strcmp(left->utf8nfdi, right->utf8nfdi) == 0)
+		return 1;
+	if (left->utf8nfdi || right->utf8nfdi)
+		return 0;
+	return 1;
+}
+
+static void nfdi_print(void *l, int indent)
+{
+	struct unicode_data *leaf = l;
+
+	printf("%*sleaf @ %p code %X ccc %d gen %d", indent, "", leaf,
+		leaf->code, leaf->ccc, leaf->gen);
+
+	if (leaf->utf8nfdi && leaf->utf8nfdi[0] == HANGUL)
+		printf(" nfdi \"%s\"", "HANGUL SYLLABLE");
+	else if (leaf->utf8nfdi)
+		printf(" nfdi \"%s\"", (const char*)leaf->utf8nfdi);
+
+	printf("\n");
+}
+
+static void nfdicf_print(void *l, int indent)
+{
+	struct unicode_data *leaf = l;
+
+	printf("%*sleaf @ %p code %X ccc %d gen %d", indent, "", leaf,
+		leaf->code, leaf->ccc, leaf->gen);
+
+	if (leaf->utf8nfdicf)
+		printf(" nfdicf \"%s\"", (const char*)leaf->utf8nfdicf);
+	else if (leaf->utf8nfdi && leaf->utf8nfdi[0] == HANGUL)
+		printf(" nfdi \"%s\"", "HANGUL SYLLABLE");
+	else if (leaf->utf8nfdi)
+		printf(" nfdi \"%s\"", (const char*)leaf->utf8nfdi);
+	printf("\n");
+}
+
+static int nfdi_mark(void *l)
+{
+	return 1;
+}
+
+static int nfdicf_mark(void *l)
+{
+	struct unicode_data *leaf = l;
+
+	if (leaf->utf8nfdicf)
+		return 1;
+	return 0;
+}
+
+static int correction_mark(void *l)
+{
+	struct unicode_data *leaf = l;
+
+	return leaf->correction;
+}
+
+static int nfdi_size(void *l)
+{
+	struct unicode_data *leaf = l;
+	int size = 2;
+
+	if (HANGUL_SYLLABLE(leaf->code))
+		size += 1;
+	else if (leaf->utf8nfdi)
+		size += strlen(leaf->utf8nfdi) + 1;
+	return size;
+}
+
+static int nfdicf_size(void *l)
+{
+	struct unicode_data *leaf = l;
+	int size = 2;
+
+	if (HANGUL_SYLLABLE(leaf->code))
+		size += 1;
+	else if (leaf->utf8nfdicf)
+		size += strlen(leaf->utf8nfdicf) + 1;
+	else if (leaf->utf8nfdi)
+		size += strlen(leaf->utf8nfdi) + 1;
+	return size;
+}
+
+static int *nfdi_index(struct tree *tree, void *l)
+{
+	struct unicode_data *leaf = l;
+
+	return &tree->leafindex[leaf->code];
+}
+
+static int *nfdicf_index(struct tree *tree, void *l)
+{
+	struct unicode_data *leaf = l;
+
+	return &tree->leafindex[leaf->code];
+}
+
+static unsigned char *nfdi_emit(void *l, unsigned char *data)
+{
+	struct unicode_data *leaf = l;
+	unsigned char *s;
+
+	*data++ = leaf->gen;
+
+	if (HANGUL_SYLLABLE(leaf->code)) {
+		*data++ = DECOMPOSE;
+		*data++ = HANGUL;
+	} else if (leaf->utf8nfdi) {
+		*data++ = DECOMPOSE;
+		s = (unsigned char*)leaf->utf8nfdi;
+		while ((*data++ = *s++) != 0)
+			;
+	} else {
+		*data++ = leaf->ccc;
+	}
+	return data;
+}
+
+static unsigned char *nfdicf_emit(void *l, unsigned char *data)
+{
+	struct unicode_data *leaf = l;
+	unsigned char *s;
+
+	*data++ = leaf->gen;
+
+	if (HANGUL_SYLLABLE(leaf->code)) {
+		*data++ = DECOMPOSE;
+		*data++ = HANGUL;
+	} else if (leaf->utf8nfdicf) {
+		*data++ = DECOMPOSE;
+		s = (unsigned char*)leaf->utf8nfdicf;
+		while ((*data++ = *s++) != 0)
+			;
+	} else if (leaf->utf8nfdi) {
+		*data++ = DECOMPOSE;
+		s = (unsigned char*)leaf->utf8nfdi;
+		while ((*data++ = *s++) != 0)
+			;
+	} else {
+		*data++ = leaf->ccc;
+	}
+	return data;
+}
+
+static void utf8_create(struct unicode_data *data)
+{
+	char utf[18*4+1];
+	char *u;
+	unsigned int *um;
+	int i;
+
+	if (data->utf8nfdi) {
+		assert(data->utf8nfdi[0] == HANGUL);
+		return;
+	}
+
+	u = utf;
+	um = data->utf32nfdi;
+	if (um) {
+		for (i = 0; um[i]; i++)
+			u += utf8encode(u, um[i]);
+		*u = '\0';
+		data->utf8nfdi = strdup(utf);
+	}
+	u = utf;
+	um = data->utf32nfdicf;
+	if (um) {
+		for (i = 0; um[i]; i++)
+			u += utf8encode(u, um[i]);
+		*u = '\0';
+		if (!data->utf8nfdi || strcmp(data->utf8nfdi, utf))
+			data->utf8nfdicf = strdup(utf);
+	}
+}
+
+static void utf8_init(void)
+{
+	unsigned int unichar;
+	int i;
+
+	for (unichar = 0; unichar != 0x110000; unichar++)
+		utf8_create(&unicode_data[unichar]);
+
+	for (i = 0; i != corrections_count; i++)
+		utf8_create(&corrections[i]);
+}
+
+static void trees_init(void)
+{
+	struct unicode_data *data;
+	unsigned int maxage;
+	unsigned int nextage;
+	int count;
+	int i;
+	int j;
+
+	/* Count the number of different ages. */
+	count = 0;
+	nextage = (unsigned int)-1;
+	do {
+		maxage = nextage;
+		nextage = 0;
+		for (i = 0; i <= corrections_count; i++) {
+			data = &corrections[i];
+			if (nextage < data->correction &&
+			    data->correction < maxage)
+				nextage = data->correction;
+		}
+		count++;
+	} while (nextage);
+
+	/* Two trees per age: nfdi and nfdicf */
+	trees_count = count * 2;
+	trees = calloc(trees_count, sizeof(struct tree));
+
+	/* Assign ages to the trees. */
+	count = trees_count;
+	nextage = (unsigned int)-1;
+	do {
+		maxage = nextage;
+		trees[--count].maxage = maxage;
+		trees[--count].maxage = maxage;
+		nextage = 0;
+		for (i = 0; i <= corrections_count; i++) {
+			data = &corrections[i];
+			if (nextage < data->correction &&
+			    data->correction < maxage)
+				nextage = data->correction;
+		}
+	} while (nextage);
+
+	/* The ages assigned above are off by one. */
+	for (i = 0; i != trees_count; i++) {
+		j = 0;
+		while (ages[j] < trees[i].maxage)
+			j++;
+		trees[i].maxage = ages[j-1];
+	}
+
+	/* Set up the forwarding between trees. */
+	trees[trees_count-2].next = &trees[trees_count-1];
+	trees[trees_count-1].leaf_mark = nfdi_mark;
+	trees[trees_count-2].leaf_mark = nfdicf_mark;
+	for (i = 0; i != trees_count-2; i += 2) {
+		trees[i].next = &trees[trees_count-2];
+		trees[i].leaf_mark = correction_mark;
+		trees[i+1].next = &trees[trees_count-1];
+		trees[i+1].leaf_mark = correction_mark;
+	}
+
+	/* Assign the callouts. */
+	for (i = 0; i != trees_count; i += 2) {
+		trees[i].type = "nfdicf";
+		trees[i].leaf_equal = nfdicf_equal;
+		trees[i].leaf_print = nfdicf_print;
+		trees[i].leaf_size = nfdicf_size;
+		trees[i].leaf_index = nfdicf_index;
+		trees[i].leaf_emit = nfdicf_emit;
+
+		trees[i+1].type = "nfdi";
+		trees[i+1].leaf_equal = nfdi_equal;
+		trees[i+1].leaf_print = nfdi_print;
+		trees[i+1].leaf_size = nfdi_size;
+		trees[i+1].leaf_index = nfdi_index;
+		trees[i+1].leaf_emit = nfdi_emit;
+	}
+
+	/* Finish init. */
+	for (i = 0; i != trees_count; i++)
+		trees[i].childnode = NODE;
+}
+
+static void trees_populate(void)
+{
+	struct unicode_data *data;
+	unsigned int unichar;
+	char keyval[4];
+	int keylen;
+	int i;
+
+	for (i = 0; i != trees_count; i++) {
+		if (verbose > 0) {
+			printf("Populating %s_%x\n",
+				trees[i].type, trees[i].maxage);
+		}
+		for (unichar = 0; unichar != 0x110000; unichar++) {
+			if (unicode_data[unichar].gen < 0)
+				continue;
+			keylen = utf8encode(keyval, unichar);
+			data = corrections_lookup(&unicode_data[unichar]);
+			if (data->correction <= trees[i].maxage)
+				data = &unicode_data[unichar];
+			insert(&trees[i], keyval, keylen, data);
+		}
+	}
+}
+
+static void trees_reduce(void)
+{
+	int i;
+	int size;
+	int changed;
+
+	for (i = 0; i != trees_count; i++)
+		prune(&trees[i]);
+	for (i = 0; i != trees_count; i++)
+		mark_nodes(&trees[i]);
+	do {
+		size = 0;
+		for (i = 0; i != trees_count; i++)
+			size = index_nodes(&trees[i], size);
+		changed = 0;
+		for (i = 0; i != trees_count; i++)
+			changed += size_nodes(&trees[i]);
+	} while (changed);
+
+	utf8data = calloc(size, 1);
+	utf8data_size = size;
+	for (i = 0; i != trees_count; i++)
+		emit(&trees[i], utf8data);
+
+	if (verbose > 0) {
+		for (i = 0; i != trees_count; i++) {
+			printf("%s_%x idx %d\n",
+				trees[i].type, trees[i].maxage, trees[i].index);
+		}
+	}
+
+	nfdi = utf8data + trees[trees_count-1].index;
+	nfdicf = utf8data + trees[trees_count-2].index;
+
+	nfdi_tree = &trees[trees_count-1];
+	nfdicf_tree = &trees[trees_count-2];
+}
+
+static void verify(struct tree *tree)
+{
+	struct unicode_data *data;
+	utf8leaf_t	*leaf;
+	unsigned int	unichar;
+	char		key[4];
+	unsigned char	hangul[UTF8HANGULLEAF];
+	int		report;
+	int		nocf;
+
+	if (verbose > 0)
+		printf("Verifying %s_%x\n", tree->type, tree->maxage);
+	nocf = strcmp(tree->type, "nfdicf");
+
+	for (unichar = 0; unichar != 0x110000; unichar++) {
+		report = 0;
+		data = corrections_lookup(&unicode_data[unichar]);
+		if (data->correction <= tree->maxage)
+			data = &unicode_data[unichar];
+		utf8encode(key,unichar);
+		leaf = utf8lookup(tree, hangul, key);
+
+		if (!leaf) {
+			if (data->gen != -1)
+				report++;
+			if (unichar < 0xd800 || unichar > 0xdfff)
+				report++;
+		} else {
+			if (unichar >= 0xd800 && unichar <= 0xdfff)
+				report++;
+			if (data->gen == -1)
+				report++;
+			if (data->gen != LEAF_GEN(leaf))
+				report++;
+			if (LEAF_CCC(leaf) == DECOMPOSE) {
+				if (HANGUL_SYLLABLE(data->code)) {
+					if (data->utf8nfdi[0] != HANGUL)
+						report++;
+				} else if (nocf) {
+					if (!data->utf8nfdi) {
+						report++;
+					} else if (strcmp(data->utf8nfdi,
+							  LEAF_STR(leaf))) {
+						report++;
+					}
+				} else {
+					if (!data->utf8nfdicf &&
+					    !data->utf8nfdi) {
+						report++;
+					} else if (data->utf8nfdicf) {
+						if (strcmp(data->utf8nfdicf,
+							   LEAF_STR(leaf)))
+							report++;
+					} else if (strcmp(data->utf8nfdi,
+							  LEAF_STR(leaf))) {
+						report++;
+					}
+				}
+			} else if (data->ccc != LEAF_CCC(leaf)) {
+				report++;
+			}
+		}
+		if (report) {
+			printf("%X code %X gen %d ccc %d"
+				" nfdi -> \"%s\"",
+				unichar, data->code, data->gen,
+				data->ccc,
+				data->utf8nfdi);
+			if (leaf) {
+				printf(" gen %d ccc %d"
+					" nfdi -> \"%s\"",
+					LEAF_GEN(leaf),
+					LEAF_CCC(leaf),
+					LEAF_CCC(leaf) == DECOMPOSE ?
+						LEAF_STR(leaf) : "");
+			}
+			printf("\n");
+		}
+	}
+}
+
+static void trees_verify(void)
+{
+	int i;
+
+	for (i = 0; i != trees_count; i++)
+		verify(&trees[i]);
+}
+
+/* ------------------------------------------------------------------ */
+
+static void help(void)
+{
+	printf("Usage: %s [options]\n", argv0);
+	printf("\n");
+	printf("This program creates an a data trie used for parsing and\n");
+	printf("normalization of UTF-8 strings. The trie is derived from\n");
+	printf("a set of input files from the Unicode character database\n");
+	printf("found at: http://www.unicode.org/Public/UCD/latest/ucd/\n");
+	printf("\n");
+	printf("The generated tree supports two normalization forms:\n");
+	printf("\n");
+	printf("\tnfdi:\n");
+	printf("\t- Apply unicode normalization form NFD.\n");
+	printf("\t- Remove any Default_Ignorable_Code_Point.\n");
+	printf("\n");
+	printf("\tnfdicf:\n");
+	printf("\t- Apply unicode normalization form NFD.\n");
+	printf("\t- Remove any Default_Ignorable_Code_Point.\n");
+	printf("\t- Apply a full casefold (C + F).\n");
+	printf("\n");
+	printf("These forms were chosen as being most useful when dealing\n");
+	printf("with file names: NFD catches most cases where characters\n");
+	printf("should be considered equivalent. The ignorables are mostly\n");
+	printf("invisible, making names hard to type.\n");
+	printf("\n");
+	printf("The options to specify the files to be used are listed\n");
+	printf("below with their default values, which are the names used\n");
+	printf("by version 11.0.0 of the Unicode Character Database.\n");
+	printf("\n");
+	printf("The input files:\n");
+	printf("\t-a %s\n", AGE_NAME);
+	printf("\t-c %s\n", CCC_NAME);
+	printf("\t-p %s\n", PROP_NAME);
+	printf("\t-d %s\n", DATA_NAME);
+	printf("\t-f %s\n", FOLD_NAME);
+	printf("\t-n %s\n", NORM_NAME);
+	printf("\n");
+	printf("Additionally, the generated tables are tested using:\n");
+	printf("\t-t %s\n", TEST_NAME);
+	printf("\n");
+	printf("Finally, the output file:\n");
+	printf("\t-o %s\n", UTF8_NAME);
+	printf("\n");
+}
+
+static void usage(void)
+{
+	help();
+	exit(1);
+}
+
+static void open_fail(const char *name, int error)
+{
+	printf("Error %d opening %s: %s\n", error, name, strerror(error));
+	exit(1);
+}
+
+static void file_fail(const char *filename)
+{
+	printf("Error parsing %s\n", filename);
+	exit(1);
+}
+
+static void line_fail(const char *filename, const char *line)
+{
+	printf("Error parsing %s:%s\n", filename, line);
+	exit(1);
+}
+
+/* ------------------------------------------------------------------ */
+
+static void print_utf32(unsigned int *utf32str)
+{
+	int	i;
+
+	for (i = 0; utf32str[i]; i++)
+		printf(" %X", utf32str[i]);
+}
+
+static void print_utf32nfdi(unsigned int unichar)
+{
+	printf(" %X ->", unichar);
+	print_utf32(unicode_data[unichar].utf32nfdi);
+	printf("\n");
+}
+
+static void print_utf32nfdicf(unsigned int unichar)
+{
+	printf(" %X ->", unichar);
+	print_utf32(unicode_data[unichar].utf32nfdicf);
+	printf("\n");
+}
+
+/* ------------------------------------------------------------------ */
+
+static void age_init(void)
+{
+	FILE *file;
+	unsigned int first;
+	unsigned int last;
+	unsigned int unichar;
+	unsigned int major;
+	unsigned int minor;
+	unsigned int revision;
+	int gen;
+	int count;
+	int ret;
+
+	if (verbose > 0)
+		printf("Parsing %s\n", age_name);
+
+	file = fopen(age_name, "r");
+	if (!file)
+		open_fail(age_name, errno);
+	count = 0;
+
+	gen = 0;
+	while (fgets(line, LINESIZE, file)) {
+		ret = sscanf(line, "# Age=V%d_%d_%d",
+				&major, &minor, &revision);
+		if (ret == 3) {
+			ages_count++;
+			if (verbose > 1)
+				printf(" Age V%d_%d_%d\n",
+					major, minor, revision);
+			if (!age_valid(major, minor, revision))
+				line_fail(age_name, line);
+			continue;
+		}
+		ret = sscanf(line, "# Age=V%d_%d", &major, &minor);
+		if (ret == 2) {
+			ages_count++;
+			if (verbose > 1)
+				printf(" Age V%d_%d\n", major, minor);
+			if (!age_valid(major, minor, 0))
+				line_fail(age_name, line);
+			continue;
+		}
+	}
+
+	/* We must have found something above. */
+	if (verbose > 1)
+		printf("%d age entries\n", ages_count);
+	if (ages_count == 0 || ages_count > MAXGEN)
+		file_fail(age_name);
+
+	/* There is a 0 entry. */
+	ages_count++;
+	ages = calloc(ages_count + 1, sizeof(*ages));
+	/* And a guard entry. */
+	ages[ages_count] = (unsigned int)-1;
+
+	rewind(file);
+	count = 0;
+	gen = 0;
+	while (fgets(line, LINESIZE, file)) {
+		ret = sscanf(line, "# Age=V%d_%d_%d",
+				&major, &minor, &revision);
+		if (ret == 3) {
+			ages[++gen] =
+				UNICODE_AGE(major, minor, revision);
+			if (verbose > 1)
+				printf(" Age V%d_%d_%d = gen %d\n",
+					major, minor, revision, gen);
+			if (!age_valid(major, minor, revision))
+				line_fail(age_name, line);
+			continue;
+		}
+		ret = sscanf(line, "# Age=V%d_%d", &major, &minor);
+		if (ret == 2) {
+			ages[++gen] = UNICODE_AGE(major, minor, 0);
+			if (verbose > 1)
+				printf(" Age V%d_%d = %d\n",
+					major, minor, gen);
+			if (!age_valid(major, minor, 0))
+				line_fail(age_name, line);
+			continue;
+		}
+		ret = sscanf(line, "%X..%X ; %d.%d #",
+			     &first, &last, &major, &minor);
+		if (ret == 4) {
+			for (unichar = first; unichar <= last; unichar++)
+				unicode_data[unichar].gen = gen;
+			count += 1 + last - first;
+			if (verbose > 1)
+				printf("  %X..%X gen %d\n", first, last, gen);
+			if (!utf32valid(first) || !utf32valid(last))
+				line_fail(age_name, line);
+			continue;
+		}
+		ret = sscanf(line, "%X ; %d.%d #", &unichar, &major, &minor);
+		if (ret == 3) {
+			unicode_data[unichar].gen = gen;
+			count++;
+			if (verbose > 1)
+				printf("  %X gen %d\n", unichar, gen);
+			if (!utf32valid(unichar))
+				line_fail(age_name, line);
+			continue;
+		}
+	}
+	unicode_maxage = ages[gen];
+	fclose(file);
+
+	/* Nix surrogate block */
+	if (verbose > 1)
+		printf(" Removing surrogate block D800..DFFF\n");
+	for (unichar = 0xd800; unichar <= 0xdfff; unichar++)
+		unicode_data[unichar].gen = -1;
+
+	if (verbose > 0)
+	        printf("Found %d entries\n", count);
+	if (count == 0)
+		file_fail(age_name);
+}
+
+static void ccc_init(void)
+{
+	FILE *file;
+	unsigned int first;
+	unsigned int last;
+	unsigned int unichar;
+	unsigned int value;
+	int count;
+	int ret;
+
+	if (verbose > 0)
+		printf("Parsing %s\n", ccc_name);
+
+	file = fopen(ccc_name, "r");
+	if (!file)
+		open_fail(ccc_name, errno);
+
+	count = 0;
+	while (fgets(line, LINESIZE, file)) {
+		ret = sscanf(line, "%X..%X ; %d #", &first, &last, &value);
+		if (ret == 3) {
+			for (unichar = first; unichar <= last; unichar++) {
+				unicode_data[unichar].ccc = value;
+                                count++;
+			}
+			if (verbose > 1)
+				printf(" %X..%X ccc %d\n", first, last, value);
+			if (!utf32valid(first) || !utf32valid(last))
+				line_fail(ccc_name, line);
+			continue;
+		}
+		ret = sscanf(line, "%X ; %d #", &unichar, &value);
+		if (ret == 2) {
+			unicode_data[unichar].ccc = value;
+                        count++;
+			if (verbose > 1)
+				printf(" %X ccc %d\n", unichar, value);
+			if (!utf32valid(unichar))
+				line_fail(ccc_name, line);
+			continue;
+		}
+	}
+	fclose(file);
+
+	if (verbose > 0)
+		printf("Found %d entries\n", count);
+	if (count == 0)
+		file_fail(ccc_name);
+}
+
+static int ignore_compatibility_form(char *type)
+{
+	int i;
+	char *ignored_types[] = {"font", "noBreak", "initial", "medial",
+				 "final", "isolated", "circle", "super",
+				 "sub", "vertical", "wide", "narrow",
+				 "small", "square", "fraction", "compat"};
+
+	for (i = 0 ; i < ARRAY_SIZE(ignored_types); i++)
+		if (strcmp(type, ignored_types[i]) == 0)
+			return 1;
+	return 0;
+}
+
+static void nfdi_init(void)
+{
+	FILE *file;
+	unsigned int unichar;
+	unsigned int mapping[19]; /* Magic - guaranteed not to be exceeded. */
+	char *s;
+	char *type;
+	unsigned int *um;
+	int count;
+	int i;
+	int ret;
+
+	if (verbose > 0)
+		printf("Parsing %s\n", data_name);
+	file = fopen(data_name, "r");
+	if (!file)
+		open_fail(data_name, errno);
+
+	count = 0;
+	while (fgets(line, LINESIZE, file)) {
+		ret = sscanf(line, "%X;%*[^;];%*[^;];%*[^;];%*[^;];%[^;];",
+			     &unichar, buf0);
+		if (ret != 2)
+			continue;
+		if (!utf32valid(unichar))
+			line_fail(data_name, line);
+
+		s = buf0;
+		/* skip over <tag> */
+		if (*s == '<') {
+			type = ++s;
+			while (*++s != '>');
+			*s++ = '\0';
+			if(ignore_compatibility_form(type))
+				continue;
+		}
+		/* decode the decomposition into UTF-32 */
+		i = 0;
+		while (*s) {
+			mapping[i] = strtoul(s, &s, 16);
+			if (!utf32valid(mapping[i]))
+				line_fail(data_name, line);
+			i++;
+		}
+		mapping[i++] = 0;
+
+		um = malloc(i * sizeof(unsigned int));
+		memcpy(um, mapping, i * sizeof(unsigned int));
+		unicode_data[unichar].utf32nfdi = um;
+
+		if (verbose > 1)
+			print_utf32nfdi(unichar);
+		count++;
+	}
+	fclose(file);
+	if (verbose > 0)
+		printf("Found %d entries\n", count);
+	if (count == 0)
+		file_fail(data_name);
+}
+
+static void nfdicf_init(void)
+{
+	FILE *file;
+	unsigned int unichar;
+	unsigned int mapping[19]; /* Magic - guaranteed not to be exceeded. */
+	char status;
+	char *s;
+	unsigned int *um;
+	int i;
+	int count;
+	int ret;
+
+	if (verbose > 0)
+		printf("Parsing %s\n", fold_name);
+	file = fopen(fold_name, "r");
+	if (!file)
+		open_fail(fold_name, errno);
+
+	count = 0;
+	while (fgets(line, LINESIZE, file)) {
+		ret = sscanf(line, "%X; %c; %[^;];", &unichar, &status, buf0);
+		if (ret != 3)
+			continue;
+		if (!utf32valid(unichar))
+			line_fail(fold_name, line);
+		/* Use the C+F casefold. */
+		if (status != 'C' && status != 'F')
+			continue;
+		s = buf0;
+		if (*s == '<')
+			while (*s++ != ' ')
+				;
+		i = 0;
+		while (*s) {
+			mapping[i] = strtoul(s, &s, 16);
+			if (!utf32valid(mapping[i]))
+				line_fail(fold_name, line);
+			i++;
+		}
+		mapping[i++] = 0;
+
+		um = malloc(i * sizeof(unsigned int));
+		memcpy(um, mapping, i * sizeof(unsigned int));
+		unicode_data[unichar].utf32nfdicf = um;
+
+		if (verbose > 1)
+			print_utf32nfdicf(unichar);
+		count++;
+	}
+	fclose(file);
+	if (verbose > 0)
+		printf("Found %d entries\n", count);
+	if (count == 0)
+		file_fail(fold_name);
+}
+
+static void ignore_init(void)
+{
+	FILE *file;
+	unsigned int unichar;
+	unsigned int first;
+	unsigned int last;
+	unsigned int *um;
+	int count;
+	int ret;
+
+	if (verbose > 0)
+		printf("Parsing %s\n", prop_name);
+	file = fopen(prop_name, "r");
+	if (!file)
+		open_fail(prop_name, errno);
+	assert(file);
+	count = 0;
+	while (fgets(line, LINESIZE, file)) {
+		ret = sscanf(line, "%X..%X ; %s # ", &first, &last, buf0);
+		if (ret == 3) {
+			if (strcmp(buf0, "Default_Ignorable_Code_Point"))
+				continue;
+			if (!utf32valid(first) || !utf32valid(last))
+				line_fail(prop_name, line);
+			for (unichar = first; unichar <= last; unichar++) {
+				free(unicode_data[unichar].utf32nfdi);
+				um = malloc(sizeof(unsigned int));
+				*um = 0;
+				unicode_data[unichar].utf32nfdi = um;
+				free(unicode_data[unichar].utf32nfdicf);
+				um = malloc(sizeof(unsigned int));
+				*um = 0;
+				unicode_data[unichar].utf32nfdicf = um;
+				count++;
+			}
+			if (verbose > 1)
+				printf(" %X..%X Default_Ignorable_Code_Point\n",
+					first, last);
+			continue;
+		}
+		ret = sscanf(line, "%X ; %s # ", &unichar, buf0);
+		if (ret == 2) {
+			if (strcmp(buf0, "Default_Ignorable_Code_Point"))
+				continue;
+			if (!utf32valid(unichar))
+				line_fail(prop_name, line);
+			free(unicode_data[unichar].utf32nfdi);
+			um = malloc(sizeof(unsigned int));
+			*um = 0;
+			unicode_data[unichar].utf32nfdi = um;
+			free(unicode_data[unichar].utf32nfdicf);
+			um = malloc(sizeof(unsigned int));
+			*um = 0;
+			unicode_data[unichar].utf32nfdicf = um;
+			if (verbose > 1)
+				printf(" %X Default_Ignorable_Code_Point\n",
+					unichar);
+			count++;
+			continue;
+		}
+	}
+	fclose(file);
+
+	if (verbose > 0)
+		printf("Found %d entries\n", count);
+	if (count == 0)
+		file_fail(prop_name);
+}
+
+static void corrections_init(void)
+{
+	FILE *file;
+	unsigned int unichar;
+	unsigned int major;
+	unsigned int minor;
+	unsigned int revision;
+	unsigned int age;
+	unsigned int *um;
+	unsigned int mapping[19]; /* Magic - guaranteed not to be exceeded. */
+	char *s;
+	int i;
+	int count;
+	int ret;
+
+	if (verbose > 0)
+		printf("Parsing %s\n", norm_name);
+	file = fopen(norm_name, "r");
+	if (!file)
+		open_fail(norm_name, errno);
+
+	count = 0;
+	while (fgets(line, LINESIZE, file)) {
+		ret = sscanf(line, "%X;%[^;];%[^;];%d.%d.%d #",
+				&unichar, buf0, buf1,
+				&major, &minor, &revision);
+		if (ret != 6)
+			continue;
+		if (!utf32valid(unichar) || !age_valid(major, minor, revision))
+			line_fail(norm_name, line);
+		count++;
+	}
+	corrections = calloc(count, sizeof(struct unicode_data));
+	corrections_count = count;
+	rewind(file);
+
+	count = 0;
+	while (fgets(line, LINESIZE, file)) {
+		ret = sscanf(line, "%X;%[^;];%[^;];%d.%d.%d #",
+				&unichar, buf0, buf1,
+				&major, &minor, &revision);
+		if (ret != 6)
+			continue;
+		if (!utf32valid(unichar) || !age_valid(major, minor, revision))
+			line_fail(norm_name, line);
+		corrections[count] = unicode_data[unichar];
+		assert(corrections[count].code == unichar);
+		age = UNICODE_AGE(major, minor, revision);
+		corrections[count].correction = age;
+
+		i = 0;
+		s = buf0;
+		while (*s) {
+			mapping[i] = strtoul(s, &s, 16);
+			if (!utf32valid(mapping[i]))
+				line_fail(norm_name, line);
+			i++;
+		}
+		mapping[i++] = 0;
+
+		um = malloc(i * sizeof(unsigned int));
+		memcpy(um, mapping, i * sizeof(unsigned int));
+		corrections[count].utf32nfdi = um;
+
+		if (verbose > 1)
+			printf(" %X -> %s -> %s V%d_%d_%d\n",
+				unichar, buf0, buf1, major, minor, revision);
+		count++;
+	}
+	fclose(file);
+
+	if (verbose > 0)
+	        printf("Found %d entries\n", count);
+	if (count == 0)
+		file_fail(norm_name);
+}
+
+/* ------------------------------------------------------------------ */
+
+/*
+ * Hangul decomposition (algorithm from Section 3.12 of Unicode 6.3.0)
+ *
+ * AC00;<Hangul Syllable, First>;Lo;0;L;;;;;N;;;;;
+ * D7A3;<Hangul Syllable, Last>;Lo;0;L;;;;;N;;;;;
+ *
+ * SBase = 0xAC00
+ * LBase = 0x1100
+ * VBase = 0x1161
+ * TBase = 0x11A7
+ * LCount = 19
+ * VCount = 21
+ * TCount = 28
+ * NCount = 588 (VCount * TCount)
+ * SCount = 11172 (LCount * NCount)
+ *
+ * Decomposition:
+ *   SIndex = s - SBase
+ *
+ * LV (Canonical/Full)
+ *   LIndex = SIndex / NCount
+ *   VIndex = (Sindex % NCount) / TCount
+ *   LPart = LBase + LIndex
+ *   VPart = VBase + VIndex
+ *
+ * LVT (Canonical)
+ *   LVIndex = (SIndex / TCount) * TCount
+ *   TIndex = (Sindex % TCount)
+ *   LVPart = SBase + LVIndex
+ *   TPart = TBase + TIndex
+ *
+ * LVT (Full)
+ *   LIndex = SIndex / NCount
+ *   VIndex = (Sindex % NCount) / TCount
+ *   TIndex = (Sindex % TCount)
+ *   LPart = LBase + LIndex
+ *   VPart = VBase + VIndex
+ *   if (TIndex == 0) {
+ *          d = <LPart, VPart>
+ *   } else {
+ *          TPart = TBase + TIndex
+ *          d = <LPart, VPart, TPart>
+ *   }
+ *
+ */
+
+static void hangul_decompose(void)
+{
+	unsigned int sb = 0xAC00;
+	unsigned int lb = 0x1100;
+	unsigned int vb = 0x1161;
+	unsigned int tb = 0x11a7;
+	/* unsigned int lc = 19; */
+	unsigned int vc = 21;
+	unsigned int tc = 28;
+	unsigned int nc = (vc * tc);
+	/* unsigned int sc = (lc * nc); */
+	unsigned int unichar;
+	unsigned int mapping[4];
+	unsigned int *um;
+        int count;
+	int i;
+
+	if (verbose > 0)
+		printf("Decomposing hangul\n");
+	/* Hangul */
+	count = 0;
+	for (unichar = 0xAC00; unichar <= 0xD7A3; unichar++) {
+		unsigned int si = unichar - sb;
+		unsigned int li = si / nc;
+		unsigned int vi = (si % nc) / tc;
+		unsigned int ti = si % tc;
+
+		i = 0;
+		mapping[i++] = lb + li;
+		mapping[i++] = vb + vi;
+		if (ti)
+			mapping[i++] = tb + ti;
+		mapping[i++] = 0;
+
+		assert(!unicode_data[unichar].utf32nfdi);
+		um = malloc(i * sizeof(unsigned int));
+		memcpy(um, mapping, i * sizeof(unsigned int));
+		unicode_data[unichar].utf32nfdi = um;
+
+		assert(!unicode_data[unichar].utf32nfdicf);
+		um = malloc(i * sizeof(unsigned int));
+		memcpy(um, mapping, i * sizeof(unsigned int));
+		unicode_data[unichar].utf32nfdicf = um;
+
+		/*
+		 * Add a cookie as a reminder that the hangul syllable
+		 * decompositions must not be stored in the generated
+		 * trie.
+		 */
+		unicode_data[unichar].utf8nfdi = malloc(2);
+		unicode_data[unichar].utf8nfdi[0] = HANGUL;
+		unicode_data[unichar].utf8nfdi[1] = '\0';
+
+		if (verbose > 1)
+			print_utf32nfdi(unichar);
+
+		count++;
+	}
+	if (verbose > 0)
+		printf("Created %d entries\n", count);
+}
+
+static void nfdi_decompose(void)
+{
+	unsigned int unichar;
+	unsigned int mapping[19]; /* Magic - guaranteed not to be exceeded. */
+	unsigned int *um;
+	unsigned int *dc;
+	int count;
+	int i;
+	int j;
+	int ret;
+
+	if (verbose > 0)
+		printf("Decomposing nfdi\n");
+
+	count = 0;
+	for (unichar = 0; unichar != 0x110000; unichar++) {
+		if (!unicode_data[unichar].utf32nfdi)
+			continue;
+		for (;;) {
+			ret = 1;
+			i = 0;
+			um = unicode_data[unichar].utf32nfdi;
+			while (*um) {
+				dc = unicode_data[*um].utf32nfdi;
+				if (dc) {
+					for (j = 0; dc[j]; j++)
+						mapping[i++] = dc[j];
+					ret = 0;
+				} else {
+					mapping[i++] = *um;
+				}
+				um++;
+			}
+			mapping[i++] = 0;
+			if (ret)
+				break;
+			free(unicode_data[unichar].utf32nfdi);
+			um = malloc(i * sizeof(unsigned int));
+			memcpy(um, mapping, i * sizeof(unsigned int));
+			unicode_data[unichar].utf32nfdi = um;
+		}
+		/* Add this decomposition to nfdicf if there is no entry. */
+		if (!unicode_data[unichar].utf32nfdicf) {
+			um = malloc(i * sizeof(unsigned int));
+			memcpy(um, mapping, i * sizeof(unsigned int));
+			unicode_data[unichar].utf32nfdicf = um;
+		}
+		if (verbose > 1)
+			print_utf32nfdi(unichar);
+		count++;
+	}
+	if (verbose > 0)
+		printf("Processed %d entries\n", count);
+}
+
+static void nfdicf_decompose(void)
+{
+	unsigned int unichar;
+	unsigned int mapping[19]; /* Magic - guaranteed not to be exceeded. */
+	unsigned int *um;
+	unsigned int *dc;
+	int count;
+	int i;
+	int j;
+	int ret;
+
+	if (verbose > 0)
+		printf("Decomposing nfdicf\n");
+	count = 0;
+	for (unichar = 0; unichar != 0x110000; unichar++) {
+		if (!unicode_data[unichar].utf32nfdicf)
+			continue;
+		for (;;) {
+			ret = 1;
+			i = 0;
+			um = unicode_data[unichar].utf32nfdicf;
+			while (*um) {
+				dc = unicode_data[*um].utf32nfdicf;
+				if (dc) {
+					for (j = 0; dc[j]; j++)
+						mapping[i++] = dc[j];
+					ret = 0;
+				} else {
+					mapping[i++] = *um;
+				}
+				um++;
+			}
+			mapping[i++] = 0;
+			if (ret)
+				break;
+			free(unicode_data[unichar].utf32nfdicf);
+			um = malloc(i * sizeof(unsigned int));
+			memcpy(um, mapping, i * sizeof(unsigned int));
+			unicode_data[unichar].utf32nfdicf = um;
+		}
+		if (verbose > 1)
+			print_utf32nfdicf(unichar);
+		count++;
+	}
+	if (verbose > 0)
+		printf("Processed %d entries\n", count);
+}
+
+/* ------------------------------------------------------------------ */
+
+int utf8agemax(struct tree *, const char *);
+int utf8nagemax(struct tree *, const char *, size_t);
+int utf8agemin(struct tree *, const char *);
+int utf8nagemin(struct tree *, const char *, size_t);
+ssize_t utf8len(struct tree *, const char *);
+ssize_t utf8nlen(struct tree *, const char *, size_t);
+struct utf8cursor;
+int utf8cursor(struct utf8cursor *, struct tree *, const char *);
+int utf8ncursor(struct utf8cursor *, struct tree *, const char *, size_t);
+int utf8byte(struct utf8cursor *);
+
+/*
+ * Hangul decomposition (algorithm from Section 3.12 of Unicode 6.3.0)
+ *
+ * AC00;<Hangul Syllable, First>;Lo;0;L;;;;;N;;;;;
+ * D7A3;<Hangul Syllable, Last>;Lo;0;L;;;;;N;;;;;
+ *
+ * SBase = 0xAC00
+ * LBase = 0x1100
+ * VBase = 0x1161
+ * TBase = 0x11A7
+ * LCount = 19
+ * VCount = 21
+ * TCount = 28
+ * NCount = 588 (VCount * TCount)
+ * SCount = 11172 (LCount * NCount)
+ *
+ * Decomposition:
+ *   SIndex = s - SBase
+ *
+ * LV (Canonical/Full)
+ *   LIndex = SIndex / NCount
+ *   VIndex = (Sindex % NCount) / TCount
+ *   LPart = LBase + LIndex
+ *   VPart = VBase + VIndex
+ *
+ * LVT (Canonical)
+ *   LVIndex = (SIndex / TCount) * TCount
+ *   TIndex = (Sindex % TCount)
+ *   LVPart = SBase + LVIndex
+ *   TPart = TBase + TIndex
+ *
+ * LVT (Full)
+ *   LIndex = SIndex / NCount
+ *   VIndex = (Sindex % NCount) / TCount
+ *   TIndex = (Sindex % TCount)
+ *   LPart = LBase + LIndex
+ *   VPart = VBase + VIndex
+ *   if (TIndex == 0) {
+ *          d = <LPart, VPart>
+ *   } else {
+ *          TPart = TBase + TIndex
+ *          d = <LPart, VPart, TPart>
+ *   }
+ */
+
+/* Constants */
+#define SB	(0xAC00)
+#define LB	(0x1100)
+#define VB	(0x1161)
+#define TB	(0x11A7)
+#define LC	(19)
+#define VC	(21)
+#define TC	(28)
+#define NC	(VC * TC)
+#define SC	(LC * NC)
+
+/* Algorithmic decomposition of hangul syllable. */
+static utf8leaf_t *utf8hangul(const char *str, unsigned char *hangul)
+{
+	unsigned int	si;
+	unsigned int	li;
+	unsigned int	vi;
+	unsigned int	ti;
+	unsigned char	*h;
+
+	/* Calculate the SI, LI, VI, and TI values. */
+	si = utf8decode(str) - SB;
+	li = si / NC;
+	vi = (si % NC) / TC;
+	ti = si % TC;
+
+	/* Fill in base of leaf. */
+	h = hangul;
+	LEAF_GEN(h) = 2;
+	LEAF_CCC(h) = DECOMPOSE;
+	h += 2;
+
+	/* Add LPart, a 3-byte UTF-8 sequence. */
+	h += utf8encode((char *)h, li + LB);
+
+	/* Add VPart, a 3-byte UTF-8 sequence. */
+	h += utf8encode((char *)h, vi + VB);
+
+	/* Add TPart if required, also a 3-byte UTF-8 sequence. */
+	if (ti)
+		h += utf8encode((char *)h, ti + TB);
+
+	/* Terminate string. */
+	h[0] = '\0';
+
+	return hangul;
+}
+
+/*
+ * Use trie to scan s, touching at most len bytes.
+ * Returns the leaf if one exists, NULL otherwise.
+ *
+ * A non-NULL return guarantees that the UTF-8 sequence starting at s
+ * is well-formed and corresponds to a known unicode code point.  The
+ * shorthand for this will be "is valid UTF-8 unicode".
+ */
+static utf8leaf_t *utf8nlookup(struct tree *tree, unsigned char *hangul,
+			       const char *s, size_t len)
+{
+	utf8trie_t	*trie;
+	int		offlen;
+	int		offset;
+	int		mask;
+	int		node;
+
+	if (!tree)
+		return NULL;
+	if (len == 0)
+		return NULL;
+	node = 1;
+	trie = utf8data + tree->index;
+	while (node) {
+		offlen = (*trie & OFFLEN) >> OFFLEN_SHIFT;
+		if (*trie & NEXTBYTE) {
+			if (--len == 0)
+				return NULL;
+			s++;
+		}
+		mask = 1 << (*trie & BITNUM);
+		if (*s & mask) {
+			/* Right leg */
+			if (offlen) {
+				/* Right node at offset of trie */
+				node = (*trie & RIGHTNODE);
+				offset = trie[offlen];
+				while (--offlen) {
+					offset <<= 8;
+					offset |= trie[offlen];
+				}
+				trie += offset;
+			} else if (*trie & RIGHTPATH) {
+				/* Right node after this node */
+				node = (*trie & TRIENODE);
+				trie++;
+			} else {
+				/* No right node. */
+				return NULL;
+			}
+		} else {
+			/* Left leg */
+			if (offlen) {
+				/* Left node after this node. */
+				node = (*trie & LEFTNODE);
+				trie += offlen + 1;
+			} else if (*trie & RIGHTPATH) {
+				/* No left node. */
+				return NULL;
+			} else {
+				/* Left node after this node */
+				node = (*trie & TRIENODE);
+				trie++;
+			}
+		}
+	}
+	/*
+	 * Hangul decomposition is done algorithmically. These are the
+	 * codepoints >= 0xAC00 and <= 0xD7A3. Their UTF-8 encoding is
+	 * always 3 bytes long, so s has been advanced twice, and the
+	 * start of the sequence is at s-2.
+	 */
+	if (LEAF_CCC(trie) == DECOMPOSE && LEAF_STR(trie)[0] == HANGUL)
+		trie = utf8hangul(s - 2, hangul);
+	return trie;
+}
+
+/*
+ * Use trie to scan s.
+ * Returns the leaf if one exists, NULL otherwise.
+ *
+ * Forwards to trie_nlookup().
+ */
+static utf8leaf_t *utf8lookup(struct tree *tree, unsigned char *hangul,
+			      const char *s)
+{
+	return utf8nlookup(tree, hangul, s, (size_t)-1);
+}
+
+/*
+ * Return the number of bytes used by the current UTF-8 sequence.
+ * Assumes the input points to the first byte of a valid UTF-8
+ * sequence.
+ */
+static inline int utf8clen(const char *s)
+{
+	unsigned char c = *s;
+	return 1 + (c >= 0xC0) + (c >= 0xE0) + (c >= 0xF0);
+}
+
+/*
+ * Maximum age of any character in s.
+ * Return -1 if s is not valid UTF-8 unicode.
+ * Return 0 if only non-assigned code points are used.
+ */
+int utf8agemax(struct tree *tree, const char *s)
+{
+	utf8leaf_t	*leaf;
+	int		age = 0;
+	int		leaf_age;
+	unsigned char	hangul[UTF8HANGULLEAF];
+
+	if (!tree)
+		return -1;
+
+	while (*s) {
+		leaf = utf8lookup(tree, hangul, s);
+		if (!leaf)
+			return -1;
+		leaf_age = ages[LEAF_GEN(leaf)];
+		if (leaf_age <= tree->maxage && leaf_age > age)
+			age = leaf_age;
+		s += utf8clen(s);
+	}
+	return age;
+}
+
+/*
+ * Minimum age of any character in s.
+ * Return -1 if s is not valid UTF-8 unicode.
+ * Return 0 if non-assigned code points are used.
+ */
+int utf8agemin(struct tree *tree, const char *s)
+{
+	utf8leaf_t	*leaf;
+	int		age;
+	int		leaf_age;
+	unsigned char	hangul[UTF8HANGULLEAF];
+
+	if (!tree)
+		return -1;
+	age = tree->maxage;
+	while (*s) {
+		leaf = utf8lookup(tree, hangul, s);
+		if (!leaf)
+			return -1;
+		leaf_age = ages[LEAF_GEN(leaf)];
+		if (leaf_age <= tree->maxage && leaf_age < age)
+			age = leaf_age;
+		s += utf8clen(s);
+	}
+	return age;
+}
+
+/*
+ * Maximum age of any character in s, touch at most len bytes.
+ * Return -1 if s is not valid UTF-8 unicode.
+ */
+int utf8nagemax(struct tree *tree, const char *s, size_t len)
+{
+	utf8leaf_t	*leaf;
+	int		age = 0;
+	int		leaf_age;
+	unsigned char	hangul[UTF8HANGULLEAF];
+
+	if (!tree)
+		return -1;
+
+        while (len && *s) {
+		leaf = utf8nlookup(tree, hangul, s, len);
+		if (!leaf)
+			return -1;
+		leaf_age = ages[LEAF_GEN(leaf)];
+		if (leaf_age <= tree->maxage && leaf_age > age)
+			age = leaf_age;
+		len -= utf8clen(s);
+		s += utf8clen(s);
+	}
+	return age;
+}
+
+/*
+ * Maximum age of any character in s, touch at most len bytes.
+ * Return -1 if s is not valid UTF-8 unicode.
+ */
+int utf8nagemin(struct tree *tree, const char *s, size_t len)
+{
+	utf8leaf_t	*leaf;
+	int		leaf_age;
+	int		age;
+	unsigned char	hangul[UTF8HANGULLEAF];
+
+	if (!tree)
+		return -1;
+	age = tree->maxage;
+        while (len && *s) {
+		leaf = utf8nlookup(tree, hangul, s, len);
+		if (!leaf)
+			return -1;
+		leaf_age = ages[LEAF_GEN(leaf)];
+		if (leaf_age <= tree->maxage && leaf_age < age)
+			age = leaf_age;
+		len -= utf8clen(s);
+		s += utf8clen(s);
+	}
+	return age;
+}
+
+/*
+ * Length of the normalization of s.
+ * Return -1 if s is not valid UTF-8 unicode.
+ *
+ * A string of Default_Ignorable_Code_Point has length 0.
+ */
+ssize_t utf8len(struct tree *tree, const char *s)
+{
+	utf8leaf_t	*leaf;
+	size_t		ret = 0;
+	unsigned char	hangul[UTF8HANGULLEAF];
+
+	if (!tree)
+		return -1;
+	while (*s) {
+		leaf = utf8lookup(tree, hangul, s);
+		if (!leaf)
+			return -1;
+		if (ages[LEAF_GEN(leaf)] > tree->maxage)
+			ret += utf8clen(s);
+		else if (LEAF_CCC(leaf) == DECOMPOSE)
+			ret += strlen(LEAF_STR(leaf));
+		else
+			ret += utf8clen(s);
+		s += utf8clen(s);
+	}
+	return ret;
+}
+
+/*
+ * Length of the normalization of s, touch at most len bytes.
+ * Return -1 if s is not valid UTF-8 unicode.
+ */
+ssize_t utf8nlen(struct tree *tree, const char *s, size_t len)
+{
+	utf8leaf_t	*leaf;
+	size_t		ret = 0;
+	unsigned char	hangul[UTF8HANGULLEAF];
+
+	if (!tree)
+		return -1;
+	while (len && *s) {
+		leaf = utf8nlookup(tree, hangul, s, len);
+		if (!leaf)
+			return -1;
+		if (ages[LEAF_GEN(leaf)] > tree->maxage)
+			ret += utf8clen(s);
+		else if (LEAF_CCC(leaf) == DECOMPOSE)
+			ret += strlen(LEAF_STR(leaf));
+		else
+			ret += utf8clen(s);
+		len -= utf8clen(s);
+		s += utf8clen(s);
+	}
+	return ret;
+}
+
+/*
+ * Cursor structure used by the normalizer.
+ */
+struct utf8cursor {
+	struct tree	*tree;
+	const char	*s;
+	const char	*p;
+	const char	*ss;
+	const char	*sp;
+	unsigned int	len;
+	unsigned int	slen;
+	short int	ccc;
+	short int	nccc;
+	unsigned int	unichar;
+	unsigned char	hangul[UTF8HANGULLEAF];
+};
+
+/*
+ * Set up an utf8cursor for use by utf8byte().
+ *
+ *   s      : string.
+ *   len    : length of s.
+ *   u8c    : pointer to cursor.
+ *   trie   : utf8trie_t to use for normalization.
+ *
+ * Returns -1 on error, 0 on success.
+ */
+int utf8ncursor(struct utf8cursor *u8c, struct tree *tree, const char *s,
+		size_t len)
+{
+	if (!tree)
+		return -1;
+	if (!s)
+		return -1;
+	u8c->tree = tree;
+	u8c->s = s;
+	u8c->p = NULL;
+	u8c->ss = NULL;
+	u8c->sp = NULL;
+	u8c->len = len;
+	u8c->slen = 0;
+	u8c->ccc = STOPPER;
+	u8c->nccc = STOPPER;
+	u8c->unichar = 0;
+	/* Check we didn't clobber the maximum length. */
+	if (u8c->len != len)
+		return -1;
+	/* The first byte of s may not be an utf8 continuation. */
+	if (len > 0 && (*s & 0xC0) == 0x80)
+		return -1;
+	return 0;
+}
+
+/*
+ * Set up an utf8cursor for use by utf8byte().
+ *
+ *   s      : NUL-terminated string.
+ *   u8c    : pointer to cursor.
+ *   trie   : utf8trie_t to use for normalization.
+ *
+ * Returns -1 on error, 0 on success.
+ */
+int utf8cursor(struct utf8cursor *u8c, struct tree *tree, const char *s)
+{
+	return utf8ncursor(u8c, tree, s, (unsigned int)-1);
+}
+
+/*
+ * Get one byte from the normalized form of the string described by u8c.
+ *
+ * Returns the byte cast to an unsigned char on succes, and -1 on failure.
+ *
+ * The cursor keeps track of the location in the string in u8c->s.
+ * When a character is decomposed, the current location is stored in
+ * u8c->p, and u8c->s is set to the start of the decomposition. Note
+ * that bytes from a decomposition do not count against u8c->len.
+ *
+ * Characters are emitted if they match the current CCC in u8c->ccc.
+ * Hitting end-of-string while u8c->ccc == STOPPER means we're done,
+ * and the function returns 0 in that case.
+ *
+ * Sorting by CCC is done by repeatedly scanning the string.  The
+ * values of u8c->s and u8c->p are stored in u8c->ss and u8c->sp at
+ * the start of the scan.  The first pass finds the lowest CCC to be
+ * emitted and stores it in u8c->nccc, the second pass emits the
+ * characters with this CCC and finds the next lowest CCC. This limits
+ * the number of passes to 1 + the number of different CCCs in the
+ * sequence being scanned.
+ *
+ * Therefore:
+ *  u8c->p  != NULL -> a decomposition is being scanned.
+ *  u8c->ss != NULL -> this is a repeating scan.
+ *  u8c->ccc == -1  -> this is the first scan of a repeating scan.
+ */
+int utf8byte(struct utf8cursor *u8c)
+{
+	utf8leaf_t *leaf;
+	int ccc;
+
+	for (;;) {
+		/* Check for the end of a decomposed character. */
+		if (u8c->p && *u8c->s == '\0') {
+			u8c->s = u8c->p;
+			u8c->p = NULL;
+		}
+
+		/* Check for end-of-string. */
+		if (!u8c->p && (u8c->len == 0 || *u8c->s == '\0')) {
+			/* There is no next byte. */
+			if (u8c->ccc == STOPPER)
+				return 0;
+			/* End-of-string during a scan counts as a stopper. */
+			ccc = STOPPER;
+			goto ccc_mismatch;
+		} else if ((*u8c->s & 0xC0) == 0x80) {
+			/* This is a continuation of the current character. */
+			if (!u8c->p)
+				u8c->len--;
+			return (unsigned char)*u8c->s++;
+		}
+
+		/* Look up the data for the current character. */
+		if (u8c->p) {
+			leaf = utf8lookup(u8c->tree, u8c->hangul, u8c->s);
+		} else {
+			leaf = utf8nlookup(u8c->tree, u8c->hangul,
+					   u8c->s, u8c->len);
+		}
+
+		/* No leaf found implies that the input is a binary blob. */
+		if (!leaf)
+			return -1;
+
+		/* Characters that are too new have CCC 0. */
+		if (ages[LEAF_GEN(leaf)] > u8c->tree->maxage) {
+			ccc = STOPPER;
+		} else if ((ccc = LEAF_CCC(leaf)) == DECOMPOSE) {
+			u8c->len -= utf8clen(u8c->s);
+			u8c->p = u8c->s + utf8clen(u8c->s);
+			u8c->s = LEAF_STR(leaf);
+			/* Empty decomposition implies CCC 0. */
+			if (*u8c->s == '\0') {
+				if (u8c->ccc == STOPPER)
+					continue;
+				ccc = STOPPER;
+				goto ccc_mismatch;
+			}
+			leaf = utf8lookup(u8c->tree, u8c->hangul, u8c->s);
+			ccc = LEAF_CCC(leaf);
+		}
+		u8c->unichar = utf8decode(u8c->s);
+
+		/*
+		 * If this is not a stopper, then see if it updates
+		 * the next canonical class to be emitted.
+		 */
+		if (ccc != STOPPER && u8c->ccc < ccc && ccc < u8c->nccc)
+			u8c->nccc = ccc;
+
+		/*
+		 * Return the current byte if this is the current
+		 * combining class.
+		 */
+		if (ccc == u8c->ccc) {
+			if (!u8c->p)
+				u8c->len--;
+			return (unsigned char)*u8c->s++;
+		}
+
+		/* Current combining class mismatch. */
+	ccc_mismatch:
+		if (u8c->nccc == STOPPER) {
+			/*
+			 * Scan forward for the first canonical class
+			 * to be emitted.  Save the position from
+			 * which to restart.
+			 */
+			assert(u8c->ccc == STOPPER);
+			u8c->ccc = MINCCC - 1;
+			u8c->nccc = ccc;
+			u8c->sp = u8c->p;
+			u8c->ss = u8c->s;
+			u8c->slen = u8c->len;
+			if (!u8c->p)
+				u8c->len -= utf8clen(u8c->s);
+			u8c->s += utf8clen(u8c->s);
+		} else if (ccc != STOPPER) {
+			/* Not a stopper, and not the ccc we're emitting. */
+			if (!u8c->p)
+				u8c->len -= utf8clen(u8c->s);
+			u8c->s += utf8clen(u8c->s);
+		} else if (u8c->nccc != MAXCCC + 1) {
+			/* At a stopper, restart for next ccc. */
+			u8c->ccc = u8c->nccc;
+			u8c->nccc = MAXCCC + 1;
+			u8c->s = u8c->ss;
+			u8c->p = u8c->sp;
+			u8c->len = u8c->slen;
+		} else {
+			/* All done, proceed from here. */
+			u8c->ccc = STOPPER;
+			u8c->nccc = STOPPER;
+			u8c->sp = NULL;
+			u8c->ss = NULL;
+			u8c->slen = 0;
+		}
+	}
+}
+
+/* ------------------------------------------------------------------ */
+
+static int normalize_line(struct tree *tree)
+{
+	char *s;
+	char *t;
+	int c;
+	struct utf8cursor u8c;
+
+	/* First test: null-terminated string. */
+	s = buf2;
+	t = buf3;
+	if (utf8cursor(&u8c, tree, s))
+		return -1;
+	while ((c = utf8byte(&u8c)) > 0)
+		if (c != (unsigned char)*t++)
+			return -1;
+	if (c < 0)
+		return -1;
+	if (*t != 0)
+		return -1;
+
+	/* Second test: length-limited string. */
+	s = buf2;
+	/* Replace NUL with a value that will cause an error if seen. */
+	s[strlen(s) + 1] = -1;
+	t = buf3;
+	if (utf8cursor(&u8c, tree, s))
+		return -1;
+	while ((c = utf8byte(&u8c)) > 0)
+		if (c != (unsigned char)*t++)
+			return -1;
+	if (c < 0)
+		return -1;
+	if (*t != 0)
+		return -1;
+
+	return 0;
+}
+
+static void normalization_test(void)
+{
+	FILE *file;
+	unsigned int unichar;
+	struct unicode_data *data;
+	char *s;
+	char *t;
+	int ret;
+	int ignorables;
+	int tests = 0;
+	int failures = 0;
+
+	if (verbose > 0)
+		printf("Parsing %s\n", test_name);
+	/* Step one, read data from file. */
+	file = fopen(test_name, "r");
+	if (!file)
+		open_fail(test_name, errno);
+
+	while (fgets(line, LINESIZE, file)) {
+		ret = sscanf(line, "%[^;];%*[^;];%[^;];%*[^;];%*[^;];",
+			     buf0, buf1);
+		if (ret != 2 || *line == '#')
+			continue;
+		s = buf0;
+		t = buf2;
+		while (*s) {
+			unichar = strtoul(s, &s, 16);
+			t += utf8encode(t, unichar);
+		}
+		*t = '\0';
+
+		ignorables = 0;
+		s = buf1;
+		t = buf3;
+		while (*s) {
+			unichar = strtoul(s, &s, 16);
+			data = &unicode_data[unichar];
+			if (data->utf8nfdi && !*data->utf8nfdi)
+				ignorables = 1;
+			else
+				t += utf8encode(t, unichar);
+		}
+		*t = '\0';
+
+		tests++;
+		if (normalize_line(nfdi_tree) < 0) {
+			printf("Line %s -> %s", buf0, buf1);
+			if (ignorables)
+				printf(" (ignorables removed)");
+			printf(" failure\n");
+			failures++;
+		}
+	}
+	fclose(file);
+	if (verbose > 0)
+		printf("Ran %d tests with %d failures\n", tests, failures);
+	if (failures)
+		file_fail(test_name);
+}
+
+/* ------------------------------------------------------------------ */
+
+static void write_file(void)
+{
+	FILE *file;
+	int i;
+	int j;
+	int t;
+	int gen;
+
+	if (verbose > 0)
+		printf("Writing %s\n", utf8_name);
+	file = fopen(utf8_name, "w");
+	if (!file)
+		open_fail(utf8_name, errno);
+
+	fprintf(file, "/* This file is generated code, do not edit. */\n");
+	fprintf(file, "#ifndef __INCLUDED_FROM_UTF8NORM_C__\n");
+	fprintf(file, "#error Only nls_utf8-norm.c should include this file.\n");
+	fprintf(file, "#endif\n");
+	fprintf(file, "\n");
+	fprintf(file, "static const unsigned int utf8vers = %#x;\n",
+		unicode_maxage);
+	fprintf(file, "\n");
+	fprintf(file, "static const unsigned int utf8agetab[] = {\n");
+	for (i = 0; i != ages_count; i++)
+		fprintf(file, "\t%#x%s\n", ages[i],
+			ages[i] == unicode_maxage ? "" : ",");
+	fprintf(file, "};\n");
+	fprintf(file, "\n");
+	fprintf(file, "static const struct utf8data utf8nfdicfdata[] = {\n");
+	t = 0;
+	for (gen = 0; gen < ages_count; gen++) {
+		fprintf(file, "\t{ %#x, %d }%s\n",
+			ages[gen], trees[t].index,
+			ages[gen] == unicode_maxage ? "" : ",");
+		if (trees[t].maxage == ages[gen])
+			t += 2;
+	}
+	fprintf(file, "};\n");
+	fprintf(file, "\n");
+	fprintf(file, "static const struct utf8data utf8nfdidata[] = {\n");
+	t = 1;
+	for (gen = 0; gen < ages_count; gen++) {
+		fprintf(file, "\t{ %#x, %d }%s\n",
+			ages[gen], trees[t].index,
+			ages[gen] == unicode_maxage ? "" : ",");
+		if (trees[t].maxage == ages[gen])
+			t += 2;
+	}
+	fprintf(file, "};\n");
+	fprintf(file, "\n");
+	fprintf(file, "static const unsigned char utf8data[%zd] = {\n",
+		utf8data_size);
+	t = 0;
+	for (i = 0; i != utf8data_size; i += 16) {
+		if (i == trees[t].index) {
+			fprintf(file, "\t/* %s_%x */\n",
+				trees[t].type, trees[t].maxage);
+			if (t < trees_count-1)
+				t++;
+		}
+		fprintf(file, "\t");
+		for (j = i; j != i + 16; j++)
+			fprintf(file, "0x%.2x%s", utf8data[j],
+				(j < utf8data_size -1 ? "," : ""));
+		fprintf(file, "\n");
+	}
+	fprintf(file, "};\n");
+	fclose(file);
+}
+
+/* ------------------------------------------------------------------ */
+
+int main(int argc, char *argv[])
+{
+	unsigned int unichar;
+	int opt;
+
+	argv0 = argv[0];
+
+	while ((opt = getopt(argc, argv, "a:c:d:f:hn:o:p:t:v")) != -1) {
+		switch (opt) {
+		case 'a':
+			age_name = optarg;
+			break;
+		case 'c':
+			ccc_name = optarg;
+			break;
+		case 'd':
+			data_name = optarg;
+			break;
+		case 'f':
+			fold_name = optarg;
+			break;
+		case 'n':
+			norm_name = optarg;
+			break;
+		case 'o':
+			utf8_name = optarg;
+			break;
+		case 'p':
+			prop_name = optarg;
+			break;
+		case 't':
+			test_name = optarg;
+			break;
+		case 'v':
+			verbose++;
+			break;
+		case 'h':
+			help();
+			exit(0);
+		default:
+			usage();
+		}
+	}
+
+	if (verbose > 1)
+		help();
+	for (unichar = 0; unichar != 0x110000; unichar++)
+		unicode_data[unichar].code = unichar;
+	age_init();
+	ccc_init();
+	nfdi_init();
+	nfdicf_init();
+	ignore_init();
+	corrections_init();
+	hangul_decompose();
+	nfdi_decompose();
+	nfdicf_decompose();
+	utf8_init();
+	trees_init();
+	trees_populate();
+	trees_reduce();
+	trees_verify();
+	/* Prevent "unused function" warning. */
+	(void)lookup(nfdi_tree, " ");
+	if (verbose > 2)
+		tree_walk(nfdi_tree);
+	if (verbose > 2)
+		tree_walk(nfdicf_tree);
+	normalization_test();
+	write_file();
+
+	return 0;
+}
diff --git a/fs/unicode/utf8-core.c b/fs/unicode/utf8-core.c
new file mode 100644
index 0000000..71ca4d0
--- /dev/null
+++ b/fs/unicode/utf8-core.c
@@ -0,0 +1,215 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/string.h>
+#include <linux/slab.h>
+#include <linux/parser.h>
+#include <linux/errno.h>
+#include <linux/unicode.h>
+
+#include "utf8n.h"
+
+int utf8_validate(const struct unicode_map *um, const struct qstr *str)
+{
+	const struct utf8data *data = utf8nfdi(um->version);
+
+	if (utf8nlen(data, str->name, str->len) < 0)
+		return -1;
+	return 0;
+}
+EXPORT_SYMBOL(utf8_validate);
+
+int utf8_strncmp(const struct unicode_map *um,
+		 const struct qstr *s1, const struct qstr *s2)
+{
+	const struct utf8data *data = utf8nfdi(um->version);
+	struct utf8cursor cur1, cur2;
+	int c1, c2;
+
+	if (utf8ncursor(&cur1, data, s1->name, s1->len) < 0)
+		return -EINVAL;
+
+	if (utf8ncursor(&cur2, data, s2->name, s2->len) < 0)
+		return -EINVAL;
+
+	do {
+		c1 = utf8byte(&cur1);
+		c2 = utf8byte(&cur2);
+
+		if (c1 < 0 || c2 < 0)
+			return -EINVAL;
+		if (c1 != c2)
+			return 1;
+	} while (c1);
+
+	return 0;
+}
+EXPORT_SYMBOL(utf8_strncmp);
+
+int utf8_strncasecmp(const struct unicode_map *um,
+		     const struct qstr *s1, const struct qstr *s2)
+{
+	const struct utf8data *data = utf8nfdicf(um->version);
+	struct utf8cursor cur1, cur2;
+	int c1, c2;
+
+	if (utf8ncursor(&cur1, data, s1->name, s1->len) < 0)
+		return -EINVAL;
+
+	if (utf8ncursor(&cur2, data, s2->name, s2->len) < 0)
+		return -EINVAL;
+
+	do {
+		c1 = utf8byte(&cur1);
+		c2 = utf8byte(&cur2);
+
+		if (c1 < 0 || c2 < 0)
+			return -EINVAL;
+		if (c1 != c2)
+			return 1;
+	} while (c1);
+
+	return 0;
+}
+EXPORT_SYMBOL(utf8_strncasecmp);
+
+/* String cf is expected to be a valid UTF-8 casefolded
+ * string.
+ */
+int utf8_strncasecmp_folded(const struct unicode_map *um,
+			    const struct qstr *cf,
+			    const struct qstr *s1)
+{
+	const struct utf8data *data = utf8nfdicf(um->version);
+	struct utf8cursor cur1;
+	int c1, c2;
+	int i = 0;
+
+	if (utf8ncursor(&cur1, data, s1->name, s1->len) < 0)
+		return -EINVAL;
+
+	do {
+		c1 = utf8byte(&cur1);
+		c2 = cf->name[i++];
+		if (c1 < 0)
+			return -EINVAL;
+		if (c1 != c2)
+			return 1;
+	} while (c1);
+
+	return 0;
+}
+EXPORT_SYMBOL(utf8_strncasecmp_folded);
+
+int utf8_casefold(const struct unicode_map *um, const struct qstr *str,
+		  unsigned char *dest, size_t dlen)
+{
+	const struct utf8data *data = utf8nfdicf(um->version);
+	struct utf8cursor cur;
+	size_t nlen = 0;
+
+	if (utf8ncursor(&cur, data, str->name, str->len) < 0)
+		return -EINVAL;
+
+	for (nlen = 0; nlen < dlen; nlen++) {
+		int c = utf8byte(&cur);
+
+		dest[nlen] = c;
+		if (!c)
+			return nlen;
+		if (c == -1)
+			break;
+	}
+	return -EINVAL;
+}
+
+EXPORT_SYMBOL(utf8_casefold);
+
+int utf8_normalize(const struct unicode_map *um, const struct qstr *str,
+		   unsigned char *dest, size_t dlen)
+{
+	const struct utf8data *data = utf8nfdi(um->version);
+	struct utf8cursor cur;
+	ssize_t nlen = 0;
+
+	if (utf8ncursor(&cur, data, str->name, str->len) < 0)
+		return -EINVAL;
+
+	for (nlen = 0; nlen < dlen; nlen++) {
+		int c = utf8byte(&cur);
+
+		dest[nlen] = c;
+		if (!c)
+			return nlen;
+		if (c == -1)
+			break;
+	}
+	return -EINVAL;
+}
+
+EXPORT_SYMBOL(utf8_normalize);
+
+static int utf8_parse_version(const char *version, unsigned int *maj,
+			      unsigned int *min, unsigned int *rev)
+{
+	substring_t args[3];
+	char version_string[12];
+	const struct match_token token[] = {
+		{1, "%d.%d.%d"},
+		{0, NULL}
+	};
+
+	strncpy(version_string, version, sizeof(version_string));
+
+	if (match_token(version_string, token, args) != 1)
+		return -EINVAL;
+
+	if (match_int(&args[0], maj) || match_int(&args[1], min) ||
+	    match_int(&args[2], rev))
+		return -EINVAL;
+
+	return 0;
+}
+
+struct unicode_map *utf8_load(const char *version)
+{
+	struct unicode_map *um = NULL;
+	int unicode_version;
+
+	if (version) {
+		unsigned int maj, min, rev;
+
+		if (utf8_parse_version(version, &maj, &min, &rev) < 0)
+			return ERR_PTR(-EINVAL);
+
+		if (!utf8version_is_supported(maj, min, rev))
+			return ERR_PTR(-EINVAL);
+
+		unicode_version = UNICODE_AGE(maj, min, rev);
+	} else {
+		unicode_version = utf8version_latest();
+		printk(KERN_WARNING"UTF-8 version not specified. "
+		       "Assuming latest supported version (%d.%d.%d).",
+		       (unicode_version >> 16) & 0xff,
+		       (unicode_version >> 8) & 0xff,
+		       (unicode_version & 0xff));
+	}
+
+	um = kzalloc(sizeof(struct unicode_map), GFP_KERNEL);
+	if (!um)
+		return ERR_PTR(-ENOMEM);
+
+	um->charset = "UTF-8";
+	um->version = unicode_version;
+
+	return um;
+}
+EXPORT_SYMBOL(utf8_load);
+
+void utf8_unload(struct unicode_map *um)
+{
+	kfree(um);
+}
+EXPORT_SYMBOL(utf8_unload);
+
+MODULE_LICENSE("GPL v2");
diff --git a/fs/unicode/utf8-norm.c b/fs/unicode/utf8-norm.c
new file mode 100644
index 0000000..801ed6d
--- /dev/null
+++ b/fs/unicode/utf8-norm.c
@@ -0,0 +1,801 @@
+/*
+ * Copyright (c) 2014 SGI.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it would be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#include "utf8n.h"
+
+struct utf8data {
+	unsigned int maxage;
+	unsigned int offset;
+};
+
+#define __INCLUDED_FROM_UTF8NORM_C__
+#include "utf8data.h"
+#undef __INCLUDED_FROM_UTF8NORM_C__
+
+int utf8version_is_supported(u8 maj, u8 min, u8 rev)
+{
+	int i = ARRAY_SIZE(utf8agetab) - 1;
+	unsigned int sb_utf8version = UNICODE_AGE(maj, min, rev);
+
+	while (i >= 0 && utf8agetab[i] != 0) {
+		if (sb_utf8version == utf8agetab[i])
+			return 1;
+		i--;
+	}
+	return 0;
+}
+EXPORT_SYMBOL(utf8version_is_supported);
+
+int utf8version_latest(void)
+{
+	return utf8vers;
+}
+EXPORT_SYMBOL(utf8version_latest);
+
+/*
+ * UTF-8 valid ranges.
+ *
+ * The UTF-8 encoding spreads the bits of a 32bit word over several
+ * bytes. This table gives the ranges that can be held and how they'd
+ * be represented.
+ *
+ * 0x00000000 0x0000007F: 0xxxxxxx
+ * 0x00000000 0x000007FF: 110xxxxx 10xxxxxx
+ * 0x00000000 0x0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
+ * 0x00000000 0x001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
+ * 0x00000000 0x03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+ * 0x00000000 0x7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+ *
+ * There is an additional requirement on UTF-8, in that only the
+ * shortest representation of a 32bit value is to be used.  A decoder
+ * must not decode sequences that do not satisfy this requirement.
+ * Thus the allowed ranges have a lower bound.
+ *
+ * 0x00000000 0x0000007F: 0xxxxxxx
+ * 0x00000080 0x000007FF: 110xxxxx 10xxxxxx
+ * 0x00000800 0x0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
+ * 0x00010000 0x001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
+ * 0x00200000 0x03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+ * 0x04000000 0x7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+ *
+ * Actual unicode characters are limited to the range 0x0 - 0x10FFFF,
+ * 17 planes of 65536 values.  This limits the sequences actually seen
+ * even more, to just the following.
+ *
+ *          0 -     0x7F: 0                   - 0x7F
+ *       0x80 -    0x7FF: 0xC2 0x80           - 0xDF 0xBF
+ *      0x800 -   0xFFFF: 0xE0 0xA0 0x80      - 0xEF 0xBF 0xBF
+ *    0x10000 - 0x10FFFF: 0xF0 0x90 0x80 0x80 - 0xF4 0x8F 0xBF 0xBF
+ *
+ * Within those ranges the surrogates 0xD800 - 0xDFFF are not allowed.
+ *
+ * Note that the longest sequence seen with valid usage is 4 bytes,
+ * the same a single UTF-32 character.  This makes the UTF-8
+ * representation of Unicode strictly smaller than UTF-32.
+ *
+ * The shortest sequence requirement was introduced by:
+ *    Corrigendum #1: UTF-8 Shortest Form
+ * It can be found here:
+ *    http://www.unicode.org/versions/corrigendum1.html
+ *
+ */
+
+/*
+ * Return the number of bytes used by the current UTF-8 sequence.
+ * Assumes the input points to the first byte of a valid UTF-8
+ * sequence.
+ */
+static inline int utf8clen(const char *s)
+{
+	unsigned char c = *s;
+
+	return 1 + (c >= 0xC0) + (c >= 0xE0) + (c >= 0xF0);
+}
+
+/*
+ * Decode a 3-byte UTF-8 sequence.
+ */
+static unsigned int
+utf8decode3(const char *str)
+{
+	unsigned int		uc;
+
+	uc = *str++ & 0x0F;
+	uc <<= 6;
+	uc |= *str++ & 0x3F;
+	uc <<= 6;
+	uc |= *str++ & 0x3F;
+
+	return uc;
+}
+
+/*
+ * Encode a 3-byte UTF-8 sequence.
+ */
+static int
+utf8encode3(char *str, unsigned int val)
+{
+	str[2] = (val & 0x3F) | 0x80;
+	val >>= 6;
+	str[1] = (val & 0x3F) | 0x80;
+	val >>= 6;
+	str[0] = val | 0xE0;
+
+	return 3;
+}
+
+/*
+ * utf8trie_t
+ *
+ * A compact binary tree, used to decode UTF-8 characters.
+ *
+ * Internal nodes are one byte for the node itself, and up to three
+ * bytes for an offset into the tree.  The first byte contains the
+ * following information:
+ *  NEXTBYTE  - flag        - advance to next byte if set
+ *  BITNUM    - 3 bit field - the bit number to tested
+ *  OFFLEN    - 2 bit field - number of bytes in the offset
+ * if offlen == 0 (non-branching node)
+ *  RIGHTPATH - 1 bit field - set if the following node is for the
+ *                            right-hand path (tested bit is set)
+ *  TRIENODE  - 1 bit field - set if the following node is an internal
+ *                            node, otherwise it is a leaf node
+ * if offlen != 0 (branching node)
+ *  LEFTNODE  - 1 bit field - set if the left-hand node is internal
+ *  RIGHTNODE - 1 bit field - set if the right-hand node is internal
+ *
+ * Due to the way utf8 works, there cannot be branching nodes with
+ * NEXTBYTE set, and moreover those nodes always have a righthand
+ * descendant.
+ */
+typedef const unsigned char utf8trie_t;
+#define BITNUM		0x07
+#define NEXTBYTE	0x08
+#define OFFLEN		0x30
+#define OFFLEN_SHIFT	4
+#define RIGHTPATH	0x40
+#define TRIENODE	0x80
+#define RIGHTNODE	0x40
+#define LEFTNODE	0x80
+
+/*
+ * utf8leaf_t
+ *
+ * The leaves of the trie are embedded in the trie, and so the same
+ * underlying datatype: unsigned char.
+ *
+ * leaf[0]: The unicode version, stored as a generation number that is
+ *          an index into utf8agetab[].  With this we can filter code
+ *          points based on the unicode version in which they were
+ *          defined.  The CCC of a non-defined code point is 0.
+ * leaf[1]: Canonical Combining Class. During normalization, we need
+ *          to do a stable sort into ascending order of all characters
+ *          with a non-zero CCC that occur between two characters with
+ *          a CCC of 0, or at the begin or end of a string.
+ *          The unicode standard guarantees that all CCC values are
+ *          between 0 and 254 inclusive, which leaves 255 available as
+ *          a special value.
+ *          Code points with CCC 0 are known as stoppers.
+ * leaf[2]: Decomposition. If leaf[1] == 255, then leaf[2] is the
+ *          start of a NUL-terminated string that is the decomposition
+ *          of the character.
+ *          The CCC of a decomposable character is the same as the CCC
+ *          of the first character of its decomposition.
+ *          Some characters decompose as the empty string: these are
+ *          characters with the Default_Ignorable_Code_Point property.
+ *          These do affect normalization, as they all have CCC 0.
+ *
+ * The decompositions in the trie have been fully expanded, with the
+ * exception of Hangul syllables, which are decomposed algorithmically.
+ *
+ * Casefolding, if applicable, is also done using decompositions.
+ *
+ * The trie is constructed in such a way that leaves exist for all
+ * UTF-8 sequences that match the criteria from the "UTF-8 valid
+ * ranges" comment above, and only for those sequences.  Therefore a
+ * lookup in the trie can be used to validate the UTF-8 input.
+ */
+typedef const unsigned char utf8leaf_t;
+
+#define LEAF_GEN(LEAF)	((LEAF)[0])
+#define LEAF_CCC(LEAF)	((LEAF)[1])
+#define LEAF_STR(LEAF)	((const char *)((LEAF) + 2))
+
+#define MINCCC		(0)
+#define MAXCCC		(254)
+#define STOPPER		(0)
+#define	DECOMPOSE	(255)
+
+/* Marker for hangul syllable decomposition. */
+#define HANGUL		((char)(255))
+/* Size of the synthesized leaf used for Hangul syllable decomposition. */
+#define UTF8HANGULLEAF	(12)
+
+/*
+ * Hangul decomposition (algorithm from Section 3.12 of Unicode 6.3.0)
+ *
+ * AC00;<Hangul Syllable, First>;Lo;0;L;;;;;N;;;;;
+ * D7A3;<Hangul Syllable, Last>;Lo;0;L;;;;;N;;;;;
+ *
+ * SBase = 0xAC00
+ * LBase = 0x1100
+ * VBase = 0x1161
+ * TBase = 0x11A7
+ * LCount = 19
+ * VCount = 21
+ * TCount = 28
+ * NCount = 588 (VCount * TCount)
+ * SCount = 11172 (LCount * NCount)
+ *
+ * Decomposition:
+ *   SIndex = s - SBase
+ *
+ * LV (Canonical/Full)
+ *   LIndex = SIndex / NCount
+ *   VIndex = (Sindex % NCount) / TCount
+ *   LPart = LBase + LIndex
+ *   VPart = VBase + VIndex
+ *
+ * LVT (Canonical)
+ *   LVIndex = (SIndex / TCount) * TCount
+ *   TIndex = (Sindex % TCount)
+ *   LVPart = SBase + LVIndex
+ *   TPart = TBase + TIndex
+ *
+ * LVT (Full)
+ *   LIndex = SIndex / NCount
+ *   VIndex = (Sindex % NCount) / TCount
+ *   TIndex = (Sindex % TCount)
+ *   LPart = LBase + LIndex
+ *   VPart = VBase + VIndex
+ *   if (TIndex == 0) {
+ *          d = <LPart, VPart>
+ *   } else {
+ *          TPart = TBase + TIndex
+ *          d = <LPart, TPart, VPart>
+ *   }
+ */
+
+/* Constants */
+#define SB	(0xAC00)
+#define LB	(0x1100)
+#define VB	(0x1161)
+#define TB	(0x11A7)
+#define LC	(19)
+#define VC	(21)
+#define TC	(28)
+#define NC	(VC * TC)
+#define SC	(LC * NC)
+
+/* Algorithmic decomposition of hangul syllable. */
+static utf8leaf_t *
+utf8hangul(const char *str, unsigned char *hangul)
+{
+	unsigned int	si;
+	unsigned int	li;
+	unsigned int	vi;
+	unsigned int	ti;
+	unsigned char	*h;
+
+	/* Calculate the SI, LI, VI, and TI values. */
+	si = utf8decode3(str) - SB;
+	li = si / NC;
+	vi = (si % NC) / TC;
+	ti = si % TC;
+
+	/* Fill in base of leaf. */
+	h = hangul;
+	LEAF_GEN(h) = 2;
+	LEAF_CCC(h) = DECOMPOSE;
+	h += 2;
+
+	/* Add LPart, a 3-byte UTF-8 sequence. */
+	h += utf8encode3((char *)h, li + LB);
+
+	/* Add VPart, a 3-byte UTF-8 sequence. */
+	h += utf8encode3((char *)h, vi + VB);
+
+	/* Add TPart if required, also a 3-byte UTF-8 sequence. */
+	if (ti)
+		h += utf8encode3((char *)h, ti + TB);
+
+	/* Terminate string. */
+	h[0] = '\0';
+
+	return hangul;
+}
+
+/*
+ * Use trie to scan s, touching at most len bytes.
+ * Returns the leaf if one exists, NULL otherwise.
+ *
+ * A non-NULL return guarantees that the UTF-8 sequence starting at s
+ * is well-formed and corresponds to a known unicode code point.  The
+ * shorthand for this will be "is valid UTF-8 unicode".
+ */
+static utf8leaf_t *utf8nlookup(const struct utf8data *data,
+			       unsigned char *hangul, const char *s, size_t len)
+{
+	utf8trie_t	*trie = NULL;
+	int		offlen;
+	int		offset;
+	int		mask;
+	int		node;
+
+	if (!data)
+		return NULL;
+	if (len == 0)
+		return NULL;
+
+	trie = utf8data + data->offset;
+	node = 1;
+	while (node) {
+		offlen = (*trie & OFFLEN) >> OFFLEN_SHIFT;
+		if (*trie & NEXTBYTE) {
+			if (--len == 0)
+				return NULL;
+			s++;
+		}
+		mask = 1 << (*trie & BITNUM);
+		if (*s & mask) {
+			/* Right leg */
+			if (offlen) {
+				/* Right node at offset of trie */
+				node = (*trie & RIGHTNODE);
+				offset = trie[offlen];
+				while (--offlen) {
+					offset <<= 8;
+					offset |= trie[offlen];
+				}
+				trie += offset;
+			} else if (*trie & RIGHTPATH) {
+				/* Right node after this node */
+				node = (*trie & TRIENODE);
+				trie++;
+			} else {
+				/* No right node. */
+				return NULL;
+			}
+		} else {
+			/* Left leg */
+			if (offlen) {
+				/* Left node after this node. */
+				node = (*trie & LEFTNODE);
+				trie += offlen + 1;
+			} else if (*trie & RIGHTPATH) {
+				/* No left node. */
+				return NULL;
+			} else {
+				/* Left node after this node */
+				node = (*trie & TRIENODE);
+				trie++;
+			}
+		}
+	}
+	/*
+	 * Hangul decomposition is done algorithmically. These are the
+	 * codepoints >= 0xAC00 and <= 0xD7A3. Their UTF-8 encoding is
+	 * always 3 bytes long, so s has been advanced twice, and the
+	 * start of the sequence is at s-2.
+	 */
+	if (LEAF_CCC(trie) == DECOMPOSE && LEAF_STR(trie)[0] == HANGUL)
+		trie = utf8hangul(s - 2, hangul);
+	return trie;
+}
+
+/*
+ * Use trie to scan s.
+ * Returns the leaf if one exists, NULL otherwise.
+ *
+ * Forwards to utf8nlookup().
+ */
+static utf8leaf_t *utf8lookup(const struct utf8data *data,
+			      unsigned char *hangul, const char *s)
+{
+	return utf8nlookup(data, hangul, s, (size_t)-1);
+}
+
+/*
+ * Maximum age of any character in s.
+ * Return -1 if s is not valid UTF-8 unicode.
+ * Return 0 if only non-assigned code points are used.
+ */
+int utf8agemax(const struct utf8data *data, const char *s)
+{
+	utf8leaf_t	*leaf;
+	int		age = 0;
+	int		leaf_age;
+	unsigned char	hangul[UTF8HANGULLEAF];
+
+	if (!data)
+		return -1;
+
+	while (*s) {
+		leaf = utf8lookup(data, hangul, s);
+		if (!leaf)
+			return -1;
+
+		leaf_age = utf8agetab[LEAF_GEN(leaf)];
+		if (leaf_age <= data->maxage && leaf_age > age)
+			age = leaf_age;
+		s += utf8clen(s);
+	}
+	return age;
+}
+EXPORT_SYMBOL(utf8agemax);
+
+/*
+ * Minimum age of any character in s.
+ * Return -1 if s is not valid UTF-8 unicode.
+ * Return 0 if non-assigned code points are used.
+ */
+int utf8agemin(const struct utf8data *data, const char *s)
+{
+	utf8leaf_t	*leaf;
+	int		age;
+	int		leaf_age;
+	unsigned char	hangul[UTF8HANGULLEAF];
+
+	if (!data)
+		return -1;
+	age = data->maxage;
+	while (*s) {
+		leaf = utf8lookup(data, hangul, s);
+		if (!leaf)
+			return -1;
+		leaf_age = utf8agetab[LEAF_GEN(leaf)];
+		if (leaf_age <= data->maxage && leaf_age < age)
+			age = leaf_age;
+		s += utf8clen(s);
+	}
+	return age;
+}
+EXPORT_SYMBOL(utf8agemin);
+
+/*
+ * Maximum age of any character in s, touch at most len bytes.
+ * Return -1 if s is not valid UTF-8 unicode.
+ */
+int utf8nagemax(const struct utf8data *data, const char *s, size_t len)
+{
+	utf8leaf_t	*leaf;
+	int		age = 0;
+	int		leaf_age;
+	unsigned char	hangul[UTF8HANGULLEAF];
+
+	if (!data)
+		return -1;
+
+	while (len && *s) {
+		leaf = utf8nlookup(data, hangul, s, len);
+		if (!leaf)
+			return -1;
+		leaf_age = utf8agetab[LEAF_GEN(leaf)];
+		if (leaf_age <= data->maxage && leaf_age > age)
+			age = leaf_age;
+		len -= utf8clen(s);
+		s += utf8clen(s);
+	}
+	return age;
+}
+EXPORT_SYMBOL(utf8nagemax);
+
+/*
+ * Maximum age of any character in s, touch at most len bytes.
+ * Return -1 if s is not valid UTF-8 unicode.
+ */
+int utf8nagemin(const struct utf8data *data, const char *s, size_t len)
+{
+	utf8leaf_t	*leaf;
+	int		leaf_age;
+	int		age;
+	unsigned char	hangul[UTF8HANGULLEAF];
+
+	if (!data)
+		return -1;
+	age = data->maxage;
+	while (len && *s) {
+		leaf = utf8nlookup(data, hangul, s, len);
+		if (!leaf)
+			return -1;
+		leaf_age = utf8agetab[LEAF_GEN(leaf)];
+		if (leaf_age <= data->maxage && leaf_age < age)
+			age = leaf_age;
+		len -= utf8clen(s);
+		s += utf8clen(s);
+	}
+	return age;
+}
+EXPORT_SYMBOL(utf8nagemin);
+
+/*
+ * Length of the normalization of s.
+ * Return -1 if s is not valid UTF-8 unicode.
+ *
+ * A string of Default_Ignorable_Code_Point has length 0.
+ */
+ssize_t utf8len(const struct utf8data *data, const char *s)
+{
+	utf8leaf_t	*leaf;
+	size_t		ret = 0;
+	unsigned char	hangul[UTF8HANGULLEAF];
+
+	if (!data)
+		return -1;
+	while (*s) {
+		leaf = utf8lookup(data, hangul, s);
+		if (!leaf)
+			return -1;
+		if (utf8agetab[LEAF_GEN(leaf)] > data->maxage)
+			ret += utf8clen(s);
+		else if (LEAF_CCC(leaf) == DECOMPOSE)
+			ret += strlen(LEAF_STR(leaf));
+		else
+			ret += utf8clen(s);
+		s += utf8clen(s);
+	}
+	return ret;
+}
+EXPORT_SYMBOL(utf8len);
+
+/*
+ * Length of the normalization of s, touch at most len bytes.
+ * Return -1 if s is not valid UTF-8 unicode.
+ */
+ssize_t utf8nlen(const struct utf8data *data, const char *s, size_t len)
+{
+	utf8leaf_t	*leaf;
+	size_t		ret = 0;
+	unsigned char	hangul[UTF8HANGULLEAF];
+
+	if (!data)
+		return -1;
+	while (len && *s) {
+		leaf = utf8nlookup(data, hangul, s, len);
+		if (!leaf)
+			return -1;
+		if (utf8agetab[LEAF_GEN(leaf)] > data->maxage)
+			ret += utf8clen(s);
+		else if (LEAF_CCC(leaf) == DECOMPOSE)
+			ret += strlen(LEAF_STR(leaf));
+		else
+			ret += utf8clen(s);
+		len -= utf8clen(s);
+		s += utf8clen(s);
+	}
+	return ret;
+}
+EXPORT_SYMBOL(utf8nlen);
+
+/*
+ * Set up an utf8cursor for use by utf8byte().
+ *
+ *   u8c    : pointer to cursor.
+ *   data   : const struct utf8data to use for normalization.
+ *   s      : string.
+ *   len    : length of s.
+ *
+ * Returns -1 on error, 0 on success.
+ */
+int utf8ncursor(struct utf8cursor *u8c, const struct utf8data *data,
+		const char *s, size_t len)
+{
+	if (!data)
+		return -1;
+	if (!s)
+		return -1;
+	u8c->data = data;
+	u8c->s = s;
+	u8c->p = NULL;
+	u8c->ss = NULL;
+	u8c->sp = NULL;
+	u8c->len = len;
+	u8c->slen = 0;
+	u8c->ccc = STOPPER;
+	u8c->nccc = STOPPER;
+	/* Check we didn't clobber the maximum length. */
+	if (u8c->len != len)
+		return -1;
+	/* The first byte of s may not be an utf8 continuation. */
+	if (len > 0 && (*s & 0xC0) == 0x80)
+		return -1;
+	return 0;
+}
+EXPORT_SYMBOL(utf8ncursor);
+
+/*
+ * Set up an utf8cursor for use by utf8byte().
+ *
+ *   u8c    : pointer to cursor.
+ *   data   : const struct utf8data to use for normalization.
+ *   s      : NUL-terminated string.
+ *
+ * Returns -1 on error, 0 on success.
+ */
+int utf8cursor(struct utf8cursor *u8c, const struct utf8data *data,
+	       const char *s)
+{
+	return utf8ncursor(u8c, data, s, (unsigned int)-1);
+}
+EXPORT_SYMBOL(utf8cursor);
+
+/*
+ * Get one byte from the normalized form of the string described by u8c.
+ *
+ * Returns the byte cast to an unsigned char on succes, and -1 on failure.
+ *
+ * The cursor keeps track of the location in the string in u8c->s.
+ * When a character is decomposed, the current location is stored in
+ * u8c->p, and u8c->s is set to the start of the decomposition. Note
+ * that bytes from a decomposition do not count against u8c->len.
+ *
+ * Characters are emitted if they match the current CCC in u8c->ccc.
+ * Hitting end-of-string while u8c->ccc == STOPPER means we're done,
+ * and the function returns 0 in that case.
+ *
+ * Sorting by CCC is done by repeatedly scanning the string.  The
+ * values of u8c->s and u8c->p are stored in u8c->ss and u8c->sp at
+ * the start of the scan.  The first pass finds the lowest CCC to be
+ * emitted and stores it in u8c->nccc, the second pass emits the
+ * characters with this CCC and finds the next lowest CCC. This limits
+ * the number of passes to 1 + the number of different CCCs in the
+ * sequence being scanned.
+ *
+ * Therefore:
+ *  u8c->p  != NULL -> a decomposition is being scanned.
+ *  u8c->ss != NULL -> this is a repeating scan.
+ *  u8c->ccc == -1   -> this is the first scan of a repeating scan.
+ */
+int utf8byte(struct utf8cursor *u8c)
+{
+	utf8leaf_t *leaf;
+	int ccc;
+
+	for (;;) {
+		/* Check for the end of a decomposed character. */
+		if (u8c->p && *u8c->s == '\0') {
+			u8c->s = u8c->p;
+			u8c->p = NULL;
+		}
+
+		/* Check for end-of-string. */
+		if (!u8c->p && (u8c->len == 0 || *u8c->s == '\0')) {
+			/* There is no next byte. */
+			if (u8c->ccc == STOPPER)
+				return 0;
+			/* End-of-string during a scan counts as a stopper. */
+			ccc = STOPPER;
+			goto ccc_mismatch;
+		} else if ((*u8c->s & 0xC0) == 0x80) {
+			/* This is a continuation of the current character. */
+			if (!u8c->p)
+				u8c->len--;
+			return (unsigned char)*u8c->s++;
+		}
+
+		/* Look up the data for the current character. */
+		if (u8c->p) {
+			leaf = utf8lookup(u8c->data, u8c->hangul, u8c->s);
+		} else {
+			leaf = utf8nlookup(u8c->data, u8c->hangul,
+					   u8c->s, u8c->len);
+		}
+
+		/* No leaf found implies that the input is a binary blob. */
+		if (!leaf)
+			return -1;
+
+		ccc = LEAF_CCC(leaf);
+		/* Characters that are too new have CCC 0. */
+		if (utf8agetab[LEAF_GEN(leaf)] > u8c->data->maxage) {
+			ccc = STOPPER;
+		} else if (ccc == DECOMPOSE) {
+			u8c->len -= utf8clen(u8c->s);
+			u8c->p = u8c->s + utf8clen(u8c->s);
+			u8c->s = LEAF_STR(leaf);
+			/* Empty decomposition implies CCC 0. */
+			if (*u8c->s == '\0') {
+				if (u8c->ccc == STOPPER)
+					continue;
+				ccc = STOPPER;
+				goto ccc_mismatch;
+			}
+
+			leaf = utf8lookup(u8c->data, u8c->hangul, u8c->s);
+			if (!leaf)
+				return -1;
+			ccc = LEAF_CCC(leaf);
+		}
+
+		/*
+		 * If this is not a stopper, then see if it updates
+		 * the next canonical class to be emitted.
+		 */
+		if (ccc != STOPPER && u8c->ccc < ccc && ccc < u8c->nccc)
+			u8c->nccc = ccc;
+
+		/*
+		 * Return the current byte if this is the current
+		 * combining class.
+		 */
+		if (ccc == u8c->ccc) {
+			if (!u8c->p)
+				u8c->len--;
+			return (unsigned char)*u8c->s++;
+		}
+
+		/* Current combining class mismatch. */
+ccc_mismatch:
+		if (u8c->nccc == STOPPER) {
+			/*
+			 * Scan forward for the first canonical class
+			 * to be emitted.  Save the position from
+			 * which to restart.
+			 */
+			u8c->ccc = MINCCC - 1;
+			u8c->nccc = ccc;
+			u8c->sp = u8c->p;
+			u8c->ss = u8c->s;
+			u8c->slen = u8c->len;
+			if (!u8c->p)
+				u8c->len -= utf8clen(u8c->s);
+			u8c->s += utf8clen(u8c->s);
+		} else if (ccc != STOPPER) {
+			/* Not a stopper, and not the ccc we're emitting. */
+			if (!u8c->p)
+				u8c->len -= utf8clen(u8c->s);
+			u8c->s += utf8clen(u8c->s);
+		} else if (u8c->nccc != MAXCCC + 1) {
+			/* At a stopper, restart for next ccc. */
+			u8c->ccc = u8c->nccc;
+			u8c->nccc = MAXCCC + 1;
+			u8c->s = u8c->ss;
+			u8c->p = u8c->sp;
+			u8c->len = u8c->slen;
+		} else {
+			/* All done, proceed from here. */
+			u8c->ccc = STOPPER;
+			u8c->nccc = STOPPER;
+			u8c->sp = NULL;
+			u8c->ss = NULL;
+			u8c->slen = 0;
+		}
+	}
+}
+EXPORT_SYMBOL(utf8byte);
+
+const struct utf8data *utf8nfdi(unsigned int maxage)
+{
+	int i = ARRAY_SIZE(utf8nfdidata) - 1;
+
+	while (maxage < utf8nfdidata[i].maxage)
+		i--;
+	if (maxage > utf8nfdidata[i].maxage)
+		return NULL;
+	return &utf8nfdidata[i];
+}
+EXPORT_SYMBOL(utf8nfdi);
+
+const struct utf8data *utf8nfdicf(unsigned int maxage)
+{
+	int i = ARRAY_SIZE(utf8nfdicfdata) - 1;
+
+	while (maxage < utf8nfdicfdata[i].maxage)
+		i--;
+	if (maxage > utf8nfdicfdata[i].maxage)
+		return NULL;
+	return &utf8nfdicfdata[i];
+}
+EXPORT_SYMBOL(utf8nfdicf);
diff --git a/fs/unicode/utf8-selftest.c b/fs/unicode/utf8-selftest.c
new file mode 100644
index 0000000..8075201
--- /dev/null
+++ b/fs/unicode/utf8-selftest.c
@@ -0,0 +1,320 @@
+/*
+ * Kernel module for testing utf-8 support.
+ *
+ * Copyright 2017 Collabora Ltd.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
+#include <linux/module.h>
+#include <linux/printk.h>
+#include <linux/unicode.h>
+#include <linux/dcache.h>
+
+#include "utf8n.h"
+
+unsigned int failed_tests;
+unsigned int total_tests;
+
+/* Tests will be based on this version. */
+#define latest_maj 12
+#define latest_min 1
+#define latest_rev 0
+
+#define _test(cond, func, line, fmt, ...) do {				\
+		total_tests++;						\
+		if (!cond) {						\
+			failed_tests++;					\
+			pr_err("test %s:%d Failed: %s%s",		\
+			       func, line, #cond, (fmt?":":"."));	\
+			if (fmt)					\
+				pr_err(fmt, ##__VA_ARGS__);		\
+		}							\
+	} while (0)
+#define test_f(cond, fmt, ...) _test(cond, __func__, __LINE__, fmt, ##__VA_ARGS__)
+#define test(cond) _test(cond, __func__, __LINE__, "")
+
+const static struct {
+	/* UTF-8 strings in this vector _must_ be NULL-terminated. */
+	unsigned char str[10];
+	unsigned char dec[10];
+} nfdi_test_data[] = {
+	/* Trivial sequence */
+	{
+		/* "ABba" decomposes to itself */
+		.str = "aBba",
+		.dec = "aBba",
+	},
+	/* Simple equivalent sequences */
+	{
+               /* 'VULGAR FRACTION ONE QUARTER' cannot decompose to
+                  'NUMBER 1' + 'FRACTION SLASH' + 'NUMBER 4' on
+                  canonical decomposition */
+               .str = {0xc2, 0xbc, 0x00},
+	       .dec = {0xc2, 0xbc, 0x00},
+	},
+	{
+		/* 'LATIN SMALL LETTER A WITH DIAERESIS' decomposes to
+		   'LETTER A' + 'COMBINING DIAERESIS' */
+		.str = {0xc3, 0xa4, 0x00},
+		.dec = {0x61, 0xcc, 0x88, 0x00},
+	},
+	{
+		/* 'LATIN SMALL LETTER LJ' can't decompose to
+		   'LETTER L' + 'LETTER J' on canonical decomposition */
+		.str = {0xC7, 0x89, 0x00},
+		.dec = {0xC7, 0x89, 0x00},
+	},
+	{
+		/* GREEK ANO TELEIA decomposes to MIDDLE DOT */
+		.str = {0xCE, 0x87, 0x00},
+		.dec = {0xC2, 0xB7, 0x00}
+	},
+	/* Canonical ordering */
+	{
+		/* A + 'COMBINING ACUTE ACCENT' + 'COMBINING OGONEK' decomposes
+		   to A + 'COMBINING OGONEK' + 'COMBINING ACUTE ACCENT' */
+		.str = {0x41, 0xcc, 0x81, 0xcc, 0xa8, 0x0},
+		.dec = {0x41, 0xcc, 0xa8, 0xcc, 0x81, 0x0},
+	},
+	{
+		/* 'LATIN SMALL LETTER A WITH DIAERESIS' + 'COMBINING OGONEK'
+		   decomposes to
+		   'LETTER A' + 'COMBINING OGONEK' + 'COMBINING DIAERESIS' */
+		.str = {0xc3, 0xa4, 0xCC, 0xA8, 0x00},
+
+		.dec = {0x61, 0xCC, 0xA8, 0xcc, 0x88, 0x00},
+	},
+
+};
+
+const static struct {
+	/* UTF-8 strings in this vector _must_ be NULL-terminated. */
+	unsigned char str[30];
+	unsigned char ncf[30];
+} nfdicf_test_data[] = {
+	/* Trivial sequences */
+	{
+		/* "ABba" folds to lowercase */
+		.str = {0x41, 0x42, 0x62, 0x61, 0x00},
+		.ncf = {0x61, 0x62, 0x62, 0x61, 0x00},
+	},
+	{
+		/* All ASCII folds to lower-case */
+		.str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0.1",
+		.ncf = "abcdefghijklmnopqrstuvwxyz0.1",
+	},
+	{
+		/* LATIN SMALL LETTER SHARP S folds to
+		   LATIN SMALL LETTER S + LATIN SMALL LETTER S */
+		.str = {0xc3, 0x9f, 0x00},
+		.ncf = {0x73, 0x73, 0x00},
+	},
+	{
+		/* LATIN CAPITAL LETTER A WITH RING ABOVE folds to
+		   LATIN SMALL LETTER A + COMBINING RING ABOVE */
+		.str = {0xC3, 0x85, 0x00},
+		.ncf = {0x61, 0xcc, 0x8a, 0x00},
+	},
+	/* Introduced by UTF-8.0.0. */
+	/* Cherokee letters are interesting test-cases because they fold
+	   to upper-case.  Before 8.0.0, Cherokee lowercase were
+	   undefined, thus, the folding from LC is not stable between
+	   7.0.0 -> 8.0.0, but it is from UC. */
+	{
+		/* CHEROKEE SMALL LETTER A folds to CHEROKEE LETTER A */
+		.str = {0xea, 0xad, 0xb0, 0x00},
+		.ncf = {0xe1, 0x8e, 0xa0, 0x00},
+	},
+	{
+		/* CHEROKEE SMALL LETTER YE folds to CHEROKEE LETTER YE */
+		.str = {0xe1, 0x8f, 0xb8, 0x00},
+		.ncf = {0xe1, 0x8f, 0xb0, 0x00},
+	},
+	{
+		/* OLD HUNGARIAN CAPITAL LETTER AMB folds to
+		   OLD HUNGARIAN SMALL LETTER AMB */
+		.str = {0xf0, 0x90, 0xb2, 0x83, 0x00},
+		.ncf = {0xf0, 0x90, 0xb3, 0x83, 0x00},
+	},
+	/* Introduced by UTF-9.0.0. */
+	{
+		/* OSAGE CAPITAL LETTER CHA folds to
+		   OSAGE SMALL LETTER CHA */
+		.str = {0xf0, 0x90, 0x92, 0xb5, 0x00},
+		.ncf = {0xf0, 0x90, 0x93, 0x9d, 0x00},
+	},
+	{
+		/* LATIN CAPITAL LETTER SMALL CAPITAL I folds to
+		   LATIN LETTER SMALL CAPITAL I */
+		.str = {0xea, 0x9e, 0xae, 0x00},
+		.ncf = {0xc9, 0xaa, 0x00},
+	},
+	/* Introduced by UTF-11.0.0. */
+	{
+		/* GEORGIAN SMALL LETTER AN folds to GEORGIAN MTAVRULI
+		   CAPITAL LETTER AN */
+		.str = {0xe1, 0xb2, 0x90, 0x00},
+		.ncf = {0xe1, 0x83, 0x90, 0x00},
+	}
+};
+
+static void check_utf8_nfdi(void)
+{
+	int i;
+	struct utf8cursor u8c;
+	const struct utf8data *data;
+
+	data = utf8nfdi(UNICODE_AGE(latest_maj, latest_min, latest_rev));
+	if (!data) {
+		pr_err("%s: Unable to load utf8-%d.%d.%d. Skipping.\n",
+		       __func__, latest_maj, latest_min, latest_rev);
+		return;
+	}
+
+	for (i = 0; i < ARRAY_SIZE(nfdi_test_data); i++) {
+		int len = strlen(nfdi_test_data[i].str);
+		int nlen = strlen(nfdi_test_data[i].dec);
+		int j = 0;
+		unsigned char c;
+
+		test((utf8len(data, nfdi_test_data[i].str) == nlen));
+		test((utf8nlen(data, nfdi_test_data[i].str, len) == nlen));
+
+		if (utf8cursor(&u8c, data, nfdi_test_data[i].str) < 0)
+			pr_err("can't create cursor\n");
+
+		while ((c = utf8byte(&u8c)) > 0) {
+			test_f((c == nfdi_test_data[i].dec[j]),
+			       "Unexpected byte 0x%x should be 0x%x\n",
+			       c, nfdi_test_data[i].dec[j]);
+			j++;
+		}
+
+		test((j == nlen));
+	}
+}
+
+static void check_utf8_nfdicf(void)
+{
+	int i;
+	struct utf8cursor u8c;
+	const struct utf8data *data;
+
+	data = utf8nfdicf(UNICODE_AGE(latest_maj, latest_min, latest_rev));
+	if (!data) {
+		pr_err("%s: Unable to load utf8-%d.%d.%d. Skipping.\n",
+		       __func__, latest_maj, latest_min, latest_rev);
+		return;
+	}
+
+	for (i = 0; i < ARRAY_SIZE(nfdicf_test_data); i++) {
+		int len = strlen(nfdicf_test_data[i].str);
+		int nlen = strlen(nfdicf_test_data[i].ncf);
+		int j = 0;
+		unsigned char c;
+
+		test((utf8len(data, nfdicf_test_data[i].str) == nlen));
+		test((utf8nlen(data, nfdicf_test_data[i].str, len) == nlen));
+
+		if (utf8cursor(&u8c, data, nfdicf_test_data[i].str) < 0)
+			pr_err("can't create cursor\n");
+
+		while ((c = utf8byte(&u8c)) > 0) {
+			test_f((c == nfdicf_test_data[i].ncf[j]),
+			       "Unexpected byte 0x%x should be 0x%x\n",
+			       c, nfdicf_test_data[i].ncf[j]);
+			j++;
+		}
+
+		test((j == nlen));
+	}
+}
+
+static void check_utf8_comparisons(void)
+{
+	int i;
+	struct unicode_map *table = utf8_load("12.1.0");
+
+	if (IS_ERR(table)) {
+		pr_err("%s: Unable to load utf8 %d.%d.%d. Skipping.\n",
+		       __func__, latest_maj, latest_min, latest_rev);
+		return;
+	}
+
+	for (i = 0; i < ARRAY_SIZE(nfdi_test_data); i++) {
+		const struct qstr s1 = {.name = nfdi_test_data[i].str,
+					.len = sizeof(nfdi_test_data[i].str)};
+		const struct qstr s2 = {.name = nfdi_test_data[i].dec,
+					.len = sizeof(nfdi_test_data[i].dec)};
+
+		test_f(!utf8_strncmp(table, &s1, &s2),
+		       "%s %s comparison mismatch\n", s1.name, s2.name);
+	}
+
+	for (i = 0; i < ARRAY_SIZE(nfdicf_test_data); i++) {
+		const struct qstr s1 = {.name = nfdicf_test_data[i].str,
+					.len = sizeof(nfdicf_test_data[i].str)};
+		const struct qstr s2 = {.name = nfdicf_test_data[i].ncf,
+					.len = sizeof(nfdicf_test_data[i].ncf)};
+
+		test_f(!utf8_strncasecmp(table, &s1, &s2),
+		       "%s %s comparison mismatch\n", s1.name, s2.name);
+	}
+
+	utf8_unload(table);
+}
+
+static void check_supported_versions(void)
+{
+	/* Unicode 7.0.0 should be supported. */
+	test(utf8version_is_supported(7, 0, 0));
+
+	/* Unicode 9.0.0 should be supported. */
+	test(utf8version_is_supported(9, 0, 0));
+
+	/* Unicode 1x.0.0 (the latest version) should be supported. */
+	test(utf8version_is_supported(latest_maj, latest_min, latest_rev));
+
+	/* Next versions don't exist. */
+	test(!utf8version_is_supported(13, 0, 0));
+	test(!utf8version_is_supported(0, 0, 0));
+	test(!utf8version_is_supported(-1, -1, -1));
+}
+
+static int __init init_test_ucd(void)
+{
+	failed_tests = 0;
+	total_tests = 0;
+
+	check_supported_versions();
+	check_utf8_nfdi();
+	check_utf8_nfdicf();
+	check_utf8_comparisons();
+
+	if (!failed_tests)
+		pr_info("All %u tests passed\n", total_tests);
+	else
+		pr_err("%u out of %u tests failed\n", failed_tests,
+		       total_tests);
+	return 0;
+}
+
+static void __exit exit_test_ucd(void)
+{
+}
+
+module_init(init_test_ucd);
+module_exit(exit_test_ucd);
+
+MODULE_AUTHOR("Gabriel Krisman Bertazi <krisman@collabora.co.uk>");
+MODULE_LICENSE("GPL");
diff --git a/fs/unicode/utf8data.h_shipped b/fs/unicode/utf8data.h_shipped
new file mode 100644
index 0000000..76e4f0e
--- /dev/null
+++ b/fs/unicode/utf8data.h_shipped
@@ -0,0 +1,4109 @@
+/* This file is generated code, do not edit. */
+#ifndef __INCLUDED_FROM_UTF8NORM_C__
+#error Only nls_utf8-norm.c should include this file.
+#endif
+
+static const unsigned int utf8vers = 0xc0100;
+
+static const unsigned int utf8agetab[] = {
+	0,
+	0x10100,
+	0x20000,
+	0x20100,
+	0x30000,
+	0x30100,
+	0x30200,
+	0x40000,
+	0x40100,
+	0x50000,
+	0x50100,
+	0x50200,
+	0x60000,
+	0x60100,
+	0x60200,
+	0x60300,
+	0x70000,
+	0x80000,
+	0x90000,
+	0xa0000,
+	0xb0000,
+	0xc0000,
+	0xc0100
+};
+
+static const struct utf8data utf8nfdicfdata[] = {
+	{ 0, 0 },
+	{ 0x10100, 0 },
+	{ 0x20000, 0 },
+	{ 0x20100, 0 },
+	{ 0x30000, 0 },
+	{ 0x30100, 0 },
+	{ 0x30200, 1792 },
+	{ 0x40000, 3200 },
+	{ 0x40100, 3200 },
+	{ 0x50000, 3200 },
+	{ 0x50100, 3200 },
+	{ 0x50200, 3200 },
+	{ 0x60000, 3200 },
+	{ 0x60100, 3200 },
+	{ 0x60200, 3200 },
+	{ 0x60300, 3200 },
+	{ 0x70000, 3200 },
+	{ 0x80000, 3200 },
+	{ 0x90000, 3200 },
+	{ 0xa0000, 3200 },
+	{ 0xb0000, 3200 },
+	{ 0xc0000, 3200 },
+	{ 0xc0100, 3200 }
+};
+
+static const struct utf8data utf8nfdidata[] = {
+	{ 0, 896 },
+	{ 0x10100, 896 },
+	{ 0x20000, 896 },
+	{ 0x20100, 896 },
+	{ 0x30000, 896 },
+	{ 0x30100, 896 },
+	{ 0x30200, 2496 },
+	{ 0x40000, 20736 },
+	{ 0x40100, 20736 },
+	{ 0x50000, 20736 },
+	{ 0x50100, 20736 },
+	{ 0x50200, 20736 },
+	{ 0x60000, 20736 },
+	{ 0x60100, 20736 },
+	{ 0x60200, 20736 },
+	{ 0x60300, 20736 },
+	{ 0x70000, 20736 },
+	{ 0x80000, 20736 },
+	{ 0x90000, 20736 },
+	{ 0xa0000, 20736 },
+	{ 0xb0000, 20736 },
+	{ 0xc0000, 20736 },
+	{ 0xc0100, 20736 }
+};
+
+static const unsigned char utf8data[64256] = {
+	/* nfdicf_30100 */
+	0xd7,0x07,0x66,0x84,0x0c,0x01,0x00,0xc6,0xd5,0x16,0xe4,0x99,0x1a,0xe3,0x63,0x15,
+	0xe2,0x4c,0x0e,0xc1,0xe0,0x4e,0x0d,0xcf,0x86,0x65,0x2d,0x0d,0x01,0x00,0xd4,0xb8,
+	0xd3,0x27,0xe2,0x89,0xa3,0xe1,0xce,0x35,0xe0,0x2c,0x22,0xcf,0x86,0xc5,0xe4,0x15,
+	0x6d,0xe3,0x60,0x68,0xe2,0xf6,0x65,0xe1,0x29,0x65,0xe0,0xee,0x64,0xcf,0x86,0xe5,
+	0xb3,0x64,0x64,0x96,0x64,0x0b,0x00,0xd2,0x0e,0xe1,0xb5,0x3c,0xe0,0xba,0xa3,0xcf,
+	0x86,0xcf,0x06,0x01,0x00,0xd1,0x0c,0xe0,0x1e,0xa9,0xcf,0x86,0xcf,0x06,0x02,0xff,
+	0xff,0xd0,0x08,0xcf,0x86,0xcf,0x06,0x01,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x01,
+	0x00,0xe4,0xe1,0x45,0xe3,0x3b,0x45,0xd2,0x06,0xcf,0x06,0x01,0x00,0xe1,0x87,0xad,
+	0xd0,0x21,0xcf,0x86,0xe5,0x81,0xaa,0xe4,0x00,0xaa,0xe3,0xbf,0xa9,0xe2,0x9e,0xa9,
+	0xe1,0x8d,0xa9,0x10,0x08,0x01,0xff,0xe8,0xb1,0x88,0x00,0x01,0xff,0xe6,0x9b,0xb4,
+	0x00,0xcf,0x86,0xe5,0x63,0xac,0xd4,0x19,0xe3,0xa2,0xab,0xe2,0x81,0xab,0xe1,0x70,
+	0xab,0x10,0x08,0x01,0xff,0xe9,0xb9,0xbf,0x00,0x01,0xff,0xe8,0xab,0x96,0x00,0xe3,
+	0x09,0xac,0xe2,0xe8,0xab,0xe1,0xd7,0xab,0x10,0x08,0x01,0xff,0xe7,0xb8,0xb7,0x00,
+	0x01,0xff,0xe9,0x9b,0xbb,0x00,0x83,0xe2,0x19,0xfa,0xe1,0xf2,0xf6,0xe0,0x6f,0xf5,
+	0xcf,0x86,0xd5,0x31,0xc4,0xe3,0x54,0x4e,0xe2,0xf5,0x4c,0xe1,0xa4,0xcc,0xe0,0x9c,
+	0x4b,0xcf,0x86,0xe5,0x8e,0x49,0xe4,0xaf,0x46,0xe3,0x11,0xbd,0xe2,0x68,0xbc,0xe1,
+	0x43,0xbc,0xe0,0x1c,0xbc,0xcf,0x86,0xe5,0xe9,0xbb,0x94,0x07,0x63,0xd4,0xbb,0x07,
+	0x00,0x07,0x00,0xe4,0xdb,0xf4,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x05,0x00,0xd2,0x0b,
+	0xe1,0xea,0xe1,0xcf,0x86,0xcf,0x06,0x05,0x00,0xd1,0x0e,0xe0,0xd9,0xe2,0xcf,0x86,
+	0xe5,0x9e,0xe2,0xcf,0x06,0x11,0x00,0xd0,0x0b,0xcf,0x86,0xe5,0xd9,0xe2,0xcf,0x06,
+	0x13,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xe4,0x74,0xf4,0xe3,0x5d,0xf3,
+	0xd2,0xa0,0xe1,0x13,0xe7,0xd0,0x21,0xcf,0x86,0xe5,0x14,0xe4,0xe4,0x90,0xe3,0xe3,
+	0x4e,0xe3,0xe2,0x2d,0xe3,0xe1,0x1b,0xe3,0x10,0x08,0x05,0xff,0xe4,0xb8,0xbd,0x00,
+	0x05,0xff,0xe4,0xb8,0xb8,0x00,0xcf,0x86,0xd5,0x1c,0xe4,0x70,0xe5,0xe3,0x2f,0xe5,
+	0xe2,0x0e,0xe5,0xe1,0xfd,0xe4,0x10,0x08,0x05,0xff,0xe5,0x92,0xa2,0x00,0x05,0xff,
+	0xe5,0x93,0xb6,0x00,0xd4,0x34,0xd3,0x18,0xe2,0xf7,0xe5,0xe1,0xe6,0xe5,0x10,0x09,
+	0x05,0xff,0xf0,0xa1,0x9a,0xa8,0x00,0x05,0xff,0xf0,0xa1,0x9b,0xaa,0x00,0xe2,0x17,
+	0xe6,0x91,0x11,0x10,0x09,0x05,0xff,0xf0,0xa1,0x8d,0xaa,0x00,0x05,0xff,0xe5,0xac,
+	0x88,0x00,0x05,0xff,0xe5,0xac,0xbe,0x00,0xe3,0x5d,0xe6,0xd2,0x14,0xe1,0x2c,0xe6,
+	0x10,0x08,0x05,0xff,0xe5,0xaf,0xb3,0x00,0x05,0xff,0xf0,0xa1,0xac,0x98,0x00,0xe1,
+	0x38,0xe6,0x10,0x08,0x05,0xff,0xe5,0xbc,0xb3,0x00,0x05,0xff,0xe5,0xb0,0xa2,0x00,
+	0xd1,0xd5,0xd0,0x6a,0xcf,0x86,0xe5,0x8d,0xeb,0xd4,0x19,0xe3,0xc6,0xea,0xe2,0xa4,
+	0xea,0xe1,0x93,0xea,0x10,0x08,0x05,0xff,0xe6,0xb4,0xbe,0x00,0x05,0xff,0xe6,0xb5,
+	0xb7,0x00,0xd3,0x18,0xe2,0x10,0xeb,0xe1,0xff,0xea,0x10,0x09,0x05,0xff,0xf0,0xa3,
+	0xbd,0x9e,0x00,0x05,0xff,0xf0,0xa3,0xbe,0x8e,0x00,0xd2,0x13,0xe1,0x28,0xeb,0x10,
+	0x08,0x05,0xff,0xe7,0x81,0xbd,0x00,0x05,0xff,0xe7,0x81,0xb7,0x00,0xd1,0x11,0x10,
+	0x08,0x05,0xff,0xe7,0x85,0x85,0x00,0x05,0xff,0xf0,0xa4,0x89,0xa3,0x00,0x10,0x08,
+	0x05,0xff,0xe7,0x86,0x9c,0x00,0x05,0xff,0xe4,0x8e,0xab,0x00,0xcf,0x86,0xe5,0x2a,
+	0xed,0xd4,0x1a,0xe3,0x62,0xec,0xe2,0x48,0xec,0xe1,0x35,0xec,0x10,0x08,0x05,0xff,
+	0xe7,0x9b,0xb4,0x00,0x05,0xff,0xf0,0xa5,0x83,0xb3,0x00,0xd3,0x16,0xe2,0xaa,0xec,
+	0xe1,0x98,0xec,0x10,0x08,0x05,0xff,0xe7,0xa3,0x8c,0x00,0x05,0xff,0xe4,0x83,0xa3,
+	0x00,0xd2,0x13,0xe1,0xc6,0xec,0x10,0x08,0x05,0xff,0xe4,0x84,0xaf,0x00,0x05,0xff,
+	0xe7,0xa9,0x80,0x00,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa5,0xa5,0xbc,0x00,0x05,
+	0xff,0xf0,0xa5,0xaa,0xa7,0x00,0x10,0x09,0x05,0xff,0xf0,0xa5,0xaa,0xa7,0x00,0x05,
+	0xff,0xe7,0xaa,0xae,0x00,0xe0,0xdc,0xef,0xcf,0x86,0xd5,0x1d,0xe4,0x51,0xee,0xe3,
+	0x0d,0xee,0xe2,0xeb,0xed,0xe1,0xda,0xed,0x10,0x09,0x05,0xff,0xf0,0xa3,0x8d,0x9f,
+	0x00,0x05,0xff,0xe4,0x8f,0x95,0x00,0xd4,0x19,0xe3,0xf8,0xee,0xe2,0xd4,0xee,0xe1,
+	0xc3,0xee,0x10,0x08,0x05,0xff,0xe8,0x8d,0x93,0x00,0x05,0xff,0xe8,0x8f,0x8a,0x00,
+	0xd3,0x18,0xe2,0x43,0xef,0xe1,0x32,0xef,0x10,0x09,0x05,0xff,0xf0,0xa6,0xbe,0xb1,
+	0x00,0x05,0xff,0xf0,0xa7,0x83,0x92,0x00,0xd2,0x13,0xe1,0x5b,0xef,0x10,0x08,0x05,
+	0xff,0xe8,0x9a,0x88,0x00,0x05,0xff,0xe8,0x9c,0x8e,0x00,0xd1,0x10,0x10,0x08,0x05,
+	0xff,0xe8,0x9c,0xa8,0x00,0x05,0xff,0xe8,0x9d,0xab,0x00,0x10,0x08,0x05,0xff,0xe8,
+	0x9e,0x86,0x00,0x05,0xff,0xe4,0xb5,0x97,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+	/* nfdi_30100 */
+	0x57,0x04,0x01,0x00,0xc6,0xd5,0x16,0xe4,0xc2,0x59,0xe3,0xfb,0x54,0xe2,0x74,0x4f,
+	0xc1,0xe0,0xa0,0x4d,0xcf,0x86,0x65,0x84,0x4d,0x01,0x00,0xd4,0xb8,0xd3,0x27,0xe2,
+	0x0c,0xa0,0xe1,0xdf,0x8d,0xe0,0x39,0x71,0xcf,0x86,0xc5,0xe4,0x98,0x69,0xe3,0xe3,
+	0x64,0xe2,0x79,0x62,0xe1,0xac,0x61,0xe0,0x71,0x61,0xcf,0x86,0xe5,0x36,0x61,0x64,
+	0x19,0x61,0x0b,0x00,0xd2,0x0e,0xe1,0xc2,0xa0,0xe0,0x3d,0xa0,0xcf,0x86,0xcf,0x06,
+	0x01,0x00,0xd1,0x0c,0xe0,0xa1,0xa5,0xcf,0x86,0xcf,0x06,0x02,0xff,0xff,0xd0,0x08,
+	0xcf,0x86,0xcf,0x06,0x01,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x01,0x00,0xe4,0x9e,
+	0xb6,0xe3,0x18,0xae,0xd2,0x06,0xcf,0x06,0x01,0x00,0xe1,0x0a,0xaa,0xd0,0x21,0xcf,
+	0x86,0xe5,0x04,0xa7,0xe4,0x83,0xa6,0xe3,0x42,0xa6,0xe2,0x21,0xa6,0xe1,0x10,0xa6,
+	0x10,0x08,0x01,0xff,0xe8,0xb1,0x88,0x00,0x01,0xff,0xe6,0x9b,0xb4,0x00,0xcf,0x86,
+	0xe5,0xe6,0xa8,0xd4,0x19,0xe3,0x25,0xa8,0xe2,0x04,0xa8,0xe1,0xf3,0xa7,0x10,0x08,
+	0x01,0xff,0xe9,0xb9,0xbf,0x00,0x01,0xff,0xe8,0xab,0x96,0x00,0xe3,0x8c,0xa8,0xe2,
+	0x6b,0xa8,0xe1,0x5a,0xa8,0x10,0x08,0x01,0xff,0xe7,0xb8,0xb7,0x00,0x01,0xff,0xe9,
+	0x9b,0xbb,0x00,0x83,0xe2,0x9c,0xf6,0xe1,0x75,0xf3,0xe0,0xf2,0xf1,0xcf,0x86,0xd5,
+	0x31,0xc4,0xe3,0x6d,0xcc,0xe2,0x46,0xca,0xe1,0x27,0xc9,0xe0,0xb7,0xbf,0xcf,0x86,
+	0xe5,0xaa,0xbb,0xe4,0xa3,0xba,0xe3,0x94,0xb9,0xe2,0xeb,0xb8,0xe1,0xc6,0xb8,0xe0,
+	0x9f,0xb8,0xcf,0x86,0xe5,0x6c,0xb8,0x94,0x07,0x63,0x57,0xb8,0x07,0x00,0x07,0x00,
+	0xe4,0x5e,0xf1,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x05,0x00,0xd2,0x0b,0xe1,0x6d,0xde,
+	0xcf,0x86,0xcf,0x06,0x05,0x00,0xd1,0x0e,0xe0,0x5c,0xdf,0xcf,0x86,0xe5,0x21,0xdf,
+	0xcf,0x06,0x11,0x00,0xd0,0x0b,0xcf,0x86,0xe5,0x5c,0xdf,0xcf,0x06,0x13,0x00,0xcf,
+	0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xe4,0xf7,0xf0,0xe3,0xe0,0xef,0xd2,0xa0,0xe1,
+	0x96,0xe3,0xd0,0x21,0xcf,0x86,0xe5,0x97,0xe0,0xe4,0x13,0xe0,0xe3,0xd1,0xdf,0xe2,
+	0xb0,0xdf,0xe1,0x9e,0xdf,0x10,0x08,0x05,0xff,0xe4,0xb8,0xbd,0x00,0x05,0xff,0xe4,
+	0xb8,0xb8,0x00,0xcf,0x86,0xd5,0x1c,0xe4,0xf3,0xe1,0xe3,0xb2,0xe1,0xe2,0x91,0xe1,
+	0xe1,0x80,0xe1,0x10,0x08,0x05,0xff,0xe5,0x92,0xa2,0x00,0x05,0xff,0xe5,0x93,0xb6,
+	0x00,0xd4,0x34,0xd3,0x18,0xe2,0x7a,0xe2,0xe1,0x69,0xe2,0x10,0x09,0x05,0xff,0xf0,
+	0xa1,0x9a,0xa8,0x00,0x05,0xff,0xf0,0xa1,0x9b,0xaa,0x00,0xe2,0x9a,0xe2,0x91,0x11,
+	0x10,0x09,0x05,0xff,0xf0,0xa1,0x8d,0xaa,0x00,0x05,0xff,0xe5,0xac,0x88,0x00,0x05,
+	0xff,0xe5,0xac,0xbe,0x00,0xe3,0xe0,0xe2,0xd2,0x14,0xe1,0xaf,0xe2,0x10,0x08,0x05,
+	0xff,0xe5,0xaf,0xb3,0x00,0x05,0xff,0xf0,0xa1,0xac,0x98,0x00,0xe1,0xbb,0xe2,0x10,
+	0x08,0x05,0xff,0xe5,0xbc,0xb3,0x00,0x05,0xff,0xe5,0xb0,0xa2,0x00,0xd1,0xd5,0xd0,
+	0x6a,0xcf,0x86,0xe5,0x10,0xe8,0xd4,0x19,0xe3,0x49,0xe7,0xe2,0x27,0xe7,0xe1,0x16,
+	0xe7,0x10,0x08,0x05,0xff,0xe6,0xb4,0xbe,0x00,0x05,0xff,0xe6,0xb5,0xb7,0x00,0xd3,
+	0x18,0xe2,0x93,0xe7,0xe1,0x82,0xe7,0x10,0x09,0x05,0xff,0xf0,0xa3,0xbd,0x9e,0x00,
+	0x05,0xff,0xf0,0xa3,0xbe,0x8e,0x00,0xd2,0x13,0xe1,0xab,0xe7,0x10,0x08,0x05,0xff,
+	0xe7,0x81,0xbd,0x00,0x05,0xff,0xe7,0x81,0xb7,0x00,0xd1,0x11,0x10,0x08,0x05,0xff,
+	0xe7,0x85,0x85,0x00,0x05,0xff,0xf0,0xa4,0x89,0xa3,0x00,0x10,0x08,0x05,0xff,0xe7,
+	0x86,0x9c,0x00,0x05,0xff,0xe4,0x8e,0xab,0x00,0xcf,0x86,0xe5,0xad,0xe9,0xd4,0x1a,
+	0xe3,0xe5,0xe8,0xe2,0xcb,0xe8,0xe1,0xb8,0xe8,0x10,0x08,0x05,0xff,0xe7,0x9b,0xb4,
+	0x00,0x05,0xff,0xf0,0xa5,0x83,0xb3,0x00,0xd3,0x16,0xe2,0x2d,0xe9,0xe1,0x1b,0xe9,
+	0x10,0x08,0x05,0xff,0xe7,0xa3,0x8c,0x00,0x05,0xff,0xe4,0x83,0xa3,0x00,0xd2,0x13,
+	0xe1,0x49,0xe9,0x10,0x08,0x05,0xff,0xe4,0x84,0xaf,0x00,0x05,0xff,0xe7,0xa9,0x80,
+	0x00,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa5,0xa5,0xbc,0x00,0x05,0xff,0xf0,0xa5,
+	0xaa,0xa7,0x00,0x10,0x09,0x05,0xff,0xf0,0xa5,0xaa,0xa7,0x00,0x05,0xff,0xe7,0xaa,
+	0xae,0x00,0xe0,0x5f,0xec,0xcf,0x86,0xd5,0x1d,0xe4,0xd4,0xea,0xe3,0x90,0xea,0xe2,
+	0x6e,0xea,0xe1,0x5d,0xea,0x10,0x09,0x05,0xff,0xf0,0xa3,0x8d,0x9f,0x00,0x05,0xff,
+	0xe4,0x8f,0x95,0x00,0xd4,0x19,0xe3,0x7b,0xeb,0xe2,0x57,0xeb,0xe1,0x46,0xeb,0x10,
+	0x08,0x05,0xff,0xe8,0x8d,0x93,0x00,0x05,0xff,0xe8,0x8f,0x8a,0x00,0xd3,0x18,0xe2,
+	0xc6,0xeb,0xe1,0xb5,0xeb,0x10,0x09,0x05,0xff,0xf0,0xa6,0xbe,0xb1,0x00,0x05,0xff,
+	0xf0,0xa7,0x83,0x92,0x00,0xd2,0x13,0xe1,0xde,0xeb,0x10,0x08,0x05,0xff,0xe8,0x9a,
+	0x88,0x00,0x05,0xff,0xe8,0x9c,0x8e,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe8,0x9c,
+	0xa8,0x00,0x05,0xff,0xe8,0x9d,0xab,0x00,0x10,0x08,0x05,0xff,0xe8,0x9e,0x86,0x00,
+	0x05,0xff,0xe4,0xb5,0x97,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+	/* nfdicf_30200 */
+	0xd7,0x07,0x66,0x84,0x05,0x01,0x00,0xc6,0xd5,0x16,0xe4,0x99,0x13,0xe3,0x63,0x0e,
+	0xe2,0x4c,0x07,0xc1,0xe0,0x4e,0x06,0xcf,0x86,0x65,0x2d,0x06,0x01,0x00,0xd4,0x2a,
+	0xe3,0xd0,0x35,0xe2,0x88,0x9c,0xe1,0xcd,0x2e,0xe0,0x2b,0x1b,0xcf,0x86,0xc5,0xe4,
+	0x14,0x66,0xe3,0x5f,0x61,0xe2,0xf5,0x5e,0xe1,0x28,0x5e,0xe0,0xed,0x5d,0xcf,0x86,
+	0xe5,0xb2,0x5d,0x64,0x95,0x5d,0x0b,0x00,0x83,0xe2,0xa7,0xf3,0xe1,0x80,0xf0,0xe0,
+	0xfd,0xee,0xcf,0x86,0xd5,0x31,0xc4,0xe3,0xe2,0x47,0xe2,0x83,0x46,0xe1,0x32,0xc6,
+	0xe0,0x2a,0x45,0xcf,0x86,0xe5,0x1c,0x43,0xe4,0x3d,0x40,0xe3,0x9f,0xb6,0xe2,0xf6,
+	0xb5,0xe1,0xd1,0xb5,0xe0,0xaa,0xb5,0xcf,0x86,0xe5,0x77,0xb5,0x94,0x07,0x63,0x62,
+	0xb5,0x07,0x00,0x07,0x00,0xe4,0x69,0xee,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x05,0x00,
+	0xd2,0x0b,0xe1,0x78,0xdb,0xcf,0x86,0xcf,0x06,0x05,0x00,0xd1,0x0e,0xe0,0x67,0xdc,
+	0xcf,0x86,0xe5,0x2c,0xdc,0xcf,0x06,0x11,0x00,0xd0,0x0b,0xcf,0x86,0xe5,0x67,0xdc,
+	0xcf,0x06,0x13,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xe4,0x02,0xee,0xe3,
+	0xeb,0xec,0xd2,0xa0,0xe1,0xa1,0xe0,0xd0,0x21,0xcf,0x86,0xe5,0xa2,0xdd,0xe4,0x1e,
+	0xdd,0xe3,0xdc,0xdc,0xe2,0xbb,0xdc,0xe1,0xa9,0xdc,0x10,0x08,0x05,0xff,0xe4,0xb8,
+	0xbd,0x00,0x05,0xff,0xe4,0xb8,0xb8,0x00,0xcf,0x86,0xd5,0x1c,0xe4,0xfe,0xde,0xe3,
+	0xbd,0xde,0xe2,0x9c,0xde,0xe1,0x8b,0xde,0x10,0x08,0x05,0xff,0xe5,0x92,0xa2,0x00,
+	0x05,0xff,0xe5,0x93,0xb6,0x00,0xd4,0x34,0xd3,0x18,0xe2,0x85,0xdf,0xe1,0x74,0xdf,
+	0x10,0x09,0x05,0xff,0xf0,0xa1,0x9a,0xa8,0x00,0x05,0xff,0xf0,0xa1,0x9b,0xaa,0x00,
+	0xe2,0xa5,0xdf,0x91,0x11,0x10,0x09,0x05,0xff,0xf0,0xa1,0x8d,0xaa,0x00,0x05,0xff,
+	0xe5,0xac,0x88,0x00,0x05,0xff,0xe5,0xac,0xbe,0x00,0xe3,0xeb,0xdf,0xd2,0x14,0xe1,
+	0xba,0xdf,0x10,0x08,0x05,0xff,0xe5,0xaf,0xb3,0x00,0x05,0xff,0xf0,0xa1,0xac,0x98,
+	0x00,0xe1,0xc6,0xdf,0x10,0x08,0x05,0xff,0xe5,0xbc,0xb3,0x00,0x05,0xff,0xe5,0xb0,
+	0xa2,0x00,0xd1,0xd5,0xd0,0x6a,0xcf,0x86,0xe5,0x1b,0xe5,0xd4,0x19,0xe3,0x54,0xe4,
+	0xe2,0x32,0xe4,0xe1,0x21,0xe4,0x10,0x08,0x05,0xff,0xe6,0xb4,0xbe,0x00,0x05,0xff,
+	0xe6,0xb5,0xb7,0x00,0xd3,0x18,0xe2,0x9e,0xe4,0xe1,0x8d,0xe4,0x10,0x09,0x05,0xff,
+	0xf0,0xa3,0xbd,0x9e,0x00,0x05,0xff,0xf0,0xa3,0xbe,0x8e,0x00,0xd2,0x13,0xe1,0xb6,
+	0xe4,0x10,0x08,0x05,0xff,0xe7,0x81,0xbd,0x00,0x05,0xff,0xe7,0x81,0xb7,0x00,0xd1,
+	0x11,0x10,0x08,0x05,0xff,0xe7,0x85,0x85,0x00,0x05,0xff,0xf0,0xa4,0x89,0xa3,0x00,
+	0x10,0x08,0x05,0xff,0xe7,0x86,0x9c,0x00,0x05,0xff,0xe4,0x8e,0xab,0x00,0xcf,0x86,
+	0xe5,0xb8,0xe6,0xd4,0x1a,0xe3,0xf0,0xe5,0xe2,0xd6,0xe5,0xe1,0xc3,0xe5,0x10,0x08,
+	0x05,0xff,0xe7,0x9b,0xb4,0x00,0x05,0xff,0xf0,0xa5,0x83,0xb3,0x00,0xd3,0x16,0xe2,
+	0x38,0xe6,0xe1,0x26,0xe6,0x10,0x08,0x05,0xff,0xe7,0xa3,0x8c,0x00,0x05,0xff,0xe4,
+	0x83,0xa3,0x00,0xd2,0x13,0xe1,0x54,0xe6,0x10,0x08,0x05,0xff,0xe4,0x84,0xaf,0x00,
+	0x05,0xff,0xe7,0xa9,0x80,0x00,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa5,0xa5,0xbc,
+	0x00,0x05,0xff,0xf0,0xa5,0xaa,0xa7,0x00,0x10,0x09,0x05,0xff,0xf0,0xa5,0xaa,0xa7,
+	0x00,0x05,0xff,0xe7,0xaa,0xae,0x00,0xe0,0x6a,0xe9,0xcf,0x86,0xd5,0x1d,0xe4,0xdf,
+	0xe7,0xe3,0x9b,0xe7,0xe2,0x79,0xe7,0xe1,0x68,0xe7,0x10,0x09,0x05,0xff,0xf0,0xa3,
+	0x8d,0x9f,0x00,0x05,0xff,0xe4,0x8f,0x95,0x00,0xd4,0x19,0xe3,0x86,0xe8,0xe2,0x62,
+	0xe8,0xe1,0x51,0xe8,0x10,0x08,0x05,0xff,0xe8,0x8d,0x93,0x00,0x05,0xff,0xe8,0x8f,
+	0x8a,0x00,0xd3,0x18,0xe2,0xd1,0xe8,0xe1,0xc0,0xe8,0x10,0x09,0x05,0xff,0xf0,0xa6,
+	0xbe,0xb1,0x00,0x05,0xff,0xf0,0xa7,0x83,0x92,0x00,0xd2,0x13,0xe1,0xe9,0xe8,0x10,
+	0x08,0x05,0xff,0xe8,0x9a,0x88,0x00,0x05,0xff,0xe8,0x9c,0x8e,0x00,0xd1,0x10,0x10,
+	0x08,0x05,0xff,0xe8,0x9c,0xa8,0x00,0x05,0xff,0xe8,0x9d,0xab,0x00,0x10,0x08,0x05,
+	0xff,0xe8,0x9e,0x86,0x00,0x05,0xff,0xe4,0xb5,0x97,0x00,0x00,0x00,0x00,0x00,0x00,
+	/* nfdi_30200 */
+	0x57,0x04,0x01,0x00,0xc6,0xd5,0x16,0xe4,0x82,0x53,0xe3,0xbb,0x4e,0xe2,0x34,0x49,
+	0xc1,0xe0,0x60,0x47,0xcf,0x86,0x65,0x44,0x47,0x01,0x00,0xd4,0x2a,0xe3,0x1c,0x9a,
+	0xe2,0xcb,0x99,0xe1,0x9e,0x87,0xe0,0xf8,0x6a,0xcf,0x86,0xc5,0xe4,0x57,0x63,0xe3,
+	0xa2,0x5e,0xe2,0x38,0x5c,0xe1,0x6b,0x5b,0xe0,0x30,0x5b,0xcf,0x86,0xe5,0xf5,0x5a,
+	0x64,0xd8,0x5a,0x0b,0x00,0x83,0xe2,0xea,0xf0,0xe1,0xc3,0xed,0xe0,0x40,0xec,0xcf,
+	0x86,0xd5,0x31,0xc4,0xe3,0xbb,0xc6,0xe2,0x94,0xc4,0xe1,0x75,0xc3,0xe0,0x05,0xba,
+	0xcf,0x86,0xe5,0xf8,0xb5,0xe4,0xf1,0xb4,0xe3,0xe2,0xb3,0xe2,0x39,0xb3,0xe1,0x14,
+	0xb3,0xe0,0xed,0xb2,0xcf,0x86,0xe5,0xba,0xb2,0x94,0x07,0x63,0xa5,0xb2,0x07,0x00,
+	0x07,0x00,0xe4,0xac,0xeb,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x05,0x00,0xd2,0x0b,0xe1,
+	0xbb,0xd8,0xcf,0x86,0xcf,0x06,0x05,0x00,0xd1,0x0e,0xe0,0xaa,0xd9,0xcf,0x86,0xe5,
+	0x6f,0xd9,0xcf,0x06,0x11,0x00,0xd0,0x0b,0xcf,0x86,0xe5,0xaa,0xd9,0xcf,0x06,0x13,
+	0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xe4,0x45,0xeb,0xe3,0x2e,0xea,0xd2,
+	0xa0,0xe1,0xe4,0xdd,0xd0,0x21,0xcf,0x86,0xe5,0xe5,0xda,0xe4,0x61,0xda,0xe3,0x1f,
+	0xda,0xe2,0xfe,0xd9,0xe1,0xec,0xd9,0x10,0x08,0x05,0xff,0xe4,0xb8,0xbd,0x00,0x05,
+	0xff,0xe4,0xb8,0xb8,0x00,0xcf,0x86,0xd5,0x1c,0xe4,0x41,0xdc,0xe3,0x00,0xdc,0xe2,
+	0xdf,0xdb,0xe1,0xce,0xdb,0x10,0x08,0x05,0xff,0xe5,0x92,0xa2,0x00,0x05,0xff,0xe5,
+	0x93,0xb6,0x00,0xd4,0x34,0xd3,0x18,0xe2,0xc8,0xdc,0xe1,0xb7,0xdc,0x10,0x09,0x05,
+	0xff,0xf0,0xa1,0x9a,0xa8,0x00,0x05,0xff,0xf0,0xa1,0x9b,0xaa,0x00,0xe2,0xe8,0xdc,
+	0x91,0x11,0x10,0x09,0x05,0xff,0xf0,0xa1,0x8d,0xaa,0x00,0x05,0xff,0xe5,0xac,0x88,
+	0x00,0x05,0xff,0xe5,0xac,0xbe,0x00,0xe3,0x2e,0xdd,0xd2,0x14,0xe1,0xfd,0xdc,0x10,
+	0x08,0x05,0xff,0xe5,0xaf,0xb3,0x00,0x05,0xff,0xf0,0xa1,0xac,0x98,0x00,0xe1,0x09,
+	0xdd,0x10,0x08,0x05,0xff,0xe5,0xbc,0xb3,0x00,0x05,0xff,0xe5,0xb0,0xa2,0x00,0xd1,
+	0xd5,0xd0,0x6a,0xcf,0x86,0xe5,0x5e,0xe2,0xd4,0x19,0xe3,0x97,0xe1,0xe2,0x75,0xe1,
+	0xe1,0x64,0xe1,0x10,0x08,0x05,0xff,0xe6,0xb4,0xbe,0x00,0x05,0xff,0xe6,0xb5,0xb7,
+	0x00,0xd3,0x18,0xe2,0xe1,0xe1,0xe1,0xd0,0xe1,0x10,0x09,0x05,0xff,0xf0,0xa3,0xbd,
+	0x9e,0x00,0x05,0xff,0xf0,0xa3,0xbe,0x8e,0x00,0xd2,0x13,0xe1,0xf9,0xe1,0x10,0x08,
+	0x05,0xff,0xe7,0x81,0xbd,0x00,0x05,0xff,0xe7,0x81,0xb7,0x00,0xd1,0x11,0x10,0x08,
+	0x05,0xff,0xe7,0x85,0x85,0x00,0x05,0xff,0xf0,0xa4,0x89,0xa3,0x00,0x10,0x08,0x05,
+	0xff,0xe7,0x86,0x9c,0x00,0x05,0xff,0xe4,0x8e,0xab,0x00,0xcf,0x86,0xe5,0xfb,0xe3,
+	0xd4,0x1a,0xe3,0x33,0xe3,0xe2,0x19,0xe3,0xe1,0x06,0xe3,0x10,0x08,0x05,0xff,0xe7,
+	0x9b,0xb4,0x00,0x05,0xff,0xf0,0xa5,0x83,0xb3,0x00,0xd3,0x16,0xe2,0x7b,0xe3,0xe1,
+	0x69,0xe3,0x10,0x08,0x05,0xff,0xe7,0xa3,0x8c,0x00,0x05,0xff,0xe4,0x83,0xa3,0x00,
+	0xd2,0x13,0xe1,0x97,0xe3,0x10,0x08,0x05,0xff,0xe4,0x84,0xaf,0x00,0x05,0xff,0xe7,
+	0xa9,0x80,0x00,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa5,0xa5,0xbc,0x00,0x05,0xff,
+	0xf0,0xa5,0xaa,0xa7,0x00,0x10,0x09,0x05,0xff,0xf0,0xa5,0xaa,0xa7,0x00,0x05,0xff,
+	0xe7,0xaa,0xae,0x00,0xe0,0xad,0xe6,0xcf,0x86,0xd5,0x1d,0xe4,0x22,0xe5,0xe3,0xde,
+	0xe4,0xe2,0xbc,0xe4,0xe1,0xab,0xe4,0x10,0x09,0x05,0xff,0xf0,0xa3,0x8d,0x9f,0x00,
+	0x05,0xff,0xe4,0x8f,0x95,0x00,0xd4,0x19,0xe3,0xc9,0xe5,0xe2,0xa5,0xe5,0xe1,0x94,
+	0xe5,0x10,0x08,0x05,0xff,0xe8,0x8d,0x93,0x00,0x05,0xff,0xe8,0x8f,0x8a,0x00,0xd3,
+	0x18,0xe2,0x14,0xe6,0xe1,0x03,0xe6,0x10,0x09,0x05,0xff,0xf0,0xa6,0xbe,0xb1,0x00,
+	0x05,0xff,0xf0,0xa7,0x83,0x92,0x00,0xd2,0x13,0xe1,0x2c,0xe6,0x10,0x08,0x05,0xff,
+	0xe8,0x9a,0x88,0x00,0x05,0xff,0xe8,0x9c,0x8e,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,
+	0xe8,0x9c,0xa8,0x00,0x05,0xff,0xe8,0x9d,0xab,0x00,0x10,0x08,0x05,0xff,0xe8,0x9e,
+	0x86,0x00,0x05,0xff,0xe4,0xb5,0x97,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+	/* nfdicf_c0100 */
+	0xd7,0xb0,0x56,0x04,0x01,0x00,0x95,0xa8,0xd4,0x5e,0xd3,0x2e,0xd2,0x16,0xd1,0x0a,
+	0x10,0x04,0x01,0x00,0x01,0xff,0x61,0x00,0x10,0x06,0x01,0xff,0x62,0x00,0x01,0xff,
+	0x63,0x00,0xd1,0x0c,0x10,0x06,0x01,0xff,0x64,0x00,0x01,0xff,0x65,0x00,0x10,0x06,
+	0x01,0xff,0x66,0x00,0x01,0xff,0x67,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x06,0x01,0xff,
+	0x68,0x00,0x01,0xff,0x69,0x00,0x10,0x06,0x01,0xff,0x6a,0x00,0x01,0xff,0x6b,0x00,
+	0xd1,0x0c,0x10,0x06,0x01,0xff,0x6c,0x00,0x01,0xff,0x6d,0x00,0x10,0x06,0x01,0xff,
+	0x6e,0x00,0x01,0xff,0x6f,0x00,0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x06,0x01,0xff,
+	0x70,0x00,0x01,0xff,0x71,0x00,0x10,0x06,0x01,0xff,0x72,0x00,0x01,0xff,0x73,0x00,
+	0xd1,0x0c,0x10,0x06,0x01,0xff,0x74,0x00,0x01,0xff,0x75,0x00,0x10,0x06,0x01,0xff,
+	0x76,0x00,0x01,0xff,0x77,0x00,0x92,0x16,0xd1,0x0c,0x10,0x06,0x01,0xff,0x78,0x00,
+	0x01,0xff,0x79,0x00,0x10,0x06,0x01,0xff,0x7a,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
+	0xc6,0xe5,0xf9,0x14,0xe4,0x6f,0x0d,0xe3,0x39,0x08,0xe2,0x22,0x01,0xc1,0xd0,0x24,
+	0xcf,0x86,0x55,0x04,0x01,0x00,0xd4,0x07,0x63,0xd8,0x43,0x01,0x00,0x93,0x13,0x52,
+	0x04,0x01,0x00,0x91,0x0b,0x10,0x04,0x01,0x00,0x01,0xff,0xce,0xbc,0x00,0x01,0x00,
+	0x01,0x00,0xcf,0x86,0xe5,0xb3,0x44,0xd4,0x7f,0xd3,0x3f,0xd2,0x20,0xd1,0x10,0x10,
+	0x08,0x01,0xff,0x61,0xcc,0x80,0x00,0x01,0xff,0x61,0xcc,0x81,0x00,0x10,0x08,0x01,
+	0xff,0x61,0xcc,0x82,0x00,0x01,0xff,0x61,0xcc,0x83,0x00,0xd1,0x10,0x10,0x08,0x01,
+	0xff,0x61,0xcc,0x88,0x00,0x01,0xff,0x61,0xcc,0x8a,0x00,0x10,0x07,0x01,0xff,0xc3,
+	0xa6,0x00,0x01,0xff,0x63,0xcc,0xa7,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,
+	0x65,0xcc,0x80,0x00,0x01,0xff,0x65,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x65,0xcc,
+	0x82,0x00,0x01,0xff,0x65,0xcc,0x88,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x69,0xcc,
+	0x80,0x00,0x01,0xff,0x69,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x69,0xcc,0x82,0x00,
+	0x01,0xff,0x69,0xcc,0x88,0x00,0xd3,0x3b,0xd2,0x1f,0xd1,0x0f,0x10,0x07,0x01,0xff,
+	0xc3,0xb0,0x00,0x01,0xff,0x6e,0xcc,0x83,0x00,0x10,0x08,0x01,0xff,0x6f,0xcc,0x80,
+	0x00,0x01,0xff,0x6f,0xcc,0x81,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x6f,0xcc,0x82,
+	0x00,0x01,0xff,0x6f,0xcc,0x83,0x00,0x10,0x08,0x01,0xff,0x6f,0xcc,0x88,0x00,0x01,
+	0x00,0xd2,0x1f,0xd1,0x0f,0x10,0x07,0x01,0xff,0xc3,0xb8,0x00,0x01,0xff,0x75,0xcc,
+	0x80,0x00,0x10,0x08,0x01,0xff,0x75,0xcc,0x81,0x00,0x01,0xff,0x75,0xcc,0x82,0x00,
+	0xd1,0x10,0x10,0x08,0x01,0xff,0x75,0xcc,0x88,0x00,0x01,0xff,0x79,0xcc,0x81,0x00,
+	0x10,0x07,0x01,0xff,0xc3,0xbe,0x00,0x01,0xff,0x73,0x73,0x00,0xe1,0xd4,0x03,0xe0,
+	0xeb,0x01,0xcf,0x86,0xd5,0xfb,0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,
+	0x01,0xff,0x61,0xcc,0x84,0x00,0x01,0xff,0x61,0xcc,0x84,0x00,0x10,0x08,0x01,0xff,
+	0x61,0xcc,0x86,0x00,0x01,0xff,0x61,0xcc,0x86,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,
+	0x61,0xcc,0xa8,0x00,0x01,0xff,0x61,0xcc,0xa8,0x00,0x10,0x08,0x01,0xff,0x63,0xcc,
+	0x81,0x00,0x01,0xff,0x63,0xcc,0x81,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,
+	0x63,0xcc,0x82,0x00,0x01,0xff,0x63,0xcc,0x82,0x00,0x10,0x08,0x01,0xff,0x63,0xcc,
+	0x87,0x00,0x01,0xff,0x63,0xcc,0x87,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x63,0xcc,
+	0x8c,0x00,0x01,0xff,0x63,0xcc,0x8c,0x00,0x10,0x08,0x01,0xff,0x64,0xcc,0x8c,0x00,
+	0x01,0xff,0x64,0xcc,0x8c,0x00,0xd3,0x3b,0xd2,0x1b,0xd1,0x0b,0x10,0x07,0x01,0xff,
+	0xc4,0x91,0x00,0x01,0x00,0x10,0x08,0x01,0xff,0x65,0xcc,0x84,0x00,0x01,0xff,0x65,
+	0xcc,0x84,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x65,0xcc,0x86,0x00,0x01,0xff,0x65,
+	0xcc,0x86,0x00,0x10,0x08,0x01,0xff,0x65,0xcc,0x87,0x00,0x01,0xff,0x65,0xcc,0x87,
+	0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x65,0xcc,0xa8,0x00,0x01,0xff,0x65,
+	0xcc,0xa8,0x00,0x10,0x08,0x01,0xff,0x65,0xcc,0x8c,0x00,0x01,0xff,0x65,0xcc,0x8c,
+	0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x67,0xcc,0x82,0x00,0x01,0xff,0x67,0xcc,0x82,
+	0x00,0x10,0x08,0x01,0xff,0x67,0xcc,0x86,0x00,0x01,0xff,0x67,0xcc,0x86,0x00,0xd4,
+	0x7b,0xd3,0x3b,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x67,0xcc,0x87,0x00,0x01,
+	0xff,0x67,0xcc,0x87,0x00,0x10,0x08,0x01,0xff,0x67,0xcc,0xa7,0x00,0x01,0xff,0x67,
+	0xcc,0xa7,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x68,0xcc,0x82,0x00,0x01,0xff,0x68,
+	0xcc,0x82,0x00,0x10,0x07,0x01,0xff,0xc4,0xa7,0x00,0x01,0x00,0xd2,0x20,0xd1,0x10,
+	0x10,0x08,0x01,0xff,0x69,0xcc,0x83,0x00,0x01,0xff,0x69,0xcc,0x83,0x00,0x10,0x08,
+	0x01,0xff,0x69,0xcc,0x84,0x00,0x01,0xff,0x69,0xcc,0x84,0x00,0xd1,0x10,0x10,0x08,
+	0x01,0xff,0x69,0xcc,0x86,0x00,0x01,0xff,0x69,0xcc,0x86,0x00,0x10,0x08,0x01,0xff,
+	0x69,0xcc,0xa8,0x00,0x01,0xff,0x69,0xcc,0xa8,0x00,0xd3,0x37,0xd2,0x17,0xd1,0x0c,
+	0x10,0x08,0x01,0xff,0x69,0xcc,0x87,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xc4,0xb3,
+	0x00,0x01,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x6a,0xcc,0x82,0x00,0x01,0xff,0x6a,
+	0xcc,0x82,0x00,0x10,0x08,0x01,0xff,0x6b,0xcc,0xa7,0x00,0x01,0xff,0x6b,0xcc,0xa7,
+	0x00,0xd2,0x1c,0xd1,0x0c,0x10,0x04,0x01,0x00,0x01,0xff,0x6c,0xcc,0x81,0x00,0x10,
+	0x08,0x01,0xff,0x6c,0xcc,0x81,0x00,0x01,0xff,0x6c,0xcc,0xa7,0x00,0xd1,0x10,0x10,
+	0x08,0x01,0xff,0x6c,0xcc,0xa7,0x00,0x01,0xff,0x6c,0xcc,0x8c,0x00,0x10,0x08,0x01,
+	0xff,0x6c,0xcc,0x8c,0x00,0x01,0xff,0xc5,0x80,0x00,0xcf,0x86,0xd5,0xed,0xd4,0x72,
+	0xd3,0x37,0xd2,0x17,0xd1,0x0b,0x10,0x04,0x01,0x00,0x01,0xff,0xc5,0x82,0x00,0x10,
+	0x04,0x01,0x00,0x01,0xff,0x6e,0xcc,0x81,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x6e,
+	0xcc,0x81,0x00,0x01,0xff,0x6e,0xcc,0xa7,0x00,0x10,0x08,0x01,0xff,0x6e,0xcc,0xa7,
+	0x00,0x01,0xff,0x6e,0xcc,0x8c,0x00,0xd2,0x1b,0xd1,0x10,0x10,0x08,0x01,0xff,0x6e,
+	0xcc,0x8c,0x00,0x01,0xff,0xca,0xbc,0x6e,0x00,0x10,0x07,0x01,0xff,0xc5,0x8b,0x00,
+	0x01,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x6f,0xcc,0x84,0x00,0x01,0xff,0x6f,0xcc,
+	0x84,0x00,0x10,0x08,0x01,0xff,0x6f,0xcc,0x86,0x00,0x01,0xff,0x6f,0xcc,0x86,0x00,
+	0xd3,0x3b,0xd2,0x1b,0xd1,0x10,0x10,0x08,0x01,0xff,0x6f,0xcc,0x8b,0x00,0x01,0xff,
+	0x6f,0xcc,0x8b,0x00,0x10,0x07,0x01,0xff,0xc5,0x93,0x00,0x01,0x00,0xd1,0x10,0x10,
+	0x08,0x01,0xff,0x72,0xcc,0x81,0x00,0x01,0xff,0x72,0xcc,0x81,0x00,0x10,0x08,0x01,
+	0xff,0x72,0xcc,0xa7,0x00,0x01,0xff,0x72,0xcc,0xa7,0x00,0xd2,0x20,0xd1,0x10,0x10,
+	0x08,0x01,0xff,0x72,0xcc,0x8c,0x00,0x01,0xff,0x72,0xcc,0x8c,0x00,0x10,0x08,0x01,
+	0xff,0x73,0xcc,0x81,0x00,0x01,0xff,0x73,0xcc,0x81,0x00,0xd1,0x10,0x10,0x08,0x01,
+	0xff,0x73,0xcc,0x82,0x00,0x01,0xff,0x73,0xcc,0x82,0x00,0x10,0x08,0x01,0xff,0x73,
+	0xcc,0xa7,0x00,0x01,0xff,0x73,0xcc,0xa7,0x00,0xd4,0x7b,0xd3,0x3b,0xd2,0x20,0xd1,
+	0x10,0x10,0x08,0x01,0xff,0x73,0xcc,0x8c,0x00,0x01,0xff,0x73,0xcc,0x8c,0x00,0x10,
+	0x08,0x01,0xff,0x74,0xcc,0xa7,0x00,0x01,0xff,0x74,0xcc,0xa7,0x00,0xd1,0x10,0x10,
+	0x08,0x01,0xff,0x74,0xcc,0x8c,0x00,0x01,0xff,0x74,0xcc,0x8c,0x00,0x10,0x07,0x01,
+	0xff,0xc5,0xa7,0x00,0x01,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x75,0xcc,
+	0x83,0x00,0x01,0xff,0x75,0xcc,0x83,0x00,0x10,0x08,0x01,0xff,0x75,0xcc,0x84,0x00,
+	0x01,0xff,0x75,0xcc,0x84,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x75,0xcc,0x86,0x00,
+	0x01,0xff,0x75,0xcc,0x86,0x00,0x10,0x08,0x01,0xff,0x75,0xcc,0x8a,0x00,0x01,0xff,
+	0x75,0xcc,0x8a,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x75,0xcc,
+	0x8b,0x00,0x01,0xff,0x75,0xcc,0x8b,0x00,0x10,0x08,0x01,0xff,0x75,0xcc,0xa8,0x00,
+	0x01,0xff,0x75,0xcc,0xa8,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x77,0xcc,0x82,0x00,
+	0x01,0xff,0x77,0xcc,0x82,0x00,0x10,0x08,0x01,0xff,0x79,0xcc,0x82,0x00,0x01,0xff,
+	0x79,0xcc,0x82,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x79,0xcc,0x88,0x00,
+	0x01,0xff,0x7a,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x7a,0xcc,0x81,0x00,0x01,0xff,
+	0x7a,0xcc,0x87,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x7a,0xcc,0x87,0x00,0x01,0xff,
+	0x7a,0xcc,0x8c,0x00,0x10,0x08,0x01,0xff,0x7a,0xcc,0x8c,0x00,0x01,0xff,0x73,0x00,
+	0xe0,0x65,0x01,0xcf,0x86,0xd5,0xb4,0xd4,0x5a,0xd3,0x2f,0xd2,0x16,0xd1,0x0b,0x10,
+	0x04,0x01,0x00,0x01,0xff,0xc9,0x93,0x00,0x10,0x07,0x01,0xff,0xc6,0x83,0x00,0x01,
+	0x00,0xd1,0x0b,0x10,0x07,0x01,0xff,0xc6,0x85,0x00,0x01,0x00,0x10,0x07,0x01,0xff,
+	0xc9,0x94,0x00,0x01,0xff,0xc6,0x88,0x00,0xd2,0x19,0xd1,0x0b,0x10,0x04,0x01,0x00,
+	0x01,0xff,0xc9,0x96,0x00,0x10,0x07,0x01,0xff,0xc9,0x97,0x00,0x01,0xff,0xc6,0x8c,
+	0x00,0x51,0x04,0x01,0x00,0x10,0x07,0x01,0xff,0xc7,0x9d,0x00,0x01,0xff,0xc9,0x99,
+	0x00,0xd3,0x32,0xd2,0x19,0xd1,0x0e,0x10,0x07,0x01,0xff,0xc9,0x9b,0x00,0x01,0xff,
+	0xc6,0x92,0x00,0x10,0x04,0x01,0x00,0x01,0xff,0xc9,0xa0,0x00,0xd1,0x0b,0x10,0x07,
+	0x01,0xff,0xc9,0xa3,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xc9,0xa9,0x00,0x01,0xff,
+	0xc9,0xa8,0x00,0xd2,0x0f,0x91,0x0b,0x10,0x07,0x01,0xff,0xc6,0x99,0x00,0x01,0x00,
+	0x01,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff,0xc9,0xaf,0x00,0x01,0xff,0xc9,0xb2,0x00,
+	0x10,0x04,0x01,0x00,0x01,0xff,0xc9,0xb5,0x00,0xd4,0x5d,0xd3,0x34,0xd2,0x1b,0xd1,
+	0x10,0x10,0x08,0x01,0xff,0x6f,0xcc,0x9b,0x00,0x01,0xff,0x6f,0xcc,0x9b,0x00,0x10,
+	0x07,0x01,0xff,0xc6,0xa3,0x00,0x01,0x00,0xd1,0x0b,0x10,0x07,0x01,0xff,0xc6,0xa5,
+	0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xca,0x80,0x00,0x01,0xff,0xc6,0xa8,0x00,0xd2,
+	0x0f,0x91,0x0b,0x10,0x04,0x01,0x00,0x01,0xff,0xca,0x83,0x00,0x01,0x00,0xd1,0x0b,
+	0x10,0x07,0x01,0xff,0xc6,0xad,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xca,0x88,0x00,
+	0x01,0xff,0x75,0xcc,0x9b,0x00,0xd3,0x33,0xd2,0x1d,0xd1,0x0f,0x10,0x08,0x01,0xff,
+	0x75,0xcc,0x9b,0x00,0x01,0xff,0xca,0x8a,0x00,0x10,0x07,0x01,0xff,0xca,0x8b,0x00,
+	0x01,0xff,0xc6,0xb4,0x00,0xd1,0x0b,0x10,0x04,0x01,0x00,0x01,0xff,0xc6,0xb6,0x00,
+	0x10,0x04,0x01,0x00,0x01,0xff,0xca,0x92,0x00,0xd2,0x0f,0x91,0x0b,0x10,0x07,0x01,
+	0xff,0xc6,0xb9,0x00,0x01,0x00,0x01,0x00,0x91,0x0b,0x10,0x07,0x01,0xff,0xc6,0xbd,
+	0x00,0x01,0x00,0x01,0x00,0xcf,0x86,0xd5,0xd4,0xd4,0x44,0xd3,0x16,0x52,0x04,0x01,
+	0x00,0x51,0x07,0x01,0xff,0xc7,0x86,0x00,0x10,0x04,0x01,0x00,0x01,0xff,0xc7,0x89,
+	0x00,0xd2,0x12,0x91,0x0b,0x10,0x07,0x01,0xff,0xc7,0x89,0x00,0x01,0x00,0x01,0xff,
+	0xc7,0x8c,0x00,0xd1,0x0c,0x10,0x04,0x01,0x00,0x01,0xff,0x61,0xcc,0x8c,0x00,0x10,
+	0x08,0x01,0xff,0x61,0xcc,0x8c,0x00,0x01,0xff,0x69,0xcc,0x8c,0x00,0xd3,0x46,0xd2,
+	0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x69,0xcc,0x8c,0x00,0x01,0xff,0x6f,0xcc,0x8c,
+	0x00,0x10,0x08,0x01,0xff,0x6f,0xcc,0x8c,0x00,0x01,0xff,0x75,0xcc,0x8c,0x00,0xd1,
+	0x12,0x10,0x08,0x01,0xff,0x75,0xcc,0x8c,0x00,0x01,0xff,0x75,0xcc,0x88,0xcc,0x84,
+	0x00,0x10,0x0a,0x01,0xff,0x75,0xcc,0x88,0xcc,0x84,0x00,0x01,0xff,0x75,0xcc,0x88,
+	0xcc,0x81,0x00,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x75,0xcc,0x88,0xcc,0x81,
+	0x00,0x01,0xff,0x75,0xcc,0x88,0xcc,0x8c,0x00,0x10,0x0a,0x01,0xff,0x75,0xcc,0x88,
+	0xcc,0x8c,0x00,0x01,0xff,0x75,0xcc,0x88,0xcc,0x80,0x00,0xd1,0x0e,0x10,0x0a,0x01,
+	0xff,0x75,0xcc,0x88,0xcc,0x80,0x00,0x01,0x00,0x10,0x0a,0x01,0xff,0x61,0xcc,0x88,
+	0xcc,0x84,0x00,0x01,0xff,0x61,0xcc,0x88,0xcc,0x84,0x00,0xd4,0x87,0xd3,0x41,0xd2,
+	0x26,0xd1,0x14,0x10,0x0a,0x01,0xff,0x61,0xcc,0x87,0xcc,0x84,0x00,0x01,0xff,0x61,
+	0xcc,0x87,0xcc,0x84,0x00,0x10,0x09,0x01,0xff,0xc3,0xa6,0xcc,0x84,0x00,0x01,0xff,
+	0xc3,0xa6,0xcc,0x84,0x00,0xd1,0x0b,0x10,0x07,0x01,0xff,0xc7,0xa5,0x00,0x01,0x00,
+	0x10,0x08,0x01,0xff,0x67,0xcc,0x8c,0x00,0x01,0xff,0x67,0xcc,0x8c,0x00,0xd2,0x20,
+	0xd1,0x10,0x10,0x08,0x01,0xff,0x6b,0xcc,0x8c,0x00,0x01,0xff,0x6b,0xcc,0x8c,0x00,
+	0x10,0x08,0x01,0xff,0x6f,0xcc,0xa8,0x00,0x01,0xff,0x6f,0xcc,0xa8,0x00,0xd1,0x14,
+	0x10,0x0a,0x01,0xff,0x6f,0xcc,0xa8,0xcc,0x84,0x00,0x01,0xff,0x6f,0xcc,0xa8,0xcc,
+	0x84,0x00,0x10,0x09,0x01,0xff,0xca,0x92,0xcc,0x8c,0x00,0x01,0xff,0xca,0x92,0xcc,
+	0x8c,0x00,0xd3,0x38,0xd2,0x1a,0xd1,0x0f,0x10,0x08,0x01,0xff,0x6a,0xcc,0x8c,0x00,
+	0x01,0xff,0xc7,0xb3,0x00,0x10,0x07,0x01,0xff,0xc7,0xb3,0x00,0x01,0x00,0xd1,0x10,
+	0x10,0x08,0x01,0xff,0x67,0xcc,0x81,0x00,0x01,0xff,0x67,0xcc,0x81,0x00,0x10,0x07,
+	0x04,0xff,0xc6,0x95,0x00,0x04,0xff,0xc6,0xbf,0x00,0xd2,0x24,0xd1,0x10,0x10,0x08,
+	0x04,0xff,0x6e,0xcc,0x80,0x00,0x04,0xff,0x6e,0xcc,0x80,0x00,0x10,0x0a,0x01,0xff,
+	0x61,0xcc,0x8a,0xcc,0x81,0x00,0x01,0xff,0x61,0xcc,0x8a,0xcc,0x81,0x00,0xd1,0x12,
+	0x10,0x09,0x01,0xff,0xc3,0xa6,0xcc,0x81,0x00,0x01,0xff,0xc3,0xa6,0xcc,0x81,0x00,
+	0x10,0x09,0x01,0xff,0xc3,0xb8,0xcc,0x81,0x00,0x01,0xff,0xc3,0xb8,0xcc,0x81,0x00,
+	0xe2,0x31,0x02,0xe1,0xc3,0x44,0xe0,0xc8,0x01,0xcf,0x86,0xd5,0xfb,0xd4,0x80,0xd3,
+	0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x61,0xcc,0x8f,0x00,0x01,0xff,0x61,
+	0xcc,0x8f,0x00,0x10,0x08,0x01,0xff,0x61,0xcc,0x91,0x00,0x01,0xff,0x61,0xcc,0x91,
+	0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x65,0xcc,0x8f,0x00,0x01,0xff,0x65,0xcc,0x8f,
+	0x00,0x10,0x08,0x01,0xff,0x65,0xcc,0x91,0x00,0x01,0xff,0x65,0xcc,0x91,0x00,0xd2,
+	0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x69,0xcc,0x8f,0x00,0x01,0xff,0x69,0xcc,0x8f,
+	0x00,0x10,0x08,0x01,0xff,0x69,0xcc,0x91,0x00,0x01,0xff,0x69,0xcc,0x91,0x00,0xd1,
+	0x10,0x10,0x08,0x01,0xff,0x6f,0xcc,0x8f,0x00,0x01,0xff,0x6f,0xcc,0x8f,0x00,0x10,
+	0x08,0x01,0xff,0x6f,0xcc,0x91,0x00,0x01,0xff,0x6f,0xcc,0x91,0x00,0xd3,0x40,0xd2,
+	0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x72,0xcc,0x8f,0x00,0x01,0xff,0x72,0xcc,0x8f,
+	0x00,0x10,0x08,0x01,0xff,0x72,0xcc,0x91,0x00,0x01,0xff,0x72,0xcc,0x91,0x00,0xd1,
+	0x10,0x10,0x08,0x01,0xff,0x75,0xcc,0x8f,0x00,0x01,0xff,0x75,0xcc,0x8f,0x00,0x10,
+	0x08,0x01,0xff,0x75,0xcc,0x91,0x00,0x01,0xff,0x75,0xcc,0x91,0x00,0xd2,0x20,0xd1,
+	0x10,0x10,0x08,0x04,0xff,0x73,0xcc,0xa6,0x00,0x04,0xff,0x73,0xcc,0xa6,0x00,0x10,
+	0x08,0x04,0xff,0x74,0xcc,0xa6,0x00,0x04,0xff,0x74,0xcc,0xa6,0x00,0xd1,0x0b,0x10,
+	0x07,0x04,0xff,0xc8,0x9d,0x00,0x04,0x00,0x10,0x08,0x04,0xff,0x68,0xcc,0x8c,0x00,
+	0x04,0xff,0x68,0xcc,0x8c,0x00,0xd4,0x79,0xd3,0x31,0xd2,0x16,0xd1,0x0b,0x10,0x07,
+	0x06,0xff,0xc6,0x9e,0x00,0x07,0x00,0x10,0x07,0x04,0xff,0xc8,0xa3,0x00,0x04,0x00,
+	0xd1,0x0b,0x10,0x07,0x04,0xff,0xc8,0xa5,0x00,0x04,0x00,0x10,0x08,0x04,0xff,0x61,
+	0xcc,0x87,0x00,0x04,0xff,0x61,0xcc,0x87,0x00,0xd2,0x24,0xd1,0x10,0x10,0x08,0x04,
+	0xff,0x65,0xcc,0xa7,0x00,0x04,0xff,0x65,0xcc,0xa7,0x00,0x10,0x0a,0x04,0xff,0x6f,
+	0xcc,0x88,0xcc,0x84,0x00,0x04,0xff,0x6f,0xcc,0x88,0xcc,0x84,0x00,0xd1,0x14,0x10,
+	0x0a,0x04,0xff,0x6f,0xcc,0x83,0xcc,0x84,0x00,0x04,0xff,0x6f,0xcc,0x83,0xcc,0x84,
+	0x00,0x10,0x08,0x04,0xff,0x6f,0xcc,0x87,0x00,0x04,0xff,0x6f,0xcc,0x87,0x00,0xd3,
+	0x27,0xe2,0x21,0x43,0xd1,0x14,0x10,0x0a,0x04,0xff,0x6f,0xcc,0x87,0xcc,0x84,0x00,
+	0x04,0xff,0x6f,0xcc,0x87,0xcc,0x84,0x00,0x10,0x08,0x04,0xff,0x79,0xcc,0x84,0x00,
+	0x04,0xff,0x79,0xcc,0x84,0x00,0xd2,0x13,0x51,0x04,0x08,0x00,0x10,0x08,0x08,0xff,
+	0xe2,0xb1,0xa5,0x00,0x08,0xff,0xc8,0xbc,0x00,0xd1,0x0b,0x10,0x04,0x08,0x00,0x08,
+	0xff,0xc6,0x9a,0x00,0x10,0x08,0x08,0xff,0xe2,0xb1,0xa6,0x00,0x08,0x00,0xcf,0x86,
+	0x95,0x5f,0x94,0x5b,0xd3,0x2f,0xd2,0x16,0xd1,0x0b,0x10,0x04,0x08,0x00,0x08,0xff,
+	0xc9,0x82,0x00,0x10,0x04,0x09,0x00,0x09,0xff,0xc6,0x80,0x00,0xd1,0x0e,0x10,0x07,
+	0x09,0xff,0xca,0x89,0x00,0x09,0xff,0xca,0x8c,0x00,0x10,0x07,0x09,0xff,0xc9,0x87,
+	0x00,0x09,0x00,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x09,0xff,0xc9,0x89,0x00,0x09,0x00,
+	0x10,0x07,0x09,0xff,0xc9,0x8b,0x00,0x09,0x00,0xd1,0x0b,0x10,0x07,0x09,0xff,0xc9,
+	0x8d,0x00,0x09,0x00,0x10,0x07,0x09,0xff,0xc9,0x8f,0x00,0x09,0x00,0x01,0x00,0x01,
+	0x00,0xd1,0x8b,0xd0,0x0c,0xcf,0x86,0xe5,0x10,0x43,0x64,0xef,0x42,0x01,0xe6,0xcf,
+	0x86,0xd5,0x2a,0xe4,0x99,0x43,0xe3,0x7f,0x43,0xd2,0x11,0xe1,0x5e,0x43,0x10,0x07,
+	0x01,0xff,0xcc,0x80,0x00,0x01,0xff,0xcc,0x81,0x00,0xe1,0x65,0x43,0x10,0x09,0x01,
+	0xff,0xcc,0x88,0xcc,0x81,0x00,0x01,0xff,0xce,0xb9,0x00,0xd4,0x0f,0x93,0x0b,0x92,
+	0x07,0x61,0xab,0x43,0x01,0xea,0x06,0xe6,0x06,0xe6,0xd3,0x2c,0xd2,0x16,0xd1,0x0b,
+	0x10,0x07,0x0a,0xff,0xcd,0xb1,0x00,0x0a,0x00,0x10,0x07,0x0a,0xff,0xcd,0xb3,0x00,
+	0x0a,0x00,0xd1,0x0b,0x10,0x07,0x01,0xff,0xca,0xb9,0x00,0x01,0x00,0x10,0x07,0x0a,
+	0xff,0xcd,0xb7,0x00,0x0a,0x00,0xd2,0x07,0x61,0x97,0x43,0x00,0x00,0x51,0x04,0x09,
+	0x00,0x10,0x06,0x01,0xff,0x3b,0x00,0x10,0xff,0xcf,0xb3,0x00,0xe0,0x31,0x01,0xcf,
+	0x86,0xd5,0xd3,0xd4,0x5f,0xd3,0x21,0x52,0x04,0x00,0x00,0xd1,0x0d,0x10,0x04,0x01,
+	0x00,0x01,0xff,0xc2,0xa8,0xcc,0x81,0x00,0x10,0x09,0x01,0xff,0xce,0xb1,0xcc,0x81,
+	0x00,0x01,0xff,0xc2,0xb7,0x00,0xd2,0x1f,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb5,
+	0xcc,0x81,0x00,0x01,0xff,0xce,0xb7,0xcc,0x81,0x00,0x10,0x09,0x01,0xff,0xce,0xb9,
+	0xcc,0x81,0x00,0x00,0x00,0xd1,0x0d,0x10,0x09,0x01,0xff,0xce,0xbf,0xcc,0x81,0x00,
+	0x00,0x00,0x10,0x09,0x01,0xff,0xcf,0x85,0xcc,0x81,0x00,0x01,0xff,0xcf,0x89,0xcc,
+	0x81,0x00,0xd3,0x3c,0xd2,0x20,0xd1,0x12,0x10,0x0b,0x01,0xff,0xce,0xb9,0xcc,0x88,
+	0xcc,0x81,0x00,0x01,0xff,0xce,0xb1,0x00,0x10,0x07,0x01,0xff,0xce,0xb2,0x00,0x01,
+	0xff,0xce,0xb3,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff,0xce,0xb4,0x00,0x01,0xff,0xce,
+	0xb5,0x00,0x10,0x07,0x01,0xff,0xce,0xb6,0x00,0x01,0xff,0xce,0xb7,0x00,0xd2,0x1c,
+	0xd1,0x0e,0x10,0x07,0x01,0xff,0xce,0xb8,0x00,0x01,0xff,0xce,0xb9,0x00,0x10,0x07,
+	0x01,0xff,0xce,0xba,0x00,0x01,0xff,0xce,0xbb,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff,
+	0xce,0xbc,0x00,0x01,0xff,0xce,0xbd,0x00,0x10,0x07,0x01,0xff,0xce,0xbe,0x00,0x01,
+	0xff,0xce,0xbf,0x00,0xe4,0x85,0x43,0xd3,0x35,0xd2,0x19,0xd1,0x0e,0x10,0x07,0x01,
+	0xff,0xcf,0x80,0x00,0x01,0xff,0xcf,0x81,0x00,0x10,0x04,0x00,0x00,0x01,0xff,0xcf,
+	0x83,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff,0xcf,0x84,0x00,0x01,0xff,0xcf,0x85,0x00,
+	0x10,0x07,0x01,0xff,0xcf,0x86,0x00,0x01,0xff,0xcf,0x87,0x00,0xe2,0x2b,0x43,0xd1,
+	0x0e,0x10,0x07,0x01,0xff,0xcf,0x88,0x00,0x01,0xff,0xcf,0x89,0x00,0x10,0x09,0x01,
+	0xff,0xce,0xb9,0xcc,0x88,0x00,0x01,0xff,0xcf,0x85,0xcc,0x88,0x00,0xcf,0x86,0xd5,
+	0x94,0xd4,0x3c,0xd3,0x13,0x92,0x0f,0x51,0x04,0x01,0x00,0x10,0x07,0x01,0xff,0xcf,
+	0x83,0x00,0x01,0x00,0x01,0x00,0xd2,0x07,0x61,0x3a,0x43,0x01,0x00,0xd1,0x12,0x10,
+	0x09,0x01,0xff,0xce,0xbf,0xcc,0x81,0x00,0x01,0xff,0xcf,0x85,0xcc,0x81,0x00,0x10,
+	0x09,0x01,0xff,0xcf,0x89,0xcc,0x81,0x00,0x0a,0xff,0xcf,0x97,0x00,0xd3,0x2c,0xd2,
+	0x11,0xe1,0x46,0x43,0x10,0x07,0x01,0xff,0xce,0xb2,0x00,0x01,0xff,0xce,0xb8,0x00,
+	0xd1,0x10,0x10,0x09,0x01,0xff,0xcf,0x92,0xcc,0x88,0x00,0x01,0xff,0xcf,0x86,0x00,
+	0x10,0x07,0x01,0xff,0xcf,0x80,0x00,0x04,0x00,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x06,
+	0xff,0xcf,0x99,0x00,0x06,0x00,0x10,0x07,0x01,0xff,0xcf,0x9b,0x00,0x04,0x00,0xd1,
+	0x0b,0x10,0x07,0x01,0xff,0xcf,0x9d,0x00,0x04,0x00,0x10,0x07,0x01,0xff,0xcf,0x9f,
+	0x00,0x04,0x00,0xd4,0x58,0xd3,0x2c,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x01,0xff,0xcf,
+	0xa1,0x00,0x04,0x00,0x10,0x07,0x01,0xff,0xcf,0xa3,0x00,0x01,0x00,0xd1,0x0b,0x10,
+	0x07,0x01,0xff,0xcf,0xa5,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xcf,0xa7,0x00,0x01,
+	0x00,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x01,0xff,0xcf,0xa9,0x00,0x01,0x00,0x10,0x07,
+	0x01,0xff,0xcf,0xab,0x00,0x01,0x00,0xd1,0x0b,0x10,0x07,0x01,0xff,0xcf,0xad,0x00,
+	0x01,0x00,0x10,0x07,0x01,0xff,0xcf,0xaf,0x00,0x01,0x00,0xd3,0x2b,0xd2,0x12,0x91,
+	0x0e,0x10,0x07,0x01,0xff,0xce,0xba,0x00,0x01,0xff,0xcf,0x81,0x00,0x01,0x00,0xd1,
+	0x0e,0x10,0x07,0x05,0xff,0xce,0xb8,0x00,0x05,0xff,0xce,0xb5,0x00,0x10,0x04,0x06,
+	0x00,0x07,0xff,0xcf,0xb8,0x00,0xd2,0x16,0xd1,0x0b,0x10,0x04,0x07,0x00,0x07,0xff,
+	0xcf,0xb2,0x00,0x10,0x07,0x07,0xff,0xcf,0xbb,0x00,0x07,0x00,0xd1,0x0b,0x10,0x04,
+	0x08,0x00,0x08,0xff,0xcd,0xbb,0x00,0x10,0x07,0x08,0xff,0xcd,0xbc,0x00,0x08,0xff,
+	0xcd,0xbd,0x00,0xe3,0xed,0x46,0xe2,0x3d,0x05,0xe1,0x27,0x02,0xe0,0x66,0x01,0xcf,
+	0x86,0xd5,0xf0,0xd4,0x7e,0xd3,0x40,0xd2,0x22,0xd1,0x12,0x10,0x09,0x04,0xff,0xd0,
+	0xb5,0xcc,0x80,0x00,0x01,0xff,0xd0,0xb5,0xcc,0x88,0x00,0x10,0x07,0x01,0xff,0xd1,
+	0x92,0x00,0x01,0xff,0xd0,0xb3,0xcc,0x81,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd1,
+	0x94,0x00,0x01,0xff,0xd1,0x95,0x00,0x10,0x07,0x01,0xff,0xd1,0x96,0x00,0x01,0xff,
+	0xd1,0x96,0xcc,0x88,0x00,0xd2,0x1c,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd1,0x98,0x00,
+	0x01,0xff,0xd1,0x99,0x00,0x10,0x07,0x01,0xff,0xd1,0x9a,0x00,0x01,0xff,0xd1,0x9b,
+	0x00,0xd1,0x12,0x10,0x09,0x01,0xff,0xd0,0xba,0xcc,0x81,0x00,0x04,0xff,0xd0,0xb8,
+	0xcc,0x80,0x00,0x10,0x09,0x01,0xff,0xd1,0x83,0xcc,0x86,0x00,0x01,0xff,0xd1,0x9f,
+	0x00,0xd3,0x38,0xd2,0x1c,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd0,0xb0,0x00,0x01,0xff,
+	0xd0,0xb1,0x00,0x10,0x07,0x01,0xff,0xd0,0xb2,0x00,0x01,0xff,0xd0,0xb3,0x00,0xd1,
+	0x0e,0x10,0x07,0x01,0xff,0xd0,0xb4,0x00,0x01,0xff,0xd0,0xb5,0x00,0x10,0x07,0x01,
+	0xff,0xd0,0xb6,0x00,0x01,0xff,0xd0,0xb7,0x00,0xd2,0x1e,0xd1,0x10,0x10,0x07,0x01,
+	0xff,0xd0,0xb8,0x00,0x01,0xff,0xd0,0xb8,0xcc,0x86,0x00,0x10,0x07,0x01,0xff,0xd0,
+	0xba,0x00,0x01,0xff,0xd0,0xbb,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd0,0xbc,0x00,
+	0x01,0xff,0xd0,0xbd,0x00,0x10,0x07,0x01,0xff,0xd0,0xbe,0x00,0x01,0xff,0xd0,0xbf,
+	0x00,0xe4,0x25,0x42,0xd3,0x38,0xd2,0x1c,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd1,0x80,
+	0x00,0x01,0xff,0xd1,0x81,0x00,0x10,0x07,0x01,0xff,0xd1,0x82,0x00,0x01,0xff,0xd1,
+	0x83,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd1,0x84,0x00,0x01,0xff,0xd1,0x85,0x00,
+	0x10,0x07,0x01,0xff,0xd1,0x86,0x00,0x01,0xff,0xd1,0x87,0x00,0xd2,0x1c,0xd1,0x0e,
+	0x10,0x07,0x01,0xff,0xd1,0x88,0x00,0x01,0xff,0xd1,0x89,0x00,0x10,0x07,0x01,0xff,
+	0xd1,0x8a,0x00,0x01,0xff,0xd1,0x8b,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd1,0x8c,
+	0x00,0x01,0xff,0xd1,0x8d,0x00,0x10,0x07,0x01,0xff,0xd1,0x8e,0x00,0x01,0xff,0xd1,
+	0x8f,0x00,0xcf,0x86,0xd5,0x07,0x64,0xcf,0x41,0x01,0x00,0xd4,0x58,0xd3,0x2c,0xd2,
+	0x16,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd1,0xa1,0x00,0x01,0x00,0x10,0x07,0x01,0xff,
+	0xd1,0xa3,0x00,0x01,0x00,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd1,0xa5,0x00,0x01,0x00,
+	0x10,0x07,0x01,0xff,0xd1,0xa7,0x00,0x01,0x00,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x01,
+	0xff,0xd1,0xa9,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xd1,0xab,0x00,0x01,0x00,0xd1,
+	0x0b,0x10,0x07,0x01,0xff,0xd1,0xad,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xd1,0xaf,
+	0x00,0x01,0x00,0xd3,0x33,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd1,0xb1,0x00,
+	0x01,0x00,0x10,0x07,0x01,0xff,0xd1,0xb3,0x00,0x01,0x00,0xd1,0x0b,0x10,0x07,0x01,
+	0xff,0xd1,0xb5,0x00,0x01,0x00,0x10,0x09,0x01,0xff,0xd1,0xb5,0xcc,0x8f,0x00,0x01,
+	0xff,0xd1,0xb5,0xcc,0x8f,0x00,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd1,0xb9,
+	0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xd1,0xbb,0x00,0x01,0x00,0xd1,0x0b,0x10,0x07,
+	0x01,0xff,0xd1,0xbd,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xd1,0xbf,0x00,0x01,0x00,
+	0xe0,0x41,0x01,0xcf,0x86,0xd5,0x8e,0xd4,0x36,0xd3,0x11,0xe2,0x91,0x41,0xe1,0x88,
+	0x41,0x10,0x07,0x01,0xff,0xd2,0x81,0x00,0x01,0x00,0xd2,0x0f,0x51,0x04,0x04,0x00,
+	0x10,0x07,0x06,0xff,0xd2,0x8b,0x00,0x06,0x00,0xd1,0x0b,0x10,0x07,0x04,0xff,0xd2,
+	0x8d,0x00,0x04,0x00,0x10,0x07,0x04,0xff,0xd2,0x8f,0x00,0x04,0x00,0xd3,0x2c,0xd2,
+	0x16,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd2,0x91,0x00,0x01,0x00,0x10,0x07,0x01,0xff,
+	0xd2,0x93,0x00,0x01,0x00,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd2,0x95,0x00,0x01,0x00,
+	0x10,0x07,0x01,0xff,0xd2,0x97,0x00,0x01,0x00,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x01,
+	0xff,0xd2,0x99,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xd2,0x9b,0x00,0x01,0x00,0xd1,
+	0x0b,0x10,0x07,0x01,0xff,0xd2,0x9d,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xd2,0x9f,
+	0x00,0x01,0x00,0xd4,0x58,0xd3,0x2c,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd2,
+	0xa1,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xd2,0xa3,0x00,0x01,0x00,0xd1,0x0b,0x10,
+	0x07,0x01,0xff,0xd2,0xa5,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xd2,0xa7,0x00,0x01,
+	0x00,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd2,0xa9,0x00,0x01,0x00,0x10,0x07,
+	0x01,0xff,0xd2,0xab,0x00,0x01,0x00,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd2,0xad,0x00,
+	0x01,0x00,0x10,0x07,0x01,0xff,0xd2,0xaf,0x00,0x01,0x00,0xd3,0x2c,0xd2,0x16,0xd1,
+	0x0b,0x10,0x07,0x01,0xff,0xd2,0xb1,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xd2,0xb3,
+	0x00,0x01,0x00,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd2,0xb5,0x00,0x01,0x00,0x10,0x07,
+	0x01,0xff,0xd2,0xb7,0x00,0x01,0x00,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd2,
+	0xb9,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xd2,0xbb,0x00,0x01,0x00,0xd1,0x0b,0x10,
+	0x07,0x01,0xff,0xd2,0xbd,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xd2,0xbf,0x00,0x01,
+	0x00,0xcf,0x86,0xd5,0xdc,0xd4,0x5a,0xd3,0x36,0xd2,0x20,0xd1,0x10,0x10,0x07,0x01,
+	0xff,0xd3,0x8f,0x00,0x01,0xff,0xd0,0xb6,0xcc,0x86,0x00,0x10,0x09,0x01,0xff,0xd0,
+	0xb6,0xcc,0x86,0x00,0x01,0xff,0xd3,0x84,0x00,0xd1,0x0b,0x10,0x04,0x01,0x00,0x06,
+	0xff,0xd3,0x86,0x00,0x10,0x04,0x06,0x00,0x01,0xff,0xd3,0x88,0x00,0xd2,0x16,0xd1,
+	0x0b,0x10,0x04,0x01,0x00,0x06,0xff,0xd3,0x8a,0x00,0x10,0x04,0x06,0x00,0x01,0xff,
+	0xd3,0x8c,0x00,0xe1,0x69,0x40,0x10,0x04,0x01,0x00,0x06,0xff,0xd3,0x8e,0x00,0xd3,
+	0x41,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff,0xd0,0xb0,0xcc,0x86,0x00,0x01,0xff,
+	0xd0,0xb0,0xcc,0x86,0x00,0x10,0x09,0x01,0xff,0xd0,0xb0,0xcc,0x88,0x00,0x01,0xff,
+	0xd0,0xb0,0xcc,0x88,0x00,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd3,0x95,0x00,0x01,0x00,
+	0x10,0x09,0x01,0xff,0xd0,0xb5,0xcc,0x86,0x00,0x01,0xff,0xd0,0xb5,0xcc,0x86,0x00,
+	0xd2,0x1d,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd3,0x99,0x00,0x01,0x00,0x10,0x09,0x01,
+	0xff,0xd3,0x99,0xcc,0x88,0x00,0x01,0xff,0xd3,0x99,0xcc,0x88,0x00,0xd1,0x12,0x10,
+	0x09,0x01,0xff,0xd0,0xb6,0xcc,0x88,0x00,0x01,0xff,0xd0,0xb6,0xcc,0x88,0x00,0x10,
+	0x09,0x01,0xff,0xd0,0xb7,0xcc,0x88,0x00,0x01,0xff,0xd0,0xb7,0xcc,0x88,0x00,0xd4,
+	0x82,0xd3,0x41,0xd2,0x1d,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd3,0xa1,0x00,0x01,0x00,
+	0x10,0x09,0x01,0xff,0xd0,0xb8,0xcc,0x84,0x00,0x01,0xff,0xd0,0xb8,0xcc,0x84,0x00,
+	0xd1,0x12,0x10,0x09,0x01,0xff,0xd0,0xb8,0xcc,0x88,0x00,0x01,0xff,0xd0,0xb8,0xcc,
+	0x88,0x00,0x10,0x09,0x01,0xff,0xd0,0xbe,0xcc,0x88,0x00,0x01,0xff,0xd0,0xbe,0xcc,
+	0x88,0x00,0xd2,0x1d,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd3,0xa9,0x00,0x01,0x00,0x10,
+	0x09,0x01,0xff,0xd3,0xa9,0xcc,0x88,0x00,0x01,0xff,0xd3,0xa9,0xcc,0x88,0x00,0xd1,
+	0x12,0x10,0x09,0x04,0xff,0xd1,0x8d,0xcc,0x88,0x00,0x04,0xff,0xd1,0x8d,0xcc,0x88,
+	0x00,0x10,0x09,0x01,0xff,0xd1,0x83,0xcc,0x84,0x00,0x01,0xff,0xd1,0x83,0xcc,0x84,
+	0x00,0xd3,0x41,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff,0xd1,0x83,0xcc,0x88,0x00,
+	0x01,0xff,0xd1,0x83,0xcc,0x88,0x00,0x10,0x09,0x01,0xff,0xd1,0x83,0xcc,0x8b,0x00,
+	0x01,0xff,0xd1,0x83,0xcc,0x8b,0x00,0xd1,0x12,0x10,0x09,0x01,0xff,0xd1,0x87,0xcc,
+	0x88,0x00,0x01,0xff,0xd1,0x87,0xcc,0x88,0x00,0x10,0x07,0x08,0xff,0xd3,0xb7,0x00,
+	0x08,0x00,0xd2,0x1d,0xd1,0x12,0x10,0x09,0x01,0xff,0xd1,0x8b,0xcc,0x88,0x00,0x01,
+	0xff,0xd1,0x8b,0xcc,0x88,0x00,0x10,0x07,0x09,0xff,0xd3,0xbb,0x00,0x09,0x00,0xd1,
+	0x0b,0x10,0x07,0x09,0xff,0xd3,0xbd,0x00,0x09,0x00,0x10,0x07,0x09,0xff,0xd3,0xbf,
+	0x00,0x09,0x00,0xe1,0x26,0x02,0xe0,0x78,0x01,0xcf,0x86,0xd5,0xb0,0xd4,0x58,0xd3,
+	0x2c,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x06,0xff,0xd4,0x81,0x00,0x06,0x00,0x10,0x07,
+	0x06,0xff,0xd4,0x83,0x00,0x06,0x00,0xd1,0x0b,0x10,0x07,0x06,0xff,0xd4,0x85,0x00,
+	0x06,0x00,0x10,0x07,0x06,0xff,0xd4,0x87,0x00,0x06,0x00,0xd2,0x16,0xd1,0x0b,0x10,
+	0x07,0x06,0xff,0xd4,0x89,0x00,0x06,0x00,0x10,0x07,0x06,0xff,0xd4,0x8b,0x00,0x06,
+	0x00,0xd1,0x0b,0x10,0x07,0x06,0xff,0xd4,0x8d,0x00,0x06,0x00,0x10,0x07,0x06,0xff,
+	0xd4,0x8f,0x00,0x06,0x00,0xd3,0x2c,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x09,0xff,0xd4,
+	0x91,0x00,0x09,0x00,0x10,0x07,0x09,0xff,0xd4,0x93,0x00,0x09,0x00,0xd1,0x0b,0x10,
+	0x07,0x0a,0xff,0xd4,0x95,0x00,0x0a,0x00,0x10,0x07,0x0a,0xff,0xd4,0x97,0x00,0x0a,
+	0x00,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x0a,0xff,0xd4,0x99,0x00,0x0a,0x00,0x10,0x07,
+	0x0a,0xff,0xd4,0x9b,0x00,0x0a,0x00,0xd1,0x0b,0x10,0x07,0x0a,0xff,0xd4,0x9d,0x00,
+	0x0a,0x00,0x10,0x07,0x0a,0xff,0xd4,0x9f,0x00,0x0a,0x00,0xd4,0x58,0xd3,0x2c,0xd2,
+	0x16,0xd1,0x0b,0x10,0x07,0x0a,0xff,0xd4,0xa1,0x00,0x0a,0x00,0x10,0x07,0x0a,0xff,
+	0xd4,0xa3,0x00,0x0a,0x00,0xd1,0x0b,0x10,0x07,0x0b,0xff,0xd4,0xa5,0x00,0x0b,0x00,
+	0x10,0x07,0x0c,0xff,0xd4,0xa7,0x00,0x0c,0x00,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x10,
+	0xff,0xd4,0xa9,0x00,0x10,0x00,0x10,0x07,0x10,0xff,0xd4,0xab,0x00,0x10,0x00,0xd1,
+	0x0b,0x10,0x07,0x10,0xff,0xd4,0xad,0x00,0x10,0x00,0x10,0x07,0x10,0xff,0xd4,0xaf,
+	0x00,0x10,0x00,0xd3,0x35,0xd2,0x19,0xd1,0x0b,0x10,0x04,0x00,0x00,0x01,0xff,0xd5,
+	0xa1,0x00,0x10,0x07,0x01,0xff,0xd5,0xa2,0x00,0x01,0xff,0xd5,0xa3,0x00,0xd1,0x0e,
+	0x10,0x07,0x01,0xff,0xd5,0xa4,0x00,0x01,0xff,0xd5,0xa5,0x00,0x10,0x07,0x01,0xff,
+	0xd5,0xa6,0x00,0x01,0xff,0xd5,0xa7,0x00,0xd2,0x1c,0xd1,0x0e,0x10,0x07,0x01,0xff,
+	0xd5,0xa8,0x00,0x01,0xff,0xd5,0xa9,0x00,0x10,0x07,0x01,0xff,0xd5,0xaa,0x00,0x01,
+	0xff,0xd5,0xab,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd5,0xac,0x00,0x01,0xff,0xd5,
+	0xad,0x00,0x10,0x07,0x01,0xff,0xd5,0xae,0x00,0x01,0xff,0xd5,0xaf,0x00,0xcf,0x86,
+	0xe5,0x08,0x3f,0xd4,0x70,0xd3,0x38,0xd2,0x1c,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd5,
+	0xb0,0x00,0x01,0xff,0xd5,0xb1,0x00,0x10,0x07,0x01,0xff,0xd5,0xb2,0x00,0x01,0xff,
+	0xd5,0xb3,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd5,0xb4,0x00,0x01,0xff,0xd5,0xb5,
+	0x00,0x10,0x07,0x01,0xff,0xd5,0xb6,0x00,0x01,0xff,0xd5,0xb7,0x00,0xd2,0x1c,0xd1,
+	0x0e,0x10,0x07,0x01,0xff,0xd5,0xb8,0x00,0x01,0xff,0xd5,0xb9,0x00,0x10,0x07,0x01,
+	0xff,0xd5,0xba,0x00,0x01,0xff,0xd5,0xbb,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd5,
+	0xbc,0x00,0x01,0xff,0xd5,0xbd,0x00,0x10,0x07,0x01,0xff,0xd5,0xbe,0x00,0x01,0xff,
+	0xd5,0xbf,0x00,0xe3,0x87,0x3e,0xd2,0x1c,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd6,0x80,
+	0x00,0x01,0xff,0xd6,0x81,0x00,0x10,0x07,0x01,0xff,0xd6,0x82,0x00,0x01,0xff,0xd6,
+	0x83,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd6,0x84,0x00,0x01,0xff,0xd6,0x85,0x00,
+	0x10,0x07,0x01,0xff,0xd6,0x86,0x00,0x00,0x00,0xe0,0x2f,0x3f,0xcf,0x86,0xe5,0xc0,
+	0x3e,0xe4,0x97,0x3e,0xe3,0x76,0x3e,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,
+	0x04,0x01,0x00,0x01,0xff,0xd5,0xa5,0xd6,0x82,0x00,0xe4,0x3e,0x25,0xe3,0xc3,0x1a,
+	0xe2,0x7b,0x81,0xe1,0xc0,0x13,0xd0,0x1e,0xcf,0x86,0xc5,0xe4,0x08,0x4b,0xe3,0x53,
+	0x46,0xe2,0xe9,0x43,0xe1,0x1c,0x43,0xe0,0xe1,0x42,0xcf,0x86,0xe5,0xa6,0x42,0x64,
+	0x89,0x42,0x0b,0x00,0xcf,0x86,0xe5,0xfa,0x01,0xe4,0x03,0x56,0xe3,0x76,0x01,0xe2,
+	0x8e,0x53,0xd1,0x0c,0xe0,0xef,0x52,0xcf,0x86,0x65,0x8d,0x52,0x04,0x00,0xe0,0x0d,
+	0x01,0xcf,0x86,0xd5,0x0a,0xe4,0x10,0x53,0x63,0xff,0x52,0x0a,0x00,0xd4,0x80,0xd3,
+	0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0xb4,0x80,0x00,0x01,0xff,0xe2,
+	0xb4,0x81,0x00,0x10,0x08,0x01,0xff,0xe2,0xb4,0x82,0x00,0x01,0xff,0xe2,0xb4,0x83,
+	0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0xb4,0x84,0x00,0x01,0xff,0xe2,0xb4,0x85,
+	0x00,0x10,0x08,0x01,0xff,0xe2,0xb4,0x86,0x00,0x01,0xff,0xe2,0xb4,0x87,0x00,0xd2,
+	0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0xb4,0x88,0x00,0x01,0xff,0xe2,0xb4,0x89,
+	0x00,0x10,0x08,0x01,0xff,0xe2,0xb4,0x8a,0x00,0x01,0xff,0xe2,0xb4,0x8b,0x00,0xd1,
+	0x10,0x10,0x08,0x01,0xff,0xe2,0xb4,0x8c,0x00,0x01,0xff,0xe2,0xb4,0x8d,0x00,0x10,
+	0x08,0x01,0xff,0xe2,0xb4,0x8e,0x00,0x01,0xff,0xe2,0xb4,0x8f,0x00,0xd3,0x40,0xd2,
+	0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0xb4,0x90,0x00,0x01,0xff,0xe2,0xb4,0x91,
+	0x00,0x10,0x08,0x01,0xff,0xe2,0xb4,0x92,0x00,0x01,0xff,0xe2,0xb4,0x93,0x00,0xd1,
+	0x10,0x10,0x08,0x01,0xff,0xe2,0xb4,0x94,0x00,0x01,0xff,0xe2,0xb4,0x95,0x00,0x10,
+	0x08,0x01,0xff,0xe2,0xb4,0x96,0x00,0x01,0xff,0xe2,0xb4,0x97,0x00,0xd2,0x20,0xd1,
+	0x10,0x10,0x08,0x01,0xff,0xe2,0xb4,0x98,0x00,0x01,0xff,0xe2,0xb4,0x99,0x00,0x10,
+	0x08,0x01,0xff,0xe2,0xb4,0x9a,0x00,0x01,0xff,0xe2,0xb4,0x9b,0x00,0xd1,0x10,0x10,
+	0x08,0x01,0xff,0xe2,0xb4,0x9c,0x00,0x01,0xff,0xe2,0xb4,0x9d,0x00,0x10,0x08,0x01,
+	0xff,0xe2,0xb4,0x9e,0x00,0x01,0xff,0xe2,0xb4,0x9f,0x00,0xcf,0x86,0xe5,0x42,0x52,
+	0x94,0x50,0xd3,0x3c,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0xb4,0xa0,0x00,
+	0x01,0xff,0xe2,0xb4,0xa1,0x00,0x10,0x08,0x01,0xff,0xe2,0xb4,0xa2,0x00,0x01,0xff,
+	0xe2,0xb4,0xa3,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0xb4,0xa4,0x00,0x01,0xff,
+	0xe2,0xb4,0xa5,0x00,0x10,0x04,0x00,0x00,0x0d,0xff,0xe2,0xb4,0xa7,0x00,0x52,0x04,
+	0x00,0x00,0x91,0x0c,0x10,0x04,0x00,0x00,0x0d,0xff,0xe2,0xb4,0xad,0x00,0x00,0x00,
+	0x01,0x00,0xd2,0x1b,0xe1,0xfc,0x52,0xe0,0xad,0x52,0xcf,0x86,0x95,0x0f,0x94,0x0b,
+	0x93,0x07,0x62,0x92,0x52,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0xd1,0x13,0xe0,
+	0xd3,0x53,0xcf,0x86,0x95,0x0a,0xe4,0xa8,0x53,0x63,0x97,0x53,0x04,0x00,0x04,0x00,
+	0xd0,0x0d,0xcf,0x86,0x95,0x07,0x64,0x22,0x54,0x08,0x00,0x04,0x00,0xcf,0x86,0x55,
+	0x04,0x04,0x00,0x54,0x04,0x04,0x00,0xd3,0x07,0x62,0x2f,0x54,0x04,0x00,0xd2,0x20,
+	0xd1,0x10,0x10,0x08,0x11,0xff,0xe1,0x8f,0xb0,0x00,0x11,0xff,0xe1,0x8f,0xb1,0x00,
+	0x10,0x08,0x11,0xff,0xe1,0x8f,0xb2,0x00,0x11,0xff,0xe1,0x8f,0xb3,0x00,0x91,0x10,
+	0x10,0x08,0x11,0xff,0xe1,0x8f,0xb4,0x00,0x11,0xff,0xe1,0x8f,0xb5,0x00,0x00,0x00,
+	0xd4,0x1c,0xe3,0xe0,0x56,0xe2,0x17,0x56,0xe1,0xda,0x55,0xe0,0xbb,0x55,0xcf,0x86,
+	0x95,0x0a,0xe4,0xa4,0x55,0x63,0x88,0x55,0x04,0x00,0x04,0x00,0xe3,0xd2,0x01,0xe2,
+	0x2b,0x5a,0xd1,0x0c,0xe0,0x4c,0x59,0xcf,0x86,0x65,0x25,0x59,0x0a,0x00,0xe0,0x9c,
+	0x59,0xcf,0x86,0xd5,0xc5,0xd4,0x45,0xd3,0x31,0xd2,0x1c,0xd1,0x0e,0x10,0x07,0x12,
+	0xff,0xd0,0xb2,0x00,0x12,0xff,0xd0,0xb4,0x00,0x10,0x07,0x12,0xff,0xd0,0xbe,0x00,
+	0x12,0xff,0xd1,0x81,0x00,0x51,0x07,0x12,0xff,0xd1,0x82,0x00,0x10,0x07,0x12,0xff,
+	0xd1,0x8a,0x00,0x12,0xff,0xd1,0xa3,0x00,0x92,0x10,0x91,0x0c,0x10,0x08,0x12,0xff,
+	0xea,0x99,0x8b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,
+	0x10,0x08,0x14,0xff,0xe1,0x83,0x90,0x00,0x14,0xff,0xe1,0x83,0x91,0x00,0x10,0x08,
+	0x14,0xff,0xe1,0x83,0x92,0x00,0x14,0xff,0xe1,0x83,0x93,0x00,0xd1,0x10,0x10,0x08,
+	0x14,0xff,0xe1,0x83,0x94,0x00,0x14,0xff,0xe1,0x83,0x95,0x00,0x10,0x08,0x14,0xff,
+	0xe1,0x83,0x96,0x00,0x14,0xff,0xe1,0x83,0x97,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,
+	0x14,0xff,0xe1,0x83,0x98,0x00,0x14,0xff,0xe1,0x83,0x99,0x00,0x10,0x08,0x14,0xff,
+	0xe1,0x83,0x9a,0x00,0x14,0xff,0xe1,0x83,0x9b,0x00,0xd1,0x10,0x10,0x08,0x14,0xff,
+	0xe1,0x83,0x9c,0x00,0x14,0xff,0xe1,0x83,0x9d,0x00,0x10,0x08,0x14,0xff,0xe1,0x83,
+	0x9e,0x00,0x14,0xff,0xe1,0x83,0x9f,0x00,0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,
+	0x10,0x08,0x14,0xff,0xe1,0x83,0xa0,0x00,0x14,0xff,0xe1,0x83,0xa1,0x00,0x10,0x08,
+	0x14,0xff,0xe1,0x83,0xa2,0x00,0x14,0xff,0xe1,0x83,0xa3,0x00,0xd1,0x10,0x10,0x08,
+	0x14,0xff,0xe1,0x83,0xa4,0x00,0x14,0xff,0xe1,0x83,0xa5,0x00,0x10,0x08,0x14,0xff,
+	0xe1,0x83,0xa6,0x00,0x14,0xff,0xe1,0x83,0xa7,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,
+	0x14,0xff,0xe1,0x83,0xa8,0x00,0x14,0xff,0xe1,0x83,0xa9,0x00,0x10,0x08,0x14,0xff,
+	0xe1,0x83,0xaa,0x00,0x14,0xff,0xe1,0x83,0xab,0x00,0xd1,0x10,0x10,0x08,0x14,0xff,
+	0xe1,0x83,0xac,0x00,0x14,0xff,0xe1,0x83,0xad,0x00,0x10,0x08,0x14,0xff,0xe1,0x83,
+	0xae,0x00,0x14,0xff,0xe1,0x83,0xaf,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,
+	0x14,0xff,0xe1,0x83,0xb0,0x00,0x14,0xff,0xe1,0x83,0xb1,0x00,0x10,0x08,0x14,0xff,
+	0xe1,0x83,0xb2,0x00,0x14,0xff,0xe1,0x83,0xb3,0x00,0xd1,0x10,0x10,0x08,0x14,0xff,
+	0xe1,0x83,0xb4,0x00,0x14,0xff,0xe1,0x83,0xb5,0x00,0x10,0x08,0x14,0xff,0xe1,0x83,
+	0xb6,0x00,0x14,0xff,0xe1,0x83,0xb7,0x00,0xd2,0x1c,0xd1,0x10,0x10,0x08,0x14,0xff,
+	0xe1,0x83,0xb8,0x00,0x14,0xff,0xe1,0x83,0xb9,0x00,0x10,0x08,0x14,0xff,0xe1,0x83,
+	0xba,0x00,0x00,0x00,0xd1,0x0c,0x10,0x04,0x00,0x00,0x14,0xff,0xe1,0x83,0xbd,0x00,
+	0x10,0x08,0x14,0xff,0xe1,0x83,0xbe,0x00,0x14,0xff,0xe1,0x83,0xbf,0x00,0xe2,0x9d,
+	0x08,0xe1,0x48,0x04,0xe0,0x1c,0x02,0xcf,0x86,0xe5,0x11,0x01,0xd4,0x84,0xd3,0x40,
+	0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x61,0xcc,0xa5,0x00,0x01,0xff,0x61,0xcc,
+	0xa5,0x00,0x10,0x08,0x01,0xff,0x62,0xcc,0x87,0x00,0x01,0xff,0x62,0xcc,0x87,0x00,
+	0xd1,0x10,0x10,0x08,0x01,0xff,0x62,0xcc,0xa3,0x00,0x01,0xff,0x62,0xcc,0xa3,0x00,
+	0x10,0x08,0x01,0xff,0x62,0xcc,0xb1,0x00,0x01,0xff,0x62,0xcc,0xb1,0x00,0xd2,0x24,
+	0xd1,0x14,0x10,0x0a,0x01,0xff,0x63,0xcc,0xa7,0xcc,0x81,0x00,0x01,0xff,0x63,0xcc,
+	0xa7,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x64,0xcc,0x87,0x00,0x01,0xff,0x64,0xcc,
+	0x87,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x64,0xcc,0xa3,0x00,0x01,0xff,0x64,0xcc,
+	0xa3,0x00,0x10,0x08,0x01,0xff,0x64,0xcc,0xb1,0x00,0x01,0xff,0x64,0xcc,0xb1,0x00,
+	0xd3,0x48,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x64,0xcc,0xa7,0x00,0x01,0xff,
+	0x64,0xcc,0xa7,0x00,0x10,0x08,0x01,0xff,0x64,0xcc,0xad,0x00,0x01,0xff,0x64,0xcc,
+	0xad,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x65,0xcc,0x84,0xcc,0x80,0x00,0x01,0xff,
+	0x65,0xcc,0x84,0xcc,0x80,0x00,0x10,0x0a,0x01,0xff,0x65,0xcc,0x84,0xcc,0x81,0x00,
+	0x01,0xff,0x65,0xcc,0x84,0xcc,0x81,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,
+	0x65,0xcc,0xad,0x00,0x01,0xff,0x65,0xcc,0xad,0x00,0x10,0x08,0x01,0xff,0x65,0xcc,
+	0xb0,0x00,0x01,0xff,0x65,0xcc,0xb0,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x65,0xcc,
+	0xa7,0xcc,0x86,0x00,0x01,0xff,0x65,0xcc,0xa7,0xcc,0x86,0x00,0x10,0x08,0x01,0xff,
+	0x66,0xcc,0x87,0x00,0x01,0xff,0x66,0xcc,0x87,0x00,0xd4,0x84,0xd3,0x40,0xd2,0x20,
+	0xd1,0x10,0x10,0x08,0x01,0xff,0x67,0xcc,0x84,0x00,0x01,0xff,0x67,0xcc,0x84,0x00,
+	0x10,0x08,0x01,0xff,0x68,0xcc,0x87,0x00,0x01,0xff,0x68,0xcc,0x87,0x00,0xd1,0x10,
+	0x10,0x08,0x01,0xff,0x68,0xcc,0xa3,0x00,0x01,0xff,0x68,0xcc,0xa3,0x00,0x10,0x08,
+	0x01,0xff,0x68,0xcc,0x88,0x00,0x01,0xff,0x68,0xcc,0x88,0x00,0xd2,0x20,0xd1,0x10,
+	0x10,0x08,0x01,0xff,0x68,0xcc,0xa7,0x00,0x01,0xff,0x68,0xcc,0xa7,0x00,0x10,0x08,
+	0x01,0xff,0x68,0xcc,0xae,0x00,0x01,0xff,0x68,0xcc,0xae,0x00,0xd1,0x10,0x10,0x08,
+	0x01,0xff,0x69,0xcc,0xb0,0x00,0x01,0xff,0x69,0xcc,0xb0,0x00,0x10,0x0a,0x01,0xff,
+	0x69,0xcc,0x88,0xcc,0x81,0x00,0x01,0xff,0x69,0xcc,0x88,0xcc,0x81,0x00,0xd3,0x40,
+	0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x6b,0xcc,0x81,0x00,0x01,0xff,0x6b,0xcc,
+	0x81,0x00,0x10,0x08,0x01,0xff,0x6b,0xcc,0xa3,0x00,0x01,0xff,0x6b,0xcc,0xa3,0x00,
+	0xd1,0x10,0x10,0x08,0x01,0xff,0x6b,0xcc,0xb1,0x00,0x01,0xff,0x6b,0xcc,0xb1,0x00,
+	0x10,0x08,0x01,0xff,0x6c,0xcc,0xa3,0x00,0x01,0xff,0x6c,0xcc,0xa3,0x00,0xd2,0x24,
+	0xd1,0x14,0x10,0x0a,0x01,0xff,0x6c,0xcc,0xa3,0xcc,0x84,0x00,0x01,0xff,0x6c,0xcc,
+	0xa3,0xcc,0x84,0x00,0x10,0x08,0x01,0xff,0x6c,0xcc,0xb1,0x00,0x01,0xff,0x6c,0xcc,
+	0xb1,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x6c,0xcc,0xad,0x00,0x01,0xff,0x6c,0xcc,
+	0xad,0x00,0x10,0x08,0x01,0xff,0x6d,0xcc,0x81,0x00,0x01,0xff,0x6d,0xcc,0x81,0x00,
+	0xcf,0x86,0xe5,0x15,0x01,0xd4,0x88,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,
+	0xff,0x6d,0xcc,0x87,0x00,0x01,0xff,0x6d,0xcc,0x87,0x00,0x10,0x08,0x01,0xff,0x6d,
+	0xcc,0xa3,0x00,0x01,0xff,0x6d,0xcc,0xa3,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x6e,
+	0xcc,0x87,0x00,0x01,0xff,0x6e,0xcc,0x87,0x00,0x10,0x08,0x01,0xff,0x6e,0xcc,0xa3,
+	0x00,0x01,0xff,0x6e,0xcc,0xa3,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x6e,
+	0xcc,0xb1,0x00,0x01,0xff,0x6e,0xcc,0xb1,0x00,0x10,0x08,0x01,0xff,0x6e,0xcc,0xad,
+	0x00,0x01,0xff,0x6e,0xcc,0xad,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x6f,0xcc,0x83,
+	0xcc,0x81,0x00,0x01,0xff,0x6f,0xcc,0x83,0xcc,0x81,0x00,0x10,0x0a,0x01,0xff,0x6f,
+	0xcc,0x83,0xcc,0x88,0x00,0x01,0xff,0x6f,0xcc,0x83,0xcc,0x88,0x00,0xd3,0x48,0xd2,
+	0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x6f,0xcc,0x84,0xcc,0x80,0x00,0x01,0xff,0x6f,
+	0xcc,0x84,0xcc,0x80,0x00,0x10,0x0a,0x01,0xff,0x6f,0xcc,0x84,0xcc,0x81,0x00,0x01,
+	0xff,0x6f,0xcc,0x84,0xcc,0x81,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x70,0xcc,0x81,
+	0x00,0x01,0xff,0x70,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x70,0xcc,0x87,0x00,0x01,
+	0xff,0x70,0xcc,0x87,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x72,0xcc,0x87,
+	0x00,0x01,0xff,0x72,0xcc,0x87,0x00,0x10,0x08,0x01,0xff,0x72,0xcc,0xa3,0x00,0x01,
+	0xff,0x72,0xcc,0xa3,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x72,0xcc,0xa3,0xcc,0x84,
+	0x00,0x01,0xff,0x72,0xcc,0xa3,0xcc,0x84,0x00,0x10,0x08,0x01,0xff,0x72,0xcc,0xb1,
+	0x00,0x01,0xff,0x72,0xcc,0xb1,0x00,0xd4,0x8c,0xd3,0x48,0xd2,0x20,0xd1,0x10,0x10,
+	0x08,0x01,0xff,0x73,0xcc,0x87,0x00,0x01,0xff,0x73,0xcc,0x87,0x00,0x10,0x08,0x01,
+	0xff,0x73,0xcc,0xa3,0x00,0x01,0xff,0x73,0xcc,0xa3,0x00,0xd1,0x14,0x10,0x0a,0x01,
+	0xff,0x73,0xcc,0x81,0xcc,0x87,0x00,0x01,0xff,0x73,0xcc,0x81,0xcc,0x87,0x00,0x10,
+	0x0a,0x01,0xff,0x73,0xcc,0x8c,0xcc,0x87,0x00,0x01,0xff,0x73,0xcc,0x8c,0xcc,0x87,
+	0x00,0xd2,0x24,0xd1,0x14,0x10,0x0a,0x01,0xff,0x73,0xcc,0xa3,0xcc,0x87,0x00,0x01,
+	0xff,0x73,0xcc,0xa3,0xcc,0x87,0x00,0x10,0x08,0x01,0xff,0x74,0xcc,0x87,0x00,0x01,
+	0xff,0x74,0xcc,0x87,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x74,0xcc,0xa3,0x00,0x01,
+	0xff,0x74,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x74,0xcc,0xb1,0x00,0x01,0xff,0x74,
+	0xcc,0xb1,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x74,0xcc,0xad,
+	0x00,0x01,0xff,0x74,0xcc,0xad,0x00,0x10,0x08,0x01,0xff,0x75,0xcc,0xa4,0x00,0x01,
+	0xff,0x75,0xcc,0xa4,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x75,0xcc,0xb0,0x00,0x01,
+	0xff,0x75,0xcc,0xb0,0x00,0x10,0x08,0x01,0xff,0x75,0xcc,0xad,0x00,0x01,0xff,0x75,
+	0xcc,0xad,0x00,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x75,0xcc,0x83,0xcc,0x81,
+	0x00,0x01,0xff,0x75,0xcc,0x83,0xcc,0x81,0x00,0x10,0x0a,0x01,0xff,0x75,0xcc,0x84,
+	0xcc,0x88,0x00,0x01,0xff,0x75,0xcc,0x84,0xcc,0x88,0x00,0xd1,0x10,0x10,0x08,0x01,
+	0xff,0x76,0xcc,0x83,0x00,0x01,0xff,0x76,0xcc,0x83,0x00,0x10,0x08,0x01,0xff,0x76,
+	0xcc,0xa3,0x00,0x01,0xff,0x76,0xcc,0xa3,0x00,0xe0,0x11,0x02,0xcf,0x86,0xd5,0xe2,
+	0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x77,0xcc,0x80,0x00,
+	0x01,0xff,0x77,0xcc,0x80,0x00,0x10,0x08,0x01,0xff,0x77,0xcc,0x81,0x00,0x01,0xff,
+	0x77,0xcc,0x81,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x77,0xcc,0x88,0x00,0x01,0xff,
+	0x77,0xcc,0x88,0x00,0x10,0x08,0x01,0xff,0x77,0xcc,0x87,0x00,0x01,0xff,0x77,0xcc,
+	0x87,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x77,0xcc,0xa3,0x00,0x01,0xff,
+	0x77,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x78,0xcc,0x87,0x00,0x01,0xff,0x78,0xcc,
+	0x87,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x78,0xcc,0x88,0x00,0x01,0xff,0x78,0xcc,
+	0x88,0x00,0x10,0x08,0x01,0xff,0x79,0xcc,0x87,0x00,0x01,0xff,0x79,0xcc,0x87,0x00,
+	0xd3,0x33,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x7a,0xcc,0x82,0x00,0x01,0xff,
+	0x7a,0xcc,0x82,0x00,0x10,0x08,0x01,0xff,0x7a,0xcc,0xa3,0x00,0x01,0xff,0x7a,0xcc,
+	0xa3,0x00,0xe1,0x12,0x59,0x10,0x08,0x01,0xff,0x7a,0xcc,0xb1,0x00,0x01,0xff,0x7a,
+	0xcc,0xb1,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x77,0xcc,0x8a,0x00,0x01,
+	0xff,0x79,0xcc,0x8a,0x00,0x10,0x08,0x01,0xff,0x61,0xca,0xbe,0x00,0x02,0xff,0x73,
+	0xcc,0x87,0x00,0x51,0x04,0x0a,0x00,0x10,0x07,0x0a,0xff,0x73,0x73,0x00,0x0a,0x00,
+	0xd4,0x98,0xd3,0x48,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x61,0xcc,0xa3,0x00,
+	0x01,0xff,0x61,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x61,0xcc,0x89,0x00,0x01,0xff,
+	0x61,0xcc,0x89,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x61,0xcc,0x82,0xcc,0x81,0x00,
+	0x01,0xff,0x61,0xcc,0x82,0xcc,0x81,0x00,0x10,0x0a,0x01,0xff,0x61,0xcc,0x82,0xcc,
+	0x80,0x00,0x01,0xff,0x61,0xcc,0x82,0xcc,0x80,0x00,0xd2,0x28,0xd1,0x14,0x10,0x0a,
+	0x01,0xff,0x61,0xcc,0x82,0xcc,0x89,0x00,0x01,0xff,0x61,0xcc,0x82,0xcc,0x89,0x00,
+	0x10,0x0a,0x01,0xff,0x61,0xcc,0x82,0xcc,0x83,0x00,0x01,0xff,0x61,0xcc,0x82,0xcc,
+	0x83,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x61,0xcc,0xa3,0xcc,0x82,0x00,0x01,0xff,
+	0x61,0xcc,0xa3,0xcc,0x82,0x00,0x10,0x0a,0x01,0xff,0x61,0xcc,0x86,0xcc,0x81,0x00,
+	0x01,0xff,0x61,0xcc,0x86,0xcc,0x81,0x00,0xd3,0x50,0xd2,0x28,0xd1,0x14,0x10,0x0a,
+	0x01,0xff,0x61,0xcc,0x86,0xcc,0x80,0x00,0x01,0xff,0x61,0xcc,0x86,0xcc,0x80,0x00,
+	0x10,0x0a,0x01,0xff,0x61,0xcc,0x86,0xcc,0x89,0x00,0x01,0xff,0x61,0xcc,0x86,0xcc,
+	0x89,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x61,0xcc,0x86,0xcc,0x83,0x00,0x01,0xff,
+	0x61,0xcc,0x86,0xcc,0x83,0x00,0x10,0x0a,0x01,0xff,0x61,0xcc,0xa3,0xcc,0x86,0x00,
+	0x01,0xff,0x61,0xcc,0xa3,0xcc,0x86,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,
+	0x65,0xcc,0xa3,0x00,0x01,0xff,0x65,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x65,0xcc,
+	0x89,0x00,0x01,0xff,0x65,0xcc,0x89,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x65,0xcc,
+	0x83,0x00,0x01,0xff,0x65,0xcc,0x83,0x00,0x10,0x0a,0x01,0xff,0x65,0xcc,0x82,0xcc,
+	0x81,0x00,0x01,0xff,0x65,0xcc,0x82,0xcc,0x81,0x00,0xcf,0x86,0xe5,0x31,0x01,0xd4,
+	0x90,0xd3,0x50,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x65,0xcc,0x82,0xcc,0x80,
+	0x00,0x01,0xff,0x65,0xcc,0x82,0xcc,0x80,0x00,0x10,0x0a,0x01,0xff,0x65,0xcc,0x82,
+	0xcc,0x89,0x00,0x01,0xff,0x65,0xcc,0x82,0xcc,0x89,0x00,0xd1,0x14,0x10,0x0a,0x01,
+	0xff,0x65,0xcc,0x82,0xcc,0x83,0x00,0x01,0xff,0x65,0xcc,0x82,0xcc,0x83,0x00,0x10,
+	0x0a,0x01,0xff,0x65,0xcc,0xa3,0xcc,0x82,0x00,0x01,0xff,0x65,0xcc,0xa3,0xcc,0x82,
+	0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x69,0xcc,0x89,0x00,0x01,0xff,0x69,
+	0xcc,0x89,0x00,0x10,0x08,0x01,0xff,0x69,0xcc,0xa3,0x00,0x01,0xff,0x69,0xcc,0xa3,
+	0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x6f,0xcc,0xa3,0x00,0x01,0xff,0x6f,0xcc,0xa3,
+	0x00,0x10,0x08,0x01,0xff,0x6f,0xcc,0x89,0x00,0x01,0xff,0x6f,0xcc,0x89,0x00,0xd3,
+	0x50,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x6f,0xcc,0x82,0xcc,0x81,0x00,0x01,
+	0xff,0x6f,0xcc,0x82,0xcc,0x81,0x00,0x10,0x0a,0x01,0xff,0x6f,0xcc,0x82,0xcc,0x80,
+	0x00,0x01,0xff,0x6f,0xcc,0x82,0xcc,0x80,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x6f,
+	0xcc,0x82,0xcc,0x89,0x00,0x01,0xff,0x6f,0xcc,0x82,0xcc,0x89,0x00,0x10,0x0a,0x01,
+	0xff,0x6f,0xcc,0x82,0xcc,0x83,0x00,0x01,0xff,0x6f,0xcc,0x82,0xcc,0x83,0x00,0xd2,
+	0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x6f,0xcc,0xa3,0xcc,0x82,0x00,0x01,0xff,0x6f,
+	0xcc,0xa3,0xcc,0x82,0x00,0x10,0x0a,0x01,0xff,0x6f,0xcc,0x9b,0xcc,0x81,0x00,0x01,
+	0xff,0x6f,0xcc,0x9b,0xcc,0x81,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x6f,0xcc,0x9b,
+	0xcc,0x80,0x00,0x01,0xff,0x6f,0xcc,0x9b,0xcc,0x80,0x00,0x10,0x0a,0x01,0xff,0x6f,
+	0xcc,0x9b,0xcc,0x89,0x00,0x01,0xff,0x6f,0xcc,0x9b,0xcc,0x89,0x00,0xd4,0x98,0xd3,
+	0x48,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x6f,0xcc,0x9b,0xcc,0x83,0x00,0x01,
+	0xff,0x6f,0xcc,0x9b,0xcc,0x83,0x00,0x10,0x0a,0x01,0xff,0x6f,0xcc,0x9b,0xcc,0xa3,
+	0x00,0x01,0xff,0x6f,0xcc,0x9b,0xcc,0xa3,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x75,
+	0xcc,0xa3,0x00,0x01,0xff,0x75,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x75,0xcc,0x89,
+	0x00,0x01,0xff,0x75,0xcc,0x89,0x00,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x75,
+	0xcc,0x9b,0xcc,0x81,0x00,0x01,0xff,0x75,0xcc,0x9b,0xcc,0x81,0x00,0x10,0x0a,0x01,
+	0xff,0x75,0xcc,0x9b,0xcc,0x80,0x00,0x01,0xff,0x75,0xcc,0x9b,0xcc,0x80,0x00,0xd1,
+	0x14,0x10,0x0a,0x01,0xff,0x75,0xcc,0x9b,0xcc,0x89,0x00,0x01,0xff,0x75,0xcc,0x9b,
+	0xcc,0x89,0x00,0x10,0x0a,0x01,0xff,0x75,0xcc,0x9b,0xcc,0x83,0x00,0x01,0xff,0x75,
+	0xcc,0x9b,0xcc,0x83,0x00,0xd3,0x44,0xd2,0x24,0xd1,0x14,0x10,0x0a,0x01,0xff,0x75,
+	0xcc,0x9b,0xcc,0xa3,0x00,0x01,0xff,0x75,0xcc,0x9b,0xcc,0xa3,0x00,0x10,0x08,0x01,
+	0xff,0x79,0xcc,0x80,0x00,0x01,0xff,0x79,0xcc,0x80,0x00,0xd1,0x10,0x10,0x08,0x01,
+	0xff,0x79,0xcc,0xa3,0x00,0x01,0xff,0x79,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x79,
+	0xcc,0x89,0x00,0x01,0xff,0x79,0xcc,0x89,0x00,0xd2,0x1c,0xd1,0x10,0x10,0x08,0x01,
+	0xff,0x79,0xcc,0x83,0x00,0x01,0xff,0x79,0xcc,0x83,0x00,0x10,0x08,0x0a,0xff,0xe1,
+	0xbb,0xbb,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xe1,0xbb,0xbd,0x00,0x0a,
+	0x00,0x10,0x08,0x0a,0xff,0xe1,0xbb,0xbf,0x00,0x0a,0x00,0xe1,0xbf,0x02,0xe0,0xa1,
+	0x01,0xcf,0x86,0xd5,0xc6,0xd4,0x6c,0xd3,0x18,0xe2,0x0e,0x59,0xe1,0xf7,0x58,0x10,
+	0x09,0x01,0xff,0xce,0xb1,0xcc,0x93,0x00,0x01,0xff,0xce,0xb1,0xcc,0x94,0x00,0xd2,
+	0x28,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb1,0xcc,0x93,0x00,0x01,0xff,0xce,0xb1,
+	0xcc,0x94,0x00,0x10,0x0b,0x01,0xff,0xce,0xb1,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,
+	0xce,0xb1,0xcc,0x94,0xcc,0x80,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0xb1,0xcc,
+	0x93,0xcc,0x81,0x00,0x01,0xff,0xce,0xb1,0xcc,0x94,0xcc,0x81,0x00,0x10,0x0b,0x01,
+	0xff,0xce,0xb1,0xcc,0x93,0xcd,0x82,0x00,0x01,0xff,0xce,0xb1,0xcc,0x94,0xcd,0x82,
+	0x00,0xd3,0x18,0xe2,0x4a,0x59,0xe1,0x33,0x59,0x10,0x09,0x01,0xff,0xce,0xb5,0xcc,
+	0x93,0x00,0x01,0xff,0xce,0xb5,0xcc,0x94,0x00,0xd2,0x28,0xd1,0x12,0x10,0x09,0x01,
+	0xff,0xce,0xb5,0xcc,0x93,0x00,0x01,0xff,0xce,0xb5,0xcc,0x94,0x00,0x10,0x0b,0x01,
+	0xff,0xce,0xb5,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,0xce,0xb5,0xcc,0x94,0xcc,0x80,
+	0x00,0x91,0x16,0x10,0x0b,0x01,0xff,0xce,0xb5,0xcc,0x93,0xcc,0x81,0x00,0x01,0xff,
+	0xce,0xb5,0xcc,0x94,0xcc,0x81,0x00,0x00,0x00,0xd4,0x6c,0xd3,0x18,0xe2,0x74,0x59,
+	0xe1,0x5d,0x59,0x10,0x09,0x01,0xff,0xce,0xb7,0xcc,0x93,0x00,0x01,0xff,0xce,0xb7,
+	0xcc,0x94,0x00,0xd2,0x28,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb7,0xcc,0x93,0x00,
+	0x01,0xff,0xce,0xb7,0xcc,0x94,0x00,0x10,0x0b,0x01,0xff,0xce,0xb7,0xcc,0x93,0xcc,
+	0x80,0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcc,0x80,0x00,0xd1,0x16,0x10,0x0b,0x01,
+	0xff,0xce,0xb7,0xcc,0x93,0xcc,0x81,0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcc,0x81,
+	0x00,0x10,0x0b,0x01,0xff,0xce,0xb7,0xcc,0x93,0xcd,0x82,0x00,0x01,0xff,0xce,0xb7,
+	0xcc,0x94,0xcd,0x82,0x00,0xd3,0x18,0xe2,0xb0,0x59,0xe1,0x99,0x59,0x10,0x09,0x01,
+	0xff,0xce,0xb9,0xcc,0x93,0x00,0x01,0xff,0xce,0xb9,0xcc,0x94,0x00,0xd2,0x28,0xd1,
+	0x12,0x10,0x09,0x01,0xff,0xce,0xb9,0xcc,0x93,0x00,0x01,0xff,0xce,0xb9,0xcc,0x94,
+	0x00,0x10,0x0b,0x01,0xff,0xce,0xb9,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,0xce,0xb9,
+	0xcc,0x94,0xcc,0x80,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0xb9,0xcc,0x93,0xcc,
+	0x81,0x00,0x01,0xff,0xce,0xb9,0xcc,0x94,0xcc,0x81,0x00,0x10,0x0b,0x01,0xff,0xce,
+	0xb9,0xcc,0x93,0xcd,0x82,0x00,0x01,0xff,0xce,0xb9,0xcc,0x94,0xcd,0x82,0x00,0xcf,
+	0x86,0xd5,0xac,0xd4,0x5a,0xd3,0x18,0xe2,0xed,0x59,0xe1,0xd6,0x59,0x10,0x09,0x01,
+	0xff,0xce,0xbf,0xcc,0x93,0x00,0x01,0xff,0xce,0xbf,0xcc,0x94,0x00,0xd2,0x28,0xd1,
+	0x12,0x10,0x09,0x01,0xff,0xce,0xbf,0xcc,0x93,0x00,0x01,0xff,0xce,0xbf,0xcc,0x94,
+	0x00,0x10,0x0b,0x01,0xff,0xce,0xbf,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,0xce,0xbf,
+	0xcc,0x94,0xcc,0x80,0x00,0x91,0x16,0x10,0x0b,0x01,0xff,0xce,0xbf,0xcc,0x93,0xcc,
+	0x81,0x00,0x01,0xff,0xce,0xbf,0xcc,0x94,0xcc,0x81,0x00,0x00,0x00,0xd3,0x18,0xe2,
+	0x17,0x5a,0xe1,0x00,0x5a,0x10,0x09,0x01,0xff,0xcf,0x85,0xcc,0x93,0x00,0x01,0xff,
+	0xcf,0x85,0xcc,0x94,0x00,0xd2,0x1c,0xd1,0x0d,0x10,0x04,0x00,0x00,0x01,0xff,0xcf,
+	0x85,0xcc,0x94,0x00,0x10,0x04,0x00,0x00,0x01,0xff,0xcf,0x85,0xcc,0x94,0xcc,0x80,
+	0x00,0xd1,0x0f,0x10,0x04,0x00,0x00,0x01,0xff,0xcf,0x85,0xcc,0x94,0xcc,0x81,0x00,
+	0x10,0x04,0x00,0x00,0x01,0xff,0xcf,0x85,0xcc,0x94,0xcd,0x82,0x00,0xe4,0xd3,0x5a,
+	0xd3,0x18,0xe2,0x52,0x5a,0xe1,0x3b,0x5a,0x10,0x09,0x01,0xff,0xcf,0x89,0xcc,0x93,
+	0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0x00,0xd2,0x28,0xd1,0x12,0x10,0x09,0x01,0xff,
+	0xcf,0x89,0xcc,0x93,0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0x00,0x10,0x0b,0x01,0xff,
+	0xcf,0x89,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xcc,0x80,0x00,
+	0xd1,0x16,0x10,0x0b,0x01,0xff,0xcf,0x89,0xcc,0x93,0xcc,0x81,0x00,0x01,0xff,0xcf,
+	0x89,0xcc,0x94,0xcc,0x81,0x00,0x10,0x0b,0x01,0xff,0xcf,0x89,0xcc,0x93,0xcd,0x82,
+	0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xcd,0x82,0x00,0xe0,0xd9,0x02,0xcf,0x86,0xe5,
+	0x91,0x01,0xd4,0xc8,0xd3,0x64,0xd2,0x30,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0xb1,
+	0xcc,0x93,0xce,0xb9,0x00,0x01,0xff,0xce,0xb1,0xcc,0x94,0xce,0xb9,0x00,0x10,0x0d,
+	0x01,0xff,0xce,0xb1,0xcc,0x93,0xcc,0x80,0xce,0xb9,0x00,0x01,0xff,0xce,0xb1,0xcc,
+	0x94,0xcc,0x80,0xce,0xb9,0x00,0xd1,0x1a,0x10,0x0d,0x01,0xff,0xce,0xb1,0xcc,0x93,
+	0xcc,0x81,0xce,0xb9,0x00,0x01,0xff,0xce,0xb1,0xcc,0x94,0xcc,0x81,0xce,0xb9,0x00,
+	0x10,0x0d,0x01,0xff,0xce,0xb1,0xcc,0x93,0xcd,0x82,0xce,0xb9,0x00,0x01,0xff,0xce,
+	0xb1,0xcc,0x94,0xcd,0x82,0xce,0xb9,0x00,0xd2,0x30,0xd1,0x16,0x10,0x0b,0x01,0xff,
+	0xce,0xb1,0xcc,0x93,0xce,0xb9,0x00,0x01,0xff,0xce,0xb1,0xcc,0x94,0xce,0xb9,0x00,
+	0x10,0x0d,0x01,0xff,0xce,0xb1,0xcc,0x93,0xcc,0x80,0xce,0xb9,0x00,0x01,0xff,0xce,
+	0xb1,0xcc,0x94,0xcc,0x80,0xce,0xb9,0x00,0xd1,0x1a,0x10,0x0d,0x01,0xff,0xce,0xb1,
+	0xcc,0x93,0xcc,0x81,0xce,0xb9,0x00,0x01,0xff,0xce,0xb1,0xcc,0x94,0xcc,0x81,0xce,
+	0xb9,0x00,0x10,0x0d,0x01,0xff,0xce,0xb1,0xcc,0x93,0xcd,0x82,0xce,0xb9,0x00,0x01,
+	0xff,0xce,0xb1,0xcc,0x94,0xcd,0x82,0xce,0xb9,0x00,0xd3,0x64,0xd2,0x30,0xd1,0x16,
+	0x10,0x0b,0x01,0xff,0xce,0xb7,0xcc,0x93,0xce,0xb9,0x00,0x01,0xff,0xce,0xb7,0xcc,
+	0x94,0xce,0xb9,0x00,0x10,0x0d,0x01,0xff,0xce,0xb7,0xcc,0x93,0xcc,0x80,0xce,0xb9,
+	0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcc,0x80,0xce,0xb9,0x00,0xd1,0x1a,0x10,0x0d,
+	0x01,0xff,0xce,0xb7,0xcc,0x93,0xcc,0x81,0xce,0xb9,0x00,0x01,0xff,0xce,0xb7,0xcc,
+	0x94,0xcc,0x81,0xce,0xb9,0x00,0x10,0x0d,0x01,0xff,0xce,0xb7,0xcc,0x93,0xcd,0x82,
+	0xce,0xb9,0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcd,0x82,0xce,0xb9,0x00,0xd2,0x30,
+	0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0xb7,0xcc,0x93,0xce,0xb9,0x00,0x01,0xff,0xce,
+	0xb7,0xcc,0x94,0xce,0xb9,0x00,0x10,0x0d,0x01,0xff,0xce,0xb7,0xcc,0x93,0xcc,0x80,
+	0xce,0xb9,0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcc,0x80,0xce,0xb9,0x00,0xd1,0x1a,
+	0x10,0x0d,0x01,0xff,0xce,0xb7,0xcc,0x93,0xcc,0x81,0xce,0xb9,0x00,0x01,0xff,0xce,
+	0xb7,0xcc,0x94,0xcc,0x81,0xce,0xb9,0x00,0x10,0x0d,0x01,0xff,0xce,0xb7,0xcc,0x93,
+	0xcd,0x82,0xce,0xb9,0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcd,0x82,0xce,0xb9,0x00,
+	0xd4,0xc8,0xd3,0x64,0xd2,0x30,0xd1,0x16,0x10,0x0b,0x01,0xff,0xcf,0x89,0xcc,0x93,
+	0xce,0xb9,0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xce,0xb9,0x00,0x10,0x0d,0x01,0xff,
+	0xcf,0x89,0xcc,0x93,0xcc,0x80,0xce,0xb9,0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xcc,
+	0x80,0xce,0xb9,0x00,0xd1,0x1a,0x10,0x0d,0x01,0xff,0xcf,0x89,0xcc,0x93,0xcc,0x81,
+	0xce,0xb9,0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xcc,0x81,0xce,0xb9,0x00,0x10,0x0d,
+	0x01,0xff,0xcf,0x89,0xcc,0x93,0xcd,0x82,0xce,0xb9,0x00,0x01,0xff,0xcf,0x89,0xcc,
+	0x94,0xcd,0x82,0xce,0xb9,0x00,0xd2,0x30,0xd1,0x16,0x10,0x0b,0x01,0xff,0xcf,0x89,
+	0xcc,0x93,0xce,0xb9,0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xce,0xb9,0x00,0x10,0x0d,
+	0x01,0xff,0xcf,0x89,0xcc,0x93,0xcc,0x80,0xce,0xb9,0x00,0x01,0xff,0xcf,0x89,0xcc,
+	0x94,0xcc,0x80,0xce,0xb9,0x00,0xd1,0x1a,0x10,0x0d,0x01,0xff,0xcf,0x89,0xcc,0x93,
+	0xcc,0x81,0xce,0xb9,0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xcc,0x81,0xce,0xb9,0x00,
+	0x10,0x0d,0x01,0xff,0xcf,0x89,0xcc,0x93,0xcd,0x82,0xce,0xb9,0x00,0x01,0xff,0xcf,
+	0x89,0xcc,0x94,0xcd,0x82,0xce,0xb9,0x00,0xd3,0x49,0xd2,0x26,0xd1,0x12,0x10,0x09,
+	0x01,0xff,0xce,0xb1,0xcc,0x86,0x00,0x01,0xff,0xce,0xb1,0xcc,0x84,0x00,0x10,0x0b,
+	0x01,0xff,0xce,0xb1,0xcc,0x80,0xce,0xb9,0x00,0x01,0xff,0xce,0xb1,0xce,0xb9,0x00,
+	0xd1,0x0f,0x10,0x0b,0x01,0xff,0xce,0xb1,0xcc,0x81,0xce,0xb9,0x00,0x00,0x00,0x10,
+	0x09,0x01,0xff,0xce,0xb1,0xcd,0x82,0x00,0x01,0xff,0xce,0xb1,0xcd,0x82,0xce,0xb9,
+	0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb1,0xcc,0x86,0x00,0x01,0xff,
+	0xce,0xb1,0xcc,0x84,0x00,0x10,0x09,0x01,0xff,0xce,0xb1,0xcc,0x80,0x00,0x01,0xff,
+	0xce,0xb1,0xcc,0x81,0x00,0xe1,0xf3,0x5a,0x10,0x09,0x01,0xff,0xce,0xb1,0xce,0xb9,
+	0x00,0x01,0x00,0xcf,0x86,0xd5,0xbd,0xd4,0x7e,0xd3,0x44,0xd2,0x21,0xd1,0x0d,0x10,
+	0x04,0x01,0x00,0x01,0xff,0xc2,0xa8,0xcd,0x82,0x00,0x10,0x0b,0x01,0xff,0xce,0xb7,
+	0xcc,0x80,0xce,0xb9,0x00,0x01,0xff,0xce,0xb7,0xce,0xb9,0x00,0xd1,0x0f,0x10,0x0b,
+	0x01,0xff,0xce,0xb7,0xcc,0x81,0xce,0xb9,0x00,0x00,0x00,0x10,0x09,0x01,0xff,0xce,
+	0xb7,0xcd,0x82,0x00,0x01,0xff,0xce,0xb7,0xcd,0x82,0xce,0xb9,0x00,0xd2,0x24,0xd1,
+	0x12,0x10,0x09,0x01,0xff,0xce,0xb5,0xcc,0x80,0x00,0x01,0xff,0xce,0xb5,0xcc,0x81,
+	0x00,0x10,0x09,0x01,0xff,0xce,0xb7,0xcc,0x80,0x00,0x01,0xff,0xce,0xb7,0xcc,0x81,
+	0x00,0xe1,0x02,0x5b,0x10,0x09,0x01,0xff,0xce,0xb7,0xce,0xb9,0x00,0x01,0xff,0xe1,
+	0xbe,0xbf,0xcc,0x80,0x00,0xd3,0x18,0xe2,0x28,0x5b,0xe1,0x11,0x5b,0x10,0x09,0x01,
+	0xff,0xce,0xb9,0xcc,0x86,0x00,0x01,0xff,0xce,0xb9,0xcc,0x84,0x00,0xe2,0x4c,0x5b,
+	0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb9,0xcc,0x86,0x00,0x01,0xff,0xce,0xb9,0xcc,
+	0x84,0x00,0x10,0x09,0x01,0xff,0xce,0xb9,0xcc,0x80,0x00,0x01,0xff,0xce,0xb9,0xcc,
+	0x81,0x00,0xd4,0x51,0xd3,0x18,0xe2,0x6f,0x5b,0xe1,0x58,0x5b,0x10,0x09,0x01,0xff,
+	0xcf,0x85,0xcc,0x86,0x00,0x01,0xff,0xcf,0x85,0xcc,0x84,0x00,0xd2,0x24,0xd1,0x12,
+	0x10,0x09,0x01,0xff,0xcf,0x85,0xcc,0x86,0x00,0x01,0xff,0xcf,0x85,0xcc,0x84,0x00,
+	0x10,0x09,0x01,0xff,0xcf,0x85,0xcc,0x80,0x00,0x01,0xff,0xcf,0x85,0xcc,0x81,0x00,
+	0xe1,0x8f,0x5b,0x10,0x09,0x01,0xff,0xcf,0x81,0xcc,0x94,0x00,0x01,0xff,0xc2,0xa8,
+	0xcc,0x80,0x00,0xd3,0x3b,0xd2,0x18,0x51,0x04,0x00,0x00,0x10,0x0b,0x01,0xff,0xcf,
+	0x89,0xcc,0x80,0xce,0xb9,0x00,0x01,0xff,0xcf,0x89,0xce,0xb9,0x00,0xd1,0x0f,0x10,
+	0x0b,0x01,0xff,0xcf,0x89,0xcc,0x81,0xce,0xb9,0x00,0x00,0x00,0x10,0x09,0x01,0xff,
+	0xcf,0x89,0xcd,0x82,0x00,0x01,0xff,0xcf,0x89,0xcd,0x82,0xce,0xb9,0x00,0xd2,0x24,
+	0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xbf,0xcc,0x80,0x00,0x01,0xff,0xce,0xbf,0xcc,
+	0x81,0x00,0x10,0x09,0x01,0xff,0xcf,0x89,0xcc,0x80,0x00,0x01,0xff,0xcf,0x89,0xcc,
+	0x81,0x00,0xe1,0x99,0x5b,0x10,0x09,0x01,0xff,0xcf,0x89,0xce,0xb9,0x00,0x01,0xff,
+	0xc2,0xb4,0x00,0xe0,0x0c,0x68,0xcf,0x86,0xe5,0x23,0x02,0xe4,0x25,0x01,0xe3,0x85,
+	0x5e,0xd2,0x2a,0xe1,0x5f,0x5c,0xe0,0xdd,0x5b,0xcf,0x86,0xe5,0xbb,0x5b,0x94,0x1b,
+	0xe3,0xa4,0x5b,0x92,0x14,0x91,0x10,0x10,0x08,0x01,0xff,0xe2,0x80,0x82,0x00,0x01,
+	0xff,0xe2,0x80,0x83,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd1,0xd6,0xd0,0x46,0xcf,
+	0x86,0x55,0x04,0x01,0x00,0xd4,0x29,0xd3,0x13,0x52,0x04,0x01,0x00,0x51,0x04,0x01,
+	0x00,0x10,0x07,0x01,0xff,0xcf,0x89,0x00,0x01,0x00,0x92,0x12,0x51,0x04,0x01,0x00,
+	0x10,0x06,0x01,0xff,0x6b,0x00,0x01,0xff,0x61,0xcc,0x8a,0x00,0x01,0x00,0xe3,0x25,
+	0x5d,0x92,0x10,0x51,0x04,0x01,0x00,0x10,0x08,0x01,0xff,0xe2,0x85,0x8e,0x00,0x01,
+	0x00,0x01,0x00,0xcf,0x86,0xd5,0x0a,0xe4,0x42,0x5d,0x63,0x2d,0x5d,0x06,0x00,0x94,
+	0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0x85,0xb0,0x00,0x01,
+	0xff,0xe2,0x85,0xb1,0x00,0x10,0x08,0x01,0xff,0xe2,0x85,0xb2,0x00,0x01,0xff,0xe2,
+	0x85,0xb3,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0x85,0xb4,0x00,0x01,0xff,0xe2,
+	0x85,0xb5,0x00,0x10,0x08,0x01,0xff,0xe2,0x85,0xb6,0x00,0x01,0xff,0xe2,0x85,0xb7,
+	0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0x85,0xb8,0x00,0x01,0xff,0xe2,
+	0x85,0xb9,0x00,0x10,0x08,0x01,0xff,0xe2,0x85,0xba,0x00,0x01,0xff,0xe2,0x85,0xbb,
+	0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0x85,0xbc,0x00,0x01,0xff,0xe2,0x85,0xbd,
+	0x00,0x10,0x08,0x01,0xff,0xe2,0x85,0xbe,0x00,0x01,0xff,0xe2,0x85,0xbf,0x00,0x01,
+	0x00,0xe0,0x34,0x5d,0xcf,0x86,0xe5,0x13,0x5d,0xe4,0xf2,0x5c,0xe3,0xe1,0x5c,0xe2,
+	0xd4,0x5c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x04,0xff,0xe2,0x86,0x84,0x00,
+	0xe3,0x23,0x61,0xe2,0xf0,0x60,0xd1,0x0c,0xe0,0x9d,0x60,0xcf,0x86,0x65,0x7e,0x60,
+	0x01,0x00,0xd0,0x62,0xcf,0x86,0x55,0x04,0x01,0x00,0x54,0x04,0x01,0x00,0xd3,0x18,
+	0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x08,0x01,0xff,0xe2,0x93,0x90,0x00,
+	0x01,0xff,0xe2,0x93,0x91,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0x93,
+	0x92,0x00,0x01,0xff,0xe2,0x93,0x93,0x00,0x10,0x08,0x01,0xff,0xe2,0x93,0x94,0x00,
+	0x01,0xff,0xe2,0x93,0x95,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0x93,0x96,0x00,
+	0x01,0xff,0xe2,0x93,0x97,0x00,0x10,0x08,0x01,0xff,0xe2,0x93,0x98,0x00,0x01,0xff,
+	0xe2,0x93,0x99,0x00,0xcf,0x86,0xe5,0x57,0x60,0x94,0x80,0xd3,0x40,0xd2,0x20,0xd1,
+	0x10,0x10,0x08,0x01,0xff,0xe2,0x93,0x9a,0x00,0x01,0xff,0xe2,0x93,0x9b,0x00,0x10,
+	0x08,0x01,0xff,0xe2,0x93,0x9c,0x00,0x01,0xff,0xe2,0x93,0x9d,0x00,0xd1,0x10,0x10,
+	0x08,0x01,0xff,0xe2,0x93,0x9e,0x00,0x01,0xff,0xe2,0x93,0x9f,0x00,0x10,0x08,0x01,
+	0xff,0xe2,0x93,0xa0,0x00,0x01,0xff,0xe2,0x93,0xa1,0x00,0xd2,0x20,0xd1,0x10,0x10,
+	0x08,0x01,0xff,0xe2,0x93,0xa2,0x00,0x01,0xff,0xe2,0x93,0xa3,0x00,0x10,0x08,0x01,
+	0xff,0xe2,0x93,0xa4,0x00,0x01,0xff,0xe2,0x93,0xa5,0x00,0xd1,0x10,0x10,0x08,0x01,
+	0xff,0xe2,0x93,0xa6,0x00,0x01,0xff,0xe2,0x93,0xa7,0x00,0x10,0x08,0x01,0xff,0xe2,
+	0x93,0xa8,0x00,0x01,0xff,0xe2,0x93,0xa9,0x00,0x01,0x00,0xd4,0x0c,0xe3,0x33,0x62,
+	0xe2,0x2c,0x62,0xcf,0x06,0x04,0x00,0xe3,0x0c,0x65,0xe2,0xff,0x63,0xe1,0x2e,0x02,
+	0xe0,0x84,0x01,0xcf,0x86,0xe5,0x01,0x01,0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,
+	0x10,0x08,0x08,0xff,0xe2,0xb0,0xb0,0x00,0x08,0xff,0xe2,0xb0,0xb1,0x00,0x10,0x08,
+	0x08,0xff,0xe2,0xb0,0xb2,0x00,0x08,0xff,0xe2,0xb0,0xb3,0x00,0xd1,0x10,0x10,0x08,
+	0x08,0xff,0xe2,0xb0,0xb4,0x00,0x08,0xff,0xe2,0xb0,0xb5,0x00,0x10,0x08,0x08,0xff,
+	0xe2,0xb0,0xb6,0x00,0x08,0xff,0xe2,0xb0,0xb7,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,
+	0x08,0xff,0xe2,0xb0,0xb8,0x00,0x08,0xff,0xe2,0xb0,0xb9,0x00,0x10,0x08,0x08,0xff,
+	0xe2,0xb0,0xba,0x00,0x08,0xff,0xe2,0xb0,0xbb,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,
+	0xe2,0xb0,0xbc,0x00,0x08,0xff,0xe2,0xb0,0xbd,0x00,0x10,0x08,0x08,0xff,0xe2,0xb0,
+	0xbe,0x00,0x08,0xff,0xe2,0xb0,0xbf,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,
+	0x08,0xff,0xe2,0xb1,0x80,0x00,0x08,0xff,0xe2,0xb1,0x81,0x00,0x10,0x08,0x08,0xff,
+	0xe2,0xb1,0x82,0x00,0x08,0xff,0xe2,0xb1,0x83,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,
+	0xe2,0xb1,0x84,0x00,0x08,0xff,0xe2,0xb1,0x85,0x00,0x10,0x08,0x08,0xff,0xe2,0xb1,
+	0x86,0x00,0x08,0xff,0xe2,0xb1,0x87,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x08,0xff,
+	0xe2,0xb1,0x88,0x00,0x08,0xff,0xe2,0xb1,0x89,0x00,0x10,0x08,0x08,0xff,0xe2,0xb1,
+	0x8a,0x00,0x08,0xff,0xe2,0xb1,0x8b,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,0xe2,0xb1,
+	0x8c,0x00,0x08,0xff,0xe2,0xb1,0x8d,0x00,0x10,0x08,0x08,0xff,0xe2,0xb1,0x8e,0x00,
+	0x08,0xff,0xe2,0xb1,0x8f,0x00,0x94,0x7c,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,
+	0x08,0xff,0xe2,0xb1,0x90,0x00,0x08,0xff,0xe2,0xb1,0x91,0x00,0x10,0x08,0x08,0xff,
+	0xe2,0xb1,0x92,0x00,0x08,0xff,0xe2,0xb1,0x93,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,
+	0xe2,0xb1,0x94,0x00,0x08,0xff,0xe2,0xb1,0x95,0x00,0x10,0x08,0x08,0xff,0xe2,0xb1,
+	0x96,0x00,0x08,0xff,0xe2,0xb1,0x97,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x08,0xff,
+	0xe2,0xb1,0x98,0x00,0x08,0xff,0xe2,0xb1,0x99,0x00,0x10,0x08,0x08,0xff,0xe2,0xb1,
+	0x9a,0x00,0x08,0xff,0xe2,0xb1,0x9b,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,0xe2,0xb1,
+	0x9c,0x00,0x08,0xff,0xe2,0xb1,0x9d,0x00,0x10,0x08,0x08,0xff,0xe2,0xb1,0x9e,0x00,
+	0x00,0x00,0x08,0x00,0xcf,0x86,0xd5,0x07,0x64,0xef,0x61,0x08,0x00,0xd4,0x63,0xd3,
+	0x32,0xd2,0x1b,0xd1,0x0c,0x10,0x08,0x09,0xff,0xe2,0xb1,0xa1,0x00,0x09,0x00,0x10,
+	0x07,0x09,0xff,0xc9,0xab,0x00,0x09,0xff,0xe1,0xb5,0xbd,0x00,0xd1,0x0b,0x10,0x07,
+	0x09,0xff,0xc9,0xbd,0x00,0x09,0x00,0x10,0x04,0x09,0x00,0x09,0xff,0xe2,0xb1,0xa8,
+	0x00,0xd2,0x18,0xd1,0x0c,0x10,0x04,0x09,0x00,0x09,0xff,0xe2,0xb1,0xaa,0x00,0x10,
+	0x04,0x09,0x00,0x09,0xff,0xe2,0xb1,0xac,0x00,0xd1,0x0b,0x10,0x04,0x09,0x00,0x0a,
+	0xff,0xc9,0x91,0x00,0x10,0x07,0x0a,0xff,0xc9,0xb1,0x00,0x0a,0xff,0xc9,0x90,0x00,
+	0xd3,0x27,0xd2,0x17,0xd1,0x0b,0x10,0x07,0x0b,0xff,0xc9,0x92,0x00,0x0a,0x00,0x10,
+	0x08,0x0a,0xff,0xe2,0xb1,0xb3,0x00,0x0a,0x00,0x91,0x0c,0x10,0x04,0x09,0x00,0x09,
+	0xff,0xe2,0xb1,0xb6,0x00,0x09,0x00,0x52,0x04,0x0a,0x00,0x51,0x04,0x0a,0x00,0x10,
+	0x07,0x0b,0xff,0xc8,0xbf,0x00,0x0b,0xff,0xc9,0x80,0x00,0xe0,0x83,0x01,0xcf,0x86,
+	0xd5,0xc0,0xd4,0x60,0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb2,
+	0x81,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2,0x83,0x00,0x08,0x00,0xd1,0x0c,
+	0x10,0x08,0x08,0xff,0xe2,0xb2,0x85,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2,
+	0x87,0x00,0x08,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb2,0x89,0x00,
+	0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2,0x8b,0x00,0x08,0x00,0xd1,0x0c,0x10,0x08,
+	0x08,0xff,0xe2,0xb2,0x8d,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2,0x8f,0x00,
+	0x08,0x00,0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb2,0x91,0x00,
+	0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2,0x93,0x00,0x08,0x00,0xd1,0x0c,0x10,0x08,
+	0x08,0xff,0xe2,0xb2,0x95,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2,0x97,0x00,
+	0x08,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb2,0x99,0x00,0x08,0x00,
+	0x10,0x08,0x08,0xff,0xe2,0xb2,0x9b,0x00,0x08,0x00,0xd1,0x0c,0x10,0x08,0x08,0xff,
+	0xe2,0xb2,0x9d,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2,0x9f,0x00,0x08,0x00,
+	0xd4,0x60,0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb2,0xa1,0x00,
+	0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2,0xa3,0x00,0x08,0x00,0xd1,0x0c,0x10,0x08,
+	0x08,0xff,0xe2,0xb2,0xa5,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2,0xa7,0x00,
+	0x08,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb2,0xa9,0x00,0x08,0x00,
+	0x10,0x08,0x08,0xff,0xe2,0xb2,0xab,0x00,0x08,0x00,0xd1,0x0c,0x10,0x08,0x08,0xff,
+	0xe2,0xb2,0xad,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2,0xaf,0x00,0x08,0x00,
+	0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb2,0xb1,0x00,0x08,0x00,
+	0x10,0x08,0x08,0xff,0xe2,0xb2,0xb3,0x00,0x08,0x00,0xd1,0x0c,0x10,0x08,0x08,0xff,
+	0xe2,0xb2,0xb5,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2,0xb7,0x00,0x08,0x00,
+	0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb2,0xb9,0x00,0x08,0x00,0x10,0x08,
+	0x08,0xff,0xe2,0xb2,0xbb,0x00,0x08,0x00,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb2,
+	0xbd,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2,0xbf,0x00,0x08,0x00,0xcf,0x86,
+	0xd5,0xc0,0xd4,0x60,0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb3,
+	0x81,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb3,0x83,0x00,0x08,0x00,0xd1,0x0c,
+	0x10,0x08,0x08,0xff,0xe2,0xb3,0x85,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb3,
+	0x87,0x00,0x08,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb3,0x89,0x00,
+	0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb3,0x8b,0x00,0x08,0x00,0xd1,0x0c,0x10,0x08,
+	0x08,0xff,0xe2,0xb3,0x8d,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb3,0x8f,0x00,
+	0x08,0x00,0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb3,0x91,0x00,
+	0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb3,0x93,0x00,0x08,0x00,0xd1,0x0c,0x10,0x08,
+	0x08,0xff,0xe2,0xb3,0x95,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb3,0x97,0x00,
+	0x08,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb3,0x99,0x00,0x08,0x00,
+	0x10,0x08,0x08,0xff,0xe2,0xb3,0x9b,0x00,0x08,0x00,0xd1,0x0c,0x10,0x08,0x08,0xff,
+	0xe2,0xb3,0x9d,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb3,0x9f,0x00,0x08,0x00,
+	0xd4,0x3b,0xd3,0x1c,0x92,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb3,0xa1,0x00,
+	0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb3,0xa3,0x00,0x08,0x00,0x08,0x00,0xd2,0x10,
+	0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x0b,0xff,0xe2,0xb3,0xac,0x00,0xe1,0x3b,
+	0x5f,0x10,0x04,0x0b,0x00,0x0b,0xff,0xe2,0xb3,0xae,0x00,0xe3,0x40,0x5f,0x92,0x10,
+	0x51,0x04,0x0b,0xe6,0x10,0x08,0x0d,0xff,0xe2,0xb3,0xb3,0x00,0x0d,0x00,0x00,0x00,
+	0xe2,0x98,0x08,0xd1,0x0b,0xe0,0x11,0x67,0xcf,0x86,0xcf,0x06,0x01,0x00,0xe0,0x65,
+	0x6c,0xcf,0x86,0xe5,0xa7,0x05,0xd4,0x06,0xcf,0x06,0x04,0x00,0xd3,0x0c,0xe2,0xf8,
+	0x67,0xe1,0x8f,0x67,0xcf,0x06,0x04,0x00,0xe2,0xdb,0x01,0xe1,0x26,0x01,0xd0,0x09,
+	0xcf,0x86,0x65,0xf4,0x67,0x0a,0x00,0xcf,0x86,0xd5,0xc0,0xd4,0x60,0xd3,0x30,0xd2,
+	0x18,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x99,0x81,0x00,0x0a,0x00,0x10,0x08,0x0a,
+	0xff,0xea,0x99,0x83,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x99,0x85,
+	0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x99,0x87,0x00,0x0a,0x00,0xd2,0x18,0xd1,
+	0x0c,0x10,0x08,0x0a,0xff,0xea,0x99,0x89,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,
+	0x99,0x8b,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x99,0x8d,0x00,0x0a,
+	0x00,0x10,0x08,0x0a,0xff,0xea,0x99,0x8f,0x00,0x0a,0x00,0xd3,0x30,0xd2,0x18,0xd1,
+	0x0c,0x10,0x08,0x0a,0xff,0xea,0x99,0x91,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,
+	0x99,0x93,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x99,0x95,0x00,0x0a,
+	0x00,0x10,0x08,0x0a,0xff,0xea,0x99,0x97,0x00,0x0a,0x00,0xd2,0x18,0xd1,0x0c,0x10,
+	0x08,0x0a,0xff,0xea,0x99,0x99,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x99,0x9b,
+	0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x99,0x9d,0x00,0x0a,0x00,0x10,
+	0x08,0x0a,0xff,0xea,0x99,0x9f,0x00,0x0a,0x00,0xe4,0x5d,0x67,0xd3,0x30,0xd2,0x18,
+	0xd1,0x0c,0x10,0x08,0x0c,0xff,0xea,0x99,0xa1,0x00,0x0c,0x00,0x10,0x08,0x0a,0xff,
+	0xea,0x99,0xa3,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x99,0xa5,0x00,
+	0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x99,0xa7,0x00,0x0a,0x00,0xd2,0x18,0xd1,0x0c,
+	0x10,0x08,0x0a,0xff,0xea,0x99,0xa9,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x99,
+	0xab,0x00,0x0a,0x00,0xe1,0x0c,0x67,0x10,0x08,0x0a,0xff,0xea,0x99,0xad,0x00,0x0a,
+	0x00,0xe0,0x35,0x67,0xcf,0x86,0x95,0xab,0xd4,0x60,0xd3,0x30,0xd2,0x18,0xd1,0x0c,
+	0x10,0x08,0x0a,0xff,0xea,0x9a,0x81,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9a,
+	0x83,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9a,0x85,0x00,0x0a,0x00,
+	0x10,0x08,0x0a,0xff,0xea,0x9a,0x87,0x00,0x0a,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x08,
+	0x0a,0xff,0xea,0x9a,0x89,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9a,0x8b,0x00,
+	0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9a,0x8d,0x00,0x0a,0x00,0x10,0x08,
+	0x0a,0xff,0xea,0x9a,0x8f,0x00,0x0a,0x00,0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x08,
+	0x0a,0xff,0xea,0x9a,0x91,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9a,0x93,0x00,
+	0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9a,0x95,0x00,0x0a,0x00,0x10,0x08,
+	0x0a,0xff,0xea,0x9a,0x97,0x00,0x0a,0x00,0xe2,0x92,0x66,0xd1,0x0c,0x10,0x08,0x10,
+	0xff,0xea,0x9a,0x99,0x00,0x10,0x00,0x10,0x08,0x10,0xff,0xea,0x9a,0x9b,0x00,0x10,
+	0x00,0x0b,0x00,0xe1,0x10,0x02,0xd0,0xb9,0xcf,0x86,0xd5,0x07,0x64,0x9e,0x66,0x08,
+	0x00,0xd4,0x58,0xd3,0x28,0xd2,0x10,0x51,0x04,0x09,0x00,0x10,0x08,0x0a,0xff,0xea,
+	0x9c,0xa3,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9c,0xa5,0x00,0x0a,
+	0x00,0x10,0x08,0x0a,0xff,0xea,0x9c,0xa7,0x00,0x0a,0x00,0xd2,0x18,0xd1,0x0c,0x10,
+	0x08,0x0a,0xff,0xea,0x9c,0xa9,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9c,0xab,
+	0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9c,0xad,0x00,0x0a,0x00,0x10,
+	0x08,0x0a,0xff,0xea,0x9c,0xaf,0x00,0x0a,0x00,0xd3,0x28,0xd2,0x10,0x51,0x04,0x0a,
+	0x00,0x10,0x08,0x0a,0xff,0xea,0x9c,0xb3,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,
+	0xff,0xea,0x9c,0xb5,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9c,0xb7,0x00,0x0a,
+	0x00,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9c,0xb9,0x00,0x0a,0x00,0x10,
+	0x08,0x0a,0xff,0xea,0x9c,0xbb,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,
+	0x9c,0xbd,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9c,0xbf,0x00,0x0a,0x00,0xcf,
+	0x86,0xd5,0xc0,0xd4,0x60,0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,
+	0x9d,0x81,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0x83,0x00,0x0a,0x00,0xd1,
+	0x0c,0x10,0x08,0x0a,0xff,0xea,0x9d,0x85,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,
+	0x9d,0x87,0x00,0x0a,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9d,0x89,
+	0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0x8b,0x00,0x0a,0x00,0xd1,0x0c,0x10,
+	0x08,0x0a,0xff,0xea,0x9d,0x8d,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0x8f,
+	0x00,0x0a,0x00,0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9d,0x91,
+	0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0x93,0x00,0x0a,0x00,0xd1,0x0c,0x10,
+	0x08,0x0a,0xff,0xea,0x9d,0x95,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0x97,
+	0x00,0x0a,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9d,0x99,0x00,0x0a,
+	0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0x9b,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,
+	0xff,0xea,0x9d,0x9d,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0x9f,0x00,0x0a,
+	0x00,0xd4,0x60,0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9d,0xa1,
+	0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0xa3,0x00,0x0a,0x00,0xd1,0x0c,0x10,
+	0x08,0x0a,0xff,0xea,0x9d,0xa5,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0xa7,
+	0x00,0x0a,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9d,0xa9,0x00,0x0a,
+	0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0xab,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,
+	0xff,0xea,0x9d,0xad,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0xaf,0x00,0x0a,
+	0x00,0x53,0x04,0x0a,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x04,0x0a,0x00,0x0a,0xff,0xea,
+	0x9d,0xba,0x00,0x10,0x04,0x0a,0x00,0x0a,0xff,0xea,0x9d,0xbc,0x00,0xd1,0x0c,0x10,
+	0x04,0x0a,0x00,0x0a,0xff,0xe1,0xb5,0xb9,0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0xbf,
+	0x00,0x0a,0x00,0xe0,0x71,0x01,0xcf,0x86,0xd5,0xa6,0xd4,0x4e,0xd3,0x30,0xd2,0x18,
+	0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9e,0x81,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,
+	0xea,0x9e,0x83,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9e,0x85,0x00,
+	0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9e,0x87,0x00,0x0a,0x00,0xd2,0x10,0x51,0x04,
+	0x0a,0x00,0x10,0x04,0x0a,0x00,0x0a,0xff,0xea,0x9e,0x8c,0x00,0xe1,0x9a,0x64,0x10,
+	0x04,0x0a,0x00,0x0c,0xff,0xc9,0xa5,0x00,0xd3,0x28,0xd2,0x18,0xd1,0x0c,0x10,0x08,
+	0x0c,0xff,0xea,0x9e,0x91,0x00,0x0c,0x00,0x10,0x08,0x0d,0xff,0xea,0x9e,0x93,0x00,
+	0x0d,0x00,0x51,0x04,0x10,0x00,0x10,0x08,0x10,0xff,0xea,0x9e,0x97,0x00,0x10,0x00,
+	0xd2,0x18,0xd1,0x0c,0x10,0x08,0x10,0xff,0xea,0x9e,0x99,0x00,0x10,0x00,0x10,0x08,
+	0x10,0xff,0xea,0x9e,0x9b,0x00,0x10,0x00,0xd1,0x0c,0x10,0x08,0x10,0xff,0xea,0x9e,
+	0x9d,0x00,0x10,0x00,0x10,0x08,0x10,0xff,0xea,0x9e,0x9f,0x00,0x10,0x00,0xd4,0x63,
+	0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x0c,0xff,0xea,0x9e,0xa1,0x00,0x0c,0x00,
+	0x10,0x08,0x0c,0xff,0xea,0x9e,0xa3,0x00,0x0c,0x00,0xd1,0x0c,0x10,0x08,0x0c,0xff,
+	0xea,0x9e,0xa5,0x00,0x0c,0x00,0x10,0x08,0x0c,0xff,0xea,0x9e,0xa7,0x00,0x0c,0x00,
+	0xd2,0x1a,0xd1,0x0c,0x10,0x08,0x0c,0xff,0xea,0x9e,0xa9,0x00,0x0c,0x00,0x10,0x07,
+	0x0d,0xff,0xc9,0xa6,0x00,0x10,0xff,0xc9,0x9c,0x00,0xd1,0x0e,0x10,0x07,0x10,0xff,
+	0xc9,0xa1,0x00,0x10,0xff,0xc9,0xac,0x00,0x10,0x07,0x12,0xff,0xc9,0xaa,0x00,0x14,
+	0x00,0xd3,0x35,0xd2,0x1d,0xd1,0x0e,0x10,0x07,0x10,0xff,0xca,0x9e,0x00,0x10,0xff,
+	0xca,0x87,0x00,0x10,0x07,0x11,0xff,0xca,0x9d,0x00,0x11,0xff,0xea,0xad,0x93,0x00,
+	0xd1,0x0c,0x10,0x08,0x11,0xff,0xea,0x9e,0xb5,0x00,0x11,0x00,0x10,0x08,0x11,0xff,
+	0xea,0x9e,0xb7,0x00,0x11,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x14,0xff,0xea,0x9e,
+	0xb9,0x00,0x14,0x00,0x10,0x08,0x15,0xff,0xea,0x9e,0xbb,0x00,0x15,0x00,0xd1,0x0c,
+	0x10,0x08,0x15,0xff,0xea,0x9e,0xbd,0x00,0x15,0x00,0x10,0x08,0x15,0xff,0xea,0x9e,
+	0xbf,0x00,0x15,0x00,0xcf,0x86,0xe5,0xd4,0x63,0x94,0x2f,0x93,0x2b,0xd2,0x10,0x51,
+	0x04,0x00,0x00,0x10,0x08,0x15,0xff,0xea,0x9f,0x83,0x00,0x15,0x00,0xd1,0x0f,0x10,
+	0x08,0x15,0xff,0xea,0x9e,0x94,0x00,0x15,0xff,0xca,0x82,0x00,0x10,0x08,0x15,0xff,
+	0xe1,0xb6,0x8e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe4,0xb4,0x66,0xd3,0x1d,0xe2,
+	0x5b,0x64,0xe1,0x0a,0x64,0xe0,0xf7,0x63,0xcf,0x86,0xe5,0xd8,0x63,0x94,0x0b,0x93,
+	0x07,0x62,0xc3,0x63,0x08,0x00,0x08,0x00,0x08,0x00,0xd2,0x0f,0xe1,0x5a,0x65,0xe0,
+	0x27,0x65,0xcf,0x86,0x65,0x0c,0x65,0x0a,0x00,0xd1,0xab,0xd0,0x1a,0xcf,0x86,0xe5,
+	0x17,0x66,0xe4,0xfa,0x65,0xe3,0xe1,0x65,0xe2,0xd4,0x65,0x91,0x08,0x10,0x04,0x00,
+	0x00,0x0c,0x00,0x0c,0x00,0xcf,0x86,0x55,0x04,0x10,0x00,0xd4,0x0b,0x93,0x07,0x62,
+	0x27,0x66,0x11,0x00,0x00,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x11,0xff,
+	0xe1,0x8e,0xa0,0x00,0x11,0xff,0xe1,0x8e,0xa1,0x00,0x10,0x08,0x11,0xff,0xe1,0x8e,
+	0xa2,0x00,0x11,0xff,0xe1,0x8e,0xa3,0x00,0xd1,0x10,0x10,0x08,0x11,0xff,0xe1,0x8e,
+	0xa4,0x00,0x11,0xff,0xe1,0x8e,0xa5,0x00,0x10,0x08,0x11,0xff,0xe1,0x8e,0xa6,0x00,
+	0x11,0xff,0xe1,0x8e,0xa7,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x11,0xff,0xe1,0x8e,
+	0xa8,0x00,0x11,0xff,0xe1,0x8e,0xa9,0x00,0x10,0x08,0x11,0xff,0xe1,0x8e,0xaa,0x00,
+	0x11,0xff,0xe1,0x8e,0xab,0x00,0xd1,0x10,0x10,0x08,0x11,0xff,0xe1,0x8e,0xac,0x00,
+	0x11,0xff,0xe1,0x8e,0xad,0x00,0x10,0x08,0x11,0xff,0xe1,0x8e,0xae,0x00,0x11,0xff,
+	0xe1,0x8e,0xaf,0x00,0xe0,0xb2,0x65,0xcf,0x86,0xe5,0x01,0x01,0xd4,0x80,0xd3,0x40,
+	0xd2,0x20,0xd1,0x10,0x10,0x08,0x11,0xff,0xe1,0x8e,0xb0,0x00,0x11,0xff,0xe1,0x8e,
+	0xb1,0x00,0x10,0x08,0x11,0xff,0xe1,0x8e,0xb2,0x00,0x11,0xff,0xe1,0x8e,0xb3,0x00,
+	0xd1,0x10,0x10,0x08,0x11,0xff,0xe1,0x8e,0xb4,0x00,0x11,0xff,0xe1,0x8e,0xb5,0x00,
+	0x10,0x08,0x11,0xff,0xe1,0x8e,0xb6,0x00,0x11,0xff,0xe1,0x8e,0xb7,0x00,0xd2,0x20,
+	0xd1,0x10,0x10,0x08,0x11,0xff,0xe1,0x8e,0xb8,0x00,0x11,0xff,0xe1,0x8e,0xb9,0x00,
+	0x10,0x08,0x11,0xff,0xe1,0x8e,0xba,0x00,0x11,0xff,0xe1,0x8e,0xbb,0x00,0xd1,0x10,
+	0x10,0x08,0x11,0xff,0xe1,0x8e,0xbc,0x00,0x11,0xff,0xe1,0x8e,0xbd,0x00,0x10,0x08,
+	0x11,0xff,0xe1,0x8e,0xbe,0x00,0x11,0xff,0xe1,0x8e,0xbf,0x00,0xd3,0x40,0xd2,0x20,
+	0xd1,0x10,0x10,0x08,0x11,0xff,0xe1,0x8f,0x80,0x00,0x11,0xff,0xe1,0x8f,0x81,0x00,
+	0x10,0x08,0x11,0xff,0xe1,0x8f,0x82,0x00,0x11,0xff,0xe1,0x8f,0x83,0x00,0xd1,0x10,
+	0x10,0x08,0x11,0xff,0xe1,0x8f,0x84,0x00,0x11,0xff,0xe1,0x8f,0x85,0x00,0x10,0x08,
+	0x11,0xff,0xe1,0x8f,0x86,0x00,0x11,0xff,0xe1,0x8f,0x87,0x00,0xd2,0x20,0xd1,0x10,
+	0x10,0x08,0x11,0xff,0xe1,0x8f,0x88,0x00,0x11,0xff,0xe1,0x8f,0x89,0x00,0x10,0x08,
+	0x11,0xff,0xe1,0x8f,0x8a,0x00,0x11,0xff,0xe1,0x8f,0x8b,0x00,0xd1,0x10,0x10,0x08,
+	0x11,0xff,0xe1,0x8f,0x8c,0x00,0x11,0xff,0xe1,0x8f,0x8d,0x00,0x10,0x08,0x11,0xff,
+	0xe1,0x8f,0x8e,0x00,0x11,0xff,0xe1,0x8f,0x8f,0x00,0xd4,0x80,0xd3,0x40,0xd2,0x20,
+	0xd1,0x10,0x10,0x08,0x11,0xff,0xe1,0x8f,0x90,0x00,0x11,0xff,0xe1,0x8f,0x91,0x00,
+	0x10,0x08,0x11,0xff,0xe1,0x8f,0x92,0x00,0x11,0xff,0xe1,0x8f,0x93,0x00,0xd1,0x10,
+	0x10,0x08,0x11,0xff,0xe1,0x8f,0x94,0x00,0x11,0xff,0xe1,0x8f,0x95,0x00,0x10,0x08,
+	0x11,0xff,0xe1,0x8f,0x96,0x00,0x11,0xff,0xe1,0x8f,0x97,0x00,0xd2,0x20,0xd1,0x10,
+	0x10,0x08,0x11,0xff,0xe1,0x8f,0x98,0x00,0x11,0xff,0xe1,0x8f,0x99,0x00,0x10,0x08,
+	0x11,0xff,0xe1,0x8f,0x9a,0x00,0x11,0xff,0xe1,0x8f,0x9b,0x00,0xd1,0x10,0x10,0x08,
+	0x11,0xff,0xe1,0x8f,0x9c,0x00,0x11,0xff,0xe1,0x8f,0x9d,0x00,0x10,0x08,0x11,0xff,
+	0xe1,0x8f,0x9e,0x00,0x11,0xff,0xe1,0x8f,0x9f,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,
+	0x10,0x08,0x11,0xff,0xe1,0x8f,0xa0,0x00,0x11,0xff,0xe1,0x8f,0xa1,0x00,0x10,0x08,
+	0x11,0xff,0xe1,0x8f,0xa2,0x00,0x11,0xff,0xe1,0x8f,0xa3,0x00,0xd1,0x10,0x10,0x08,
+	0x11,0xff,0xe1,0x8f,0xa4,0x00,0x11,0xff,0xe1,0x8f,0xa5,0x00,0x10,0x08,0x11,0xff,
+	0xe1,0x8f,0xa6,0x00,0x11,0xff,0xe1,0x8f,0xa7,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,
+	0x11,0xff,0xe1,0x8f,0xa8,0x00,0x11,0xff,0xe1,0x8f,0xa9,0x00,0x10,0x08,0x11,0xff,
+	0xe1,0x8f,0xaa,0x00,0x11,0xff,0xe1,0x8f,0xab,0x00,0xd1,0x10,0x10,0x08,0x11,0xff,
+	0xe1,0x8f,0xac,0x00,0x11,0xff,0xe1,0x8f,0xad,0x00,0x10,0x08,0x11,0xff,0xe1,0x8f,
+	0xae,0x00,0x11,0xff,0xe1,0x8f,0xaf,0x00,0xd1,0x0c,0xe0,0xeb,0x63,0xcf,0x86,0xcf,
+	0x06,0x02,0xff,0xff,0xd0,0x08,0xcf,0x86,0xcf,0x06,0x01,0x00,0xcf,0x86,0xd5,0x06,
+	0xcf,0x06,0x01,0x00,0xd4,0xae,0xd3,0x09,0xe2,0x54,0x64,0xcf,0x06,0x01,0x00,0xd2,
+	0x27,0xe1,0x1f,0x70,0xe0,0x26,0x6e,0xcf,0x86,0xe5,0x3f,0x6d,0xe4,0xce,0x6c,0xe3,
+	0x99,0x6c,0xe2,0x78,0x6c,0xe1,0x67,0x6c,0x10,0x08,0x01,0xff,0xe5,0x88,0x87,0x00,
+	0x01,0xff,0xe5,0xba,0xa6,0x00,0xe1,0x74,0x74,0xe0,0xe8,0x73,0xcf,0x86,0xe5,0x22,
+	0x73,0xd4,0x3b,0x93,0x37,0xd2,0x1d,0xd1,0x0e,0x10,0x07,0x01,0xff,0x66,0x66,0x00,
+	0x01,0xff,0x66,0x69,0x00,0x10,0x07,0x01,0xff,0x66,0x6c,0x00,0x01,0xff,0x66,0x66,
+	0x69,0x00,0xd1,0x0f,0x10,0x08,0x01,0xff,0x66,0x66,0x6c,0x00,0x01,0xff,0x73,0x74,
+	0x00,0x10,0x07,0x01,0xff,0x73,0x74,0x00,0x00,0x00,0x00,0x00,0xe3,0xc8,0x72,0xd2,
+	0x11,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x01,0xff,0xd5,0xb4,0xd5,0xb6,0x00,
+	0xd1,0x12,0x10,0x09,0x01,0xff,0xd5,0xb4,0xd5,0xa5,0x00,0x01,0xff,0xd5,0xb4,0xd5,
+	0xab,0x00,0x10,0x09,0x01,0xff,0xd5,0xbe,0xd5,0xb6,0x00,0x01,0xff,0xd5,0xb4,0xd5,
+	0xad,0x00,0xd3,0x09,0xe2,0x40,0x74,0xcf,0x06,0x01,0x00,0xd2,0x13,0xe1,0x30,0x75,
+	0xe0,0xc1,0x74,0xcf,0x86,0xe5,0x9e,0x74,0x64,0x8d,0x74,0x06,0xff,0x00,0xe1,0x96,
+	0x75,0xe0,0x63,0x75,0xcf,0x86,0xd5,0x18,0x94,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,
+	0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd4,0x7c,
+	0xd3,0x3c,0xd2,0x1c,0xd1,0x0c,0x10,0x04,0x01,0x00,0x01,0xff,0xef,0xbd,0x81,0x00,
+	0x10,0x08,0x01,0xff,0xef,0xbd,0x82,0x00,0x01,0xff,0xef,0xbd,0x83,0x00,0xd1,0x10,
+	0x10,0x08,0x01,0xff,0xef,0xbd,0x84,0x00,0x01,0xff,0xef,0xbd,0x85,0x00,0x10,0x08,
+	0x01,0xff,0xef,0xbd,0x86,0x00,0x01,0xff,0xef,0xbd,0x87,0x00,0xd2,0x20,0xd1,0x10,
+	0x10,0x08,0x01,0xff,0xef,0xbd,0x88,0x00,0x01,0xff,0xef,0xbd,0x89,0x00,0x10,0x08,
+	0x01,0xff,0xef,0xbd,0x8a,0x00,0x01,0xff,0xef,0xbd,0x8b,0x00,0xd1,0x10,0x10,0x08,
+	0x01,0xff,0xef,0xbd,0x8c,0x00,0x01,0xff,0xef,0xbd,0x8d,0x00,0x10,0x08,0x01,0xff,
+	0xef,0xbd,0x8e,0x00,0x01,0xff,0xef,0xbd,0x8f,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,
+	0x10,0x08,0x01,0xff,0xef,0xbd,0x90,0x00,0x01,0xff,0xef,0xbd,0x91,0x00,0x10,0x08,
+	0x01,0xff,0xef,0xbd,0x92,0x00,0x01,0xff,0xef,0xbd,0x93,0x00,0xd1,0x10,0x10,0x08,
+	0x01,0xff,0xef,0xbd,0x94,0x00,0x01,0xff,0xef,0xbd,0x95,0x00,0x10,0x08,0x01,0xff,
+	0xef,0xbd,0x96,0x00,0x01,0xff,0xef,0xbd,0x97,0x00,0x92,0x1c,0xd1,0x10,0x10,0x08,
+	0x01,0xff,0xef,0xbd,0x98,0x00,0x01,0xff,0xef,0xbd,0x99,0x00,0x10,0x08,0x01,0xff,
+	0xef,0xbd,0x9a,0x00,0x01,0x00,0x01,0x00,0x83,0xe2,0x87,0xb3,0xe1,0x60,0xb0,0xe0,
+	0xdd,0xae,0xcf,0x86,0xe5,0x81,0x9b,0xc4,0xe3,0xc1,0x07,0xe2,0x62,0x06,0xe1,0x11,
+	0x86,0xe0,0x09,0x05,0xcf,0x86,0xe5,0xfb,0x02,0xd4,0x1c,0xe3,0x7f,0x76,0xe2,0xd6,
+	0x75,0xe1,0xb1,0x75,0xe0,0x8a,0x75,0xcf,0x86,0xe5,0x57,0x75,0x94,0x07,0x63,0x42,
+	0x75,0x07,0x00,0x07,0x00,0xe3,0x2b,0x78,0xe2,0xf0,0x77,0xe1,0x77,0x01,0xe0,0x88,
+	0x77,0xcf,0x86,0xe5,0x21,0x01,0xd4,0x90,0xd3,0x48,0xd2,0x24,0xd1,0x12,0x10,0x09,
+	0x05,0xff,0xf0,0x90,0x90,0xa8,0x00,0x05,0xff,0xf0,0x90,0x90,0xa9,0x00,0x10,0x09,
+	0x05,0xff,0xf0,0x90,0x90,0xaa,0x00,0x05,0xff,0xf0,0x90,0x90,0xab,0x00,0xd1,0x12,
+	0x10,0x09,0x05,0xff,0xf0,0x90,0x90,0xac,0x00,0x05,0xff,0xf0,0x90,0x90,0xad,0x00,
+	0x10,0x09,0x05,0xff,0xf0,0x90,0x90,0xae,0x00,0x05,0xff,0xf0,0x90,0x90,0xaf,0x00,
+	0xd2,0x24,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0x90,0x90,0xb0,0x00,0x05,0xff,0xf0,
+	0x90,0x90,0xb1,0x00,0x10,0x09,0x05,0xff,0xf0,0x90,0x90,0xb2,0x00,0x05,0xff,0xf0,
+	0x90,0x90,0xb3,0x00,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0x90,0x90,0xb4,0x00,0x05,
+	0xff,0xf0,0x90,0x90,0xb5,0x00,0x10,0x09,0x05,0xff,0xf0,0x90,0x90,0xb6,0x00,0x05,
+	0xff,0xf0,0x90,0x90,0xb7,0x00,0xd3,0x48,0xd2,0x24,0xd1,0x12,0x10,0x09,0x05,0xff,
+	0xf0,0x90,0x90,0xb8,0x00,0x05,0xff,0xf0,0x90,0x90,0xb9,0x00,0x10,0x09,0x05,0xff,
+	0xf0,0x90,0x90,0xba,0x00,0x05,0xff,0xf0,0x90,0x90,0xbb,0x00,0xd1,0x12,0x10,0x09,
+	0x05,0xff,0xf0,0x90,0x90,0xbc,0x00,0x05,0xff,0xf0,0x90,0x90,0xbd,0x00,0x10,0x09,
+	0x05,0xff,0xf0,0x90,0x90,0xbe,0x00,0x05,0xff,0xf0,0x90,0x90,0xbf,0x00,0xd2,0x24,
+	0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0x90,0x91,0x80,0x00,0x05,0xff,0xf0,0x90,0x91,
+	0x81,0x00,0x10,0x09,0x05,0xff,0xf0,0x90,0x91,0x82,0x00,0x05,0xff,0xf0,0x90,0x91,
+	0x83,0x00,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0x90,0x91,0x84,0x00,0x05,0xff,0xf0,
+	0x90,0x91,0x85,0x00,0x10,0x09,0x05,0xff,0xf0,0x90,0x91,0x86,0x00,0x05,0xff,0xf0,
+	0x90,0x91,0x87,0x00,0x94,0x4c,0x93,0x48,0xd2,0x24,0xd1,0x12,0x10,0x09,0x05,0xff,
+	0xf0,0x90,0x91,0x88,0x00,0x05,0xff,0xf0,0x90,0x91,0x89,0x00,0x10,0x09,0x05,0xff,
+	0xf0,0x90,0x91,0x8a,0x00,0x05,0xff,0xf0,0x90,0x91,0x8b,0x00,0xd1,0x12,0x10,0x09,
+	0x05,0xff,0xf0,0x90,0x91,0x8c,0x00,0x05,0xff,0xf0,0x90,0x91,0x8d,0x00,0x10,0x09,
+	0x07,0xff,0xf0,0x90,0x91,0x8e,0x00,0x07,0xff,0xf0,0x90,0x91,0x8f,0x00,0x05,0x00,
+	0x05,0x00,0xd0,0xa0,0xcf,0x86,0xd5,0x07,0x64,0x30,0x76,0x07,0x00,0xd4,0x07,0x63,
+	0x3d,0x76,0x07,0x00,0xd3,0x48,0xd2,0x24,0xd1,0x12,0x10,0x09,0x12,0xff,0xf0,0x90,
+	0x93,0x98,0x00,0x12,0xff,0xf0,0x90,0x93,0x99,0x00,0x10,0x09,0x12,0xff,0xf0,0x90,
+	0x93,0x9a,0x00,0x12,0xff,0xf0,0x90,0x93,0x9b,0x00,0xd1,0x12,0x10,0x09,0x12,0xff,
+	0xf0,0x90,0x93,0x9c,0x00,0x12,0xff,0xf0,0x90,0x93,0x9d,0x00,0x10,0x09,0x12,0xff,
+	0xf0,0x90,0x93,0x9e,0x00,0x12,0xff,0xf0,0x90,0x93,0x9f,0x00,0xd2,0x24,0xd1,0x12,
+	0x10,0x09,0x12,0xff,0xf0,0x90,0x93,0xa0,0x00,0x12,0xff,0xf0,0x90,0x93,0xa1,0x00,
+	0x10,0x09,0x12,0xff,0xf0,0x90,0x93,0xa2,0x00,0x12,0xff,0xf0,0x90,0x93,0xa3,0x00,
+	0xd1,0x12,0x10,0x09,0x12,0xff,0xf0,0x90,0x93,0xa4,0x00,0x12,0xff,0xf0,0x90,0x93,
+	0xa5,0x00,0x10,0x09,0x12,0xff,0xf0,0x90,0x93,0xa6,0x00,0x12,0xff,0xf0,0x90,0x93,
+	0xa7,0x00,0xcf,0x86,0xe5,0xc6,0x75,0xd4,0x90,0xd3,0x48,0xd2,0x24,0xd1,0x12,0x10,
+	0x09,0x12,0xff,0xf0,0x90,0x93,0xa8,0x00,0x12,0xff,0xf0,0x90,0x93,0xa9,0x00,0x10,
+	0x09,0x12,0xff,0xf0,0x90,0x93,0xaa,0x00,0x12,0xff,0xf0,0x90,0x93,0xab,0x00,0xd1,
+	0x12,0x10,0x09,0x12,0xff,0xf0,0x90,0x93,0xac,0x00,0x12,0xff,0xf0,0x90,0x93,0xad,
+	0x00,0x10,0x09,0x12,0xff,0xf0,0x90,0x93,0xae,0x00,0x12,0xff,0xf0,0x90,0x93,0xaf,
+	0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x12,0xff,0xf0,0x90,0x93,0xb0,0x00,0x12,0xff,
+	0xf0,0x90,0x93,0xb1,0x00,0x10,0x09,0x12,0xff,0xf0,0x90,0x93,0xb2,0x00,0x12,0xff,
+	0xf0,0x90,0x93,0xb3,0x00,0xd1,0x12,0x10,0x09,0x12,0xff,0xf0,0x90,0x93,0xb4,0x00,
+	0x12,0xff,0xf0,0x90,0x93,0xb5,0x00,0x10,0x09,0x12,0xff,0xf0,0x90,0x93,0xb6,0x00,
+	0x12,0xff,0xf0,0x90,0x93,0xb7,0x00,0x93,0x28,0x92,0x24,0xd1,0x12,0x10,0x09,0x12,
+	0xff,0xf0,0x90,0x93,0xb8,0x00,0x12,0xff,0xf0,0x90,0x93,0xb9,0x00,0x10,0x09,0x12,
+	0xff,0xf0,0x90,0x93,0xba,0x00,0x12,0xff,0xf0,0x90,0x93,0xbb,0x00,0x00,0x00,0x12,
+	0x00,0xd4,0x1f,0xe3,0xdf,0x76,0xe2,0x6a,0x76,0xe1,0x09,0x76,0xe0,0xea,0x75,0xcf,
+	0x86,0xe5,0xb7,0x75,0x94,0x0a,0xe3,0xa2,0x75,0x62,0x99,0x75,0x07,0x00,0x07,0x00,
+	0xe3,0xde,0x78,0xe2,0xaf,0x78,0xd1,0x09,0xe0,0x4c,0x78,0xcf,0x06,0x0b,0x00,0xe0,
+	0x7f,0x78,0xcf,0x86,0xe5,0x21,0x01,0xd4,0x90,0xd3,0x48,0xd2,0x24,0xd1,0x12,0x10,
+	0x09,0x11,0xff,0xf0,0x90,0xb3,0x80,0x00,0x11,0xff,0xf0,0x90,0xb3,0x81,0x00,0x10,
+	0x09,0x11,0xff,0xf0,0x90,0xb3,0x82,0x00,0x11,0xff,0xf0,0x90,0xb3,0x83,0x00,0xd1,
+	0x12,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0x84,0x00,0x11,0xff,0xf0,0x90,0xb3,0x85,
+	0x00,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0x86,0x00,0x11,0xff,0xf0,0x90,0xb3,0x87,
+	0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0x88,0x00,0x11,0xff,
+	0xf0,0x90,0xb3,0x89,0x00,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0x8a,0x00,0x11,0xff,
+	0xf0,0x90,0xb3,0x8b,0x00,0xd1,0x12,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0x8c,0x00,
+	0x11,0xff,0xf0,0x90,0xb3,0x8d,0x00,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0x8e,0x00,
+	0x11,0xff,0xf0,0x90,0xb3,0x8f,0x00,0xd3,0x48,0xd2,0x24,0xd1,0x12,0x10,0x09,0x11,
+	0xff,0xf0,0x90,0xb3,0x90,0x00,0x11,0xff,0xf0,0x90,0xb3,0x91,0x00,0x10,0x09,0x11,
+	0xff,0xf0,0x90,0xb3,0x92,0x00,0x11,0xff,0xf0,0x90,0xb3,0x93,0x00,0xd1,0x12,0x10,
+	0x09,0x11,0xff,0xf0,0x90,0xb3,0x94,0x00,0x11,0xff,0xf0,0x90,0xb3,0x95,0x00,0x10,
+	0x09,0x11,0xff,0xf0,0x90,0xb3,0x96,0x00,0x11,0xff,0xf0,0x90,0xb3,0x97,0x00,0xd2,
+	0x24,0xd1,0x12,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0x98,0x00,0x11,0xff,0xf0,0x90,
+	0xb3,0x99,0x00,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0x9a,0x00,0x11,0xff,0xf0,0x90,
+	0xb3,0x9b,0x00,0xd1,0x12,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0x9c,0x00,0x11,0xff,
+	0xf0,0x90,0xb3,0x9d,0x00,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0x9e,0x00,0x11,0xff,
+	0xf0,0x90,0xb3,0x9f,0x00,0xd4,0x90,0xd3,0x48,0xd2,0x24,0xd1,0x12,0x10,0x09,0x11,
+	0xff,0xf0,0x90,0xb3,0xa0,0x00,0x11,0xff,0xf0,0x90,0xb3,0xa1,0x00,0x10,0x09,0x11,
+	0xff,0xf0,0x90,0xb3,0xa2,0x00,0x11,0xff,0xf0,0x90,0xb3,0xa3,0x00,0xd1,0x12,0x10,
+	0x09,0x11,0xff,0xf0,0x90,0xb3,0xa4,0x00,0x11,0xff,0xf0,0x90,0xb3,0xa5,0x00,0x10,
+	0x09,0x11,0xff,0xf0,0x90,0xb3,0xa6,0x00,0x11,0xff,0xf0,0x90,0xb3,0xa7,0x00,0xd2,
+	0x24,0xd1,0x12,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0xa8,0x00,0x11,0xff,0xf0,0x90,
+	0xb3,0xa9,0x00,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0xaa,0x00,0x11,0xff,0xf0,0x90,
+	0xb3,0xab,0x00,0xd1,0x12,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0xac,0x00,0x11,0xff,
+	0xf0,0x90,0xb3,0xad,0x00,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0xae,0x00,0x11,0xff,
+	0xf0,0x90,0xb3,0xaf,0x00,0x93,0x23,0x92,0x1f,0xd1,0x12,0x10,0x09,0x11,0xff,0xf0,
+	0x90,0xb3,0xb0,0x00,0x11,0xff,0xf0,0x90,0xb3,0xb1,0x00,0x10,0x09,0x11,0xff,0xf0,
+	0x90,0xb3,0xb2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0xd5,0x15,0xe4,0x91,
+	0x7b,0xe3,0x9b,0x79,0xe2,0x94,0x78,0xe1,0xe4,0x77,0xe0,0x9d,0x77,0xcf,0x06,0x0c,
+	0x00,0xe4,0xeb,0x7e,0xe3,0x44,0x7e,0xe2,0xed,0x7d,0xd1,0x0c,0xe0,0xb2,0x7d,0xcf,
+	0x86,0x65,0x93,0x7d,0x14,0x00,0xe0,0xb6,0x7d,0xcf,0x86,0x55,0x04,0x00,0x00,0xd4,
+	0x90,0xd3,0x48,0xd2,0x24,0xd1,0x12,0x10,0x09,0x10,0xff,0xf0,0x91,0xa3,0x80,0x00,
+	0x10,0xff,0xf0,0x91,0xa3,0x81,0x00,0x10,0x09,0x10,0xff,0xf0,0x91,0xa3,0x82,0x00,
+	0x10,0xff,0xf0,0x91,0xa3,0x83,0x00,0xd1,0x12,0x10,0x09,0x10,0xff,0xf0,0x91,0xa3,
+	0x84,0x00,0x10,0xff,0xf0,0x91,0xa3,0x85,0x00,0x10,0x09,0x10,0xff,0xf0,0x91,0xa3,
+	0x86,0x00,0x10,0xff,0xf0,0x91,0xa3,0x87,0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x10,
+	0xff,0xf0,0x91,0xa3,0x88,0x00,0x10,0xff,0xf0,0x91,0xa3,0x89,0x00,0x10,0x09,0x10,
+	0xff,0xf0,0x91,0xa3,0x8a,0x00,0x10,0xff,0xf0,0x91,0xa3,0x8b,0x00,0xd1,0x12,0x10,
+	0x09,0x10,0xff,0xf0,0x91,0xa3,0x8c,0x00,0x10,0xff,0xf0,0x91,0xa3,0x8d,0x00,0x10,
+	0x09,0x10,0xff,0xf0,0x91,0xa3,0x8e,0x00,0x10,0xff,0xf0,0x91,0xa3,0x8f,0x00,0xd3,
+	0x48,0xd2,0x24,0xd1,0x12,0x10,0x09,0x10,0xff,0xf0,0x91,0xa3,0x90,0x00,0x10,0xff,
+	0xf0,0x91,0xa3,0x91,0x00,0x10,0x09,0x10,0xff,0xf0,0x91,0xa3,0x92,0x00,0x10,0xff,
+	0xf0,0x91,0xa3,0x93,0x00,0xd1,0x12,0x10,0x09,0x10,0xff,0xf0,0x91,0xa3,0x94,0x00,
+	0x10,0xff,0xf0,0x91,0xa3,0x95,0x00,0x10,0x09,0x10,0xff,0xf0,0x91,0xa3,0x96,0x00,
+	0x10,0xff,0xf0,0x91,0xa3,0x97,0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x10,0xff,0xf0,
+	0x91,0xa3,0x98,0x00,0x10,0xff,0xf0,0x91,0xa3,0x99,0x00,0x10,0x09,0x10,0xff,0xf0,
+	0x91,0xa3,0x9a,0x00,0x10,0xff,0xf0,0x91,0xa3,0x9b,0x00,0xd1,0x12,0x10,0x09,0x10,
+	0xff,0xf0,0x91,0xa3,0x9c,0x00,0x10,0xff,0xf0,0x91,0xa3,0x9d,0x00,0x10,0x09,0x10,
+	0xff,0xf0,0x91,0xa3,0x9e,0x00,0x10,0xff,0xf0,0x91,0xa3,0x9f,0x00,0xd1,0x11,0xe0,
+	0x12,0x81,0xcf,0x86,0xe5,0x09,0x81,0xe4,0xd2,0x80,0xcf,0x06,0x00,0x00,0xe0,0xdb,
+	0x82,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x09,0xe3,0x10,0x81,0xcf,0x06,
+	0x0c,0x00,0xd3,0x06,0xcf,0x06,0x00,0x00,0xe2,0x3b,0x82,0xe1,0x16,0x82,0xd0,0x06,
+	0xcf,0x06,0x00,0x00,0xcf,0x86,0xa5,0x21,0x01,0xd4,0x90,0xd3,0x48,0xd2,0x24,0xd1,
+	0x12,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xa0,0x00,0x14,0xff,0xf0,0x96,0xb9,0xa1,
+	0x00,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xa2,0x00,0x14,0xff,0xf0,0x96,0xb9,0xa3,
+	0x00,0xd1,0x12,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xa4,0x00,0x14,0xff,0xf0,0x96,
+	0xb9,0xa5,0x00,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xa6,0x00,0x14,0xff,0xf0,0x96,
+	0xb9,0xa7,0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xa8,0x00,
+	0x14,0xff,0xf0,0x96,0xb9,0xa9,0x00,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xaa,0x00,
+	0x14,0xff,0xf0,0x96,0xb9,0xab,0x00,0xd1,0x12,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,
+	0xac,0x00,0x14,0xff,0xf0,0x96,0xb9,0xad,0x00,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,
+	0xae,0x00,0x14,0xff,0xf0,0x96,0xb9,0xaf,0x00,0xd3,0x48,0xd2,0x24,0xd1,0x12,0x10,
+	0x09,0x14,0xff,0xf0,0x96,0xb9,0xb0,0x00,0x14,0xff,0xf0,0x96,0xb9,0xb1,0x00,0x10,
+	0x09,0x14,0xff,0xf0,0x96,0xb9,0xb2,0x00,0x14,0xff,0xf0,0x96,0xb9,0xb3,0x00,0xd1,
+	0x12,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xb4,0x00,0x14,0xff,0xf0,0x96,0xb9,0xb5,
+	0x00,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xb6,0x00,0x14,0xff,0xf0,0x96,0xb9,0xb7,
+	0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xb8,0x00,0x14,0xff,
+	0xf0,0x96,0xb9,0xb9,0x00,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xba,0x00,0x14,0xff,
+	0xf0,0x96,0xb9,0xbb,0x00,0xd1,0x12,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xbc,0x00,
+	0x14,0xff,0xf0,0x96,0xb9,0xbd,0x00,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xbe,0x00,
+	0x14,0xff,0xf0,0x96,0xb9,0xbf,0x00,0x14,0x00,0xd2,0x14,0xe1,0x25,0x82,0xe0,0x1c,
+	0x82,0xcf,0x86,0xe5,0xdd,0x81,0xe4,0x9a,0x81,0xcf,0x06,0x12,0x00,0xd1,0x0b,0xe0,
+	0x51,0x83,0xcf,0x86,0xcf,0x06,0x00,0x00,0xe0,0x95,0x8b,0xcf,0x86,0xd5,0x22,0xe4,
+	0xd0,0x88,0xe3,0x93,0x88,0xe2,0x38,0x88,0xe1,0x31,0x88,0xe0,0x2a,0x88,0xcf,0x86,
+	0xe5,0xfb,0x87,0xe4,0xe2,0x87,0x93,0x07,0x62,0xd1,0x87,0x12,0xe6,0x12,0xe6,0xe4,
+	0x36,0x89,0xe3,0x2f,0x89,0xd2,0x09,0xe1,0xb8,0x88,0xcf,0x06,0x10,0x00,0xe1,0x1f,
+	0x89,0xe0,0xec,0x88,0xcf,0x86,0xe5,0x21,0x01,0xd4,0x90,0xd3,0x48,0xd2,0x24,0xd1,
+	0x12,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,0xa2,0x00,0x12,0xff,0xf0,0x9e,0xa4,0xa3,
+	0x00,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,0xa4,0x00,0x12,0xff,0xf0,0x9e,0xa4,0xa5,
+	0x00,0xd1,0x12,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,0xa6,0x00,0x12,0xff,0xf0,0x9e,
+	0xa4,0xa7,0x00,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,0xa8,0x00,0x12,0xff,0xf0,0x9e,
+	0xa4,0xa9,0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,0xaa,0x00,
+	0x12,0xff,0xf0,0x9e,0xa4,0xab,0x00,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,0xac,0x00,
+	0x12,0xff,0xf0,0x9e,0xa4,0xad,0x00,0xd1,0x12,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,
+	0xae,0x00,0x12,0xff,0xf0,0x9e,0xa4,0xaf,0x00,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,
+	0xb0,0x00,0x12,0xff,0xf0,0x9e,0xa4,0xb1,0x00,0xd3,0x48,0xd2,0x24,0xd1,0x12,0x10,
+	0x09,0x12,0xff,0xf0,0x9e,0xa4,0xb2,0x00,0x12,0xff,0xf0,0x9e,0xa4,0xb3,0x00,0x10,
+	0x09,0x12,0xff,0xf0,0x9e,0xa4,0xb4,0x00,0x12,0xff,0xf0,0x9e,0xa4,0xb5,0x00,0xd1,
+	0x12,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,0xb6,0x00,0x12,0xff,0xf0,0x9e,0xa4,0xb7,
+	0x00,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,0xb8,0x00,0x12,0xff,0xf0,0x9e,0xa4,0xb9,
+	0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,0xba,0x00,0x12,0xff,
+	0xf0,0x9e,0xa4,0xbb,0x00,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,0xbc,0x00,0x12,0xff,
+	0xf0,0x9e,0xa4,0xbd,0x00,0xd1,0x12,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,0xbe,0x00,
+	0x12,0xff,0xf0,0x9e,0xa4,0xbf,0x00,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa5,0x80,0x00,
+	0x12,0xff,0xf0,0x9e,0xa5,0x81,0x00,0x94,0x1e,0x93,0x1a,0x92,0x16,0x91,0x12,0x10,
+	0x09,0x12,0xff,0xf0,0x9e,0xa5,0x82,0x00,0x12,0xff,0xf0,0x9e,0xa5,0x83,0x00,0x12,
+	0x00,0x12,0x00,0x12,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+	/* nfdi_c0100 */
+	0x57,0x04,0x01,0x00,0xc6,0xe5,0xac,0x13,0xe4,0x41,0x0c,0xe3,0x7a,0x07,0xe2,0xf3,
+	0x01,0xc1,0xd0,0x1f,0xcf,0x86,0x55,0x04,0x01,0x00,0x94,0x15,0x53,0x04,0x01,0x00,
+	0x52,0x04,0x01,0x00,0x91,0x09,0x10,0x04,0x01,0x00,0x01,0xff,0x00,0x01,0x00,0x01,
+	0x00,0xcf,0x86,0xd5,0xe4,0xd4,0x7c,0xd3,0x3c,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,
+	0xff,0x41,0xcc,0x80,0x00,0x01,0xff,0x41,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x41,
+	0xcc,0x82,0x00,0x01,0xff,0x41,0xcc,0x83,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x41,
+	0xcc,0x88,0x00,0x01,0xff,0x41,0xcc,0x8a,0x00,0x10,0x04,0x01,0x00,0x01,0xff,0x43,
+	0xcc,0xa7,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x45,0xcc,0x80,0x00,0x01,
+	0xff,0x45,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x45,0xcc,0x82,0x00,0x01,0xff,0x45,
+	0xcc,0x88,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x49,0xcc,0x80,0x00,0x01,0xff,0x49,
+	0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x49,0xcc,0x82,0x00,0x01,0xff,0x49,0xcc,0x88,
+	0x00,0xd3,0x38,0xd2,0x1c,0xd1,0x0c,0x10,0x04,0x01,0x00,0x01,0xff,0x4e,0xcc,0x83,
+	0x00,0x10,0x08,0x01,0xff,0x4f,0xcc,0x80,0x00,0x01,0xff,0x4f,0xcc,0x81,0x00,0xd1,
+	0x10,0x10,0x08,0x01,0xff,0x4f,0xcc,0x82,0x00,0x01,0xff,0x4f,0xcc,0x83,0x00,0x10,
+	0x08,0x01,0xff,0x4f,0xcc,0x88,0x00,0x01,0x00,0xd2,0x1c,0xd1,0x0c,0x10,0x04,0x01,
+	0x00,0x01,0xff,0x55,0xcc,0x80,0x00,0x10,0x08,0x01,0xff,0x55,0xcc,0x81,0x00,0x01,
+	0xff,0x55,0xcc,0x82,0x00,0x91,0x10,0x10,0x08,0x01,0xff,0x55,0xcc,0x88,0x00,0x01,
+	0xff,0x59,0xcc,0x81,0x00,0x01,0x00,0xd4,0x7c,0xd3,0x3c,0xd2,0x20,0xd1,0x10,0x10,
+	0x08,0x01,0xff,0x61,0xcc,0x80,0x00,0x01,0xff,0x61,0xcc,0x81,0x00,0x10,0x08,0x01,
+	0xff,0x61,0xcc,0x82,0x00,0x01,0xff,0x61,0xcc,0x83,0x00,0xd1,0x10,0x10,0x08,0x01,
+	0xff,0x61,0xcc,0x88,0x00,0x01,0xff,0x61,0xcc,0x8a,0x00,0x10,0x04,0x01,0x00,0x01,
+	0xff,0x63,0xcc,0xa7,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x65,0xcc,0x80,
+	0x00,0x01,0xff,0x65,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x65,0xcc,0x82,0x00,0x01,
+	0xff,0x65,0xcc,0x88,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x69,0xcc,0x80,0x00,0x01,
+	0xff,0x69,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x69,0xcc,0x82,0x00,0x01,0xff,0x69,
+	0xcc,0x88,0x00,0xd3,0x38,0xd2,0x1c,0xd1,0x0c,0x10,0x04,0x01,0x00,0x01,0xff,0x6e,
+	0xcc,0x83,0x00,0x10,0x08,0x01,0xff,0x6f,0xcc,0x80,0x00,0x01,0xff,0x6f,0xcc,0x81,
+	0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x6f,0xcc,0x82,0x00,0x01,0xff,0x6f,0xcc,0x83,
+	0x00,0x10,0x08,0x01,0xff,0x6f,0xcc,0x88,0x00,0x01,0x00,0xd2,0x1c,0xd1,0x0c,0x10,
+	0x04,0x01,0x00,0x01,0xff,0x75,0xcc,0x80,0x00,0x10,0x08,0x01,0xff,0x75,0xcc,0x81,
+	0x00,0x01,0xff,0x75,0xcc,0x82,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x75,0xcc,0x88,
+	0x00,0x01,0xff,0x79,0xcc,0x81,0x00,0x10,0x04,0x01,0x00,0x01,0xff,0x79,0xcc,0x88,
+	0x00,0xe1,0x9a,0x03,0xe0,0xd3,0x01,0xcf,0x86,0xd5,0xf4,0xd4,0x80,0xd3,0x40,0xd2,
+	0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x41,0xcc,0x84,0x00,0x01,0xff,0x61,0xcc,0x84,
+	0x00,0x10,0x08,0x01,0xff,0x41,0xcc,0x86,0x00,0x01,0xff,0x61,0xcc,0x86,0x00,0xd1,
+	0x10,0x10,0x08,0x01,0xff,0x41,0xcc,0xa8,0x00,0x01,0xff,0x61,0xcc,0xa8,0x00,0x10,
+	0x08,0x01,0xff,0x43,0xcc,0x81,0x00,0x01,0xff,0x63,0xcc,0x81,0x00,0xd2,0x20,0xd1,
+	0x10,0x10,0x08,0x01,0xff,0x43,0xcc,0x82,0x00,0x01,0xff,0x63,0xcc,0x82,0x00,0x10,
+	0x08,0x01,0xff,0x43,0xcc,0x87,0x00,0x01,0xff,0x63,0xcc,0x87,0x00,0xd1,0x10,0x10,
+	0x08,0x01,0xff,0x43,0xcc,0x8c,0x00,0x01,0xff,0x63,0xcc,0x8c,0x00,0x10,0x08,0x01,
+	0xff,0x44,0xcc,0x8c,0x00,0x01,0xff,0x64,0xcc,0x8c,0x00,0xd3,0x34,0xd2,0x14,0x51,
+	0x04,0x01,0x00,0x10,0x08,0x01,0xff,0x45,0xcc,0x84,0x00,0x01,0xff,0x65,0xcc,0x84,
+	0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x45,0xcc,0x86,0x00,0x01,0xff,0x65,0xcc,0x86,
+	0x00,0x10,0x08,0x01,0xff,0x45,0xcc,0x87,0x00,0x01,0xff,0x65,0xcc,0x87,0x00,0xd2,
+	0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x45,0xcc,0xa8,0x00,0x01,0xff,0x65,0xcc,0xa8,
+	0x00,0x10,0x08,0x01,0xff,0x45,0xcc,0x8c,0x00,0x01,0xff,0x65,0xcc,0x8c,0x00,0xd1,
+	0x10,0x10,0x08,0x01,0xff,0x47,0xcc,0x82,0x00,0x01,0xff,0x67,0xcc,0x82,0x00,0x10,
+	0x08,0x01,0xff,0x47,0xcc,0x86,0x00,0x01,0xff,0x67,0xcc,0x86,0x00,0xd4,0x74,0xd3,
+	0x34,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x47,0xcc,0x87,0x00,0x01,0xff,0x67,
+	0xcc,0x87,0x00,0x10,0x08,0x01,0xff,0x47,0xcc,0xa7,0x00,0x01,0xff,0x67,0xcc,0xa7,
+	0x00,0x91,0x10,0x10,0x08,0x01,0xff,0x48,0xcc,0x82,0x00,0x01,0xff,0x68,0xcc,0x82,
+	0x00,0x01,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x49,0xcc,0x83,0x00,0x01,
+	0xff,0x69,0xcc,0x83,0x00,0x10,0x08,0x01,0xff,0x49,0xcc,0x84,0x00,0x01,0xff,0x69,
+	0xcc,0x84,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x49,0xcc,0x86,0x00,0x01,0xff,0x69,
+	0xcc,0x86,0x00,0x10,0x08,0x01,0xff,0x49,0xcc,0xa8,0x00,0x01,0xff,0x69,0xcc,0xa8,
+	0x00,0xd3,0x30,0xd2,0x10,0x91,0x0c,0x10,0x08,0x01,0xff,0x49,0xcc,0x87,0x00,0x01,
+	0x00,0x01,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x4a,0xcc,0x82,0x00,0x01,0xff,0x6a,
+	0xcc,0x82,0x00,0x10,0x08,0x01,0xff,0x4b,0xcc,0xa7,0x00,0x01,0xff,0x6b,0xcc,0xa7,
+	0x00,0xd2,0x1c,0xd1,0x0c,0x10,0x04,0x01,0x00,0x01,0xff,0x4c,0xcc,0x81,0x00,0x10,
+	0x08,0x01,0xff,0x6c,0xcc,0x81,0x00,0x01,0xff,0x4c,0xcc,0xa7,0x00,0xd1,0x10,0x10,
+	0x08,0x01,0xff,0x6c,0xcc,0xa7,0x00,0x01,0xff,0x4c,0xcc,0x8c,0x00,0x10,0x08,0x01,
+	0xff,0x6c,0xcc,0x8c,0x00,0x01,0x00,0xcf,0x86,0xd5,0xd4,0xd4,0x60,0xd3,0x30,0xd2,
+	0x10,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x01,0xff,0x4e,0xcc,0x81,0x00,0xd1,
+	0x10,0x10,0x08,0x01,0xff,0x6e,0xcc,0x81,0x00,0x01,0xff,0x4e,0xcc,0xa7,0x00,0x10,
+	0x08,0x01,0xff,0x6e,0xcc,0xa7,0x00,0x01,0xff,0x4e,0xcc,0x8c,0x00,0xd2,0x10,0x91,
+	0x0c,0x10,0x08,0x01,0xff,0x6e,0xcc,0x8c,0x00,0x01,0x00,0x01,0x00,0xd1,0x10,0x10,
+	0x08,0x01,0xff,0x4f,0xcc,0x84,0x00,0x01,0xff,0x6f,0xcc,0x84,0x00,0x10,0x08,0x01,
+	0xff,0x4f,0xcc,0x86,0x00,0x01,0xff,0x6f,0xcc,0x86,0x00,0xd3,0x34,0xd2,0x14,0x91,
+	0x10,0x10,0x08,0x01,0xff,0x4f,0xcc,0x8b,0x00,0x01,0xff,0x6f,0xcc,0x8b,0x00,0x01,
+	0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x52,0xcc,0x81,0x00,0x01,0xff,0x72,0xcc,0x81,
+	0x00,0x10,0x08,0x01,0xff,0x52,0xcc,0xa7,0x00,0x01,0xff,0x72,0xcc,0xa7,0x00,0xd2,
+	0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x52,0xcc,0x8c,0x00,0x01,0xff,0x72,0xcc,0x8c,
+	0x00,0x10,0x08,0x01,0xff,0x53,0xcc,0x81,0x00,0x01,0xff,0x73,0xcc,0x81,0x00,0xd1,
+	0x10,0x10,0x08,0x01,0xff,0x53,0xcc,0x82,0x00,0x01,0xff,0x73,0xcc,0x82,0x00,0x10,
+	0x08,0x01,0xff,0x53,0xcc,0xa7,0x00,0x01,0xff,0x73,0xcc,0xa7,0x00,0xd4,0x74,0xd3,
+	0x34,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x53,0xcc,0x8c,0x00,0x01,0xff,0x73,
+	0xcc,0x8c,0x00,0x10,0x08,0x01,0xff,0x54,0xcc,0xa7,0x00,0x01,0xff,0x74,0xcc,0xa7,
+	0x00,0x91,0x10,0x10,0x08,0x01,0xff,0x54,0xcc,0x8c,0x00,0x01,0xff,0x74,0xcc,0x8c,
+	0x00,0x01,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x55,0xcc,0x83,0x00,0x01,
+	0xff,0x75,0xcc,0x83,0x00,0x10,0x08,0x01,0xff,0x55,0xcc,0x84,0x00,0x01,0xff,0x75,
+	0xcc,0x84,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x55,0xcc,0x86,0x00,0x01,0xff,0x75,
+	0xcc,0x86,0x00,0x10,0x08,0x01,0xff,0x55,0xcc,0x8a,0x00,0x01,0xff,0x75,0xcc,0x8a,
+	0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x55,0xcc,0x8b,0x00,0x01,
+	0xff,0x75,0xcc,0x8b,0x00,0x10,0x08,0x01,0xff,0x55,0xcc,0xa8,0x00,0x01,0xff,0x75,
+	0xcc,0xa8,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x57,0xcc,0x82,0x00,0x01,0xff,0x77,
+	0xcc,0x82,0x00,0x10,0x08,0x01,0xff,0x59,0xcc,0x82,0x00,0x01,0xff,0x79,0xcc,0x82,
+	0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x59,0xcc,0x88,0x00,0x01,0xff,0x5a,
+	0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x7a,0xcc,0x81,0x00,0x01,0xff,0x5a,0xcc,0x87,
+	0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x7a,0xcc,0x87,0x00,0x01,0xff,0x5a,0xcc,0x8c,
+	0x00,0x10,0x08,0x01,0xff,0x7a,0xcc,0x8c,0x00,0x01,0x00,0xd0,0x4a,0xcf,0x86,0x55,
+	0x04,0x01,0x00,0xd4,0x2c,0xd3,0x18,0x92,0x14,0x91,0x10,0x10,0x08,0x01,0xff,0x4f,
+	0xcc,0x9b,0x00,0x01,0xff,0x6f,0xcc,0x9b,0x00,0x01,0x00,0x01,0x00,0x52,0x04,0x01,
+	0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x01,0xff,0x55,0xcc,0x9b,0x00,0x93,
+	0x14,0x92,0x10,0x91,0x0c,0x10,0x08,0x01,0xff,0x75,0xcc,0x9b,0x00,0x01,0x00,0x01,
+	0x00,0x01,0x00,0x01,0x00,0xcf,0x86,0xd5,0xb4,0xd4,0x24,0x53,0x04,0x01,0x00,0x52,
+	0x04,0x01,0x00,0xd1,0x0c,0x10,0x04,0x01,0x00,0x01,0xff,0x41,0xcc,0x8c,0x00,0x10,
+	0x08,0x01,0xff,0x61,0xcc,0x8c,0x00,0x01,0xff,0x49,0xcc,0x8c,0x00,0xd3,0x46,0xd2,
+	0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x69,0xcc,0x8c,0x00,0x01,0xff,0x4f,0xcc,0x8c,
+	0x00,0x10,0x08,0x01,0xff,0x6f,0xcc,0x8c,0x00,0x01,0xff,0x55,0xcc,0x8c,0x00,0xd1,
+	0x12,0x10,0x08,0x01,0xff,0x75,0xcc,0x8c,0x00,0x01,0xff,0x55,0xcc,0x88,0xcc,0x84,
+	0x00,0x10,0x0a,0x01,0xff,0x75,0xcc,0x88,0xcc,0x84,0x00,0x01,0xff,0x55,0xcc,0x88,
+	0xcc,0x81,0x00,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x75,0xcc,0x88,0xcc,0x81,
+	0x00,0x01,0xff,0x55,0xcc,0x88,0xcc,0x8c,0x00,0x10,0x0a,0x01,0xff,0x75,0xcc,0x88,
+	0xcc,0x8c,0x00,0x01,0xff,0x55,0xcc,0x88,0xcc,0x80,0x00,0xd1,0x0e,0x10,0x0a,0x01,
+	0xff,0x75,0xcc,0x88,0xcc,0x80,0x00,0x01,0x00,0x10,0x0a,0x01,0xff,0x41,0xcc,0x88,
+	0xcc,0x84,0x00,0x01,0xff,0x61,0xcc,0x88,0xcc,0x84,0x00,0xd4,0x80,0xd3,0x3a,0xd2,
+	0x26,0xd1,0x14,0x10,0x0a,0x01,0xff,0x41,0xcc,0x87,0xcc,0x84,0x00,0x01,0xff,0x61,
+	0xcc,0x87,0xcc,0x84,0x00,0x10,0x09,0x01,0xff,0xc3,0x86,0xcc,0x84,0x00,0x01,0xff,
+	0xc3,0xa6,0xcc,0x84,0x00,0x51,0x04,0x01,0x00,0x10,0x08,0x01,0xff,0x47,0xcc,0x8c,
+	0x00,0x01,0xff,0x67,0xcc,0x8c,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x4b,
+	0xcc,0x8c,0x00,0x01,0xff,0x6b,0xcc,0x8c,0x00,0x10,0x08,0x01,0xff,0x4f,0xcc,0xa8,
+	0x00,0x01,0xff,0x6f,0xcc,0xa8,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x4f,0xcc,0xa8,
+	0xcc,0x84,0x00,0x01,0xff,0x6f,0xcc,0xa8,0xcc,0x84,0x00,0x10,0x09,0x01,0xff,0xc6,
+	0xb7,0xcc,0x8c,0x00,0x01,0xff,0xca,0x92,0xcc,0x8c,0x00,0xd3,0x24,0xd2,0x10,0x91,
+	0x0c,0x10,0x08,0x01,0xff,0x6a,0xcc,0x8c,0x00,0x01,0x00,0x01,0x00,0x91,0x10,0x10,
+	0x08,0x01,0xff,0x47,0xcc,0x81,0x00,0x01,0xff,0x67,0xcc,0x81,0x00,0x04,0x00,0xd2,
+	0x24,0xd1,0x10,0x10,0x08,0x04,0xff,0x4e,0xcc,0x80,0x00,0x04,0xff,0x6e,0xcc,0x80,
+	0x00,0x10,0x0a,0x01,0xff,0x41,0xcc,0x8a,0xcc,0x81,0x00,0x01,0xff,0x61,0xcc,0x8a,
+	0xcc,0x81,0x00,0xd1,0x12,0x10,0x09,0x01,0xff,0xc3,0x86,0xcc,0x81,0x00,0x01,0xff,
+	0xc3,0xa6,0xcc,0x81,0x00,0x10,0x09,0x01,0xff,0xc3,0x98,0xcc,0x81,0x00,0x01,0xff,
+	0xc3,0xb8,0xcc,0x81,0x00,0xe2,0x07,0x02,0xe1,0xae,0x01,0xe0,0x93,0x01,0xcf,0x86,
+	0xd5,0xf4,0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x41,0xcc,
+	0x8f,0x00,0x01,0xff,0x61,0xcc,0x8f,0x00,0x10,0x08,0x01,0xff,0x41,0xcc,0x91,0x00,
+	0x01,0xff,0x61,0xcc,0x91,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x45,0xcc,0x8f,0x00,
+	0x01,0xff,0x65,0xcc,0x8f,0x00,0x10,0x08,0x01,0xff,0x45,0xcc,0x91,0x00,0x01,0xff,
+	0x65,0xcc,0x91,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x49,0xcc,0x8f,0x00,
+	0x01,0xff,0x69,0xcc,0x8f,0x00,0x10,0x08,0x01,0xff,0x49,0xcc,0x91,0x00,0x01,0xff,
+	0x69,0xcc,0x91,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x4f,0xcc,0x8f,0x00,0x01,0xff,
+	0x6f,0xcc,0x8f,0x00,0x10,0x08,0x01,0xff,0x4f,0xcc,0x91,0x00,0x01,0xff,0x6f,0xcc,
+	0x91,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x52,0xcc,0x8f,0x00,
+	0x01,0xff,0x72,0xcc,0x8f,0x00,0x10,0x08,0x01,0xff,0x52,0xcc,0x91,0x00,0x01,0xff,
+	0x72,0xcc,0x91,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x55,0xcc,0x8f,0x00,0x01,0xff,
+	0x75,0xcc,0x8f,0x00,0x10,0x08,0x01,0xff,0x55,0xcc,0x91,0x00,0x01,0xff,0x75,0xcc,
+	0x91,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x04,0xff,0x53,0xcc,0xa6,0x00,0x04,0xff,
+	0x73,0xcc,0xa6,0x00,0x10,0x08,0x04,0xff,0x54,0xcc,0xa6,0x00,0x04,0xff,0x74,0xcc,
+	0xa6,0x00,0x51,0x04,0x04,0x00,0x10,0x08,0x04,0xff,0x48,0xcc,0x8c,0x00,0x04,0xff,
+	0x68,0xcc,0x8c,0x00,0xd4,0x68,0xd3,0x20,0xd2,0x0c,0x91,0x08,0x10,0x04,0x06,0x00,
+	0x07,0x00,0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x08,0x04,0xff,0x41,0xcc,0x87,0x00,
+	0x04,0xff,0x61,0xcc,0x87,0x00,0xd2,0x24,0xd1,0x10,0x10,0x08,0x04,0xff,0x45,0xcc,
+	0xa7,0x00,0x04,0xff,0x65,0xcc,0xa7,0x00,0x10,0x0a,0x04,0xff,0x4f,0xcc,0x88,0xcc,
+	0x84,0x00,0x04,0xff,0x6f,0xcc,0x88,0xcc,0x84,0x00,0xd1,0x14,0x10,0x0a,0x04,0xff,
+	0x4f,0xcc,0x83,0xcc,0x84,0x00,0x04,0xff,0x6f,0xcc,0x83,0xcc,0x84,0x00,0x10,0x08,
+	0x04,0xff,0x4f,0xcc,0x87,0x00,0x04,0xff,0x6f,0xcc,0x87,0x00,0x93,0x30,0xd2,0x24,
+	0xd1,0x14,0x10,0x0a,0x04,0xff,0x4f,0xcc,0x87,0xcc,0x84,0x00,0x04,0xff,0x6f,0xcc,
+	0x87,0xcc,0x84,0x00,0x10,0x08,0x04,0xff,0x59,0xcc,0x84,0x00,0x04,0xff,0x79,0xcc,
+	0x84,0x00,0x51,0x04,0x07,0x00,0x10,0x04,0x07,0x00,0x08,0x00,0x08,0x00,0xcf,0x86,
+	0x95,0x14,0x94,0x10,0x93,0x0c,0x92,0x08,0x11,0x04,0x08,0x00,0x09,0x00,0x09,0x00,
+	0x09,0x00,0x01,0x00,0x01,0x00,0xd0,0x22,0xcf,0x86,0x55,0x04,0x01,0x00,0x94,0x18,
+	0x53,0x04,0x01,0x00,0xd2,0x0c,0x91,0x08,0x10,0x04,0x01,0x00,0x04,0x00,0x04,0x00,
+	0x11,0x04,0x04,0x00,0x07,0x00,0x01,0x00,0xcf,0x86,0xd5,0x18,0x54,0x04,0x01,0x00,
+	0x53,0x04,0x01,0x00,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,
+	0x04,0x00,0x94,0x18,0x53,0x04,0x01,0x00,0xd2,0x08,0x11,0x04,0x01,0x00,0x04,0x00,
+	0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x07,0x00,0x07,0x00,0xe1,0x35,0x01,0xd0,
+	0x72,0xcf,0x86,0xd5,0x24,0x54,0x04,0x01,0xe6,0xd3,0x10,0x52,0x04,0x01,0xe6,0x91,
+	0x08,0x10,0x04,0x01,0xe6,0x01,0xe8,0x01,0xdc,0x92,0x0c,0x51,0x04,0x01,0xdc,0x10,
+	0x04,0x01,0xe8,0x01,0xd8,0x01,0xdc,0xd4,0x2c,0xd3,0x1c,0xd2,0x10,0xd1,0x08,0x10,
+	0x04,0x01,0xdc,0x01,0xca,0x10,0x04,0x01,0xca,0x01,0xdc,0x51,0x04,0x01,0xdc,0x10,
+	0x04,0x01,0xdc,0x01,0xca,0x92,0x0c,0x91,0x08,0x10,0x04,0x01,0xca,0x01,0xdc,0x01,
+	0xdc,0x01,0xdc,0xd3,0x08,0x12,0x04,0x01,0xdc,0x01,0x01,0xd2,0x0c,0x91,0x08,0x10,
+	0x04,0x01,0x01,0x01,0xdc,0x01,0xdc,0x91,0x08,0x10,0x04,0x01,0xdc,0x01,0xe6,0x01,
+	0xe6,0xcf,0x86,0xd5,0x7f,0xd4,0x47,0xd3,0x2e,0xd2,0x19,0xd1,0x0e,0x10,0x07,0x01,
+	0xff,0xcc,0x80,0x00,0x01,0xff,0xcc,0x81,0x00,0x10,0x04,0x01,0xe6,0x01,0xff,0xcc,
+	0x93,0x00,0xd1,0x0d,0x10,0x09,0x01,0xff,0xcc,0x88,0xcc,0x81,0x00,0x01,0xf0,0x10,
+	0x04,0x04,0xe6,0x04,0xdc,0xd2,0x08,0x11,0x04,0x04,0xdc,0x04,0xe6,0xd1,0x08,0x10,
+	0x04,0x04,0xe6,0x04,0xdc,0x10,0x04,0x04,0xdc,0x06,0xff,0x00,0xd3,0x18,0xd2,0x0c,
+	0x51,0x04,0x07,0xe6,0x10,0x04,0x07,0xe6,0x07,0xdc,0x51,0x04,0x07,0xdc,0x10,0x04,
+	0x07,0xdc,0x07,0xe6,0xd2,0x10,0xd1,0x08,0x10,0x04,0x08,0xe8,0x08,0xdc,0x10,0x04,
+	0x08,0xdc,0x08,0xe6,0xd1,0x08,0x10,0x04,0x08,0xe9,0x07,0xea,0x10,0x04,0x07,0xea,
+	0x07,0xe9,0xd4,0x14,0x93,0x10,0x92,0x0c,0x51,0x04,0x01,0xea,0x10,0x04,0x04,0xe9,
+	0x06,0xe6,0x06,0xe6,0x06,0xe6,0xd3,0x13,0x52,0x04,0x0a,0x00,0x91,0x0b,0x10,0x07,
+	0x01,0xff,0xca,0xb9,0x00,0x01,0x00,0x0a,0x00,0xd2,0x0c,0x51,0x04,0x00,0x00,0x10,
+	0x04,0x01,0x00,0x09,0x00,0x51,0x04,0x09,0x00,0x10,0x06,0x01,0xff,0x3b,0x00,0x10,
+	0x00,0xd0,0xe1,0xcf,0x86,0xd5,0x7a,0xd4,0x5f,0xd3,0x21,0x52,0x04,0x00,0x00,0xd1,
+	0x0d,0x10,0x04,0x01,0x00,0x01,0xff,0xc2,0xa8,0xcc,0x81,0x00,0x10,0x09,0x01,0xff,
+	0xce,0x91,0xcc,0x81,0x00,0x01,0xff,0xc2,0xb7,0x00,0xd2,0x1f,0xd1,0x12,0x10,0x09,
+	0x01,0xff,0xce,0x95,0xcc,0x81,0x00,0x01,0xff,0xce,0x97,0xcc,0x81,0x00,0x10,0x09,
+	0x01,0xff,0xce,0x99,0xcc,0x81,0x00,0x00,0x00,0xd1,0x0d,0x10,0x09,0x01,0xff,0xce,
+	0x9f,0xcc,0x81,0x00,0x00,0x00,0x10,0x09,0x01,0xff,0xce,0xa5,0xcc,0x81,0x00,0x01,
+	0xff,0xce,0xa9,0xcc,0x81,0x00,0x93,0x17,0x92,0x13,0x91,0x0f,0x10,0x0b,0x01,0xff,
+	0xce,0xb9,0xcc,0x88,0xcc,0x81,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd4,
+	0x4a,0xd3,0x10,0x92,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x00,0x00,0x01,0x00,0x01,
+	0x00,0xd2,0x16,0x51,0x04,0x01,0x00,0x10,0x09,0x01,0xff,0xce,0x99,0xcc,0x88,0x00,
+	0x01,0xff,0xce,0xa5,0xcc,0x88,0x00,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb1,0xcc,
+	0x81,0x00,0x01,0xff,0xce,0xb5,0xcc,0x81,0x00,0x10,0x09,0x01,0xff,0xce,0xb7,0xcc,
+	0x81,0x00,0x01,0xff,0xce,0xb9,0xcc,0x81,0x00,0x93,0x17,0x92,0x13,0x91,0x0f,0x10,
+	0x0b,0x01,0xff,0xcf,0x85,0xcc,0x88,0xcc,0x81,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
+	0x01,0x00,0xcf,0x86,0xd5,0x7b,0xd4,0x39,0x53,0x04,0x01,0x00,0xd2,0x16,0x51,0x04,
+	0x01,0x00,0x10,0x09,0x01,0xff,0xce,0xb9,0xcc,0x88,0x00,0x01,0xff,0xcf,0x85,0xcc,
+	0x88,0x00,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xbf,0xcc,0x81,0x00,0x01,0xff,0xcf,
+	0x85,0xcc,0x81,0x00,0x10,0x09,0x01,0xff,0xcf,0x89,0xcc,0x81,0x00,0x0a,0x00,0xd3,
+	0x26,0xd2,0x11,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x01,0xff,0xcf,0x92,0xcc,
+	0x81,0x00,0xd1,0x0d,0x10,0x09,0x01,0xff,0xcf,0x92,0xcc,0x88,0x00,0x01,0x00,0x10,
+	0x04,0x01,0x00,0x04,0x00,0xd2,0x0c,0x51,0x04,0x06,0x00,0x10,0x04,0x01,0x00,0x04,
+	0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x04,0x00,0x10,0x04,0x01,0x00,0x04,0x00,0xd4,
+	0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x01,0x00,0x04,0x00,0x01,0x00,0x01,
+	0x00,0x01,0x00,0xd3,0x10,0x52,0x04,0x01,0x00,0x51,0x04,0x05,0x00,0x10,0x04,0x06,
+	0x00,0x07,0x00,0x12,0x04,0x07,0x00,0x08,0x00,0xe3,0x47,0x04,0xe2,0xbe,0x02,0xe1,
+	0x07,0x01,0xd0,0x8b,0xcf,0x86,0xd5,0x6c,0xd4,0x53,0xd3,0x30,0xd2,0x1f,0xd1,0x12,
+	0x10,0x09,0x04,0xff,0xd0,0x95,0xcc,0x80,0x00,0x01,0xff,0xd0,0x95,0xcc,0x88,0x00,
+	0x10,0x04,0x01,0x00,0x01,0xff,0xd0,0x93,0xcc,0x81,0x00,0x51,0x04,0x01,0x00,0x10,
+	0x04,0x01,0x00,0x01,0xff,0xd0,0x86,0xcc,0x88,0x00,0x52,0x04,0x01,0x00,0xd1,0x12,
+	0x10,0x09,0x01,0xff,0xd0,0x9a,0xcc,0x81,0x00,0x04,0xff,0xd0,0x98,0xcc,0x80,0x00,
+	0x10,0x09,0x01,0xff,0xd0,0xa3,0xcc,0x86,0x00,0x01,0x00,0x53,0x04,0x01,0x00,0x92,
+	0x11,0x91,0x0d,0x10,0x04,0x01,0x00,0x01,0xff,0xd0,0x98,0xcc,0x86,0x00,0x01,0x00,
+	0x01,0x00,0x54,0x04,0x01,0x00,0x53,0x04,0x01,0x00,0x92,0x11,0x91,0x0d,0x10,0x04,
+	0x01,0x00,0x01,0xff,0xd0,0xb8,0xcc,0x86,0x00,0x01,0x00,0x01,0x00,0xcf,0x86,0xd5,
+	0x57,0x54,0x04,0x01,0x00,0xd3,0x30,0xd2,0x1f,0xd1,0x12,0x10,0x09,0x04,0xff,0xd0,
+	0xb5,0xcc,0x80,0x00,0x01,0xff,0xd0,0xb5,0xcc,0x88,0x00,0x10,0x04,0x01,0x00,0x01,
+	0xff,0xd0,0xb3,0xcc,0x81,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x01,0xff,
+	0xd1,0x96,0xcc,0x88,0x00,0x52,0x04,0x01,0x00,0xd1,0x12,0x10,0x09,0x01,0xff,0xd0,
+	0xba,0xcc,0x81,0x00,0x04,0xff,0xd0,0xb8,0xcc,0x80,0x00,0x10,0x09,0x01,0xff,0xd1,
+	0x83,0xcc,0x86,0x00,0x01,0x00,0x54,0x04,0x01,0x00,0x93,0x1a,0x52,0x04,0x01,0x00,
+	0x51,0x04,0x01,0x00,0x10,0x09,0x01,0xff,0xd1,0xb4,0xcc,0x8f,0x00,0x01,0xff,0xd1,
+	0xb5,0xcc,0x8f,0x00,0x01,0x00,0xd0,0x2e,0xcf,0x86,0x95,0x28,0x94,0x24,0xd3,0x18,
+	0xd2,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x01,0xe6,0x51,0x04,0x01,0xe6,
+	0x10,0x04,0x01,0xe6,0x0a,0xe6,0x92,0x08,0x11,0x04,0x04,0x00,0x06,0x00,0x04,0x00,
+	0x01,0x00,0x01,0x00,0xcf,0x86,0xd5,0xbe,0xd4,0x4a,0xd3,0x2a,0xd2,0x1a,0xd1,0x0d,
+	0x10,0x04,0x01,0x00,0x01,0xff,0xd0,0x96,0xcc,0x86,0x00,0x10,0x09,0x01,0xff,0xd0,
+	0xb6,0xcc,0x86,0x00,0x01,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x06,0x00,0x10,0x04,
+	0x06,0x00,0x01,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,0x01,0x00,0x06,0x00,0x10,0x04,
+	0x06,0x00,0x01,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x06,0x00,0x10,0x04,0x06,0x00,
+	0x09,0x00,0xd3,0x3a,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff,0xd0,0x90,0xcc,0x86,
+	0x00,0x01,0xff,0xd0,0xb0,0xcc,0x86,0x00,0x10,0x09,0x01,0xff,0xd0,0x90,0xcc,0x88,
+	0x00,0x01,0xff,0xd0,0xb0,0xcc,0x88,0x00,0x51,0x04,0x01,0x00,0x10,0x09,0x01,0xff,
+	0xd0,0x95,0xcc,0x86,0x00,0x01,0xff,0xd0,0xb5,0xcc,0x86,0x00,0xd2,0x16,0x51,0x04,
+	0x01,0x00,0x10,0x09,0x01,0xff,0xd3,0x98,0xcc,0x88,0x00,0x01,0xff,0xd3,0x99,0xcc,
+	0x88,0x00,0xd1,0x12,0x10,0x09,0x01,0xff,0xd0,0x96,0xcc,0x88,0x00,0x01,0xff,0xd0,
+	0xb6,0xcc,0x88,0x00,0x10,0x09,0x01,0xff,0xd0,0x97,0xcc,0x88,0x00,0x01,0xff,0xd0,
+	0xb7,0xcc,0x88,0x00,0xd4,0x74,0xd3,0x3a,0xd2,0x16,0x51,0x04,0x01,0x00,0x10,0x09,
+	0x01,0xff,0xd0,0x98,0xcc,0x84,0x00,0x01,0xff,0xd0,0xb8,0xcc,0x84,0x00,0xd1,0x12,
+	0x10,0x09,0x01,0xff,0xd0,0x98,0xcc,0x88,0x00,0x01,0xff,0xd0,0xb8,0xcc,0x88,0x00,
+	0x10,0x09,0x01,0xff,0xd0,0x9e,0xcc,0x88,0x00,0x01,0xff,0xd0,0xbe,0xcc,0x88,0x00,
+	0xd2,0x16,0x51,0x04,0x01,0x00,0x10,0x09,0x01,0xff,0xd3,0xa8,0xcc,0x88,0x00,0x01,
+	0xff,0xd3,0xa9,0xcc,0x88,0x00,0xd1,0x12,0x10,0x09,0x04,0xff,0xd0,0xad,0xcc,0x88,
+	0x00,0x04,0xff,0xd1,0x8d,0xcc,0x88,0x00,0x10,0x09,0x01,0xff,0xd0,0xa3,0xcc,0x84,
+	0x00,0x01,0xff,0xd1,0x83,0xcc,0x84,0x00,0xd3,0x3a,0xd2,0x24,0xd1,0x12,0x10,0x09,
+	0x01,0xff,0xd0,0xa3,0xcc,0x88,0x00,0x01,0xff,0xd1,0x83,0xcc,0x88,0x00,0x10,0x09,
+	0x01,0xff,0xd0,0xa3,0xcc,0x8b,0x00,0x01,0xff,0xd1,0x83,0xcc,0x8b,0x00,0x91,0x12,
+	0x10,0x09,0x01,0xff,0xd0,0xa7,0xcc,0x88,0x00,0x01,0xff,0xd1,0x87,0xcc,0x88,0x00,
+	0x08,0x00,0x92,0x16,0x91,0x12,0x10,0x09,0x01,0xff,0xd0,0xab,0xcc,0x88,0x00,0x01,
+	0xff,0xd1,0x8b,0xcc,0x88,0x00,0x09,0x00,0x09,0x00,0xd1,0x74,0xd0,0x36,0xcf,0x86,
+	0xd5,0x10,0x54,0x04,0x06,0x00,0x93,0x08,0x12,0x04,0x09,0x00,0x0a,0x00,0x0a,0x00,
+	0xd4,0x10,0x93,0x0c,0x52,0x04,0x0a,0x00,0x11,0x04,0x0b,0x00,0x0c,0x00,0x10,0x00,
+	0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
+	0x01,0x00,0xcf,0x86,0xd5,0x24,0x54,0x04,0x01,0x00,0xd3,0x10,0x52,0x04,0x01,0x00,
+	0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,
+	0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x94,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,
+	0x10,0x04,0x14,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd0,0xba,
+	0xcf,0x86,0xd5,0x4c,0xd4,0x24,0x53,0x04,0x01,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,
+	0x14,0x00,0x01,0x00,0x10,0x04,0x04,0x00,0x00,0x00,0xd1,0x08,0x10,0x04,0x00,0x00,
+	0x10,0x00,0x10,0x04,0x10,0x00,0x0d,0x00,0xd3,0x18,0xd2,0x0c,0x91,0x08,0x10,0x04,
+	0x00,0x00,0x02,0xdc,0x02,0xe6,0x51,0x04,0x02,0xe6,0x10,0x04,0x02,0xdc,0x02,0xe6,
+	0x92,0x0c,0x51,0x04,0x02,0xe6,0x10,0x04,0x02,0xde,0x02,0xdc,0x02,0xe6,0xd4,0x2c,
+	0xd3,0x10,0x92,0x0c,0x51,0x04,0x02,0xe6,0x10,0x04,0x08,0xdc,0x02,0xdc,0x02,0xdc,
+	0xd2,0x0c,0x51,0x04,0x02,0xe6,0x10,0x04,0x02,0xdc,0x02,0xe6,0xd1,0x08,0x10,0x04,
+	0x02,0xe6,0x02,0xde,0x10,0x04,0x02,0xe4,0x02,0xe6,0xd3,0x20,0xd2,0x10,0xd1,0x08,
+	0x10,0x04,0x01,0x0a,0x01,0x0b,0x10,0x04,0x01,0x0c,0x01,0x0d,0xd1,0x08,0x10,0x04,
+	0x01,0x0e,0x01,0x0f,0x10,0x04,0x01,0x10,0x01,0x11,0xd2,0x10,0xd1,0x08,0x10,0x04,
+	0x01,0x12,0x01,0x13,0x10,0x04,0x09,0x13,0x01,0x14,0xd1,0x08,0x10,0x04,0x01,0x15,
+	0x01,0x16,0x10,0x04,0x01,0x00,0x01,0x17,0xcf,0x86,0xd5,0x28,0x94,0x24,0x93,0x20,
+	0xd2,0x10,0xd1,0x08,0x10,0x04,0x01,0x00,0x01,0x18,0x10,0x04,0x01,0x19,0x01,0x00,
+	0xd1,0x08,0x10,0x04,0x02,0xe6,0x08,0xdc,0x10,0x04,0x08,0x00,0x08,0x12,0x00,0x00,
+	0x01,0x00,0xd4,0x1c,0x53,0x04,0x01,0x00,0xd2,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,
+	0x01,0x00,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x14,0x00,0x93,0x10,
+	0x52,0x04,0x01,0x00,0x91,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+	0xe2,0xfb,0x01,0xe1,0x2b,0x01,0xd0,0xa8,0xcf,0x86,0xd5,0x55,0xd4,0x28,0xd3,0x10,
+	0x52,0x04,0x07,0x00,0x91,0x08,0x10,0x04,0x0d,0x00,0x10,0x00,0x0a,0x00,0xd2,0x0c,
+	0x51,0x04,0x0a,0x00,0x10,0x04,0x0a,0x00,0x08,0x00,0x91,0x08,0x10,0x04,0x01,0x00,
+	0x07,0x00,0x07,0x00,0xd3,0x0c,0x52,0x04,0x07,0xe6,0x11,0x04,0x07,0xe6,0x0a,0xe6,
+	0xd2,0x10,0xd1,0x08,0x10,0x04,0x0a,0x1e,0x0a,0x1f,0x10,0x04,0x0a,0x20,0x01,0x00,
+	0xd1,0x09,0x10,0x05,0x0f,0xff,0x00,0x00,0x00,0x10,0x04,0x08,0x00,0x01,0x00,0xd4,
+	0x3d,0x93,0x39,0xd2,0x1a,0xd1,0x08,0x10,0x04,0x0c,0x00,0x01,0x00,0x10,0x09,0x01,
+	0xff,0xd8,0xa7,0xd9,0x93,0x00,0x01,0xff,0xd8,0xa7,0xd9,0x94,0x00,0xd1,0x12,0x10,
+	0x09,0x01,0xff,0xd9,0x88,0xd9,0x94,0x00,0x01,0xff,0xd8,0xa7,0xd9,0x95,0x00,0x10,
+	0x09,0x01,0xff,0xd9,0x8a,0xd9,0x94,0x00,0x01,0x00,0x01,0x00,0x53,0x04,0x01,0x00,
+	0x92,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x0a,0x00,0x0a,0x00,0xcf,0x86,
+	0xd5,0x5c,0xd4,0x20,0x53,0x04,0x01,0x00,0xd2,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,
+	0x01,0x00,0x01,0x1b,0xd1,0x08,0x10,0x04,0x01,0x1c,0x01,0x1d,0x10,0x04,0x01,0x1e,
+	0x01,0x1f,0xd3,0x20,0xd2,0x10,0xd1,0x08,0x10,0x04,0x01,0x20,0x01,0x21,0x10,0x04,
+	0x01,0x22,0x04,0xe6,0xd1,0x08,0x10,0x04,0x04,0xe6,0x04,0xdc,0x10,0x04,0x07,0xdc,
+	0x07,0xe6,0xd2,0x0c,0x91,0x08,0x10,0x04,0x07,0xe6,0x08,0xe6,0x08,0xe6,0xd1,0x08,
+	0x10,0x04,0x08,0xdc,0x08,0xe6,0x10,0x04,0x08,0xe6,0x0c,0xdc,0xd4,0x10,0x53,0x04,
+	0x01,0x00,0x52,0x04,0x01,0x00,0x11,0x04,0x01,0x00,0x06,0x00,0x93,0x10,0x92,0x0c,
+	0x91,0x08,0x10,0x04,0x01,0x23,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd0,0x22,
+	0xcf,0x86,0x55,0x04,0x01,0x00,0x54,0x04,0x01,0x00,0x53,0x04,0x01,0x00,0xd2,0x08,
+	0x11,0x04,0x04,0x00,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x04,0x00,
+	0xcf,0x86,0xd5,0x5b,0xd4,0x2e,0xd3,0x1e,0x92,0x1a,0xd1,0x0d,0x10,0x09,0x01,0xff,
+	0xdb,0x95,0xd9,0x94,0x00,0x01,0x00,0x10,0x09,0x01,0xff,0xdb,0x81,0xd9,0x94,0x00,
+	0x01,0x00,0x01,0x00,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,
+	0x04,0x00,0xd3,0x19,0xd2,0x11,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x01,0xff,
+	0xdb,0x92,0xd9,0x94,0x00,0x11,0x04,0x01,0x00,0x01,0xe6,0x52,0x04,0x01,0xe6,0xd1,
+	0x08,0x10,0x04,0x01,0xe6,0x01,0x00,0x10,0x04,0x01,0x00,0x01,0xe6,0xd4,0x38,0xd3,
+	0x1c,0xd2,0x0c,0x51,0x04,0x01,0xe6,0x10,0x04,0x01,0xe6,0x01,0xdc,0xd1,0x08,0x10,
+	0x04,0x01,0xe6,0x01,0x00,0x10,0x04,0x01,0x00,0x01,0xe6,0xd2,0x10,0xd1,0x08,0x10,
+	0x04,0x01,0xe6,0x01,0x00,0x10,0x04,0x01,0xdc,0x01,0xe6,0x91,0x08,0x10,0x04,0x01,
+	0xe6,0x01,0xdc,0x07,0x00,0x53,0x04,0x01,0x00,0xd2,0x08,0x11,0x04,0x01,0x00,0x04,
+	0x00,0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x07,0x00,0xd1,0xc8,0xd0,0x76,0xcf,
+	0x86,0xd5,0x28,0xd4,0x14,0x53,0x04,0x04,0x00,0x52,0x04,0x04,0x00,0x51,0x04,0x04,
+	0x00,0x10,0x04,0x00,0x00,0x04,0x00,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x04,
+	0x00,0x04,0x24,0x04,0x00,0x04,0x00,0x04,0x00,0xd4,0x14,0x53,0x04,0x04,0x00,0x52,
+	0x04,0x04,0x00,0x91,0x08,0x10,0x04,0x04,0x00,0x07,0x00,0x07,0x00,0xd3,0x1c,0xd2,
+	0x0c,0x91,0x08,0x10,0x04,0x04,0xe6,0x04,0xdc,0x04,0xe6,0xd1,0x08,0x10,0x04,0x04,
+	0xdc,0x04,0xe6,0x10,0x04,0x04,0xe6,0x04,0xdc,0xd2,0x0c,0x51,0x04,0x04,0xdc,0x10,
+	0x04,0x04,0xe6,0x04,0xdc,0xd1,0x08,0x10,0x04,0x04,0xdc,0x04,0xe6,0x10,0x04,0x04,
+	0xdc,0x04,0xe6,0xcf,0x86,0xd5,0x3c,0x94,0x38,0xd3,0x1c,0xd2,0x0c,0x51,0x04,0x04,
+	0xe6,0x10,0x04,0x04,0xdc,0x04,0xe6,0xd1,0x08,0x10,0x04,0x04,0xdc,0x04,0xe6,0x10,
+	0x04,0x04,0xdc,0x04,0xe6,0xd2,0x10,0xd1,0x08,0x10,0x04,0x04,0xdc,0x04,0xe6,0x10,
+	0x04,0x04,0xe6,0x00,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x07,0x00,0x07,0x00,0x08,
+	0x00,0x94,0x10,0x53,0x04,0x08,0x00,0x52,0x04,0x08,0x00,0x11,0x04,0x08,0x00,0x0a,
+	0x00,0x0a,0x00,0xd0,0x1e,0xcf,0x86,0x55,0x04,0x04,0x00,0x54,0x04,0x04,0x00,0x93,
+	0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x04,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,
+	0x00,0xcf,0x86,0x55,0x04,0x09,0x00,0xd4,0x14,0x53,0x04,0x09,0x00,0x92,0x0c,0x51,
+	0x04,0x09,0x00,0x10,0x04,0x09,0x00,0x09,0xe6,0x09,0xe6,0xd3,0x10,0x92,0x0c,0x51,
+	0x04,0x09,0xe6,0x10,0x04,0x09,0xdc,0x09,0xe6,0x09,0x00,0xd2,0x0c,0x51,0x04,0x09,
+	0x00,0x10,0x04,0x09,0x00,0x00,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x14,0xdc,0x14,
+	0x00,0xe4,0xf8,0x57,0xe3,0x45,0x3f,0xe2,0xf4,0x3e,0xe1,0xc7,0x2c,0xe0,0x21,0x10,
+	0xcf,0x86,0xc5,0xe4,0x80,0x08,0xe3,0xcb,0x03,0xe2,0x61,0x01,0xd1,0x94,0xd0,0x5a,
+	0xcf,0x86,0xd5,0x20,0x54,0x04,0x0b,0x00,0xd3,0x0c,0x52,0x04,0x0b,0x00,0x11,0x04,
+	0x0b,0x00,0x0b,0xe6,0x92,0x0c,0x51,0x04,0x0b,0xe6,0x10,0x04,0x0b,0x00,0x0b,0xe6,
+	0x0b,0xe6,0xd4,0x24,0xd3,0x10,0x52,0x04,0x0b,0xe6,0x91,0x08,0x10,0x04,0x0b,0x00,
+	0x0b,0xe6,0x0b,0xe6,0xd2,0x0c,0x91,0x08,0x10,0x04,0x0b,0x00,0x0b,0xe6,0x0b,0xe6,
+	0x11,0x04,0x0b,0xe6,0x00,0x00,0x53,0x04,0x0b,0x00,0x52,0x04,0x0b,0x00,0x51,0x04,
+	0x0b,0x00,0x10,0x04,0x0b,0x00,0x00,0x00,0xcf,0x86,0xd5,0x20,0x54,0x04,0x0c,0x00,
+	0x53,0x04,0x0c,0x00,0xd2,0x0c,0x91,0x08,0x10,0x04,0x0c,0x00,0x0c,0xdc,0x0c,0xdc,
+	0x51,0x04,0x00,0x00,0x10,0x04,0x0c,0x00,0x00,0x00,0x94,0x14,0x53,0x04,0x13,0x00,
+	0x92,0x0c,0x51,0x04,0x13,0x00,0x10,0x04,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+	0xd0,0x4a,0xcf,0x86,0x55,0x04,0x00,0x00,0xd4,0x20,0xd3,0x10,0x92,0x0c,0x91,0x08,
+	0x10,0x04,0x0d,0x00,0x10,0x00,0x0d,0x00,0x0d,0x00,0x52,0x04,0x0d,0x00,0x91,0x08,
+	0x10,0x04,0x0d,0x00,0x10,0x00,0x10,0x00,0xd3,0x18,0xd2,0x0c,0x51,0x04,0x10,0x00,
+	0x10,0x04,0x10,0x00,0x11,0x00,0x91,0x08,0x10,0x04,0x11,0x00,0x00,0x00,0x12,0x00,
+	0x52,0x04,0x12,0x00,0x11,0x04,0x12,0x00,0x00,0x00,0xcf,0x86,0xd5,0x18,0x54,0x04,
+	0x00,0x00,0x93,0x10,0x92,0x0c,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x14,0xdc,
+	0x12,0xe6,0x12,0xe6,0xd4,0x30,0xd3,0x18,0xd2,0x0c,0x51,0x04,0x12,0xe6,0x10,0x04,
+	0x12,0x00,0x11,0xdc,0x51,0x04,0x0d,0xe6,0x10,0x04,0x0d,0xdc,0x0d,0xe6,0xd2,0x0c,
+	0x91,0x08,0x10,0x04,0x0d,0xe6,0x0d,0xdc,0x0d,0xe6,0x91,0x08,0x10,0x04,0x0d,0xe6,
+	0x0d,0xdc,0x0d,0xdc,0xd3,0x1c,0xd2,0x10,0xd1,0x08,0x10,0x04,0x0d,0x1b,0x0d,0x1c,
+	0x10,0x04,0x0d,0x1d,0x0d,0xe6,0x51,0x04,0x0d,0xe6,0x10,0x04,0x0d,0xdc,0x0d,0xe6,
+	0xd2,0x10,0xd1,0x08,0x10,0x04,0x0d,0xe6,0x0d,0xdc,0x10,0x04,0x0d,0xdc,0x0d,0xe6,
+	0x51,0x04,0x0d,0xe6,0x10,0x04,0x0d,0xe6,0x10,0xe6,0xe1,0x3a,0x01,0xd0,0x77,0xcf,
+	0x86,0xd5,0x20,0x94,0x1c,0x93,0x18,0xd2,0x0c,0x91,0x08,0x10,0x04,0x0b,0x00,0x01,
+	0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x07,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,
+	0x00,0xd4,0x1b,0x53,0x04,0x01,0x00,0x92,0x13,0x91,0x0f,0x10,0x04,0x01,0x00,0x01,
+	0xff,0xe0,0xa4,0xa8,0xe0,0xa4,0xbc,0x00,0x01,0x00,0x01,0x00,0xd3,0x26,0xd2,0x13,
+	0x91,0x0f,0x10,0x04,0x01,0x00,0x01,0xff,0xe0,0xa4,0xb0,0xe0,0xa4,0xbc,0x00,0x01,
+	0x00,0x91,0x0f,0x10,0x0b,0x01,0xff,0xe0,0xa4,0xb3,0xe0,0xa4,0xbc,0x00,0x01,0x00,
+	0x01,0x00,0xd2,0x08,0x11,0x04,0x01,0x00,0x0c,0x00,0x91,0x08,0x10,0x04,0x01,0x07,
+	0x01,0x00,0x01,0x00,0xcf,0x86,0xd5,0x8c,0xd4,0x18,0x53,0x04,0x01,0x00,0x52,0x04,
+	0x01,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x01,0x09,0x10,0x04,0x0b,0x00,0x0c,0x00,
+	0xd3,0x1c,0xd2,0x10,0xd1,0x08,0x10,0x04,0x01,0x00,0x01,0xe6,0x10,0x04,0x01,0xdc,
+	0x01,0xe6,0x91,0x08,0x10,0x04,0x01,0xe6,0x0b,0x00,0x0c,0x00,0xd2,0x2c,0xd1,0x16,
+	0x10,0x0b,0x01,0xff,0xe0,0xa4,0x95,0xe0,0xa4,0xbc,0x00,0x01,0xff,0xe0,0xa4,0x96,
+	0xe0,0xa4,0xbc,0x00,0x10,0x0b,0x01,0xff,0xe0,0xa4,0x97,0xe0,0xa4,0xbc,0x00,0x01,
+	0xff,0xe0,0xa4,0x9c,0xe0,0xa4,0xbc,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xe0,0xa4,
+	0xa1,0xe0,0xa4,0xbc,0x00,0x01,0xff,0xe0,0xa4,0xa2,0xe0,0xa4,0xbc,0x00,0x10,0x0b,
+	0x01,0xff,0xe0,0xa4,0xab,0xe0,0xa4,0xbc,0x00,0x01,0xff,0xe0,0xa4,0xaf,0xe0,0xa4,
+	0xbc,0x00,0x54,0x04,0x01,0x00,0xd3,0x14,0x92,0x10,0xd1,0x08,0x10,0x04,0x01,0x00,
+	0x0a,0x00,0x10,0x04,0x0a,0x00,0x0c,0x00,0x0c,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,
+	0x10,0x00,0x0b,0x00,0x10,0x04,0x0b,0x00,0x09,0x00,0x91,0x08,0x10,0x04,0x09,0x00,
+	0x08,0x00,0x09,0x00,0xd0,0x86,0xcf,0x86,0xd5,0x44,0xd4,0x2c,0xd3,0x18,0xd2,0x0c,
+	0x91,0x08,0x10,0x04,0x10,0x00,0x01,0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x00,0x00,
+	0x01,0x00,0x01,0x00,0x52,0x04,0x01,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x00,0x00,
+	0x10,0x04,0x00,0x00,0x01,0x00,0x93,0x14,0x92,0x10,0xd1,0x08,0x10,0x04,0x01,0x00,
+	0x00,0x00,0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd4,0x14,0x53,0x04,
+	0x01,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,
+	0xd3,0x18,0xd2,0x10,0xd1,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x10,0x04,0x01,0x00,
+	0x00,0x00,0x11,0x04,0x00,0x00,0x01,0x00,0xd2,0x08,0x11,0x04,0x01,0x00,0x00,0x00,
+	0x91,0x08,0x10,0x04,0x01,0x07,0x07,0x00,0x01,0x00,0xcf,0x86,0xd5,0x7b,0xd4,0x42,
+	0xd3,0x14,0x52,0x04,0x01,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x10,0x04,
+	0x00,0x00,0x01,0x00,0xd2,0x17,0xd1,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x10,0x04,
+	0x00,0x00,0x01,0xff,0xe0,0xa7,0x87,0xe0,0xa6,0xbe,0x00,0xd1,0x0f,0x10,0x0b,0x01,
+	0xff,0xe0,0xa7,0x87,0xe0,0xa7,0x97,0x00,0x01,0x09,0x10,0x04,0x08,0x00,0x00,0x00,
+	0xd3,0x10,0x52,0x04,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x01,0x00,
+	0x52,0x04,0x00,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xe0,0xa6,0xa1,0xe0,0xa6,0xbc,
+	0x00,0x01,0xff,0xe0,0xa6,0xa2,0xe0,0xa6,0xbc,0x00,0x10,0x04,0x00,0x00,0x01,0xff,
+	0xe0,0xa6,0xaf,0xe0,0xa6,0xbc,0x00,0xd4,0x10,0x93,0x0c,0x52,0x04,0x01,0x00,0x11,
+	0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x53,0x04,0x01,0x00,0xd2,0x0c,0x51,0x04,0x01,
+	0x00,0x10,0x04,0x01,0x00,0x0b,0x00,0x51,0x04,0x13,0x00,0x10,0x04,0x14,0xe6,0x00,
+	0x00,0xe2,0x48,0x02,0xe1,0x4f,0x01,0xd0,0xa4,0xcf,0x86,0xd5,0x4c,0xd4,0x34,0xd3,
+	0x1c,0xd2,0x10,0xd1,0x08,0x10,0x04,0x00,0x00,0x07,0x00,0x10,0x04,0x01,0x00,0x07,
+	0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0xd2,0x0c,0x51,0x04,0x01,
+	0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x01,
+	0x00,0x93,0x14,0x92,0x10,0xd1,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x10,0x04,0x00,
+	0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd4,0x14,0x53,0x04,0x01,0x00,0x92,0x0c,0x91,
+	0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0xd3,0x2e,0xd2,0x17,0xd1,
+	0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x10,0x04,0x01,0x00,0x01,0xff,0xe0,0xa8,0xb2,
+	0xe0,0xa8,0xbc,0x00,0xd1,0x08,0x10,0x04,0x00,0x00,0x01,0x00,0x10,0x0b,0x01,0xff,
+	0xe0,0xa8,0xb8,0xe0,0xa8,0xbc,0x00,0x00,0x00,0xd2,0x08,0x11,0x04,0x01,0x00,0x00,
+	0x00,0x91,0x08,0x10,0x04,0x01,0x07,0x00,0x00,0x01,0x00,0xcf,0x86,0xd5,0x80,0xd4,
+	0x34,0xd3,0x18,0xd2,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x51,
+	0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x01,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,0x01,
+	0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x01,0x00,0x01,
+	0x09,0x00,0x00,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x0a,0x00,0x00,
+	0x00,0x00,0x00,0xd2,0x25,0xd1,0x0f,0x10,0x04,0x00,0x00,0x01,0xff,0xe0,0xa8,0x96,
+	0xe0,0xa8,0xbc,0x00,0x10,0x0b,0x01,0xff,0xe0,0xa8,0x97,0xe0,0xa8,0xbc,0x00,0x01,
+	0xff,0xe0,0xa8,0x9c,0xe0,0xa8,0xbc,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x00,0x00,
+	0x10,0x0b,0x01,0xff,0xe0,0xa8,0xab,0xe0,0xa8,0xbc,0x00,0x00,0x00,0xd4,0x10,0x93,
+	0x0c,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x93,0x14,0x52,
+	0x04,0x01,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x0a,0x00,0x10,0x04,0x14,0x00,0x00,
+	0x00,0x00,0x00,0xd0,0x82,0xcf,0x86,0xd5,0x40,0xd4,0x2c,0xd3,0x18,0xd2,0x0c,0x91,
+	0x08,0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x01,
+	0x00,0x01,0x00,0x52,0x04,0x01,0x00,0xd1,0x08,0x10,0x04,0x07,0x00,0x01,0x00,0x10,
+	0x04,0x00,0x00,0x01,0x00,0x93,0x10,0x92,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x00,
+	0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd4,0x14,0x53,0x04,0x01,0x00,0x92,0x0c,0x91,
+	0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0xd3,0x18,0xd2,0x0c,0x91,
+	0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x01,
+	0x00,0x01,0x00,0xd2,0x08,0x11,0x04,0x01,0x00,0x00,0x00,0x91,0x08,0x10,0x04,0x01,
+	0x07,0x01,0x00,0x01,0x00,0xcf,0x86,0xd5,0x3c,0xd4,0x28,0xd3,0x10,0x52,0x04,0x01,
+	0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x00,0x00,0x01,0x00,0xd2,0x0c,0x51,0x04,0x01,
+	0x00,0x10,0x04,0x00,0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x01,0x00,0x01,0x09,0x00,
+	0x00,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+	0x00,0x00,0x00,0xd4,0x18,0x93,0x14,0xd2,0x0c,0x91,0x08,0x10,0x04,0x01,0x00,0x07,
+	0x00,0x07,0x00,0x11,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0xd3,0x10,0x92,0x0c,0x91,
+	0x08,0x10,0x04,0x0d,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x92,0x0c,0x91,0x08,0x10,
+	0x04,0x00,0x00,0x11,0x00,0x13,0x00,0x13,0x00,0xe1,0x24,0x01,0xd0,0x86,0xcf,0x86,
+	0xd5,0x44,0xd4,0x2c,0xd3,0x18,0xd2,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x01,0x00,
+	0x01,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x52,0x04,0x01,0x00,
+	0xd1,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x01,0x00,0x93,0x14,
+	0x92,0x10,0xd1,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x01,0x00,
+	0x01,0x00,0x01,0x00,0xd4,0x14,0x53,0x04,0x01,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,
+	0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0xd3,0x18,0xd2,0x0c,0x91,0x08,0x10,0x04,
+	0x01,0x00,0x00,0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x07,0x00,0x01,0x00,
+	0xd2,0x08,0x11,0x04,0x01,0x00,0x00,0x00,0x91,0x08,0x10,0x04,0x01,0x07,0x01,0x00,
+	0x01,0x00,0xcf,0x86,0xd5,0x73,0xd4,0x45,0xd3,0x14,0x52,0x04,0x01,0x00,0xd1,0x08,
+	0x10,0x04,0x0a,0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x01,0x00,0xd2,0x1e,0xd1,0x0f,
+	0x10,0x0b,0x01,0xff,0xe0,0xad,0x87,0xe0,0xad,0x96,0x00,0x00,0x00,0x10,0x04,0x00,
+	0x00,0x01,0xff,0xe0,0xad,0x87,0xe0,0xac,0xbe,0x00,0x91,0x0f,0x10,0x0b,0x01,0xff,
+	0xe0,0xad,0x87,0xe0,0xad,0x97,0x00,0x01,0x09,0x00,0x00,0xd3,0x0c,0x52,0x04,0x00,
+	0x00,0x11,0x04,0x00,0x00,0x01,0x00,0x52,0x04,0x00,0x00,0xd1,0x16,0x10,0x0b,0x01,
+	0xff,0xe0,0xac,0xa1,0xe0,0xac,0xbc,0x00,0x01,0xff,0xe0,0xac,0xa2,0xe0,0xac,0xbc,
+	0x00,0x10,0x04,0x00,0x00,0x01,0x00,0xd4,0x14,0x93,0x10,0xd2,0x08,0x11,0x04,0x01,
+	0x00,0x0a,0x00,0x11,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x93,0x10,0x92,0x0c,0x91,
+	0x08,0x10,0x04,0x01,0x00,0x07,0x00,0x0c,0x00,0x0c,0x00,0x00,0x00,0xd0,0xb1,0xcf,
+	0x86,0xd5,0x63,0xd4,0x28,0xd3,0x14,0xd2,0x08,0x11,0x04,0x00,0x00,0x01,0x00,0x91,
+	0x08,0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0xd2,0x0c,0x51,0x04,0x01,0x00,0x10,
+	0x04,0x01,0x00,0x00,0x00,0x11,0x04,0x00,0x00,0x01,0x00,0xd3,0x1f,0xd2,0x0c,0x91,
+	0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x91,0x0f,0x10,0x0b,0x01,0xff,0xe0,
+	0xae,0x92,0xe0,0xaf,0x97,0x00,0x01,0x00,0x00,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,
+	0x00,0x00,0x01,0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x91,0x08,0x10,0x04,0x01,0x00,
+	0x00,0x00,0x01,0x00,0xd4,0x2c,0xd3,0x18,0xd2,0x0c,0x51,0x04,0x00,0x00,0x10,0x04,
+	0x00,0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0xd2,0x0c,
+	0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x11,0x04,0x00,0x00,0x01,0x00,
+	0xd3,0x10,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x08,0x00,0x01,0x00,
+	0xd2,0x08,0x11,0x04,0x01,0x00,0x00,0x00,0x11,0x04,0x00,0x00,0x01,0x00,0xcf,0x86,
+	0xd5,0x61,0xd4,0x45,0xd3,0x14,0xd2,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,
+	0x00,0x00,0x11,0x04,0x00,0x00,0x01,0x00,0xd2,0x1e,0xd1,0x08,0x10,0x04,0x01,0x00,
+	0x00,0x00,0x10,0x0b,0x01,0xff,0xe0,0xaf,0x86,0xe0,0xae,0xbe,0x00,0x01,0xff,0xe0,
+	0xaf,0x87,0xe0,0xae,0xbe,0x00,0x91,0x0f,0x10,0x0b,0x01,0xff,0xe0,0xaf,0x86,0xe0,
+	0xaf,0x97,0x00,0x01,0x09,0x00,0x00,0x93,0x18,0xd2,0x0c,0x91,0x08,0x10,0x04,0x0a,
+	0x00,0x00,0x00,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x01,0x00,0x00,
+	0x00,0xd4,0x14,0x93,0x10,0x52,0x04,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x08,
+	0x00,0x01,0x00,0x01,0x00,0xd3,0x10,0x92,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,
+	0x00,0x07,0x00,0x07,0x00,0x92,0x0c,0x51,0x04,0x07,0x00,0x10,0x04,0x07,0x00,0x00,
+	0x00,0x00,0x00,0xe3,0x1c,0x04,0xe2,0x1a,0x02,0xd1,0xf3,0xd0,0x76,0xcf,0x86,0xd5,
+	0x3c,0xd4,0x28,0xd3,0x18,0xd2,0x0c,0x91,0x08,0x10,0x04,0x10,0x00,0x01,0x00,0x01,
+	0x00,0x91,0x08,0x10,0x04,0x14,0x00,0x01,0x00,0x01,0x00,0x52,0x04,0x01,0x00,0x91,
+	0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,
+	0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd4,0x14,0x53,0x04,0x01,
+	0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0xd3,
+	0x10,0x52,0x04,0x01,0x00,0x91,0x08,0x10,0x04,0x10,0x00,0x01,0x00,0x01,0x00,0xd2,
+	0x08,0x11,0x04,0x01,0x00,0x00,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x0a,0x00,0x01,
+	0x00,0xcf,0x86,0xd5,0x53,0xd4,0x2f,0xd3,0x10,0x52,0x04,0x01,0x00,0x91,0x08,0x10,
+	0x04,0x01,0x00,0x00,0x00,0x01,0x00,0xd2,0x13,0x91,0x0f,0x10,0x0b,0x01,0xff,0xe0,
+	0xb1,0x86,0xe0,0xb1,0x96,0x00,0x00,0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x01,0x00,
+	0x01,0x09,0x00,0x00,0xd3,0x14,0x52,0x04,0x00,0x00,0xd1,0x08,0x10,0x04,0x00,0x00,
+	0x01,0x54,0x10,0x04,0x01,0x5b,0x00,0x00,0x92,0x0c,0x51,0x04,0x0a,0x00,0x10,0x04,
+	0x11,0x00,0x00,0x00,0x00,0x00,0xd4,0x14,0x93,0x10,0xd2,0x08,0x11,0x04,0x01,0x00,
+	0x0a,0x00,0x11,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x93,0x10,0x52,0x04,0x00,0x00,
+	0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x15,0x00,0x0a,0x00,0xd0,0x76,0xcf,0x86,
+	0xd5,0x3c,0xd4,0x28,0xd3,0x18,0xd2,0x0c,0x91,0x08,0x10,0x04,0x12,0x00,0x10,0x00,
+	0x01,0x00,0x91,0x08,0x10,0x04,0x14,0x00,0x01,0x00,0x01,0x00,0x52,0x04,0x01,0x00,
+	0x91,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x93,0x10,0x92,0x0c,0x91,0x08,
+	0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd4,0x14,0x53,0x04,
+	0x01,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,
+	0xd3,0x10,0x52,0x04,0x01,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00,
+	0xd2,0x08,0x11,0x04,0x01,0x00,0x00,0x00,0x91,0x08,0x10,0x04,0x07,0x07,0x07,0x00,
+	0x01,0x00,0xcf,0x86,0xd5,0x82,0xd4,0x5e,0xd3,0x2a,0xd2,0x13,0x91,0x0f,0x10,0x0b,
+	0x01,0xff,0xe0,0xb2,0xbf,0xe0,0xb3,0x95,0x00,0x01,0x00,0x01,0x00,0xd1,0x08,0x10,
+	0x04,0x01,0x00,0x00,0x00,0x10,0x04,0x01,0x00,0x01,0xff,0xe0,0xb3,0x86,0xe0,0xb3,
+	0x95,0x00,0xd2,0x28,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe0,0xb3,0x86,0xe0,0xb3,0x96,
+	0x00,0x00,0x00,0x10,0x0b,0x01,0xff,0xe0,0xb3,0x86,0xe0,0xb3,0x82,0x00,0x01,0xff,
+	0xe0,0xb3,0x86,0xe0,0xb3,0x82,0xe0,0xb3,0x95,0x00,0x91,0x08,0x10,0x04,0x01,0x00,
+	0x01,0x09,0x00,0x00,0xd3,0x14,0x52,0x04,0x00,0x00,0xd1,0x08,0x10,0x04,0x00,0x00,
+	0x01,0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x52,0x04,0x00,0x00,0x51,0x04,0x00,0x00,
+	0x10,0x04,0x01,0x00,0x00,0x00,0xd4,0x14,0x93,0x10,0xd2,0x08,0x11,0x04,0x01,0x00,
+	0x09,0x00,0x11,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x93,0x14,0x92,0x10,0xd1,0x08,
+	0x10,0x04,0x00,0x00,0x09,0x00,0x10,0x04,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+	0xe1,0x06,0x01,0xd0,0x6e,0xcf,0x86,0xd5,0x3c,0xd4,0x28,0xd3,0x18,0xd2,0x0c,0x91,
+	0x08,0x10,0x04,0x13,0x00,0x10,0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x01,
+	0x00,0x01,0x00,0x52,0x04,0x01,0x00,0x91,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01,
+	0x00,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x01,
+	0x00,0x01,0x00,0xd4,0x14,0x53,0x04,0x01,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x01,
+	0x00,0x0c,0x00,0x01,0x00,0x01,0x00,0x53,0x04,0x01,0x00,0xd2,0x0c,0x51,0x04,0x01,
+	0x00,0x10,0x04,0x0c,0x00,0x13,0x09,0x91,0x08,0x10,0x04,0x13,0x09,0x0a,0x00,0x01,
+	0x00,0xcf,0x86,0xd5,0x65,0xd4,0x45,0xd3,0x10,0x52,0x04,0x01,0x00,0x91,0x08,0x10,
+	0x04,0x0a,0x00,0x00,0x00,0x01,0x00,0xd2,0x1e,0xd1,0x08,0x10,0x04,0x01,0x00,0x00,
+	0x00,0x10,0x0b,0x01,0xff,0xe0,0xb5,0x86,0xe0,0xb4,0xbe,0x00,0x01,0xff,0xe0,0xb5,
+	0x87,0xe0,0xb4,0xbe,0x00,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe0,0xb5,0x86,0xe0,0xb5,
+	0x97,0x00,0x01,0x09,0x10,0x04,0x0c,0x00,0x12,0x00,0xd3,0x10,0x52,0x04,0x00,0x00,
+	0x51,0x04,0x12,0x00,0x10,0x04,0x12,0x00,0x01,0x00,0x52,0x04,0x12,0x00,0x51,0x04,
+	0x12,0x00,0x10,0x04,0x12,0x00,0x11,0x00,0xd4,0x14,0x93,0x10,0xd2,0x08,0x11,0x04,
+	0x01,0x00,0x0a,0x00,0x11,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0xd3,0x0c,0x52,0x04,
+	0x0a,0x00,0x11,0x04,0x0a,0x00,0x12,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x12,0x00,
+	0x0a,0x00,0x0a,0x00,0x0a,0x00,0xd0,0x5a,0xcf,0x86,0xd5,0x34,0xd4,0x18,0x93,0x14,
+	0xd2,0x08,0x11,0x04,0x00,0x00,0x04,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x04,0x00,
+	0x04,0x00,0x04,0x00,0xd3,0x10,0x52,0x04,0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x04,
+	0x04,0x00,0x00,0x00,0x92,0x08,0x11,0x04,0x00,0x00,0x04,0x00,0x04,0x00,0x54,0x04,
+	0x04,0x00,0xd3,0x10,0x92,0x0c,0x51,0x04,0x04,0x00,0x10,0x04,0x00,0x00,0x04,0x00,
+	0x04,0x00,0x52,0x04,0x04,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x04,0x00,0x00,0x00,
+	0xcf,0x86,0xd5,0x77,0xd4,0x28,0xd3,0x10,0x52,0x04,0x04,0x00,0x51,0x04,0x04,0x00,
+	0x10,0x04,0x04,0x00,0x00,0x00,0xd2,0x0c,0x51,0x04,0x00,0x00,0x10,0x04,0x04,0x09,
+	0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x04,0x00,0xd3,0x14,0x52,0x04,
+	0x04,0x00,0xd1,0x08,0x10,0x04,0x04,0x00,0x00,0x00,0x10,0x04,0x04,0x00,0x00,0x00,
+	0xd2,0x13,0x51,0x04,0x04,0x00,0x10,0x0b,0x04,0xff,0xe0,0xb7,0x99,0xe0,0xb7,0x8a,
+	0x00,0x04,0x00,0xd1,0x19,0x10,0x0b,0x04,0xff,0xe0,0xb7,0x99,0xe0,0xb7,0x8f,0x00,
+	0x04,0xff,0xe0,0xb7,0x99,0xe0,0xb7,0x8f,0xe0,0xb7,0x8a,0x00,0x10,0x0b,0x04,0xff,
+	0xe0,0xb7,0x99,0xe0,0xb7,0x9f,0x00,0x04,0x00,0xd4,0x10,0x93,0x0c,0x52,0x04,0x00,
+	0x00,0x11,0x04,0x00,0x00,0x10,0x00,0x10,0x00,0x93,0x14,0xd2,0x08,0x11,0x04,0x00,
+	0x00,0x04,0x00,0x91,0x08,0x10,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe2,
+	0x31,0x01,0xd1,0x58,0xd0,0x3a,0xcf,0x86,0xd5,0x18,0x94,0x14,0x93,0x10,0x92,0x0c,
+	0x91,0x08,0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
+	0x54,0x04,0x01,0x00,0x53,0x04,0x01,0x00,0xd2,0x0c,0x51,0x04,0x01,0x67,0x10,0x04,
+	0x01,0x09,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x01,0x00,0xcf,0x86,
+	0x95,0x18,0xd4,0x0c,0x53,0x04,0x01,0x00,0x12,0x04,0x01,0x6b,0x01,0x00,0x53,0x04,
+	0x01,0x00,0x12,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0xd0,0x9e,0xcf,0x86,0xd5,0x54,
+	0xd4,0x3c,0xd3,0x20,0xd2,0x10,0xd1,0x08,0x10,0x04,0x00,0x00,0x01,0x00,0x10,0x04,
+	0x01,0x00,0x00,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x10,0x04,0x15,0x00,
+	0x01,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,0x01,0x00,0x15,0x00,0x10,0x04,0x01,0x00,
+	0x00,0x00,0x91,0x08,0x10,0x04,0x15,0x00,0x01,0x00,0x15,0x00,0xd3,0x08,0x12,0x04,
+	0x15,0x00,0x01,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x15,0x00,0x01,0x00,0x01,0x00,
+	0x01,0x00,0xd4,0x30,0xd3,0x1c,0xd2,0x0c,0x91,0x08,0x10,0x04,0x15,0x00,0x01,0x00,
+	0x01,0x00,0xd1,0x08,0x10,0x04,0x00,0x00,0x01,0x00,0x10,0x04,0x00,0x00,0x01,0x00,
+	0xd2,0x08,0x11,0x04,0x15,0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x15,0x00,0x01,0x00,
+	0x01,0x00,0x53,0x04,0x01,0x00,0xd2,0x0c,0x51,0x04,0x01,0x76,0x10,0x04,0x15,0x09,
+	0x01,0x00,0x11,0x04,0x01,0x00,0x00,0x00,0xcf,0x86,0x95,0x34,0xd4,0x20,0xd3,0x14,
+	0x52,0x04,0x01,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x10,0x04,0x01,0x00,
+	0x00,0x00,0x52,0x04,0x01,0x7a,0x11,0x04,0x01,0x00,0x00,0x00,0x53,0x04,0x01,0x00,
+	0xd2,0x08,0x11,0x04,0x01,0x00,0x00,0x00,0x11,0x04,0x01,0x00,0x0d,0x00,0x00,0x00,
+	0xe1,0x2b,0x01,0xd0,0x3e,0xcf,0x86,0xd5,0x14,0x54,0x04,0x02,0x00,0x53,0x04,0x02,
+	0x00,0x92,0x08,0x11,0x04,0x02,0xdc,0x02,0x00,0x02,0x00,0x54,0x04,0x02,0x00,0xd3,
+	0x14,0x52,0x04,0x02,0x00,0xd1,0x08,0x10,0x04,0x02,0x00,0x02,0xdc,0x10,0x04,0x02,
+	0x00,0x02,0xdc,0x92,0x0c,0x91,0x08,0x10,0x04,0x02,0x00,0x02,0xd8,0x02,0x00,0x02,
+	0x00,0xcf,0x86,0xd5,0x73,0xd4,0x36,0xd3,0x17,0x92,0x13,0x51,0x04,0x02,0x00,0x10,
+	0x04,0x02,0x00,0x02,0xff,0xe0,0xbd,0x82,0xe0,0xbe,0xb7,0x00,0x02,0x00,0xd2,0x0c,
+	0x91,0x08,0x10,0x04,0x00,0x00,0x02,0x00,0x02,0x00,0x91,0x0f,0x10,0x04,0x02,0x00,
+	0x02,0xff,0xe0,0xbd,0x8c,0xe0,0xbe,0xb7,0x00,0x02,0x00,0xd3,0x26,0xd2,0x13,0x51,
+	0x04,0x02,0x00,0x10,0x0b,0x02,0xff,0xe0,0xbd,0x91,0xe0,0xbe,0xb7,0x00,0x02,0x00,
+	0x51,0x04,0x02,0x00,0x10,0x04,0x02,0x00,0x02,0xff,0xe0,0xbd,0x96,0xe0,0xbe,0xb7,
+	0x00,0x52,0x04,0x02,0x00,0x91,0x0f,0x10,0x0b,0x02,0xff,0xe0,0xbd,0x9b,0xe0,0xbe,
+	0xb7,0x00,0x02,0x00,0x02,0x00,0xd4,0x27,0x53,0x04,0x02,0x00,0xd2,0x17,0xd1,0x0f,
+	0x10,0x04,0x02,0x00,0x02,0xff,0xe0,0xbd,0x80,0xe0,0xbe,0xb5,0x00,0x10,0x04,0x04,
+	0x00,0x0a,0x00,0x91,0x08,0x10,0x04,0x0a,0x00,0x00,0x00,0x00,0x00,0xd3,0x35,0xd2,
+	0x17,0xd1,0x08,0x10,0x04,0x00,0x00,0x02,0x81,0x10,0x04,0x02,0x82,0x02,0xff,0xe0,
+	0xbd,0xb1,0xe0,0xbd,0xb2,0x00,0xd1,0x0f,0x10,0x04,0x02,0x84,0x02,0xff,0xe0,0xbd,
+	0xb1,0xe0,0xbd,0xb4,0x00,0x10,0x0b,0x02,0xff,0xe0,0xbe,0xb2,0xe0,0xbe,0x80,0x00,
+	0x02,0x00,0xd2,0x13,0x91,0x0f,0x10,0x0b,0x02,0xff,0xe0,0xbe,0xb3,0xe0,0xbe,0x80,
+	0x00,0x02,0x00,0x02,0x82,0x11,0x04,0x02,0x82,0x02,0x00,0xd0,0xd3,0xcf,0x86,0xd5,
+	0x65,0xd4,0x27,0xd3,0x1f,0xd2,0x13,0x91,0x0f,0x10,0x04,0x02,0x82,0x02,0xff,0xe0,
+	0xbd,0xb1,0xe0,0xbe,0x80,0x00,0x02,0xe6,0x91,0x08,0x10,0x04,0x02,0x09,0x02,0x00,
+	0x02,0xe6,0x12,0x04,0x02,0x00,0x0c,0x00,0xd3,0x1f,0xd2,0x13,0x51,0x04,0x02,0x00,
+	0x10,0x04,0x02,0x00,0x02,0xff,0xe0,0xbe,0x92,0xe0,0xbe,0xb7,0x00,0x51,0x04,0x02,
+	0x00,0x10,0x04,0x04,0x00,0x02,0x00,0xd2,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x02,
+	0x00,0x02,0x00,0x91,0x0f,0x10,0x04,0x02,0x00,0x02,0xff,0xe0,0xbe,0x9c,0xe0,0xbe,
+	0xb7,0x00,0x02,0x00,0xd4,0x3d,0xd3,0x26,0xd2,0x13,0x51,0x04,0x02,0x00,0x10,0x0b,
+	0x02,0xff,0xe0,0xbe,0xa1,0xe0,0xbe,0xb7,0x00,0x02,0x00,0x51,0x04,0x02,0x00,0x10,
+	0x04,0x02,0x00,0x02,0xff,0xe0,0xbe,0xa6,0xe0,0xbe,0xb7,0x00,0x52,0x04,0x02,0x00,
+	0x91,0x0f,0x10,0x0b,0x02,0xff,0xe0,0xbe,0xab,0xe0,0xbe,0xb7,0x00,0x02,0x00,0x04,
+	0x00,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x04,0x00,0x02,0x00,0x02,0x00,0x02,
+	0x00,0xd2,0x13,0x91,0x0f,0x10,0x04,0x04,0x00,0x02,0xff,0xe0,0xbe,0x90,0xe0,0xbe,
+	0xb5,0x00,0x04,0x00,0x91,0x08,0x10,0x04,0x04,0x00,0x00,0x00,0x04,0x00,0xcf,0x86,
+	0x95,0x4c,0xd4,0x24,0xd3,0x10,0x52,0x04,0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x04,
+	0x04,0xdc,0x04,0x00,0x52,0x04,0x04,0x00,0xd1,0x08,0x10,0x04,0x04,0x00,0x00,0x00,
+	0x10,0x04,0x0a,0x00,0x04,0x00,0xd3,0x14,0xd2,0x08,0x11,0x04,0x08,0x00,0x0a,0x00,
+	0x91,0x08,0x10,0x04,0x0a,0x00,0x0b,0x00,0x0b,0x00,0x92,0x10,0xd1,0x08,0x10,0x04,
+	0x0b,0x00,0x0c,0x00,0x10,0x04,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,
+	0xe5,0xf7,0x04,0xe4,0x79,0x03,0xe3,0x7b,0x01,0xe2,0x04,0x01,0xd1,0x7f,0xd0,0x65,
+	0xcf,0x86,0x55,0x04,0x04,0x00,0xd4,0x33,0xd3,0x1f,0xd2,0x0c,0x51,0x04,0x04,0x00,
+	0x10,0x04,0x0a,0x00,0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x0b,0x04,0xff,0xe1,0x80,
+	0xa5,0xe1,0x80,0xae,0x00,0x04,0x00,0x92,0x10,0xd1,0x08,0x10,0x04,0x0a,0x00,0x04,
+	0x00,0x10,0x04,0x04,0x00,0x0a,0x00,0x04,0x00,0xd3,0x18,0xd2,0x0c,0x51,0x04,0x04,
+	0x00,0x10,0x04,0x04,0x00,0x0a,0x00,0x51,0x04,0x0a,0x00,0x10,0x04,0x04,0x00,0x04,
+	0x07,0x92,0x10,0xd1,0x08,0x10,0x04,0x04,0x00,0x04,0x09,0x10,0x04,0x0a,0x09,0x0a,
+	0x00,0x0a,0x00,0xcf,0x86,0x95,0x14,0x54,0x04,0x04,0x00,0x53,0x04,0x04,0x00,0x92,
+	0x08,0x11,0x04,0x04,0x00,0x0a,0x00,0x0a,0x00,0x0a,0x00,0xd0,0x2e,0xcf,0x86,0x95,
+	0x28,0xd4,0x14,0x53,0x04,0x0a,0x00,0x52,0x04,0x0a,0x00,0x91,0x08,0x10,0x04,0x0a,
+	0x00,0x0a,0xdc,0x0a,0x00,0x53,0x04,0x0a,0x00,0xd2,0x08,0x11,0x04,0x0a,0x00,0x0b,
+	0x00,0x11,0x04,0x0b,0x00,0x0a,0x00,0x01,0x00,0xcf,0x86,0xd5,0x24,0x94,0x20,0xd3,
+	0x10,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x00,0x00,0x0d,0x00,0x52,
+	0x04,0x00,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x54,
+	0x04,0x01,0x00,0xd3,0x10,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,
+	0x00,0x06,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,0x06,0x00,0x08,0x00,0x10,0x04,0x08,
+	0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x08,0x00,0x0d,0x00,0x0d,0x00,0xd1,0x3e,0xd0,
+	0x06,0xcf,0x06,0x01,0x00,0xcf,0x86,0xd5,0x1d,0x54,0x04,0x01,0x00,0x53,0x04,0x01,
+	0x00,0xd2,0x08,0x11,0x04,0x01,0x00,0x0b,0x00,0x51,0x04,0x0b,0x00,0x10,0x04,0x0b,
+	0x00,0x01,0xff,0x00,0x94,0x15,0x93,0x11,0x92,0x0d,0x91,0x09,0x10,0x05,0x01,0xff,
+	0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd0,0x1e,0xcf,0x86,0x55,
+	0x04,0x01,0x00,0x94,0x14,0x93,0x10,0x92,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,
+	0x00,0x0b,0x00,0x0b,0x00,0x01,0x00,0x01,0x00,0xcf,0x86,0x55,0x04,0x01,0x00,0x54,
+	0x04,0x01,0x00,0x53,0x04,0x01,0x00,0x92,0x08,0x11,0x04,0x01,0x00,0x0b,0x00,0x0b,
+	0x00,0xe2,0x21,0x01,0xd1,0x6c,0xd0,0x1e,0xcf,0x86,0x95,0x18,0x94,0x14,0x93,0x10,
+	0x52,0x04,0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x08,0x00,0x04,0x00,
+	0x04,0x00,0x04,0x00,0xcf,0x86,0x95,0x48,0xd4,0x24,0xd3,0x10,0x52,0x04,0x04,0x00,
+	0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x08,0x00,0xd2,0x0c,0x91,0x08,0x10,0x04,
+	0x04,0x00,0x00,0x00,0x04,0x00,0x11,0x04,0x04,0x00,0x00,0x00,0xd3,0x10,0x52,0x04,
+	0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x00,0x00,0xd2,0x0c,0x91,0x08,
+	0x10,0x04,0x04,0x00,0x00,0x00,0x04,0x00,0x11,0x04,0x04,0x00,0x00,0x00,0x04,0x00,
+	0xd0,0x62,0xcf,0x86,0xd5,0x28,0x94,0x24,0xd3,0x10,0x52,0x04,0x04,0x00,0x51,0x04,
+	0x04,0x00,0x10,0x04,0x04,0x00,0x08,0x00,0xd2,0x0c,0x91,0x08,0x10,0x04,0x04,0x00,
+	0x00,0x00,0x04,0x00,0x11,0x04,0x04,0x00,0x00,0x00,0x04,0x00,0xd4,0x14,0x53,0x04,
+	0x04,0x00,0x52,0x04,0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x08,0x00,
+	0xd3,0x14,0xd2,0x0c,0x91,0x08,0x10,0x04,0x04,0x00,0x00,0x00,0x04,0x00,0x11,0x04,
+	0x04,0x00,0x00,0x00,0x52,0x04,0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,
+	0x00,0x00,0xcf,0x86,0xd5,0x38,0xd4,0x24,0xd3,0x14,0xd2,0x0c,0x91,0x08,0x10,0x04,
+	0x04,0x00,0x00,0x00,0x04,0x00,0x11,0x04,0x04,0x00,0x00,0x00,0x52,0x04,0x04,0x00,
+	0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x08,0x00,0x93,0x10,0x52,0x04,0x04,0x00,
+	0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x00,0x00,0x04,0x00,0x94,0x14,0x53,0x04,
+	0x04,0x00,0x52,0x04,0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x08,0x00,
+	0x04,0x00,0xd1,0x9c,0xd0,0x3e,0xcf,0x86,0x95,0x38,0xd4,0x14,0x53,0x04,0x04,0x00,
+	0x52,0x04,0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x08,0x00,0xd3,0x14,
+	0xd2,0x0c,0x91,0x08,0x10,0x04,0x04,0x00,0x00,0x00,0x04,0x00,0x11,0x04,0x04,0x00,
+	0x00,0x00,0x52,0x04,0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x08,0x00,
+	0x04,0x00,0xcf,0x86,0xd5,0x34,0xd4,0x14,0x93,0x10,0x52,0x04,0x04,0x00,0x51,0x04,
+	0x04,0x00,0x10,0x04,0x04,0x00,0x08,0x00,0x04,0x00,0x53,0x04,0x04,0x00,0xd2,0x0c,
+	0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x00,0x00,0xd1,0x08,0x10,0x04,0x00,0x00,
+	0x0c,0xe6,0x10,0x04,0x0c,0xe6,0x08,0xe6,0xd4,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,
+	0x10,0x04,0x08,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x53,0x04,0x04,0x00,
+	0x52,0x04,0x04,0x00,0x91,0x08,0x10,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0xd0,0x1a,
+	0xcf,0x86,0x95,0x14,0x54,0x04,0x08,0x00,0x53,0x04,0x08,0x00,0x92,0x08,0x11,0x04,
+	0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0xcf,0x86,0x55,0x04,0x04,0x00,0x54,0x04,
+	0x04,0x00,0xd3,0x10,0x52,0x04,0x04,0x00,0x91,0x08,0x10,0x04,0x04,0x00,0x11,0x00,
+	0x00,0x00,0x52,0x04,0x11,0x00,0x11,0x04,0x11,0x00,0x00,0x00,0xd3,0x30,0xd2,0x2a,
+	0xd1,0x24,0xd0,0x1e,0xcf,0x86,0x95,0x18,0x94,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,
+	0x10,0x04,0x0b,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,
+	0xcf,0x06,0x04,0x00,0xcf,0x06,0x04,0x00,0xcf,0x06,0x04,0x00,0xd2,0x6c,0xd1,0x24,
+	0xd0,0x06,0xcf,0x06,0x04,0x00,0xcf,0x86,0x55,0x04,0x04,0x00,0x54,0x04,0x04,0x00,
+	0x93,0x10,0x52,0x04,0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x0b,0x00,
+	0x0b,0x00,0xd0,0x1e,0xcf,0x86,0x95,0x18,0x54,0x04,0x04,0x00,0x53,0x04,0x04,0x00,
+	0x52,0x04,0x04,0x00,0x91,0x08,0x10,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x04,0x00,
+	0xcf,0x86,0x55,0x04,0x04,0x00,0x54,0x04,0x04,0x00,0xd3,0x10,0x92,0x0c,0x91,0x08,
+	0x10,0x04,0x04,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,
+	0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd1,0x80,0xd0,0x46,0xcf,0x86,0xd5,0x28,
+	0xd4,0x14,0x53,0x04,0x06,0x00,0x52,0x04,0x06,0x00,0x91,0x08,0x10,0x04,0x06,0x00,
+	0x00,0x00,0x06,0x00,0x93,0x10,0x52,0x04,0x06,0x00,0x91,0x08,0x10,0x04,0x06,0x09,
+	0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x04,0x06,0x00,0x93,0x14,0x52,0x04,0x06,0x00,
+	0xd1,0x08,0x10,0x04,0x06,0x09,0x06,0x00,0x10,0x04,0x06,0x00,0x00,0x00,0x00,0x00,
+	0xcf,0x86,0xd5,0x10,0x54,0x04,0x06,0x00,0x93,0x08,0x12,0x04,0x06,0x00,0x00,0x00,
+	0x00,0x00,0xd4,0x14,0x53,0x04,0x06,0x00,0x52,0x04,0x06,0x00,0x91,0x08,0x10,0x04,
+	0x06,0x00,0x00,0x00,0x06,0x00,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x06,0x00,
+	0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0xd0,0x1b,0xcf,0x86,0x55,0x04,0x04,0x00,
+	0x54,0x04,0x04,0x00,0x93,0x0d,0x52,0x04,0x04,0x00,0x11,0x05,0x04,0xff,0x00,0x04,
+	0x00,0x04,0x00,0xcf,0x86,0xd5,0x24,0x54,0x04,0x04,0x00,0xd3,0x10,0x92,0x0c,0x51,
+	0x04,0x04,0x00,0x10,0x04,0x04,0x09,0x04,0x00,0x04,0x00,0x52,0x04,0x04,0x00,0x91,
+	0x08,0x10,0x04,0x04,0x00,0x07,0xe6,0x00,0x00,0xd4,0x10,0x53,0x04,0x04,0x00,0x92,
+	0x08,0x11,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x53,0x04,0x07,0x00,0x92,0x08,0x11,
+	0x04,0x07,0x00,0x00,0x00,0x00,0x00,0xe4,0xb7,0x03,0xe3,0x58,0x01,0xd2,0x8f,0xd1,
+	0x53,0xd0,0x35,0xcf,0x86,0x95,0x2f,0xd4,0x1f,0x53,0x04,0x04,0x00,0xd2,0x0d,0x51,
+	0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x04,0xff,0x00,0x51,0x05,0x04,0xff,0x00,0x10,
+	0x05,0x04,0xff,0x00,0x00,0x00,0x53,0x04,0x04,0x00,0x92,0x08,0x11,0x04,0x04,0x00,
+	0x00,0x00,0x00,0x00,0x04,0x00,0xcf,0x86,0x55,0x04,0x04,0x00,0x54,0x04,0x04,0x00,
+	0x53,0x04,0x04,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x14,0x00,0x00,0x00,0x00,0x00,
+	0x00,0x00,0xd0,0x22,0xcf,0x86,0x55,0x04,0x04,0x00,0x94,0x18,0x53,0x04,0x04,0x00,
+	0x92,0x10,0xd1,0x08,0x10,0x04,0x04,0x00,0x04,0xe4,0x10,0x04,0x0a,0x00,0x00,0x00,
+	0x00,0x00,0x0b,0x00,0xcf,0x86,0x55,0x04,0x0b,0x00,0x54,0x04,0x0b,0x00,0x93,0x0c,
+	0x52,0x04,0x0b,0x00,0x11,0x04,0x0b,0x00,0x00,0x00,0x00,0x00,0xd1,0x80,0xd0,0x42,
+	0xcf,0x86,0xd5,0x1c,0x54,0x04,0x07,0x00,0x53,0x04,0x07,0x00,0x52,0x04,0x07,0x00,
+	0xd1,0x08,0x10,0x04,0x07,0x00,0x10,0x00,0x10,0x04,0x10,0x00,0x00,0x00,0xd4,0x0c,
+	0x53,0x04,0x07,0x00,0x12,0x04,0x07,0x00,0x00,0x00,0x53,0x04,0x07,0x00,0x92,0x10,
+	0xd1,0x08,0x10,0x04,0x07,0x00,0x07,0xde,0x10,0x04,0x07,0xe6,0x07,0xdc,0x00,0x00,
+	0xcf,0x86,0xd5,0x18,0x94,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x07,0x00,
+	0x00,0x00,0x00,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0xd4,0x10,0x53,0x04,0x07,0x00,
+	0x52,0x04,0x07,0x00,0x11,0x04,0x07,0x00,0x00,0x00,0x93,0x10,0x52,0x04,0x07,0x00,
+	0x91,0x08,0x10,0x04,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd0,0x1a,0xcf,0x86,
+	0x55,0x04,0x08,0x00,0x94,0x10,0x53,0x04,0x08,0x00,0x92,0x08,0x11,0x04,0x08,0x00,
+	0x0b,0x00,0x00,0x00,0x08,0x00,0xcf,0x86,0x95,0x28,0xd4,0x10,0x53,0x04,0x08,0x00,
+	0x92,0x08,0x11,0x04,0x08,0x00,0x00,0x00,0x00,0x00,0x53,0x04,0x08,0x00,0xd2,0x0c,
+	0x51,0x04,0x08,0x00,0x10,0x04,0x0b,0x00,0x00,0x00,0x11,0x04,0x00,0x00,0x08,0x00,
+	0x07,0x00,0xd2,0xe4,0xd1,0x80,0xd0,0x2e,0xcf,0x86,0x95,0x28,0x54,0x04,0x08,0x00,
+	0xd3,0x10,0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x08,0xe6,
+	0xd2,0x0c,0x91,0x08,0x10,0x04,0x08,0xdc,0x08,0x00,0x08,0x00,0x11,0x04,0x00,0x00,
+	0x08,0x00,0x0b,0x00,0xcf,0x86,0xd5,0x18,0x54,0x04,0x0b,0x00,0x53,0x04,0x0b,0x00,
+	0x52,0x04,0x0b,0x00,0x51,0x04,0x0b,0x00,0x10,0x04,0x0b,0x00,0x00,0x00,0xd4,0x14,
+	0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x0b,0x09,0x0b,0x00,0x0b,0x00,0x0b,0x00,
+	0x0b,0x00,0xd3,0x10,0x52,0x04,0x0b,0x00,0x91,0x08,0x10,0x04,0x0b,0x00,0x0b,0xe6,
+	0x0b,0xe6,0x52,0x04,0x0b,0xe6,0xd1,0x08,0x10,0x04,0x0b,0xe6,0x00,0x00,0x10,0x04,
+	0x00,0x00,0x0b,0xdc,0xd0,0x5e,0xcf,0x86,0xd5,0x20,0xd4,0x10,0x53,0x04,0x0b,0x00,
+	0x92,0x08,0x11,0x04,0x0b,0x00,0x00,0x00,0x00,0x00,0x53,0x04,0x0b,0x00,0x92,0x08,
+	0x11,0x04,0x0b,0x00,0x00,0x00,0x00,0x00,0xd4,0x10,0x53,0x04,0x0b,0x00,0x52,0x04,
+	0x0b,0x00,0x11,0x04,0x0b,0x00,0x00,0x00,0xd3,0x10,0x52,0x04,0x10,0xe6,0x91,0x08,
+	0x10,0x04,0x10,0xe6,0x10,0xdc,0x10,0xdc,0xd2,0x0c,0x51,0x04,0x10,0xdc,0x10,0x04,
+	0x10,0xdc,0x10,0xe6,0xd1,0x08,0x10,0x04,0x10,0xe6,0x10,0xdc,0x10,0x04,0x10,0x00,
+	0x00,0x00,0xcf,0x06,0x00,0x00,0xe1,0x1e,0x01,0xd0,0xaa,0xcf,0x86,0xd5,0x6e,0xd4,
+	0x53,0xd3,0x17,0x52,0x04,0x09,0x00,0x51,0x04,0x09,0x00,0x10,0x0b,0x09,0xff,0xe1,
+	0xac,0x85,0xe1,0xac,0xb5,0x00,0x09,0x00,0xd2,0x1e,0xd1,0x0f,0x10,0x0b,0x09,0xff,
+	0xe1,0xac,0x87,0xe1,0xac,0xb5,0x00,0x09,0x00,0x10,0x0b,0x09,0xff,0xe1,0xac,0x89,
+	0xe1,0xac,0xb5,0x00,0x09,0x00,0xd1,0x0f,0x10,0x0b,0x09,0xff,0xe1,0xac,0x8b,0xe1,
+	0xac,0xb5,0x00,0x09,0x00,0x10,0x0b,0x09,0xff,0xe1,0xac,0x8d,0xe1,0xac,0xb5,0x00,
+	0x09,0x00,0x93,0x17,0x92,0x13,0x51,0x04,0x09,0x00,0x10,0x0b,0x09,0xff,0xe1,0xac,
+	0x91,0xe1,0xac,0xb5,0x00,0x09,0x00,0x09,0x00,0x09,0x00,0x54,0x04,0x09,0x00,0xd3,
+	0x10,0x52,0x04,0x09,0x00,0x91,0x08,0x10,0x04,0x09,0x07,0x09,0x00,0x09,0x00,0xd2,
+	0x13,0x51,0x04,0x09,0x00,0x10,0x04,0x09,0x00,0x09,0xff,0xe1,0xac,0xba,0xe1,0xac,
+	0xb5,0x00,0x91,0x0f,0x10,0x04,0x09,0x00,0x09,0xff,0xe1,0xac,0xbc,0xe1,0xac,0xb5,
+	0x00,0x09,0x00,0xcf,0x86,0xd5,0x3d,0x94,0x39,0xd3,0x31,0xd2,0x25,0xd1,0x16,0x10,
+	0x0b,0x09,0xff,0xe1,0xac,0xbe,0xe1,0xac,0xb5,0x00,0x09,0xff,0xe1,0xac,0xbf,0xe1,
+	0xac,0xb5,0x00,0x10,0x04,0x09,0x00,0x09,0xff,0xe1,0xad,0x82,0xe1,0xac,0xb5,0x00,
+	0x91,0x08,0x10,0x04,0x09,0x09,0x09,0x00,0x09,0x00,0x12,0x04,0x09,0x00,0x00,0x00,
+	0x09,0x00,0xd4,0x1c,0x53,0x04,0x09,0x00,0xd2,0x0c,0x51,0x04,0x09,0x00,0x10,0x04,
+	0x09,0x00,0x09,0xe6,0x91,0x08,0x10,0x04,0x09,0xdc,0x09,0xe6,0x09,0xe6,0xd3,0x08,
+	0x12,0x04,0x09,0xe6,0x09,0x00,0x52,0x04,0x09,0x00,0x91,0x08,0x10,0x04,0x09,0x00,
+	0x00,0x00,0x00,0x00,0xd0,0x2e,0xcf,0x86,0x55,0x04,0x0a,0x00,0xd4,0x18,0x53,0x04,
+	0x0a,0x00,0xd2,0x0c,0x51,0x04,0x0a,0x00,0x10,0x04,0x0a,0x09,0x0d,0x09,0x11,0x04,
+	0x0d,0x00,0x0a,0x00,0x53,0x04,0x0a,0x00,0x92,0x08,0x11,0x04,0x0a,0x00,0x0d,0x00,
+	0x0d,0x00,0xcf,0x86,0x55,0x04,0x0c,0x00,0xd4,0x14,0x93,0x10,0x52,0x04,0x0c,0x00,
+	0x51,0x04,0x0c,0x00,0x10,0x04,0x0c,0x07,0x0c,0x00,0x0c,0x00,0xd3,0x0c,0x92,0x08,
+	0x11,0x04,0x0c,0x00,0x0c,0x09,0x00,0x00,0x12,0x04,0x00,0x00,0x0c,0x00,0xe3,0xb2,
+	0x01,0xe2,0x09,0x01,0xd1,0x4c,0xd0,0x2a,0xcf,0x86,0x55,0x04,0x0a,0x00,0x54,0x04,
+	0x0a,0x00,0xd3,0x10,0x52,0x04,0x0a,0x00,0x51,0x04,0x0a,0x00,0x10,0x04,0x0a,0x00,
+	0x0a,0x07,0x92,0x0c,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x0a,0x00,0x0a,0x00,
+	0xcf,0x86,0x95,0x1c,0x94,0x18,0x53,0x04,0x0a,0x00,0xd2,0x08,0x11,0x04,0x0a,0x00,
+	0x00,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x0a,0x00,0x0a,0x00,0x0a,0x00,0x0a,0x00,
+	0xd0,0x3a,0xcf,0x86,0xd5,0x18,0x94,0x14,0x53,0x04,0x12,0x00,0x92,0x0c,0x91,0x08,
+	0x10,0x04,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0x54,0x04,0x14,0x00,
+	0x53,0x04,0x14,0x00,0xd2,0x0c,0x51,0x04,0x14,0x00,0x10,0x04,0x14,0x00,0x00,0x00,
+	0x91,0x08,0x10,0x04,0x00,0x00,0x14,0x00,0x14,0x00,0xcf,0x86,0xd5,0x2c,0xd4,0x08,
+	0x13,0x04,0x0d,0x00,0x00,0x00,0xd3,0x18,0xd2,0x0c,0x51,0x04,0x0b,0xe6,0x10,0x04,
+	0x0b,0xe6,0x0b,0x00,0x91,0x08,0x10,0x04,0x0b,0x01,0x0b,0xdc,0x0b,0xdc,0x92,0x08,
+	0x11,0x04,0x0b,0xdc,0x0b,0xe6,0x0b,0xdc,0xd4,0x28,0xd3,0x10,0x92,0x0c,0x91,0x08,
+	0x10,0x04,0x0b,0xe6,0x0b,0x00,0x0b,0x01,0x0b,0x01,0xd2,0x0c,0x91,0x08,0x10,0x04,
+	0x0b,0x01,0x0b,0x00,0x0b,0x00,0x91,0x08,0x10,0x04,0x0b,0x00,0x0b,0xdc,0x0b,0x00,
+	0xd3,0x1c,0xd2,0x0c,0x51,0x04,0x0b,0x00,0x10,0x04,0x0b,0x00,0x0d,0x00,0xd1,0x08,
+	0x10,0x04,0x0d,0xe6,0x0d,0x00,0x10,0x04,0x0d,0x00,0x13,0x00,0x92,0x0c,0x51,0x04,
+	0x10,0xe6,0x10,0x04,0x15,0x00,0x00,0x00,0x00,0x00,0xd1,0x1c,0xd0,0x06,0xcf,0x06,
+	0x07,0x00,0xcf,0x86,0x55,0x04,0x07,0x00,0x94,0x0c,0x53,0x04,0x07,0x00,0x12,0x04,
+	0x07,0x00,0x08,0x00,0x08,0x00,0xd0,0x06,0xcf,0x06,0x08,0x00,0xcf,0x86,0xd5,0x40,
+	0xd4,0x2c,0xd3,0x10,0x92,0x0c,0x51,0x04,0x08,0xe6,0x10,0x04,0x08,0xdc,0x08,0xe6,
+	0x09,0xe6,0xd2,0x0c,0x51,0x04,0x09,0xe6,0x10,0x04,0x09,0xdc,0x0a,0xe6,0xd1,0x08,
+	0x10,0x04,0x0a,0xe6,0x0a,0xea,0x10,0x04,0x0a,0xd6,0x0a,0xdc,0x93,0x10,0x92,0x0c,
+	0x91,0x08,0x10,0x04,0x0a,0xca,0x0a,0xe6,0x0a,0xe6,0x0a,0xe6,0x0a,0xe6,0xd4,0x14,
+	0x93,0x10,0x52,0x04,0x0a,0xe6,0x51,0x04,0x0a,0xe6,0x10,0x04,0x0a,0xe6,0x10,0xe6,
+	0x10,0xe6,0xd3,0x10,0x52,0x04,0x10,0xe6,0x51,0x04,0x10,0xe6,0x10,0x04,0x13,0xe8,
+	0x13,0xe4,0xd2,0x10,0xd1,0x08,0x10,0x04,0x13,0xe4,0x13,0xdc,0x10,0x04,0x00,0x00,
+	0x12,0xe6,0xd1,0x08,0x10,0x04,0x0c,0xe9,0x0b,0xdc,0x10,0x04,0x09,0xe6,0x09,0xdc,
+	0xe2,0x80,0x08,0xe1,0x48,0x04,0xe0,0x1c,0x02,0xcf,0x86,0xe5,0x11,0x01,0xd4,0x84,
+	0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x41,0xcc,0xa5,0x00,0x01,0xff,
+	0x61,0xcc,0xa5,0x00,0x10,0x08,0x01,0xff,0x42,0xcc,0x87,0x00,0x01,0xff,0x62,0xcc,
+	0x87,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x42,0xcc,0xa3,0x00,0x01,0xff,0x62,0xcc,
+	0xa3,0x00,0x10,0x08,0x01,0xff,0x42,0xcc,0xb1,0x00,0x01,0xff,0x62,0xcc,0xb1,0x00,
+	0xd2,0x24,0xd1,0x14,0x10,0x0a,0x01,0xff,0x43,0xcc,0xa7,0xcc,0x81,0x00,0x01,0xff,
+	0x63,0xcc,0xa7,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x44,0xcc,0x87,0x00,0x01,0xff,
+	0x64,0xcc,0x87,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x44,0xcc,0xa3,0x00,0x01,0xff,
+	0x64,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x44,0xcc,0xb1,0x00,0x01,0xff,0x64,0xcc,
+	0xb1,0x00,0xd3,0x48,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x44,0xcc,0xa7,0x00,
+	0x01,0xff,0x64,0xcc,0xa7,0x00,0x10,0x08,0x01,0xff,0x44,0xcc,0xad,0x00,0x01,0xff,
+	0x64,0xcc,0xad,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x45,0xcc,0x84,0xcc,0x80,0x00,
+	0x01,0xff,0x65,0xcc,0x84,0xcc,0x80,0x00,0x10,0x0a,0x01,0xff,0x45,0xcc,0x84,0xcc,
+	0x81,0x00,0x01,0xff,0x65,0xcc,0x84,0xcc,0x81,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,
+	0x01,0xff,0x45,0xcc,0xad,0x00,0x01,0xff,0x65,0xcc,0xad,0x00,0x10,0x08,0x01,0xff,
+	0x45,0xcc,0xb0,0x00,0x01,0xff,0x65,0xcc,0xb0,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,
+	0x45,0xcc,0xa7,0xcc,0x86,0x00,0x01,0xff,0x65,0xcc,0xa7,0xcc,0x86,0x00,0x10,0x08,
+	0x01,0xff,0x46,0xcc,0x87,0x00,0x01,0xff,0x66,0xcc,0x87,0x00,0xd4,0x84,0xd3,0x40,
+	0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x47,0xcc,0x84,0x00,0x01,0xff,0x67,0xcc,
+	0x84,0x00,0x10,0x08,0x01,0xff,0x48,0xcc,0x87,0x00,0x01,0xff,0x68,0xcc,0x87,0x00,
+	0xd1,0x10,0x10,0x08,0x01,0xff,0x48,0xcc,0xa3,0x00,0x01,0xff,0x68,0xcc,0xa3,0x00,
+	0x10,0x08,0x01,0xff,0x48,0xcc,0x88,0x00,0x01,0xff,0x68,0xcc,0x88,0x00,0xd2,0x20,
+	0xd1,0x10,0x10,0x08,0x01,0xff,0x48,0xcc,0xa7,0x00,0x01,0xff,0x68,0xcc,0xa7,0x00,
+	0x10,0x08,0x01,0xff,0x48,0xcc,0xae,0x00,0x01,0xff,0x68,0xcc,0xae,0x00,0xd1,0x10,
+	0x10,0x08,0x01,0xff,0x49,0xcc,0xb0,0x00,0x01,0xff,0x69,0xcc,0xb0,0x00,0x10,0x0a,
+	0x01,0xff,0x49,0xcc,0x88,0xcc,0x81,0x00,0x01,0xff,0x69,0xcc,0x88,0xcc,0x81,0x00,
+	0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x4b,0xcc,0x81,0x00,0x01,0xff,
+	0x6b,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x4b,0xcc,0xa3,0x00,0x01,0xff,0x6b,0xcc,
+	0xa3,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x4b,0xcc,0xb1,0x00,0x01,0xff,0x6b,0xcc,
+	0xb1,0x00,0x10,0x08,0x01,0xff,0x4c,0xcc,0xa3,0x00,0x01,0xff,0x6c,0xcc,0xa3,0x00,
+	0xd2,0x24,0xd1,0x14,0x10,0x0a,0x01,0xff,0x4c,0xcc,0xa3,0xcc,0x84,0x00,0x01,0xff,
+	0x6c,0xcc,0xa3,0xcc,0x84,0x00,0x10,0x08,0x01,0xff,0x4c,0xcc,0xb1,0x00,0x01,0xff,
+	0x6c,0xcc,0xb1,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x4c,0xcc,0xad,0x00,0x01,0xff,
+	0x6c,0xcc,0xad,0x00,0x10,0x08,0x01,0xff,0x4d,0xcc,0x81,0x00,0x01,0xff,0x6d,0xcc,
+	0x81,0x00,0xcf,0x86,0xe5,0x15,0x01,0xd4,0x88,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,
+	0x08,0x01,0xff,0x4d,0xcc,0x87,0x00,0x01,0xff,0x6d,0xcc,0x87,0x00,0x10,0x08,0x01,
+	0xff,0x4d,0xcc,0xa3,0x00,0x01,0xff,0x6d,0xcc,0xa3,0x00,0xd1,0x10,0x10,0x08,0x01,
+	0xff,0x4e,0xcc,0x87,0x00,0x01,0xff,0x6e,0xcc,0x87,0x00,0x10,0x08,0x01,0xff,0x4e,
+	0xcc,0xa3,0x00,0x01,0xff,0x6e,0xcc,0xa3,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,
+	0xff,0x4e,0xcc,0xb1,0x00,0x01,0xff,0x6e,0xcc,0xb1,0x00,0x10,0x08,0x01,0xff,0x4e,
+	0xcc,0xad,0x00,0x01,0xff,0x6e,0xcc,0xad,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x4f,
+	0xcc,0x83,0xcc,0x81,0x00,0x01,0xff,0x6f,0xcc,0x83,0xcc,0x81,0x00,0x10,0x0a,0x01,
+	0xff,0x4f,0xcc,0x83,0xcc,0x88,0x00,0x01,0xff,0x6f,0xcc,0x83,0xcc,0x88,0x00,0xd3,
+	0x48,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x4f,0xcc,0x84,0xcc,0x80,0x00,0x01,
+	0xff,0x6f,0xcc,0x84,0xcc,0x80,0x00,0x10,0x0a,0x01,0xff,0x4f,0xcc,0x84,0xcc,0x81,
+	0x00,0x01,0xff,0x6f,0xcc,0x84,0xcc,0x81,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x50,
+	0xcc,0x81,0x00,0x01,0xff,0x70,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x50,0xcc,0x87,
+	0x00,0x01,0xff,0x70,0xcc,0x87,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x52,
+	0xcc,0x87,0x00,0x01,0xff,0x72,0xcc,0x87,0x00,0x10,0x08,0x01,0xff,0x52,0xcc,0xa3,
+	0x00,0x01,0xff,0x72,0xcc,0xa3,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x52,0xcc,0xa3,
+	0xcc,0x84,0x00,0x01,0xff,0x72,0xcc,0xa3,0xcc,0x84,0x00,0x10,0x08,0x01,0xff,0x52,
+	0xcc,0xb1,0x00,0x01,0xff,0x72,0xcc,0xb1,0x00,0xd4,0x8c,0xd3,0x48,0xd2,0x20,0xd1,
+	0x10,0x10,0x08,0x01,0xff,0x53,0xcc,0x87,0x00,0x01,0xff,0x73,0xcc,0x87,0x00,0x10,
+	0x08,0x01,0xff,0x53,0xcc,0xa3,0x00,0x01,0xff,0x73,0xcc,0xa3,0x00,0xd1,0x14,0x10,
+	0x0a,0x01,0xff,0x53,0xcc,0x81,0xcc,0x87,0x00,0x01,0xff,0x73,0xcc,0x81,0xcc,0x87,
+	0x00,0x10,0x0a,0x01,0xff,0x53,0xcc,0x8c,0xcc,0x87,0x00,0x01,0xff,0x73,0xcc,0x8c,
+	0xcc,0x87,0x00,0xd2,0x24,0xd1,0x14,0x10,0x0a,0x01,0xff,0x53,0xcc,0xa3,0xcc,0x87,
+	0x00,0x01,0xff,0x73,0xcc,0xa3,0xcc,0x87,0x00,0x10,0x08,0x01,0xff,0x54,0xcc,0x87,
+	0x00,0x01,0xff,0x74,0xcc,0x87,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x54,0xcc,0xa3,
+	0x00,0x01,0xff,0x74,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x54,0xcc,0xb1,0x00,0x01,
+	0xff,0x74,0xcc,0xb1,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x54,
+	0xcc,0xad,0x00,0x01,0xff,0x74,0xcc,0xad,0x00,0x10,0x08,0x01,0xff,0x55,0xcc,0xa4,
+	0x00,0x01,0xff,0x75,0xcc,0xa4,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x55,0xcc,0xb0,
+	0x00,0x01,0xff,0x75,0xcc,0xb0,0x00,0x10,0x08,0x01,0xff,0x55,0xcc,0xad,0x00,0x01,
+	0xff,0x75,0xcc,0xad,0x00,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x55,0xcc,0x83,
+	0xcc,0x81,0x00,0x01,0xff,0x75,0xcc,0x83,0xcc,0x81,0x00,0x10,0x0a,0x01,0xff,0x55,
+	0xcc,0x84,0xcc,0x88,0x00,0x01,0xff,0x75,0xcc,0x84,0xcc,0x88,0x00,0xd1,0x10,0x10,
+	0x08,0x01,0xff,0x56,0xcc,0x83,0x00,0x01,0xff,0x76,0xcc,0x83,0x00,0x10,0x08,0x01,
+	0xff,0x56,0xcc,0xa3,0x00,0x01,0xff,0x76,0xcc,0xa3,0x00,0xe0,0x10,0x02,0xcf,0x86,
+	0xd5,0xe1,0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x57,0xcc,
+	0x80,0x00,0x01,0xff,0x77,0xcc,0x80,0x00,0x10,0x08,0x01,0xff,0x57,0xcc,0x81,0x00,
+	0x01,0xff,0x77,0xcc,0x81,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x57,0xcc,0x88,0x00,
+	0x01,0xff,0x77,0xcc,0x88,0x00,0x10,0x08,0x01,0xff,0x57,0xcc,0x87,0x00,0x01,0xff,
+	0x77,0xcc,0x87,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x57,0xcc,0xa3,0x00,
+	0x01,0xff,0x77,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x58,0xcc,0x87,0x00,0x01,0xff,
+	0x78,0xcc,0x87,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x58,0xcc,0x88,0x00,0x01,0xff,
+	0x78,0xcc,0x88,0x00,0x10,0x08,0x01,0xff,0x59,0xcc,0x87,0x00,0x01,0xff,0x79,0xcc,
+	0x87,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x5a,0xcc,0x82,0x00,
+	0x01,0xff,0x7a,0xcc,0x82,0x00,0x10,0x08,0x01,0xff,0x5a,0xcc,0xa3,0x00,0x01,0xff,
+	0x7a,0xcc,0xa3,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x5a,0xcc,0xb1,0x00,0x01,0xff,
+	0x7a,0xcc,0xb1,0x00,0x10,0x08,0x01,0xff,0x68,0xcc,0xb1,0x00,0x01,0xff,0x74,0xcc,
+	0x88,0x00,0x92,0x1d,0xd1,0x10,0x10,0x08,0x01,0xff,0x77,0xcc,0x8a,0x00,0x01,0xff,
+	0x79,0xcc,0x8a,0x00,0x10,0x04,0x01,0x00,0x02,0xff,0xc5,0xbf,0xcc,0x87,0x00,0x0a,
+	0x00,0xd4,0x98,0xd3,0x48,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x41,0xcc,0xa3,
+	0x00,0x01,0xff,0x61,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x41,0xcc,0x89,0x00,0x01,
+	0xff,0x61,0xcc,0x89,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x41,0xcc,0x82,0xcc,0x81,
+	0x00,0x01,0xff,0x61,0xcc,0x82,0xcc,0x81,0x00,0x10,0x0a,0x01,0xff,0x41,0xcc,0x82,
+	0xcc,0x80,0x00,0x01,0xff,0x61,0xcc,0x82,0xcc,0x80,0x00,0xd2,0x28,0xd1,0x14,0x10,
+	0x0a,0x01,0xff,0x41,0xcc,0x82,0xcc,0x89,0x00,0x01,0xff,0x61,0xcc,0x82,0xcc,0x89,
+	0x00,0x10,0x0a,0x01,0xff,0x41,0xcc,0x82,0xcc,0x83,0x00,0x01,0xff,0x61,0xcc,0x82,
+	0xcc,0x83,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x41,0xcc,0xa3,0xcc,0x82,0x00,0x01,
+	0xff,0x61,0xcc,0xa3,0xcc,0x82,0x00,0x10,0x0a,0x01,0xff,0x41,0xcc,0x86,0xcc,0x81,
+	0x00,0x01,0xff,0x61,0xcc,0x86,0xcc,0x81,0x00,0xd3,0x50,0xd2,0x28,0xd1,0x14,0x10,
+	0x0a,0x01,0xff,0x41,0xcc,0x86,0xcc,0x80,0x00,0x01,0xff,0x61,0xcc,0x86,0xcc,0x80,
+	0x00,0x10,0x0a,0x01,0xff,0x41,0xcc,0x86,0xcc,0x89,0x00,0x01,0xff,0x61,0xcc,0x86,
+	0xcc,0x89,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x41,0xcc,0x86,0xcc,0x83,0x00,0x01,
+	0xff,0x61,0xcc,0x86,0xcc,0x83,0x00,0x10,0x0a,0x01,0xff,0x41,0xcc,0xa3,0xcc,0x86,
+	0x00,0x01,0xff,0x61,0xcc,0xa3,0xcc,0x86,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,
+	0xff,0x45,0xcc,0xa3,0x00,0x01,0xff,0x65,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x45,
+	0xcc,0x89,0x00,0x01,0xff,0x65,0xcc,0x89,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x45,
+	0xcc,0x83,0x00,0x01,0xff,0x65,0xcc,0x83,0x00,0x10,0x0a,0x01,0xff,0x45,0xcc,0x82,
+	0xcc,0x81,0x00,0x01,0xff,0x65,0xcc,0x82,0xcc,0x81,0x00,0xcf,0x86,0xe5,0x31,0x01,
+	0xd4,0x90,0xd3,0x50,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x45,0xcc,0x82,0xcc,
+	0x80,0x00,0x01,0xff,0x65,0xcc,0x82,0xcc,0x80,0x00,0x10,0x0a,0x01,0xff,0x45,0xcc,
+	0x82,0xcc,0x89,0x00,0x01,0xff,0x65,0xcc,0x82,0xcc,0x89,0x00,0xd1,0x14,0x10,0x0a,
+	0x01,0xff,0x45,0xcc,0x82,0xcc,0x83,0x00,0x01,0xff,0x65,0xcc,0x82,0xcc,0x83,0x00,
+	0x10,0x0a,0x01,0xff,0x45,0xcc,0xa3,0xcc,0x82,0x00,0x01,0xff,0x65,0xcc,0xa3,0xcc,
+	0x82,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x49,0xcc,0x89,0x00,0x01,0xff,
+	0x69,0xcc,0x89,0x00,0x10,0x08,0x01,0xff,0x49,0xcc,0xa3,0x00,0x01,0xff,0x69,0xcc,
+	0xa3,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x4f,0xcc,0xa3,0x00,0x01,0xff,0x6f,0xcc,
+	0xa3,0x00,0x10,0x08,0x01,0xff,0x4f,0xcc,0x89,0x00,0x01,0xff,0x6f,0xcc,0x89,0x00,
+	0xd3,0x50,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x4f,0xcc,0x82,0xcc,0x81,0x00,
+	0x01,0xff,0x6f,0xcc,0x82,0xcc,0x81,0x00,0x10,0x0a,0x01,0xff,0x4f,0xcc,0x82,0xcc,
+	0x80,0x00,0x01,0xff,0x6f,0xcc,0x82,0xcc,0x80,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,
+	0x4f,0xcc,0x82,0xcc,0x89,0x00,0x01,0xff,0x6f,0xcc,0x82,0xcc,0x89,0x00,0x10,0x0a,
+	0x01,0xff,0x4f,0xcc,0x82,0xcc,0x83,0x00,0x01,0xff,0x6f,0xcc,0x82,0xcc,0x83,0x00,
+	0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x4f,0xcc,0xa3,0xcc,0x82,0x00,0x01,0xff,
+	0x6f,0xcc,0xa3,0xcc,0x82,0x00,0x10,0x0a,0x01,0xff,0x4f,0xcc,0x9b,0xcc,0x81,0x00,
+	0x01,0xff,0x6f,0xcc,0x9b,0xcc,0x81,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x4f,0xcc,
+	0x9b,0xcc,0x80,0x00,0x01,0xff,0x6f,0xcc,0x9b,0xcc,0x80,0x00,0x10,0x0a,0x01,0xff,
+	0x4f,0xcc,0x9b,0xcc,0x89,0x00,0x01,0xff,0x6f,0xcc,0x9b,0xcc,0x89,0x00,0xd4,0x98,
+	0xd3,0x48,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x4f,0xcc,0x9b,0xcc,0x83,0x00,
+	0x01,0xff,0x6f,0xcc,0x9b,0xcc,0x83,0x00,0x10,0x0a,0x01,0xff,0x4f,0xcc,0x9b,0xcc,
+	0xa3,0x00,0x01,0xff,0x6f,0xcc,0x9b,0xcc,0xa3,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,
+	0x55,0xcc,0xa3,0x00,0x01,0xff,0x75,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x55,0xcc,
+	0x89,0x00,0x01,0xff,0x75,0xcc,0x89,0x00,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,
+	0x55,0xcc,0x9b,0xcc,0x81,0x00,0x01,0xff,0x75,0xcc,0x9b,0xcc,0x81,0x00,0x10,0x0a,
+	0x01,0xff,0x55,0xcc,0x9b,0xcc,0x80,0x00,0x01,0xff,0x75,0xcc,0x9b,0xcc,0x80,0x00,
+	0xd1,0x14,0x10,0x0a,0x01,0xff,0x55,0xcc,0x9b,0xcc,0x89,0x00,0x01,0xff,0x75,0xcc,
+	0x9b,0xcc,0x89,0x00,0x10,0x0a,0x01,0xff,0x55,0xcc,0x9b,0xcc,0x83,0x00,0x01,0xff,
+	0x75,0xcc,0x9b,0xcc,0x83,0x00,0xd3,0x44,0xd2,0x24,0xd1,0x14,0x10,0x0a,0x01,0xff,
+	0x55,0xcc,0x9b,0xcc,0xa3,0x00,0x01,0xff,0x75,0xcc,0x9b,0xcc,0xa3,0x00,0x10,0x08,
+	0x01,0xff,0x59,0xcc,0x80,0x00,0x01,0xff,0x79,0xcc,0x80,0x00,0xd1,0x10,0x10,0x08,
+	0x01,0xff,0x59,0xcc,0xa3,0x00,0x01,0xff,0x79,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,
+	0x59,0xcc,0x89,0x00,0x01,0xff,0x79,0xcc,0x89,0x00,0x92,0x14,0x91,0x10,0x10,0x08,
+	0x01,0xff,0x59,0xcc,0x83,0x00,0x01,0xff,0x79,0xcc,0x83,0x00,0x0a,0x00,0x0a,0x00,
+	0xe1,0xc0,0x04,0xe0,0x80,0x02,0xcf,0x86,0xe5,0x2d,0x01,0xd4,0xa8,0xd3,0x54,0xd2,
+	0x28,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb1,0xcc,0x93,0x00,0x01,0xff,0xce,0xb1,
+	0xcc,0x94,0x00,0x10,0x0b,0x01,0xff,0xce,0xb1,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,
+	0xce,0xb1,0xcc,0x94,0xcc,0x80,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0xb1,0xcc,
+	0x93,0xcc,0x81,0x00,0x01,0xff,0xce,0xb1,0xcc,0x94,0xcc,0x81,0x00,0x10,0x0b,0x01,
+	0xff,0xce,0xb1,0xcc,0x93,0xcd,0x82,0x00,0x01,0xff,0xce,0xb1,0xcc,0x94,0xcd,0x82,
+	0x00,0xd2,0x28,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0x91,0xcc,0x93,0x00,0x01,0xff,
+	0xce,0x91,0xcc,0x94,0x00,0x10,0x0b,0x01,0xff,0xce,0x91,0xcc,0x93,0xcc,0x80,0x00,
+	0x01,0xff,0xce,0x91,0xcc,0x94,0xcc,0x80,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,
+	0x91,0xcc,0x93,0xcc,0x81,0x00,0x01,0xff,0xce,0x91,0xcc,0x94,0xcc,0x81,0x00,0x10,
+	0x0b,0x01,0xff,0xce,0x91,0xcc,0x93,0xcd,0x82,0x00,0x01,0xff,0xce,0x91,0xcc,0x94,
+	0xcd,0x82,0x00,0xd3,0x42,0xd2,0x28,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb5,0xcc,
+	0x93,0x00,0x01,0xff,0xce,0xb5,0xcc,0x94,0x00,0x10,0x0b,0x01,0xff,0xce,0xb5,0xcc,
+	0x93,0xcc,0x80,0x00,0x01,0xff,0xce,0xb5,0xcc,0x94,0xcc,0x80,0x00,0x91,0x16,0x10,
+	0x0b,0x01,0xff,0xce,0xb5,0xcc,0x93,0xcc,0x81,0x00,0x01,0xff,0xce,0xb5,0xcc,0x94,
+	0xcc,0x81,0x00,0x00,0x00,0xd2,0x28,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0x95,0xcc,
+	0x93,0x00,0x01,0xff,0xce,0x95,0xcc,0x94,0x00,0x10,0x0b,0x01,0xff,0xce,0x95,0xcc,
+	0x93,0xcc,0x80,0x00,0x01,0xff,0xce,0x95,0xcc,0x94,0xcc,0x80,0x00,0x91,0x16,0x10,
+	0x0b,0x01,0xff,0xce,0x95,0xcc,0x93,0xcc,0x81,0x00,0x01,0xff,0xce,0x95,0xcc,0x94,
+	0xcc,0x81,0x00,0x00,0x00,0xd4,0xa8,0xd3,0x54,0xd2,0x28,0xd1,0x12,0x10,0x09,0x01,
+	0xff,0xce,0xb7,0xcc,0x93,0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0x00,0x10,0x0b,0x01,
+	0xff,0xce,0xb7,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcc,0x80,
+	0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0xb7,0xcc,0x93,0xcc,0x81,0x00,0x01,0xff,
+	0xce,0xb7,0xcc,0x94,0xcc,0x81,0x00,0x10,0x0b,0x01,0xff,0xce,0xb7,0xcc,0x93,0xcd,
+	0x82,0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcd,0x82,0x00,0xd2,0x28,0xd1,0x12,0x10,
+	0x09,0x01,0xff,0xce,0x97,0xcc,0x93,0x00,0x01,0xff,0xce,0x97,0xcc,0x94,0x00,0x10,
+	0x0b,0x01,0xff,0xce,0x97,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,0xce,0x97,0xcc,0x94,
+	0xcc,0x80,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0x97,0xcc,0x93,0xcc,0x81,0x00,
+	0x01,0xff,0xce,0x97,0xcc,0x94,0xcc,0x81,0x00,0x10,0x0b,0x01,0xff,0xce,0x97,0xcc,
+	0x93,0xcd,0x82,0x00,0x01,0xff,0xce,0x97,0xcc,0x94,0xcd,0x82,0x00,0xd3,0x54,0xd2,
+	0x28,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb9,0xcc,0x93,0x00,0x01,0xff,0xce,0xb9,
+	0xcc,0x94,0x00,0x10,0x0b,0x01,0xff,0xce,0xb9,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,
+	0xce,0xb9,0xcc,0x94,0xcc,0x80,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0xb9,0xcc,
+	0x93,0xcc,0x81,0x00,0x01,0xff,0xce,0xb9,0xcc,0x94,0xcc,0x81,0x00,0x10,0x0b,0x01,
+	0xff,0xce,0xb9,0xcc,0x93,0xcd,0x82,0x00,0x01,0xff,0xce,0xb9,0xcc,0x94,0xcd,0x82,
+	0x00,0xd2,0x28,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0x99,0xcc,0x93,0x00,0x01,0xff,
+	0xce,0x99,0xcc,0x94,0x00,0x10,0x0b,0x01,0xff,0xce,0x99,0xcc,0x93,0xcc,0x80,0x00,
+	0x01,0xff,0xce,0x99,0xcc,0x94,0xcc,0x80,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,
+	0x99,0xcc,0x93,0xcc,0x81,0x00,0x01,0xff,0xce,0x99,0xcc,0x94,0xcc,0x81,0x00,0x10,
+	0x0b,0x01,0xff,0xce,0x99,0xcc,0x93,0xcd,0x82,0x00,0x01,0xff,0xce,0x99,0xcc,0x94,
+	0xcd,0x82,0x00,0xcf,0x86,0xe5,0x13,0x01,0xd4,0x84,0xd3,0x42,0xd2,0x28,0xd1,0x12,
+	0x10,0x09,0x01,0xff,0xce,0xbf,0xcc,0x93,0x00,0x01,0xff,0xce,0xbf,0xcc,0x94,0x00,
+	0x10,0x0b,0x01,0xff,0xce,0xbf,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,0xce,0xbf,0xcc,
+	0x94,0xcc,0x80,0x00,0x91,0x16,0x10,0x0b,0x01,0xff,0xce,0xbf,0xcc,0x93,0xcc,0x81,
+	0x00,0x01,0xff,0xce,0xbf,0xcc,0x94,0xcc,0x81,0x00,0x00,0x00,0xd2,0x28,0xd1,0x12,
+	0x10,0x09,0x01,0xff,0xce,0x9f,0xcc,0x93,0x00,0x01,0xff,0xce,0x9f,0xcc,0x94,0x00,
+	0x10,0x0b,0x01,0xff,0xce,0x9f,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,0xce,0x9f,0xcc,
+	0x94,0xcc,0x80,0x00,0x91,0x16,0x10,0x0b,0x01,0xff,0xce,0x9f,0xcc,0x93,0xcc,0x81,
+	0x00,0x01,0xff,0xce,0x9f,0xcc,0x94,0xcc,0x81,0x00,0x00,0x00,0xd3,0x54,0xd2,0x28,
+	0xd1,0x12,0x10,0x09,0x01,0xff,0xcf,0x85,0xcc,0x93,0x00,0x01,0xff,0xcf,0x85,0xcc,
+	0x94,0x00,0x10,0x0b,0x01,0xff,0xcf,0x85,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,0xcf,
+	0x85,0xcc,0x94,0xcc,0x80,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xcf,0x85,0xcc,0x93,
+	0xcc,0x81,0x00,0x01,0xff,0xcf,0x85,0xcc,0x94,0xcc,0x81,0x00,0x10,0x0b,0x01,0xff,
+	0xcf,0x85,0xcc,0x93,0xcd,0x82,0x00,0x01,0xff,0xcf,0x85,0xcc,0x94,0xcd,0x82,0x00,
+	0xd2,0x1c,0xd1,0x0d,0x10,0x04,0x00,0x00,0x01,0xff,0xce,0xa5,0xcc,0x94,0x00,0x10,
+	0x04,0x00,0x00,0x01,0xff,0xce,0xa5,0xcc,0x94,0xcc,0x80,0x00,0xd1,0x0f,0x10,0x04,
+	0x00,0x00,0x01,0xff,0xce,0xa5,0xcc,0x94,0xcc,0x81,0x00,0x10,0x04,0x00,0x00,0x01,
+	0xff,0xce,0xa5,0xcc,0x94,0xcd,0x82,0x00,0xd4,0xa8,0xd3,0x54,0xd2,0x28,0xd1,0x12,
+	0x10,0x09,0x01,0xff,0xcf,0x89,0xcc,0x93,0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0x00,
+	0x10,0x0b,0x01,0xff,0xcf,0x89,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,0xcf,0x89,0xcc,
+	0x94,0xcc,0x80,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xcf,0x89,0xcc,0x93,0xcc,0x81,
+	0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xcc,0x81,0x00,0x10,0x0b,0x01,0xff,0xcf,0x89,
+	0xcc,0x93,0xcd,0x82,0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xcd,0x82,0x00,0xd2,0x28,
+	0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xa9,0xcc,0x93,0x00,0x01,0xff,0xce,0xa9,0xcc,
+	0x94,0x00,0x10,0x0b,0x01,0xff,0xce,0xa9,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,0xce,
+	0xa9,0xcc,0x94,0xcc,0x80,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0xa9,0xcc,0x93,
+	0xcc,0x81,0x00,0x01,0xff,0xce,0xa9,0xcc,0x94,0xcc,0x81,0x00,0x10,0x0b,0x01,0xff,
+	0xce,0xa9,0xcc,0x93,0xcd,0x82,0x00,0x01,0xff,0xce,0xa9,0xcc,0x94,0xcd,0x82,0x00,
+	0xd3,0x48,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb1,0xcc,0x80,0x00,0x01,
+	0xff,0xce,0xb1,0xcc,0x81,0x00,0x10,0x09,0x01,0xff,0xce,0xb5,0xcc,0x80,0x00,0x01,
+	0xff,0xce,0xb5,0xcc,0x81,0x00,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb7,0xcc,0x80,
+	0x00,0x01,0xff,0xce,0xb7,0xcc,0x81,0x00,0x10,0x09,0x01,0xff,0xce,0xb9,0xcc,0x80,
+	0x00,0x01,0xff,0xce,0xb9,0xcc,0x81,0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff,
+	0xce,0xbf,0xcc,0x80,0x00,0x01,0xff,0xce,0xbf,0xcc,0x81,0x00,0x10,0x09,0x01,0xff,
+	0xcf,0x85,0xcc,0x80,0x00,0x01,0xff,0xcf,0x85,0xcc,0x81,0x00,0x91,0x12,0x10,0x09,
+	0x01,0xff,0xcf,0x89,0xcc,0x80,0x00,0x01,0xff,0xcf,0x89,0xcc,0x81,0x00,0x00,0x00,
+	0xe0,0xe1,0x02,0xcf,0x86,0xe5,0x91,0x01,0xd4,0xc8,0xd3,0x64,0xd2,0x30,0xd1,0x16,
+	0x10,0x0b,0x01,0xff,0xce,0xb1,0xcc,0x93,0xcd,0x85,0x00,0x01,0xff,0xce,0xb1,0xcc,
+	0x94,0xcd,0x85,0x00,0x10,0x0d,0x01,0xff,0xce,0xb1,0xcc,0x93,0xcc,0x80,0xcd,0x85,
+	0x00,0x01,0xff,0xce,0xb1,0xcc,0x94,0xcc,0x80,0xcd,0x85,0x00,0xd1,0x1a,0x10,0x0d,
+	0x01,0xff,0xce,0xb1,0xcc,0x93,0xcc,0x81,0xcd,0x85,0x00,0x01,0xff,0xce,0xb1,0xcc,
+	0x94,0xcc,0x81,0xcd,0x85,0x00,0x10,0x0d,0x01,0xff,0xce,0xb1,0xcc,0x93,0xcd,0x82,
+	0xcd,0x85,0x00,0x01,0xff,0xce,0xb1,0xcc,0x94,0xcd,0x82,0xcd,0x85,0x00,0xd2,0x30,
+	0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0x91,0xcc,0x93,0xcd,0x85,0x00,0x01,0xff,0xce,
+	0x91,0xcc,0x94,0xcd,0x85,0x00,0x10,0x0d,0x01,0xff,0xce,0x91,0xcc,0x93,0xcc,0x80,
+	0xcd,0x85,0x00,0x01,0xff,0xce,0x91,0xcc,0x94,0xcc,0x80,0xcd,0x85,0x00,0xd1,0x1a,
+	0x10,0x0d,0x01,0xff,0xce,0x91,0xcc,0x93,0xcc,0x81,0xcd,0x85,0x00,0x01,0xff,0xce,
+	0x91,0xcc,0x94,0xcc,0x81,0xcd,0x85,0x00,0x10,0x0d,0x01,0xff,0xce,0x91,0xcc,0x93,
+	0xcd,0x82,0xcd,0x85,0x00,0x01,0xff,0xce,0x91,0xcc,0x94,0xcd,0x82,0xcd,0x85,0x00,
+	0xd3,0x64,0xd2,0x30,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0xb7,0xcc,0x93,0xcd,0x85,
+	0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcd,0x85,0x00,0x10,0x0d,0x01,0xff,0xce,0xb7,
+	0xcc,0x93,0xcc,0x80,0xcd,0x85,0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcc,0x80,0xcd,
+	0x85,0x00,0xd1,0x1a,0x10,0x0d,0x01,0xff,0xce,0xb7,0xcc,0x93,0xcc,0x81,0xcd,0x85,
+	0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcc,0x81,0xcd,0x85,0x00,0x10,0x0d,0x01,0xff,
+	0xce,0xb7,0xcc,0x93,0xcd,0x82,0xcd,0x85,0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcd,
+	0x82,0xcd,0x85,0x00,0xd2,0x30,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0x97,0xcc,0x93,
+	0xcd,0x85,0x00,0x01,0xff,0xce,0x97,0xcc,0x94,0xcd,0x85,0x00,0x10,0x0d,0x01,0xff,
+	0xce,0x97,0xcc,0x93,0xcc,0x80,0xcd,0x85,0x00,0x01,0xff,0xce,0x97,0xcc,0x94,0xcc,
+	0x80,0xcd,0x85,0x00,0xd1,0x1a,0x10,0x0d,0x01,0xff,0xce,0x97,0xcc,0x93,0xcc,0x81,
+	0xcd,0x85,0x00,0x01,0xff,0xce,0x97,0xcc,0x94,0xcc,0x81,0xcd,0x85,0x00,0x10,0x0d,
+	0x01,0xff,0xce,0x97,0xcc,0x93,0xcd,0x82,0xcd,0x85,0x00,0x01,0xff,0xce,0x97,0xcc,
+	0x94,0xcd,0x82,0xcd,0x85,0x00,0xd4,0xc8,0xd3,0x64,0xd2,0x30,0xd1,0x16,0x10,0x0b,
+	0x01,0xff,0xcf,0x89,0xcc,0x93,0xcd,0x85,0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xcd,
+	0x85,0x00,0x10,0x0d,0x01,0xff,0xcf,0x89,0xcc,0x93,0xcc,0x80,0xcd,0x85,0x00,0x01,
+	0xff,0xcf,0x89,0xcc,0x94,0xcc,0x80,0xcd,0x85,0x00,0xd1,0x1a,0x10,0x0d,0x01,0xff,
+	0xcf,0x89,0xcc,0x93,0xcc,0x81,0xcd,0x85,0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xcc,
+	0x81,0xcd,0x85,0x00,0x10,0x0d,0x01,0xff,0xcf,0x89,0xcc,0x93,0xcd,0x82,0xcd,0x85,
+	0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xcd,0x82,0xcd,0x85,0x00,0xd2,0x30,0xd1,0x16,
+	0x10,0x0b,0x01,0xff,0xce,0xa9,0xcc,0x93,0xcd,0x85,0x00,0x01,0xff,0xce,0xa9,0xcc,
+	0x94,0xcd,0x85,0x00,0x10,0x0d,0x01,0xff,0xce,0xa9,0xcc,0x93,0xcc,0x80,0xcd,0x85,
+	0x00,0x01,0xff,0xce,0xa9,0xcc,0x94,0xcc,0x80,0xcd,0x85,0x00,0xd1,0x1a,0x10,0x0d,
+	0x01,0xff,0xce,0xa9,0xcc,0x93,0xcc,0x81,0xcd,0x85,0x00,0x01,0xff,0xce,0xa9,0xcc,
+	0x94,0xcc,0x81,0xcd,0x85,0x00,0x10,0x0d,0x01,0xff,0xce,0xa9,0xcc,0x93,0xcd,0x82,
+	0xcd,0x85,0x00,0x01,0xff,0xce,0xa9,0xcc,0x94,0xcd,0x82,0xcd,0x85,0x00,0xd3,0x49,
+	0xd2,0x26,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb1,0xcc,0x86,0x00,0x01,0xff,0xce,
+	0xb1,0xcc,0x84,0x00,0x10,0x0b,0x01,0xff,0xce,0xb1,0xcc,0x80,0xcd,0x85,0x00,0x01,
+	0xff,0xce,0xb1,0xcd,0x85,0x00,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xce,0xb1,0xcc,0x81,
+	0xcd,0x85,0x00,0x00,0x00,0x10,0x09,0x01,0xff,0xce,0xb1,0xcd,0x82,0x00,0x01,0xff,
+	0xce,0xb1,0xcd,0x82,0xcd,0x85,0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,
+	0x91,0xcc,0x86,0x00,0x01,0xff,0xce,0x91,0xcc,0x84,0x00,0x10,0x09,0x01,0xff,0xce,
+	0x91,0xcc,0x80,0x00,0x01,0xff,0xce,0x91,0xcc,0x81,0x00,0xd1,0x0d,0x10,0x09,0x01,
+	0xff,0xce,0x91,0xcd,0x85,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xce,0xb9,0x00,0x01,
+	0x00,0xcf,0x86,0xe5,0x16,0x01,0xd4,0x8f,0xd3,0x44,0xd2,0x21,0xd1,0x0d,0x10,0x04,
+	0x01,0x00,0x01,0xff,0xc2,0xa8,0xcd,0x82,0x00,0x10,0x0b,0x01,0xff,0xce,0xb7,0xcc,
+	0x80,0xcd,0x85,0x00,0x01,0xff,0xce,0xb7,0xcd,0x85,0x00,0xd1,0x0f,0x10,0x0b,0x01,
+	0xff,0xce,0xb7,0xcc,0x81,0xcd,0x85,0x00,0x00,0x00,0x10,0x09,0x01,0xff,0xce,0xb7,
+	0xcd,0x82,0x00,0x01,0xff,0xce,0xb7,0xcd,0x82,0xcd,0x85,0x00,0xd2,0x24,0xd1,0x12,
+	0x10,0x09,0x01,0xff,0xce,0x95,0xcc,0x80,0x00,0x01,0xff,0xce,0x95,0xcc,0x81,0x00,
+	0x10,0x09,0x01,0xff,0xce,0x97,0xcc,0x80,0x00,0x01,0xff,0xce,0x97,0xcc,0x81,0x00,
+	0xd1,0x13,0x10,0x09,0x01,0xff,0xce,0x97,0xcd,0x85,0x00,0x01,0xff,0xe1,0xbe,0xbf,
+	0xcc,0x80,0x00,0x10,0x0a,0x01,0xff,0xe1,0xbe,0xbf,0xcc,0x81,0x00,0x01,0xff,0xe1,
+	0xbe,0xbf,0xcd,0x82,0x00,0xd3,0x40,0xd2,0x28,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,
+	0xb9,0xcc,0x86,0x00,0x01,0xff,0xce,0xb9,0xcc,0x84,0x00,0x10,0x0b,0x01,0xff,0xce,
+	0xb9,0xcc,0x88,0xcc,0x80,0x00,0x01,0xff,0xce,0xb9,0xcc,0x88,0xcc,0x81,0x00,0x51,
+	0x04,0x00,0x00,0x10,0x09,0x01,0xff,0xce,0xb9,0xcd,0x82,0x00,0x01,0xff,0xce,0xb9,
+	0xcc,0x88,0xcd,0x82,0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0x99,0xcc,
+	0x86,0x00,0x01,0xff,0xce,0x99,0xcc,0x84,0x00,0x10,0x09,0x01,0xff,0xce,0x99,0xcc,
+	0x80,0x00,0x01,0xff,0xce,0x99,0xcc,0x81,0x00,0xd1,0x0e,0x10,0x04,0x00,0x00,0x01,
+	0xff,0xe1,0xbf,0xbe,0xcc,0x80,0x00,0x10,0x0a,0x01,0xff,0xe1,0xbf,0xbe,0xcc,0x81,
+	0x00,0x01,0xff,0xe1,0xbf,0xbe,0xcd,0x82,0x00,0xd4,0x93,0xd3,0x4e,0xd2,0x28,0xd1,
+	0x12,0x10,0x09,0x01,0xff,0xcf,0x85,0xcc,0x86,0x00,0x01,0xff,0xcf,0x85,0xcc,0x84,
+	0x00,0x10,0x0b,0x01,0xff,0xcf,0x85,0xcc,0x88,0xcc,0x80,0x00,0x01,0xff,0xcf,0x85,
+	0xcc,0x88,0xcc,0x81,0x00,0xd1,0x12,0x10,0x09,0x01,0xff,0xcf,0x81,0xcc,0x93,0x00,
+	0x01,0xff,0xcf,0x81,0xcc,0x94,0x00,0x10,0x09,0x01,0xff,0xcf,0x85,0xcd,0x82,0x00,
+	0x01,0xff,0xcf,0x85,0xcc,0x88,0xcd,0x82,0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,
+	0xff,0xce,0xa5,0xcc,0x86,0x00,0x01,0xff,0xce,0xa5,0xcc,0x84,0x00,0x10,0x09,0x01,
+	0xff,0xce,0xa5,0xcc,0x80,0x00,0x01,0xff,0xce,0xa5,0xcc,0x81,0x00,0xd1,0x12,0x10,
+	0x09,0x01,0xff,0xce,0xa1,0xcc,0x94,0x00,0x01,0xff,0xc2,0xa8,0xcc,0x80,0x00,0x10,
+	0x09,0x01,0xff,0xc2,0xa8,0xcc,0x81,0x00,0x01,0xff,0x60,0x00,0xd3,0x3b,0xd2,0x18,
+	0x51,0x04,0x00,0x00,0x10,0x0b,0x01,0xff,0xcf,0x89,0xcc,0x80,0xcd,0x85,0x00,0x01,
+	0xff,0xcf,0x89,0xcd,0x85,0x00,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xcf,0x89,0xcc,0x81,
+	0xcd,0x85,0x00,0x00,0x00,0x10,0x09,0x01,0xff,0xcf,0x89,0xcd,0x82,0x00,0x01,0xff,
+	0xcf,0x89,0xcd,0x82,0xcd,0x85,0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,
+	0x9f,0xcc,0x80,0x00,0x01,0xff,0xce,0x9f,0xcc,0x81,0x00,0x10,0x09,0x01,0xff,0xce,
+	0xa9,0xcc,0x80,0x00,0x01,0xff,0xce,0xa9,0xcc,0x81,0x00,0xd1,0x10,0x10,0x09,0x01,
+	0xff,0xce,0xa9,0xcd,0x85,0x00,0x01,0xff,0xc2,0xb4,0x00,0x10,0x04,0x01,0x00,0x00,
+	0x00,0xe0,0x7e,0x0c,0xcf,0x86,0xe5,0xbb,0x08,0xe4,0x14,0x06,0xe3,0xf7,0x02,0xe2,
+	0xbd,0x01,0xd1,0xd0,0xd0,0x4f,0xcf,0x86,0xd5,0x2e,0x94,0x2a,0xd3,0x18,0x92,0x14,
+	0x91,0x10,0x10,0x08,0x01,0xff,0xe2,0x80,0x82,0x00,0x01,0xff,0xe2,0x80,0x83,0x00,
+	0x01,0x00,0x01,0x00,0x92,0x0d,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x01,0xff,
+	0x00,0x01,0xff,0x00,0x01,0x00,0x94,0x1b,0x53,0x04,0x01,0x00,0xd2,0x09,0x11,0x04,
+	0x01,0x00,0x01,0xff,0x00,0x51,0x05,0x01,0xff,0x00,0x10,0x05,0x01,0xff,0x00,0x04,
+	0x00,0x01,0x00,0xcf,0x86,0xd5,0x48,0xd4,0x1c,0xd3,0x10,0x52,0x04,0x01,0x00,0x51,
+	0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x06,0x00,0x52,0x04,0x04,0x00,0x11,0x04,0x04,
+	0x00,0x06,0x00,0xd3,0x1c,0xd2,0x0c,0x51,0x04,0x06,0x00,0x10,0x04,0x06,0x00,0x07,
+	0x00,0xd1,0x08,0x10,0x04,0x07,0x00,0x08,0x00,0x10,0x04,0x08,0x00,0x06,0x00,0x52,
+	0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x06,0x00,0xd4,0x23,0xd3,
+	0x14,0x52,0x05,0x06,0xff,0x00,0x91,0x0a,0x10,0x05,0x0a,0xff,0x00,0x00,0xff,0x00,
+	0x0f,0xff,0x00,0x92,0x0a,0x11,0x05,0x0f,0xff,0x00,0x01,0xff,0x00,0x01,0xff,0x00,
+	0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x01,0x00,0x06,0x00,0x00,0x00,0x01,0x00,
+	0x01,0x00,0xd0,0x7e,0xcf,0x86,0xd5,0x34,0xd4,0x14,0x53,0x04,0x01,0x00,0x52,0x04,
+	0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x00,0x00,0xd3,0x10,0x52,0x04,
+	0x08,0x00,0x91,0x08,0x10,0x04,0x08,0x00,0x0c,0x00,0x0c,0x00,0x52,0x04,0x0c,0x00,
+	0x91,0x08,0x10,0x04,0x0c,0x00,0x00,0x00,0x00,0x00,0xd4,0x1c,0x53,0x04,0x01,0x00,
+	0xd2,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x02,0x00,0x91,0x08,0x10,0x04,
+	0x03,0x00,0x04,0x00,0x04,0x00,0xd3,0x10,0xd2,0x08,0x11,0x04,0x06,0x00,0x08,0x00,
+	0x11,0x04,0x08,0x00,0x0b,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,0x0b,0x00,0x0c,0x00,
+	0x10,0x04,0x0e,0x00,0x10,0x00,0x51,0x04,0x10,0x00,0x10,0x04,0x11,0x00,0x13,0x00,
+	0xcf,0x86,0xd5,0x28,0x54,0x04,0x00,0x00,0xd3,0x0c,0x92,0x08,0x11,0x04,0x01,0xe6,
+	0x01,0x01,0x01,0xe6,0xd2,0x0c,0x51,0x04,0x01,0x01,0x10,0x04,0x01,0x01,0x01,0xe6,
+	0x91,0x08,0x10,0x04,0x01,0xe6,0x01,0x00,0x01,0x00,0xd4,0x30,0xd3,0x1c,0xd2,0x0c,
+	0x91,0x08,0x10,0x04,0x01,0x00,0x01,0xe6,0x04,0x00,0xd1,0x08,0x10,0x04,0x06,0x00,
+	0x06,0x01,0x10,0x04,0x06,0x01,0x06,0xe6,0x92,0x10,0xd1,0x08,0x10,0x04,0x06,0xdc,
+	0x06,0xe6,0x10,0x04,0x06,0x01,0x08,0x01,0x09,0xdc,0x93,0x10,0x92,0x0c,0x91,0x08,
+	0x10,0x04,0x0a,0xe6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd1,0x81,0xd0,0x4f,
+	0xcf,0x86,0x55,0x04,0x01,0x00,0xd4,0x29,0xd3,0x13,0x52,0x04,0x01,0x00,0x51,0x04,
+	0x01,0x00,0x10,0x07,0x01,0xff,0xce,0xa9,0x00,0x01,0x00,0x92,0x12,0x51,0x04,0x01,
+	0x00,0x10,0x06,0x01,0xff,0x4b,0x00,0x01,0xff,0x41,0xcc,0x8a,0x00,0x01,0x00,0x53,
+	0x04,0x01,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,0x01,0x00,0x04,0x00,0x10,0x04,0x04,
+	0x00,0x07,0x00,0x91,0x08,0x10,0x04,0x08,0x00,0x06,0x00,0x06,0x00,0xcf,0x86,0x95,
+	0x2c,0xd4,0x18,0x53,0x04,0x06,0x00,0x52,0x04,0x06,0x00,0xd1,0x08,0x10,0x04,0x08,
+	0x00,0x09,0x00,0x10,0x04,0x09,0x00,0x0a,0x00,0x93,0x10,0x92,0x0c,0x51,0x04,0x0b,
+	0x00,0x10,0x04,0x0b,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd0,0x68,0xcf,
+	0x86,0xd5,0x48,0xd4,0x28,0xd3,0x18,0xd2,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,
+	0x00,0x04,0x00,0x91,0x08,0x10,0x04,0x09,0x00,0x0a,0x00,0x0a,0x00,0x92,0x0c,0x91,
+	0x08,0x10,0x04,0x0a,0x00,0x0b,0x00,0x11,0x00,0x00,0x00,0x53,0x04,0x01,0x00,0x92,
+	0x18,0x51,0x04,0x01,0x00,0x10,0x0a,0x01,0xff,0xe2,0x86,0x90,0xcc,0xb8,0x00,0x01,
+	0xff,0xe2,0x86,0x92,0xcc,0xb8,0x00,0x01,0x00,0x94,0x1a,0x53,0x04,0x01,0x00,0x52,
+	0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x0a,0x01,0xff,0xe2,0x86,0x94,0xcc,0xb8,
+	0x00,0x01,0x00,0x01,0x00,0xcf,0x86,0xd5,0x2e,0x94,0x2a,0x53,0x04,0x01,0x00,0x52,
+	0x04,0x01,0x00,0xd1,0x0e,0x10,0x04,0x01,0x00,0x01,0xff,0xe2,0x87,0x90,0xcc,0xb8,
+	0x00,0x10,0x0a,0x01,0xff,0xe2,0x87,0x94,0xcc,0xb8,0x00,0x01,0xff,0xe2,0x87,0x92,
+	0xcc,0xb8,0x00,0x01,0x00,0xd4,0x14,0x53,0x04,0x01,0x00,0x92,0x0c,0x51,0x04,0x01,
+	0x00,0x10,0x04,0x01,0x00,0x04,0x00,0x04,0x00,0x93,0x08,0x12,0x04,0x04,0x00,0x06,
+	0x00,0x06,0x00,0xe2,0x38,0x02,0xe1,0x3f,0x01,0xd0,0x68,0xcf,0x86,0xd5,0x3e,0x94,
+	0x3a,0xd3,0x16,0x52,0x04,0x01,0x00,0x91,0x0e,0x10,0x0a,0x01,0xff,0xe2,0x88,0x83,
+	0xcc,0xb8,0x00,0x01,0x00,0x01,0x00,0xd2,0x12,0x91,0x0e,0x10,0x04,0x01,0x00,0x01,
+	0xff,0xe2,0x88,0x88,0xcc,0xb8,0x00,0x01,0x00,0x91,0x0e,0x10,0x0a,0x01,0xff,0xe2,
+	0x88,0x8b,0xcc,0xb8,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x94,0x24,0x93,0x20,0x52,
+	0x04,0x01,0x00,0xd1,0x0e,0x10,0x0a,0x01,0xff,0xe2,0x88,0xa3,0xcc,0xb8,0x00,0x01,
+	0x00,0x10,0x0a,0x01,0xff,0xe2,0x88,0xa5,0xcc,0xb8,0x00,0x01,0x00,0x01,0x00,0x01,
+	0x00,0xcf,0x86,0xd5,0x48,0x94,0x44,0xd3,0x2e,0xd2,0x12,0x91,0x0e,0x10,0x04,0x01,
+	0x00,0x01,0xff,0xe2,0x88,0xbc,0xcc,0xb8,0x00,0x01,0x00,0xd1,0x0e,0x10,0x0a,0x01,
+	0xff,0xe2,0x89,0x83,0xcc,0xb8,0x00,0x01,0x00,0x10,0x04,0x01,0x00,0x01,0xff,0xe2,
+	0x89,0x85,0xcc,0xb8,0x00,0x92,0x12,0x91,0x0e,0x10,0x04,0x01,0x00,0x01,0xff,0xe2,
+	0x89,0x88,0xcc,0xb8,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd4,0x40,0xd3,0x1e,0x92,
+	0x1a,0xd1,0x0c,0x10,0x08,0x01,0xff,0x3d,0xcc,0xb8,0x00,0x01,0x00,0x10,0x0a,0x01,
+	0xff,0xe2,0x89,0xa1,0xcc,0xb8,0x00,0x01,0x00,0x01,0x00,0x52,0x04,0x01,0x00,0xd1,
+	0x0e,0x10,0x04,0x01,0x00,0x01,0xff,0xe2,0x89,0x8d,0xcc,0xb8,0x00,0x10,0x08,0x01,
+	0xff,0x3c,0xcc,0xb8,0x00,0x01,0xff,0x3e,0xcc,0xb8,0x00,0xd3,0x30,0xd2,0x18,0x91,
+	0x14,0x10,0x0a,0x01,0xff,0xe2,0x89,0xa4,0xcc,0xb8,0x00,0x01,0xff,0xe2,0x89,0xa5,
+	0xcc,0xb8,0x00,0x01,0x00,0x91,0x14,0x10,0x0a,0x01,0xff,0xe2,0x89,0xb2,0xcc,0xb8,
+	0x00,0x01,0xff,0xe2,0x89,0xb3,0xcc,0xb8,0x00,0x01,0x00,0x92,0x18,0x91,0x14,0x10,
+	0x0a,0x01,0xff,0xe2,0x89,0xb6,0xcc,0xb8,0x00,0x01,0xff,0xe2,0x89,0xb7,0xcc,0xb8,
+	0x00,0x01,0x00,0x01,0x00,0xd0,0x86,0xcf,0x86,0xd5,0x50,0x94,0x4c,0xd3,0x30,0xd2,
+	0x18,0x91,0x14,0x10,0x0a,0x01,0xff,0xe2,0x89,0xba,0xcc,0xb8,0x00,0x01,0xff,0xe2,
+	0x89,0xbb,0xcc,0xb8,0x00,0x01,0x00,0x91,0x14,0x10,0x0a,0x01,0xff,0xe2,0x8a,0x82,
+	0xcc,0xb8,0x00,0x01,0xff,0xe2,0x8a,0x83,0xcc,0xb8,0x00,0x01,0x00,0x92,0x18,0x91,
+	0x14,0x10,0x0a,0x01,0xff,0xe2,0x8a,0x86,0xcc,0xb8,0x00,0x01,0xff,0xe2,0x8a,0x87,
+	0xcc,0xb8,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x94,0x30,0x53,0x04,0x01,0x00,0x52,
+	0x04,0x01,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0xe2,0x8a,0xa2,0xcc,0xb8,0x00,0x01,
+	0xff,0xe2,0x8a,0xa8,0xcc,0xb8,0x00,0x10,0x0a,0x01,0xff,0xe2,0x8a,0xa9,0xcc,0xb8,
+	0x00,0x01,0xff,0xe2,0x8a,0xab,0xcc,0xb8,0x00,0x01,0x00,0xcf,0x86,0x55,0x04,0x01,
+	0x00,0xd4,0x5c,0xd3,0x2c,0x92,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0xe2,0x89,0xbc,
+	0xcc,0xb8,0x00,0x01,0xff,0xe2,0x89,0xbd,0xcc,0xb8,0x00,0x10,0x0a,0x01,0xff,0xe2,
+	0x8a,0x91,0xcc,0xb8,0x00,0x01,0xff,0xe2,0x8a,0x92,0xcc,0xb8,0x00,0x01,0x00,0xd2,
+	0x18,0x51,0x04,0x01,0x00,0x10,0x0a,0x01,0xff,0xe2,0x8a,0xb2,0xcc,0xb8,0x00,0x01,
+	0xff,0xe2,0x8a,0xb3,0xcc,0xb8,0x00,0x91,0x14,0x10,0x0a,0x01,0xff,0xe2,0x8a,0xb4,
+	0xcc,0xb8,0x00,0x01,0xff,0xe2,0x8a,0xb5,0xcc,0xb8,0x00,0x01,0x00,0x93,0x0c,0x92,
+	0x08,0x11,0x04,0x01,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0xd1,0x64,0xd0,0x3e,0xcf,
+	0x86,0xd5,0x18,0x94,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x01,0x00,0x04,
+	0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x94,0x20,0x53,0x04,0x01,0x00,0x92,
+	0x18,0xd1,0x0c,0x10,0x04,0x01,0x00,0x01,0xff,0xe3,0x80,0x88,0x00,0x10,0x08,0x01,
+	0xff,0xe3,0x80,0x89,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xcf,0x86,0x55,0x04,0x01,
+	0x00,0x54,0x04,0x01,0x00,0x53,0x04,0x01,0x00,0xd2,0x0c,0x51,0x04,0x01,0x00,0x10,
+	0x04,0x01,0x00,0x04,0x00,0x91,0x08,0x10,0x04,0x06,0x00,0x04,0x00,0x04,0x00,0xd0,
+	0x1e,0xcf,0x86,0x95,0x18,0x54,0x04,0x04,0x00,0x53,0x04,0x04,0x00,0x92,0x0c,0x51,
+	0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0xcf,0x86,0xd5,
+	0x2c,0xd4,0x14,0x53,0x04,0x06,0x00,0x52,0x04,0x06,0x00,0x51,0x04,0x06,0x00,0x10,
+	0x04,0x06,0x00,0x07,0x00,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x07,0x00,0x08,
+	0x00,0x08,0x00,0x08,0x00,0x12,0x04,0x08,0x00,0x09,0x00,0xd4,0x14,0x53,0x04,0x09,
+	0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x0b,0x00,0x0c,0x00,0x0c,0x00,0x0c,0x00,0xd3,
+	0x08,0x12,0x04,0x0c,0x00,0x10,0x00,0xd2,0x0c,0x51,0x04,0x10,0x00,0x10,0x04,0x10,
+	0x00,0x12,0x00,0x51,0x04,0x12,0x00,0x10,0x04,0x12,0x00,0x13,0x00,0xd3,0xa6,0xd2,
+	0x74,0xd1,0x40,0xd0,0x22,0xcf,0x86,0x55,0x04,0x01,0x00,0x94,0x18,0x93,0x14,0x52,
+	0x04,0x01,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x04,0x00,0x10,0x04,0x04,0x00,0x00,
+	0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0x95,0x18,0x94,0x14,0x53,0x04,0x01,0x00,0x92,
+	0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+	0x00,0xd0,0x06,0xcf,0x06,0x01,0x00,0xcf,0x86,0x55,0x04,0x01,0x00,0xd4,0x14,0x53,
+	0x04,0x01,0x00,0x92,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x06,0x00,0x06,
+	0x00,0x53,0x04,0x06,0x00,0x52,0x04,0x06,0x00,0x51,0x04,0x06,0x00,0x10,0x04,0x06,
+	0x00,0x07,0x00,0xd1,0x06,0xcf,0x06,0x01,0x00,0xd0,0x1a,0xcf,0x86,0x95,0x14,0x54,
+	0x04,0x01,0x00,0x93,0x0c,0x52,0x04,0x01,0x00,0x11,0x04,0x01,0x00,0x06,0x00,0x06,
+	0x00,0x01,0x00,0xcf,0x86,0x55,0x04,0x01,0x00,0x54,0x04,0x01,0x00,0x13,0x04,0x04,
+	0x00,0x06,0x00,0xd2,0xdc,0xd1,0x48,0xd0,0x26,0xcf,0x86,0x95,0x20,0x54,0x04,0x01,
+	0x00,0xd3,0x0c,0x52,0x04,0x01,0x00,0x11,0x04,0x07,0x00,0x06,0x00,0x92,0x0c,0x91,
+	0x08,0x10,0x04,0x08,0x00,0x04,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xcf,0x86,0x55,
+	0x04,0x01,0x00,0x54,0x04,0x01,0x00,0xd3,0x0c,0x92,0x08,0x11,0x04,0x04,0x00,0x06,
+	0x00,0x06,0x00,0x52,0x04,0x06,0x00,0x11,0x04,0x06,0x00,0x08,0x00,0xd0,0x5e,0xcf,
+	0x86,0xd5,0x2c,0xd4,0x10,0x53,0x04,0x06,0x00,0x92,0x08,0x11,0x04,0x06,0x00,0x07,
+	0x00,0x07,0x00,0xd3,0x0c,0x92,0x08,0x11,0x04,0x07,0x00,0x08,0x00,0x08,0x00,0x52,
+	0x04,0x08,0x00,0x91,0x08,0x10,0x04,0x08,0x00,0x0a,0x00,0x0b,0x00,0xd4,0x10,0x93,
+	0x0c,0x92,0x08,0x11,0x04,0x07,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0xd3,0x10,0x92,
+	0x0c,0x51,0x04,0x08,0x00,0x10,0x04,0x09,0x00,0x0a,0x00,0x0a,0x00,0x52,0x04,0x0a,
+	0x00,0x91,0x08,0x10,0x04,0x0a,0x00,0x0b,0x00,0x0b,0x00,0xcf,0x86,0xd5,0x1c,0x94,
+	0x18,0xd3,0x08,0x12,0x04,0x0a,0x00,0x0b,0x00,0x52,0x04,0x0b,0x00,0x51,0x04,0x0b,
+	0x00,0x10,0x04,0x0c,0x00,0x0b,0x00,0x0b,0x00,0x94,0x14,0x93,0x10,0x92,0x0c,0x51,
+	0x04,0x0b,0x00,0x10,0x04,0x0c,0x00,0x0b,0x00,0x0c,0x00,0x0b,0x00,0x0b,0x00,0xd1,
+	0xa8,0xd0,0x42,0xcf,0x86,0xd5,0x28,0x94,0x24,0xd3,0x18,0xd2,0x0c,0x91,0x08,0x10,
+	0x04,0x10,0x00,0x01,0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x01,0x00,0x0c,0x00,0x01,
+	0x00,0x92,0x08,0x11,0x04,0x01,0x00,0x0c,0x00,0x01,0x00,0x01,0x00,0x94,0x14,0x53,
+	0x04,0x01,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x0c,0x00,0x01,0x00,0x01,0x00,0x01,
+	0x00,0x01,0x00,0xcf,0x86,0xd5,0x40,0xd4,0x18,0x53,0x04,0x01,0x00,0x52,0x04,0x01,
+	0x00,0xd1,0x08,0x10,0x04,0x0c,0x00,0x01,0x00,0x10,0x04,0x0c,0x00,0x01,0x00,0xd3,
+	0x18,0xd2,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x0c,0x00,0x51,0x04,0x0c,
+	0x00,0x10,0x04,0x01,0x00,0x0b,0x00,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,
+	0x04,0x01,0x00,0x0c,0x00,0xd4,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x0c,
+	0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x06,0x00,0x93,0x0c,0x52,0x04,0x06,0x00,0x11,
+	0x04,0x06,0x00,0x01,0x00,0x01,0x00,0xd0,0x3e,0xcf,0x86,0xd5,0x18,0x54,0x04,0x01,
+	0x00,0x93,0x10,0x52,0x04,0x01,0x00,0x91,0x08,0x10,0x04,0x01,0x00,0x0c,0x00,0x0c,
+	0x00,0x01,0x00,0x54,0x04,0x01,0x00,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x0c,
+	0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,
+	0x04,0x01,0x00,0x0c,0x00,0xcf,0x86,0xd5,0x2c,0x94,0x28,0xd3,0x10,0x52,0x04,0x08,
+	0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x09,0x00,0xd2,0x0c,0x51,0x04,0x09,
+	0x00,0x10,0x04,0x09,0x00,0x0d,0x00,0x91,0x08,0x10,0x04,0x0a,0x00,0x0d,0x00,0x0c,
+	0x00,0x06,0x00,0x94,0x0c,0x53,0x04,0x06,0x00,0x12,0x04,0x06,0x00,0x0a,0x00,0x06,
+	0x00,0xe4,0x39,0x01,0xd3,0x0c,0xd2,0x06,0xcf,0x06,0x04,0x00,0xcf,0x06,0x06,0x00,
+	0xd2,0x30,0xd1,0x06,0xcf,0x06,0x06,0x00,0xd0,0x06,0xcf,0x06,0x06,0x00,0xcf,0x86,
+	0x95,0x1e,0x54,0x04,0x06,0x00,0x53,0x04,0x06,0x00,0x52,0x04,0x06,0x00,0x91,0x0e,
+	0x10,0x0a,0x06,0xff,0xe2,0xab,0x9d,0xcc,0xb8,0x00,0x06,0x00,0x06,0x00,0x06,0x00,
+	0xd1,0x80,0xd0,0x3a,0xcf,0x86,0xd5,0x28,0xd4,0x10,0x53,0x04,0x07,0x00,0x52,0x04,
+	0x07,0x00,0x11,0x04,0x07,0x00,0x08,0x00,0xd3,0x08,0x12,0x04,0x08,0x00,0x09,0x00,
+	0x92,0x0c,0x51,0x04,0x09,0x00,0x10,0x04,0x09,0x00,0x0a,0x00,0x0a,0x00,0x94,0x0c,
+	0x93,0x08,0x12,0x04,0x09,0x00,0x0a,0x00,0x0a,0x00,0x0a,0x00,0xcf,0x86,0xd5,0x30,
+	0xd4,0x14,0x53,0x04,0x0a,0x00,0x52,0x04,0x0a,0x00,0x91,0x08,0x10,0x04,0x0a,0x00,
+	0x10,0x00,0x10,0x00,0xd3,0x10,0x52,0x04,0x0a,0x00,0x91,0x08,0x10,0x04,0x0a,0x00,
+	0x0b,0x00,0x0b,0x00,0x92,0x08,0x11,0x04,0x0b,0x00,0x10,0x00,0x10,0x00,0x54,0x04,
+	0x10,0x00,0x93,0x0c,0x52,0x04,0x10,0x00,0x11,0x04,0x00,0x00,0x10,0x00,0x10,0x00,
+	0xd0,0x32,0xcf,0x86,0xd5,0x14,0x54,0x04,0x10,0x00,0x93,0x0c,0x52,0x04,0x10,0x00,
+	0x11,0x04,0x10,0x00,0x00,0x00,0x10,0x00,0x54,0x04,0x10,0x00,0x53,0x04,0x10,0x00,
+	0xd2,0x08,0x11,0x04,0x10,0x00,0x14,0x00,0x91,0x08,0x10,0x04,0x14,0x00,0x10,0x00,
+	0x10,0x00,0xcf,0x86,0xd5,0x28,0xd4,0x14,0x53,0x04,0x10,0x00,0x92,0x0c,0x91,0x08,
+	0x10,0x04,0x10,0x00,0x15,0x00,0x10,0x00,0x10,0x00,0x93,0x10,0x92,0x0c,0x51,0x04,
+	0x10,0x00,0x10,0x04,0x13,0x00,0x14,0x00,0x14,0x00,0x14,0x00,0xd4,0x0c,0x53,0x04,
+	0x14,0x00,0x12,0x04,0x14,0x00,0x11,0x00,0x53,0x04,0x14,0x00,0x52,0x04,0x14,0x00,
+	0x51,0x04,0x14,0x00,0x10,0x04,0x14,0x00,0x15,0x00,0xe3,0xb9,0x01,0xd2,0xac,0xd1,
+	0x68,0xd0,0x1e,0xcf,0x86,0x55,0x04,0x08,0x00,0x94,0x14,0x53,0x04,0x08,0x00,0x52,
+	0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x00,0x00,0x08,0x00,0xcf,
+	0x86,0xd5,0x18,0x54,0x04,0x08,0x00,0x53,0x04,0x08,0x00,0x52,0x04,0x08,0x00,0x51,
+	0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x00,0x00,0xd4,0x14,0x53,0x04,0x09,0x00,0x52,
+	0x04,0x09,0x00,0x91,0x08,0x10,0x04,0x09,0x00,0x0a,0x00,0x0a,0x00,0xd3,0x10,0x92,
+	0x0c,0x91,0x08,0x10,0x04,0x0b,0x00,0x0a,0x00,0x0a,0x00,0x09,0x00,0x52,0x04,0x0a,
+	0x00,0x11,0x04,0x0a,0x00,0x0b,0x00,0xd0,0x06,0xcf,0x06,0x08,0x00,0xcf,0x86,0x55,
+	0x04,0x08,0x00,0xd4,0x1c,0x53,0x04,0x08,0x00,0xd2,0x0c,0x51,0x04,0x08,0x00,0x10,
+	0x04,0x08,0x00,0x0b,0x00,0x51,0x04,0x0b,0x00,0x10,0x04,0x0b,0x00,0x0b,0xe6,0xd3,
+	0x0c,0x92,0x08,0x11,0x04,0x0b,0xe6,0x0d,0x00,0x00,0x00,0x92,0x0c,0x91,0x08,0x10,
+	0x04,0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0xd1,0x6c,0xd0,0x2a,0xcf,0x86,0x55,
+	0x04,0x08,0x00,0x94,0x20,0xd3,0x10,0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,
+	0x04,0x00,0x00,0x0d,0x00,0x52,0x04,0x00,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x0d,
+	0x00,0x00,0x00,0x08,0x00,0xcf,0x86,0x55,0x04,0x08,0x00,0xd4,0x1c,0xd3,0x0c,0x52,
+	0x04,0x08,0x00,0x11,0x04,0x08,0x00,0x0d,0x00,0x52,0x04,0x00,0x00,0x51,0x04,0x00,
+	0x00,0x10,0x04,0x00,0x00,0x08,0x00,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x0c,
+	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x52,0x04,0x00,0x00,0x51,0x04,0x00,0x00,0x10,
+	0x04,0x00,0x00,0x0c,0x09,0xd0,0x5a,0xcf,0x86,0xd5,0x18,0x54,0x04,0x08,0x00,0x93,
+	0x10,0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x00,0x00,0x00,
+	0x00,0xd4,0x20,0xd3,0x10,0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,
+	0x00,0x00,0x00,0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x00,
+	0x00,0xd3,0x10,0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x00,
+	0x00,0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x00,0x00,0xcf,
+	0x86,0x95,0x40,0xd4,0x20,0xd3,0x10,0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,
+	0x04,0x08,0x00,0x00,0x00,0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,
+	0x00,0x00,0x00,0xd3,0x10,0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,
+	0x00,0x00,0x00,0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x00,
+	0x00,0x0a,0xe6,0xd2,0x9c,0xd1,0x68,0xd0,0x32,0xcf,0x86,0xd5,0x14,0x54,0x04,0x08,
+	0x00,0x53,0x04,0x08,0x00,0x52,0x04,0x0a,0x00,0x11,0x04,0x08,0x00,0x0a,0x00,0x54,
+	0x04,0x0a,0x00,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x0a,0x00,0x0b,0x00,0x0d,
+	0x00,0x0d,0x00,0x12,0x04,0x0d,0x00,0x10,0x00,0xcf,0x86,0x95,0x30,0x94,0x2c,0xd3,
+	0x18,0xd2,0x0c,0x51,0x04,0x10,0x00,0x10,0x04,0x10,0x00,0x12,0x00,0x91,0x08,0x10,
+	0x04,0x12,0x00,0x13,0x00,0x13,0x00,0xd2,0x08,0x11,0x04,0x13,0x00,0x14,0x00,0x51,
+	0x04,0x14,0x00,0x10,0x04,0x14,0x00,0x15,0x00,0x00,0x00,0x00,0x00,0xd0,0x1e,0xcf,
+	0x86,0x95,0x18,0x54,0x04,0x04,0x00,0x53,0x04,0x04,0x00,0x92,0x0c,0x51,0x04,0x04,
+	0x00,0x10,0x04,0x00,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0xcf,0x86,0x55,0x04,0x04,
+	0x00,0x54,0x04,0x04,0x00,0x93,0x08,0x12,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0xd1,
+	0x06,0xcf,0x06,0x04,0x00,0xd0,0x06,0xcf,0x06,0x04,0x00,0xcf,0x86,0xd5,0x14,0x54,
+	0x04,0x04,0x00,0x93,0x0c,0x52,0x04,0x04,0x00,0x11,0x04,0x04,0x00,0x00,0x00,0x00,
+	0x00,0x54,0x04,0x00,0x00,0x53,0x04,0x04,0x00,0x12,0x04,0x04,0x00,0x00,0x00,0xcf,
+	0x86,0xe5,0xa6,0x05,0xe4,0x9f,0x05,0xe3,0x96,0x04,0xe2,0xe4,0x03,0xe1,0xc0,0x01,
+	0xd0,0x3e,0xcf,0x86,0x55,0x04,0x01,0x00,0xd4,0x1c,0x53,0x04,0x01,0x00,0xd2,0x0c,
+	0x51,0x04,0x01,0x00,0x10,0x04,0x01,0xda,0x01,0xe4,0x91,0x08,0x10,0x04,0x01,0xe8,
+	0x01,0xde,0x01,0xe0,0x53,0x04,0x01,0x00,0xd2,0x0c,0x51,0x04,0x04,0x00,0x10,0x04,
+	0x04,0x00,0x06,0x00,0x51,0x04,0x06,0x00,0x10,0x04,0x04,0x00,0x01,0x00,0xcf,0x86,
+	0xd5,0xaa,0xd4,0x32,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x01,0x00,
+	0x01,0x00,0x01,0x00,0x52,0x04,0x01,0x00,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3,0x81,
+	0x8b,0xe3,0x82,0x99,0x00,0x01,0x00,0x10,0x0b,0x01,0xff,0xe3,0x81,0x8d,0xe3,0x82,
+	0x99,0x00,0x01,0x00,0xd3,0x3c,0xd2,0x1e,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3,0x81,
+	0x8f,0xe3,0x82,0x99,0x00,0x01,0x00,0x10,0x0b,0x01,0xff,0xe3,0x81,0x91,0xe3,0x82,
+	0x99,0x00,0x01,0x00,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3,0x81,0x93,0xe3,0x82,0x99,
+	0x00,0x01,0x00,0x10,0x0b,0x01,0xff,0xe3,0x81,0x95,0xe3,0x82,0x99,0x00,0x01,0x00,
+	0xd2,0x1e,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3,0x81,0x97,0xe3,0x82,0x99,0x00,0x01,
+	0x00,0x10,0x0b,0x01,0xff,0xe3,0x81,0x99,0xe3,0x82,0x99,0x00,0x01,0x00,0xd1,0x0f,
+	0x10,0x0b,0x01,0xff,0xe3,0x81,0x9b,0xe3,0x82,0x99,0x00,0x01,0x00,0x10,0x0b,0x01,
+	0xff,0xe3,0x81,0x9d,0xe3,0x82,0x99,0x00,0x01,0x00,0xd4,0x53,0xd3,0x3c,0xd2,0x1e,
+	0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3,0x81,0x9f,0xe3,0x82,0x99,0x00,0x01,0x00,0x10,
+	0x0b,0x01,0xff,0xe3,0x81,0xa1,0xe3,0x82,0x99,0x00,0x01,0x00,0xd1,0x0f,0x10,0x04,
+	0x01,0x00,0x01,0xff,0xe3,0x81,0xa4,0xe3,0x82,0x99,0x00,0x10,0x04,0x01,0x00,0x01,
+	0xff,0xe3,0x81,0xa6,0xe3,0x82,0x99,0x00,0x92,0x13,0x91,0x0f,0x10,0x04,0x01,0x00,
+	0x01,0xff,0xe3,0x81,0xa8,0xe3,0x82,0x99,0x00,0x01,0x00,0x01,0x00,0xd3,0x4a,0xd2,
+	0x25,0xd1,0x16,0x10,0x0b,0x01,0xff,0xe3,0x81,0xaf,0xe3,0x82,0x99,0x00,0x01,0xff,
+	0xe3,0x81,0xaf,0xe3,0x82,0x9a,0x00,0x10,0x04,0x01,0x00,0x01,0xff,0xe3,0x81,0xb2,
+	0xe3,0x82,0x99,0x00,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3,0x81,0xb2,0xe3,0x82,0x9a,
+	0x00,0x01,0x00,0x10,0x0b,0x01,0xff,0xe3,0x81,0xb5,0xe3,0x82,0x99,0x00,0x01,0xff,
+	0xe3,0x81,0xb5,0xe3,0x82,0x9a,0x00,0xd2,0x1e,0xd1,0x0f,0x10,0x04,0x01,0x00,0x01,
+	0xff,0xe3,0x81,0xb8,0xe3,0x82,0x99,0x00,0x10,0x0b,0x01,0xff,0xe3,0x81,0xb8,0xe3,
+	0x82,0x9a,0x00,0x01,0x00,0x91,0x16,0x10,0x0b,0x01,0xff,0xe3,0x81,0xbb,0xe3,0x82,
+	0x99,0x00,0x01,0xff,0xe3,0x81,0xbb,0xe3,0x82,0x9a,0x00,0x01,0x00,0xd0,0xee,0xcf,
+	0x86,0xd5,0x42,0x54,0x04,0x01,0x00,0xd3,0x1b,0x52,0x04,0x01,0x00,0xd1,0x0f,0x10,
+	0x0b,0x01,0xff,0xe3,0x81,0x86,0xe3,0x82,0x99,0x00,0x06,0x00,0x10,0x04,0x06,0x00,
+	0x00,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,0x00,0x00,0x01,0x08,0x10,0x04,0x01,0x08,
+	0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x0b,0x01,0xff,0xe3,0x82,0x9d,0xe3,0x82,0x99,
+	0x00,0x06,0x00,0xd4,0x32,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x06,0x00,0x01,
+	0x00,0x01,0x00,0x01,0x00,0x52,0x04,0x01,0x00,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3,
+	0x82,0xab,0xe3,0x82,0x99,0x00,0x01,0x00,0x10,0x0b,0x01,0xff,0xe3,0x82,0xad,0xe3,
+	0x82,0x99,0x00,0x01,0x00,0xd3,0x3c,0xd2,0x1e,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3,
+	0x82,0xaf,0xe3,0x82,0x99,0x00,0x01,0x00,0x10,0x0b,0x01,0xff,0xe3,0x82,0xb1,0xe3,
+	0x82,0x99,0x00,0x01,0x00,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3,0x82,0xb3,0xe3,0x82,
+	0x99,0x00,0x01,0x00,0x10,0x0b,0x01,0xff,0xe3,0x82,0xb5,0xe3,0x82,0x99,0x00,0x01,
+	0x00,0xd2,0x1e,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3,0x82,0xb7,0xe3,0x82,0x99,0x00,
+	0x01,0x00,0x10,0x0b,0x01,0xff,0xe3,0x82,0xb9,0xe3,0x82,0x99,0x00,0x01,0x00,0xd1,
+	0x0f,0x10,0x0b,0x01,0xff,0xe3,0x82,0xbb,0xe3,0x82,0x99,0x00,0x01,0x00,0x10,0x0b,
+	0x01,0xff,0xe3,0x82,0xbd,0xe3,0x82,0x99,0x00,0x01,0x00,0xcf,0x86,0xd5,0xd5,0xd4,
+	0x53,0xd3,0x3c,0xd2,0x1e,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3,0x82,0xbf,0xe3,0x82,
+	0x99,0x00,0x01,0x00,0x10,0x0b,0x01,0xff,0xe3,0x83,0x81,0xe3,0x82,0x99,0x00,0x01,
+	0x00,0xd1,0x0f,0x10,0x04,0x01,0x00,0x01,0xff,0xe3,0x83,0x84,0xe3,0x82,0x99,0x00,
+	0x10,0x04,0x01,0x00,0x01,0xff,0xe3,0x83,0x86,0xe3,0x82,0x99,0x00,0x92,0x13,0x91,
+	0x0f,0x10,0x04,0x01,0x00,0x01,0xff,0xe3,0x83,0x88,0xe3,0x82,0x99,0x00,0x01,0x00,
+	0x01,0x00,0xd3,0x4a,0xd2,0x25,0xd1,0x16,0x10,0x0b,0x01,0xff,0xe3,0x83,0x8f,0xe3,
+	0x82,0x99,0x00,0x01,0xff,0xe3,0x83,0x8f,0xe3,0x82,0x9a,0x00,0x10,0x04,0x01,0x00,
+	0x01,0xff,0xe3,0x83,0x92,0xe3,0x82,0x99,0x00,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3,
+	0x83,0x92,0xe3,0x82,0x9a,0x00,0x01,0x00,0x10,0x0b,0x01,0xff,0xe3,0x83,0x95,0xe3,
+	0x82,0x99,0x00,0x01,0xff,0xe3,0x83,0x95,0xe3,0x82,0x9a,0x00,0xd2,0x1e,0xd1,0x0f,
+	0x10,0x04,0x01,0x00,0x01,0xff,0xe3,0x83,0x98,0xe3,0x82,0x99,0x00,0x10,0x0b,0x01,
+	0xff,0xe3,0x83,0x98,0xe3,0x82,0x9a,0x00,0x01,0x00,0x91,0x16,0x10,0x0b,0x01,0xff,
+	0xe3,0x83,0x9b,0xe3,0x82,0x99,0x00,0x01,0xff,0xe3,0x83,0x9b,0xe3,0x82,0x9a,0x00,
+	0x01,0x00,0x54,0x04,0x01,0x00,0xd3,0x22,0x52,0x04,0x01,0x00,0xd1,0x0f,0x10,0x0b,
+	0x01,0xff,0xe3,0x82,0xa6,0xe3,0x82,0x99,0x00,0x01,0x00,0x10,0x04,0x01,0x00,0x01,
+	0xff,0xe3,0x83,0xaf,0xe3,0x82,0x99,0x00,0xd2,0x25,0xd1,0x16,0x10,0x0b,0x01,0xff,
+	0xe3,0x83,0xb0,0xe3,0x82,0x99,0x00,0x01,0xff,0xe3,0x83,0xb1,0xe3,0x82,0x99,0x00,
+	0x10,0x0b,0x01,0xff,0xe3,0x83,0xb2,0xe3,0x82,0x99,0x00,0x01,0x00,0x51,0x04,0x01,
+	0x00,0x10,0x0b,0x01,0xff,0xe3,0x83,0xbd,0xe3,0x82,0x99,0x00,0x06,0x00,0xd1,0x65,
+	0xd0,0x46,0xcf,0x86,0xd5,0x18,0x94,0x14,0x93,0x10,0x52,0x04,0x00,0x00,0x91,0x08,
+	0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd4,0x18,0x53,0x04,
+	0x01,0x00,0x52,0x04,0x01,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x0a,0x00,0x10,0x04,
+	0x13,0x00,0x14,0x00,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x01,0x00,
+	0x01,0x00,0x01,0x00,0x01,0x00,0xcf,0x86,0x55,0x04,0x01,0x00,0x94,0x15,0x93,0x11,
+	0x52,0x04,0x01,0x00,0x91,0x09,0x10,0x05,0x01,0xff,0x00,0x01,0x00,0x01,0x00,0x01,
+	0x00,0x01,0x00,0xd0,0x32,0xcf,0x86,0xd5,0x18,0x94,0x14,0x53,0x04,0x01,0x00,0x52,
+	0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x54,
+	0x04,0x04,0x00,0x53,0x04,0x04,0x00,0x92,0x0c,0x51,0x04,0x0c,0x00,0x10,0x04,0x0c,
+	0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0xd5,0x08,0x14,0x04,0x08,0x00,0x0a,0x00,0x94,
+	0x0c,0x93,0x08,0x12,0x04,0x0a,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0xd2,0xa4,0xd1,
+	0x5c,0xd0,0x22,0xcf,0x86,0x95,0x1c,0x54,0x04,0x01,0x00,0x53,0x04,0x01,0x00,0x52,
+	0x04,0x01,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x07,0x00,0x10,0x04,0x07,0x00,0x00,
+	0x00,0x01,0x00,0xcf,0x86,0xd5,0x20,0xd4,0x0c,0x93,0x08,0x12,0x04,0x01,0x00,0x0b,
+	0x00,0x0b,0x00,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x07,0x00,0x06,0x00,0x06,
+	0x00,0x06,0x00,0x06,0x00,0x54,0x04,0x01,0x00,0x53,0x04,0x01,0x00,0x52,0x04,0x01,
+	0x00,0x51,0x04,0x07,0x00,0x10,0x04,0x08,0x00,0x01,0x00,0xd0,0x1e,0xcf,0x86,0x55,
+	0x04,0x01,0x00,0x54,0x04,0x01,0x00,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x01,
+	0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0xcf,0x86,0xd5,0x10,0x94,0x0c,0x53,
+	0x04,0x01,0x00,0x12,0x04,0x01,0x00,0x07,0x00,0x01,0x00,0x54,0x04,0x01,0x00,0x53,
+	0x04,0x01,0x00,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x16,
+	0x00,0xd1,0x30,0xd0,0x06,0xcf,0x06,0x01,0x00,0xcf,0x86,0x55,0x04,0x01,0x00,0x54,
+	0x04,0x01,0x00,0xd3,0x10,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,
+	0x00,0x07,0x00,0x92,0x0c,0x51,0x04,0x07,0x00,0x10,0x04,0x07,0x00,0x01,0x00,0x01,
+	0x00,0xd0,0x06,0xcf,0x06,0x01,0x00,0xcf,0x86,0xd5,0x14,0x54,0x04,0x01,0x00,0x53,
+	0x04,0x01,0x00,0x52,0x04,0x01,0x00,0x11,0x04,0x01,0x00,0x07,0x00,0x54,0x04,0x01,
+	0x00,0x53,0x04,0x01,0x00,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,
+	0x00,0x07,0x00,0xcf,0x06,0x04,0x00,0xcf,0x06,0x04,0x00,0xd1,0x48,0xd0,0x40,0xcf,
+	0x86,0xd5,0x06,0xcf,0x06,0x04,0x00,0xd4,0x06,0xcf,0x06,0x04,0x00,0xd3,0x2c,0xd2,
+	0x06,0xcf,0x06,0x04,0x00,0xd1,0x06,0xcf,0x06,0x04,0x00,0xd0,0x1a,0xcf,0x86,0x55,
+	0x04,0x04,0x00,0x54,0x04,0x04,0x00,0x93,0x0c,0x52,0x04,0x04,0x00,0x11,0x04,0x04,
+	0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x07,0x00,0xcf,0x06,0x01,0x00,0xcf,0x86,0xcf,
+	0x06,0x01,0x00,0xcf,0x86,0xcf,0x06,0x01,0x00,0xe2,0x71,0x05,0xd1,0x8c,0xd0,0x08,
+	0xcf,0x86,0xcf,0x06,0x01,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x01,0x00,0xd4,0x06,
+	0xcf,0x06,0x01,0x00,0xd3,0x06,0xcf,0x06,0x01,0x00,0xd2,0x06,0xcf,0x06,0x01,0x00,
+	0xd1,0x06,0xcf,0x06,0x01,0x00,0xd0,0x22,0xcf,0x86,0x55,0x04,0x01,0x00,0xd4,0x10,
+	0x93,0x0c,0x52,0x04,0x01,0x00,0x11,0x04,0x01,0x00,0x08,0x00,0x08,0x00,0x53,0x04,
+	0x08,0x00,0x12,0x04,0x08,0x00,0x0a,0x00,0xcf,0x86,0xd5,0x28,0xd4,0x18,0xd3,0x08,
+	0x12,0x04,0x0a,0x00,0x0b,0x00,0x52,0x04,0x0b,0x00,0x91,0x08,0x10,0x04,0x0d,0x00,
+	0x11,0x00,0x11,0x00,0x93,0x0c,0x52,0x04,0x11,0x00,0x11,0x04,0x11,0x00,0x13,0x00,
+	0x13,0x00,0x94,0x14,0x53,0x04,0x13,0x00,0x92,0x0c,0x51,0x04,0x13,0x00,0x10,0x04,
+	0x13,0x00,0x14,0x00,0x14,0x00,0x00,0x00,0xe0,0xdb,0x04,0xcf,0x86,0xe5,0xdf,0x01,
+	0xd4,0x06,0xcf,0x06,0x04,0x00,0xd3,0x74,0xd2,0x6e,0xd1,0x06,0xcf,0x06,0x04,0x00,
+	0xd0,0x3e,0xcf,0x86,0xd5,0x18,0x94,0x14,0x53,0x04,0x04,0x00,0x52,0x04,0x04,0x00,
+	0x91,0x08,0x10,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0xd4,0x10,0x93,0x0c,
+	0x92,0x08,0x11,0x04,0x04,0x00,0x06,0x00,0x04,0x00,0x04,0x00,0x93,0x10,0x52,0x04,
+	0x04,0x00,0x91,0x08,0x10,0x04,0x06,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0xcf,0x86,
+	0x95,0x24,0x94,0x20,0x93,0x1c,0xd2,0x0c,0x91,0x08,0x10,0x04,0x04,0x00,0x06,0x00,
+	0x04,0x00,0xd1,0x08,0x10,0x04,0x04,0x00,0x06,0x00,0x10,0x04,0x04,0x00,0x00,0x00,
+	0x00,0x00,0x0b,0x00,0x0b,0x00,0xcf,0x06,0x0a,0x00,0xd2,0x84,0xd1,0x4c,0xd0,0x16,
+	0xcf,0x86,0x55,0x04,0x0a,0x00,0x94,0x0c,0x53,0x04,0x0a,0x00,0x12,0x04,0x0a,0x00,
+	0x00,0x00,0x00,0x00,0xcf,0x86,0x55,0x04,0x0a,0x00,0xd4,0x1c,0xd3,0x0c,0x92,0x08,
+	0x11,0x04,0x0c,0x00,0x0a,0x00,0x0a,0x00,0x52,0x04,0x0a,0x00,0x51,0x04,0x0a,0x00,
+	0x10,0x04,0x0a,0x00,0x0a,0xe6,0xd3,0x08,0x12,0x04,0x0a,0x00,0x0d,0xe6,0x52,0x04,
+	0x0d,0xe6,0x11,0x04,0x0a,0xe6,0x0a,0x00,0xd0,0x1e,0xcf,0x86,0x95,0x18,0x54,0x04,
+	0x0a,0x00,0x53,0x04,0x0a,0x00,0x52,0x04,0x10,0x00,0x51,0x04,0x10,0x00,0x10,0x04,
+	0x11,0xe6,0x0d,0xe6,0x0b,0x00,0xcf,0x86,0x55,0x04,0x0b,0x00,0x54,0x04,0x0b,0x00,
+	0x93,0x0c,0x92,0x08,0x11,0x04,0x0b,0xe6,0x0b,0x00,0x0b,0x00,0x00,0x00,0xd1,0x40,
+	0xd0,0x3a,0xcf,0x86,0xd5,0x24,0x54,0x04,0x08,0x00,0xd3,0x10,0x52,0x04,0x08,0x00,
+	0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x09,0x00,0x92,0x0c,0x51,0x04,0x09,0x00,
+	0x10,0x04,0x09,0x00,0x0a,0x00,0x0a,0x00,0x94,0x10,0x93,0x0c,0x92,0x08,0x11,0x04,
+	0x09,0x00,0x0a,0x00,0x0a,0x00,0x0a,0x00,0x0a,0x00,0xcf,0x06,0x0a,0x00,0xd0,0x5e,
+	0xcf,0x86,0xd5,0x28,0xd4,0x18,0x53,0x04,0x0a,0x00,0x52,0x04,0x0a,0x00,0xd1,0x08,
+	0x10,0x04,0x0a,0x00,0x0c,0x00,0x10,0x04,0x0c,0x00,0x11,0x00,0x93,0x0c,0x92,0x08,
+	0x11,0x04,0x0c,0x00,0x0d,0x00,0x10,0x00,0x10,0x00,0xd4,0x1c,0x53,0x04,0x0c,0x00,
+	0xd2,0x0c,0x51,0x04,0x0c,0x00,0x10,0x04,0x0d,0x00,0x10,0x00,0x51,0x04,0x10,0x00,
+	0x10,0x04,0x12,0x00,0x14,0x00,0xd3,0x0c,0x92,0x08,0x11,0x04,0x10,0x00,0x11,0x00,
+	0x11,0x00,0x92,0x08,0x11,0x04,0x14,0x00,0x15,0x00,0x15,0x00,0xcf,0x86,0xd5,0x1c,
+	0x94,0x18,0x93,0x14,0xd2,0x08,0x11,0x04,0x00,0x00,0x15,0x00,0x51,0x04,0x15,0x00,
+	0x10,0x04,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x04,0x00,0x00,0xd3,0x10,
+	0x52,0x04,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x10,0x00,0x92,0x0c,
+	0x51,0x04,0x0d,0x00,0x10,0x04,0x0c,0x00,0x0a,0x00,0x0a,0x00,0xe4,0xf2,0x02,0xe3,
+	0x65,0x01,0xd2,0x98,0xd1,0x48,0xd0,0x36,0xcf,0x86,0xd5,0x18,0x94,0x14,0x93,0x10,
+	0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x09,0x08,0x00,0x08,0x00,
+	0x08,0x00,0xd4,0x0c,0x53,0x04,0x08,0x00,0x12,0x04,0x08,0x00,0x00,0x00,0x53,0x04,
+	0x0b,0x00,0x92,0x08,0x11,0x04,0x0b,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0x55,0x04,
+	0x09,0x00,0x54,0x04,0x09,0x00,0x13,0x04,0x09,0x00,0x00,0x00,0xd0,0x06,0xcf,0x06,
+	0x0a,0x00,0xcf,0x86,0xd5,0x2c,0xd4,0x1c,0xd3,0x10,0x52,0x04,0x0a,0x00,0x91,0x08,
+	0x10,0x04,0x0a,0x09,0x12,0x00,0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,
+	0x0a,0x00,0x53,0x04,0x0a,0x00,0x92,0x08,0x11,0x04,0x0a,0x00,0x00,0x00,0x00,0x00,
+	0x54,0x04,0x0b,0xe6,0xd3,0x0c,0x92,0x08,0x11,0x04,0x0b,0xe6,0x0b,0x00,0x0b,0x00,
+	0x52,0x04,0x0b,0x00,0x11,0x04,0x11,0x00,0x14,0x00,0xd1,0x60,0xd0,0x22,0xcf,0x86,
+	0x55,0x04,0x0a,0x00,0x94,0x18,0x53,0x04,0x0a,0x00,0xd2,0x0c,0x51,0x04,0x0a,0x00,
+	0x10,0x04,0x0a,0x00,0x0a,0xdc,0x11,0x04,0x0a,0xdc,0x0a,0x00,0x0a,0x00,0xcf,0x86,
+	0xd5,0x24,0x54,0x04,0x0a,0x00,0xd3,0x10,0x92,0x0c,0x51,0x04,0x0a,0x00,0x10,0x04,
+	0x0a,0x00,0x0a,0x09,0x00,0x00,0x52,0x04,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,
+	0x00,0x00,0x0a,0x00,0x54,0x04,0x0b,0x00,0x53,0x04,0x0b,0x00,0x52,0x04,0x0b,0x00,
+	0x91,0x08,0x10,0x04,0x0b,0x00,0x00,0x00,0x00,0x00,0xd0,0x1e,0xcf,0x86,0x55,0x04,
+	0x0b,0x00,0x54,0x04,0x0b,0x00,0x93,0x10,0x92,0x0c,0x51,0x04,0x0b,0x00,0x10,0x04,
+	0x0b,0x00,0x0b,0x07,0x0b,0x00,0x0b,0x00,0xcf,0x86,0xd5,0x34,0xd4,0x20,0xd3,0x10,
+	0x92,0x0c,0x91,0x08,0x10,0x04,0x0b,0x09,0x0b,0x00,0x0b,0x00,0x0b,0x00,0x52,0x04,
+	0x0b,0x00,0x51,0x04,0x0b,0x00,0x10,0x04,0x00,0x00,0x0b,0x00,0x53,0x04,0x0b,0x00,
+	0xd2,0x08,0x11,0x04,0x0b,0x00,0x00,0x00,0x11,0x04,0x00,0x00,0x0b,0x00,0x54,0x04,
+	0x10,0x00,0x53,0x04,0x10,0x00,0x52,0x04,0x10,0x00,0x51,0x04,0x10,0x00,0x10,0x04,
+	0x10,0x00,0x00,0x00,0xd2,0xd0,0xd1,0x50,0xd0,0x1e,0xcf,0x86,0x55,0x04,0x0a,0x00,
+	0x54,0x04,0x0a,0x00,0x93,0x10,0x52,0x04,0x0a,0x00,0x51,0x04,0x0a,0x00,0x10,0x04,
+	0x0a,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0xd5,0x20,0xd4,0x10,0x53,0x04,0x0a,0x00,
+	0x52,0x04,0x0a,0x00,0x11,0x04,0x0a,0x00,0x00,0x00,0x53,0x04,0x0a,0x00,0x92,0x08,
+	0x11,0x04,0x0a,0x00,0x00,0x00,0x0a,0x00,0x54,0x04,0x0b,0x00,0x53,0x04,0x0b,0x00,
+	0x12,0x04,0x0b,0x00,0x10,0x00,0xd0,0x3a,0xcf,0x86,0x55,0x04,0x0b,0x00,0x54,0x04,
+	0x0b,0x00,0xd3,0x1c,0xd2,0x0c,0x91,0x08,0x10,0x04,0x0b,0xe6,0x0b,0x00,0x0b,0xe6,
+	0xd1,0x08,0x10,0x04,0x0b,0xdc,0x0b,0x00,0x10,0x04,0x0b,0x00,0x0b,0xe6,0xd2,0x0c,
+	0x91,0x08,0x10,0x04,0x0b,0xe6,0x0b,0x00,0x0b,0x00,0x11,0x04,0x0b,0x00,0x0b,0xe6,
+	0xcf,0x86,0xd5,0x2c,0xd4,0x18,0x93,0x14,0x92,0x10,0xd1,0x08,0x10,0x04,0x0b,0x00,
+	0x0b,0xe6,0x10,0x04,0x0b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x04,0x00,0x00,
+	0x92,0x0c,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x0b,0x00,0x0b,0x00,0x54,0x04,
+	0x0d,0x00,0x93,0x10,0x52,0x04,0x0d,0x00,0x51,0x04,0x0d,0x00,0x10,0x04,0x0d,0x09,
+	0x00,0x00,0x00,0x00,0xd1,0x8c,0xd0,0x72,0xcf,0x86,0xd5,0x4c,0xd4,0x30,0xd3,0x18,
+	0xd2,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x0c,0x00,0x0c,0x00,0x51,0x04,0x0c,0x00,
+	0x10,0x04,0x0c,0x00,0x00,0x00,0xd2,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x0c,0x00,
+	0x0c,0x00,0x51,0x04,0x0c,0x00,0x10,0x04,0x0c,0x00,0x00,0x00,0x93,0x18,0xd2,0x0c,
+	0x91,0x08,0x10,0x04,0x00,0x00,0x0c,0x00,0x0c,0x00,0x51,0x04,0x0c,0x00,0x10,0x04,
+	0x0c,0x00,0x00,0x00,0x00,0x00,0x94,0x20,0xd3,0x10,0x52,0x04,0x0c,0x00,0x51,0x04,
+	0x0c,0x00,0x10,0x04,0x0c,0x00,0x00,0x00,0x52,0x04,0x0c,0x00,0x51,0x04,0x0c,0x00,
+	0x10,0x04,0x0c,0x00,0x00,0x00,0x10,0x00,0xcf,0x86,0x55,0x04,0x10,0x00,0x94,0x10,
+	0x93,0x0c,0x52,0x04,0x11,0x00,0x11,0x04,0x10,0x00,0x15,0x00,0x00,0x00,0x11,0x00,
+	0xd0,0x06,0xcf,0x06,0x11,0x00,0xcf,0x86,0x55,0x04,0x0b,0x00,0xd4,0x14,0x53,0x04,
+	0x0b,0x00,0x52,0x04,0x0b,0x00,0x91,0x08,0x10,0x04,0x0b,0x00,0x0b,0x09,0x00,0x00,
+	0x53,0x04,0x0b,0x00,0x92,0x08,0x11,0x04,0x0b,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,
+	0x02,0xff,0xff,0xcf,0x86,0xcf,0x06,0x02,0xff,0xff,0xd1,0x76,0xd0,0x09,0xcf,0x86,
+	0xcf,0x06,0x02,0xff,0xff,0xcf,0x86,0x85,0xd4,0x07,0xcf,0x06,0x02,0xff,0xff,0xd3,
+	0x07,0xcf,0x06,0x02,0xff,0xff,0xd2,0x07,0xcf,0x06,0x02,0xff,0xff,0xd1,0x07,0xcf,
+	0x06,0x02,0xff,0xff,0xd0,0x18,0xcf,0x86,0x55,0x05,0x02,0xff,0xff,0x94,0x0d,0x93,
+	0x09,0x12,0x05,0x02,0xff,0xff,0x00,0x00,0x00,0x00,0x0b,0x00,0xcf,0x86,0xd5,0x24,
+	0x94,0x20,0xd3,0x10,0x52,0x04,0x0b,0x00,0x51,0x04,0x0b,0x00,0x10,0x04,0x0b,0x00,
+	0x00,0x00,0x92,0x0c,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x0b,0x00,0x0b,0x00,
+	0x0b,0x00,0x54,0x04,0x0b,0x00,0x53,0x04,0x0b,0x00,0x12,0x04,0x0b,0x00,0x00,0x00,
+	0xd0,0x08,0xcf,0x86,0xcf,0x06,0x01,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x01,0x00,
+	0xe4,0x9c,0x10,0xe3,0x16,0x08,0xd2,0x06,0xcf,0x06,0x01,0x00,0xe1,0x08,0x04,0xe0,
+	0x04,0x02,0xcf,0x86,0xe5,0x01,0x01,0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,
+	0x08,0x01,0xff,0xe8,0xb1,0x88,0x00,0x01,0xff,0xe6,0x9b,0xb4,0x00,0x10,0x08,0x01,
+	0xff,0xe8,0xbb,0x8a,0x00,0x01,0xff,0xe8,0xb3,0x88,0x00,0xd1,0x10,0x10,0x08,0x01,
+	0xff,0xe6,0xbb,0x91,0x00,0x01,0xff,0xe4,0xb8,0xb2,0x00,0x10,0x08,0x01,0xff,0xe5,
+	0x8f,0xa5,0x00,0x01,0xff,0xe9,0xbe,0x9c,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,
+	0xff,0xe9,0xbe,0x9c,0x00,0x01,0xff,0xe5,0xa5,0x91,0x00,0x10,0x08,0x01,0xff,0xe9,
+	0x87,0x91,0x00,0x01,0xff,0xe5,0x96,0x87,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe5,
+	0xa5,0x88,0x00,0x01,0xff,0xe6,0x87,0xb6,0x00,0x10,0x08,0x01,0xff,0xe7,0x99,0xa9,
+	0x00,0x01,0xff,0xe7,0xbe,0x85,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,
+	0xff,0xe8,0x98,0xbf,0x00,0x01,0xff,0xe8,0x9e,0xba,0x00,0x10,0x08,0x01,0xff,0xe8,
+	0xa3,0xb8,0x00,0x01,0xff,0xe9,0x82,0x8f,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe6,
+	0xa8,0x82,0x00,0x01,0xff,0xe6,0xb4,0x9b,0x00,0x10,0x08,0x01,0xff,0xe7,0x83,0x99,
+	0x00,0x01,0xff,0xe7,0x8f,0x9e,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe8,
+	0x90,0xbd,0x00,0x01,0xff,0xe9,0x85,0xaa,0x00,0x10,0x08,0x01,0xff,0xe9,0xa7,0xb1,
+	0x00,0x01,0xff,0xe4,0xba,0x82,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe5,0x8d,0xb5,
+	0x00,0x01,0xff,0xe6,0xac,0x84,0x00,0x10,0x08,0x01,0xff,0xe7,0x88,0x9b,0x00,0x01,
+	0xff,0xe8,0x98,0xad,0x00,0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,
+	0xff,0xe9,0xb8,0x9e,0x00,0x01,0xff,0xe5,0xb5,0x90,0x00,0x10,0x08,0x01,0xff,0xe6,
+	0xbf,0xab,0x00,0x01,0xff,0xe8,0x97,0x8d,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe8,
+	0xa5,0xa4,0x00,0x01,0xff,0xe6,0x8b,0x89,0x00,0x10,0x08,0x01,0xff,0xe8,0x87,0x98,
+	0x00,0x01,0xff,0xe8,0xa0,0x9f,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe5,
+	0xbb,0x8a,0x00,0x01,0xff,0xe6,0x9c,0x97,0x00,0x10,0x08,0x01,0xff,0xe6,0xb5,0xaa,
+	0x00,0x01,0xff,0xe7,0x8b,0xbc,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe9,0x83,0x8e,
+	0x00,0x01,0xff,0xe4,0xbe,0x86,0x00,0x10,0x08,0x01,0xff,0xe5,0x86,0xb7,0x00,0x01,
+	0xff,0xe5,0x8b,0x9e,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe6,
+	0x93,0x84,0x00,0x01,0xff,0xe6,0xab,0x93,0x00,0x10,0x08,0x01,0xff,0xe7,0x88,0x90,
+	0x00,0x01,0xff,0xe7,0x9b,0xa7,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe8,0x80,0x81,
+	0x00,0x01,0xff,0xe8,0x98,0x86,0x00,0x10,0x08,0x01,0xff,0xe8,0x99,0x9c,0x00,0x01,
+	0xff,0xe8,0xb7,0xaf,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe9,0x9c,0xb2,
+	0x00,0x01,0xff,0xe9,0xad,0xaf,0x00,0x10,0x08,0x01,0xff,0xe9,0xb7,0xba,0x00,0x01,
+	0xff,0xe7,0xa2,0x8c,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe7,0xa5,0xbf,0x00,0x01,
+	0xff,0xe7,0xb6,0xa0,0x00,0x10,0x08,0x01,0xff,0xe8,0x8f,0x89,0x00,0x01,0xff,0xe9,
+	0x8c,0x84,0x00,0xcf,0x86,0xe5,0x01,0x01,0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,
+	0x10,0x08,0x01,0xff,0xe9,0xb9,0xbf,0x00,0x01,0xff,0xe8,0xab,0x96,0x00,0x10,0x08,
+	0x01,0xff,0xe5,0xa3,0x9f,0x00,0x01,0xff,0xe5,0xbc,0x84,0x00,0xd1,0x10,0x10,0x08,
+	0x01,0xff,0xe7,0xb1,0xa0,0x00,0x01,0xff,0xe8,0x81,0xbe,0x00,0x10,0x08,0x01,0xff,
+	0xe7,0x89,0xa2,0x00,0x01,0xff,0xe7,0xa3,0x8a,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,
+	0x01,0xff,0xe8,0xb3,0x82,0x00,0x01,0xff,0xe9,0x9b,0xb7,0x00,0x10,0x08,0x01,0xff,
+	0xe5,0xa3,0x98,0x00,0x01,0xff,0xe5,0xb1,0xa2,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,
+	0xe6,0xa8,0x93,0x00,0x01,0xff,0xe6,0xb7,0x9a,0x00,0x10,0x08,0x01,0xff,0xe6,0xbc,
+	0x8f,0x00,0x01,0xff,0xe7,0xb4,0xaf,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,
+	0x01,0xff,0xe7,0xb8,0xb7,0x00,0x01,0xff,0xe9,0x99,0x8b,0x00,0x10,0x08,0x01,0xff,
+	0xe5,0x8b,0x92,0x00,0x01,0xff,0xe8,0x82,0x8b,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,
+	0xe5,0x87,0x9c,0x00,0x01,0xff,0xe5,0x87,0x8c,0x00,0x10,0x08,0x01,0xff,0xe7,0xa8,
+	0x9c,0x00,0x01,0xff,0xe7,0xb6,0xbe,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,
+	0xe8,0x8f,0xb1,0x00,0x01,0xff,0xe9,0x99,0xb5,0x00,0x10,0x08,0x01,0xff,0xe8,0xae,
+	0x80,0x00,0x01,0xff,0xe6,0x8b,0x8f,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe6,0xa8,
+	0x82,0x00,0x01,0xff,0xe8,0xab,0xbe,0x00,0x10,0x08,0x01,0xff,0xe4,0xb8,0xb9,0x00,
+	0x01,0xff,0xe5,0xaf,0xa7,0x00,0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,
+	0x01,0xff,0xe6,0x80,0x92,0x00,0x01,0xff,0xe7,0x8e,0x87,0x00,0x10,0x08,0x01,0xff,
+	0xe7,0x95,0xb0,0x00,0x01,0xff,0xe5,0x8c,0x97,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,
+	0xe7,0xa3,0xbb,0x00,0x01,0xff,0xe4,0xbe,0xbf,0x00,0x10,0x08,0x01,0xff,0xe5,0xbe,
+	0xa9,0x00,0x01,0xff,0xe4,0xb8,0x8d,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,
+	0xe6,0xb3,0x8c,0x00,0x01,0xff,0xe6,0x95,0xb8,0x00,0x10,0x08,0x01,0xff,0xe7,0xb4,
+	0xa2,0x00,0x01,0xff,0xe5,0x8f,0x83,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe5,0xa1,
+	0x9e,0x00,0x01,0xff,0xe7,0x9c,0x81,0x00,0x10,0x08,0x01,0xff,0xe8,0x91,0x89,0x00,
+	0x01,0xff,0xe8,0xaa,0xaa,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,
+	0xe6,0xae,0xba,0x00,0x01,0xff,0xe8,0xbe,0xb0,0x00,0x10,0x08,0x01,0xff,0xe6,0xb2,
+	0x88,0x00,0x01,0xff,0xe6,0x8b,0xbe,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe8,0x8b,
+	0xa5,0x00,0x01,0xff,0xe6,0x8e,0xa0,0x00,0x10,0x08,0x01,0xff,0xe7,0x95,0xa5,0x00,
+	0x01,0xff,0xe4,0xba,0xae,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe5,0x85,
+	0xa9,0x00,0x01,0xff,0xe5,0x87,0x89,0x00,0x10,0x08,0x01,0xff,0xe6,0xa2,0x81,0x00,
+	0x01,0xff,0xe7,0xb3,0xa7,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe8,0x89,0xaf,0x00,
+	0x01,0xff,0xe8,0xab,0x92,0x00,0x10,0x08,0x01,0xff,0xe9,0x87,0x8f,0x00,0x01,0xff,
+	0xe5,0x8b,0xb5,0x00,0xe0,0x04,0x02,0xcf,0x86,0xe5,0x01,0x01,0xd4,0x80,0xd3,0x40,
+	0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe5,0x91,0x82,0x00,0x01,0xff,0xe5,0xa5,
+	0xb3,0x00,0x10,0x08,0x01,0xff,0xe5,0xbb,0xac,0x00,0x01,0xff,0xe6,0x97,0x85,0x00,
+	0xd1,0x10,0x10,0x08,0x01,0xff,0xe6,0xbf,0xbe,0x00,0x01,0xff,0xe7,0xa4,0xaa,0x00,
+	0x10,0x08,0x01,0xff,0xe9,0x96,0xad,0x00,0x01,0xff,0xe9,0xa9,0xaa,0x00,0xd2,0x20,
+	0xd1,0x10,0x10,0x08,0x01,0xff,0xe9,0xba,0x97,0x00,0x01,0xff,0xe9,0xbb,0x8e,0x00,
+	0x10,0x08,0x01,0xff,0xe5,0x8a,0x9b,0x00,0x01,0xff,0xe6,0x9b,0x86,0x00,0xd1,0x10,
+	0x10,0x08,0x01,0xff,0xe6,0xad,0xb7,0x00,0x01,0xff,0xe8,0xbd,0xa2,0x00,0x10,0x08,
+	0x01,0xff,0xe5,0xb9,0xb4,0x00,0x01,0xff,0xe6,0x86,0x90,0x00,0xd3,0x40,0xd2,0x20,
+	0xd1,0x10,0x10,0x08,0x01,0xff,0xe6,0x88,0x80,0x00,0x01,0xff,0xe6,0x92,0x9a,0x00,
+	0x10,0x08,0x01,0xff,0xe6,0xbc,0xa3,0x00,0x01,0xff,0xe7,0x85,0x89,0x00,0xd1,0x10,
+	0x10,0x08,0x01,0xff,0xe7,0x92,0x89,0x00,0x01,0xff,0xe7,0xa7,0x8a,0x00,0x10,0x08,
+	0x01,0xff,0xe7,0xb7,0xb4,0x00,0x01,0xff,0xe8,0x81,0xaf,0x00,0xd2,0x20,0xd1,0x10,
+	0x10,0x08,0x01,0xff,0xe8,0xbc,0xa6,0x00,0x01,0xff,0xe8,0x93,0xae,0x00,0x10,0x08,
+	0x01,0xff,0xe9,0x80,0xa3,0x00,0x01,0xff,0xe9,0x8d,0x8a,0x00,0xd1,0x10,0x10,0x08,
+	0x01,0xff,0xe5,0x88,0x97,0x00,0x01,0xff,0xe5,0x8a,0xa3,0x00,0x10,0x08,0x01,0xff,
+	0xe5,0x92,0xbd,0x00,0x01,0xff,0xe7,0x83,0x88,0x00,0xd4,0x80,0xd3,0x40,0xd2,0x20,
+	0xd1,0x10,0x10,0x08,0x01,0xff,0xe8,0xa3,0x82,0x00,0x01,0xff,0xe8,0xaa,0xaa,0x00,
+	0x10,0x08,0x01,0xff,0xe5,0xbb,0x89,0x00,0x01,0xff,0xe5,0xbf,0xb5,0x00,0xd1,0x10,
+	0x10,0x08,0x01,0xff,0xe6,0x8d,0xbb,0x00,0x01,0xff,0xe6,0xae,0xae,0x00,0x10,0x08,
+	0x01,0xff,0xe7,0xb0,0xbe,0x00,0x01,0xff,0xe7,0x8d,0xb5,0x00,0xd2,0x20,0xd1,0x10,
+	0x10,0x08,0x01,0xff,0xe4,0xbb,0xa4,0x00,0x01,0xff,0xe5,0x9b,0xb9,0x00,0x10,0x08,
+	0x01,0xff,0xe5,0xaf,0xa7,0x00,0x01,0xff,0xe5,0xb6,0xba,0x00,0xd1,0x10,0x10,0x08,
+	0x01,0xff,0xe6,0x80,0x9c,0x00,0x01,0xff,0xe7,0x8e,0xb2,0x00,0x10,0x08,0x01,0xff,
+	0xe7,0x91,0xa9,0x00,0x01,0xff,0xe7,0xbe,0x9a,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,
+	0x10,0x08,0x01,0xff,0xe8,0x81,0x86,0x00,0x01,0xff,0xe9,0x88,0xb4,0x00,0x10,0x08,
+	0x01,0xff,0xe9,0x9b,0xb6,0x00,0x01,0xff,0xe9,0x9d,0x88,0x00,0xd1,0x10,0x10,0x08,
+	0x01,0xff,0xe9,0xa0,0x98,0x00,0x01,0xff,0xe4,0xbe,0x8b,0x00,0x10,0x08,0x01,0xff,
+	0xe7,0xa6,0xae,0x00,0x01,0xff,0xe9,0x86,0xb4,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,
+	0x01,0xff,0xe9,0x9a,0xb8,0x00,0x01,0xff,0xe6,0x83,0xa1,0x00,0x10,0x08,0x01,0xff,
+	0xe4,0xba,0x86,0x00,0x01,0xff,0xe5,0x83,0x9a,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,
+	0xe5,0xaf,0xae,0x00,0x01,0xff,0xe5,0xb0,0xbf,0x00,0x10,0x08,0x01,0xff,0xe6,0x96,
+	0x99,0x00,0x01,0xff,0xe6,0xa8,0x82,0x00,0xcf,0x86,0xe5,0x01,0x01,0xd4,0x80,0xd3,
+	0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe7,0x87,0x8e,0x00,0x01,0xff,0xe7,
+	0x99,0x82,0x00,0x10,0x08,0x01,0xff,0xe8,0x93,0xbc,0x00,0x01,0xff,0xe9,0x81,0xbc,
+	0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe9,0xbe,0x8d,0x00,0x01,0xff,0xe6,0x9a,0x88,
+	0x00,0x10,0x08,0x01,0xff,0xe9,0x98,0xae,0x00,0x01,0xff,0xe5,0x8a,0x89,0x00,0xd2,
+	0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe6,0x9d,0xbb,0x00,0x01,0xff,0xe6,0x9f,0xb3,
+	0x00,0x10,0x08,0x01,0xff,0xe6,0xb5,0x81,0x00,0x01,0xff,0xe6,0xba,0x9c,0x00,0xd1,
+	0x10,0x10,0x08,0x01,0xff,0xe7,0x90,0x89,0x00,0x01,0xff,0xe7,0x95,0x99,0x00,0x10,
+	0x08,0x01,0xff,0xe7,0xa1,0xab,0x00,0x01,0xff,0xe7,0xb4,0x90,0x00,0xd3,0x40,0xd2,
+	0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe9,0xa1,0x9e,0x00,0x01,0xff,0xe5,0x85,0xad,
+	0x00,0x10,0x08,0x01,0xff,0xe6,0x88,0xae,0x00,0x01,0xff,0xe9,0x99,0xb8,0x00,0xd1,
+	0x10,0x10,0x08,0x01,0xff,0xe5,0x80,0xab,0x00,0x01,0xff,0xe5,0xb4,0x99,0x00,0x10,
+	0x08,0x01,0xff,0xe6,0xb7,0xaa,0x00,0x01,0xff,0xe8,0xbc,0xaa,0x00,0xd2,0x20,0xd1,
+	0x10,0x10,0x08,0x01,0xff,0xe5,0xbe,0x8b,0x00,0x01,0xff,0xe6,0x85,0x84,0x00,0x10,
+	0x08,0x01,0xff,0xe6,0xa0,0x97,0x00,0x01,0xff,0xe7,0x8e,0x87,0x00,0xd1,0x10,0x10,
+	0x08,0x01,0xff,0xe9,0x9a,0x86,0x00,0x01,0xff,0xe5,0x88,0xa9,0x00,0x10,0x08,0x01,
+	0xff,0xe5,0x90,0x8f,0x00,0x01,0xff,0xe5,0xb1,0xa5,0x00,0xd4,0x80,0xd3,0x40,0xd2,
+	0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe6,0x98,0x93,0x00,0x01,0xff,0xe6,0x9d,0x8e,
+	0x00,0x10,0x08,0x01,0xff,0xe6,0xa2,0xa8,0x00,0x01,0xff,0xe6,0xb3,0xa5,0x00,0xd1,
+	0x10,0x10,0x08,0x01,0xff,0xe7,0x90,0x86,0x00,0x01,0xff,0xe7,0x97,0xa2,0x00,0x10,
+	0x08,0x01,0xff,0xe7,0xbd,0xb9,0x00,0x01,0xff,0xe8,0xa3,0x8f,0x00,0xd2,0x20,0xd1,
+	0x10,0x10,0x08,0x01,0xff,0xe8,0xa3,0xa1,0x00,0x01,0xff,0xe9,0x87,0x8c,0x00,0x10,
+	0x08,0x01,0xff,0xe9,0x9b,0xa2,0x00,0x01,0xff,0xe5,0x8c,0xbf,0x00,0xd1,0x10,0x10,
+	0x08,0x01,0xff,0xe6,0xba,0xba,0x00,0x01,0xff,0xe5,0x90,0x9d,0x00,0x10,0x08,0x01,
+	0xff,0xe7,0x87,0x90,0x00,0x01,0xff,0xe7,0x92,0x98,0x00,0xd3,0x40,0xd2,0x20,0xd1,
+	0x10,0x10,0x08,0x01,0xff,0xe8,0x97,0xba,0x00,0x01,0xff,0xe9,0x9a,0xa3,0x00,0x10,
+	0x08,0x01,0xff,0xe9,0xb1,0x97,0x00,0x01,0xff,0xe9,0xba,0x9f,0x00,0xd1,0x10,0x10,
+	0x08,0x01,0xff,0xe6,0x9e,0x97,0x00,0x01,0xff,0xe6,0xb7,0x8b,0x00,0x10,0x08,0x01,
+	0xff,0xe8,0x87,0xa8,0x00,0x01,0xff,0xe7,0xab,0x8b,0x00,0xd2,0x20,0xd1,0x10,0x10,
+	0x08,0x01,0xff,0xe7,0xac,0xa0,0x00,0x01,0xff,0xe7,0xb2,0x92,0x00,0x10,0x08,0x01,
+	0xff,0xe7,0x8b,0x80,0x00,0x01,0xff,0xe7,0x82,0x99,0x00,0xd1,0x10,0x10,0x08,0x01,
+	0xff,0xe8,0xad,0x98,0x00,0x01,0xff,0xe4,0xbb,0x80,0x00,0x10,0x08,0x01,0xff,0xe8,
+	0x8c,0xb6,0x00,0x01,0xff,0xe5,0x88,0xba,0x00,0xe2,0xad,0x06,0xe1,0xc4,0x03,0xe0,
+	0xcb,0x01,0xcf,0x86,0xd5,0xe4,0xd4,0x74,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,
+	0x01,0xff,0xe5,0x88,0x87,0x00,0x01,0xff,0xe5,0xba,0xa6,0x00,0x10,0x08,0x01,0xff,
+	0xe6,0x8b,0x93,0x00,0x01,0xff,0xe7,0xb3,0x96,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,
+	0xe5,0xae,0x85,0x00,0x01,0xff,0xe6,0xb4,0x9e,0x00,0x10,0x08,0x01,0xff,0xe6,0x9a,
+	0xb4,0x00,0x01,0xff,0xe8,0xbc,0xbb,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,
+	0xe8,0xa1,0x8c,0x00,0x01,0xff,0xe9,0x99,0x8d,0x00,0x10,0x08,0x01,0xff,0xe8,0xa6,
+	0x8b,0x00,0x01,0xff,0xe5,0xbb,0x93,0x00,0x91,0x10,0x10,0x08,0x01,0xff,0xe5,0x85,
+	0x80,0x00,0x01,0xff,0xe5,0x97,0x80,0x00,0x01,0x00,0xd3,0x34,0xd2,0x18,0xd1,0x0c,
+	0x10,0x08,0x01,0xff,0xe5,0xa1,0x9a,0x00,0x01,0x00,0x10,0x08,0x01,0xff,0xe6,0x99,
+	0xb4,0x00,0x01,0x00,0xd1,0x0c,0x10,0x04,0x01,0x00,0x01,0xff,0xe5,0x87,0x9e,0x00,
+	0x10,0x08,0x01,0xff,0xe7,0x8c,0xaa,0x00,0x01,0xff,0xe7,0x9b,0x8a,0x00,0xd2,0x20,
+	0xd1,0x10,0x10,0x08,0x01,0xff,0xe7,0xa4,0xbc,0x00,0x01,0xff,0xe7,0xa5,0x9e,0x00,
+	0x10,0x08,0x01,0xff,0xe7,0xa5,0xa5,0x00,0x01,0xff,0xe7,0xa6,0x8f,0x00,0xd1,0x10,
+	0x10,0x08,0x01,0xff,0xe9,0x9d,0x96,0x00,0x01,0xff,0xe7,0xb2,0xbe,0x00,0x10,0x08,
+	0x01,0xff,0xe7,0xbe,0xbd,0x00,0x01,0x00,0xd4,0x64,0xd3,0x30,0xd2,0x18,0xd1,0x0c,
+	0x10,0x08,0x01,0xff,0xe8,0x98,0x92,0x00,0x01,0x00,0x10,0x08,0x01,0xff,0xe8,0xab,
+	0xb8,0x00,0x01,0x00,0xd1,0x0c,0x10,0x04,0x01,0x00,0x01,0xff,0xe9,0x80,0xb8,0x00,
+	0x10,0x08,0x01,0xff,0xe9,0x83,0xbd,0x00,0x01,0x00,0xd2,0x14,0x51,0x04,0x01,0x00,
+	0x10,0x08,0x01,0xff,0xe9,0xa3,0xaf,0x00,0x01,0xff,0xe9,0xa3,0xbc,0x00,0xd1,0x10,
+	0x10,0x08,0x01,0xff,0xe9,0xa4,0xa8,0x00,0x01,0xff,0xe9,0xb6,0xb4,0x00,0x10,0x08,
+	0x0d,0xff,0xe9,0x83,0x9e,0x00,0x0d,0xff,0xe9,0x9a,0xb7,0x00,0xd3,0x40,0xd2,0x20,
+	0xd1,0x10,0x10,0x08,0x06,0xff,0xe4,0xbe,0xae,0x00,0x06,0xff,0xe5,0x83,0xa7,0x00,
+	0x10,0x08,0x06,0xff,0xe5,0x85,0x8d,0x00,0x06,0xff,0xe5,0x8b,0x89,0x00,0xd1,0x10,
+	0x10,0x08,0x06,0xff,0xe5,0x8b,0xa4,0x00,0x06,0xff,0xe5,0x8d,0x91,0x00,0x10,0x08,
+	0x06,0xff,0xe5,0x96,0x9d,0x00,0x06,0xff,0xe5,0x98,0x86,0x00,0xd2,0x20,0xd1,0x10,
+	0x10,0x08,0x06,0xff,0xe5,0x99,0xa8,0x00,0x06,0xff,0xe5,0xa1,0x80,0x00,0x10,0x08,
+	0x06,0xff,0xe5,0xa2,0xa8,0x00,0x06,0xff,0xe5,0xb1,0xa4,0x00,0xd1,0x10,0x10,0x08,
+	0x06,0xff,0xe5,0xb1,0xae,0x00,0x06,0xff,0xe6,0x82,0x94,0x00,0x10,0x08,0x06,0xff,
+	0xe6,0x85,0xa8,0x00,0x06,0xff,0xe6,0x86,0x8e,0x00,0xcf,0x86,0xe5,0x01,0x01,0xd4,
+	0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x06,0xff,0xe6,0x87,0xb2,0x00,0x06,
+	0xff,0xe6,0x95,0x8f,0x00,0x10,0x08,0x06,0xff,0xe6,0x97,0xa2,0x00,0x06,0xff,0xe6,
+	0x9a,0x91,0x00,0xd1,0x10,0x10,0x08,0x06,0xff,0xe6,0xa2,0x85,0x00,0x06,0xff,0xe6,
+	0xb5,0xb7,0x00,0x10,0x08,0x06,0xff,0xe6,0xb8,0x9a,0x00,0x06,0xff,0xe6,0xbc,0xa2,
+	0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x06,0xff,0xe7,0x85,0xae,0x00,0x06,0xff,0xe7,
+	0x88,0xab,0x00,0x10,0x08,0x06,0xff,0xe7,0x90,0xa2,0x00,0x06,0xff,0xe7,0xa2,0x91,
+	0x00,0xd1,0x10,0x10,0x08,0x06,0xff,0xe7,0xa4,0xbe,0x00,0x06,0xff,0xe7,0xa5,0x89,
+	0x00,0x10,0x08,0x06,0xff,0xe7,0xa5,0x88,0x00,0x06,0xff,0xe7,0xa5,0x90,0x00,0xd3,
+	0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x06,0xff,0xe7,0xa5,0x96,0x00,0x06,0xff,0xe7,
+	0xa5,0x9d,0x00,0x10,0x08,0x06,0xff,0xe7,0xa6,0x8d,0x00,0x06,0xff,0xe7,0xa6,0x8e,
+	0x00,0xd1,0x10,0x10,0x08,0x06,0xff,0xe7,0xa9,0x80,0x00,0x06,0xff,0xe7,0xaa,0x81,
+	0x00,0x10,0x08,0x06,0xff,0xe7,0xaf,0x80,0x00,0x06,0xff,0xe7,0xb7,0xb4,0x00,0xd2,
+	0x20,0xd1,0x10,0x10,0x08,0x06,0xff,0xe7,0xb8,0x89,0x00,0x06,0xff,0xe7,0xb9,0x81,
+	0x00,0x10,0x08,0x06,0xff,0xe7,0xbd,0xb2,0x00,0x06,0xff,0xe8,0x80,0x85,0x00,0xd1,
+	0x10,0x10,0x08,0x06,0xff,0xe8,0x87,0xad,0x00,0x06,0xff,0xe8,0x89,0xb9,0x00,0x10,
+	0x08,0x06,0xff,0xe8,0x89,0xb9,0x00,0x06,0xff,0xe8,0x91,0x97,0x00,0xd4,0x75,0xd3,
+	0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x06,0xff,0xe8,0xa4,0x90,0x00,0x06,0xff,0xe8,
+	0xa6,0x96,0x00,0x10,0x08,0x06,0xff,0xe8,0xac,0x81,0x00,0x06,0xff,0xe8,0xac,0xb9,
+	0x00,0xd1,0x10,0x10,0x08,0x06,0xff,0xe8,0xb3,0x93,0x00,0x06,0xff,0xe8,0xb4,0x88,
+	0x00,0x10,0x08,0x06,0xff,0xe8,0xbe,0xb6,0x00,0x06,0xff,0xe9,0x80,0xb8,0x00,0xd2,
+	0x20,0xd1,0x10,0x10,0x08,0x06,0xff,0xe9,0x9b,0xa3,0x00,0x06,0xff,0xe9,0x9f,0xbf,
+	0x00,0x10,0x08,0x06,0xff,0xe9,0xa0,0xbb,0x00,0x0b,0xff,0xe6,0x81,0xb5,0x00,0x91,
+	0x11,0x10,0x09,0x0b,0xff,0xf0,0xa4,0x8b,0xae,0x00,0x0b,0xff,0xe8,0x88,0x98,0x00,
+	0x00,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x08,0xff,0xe4,0xb8,0xa6,0x00,
+	0x08,0xff,0xe5,0x86,0xb5,0x00,0x10,0x08,0x08,0xff,0xe5,0x85,0xa8,0x00,0x08,0xff,
+	0xe4,0xbe,0x80,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,0xe5,0x85,0x85,0x00,0x08,0xff,
+	0xe5,0x86,0x80,0x00,0x10,0x08,0x08,0xff,0xe5,0x8b,0x87,0x00,0x08,0xff,0xe5,0x8b,
+	0xba,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x08,0xff,0xe5,0x96,0x9d,0x00,0x08,0xff,
+	0xe5,0x95,0x95,0x00,0x10,0x08,0x08,0xff,0xe5,0x96,0x99,0x00,0x08,0xff,0xe5,0x97,
+	0xa2,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,0xe5,0xa1,0x9a,0x00,0x08,0xff,0xe5,0xa2,
+	0xb3,0x00,0x10,0x08,0x08,0xff,0xe5,0xa5,0x84,0x00,0x08,0xff,0xe5,0xa5,0x94,0x00,
+	0xe0,0x04,0x02,0xcf,0x86,0xe5,0x01,0x01,0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,
+	0x10,0x08,0x08,0xff,0xe5,0xa9,0xa2,0x00,0x08,0xff,0xe5,0xac,0xa8,0x00,0x10,0x08,
+	0x08,0xff,0xe5,0xbb,0x92,0x00,0x08,0xff,0xe5,0xbb,0x99,0x00,0xd1,0x10,0x10,0x08,
+	0x08,0xff,0xe5,0xbd,0xa9,0x00,0x08,0xff,0xe5,0xbe,0xad,0x00,0x10,0x08,0x08,0xff,
+	0xe6,0x83,0x98,0x00,0x08,0xff,0xe6,0x85,0x8e,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,
+	0x08,0xff,0xe6,0x84,0x88,0x00,0x08,0xff,0xe6,0x86,0x8e,0x00,0x10,0x08,0x08,0xff,
+	0xe6,0x85,0xa0,0x00,0x08,0xff,0xe6,0x87,0xb2,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,
+	0xe6,0x88,0xb4,0x00,0x08,0xff,0xe6,0x8f,0x84,0x00,0x10,0x08,0x08,0xff,0xe6,0x90,
+	0x9c,0x00,0x08,0xff,0xe6,0x91,0x92,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,
+	0x08,0xff,0xe6,0x95,0x96,0x00,0x08,0xff,0xe6,0x99,0xb4,0x00,0x10,0x08,0x08,0xff,
+	0xe6,0x9c,0x97,0x00,0x08,0xff,0xe6,0x9c,0x9b,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,
+	0xe6,0x9d,0x96,0x00,0x08,0xff,0xe6,0xad,0xb9,0x00,0x10,0x08,0x08,0xff,0xe6,0xae,
+	0xba,0x00,0x08,0xff,0xe6,0xb5,0x81,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x08,0xff,
+	0xe6,0xbb,0x9b,0x00,0x08,0xff,0xe6,0xbb,0x8b,0x00,0x10,0x08,0x08,0xff,0xe6,0xbc,
+	0xa2,0x00,0x08,0xff,0xe7,0x80,0x9e,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,0xe7,0x85,
+	0xae,0x00,0x08,0xff,0xe7,0x9e,0xa7,0x00,0x10,0x08,0x08,0xff,0xe7,0x88,0xb5,0x00,
+	0x08,0xff,0xe7,0x8a,0xaf,0x00,0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,
+	0x08,0xff,0xe7,0x8c,0xaa,0x00,0x08,0xff,0xe7,0x91,0xb1,0x00,0x10,0x08,0x08,0xff,
+	0xe7,0x94,0x86,0x00,0x08,0xff,0xe7,0x94,0xbb,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,
+	0xe7,0x98,0x9d,0x00,0x08,0xff,0xe7,0x98,0x9f,0x00,0x10,0x08,0x08,0xff,0xe7,0x9b,
+	0x8a,0x00,0x08,0xff,0xe7,0x9b,0x9b,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x08,0xff,
+	0xe7,0x9b,0xb4,0x00,0x08,0xff,0xe7,0x9d,0x8a,0x00,0x10,0x08,0x08,0xff,0xe7,0x9d,
+	0x80,0x00,0x08,0xff,0xe7,0xa3,0x8c,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,0xe7,0xaa,
+	0xb1,0x00,0x08,0xff,0xe7,0xaf,0x80,0x00,0x10,0x08,0x08,0xff,0xe7,0xb1,0xbb,0x00,
+	0x08,0xff,0xe7,0xb5,0x9b,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x08,0xff,
+	0xe7,0xb7,0xb4,0x00,0x08,0xff,0xe7,0xbc,0xbe,0x00,0x10,0x08,0x08,0xff,0xe8,0x80,
+	0x85,0x00,0x08,0xff,0xe8,0x8d,0x92,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,0xe8,0x8f,
+	0xaf,0x00,0x08,0xff,0xe8,0x9d,0xb9,0x00,0x10,0x08,0x08,0xff,0xe8,0xa5,0x81,0x00,
+	0x08,0xff,0xe8,0xa6,0x86,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x08,0xff,0xe8,0xa6,
+	0x96,0x00,0x08,0xff,0xe8,0xaa,0xbf,0x00,0x10,0x08,0x08,0xff,0xe8,0xab,0xb8,0x00,
+	0x08,0xff,0xe8,0xab,0x8b,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,0xe8,0xac,0x81,0x00,
+	0x08,0xff,0xe8,0xab,0xbe,0x00,0x10,0x08,0x08,0xff,0xe8,0xab,0xad,0x00,0x08,0xff,
+	0xe8,0xac,0xb9,0x00,0xcf,0x86,0x95,0xde,0xd4,0x81,0xd3,0x40,0xd2,0x20,0xd1,0x10,
+	0x10,0x08,0x08,0xff,0xe8,0xae,0x8a,0x00,0x08,0xff,0xe8,0xb4,0x88,0x00,0x10,0x08,
+	0x08,0xff,0xe8,0xbc,0xb8,0x00,0x08,0xff,0xe9,0x81,0xb2,0x00,0xd1,0x10,0x10,0x08,
+	0x08,0xff,0xe9,0x86,0x99,0x00,0x08,0xff,0xe9,0x89,0xb6,0x00,0x10,0x08,0x08,0xff,
+	0xe9,0x99,0xbc,0x00,0x08,0xff,0xe9,0x9b,0xa3,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,
+	0x08,0xff,0xe9,0x9d,0x96,0x00,0x08,0xff,0xe9,0x9f,0x9b,0x00,0x10,0x08,0x08,0xff,
+	0xe9,0x9f,0xbf,0x00,0x08,0xff,0xe9,0xa0,0x8b,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,
+	0xe9,0xa0,0xbb,0x00,0x08,0xff,0xe9,0xac,0x92,0x00,0x10,0x08,0x08,0xff,0xe9,0xbe,
+	0x9c,0x00,0x08,0xff,0xf0,0xa2,0xa1,0x8a,0x00,0xd3,0x45,0xd2,0x22,0xd1,0x12,0x10,
+	0x09,0x08,0xff,0xf0,0xa2,0xa1,0x84,0x00,0x08,0xff,0xf0,0xa3,0x8f,0x95,0x00,0x10,
+	0x08,0x08,0xff,0xe3,0xae,0x9d,0x00,0x08,0xff,0xe4,0x80,0x98,0x00,0xd1,0x11,0x10,
+	0x08,0x08,0xff,0xe4,0x80,0xb9,0x00,0x08,0xff,0xf0,0xa5,0x89,0x89,0x00,0x10,0x09,
+	0x08,0xff,0xf0,0xa5,0xb3,0x90,0x00,0x08,0xff,0xf0,0xa7,0xbb,0x93,0x00,0x92,0x14,
+	0x91,0x10,0x10,0x08,0x08,0xff,0xe9,0xbd,0x83,0x00,0x08,0xff,0xe9,0xbe,0x8e,0x00,
+	0x00,0x00,0x00,0x00,0x00,0x00,0xe1,0x94,0x01,0xe0,0x08,0x01,0xcf,0x86,0xd5,0x42,
+	0xd4,0x14,0x93,0x10,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,
+	0x00,0x00,0x00,0x00,0xd3,0x10,0x92,0x0c,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,
+	0x01,0x00,0x01,0x00,0x52,0x04,0x00,0x00,0xd1,0x0d,0x10,0x04,0x00,0x00,0x04,0xff,
+	0xd7,0x99,0xd6,0xb4,0x00,0x10,0x04,0x01,0x1a,0x01,0xff,0xd7,0xb2,0xd6,0xb7,0x00,
+	0xd4,0x42,0x53,0x04,0x01,0x00,0xd2,0x16,0x51,0x04,0x01,0x00,0x10,0x09,0x01,0xff,
+	0xd7,0xa9,0xd7,0x81,0x00,0x01,0xff,0xd7,0xa9,0xd7,0x82,0x00,0xd1,0x16,0x10,0x0b,
+	0x01,0xff,0xd7,0xa9,0xd6,0xbc,0xd7,0x81,0x00,0x01,0xff,0xd7,0xa9,0xd6,0xbc,0xd7,
+	0x82,0x00,0x10,0x09,0x01,0xff,0xd7,0x90,0xd6,0xb7,0x00,0x01,0xff,0xd7,0x90,0xd6,
+	0xb8,0x00,0xd3,0x43,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff,0xd7,0x90,0xd6,0xbc,
+	0x00,0x01,0xff,0xd7,0x91,0xd6,0xbc,0x00,0x10,0x09,0x01,0xff,0xd7,0x92,0xd6,0xbc,
+	0x00,0x01,0xff,0xd7,0x93,0xd6,0xbc,0x00,0xd1,0x12,0x10,0x09,0x01,0xff,0xd7,0x94,
+	0xd6,0xbc,0x00,0x01,0xff,0xd7,0x95,0xd6,0xbc,0x00,0x10,0x09,0x01,0xff,0xd7,0x96,
+	0xd6,0xbc,0x00,0x00,0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff,0xd7,0x98,0xd6,
+	0xbc,0x00,0x01,0xff,0xd7,0x99,0xd6,0xbc,0x00,0x10,0x09,0x01,0xff,0xd7,0x9a,0xd6,
+	0xbc,0x00,0x01,0xff,0xd7,0x9b,0xd6,0xbc,0x00,0xd1,0x0d,0x10,0x09,0x01,0xff,0xd7,
+	0x9c,0xd6,0xbc,0x00,0x00,0x00,0x10,0x09,0x01,0xff,0xd7,0x9e,0xd6,0xbc,0x00,0x00,
+	0x00,0xcf,0x86,0x95,0x85,0x94,0x81,0xd3,0x3e,0xd2,0x1f,0xd1,0x12,0x10,0x09,0x01,
+	0xff,0xd7,0xa0,0xd6,0xbc,0x00,0x01,0xff,0xd7,0xa1,0xd6,0xbc,0x00,0x10,0x04,0x00,
+	0x00,0x01,0xff,0xd7,0xa3,0xd6,0xbc,0x00,0xd1,0x0d,0x10,0x09,0x01,0xff,0xd7,0xa4,
+	0xd6,0xbc,0x00,0x00,0x00,0x10,0x09,0x01,0xff,0xd7,0xa6,0xd6,0xbc,0x00,0x01,0xff,
+	0xd7,0xa7,0xd6,0xbc,0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff,0xd7,0xa8,0xd6,
+	0xbc,0x00,0x01,0xff,0xd7,0xa9,0xd6,0xbc,0x00,0x10,0x09,0x01,0xff,0xd7,0xaa,0xd6,
+	0xbc,0x00,0x01,0xff,0xd7,0x95,0xd6,0xb9,0x00,0xd1,0x12,0x10,0x09,0x01,0xff,0xd7,
+	0x91,0xd6,0xbf,0x00,0x01,0xff,0xd7,0x9b,0xd6,0xbf,0x00,0x10,0x09,0x01,0xff,0xd7,
+	0xa4,0xd6,0xbf,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd0,0x1a,0xcf,0x86,0x55,0x04,
+	0x01,0x00,0x54,0x04,0x01,0x00,0x93,0x0c,0x92,0x08,0x11,0x04,0x01,0x00,0x0c,0x00,
+	0x0c,0x00,0x0c,0x00,0xcf,0x86,0x95,0x24,0xd4,0x10,0x93,0x0c,0x92,0x08,0x11,0x04,
+	0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x93,0x10,0x92,0x0c,0x51,0x04,0x00,0x00,
+	0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd3,0x5a,0xd2,0x06,
+	0xcf,0x06,0x01,0x00,0xd1,0x14,0xd0,0x06,0xcf,0x06,0x01,0x00,0xcf,0x86,0x95,0x08,
+	0x14,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0xd0,0x1a,0xcf,0x86,0x95,0x14,0x54,0x04,
+	0x01,0x00,0x93,0x0c,0x92,0x08,0x11,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
+	0x01,0x00,0xcf,0x86,0xd5,0x0c,0x94,0x08,0x13,0x04,0x01,0x00,0x00,0x00,0x05,0x00,
+	0x54,0x04,0x05,0x00,0x53,0x04,0x01,0x00,0x52,0x04,0x01,0x00,0x91,0x08,0x10,0x04,
+	0x06,0x00,0x07,0x00,0x00,0x00,0xd2,0xce,0xd1,0xa5,0xd0,0x37,0xcf,0x86,0xd5,0x15,
+	0x54,0x05,0x06,0xff,0x00,0x53,0x04,0x08,0x00,0x92,0x08,0x11,0x04,0x08,0x00,0x00,
+	0x00,0x00,0x00,0x94,0x1c,0xd3,0x10,0x52,0x04,0x01,0xe6,0x51,0x04,0x0a,0xe6,0x10,
+	0x04,0x0a,0xe6,0x10,0xdc,0x52,0x04,0x10,0xdc,0x11,0x04,0x10,0xdc,0x11,0xe6,0x01,
+	0x00,0xcf,0x86,0xd5,0x38,0xd4,0x24,0xd3,0x14,0x52,0x04,0x01,0x00,0xd1,0x08,0x10,
+	0x04,0x01,0x00,0x06,0x00,0x10,0x04,0x06,0x00,0x07,0x00,0x92,0x0c,0x91,0x08,0x10,
+	0x04,0x07,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x93,0x10,0x92,0x0c,0x51,0x04,0x01,
+	0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0xd4,0x18,0xd3,0x10,0x52,
+	0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x12,0x04,0x01,
+	0x00,0x00,0x00,0x93,0x18,0xd2,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x06,
+	0x00,0x91,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0xd0,0x06,0xcf,
+	0x06,0x01,0x00,0xcf,0x86,0x55,0x04,0x01,0x00,0x54,0x04,0x01,0x00,0x53,0x04,0x01,
+	0x00,0x52,0x04,0x01,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x10,0x04,0x00,
+	0x00,0x01,0xff,0x00,0xd1,0x50,0xd0,0x1e,0xcf,0x86,0x95,0x18,0x94,0x14,0x93,0x10,
+	0x92,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
+	0x01,0x00,0x01,0x00,0xcf,0x86,0xd5,0x18,0x54,0x04,0x01,0x00,0x53,0x04,0x01,0x00,
+	0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x06,0x00,0x94,0x14,
+	0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x06,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
+	0x01,0x00,0x01,0x00,0xd0,0x2f,0xcf,0x86,0x55,0x04,0x01,0x00,0xd4,0x15,0x93,0x11,
+	0x92,0x0d,0x91,0x09,0x10,0x05,0x01,0xff,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,
+	0x00,0x53,0x04,0x01,0x00,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,
+	0x00,0x00,0x00,0xcf,0x86,0xd5,0x38,0xd4,0x18,0xd3,0x0c,0x92,0x08,0x11,0x04,0x00,
+	0x00,0x01,0x00,0x01,0x00,0x92,0x08,0x11,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0xd3,
+	0x0c,0x92,0x08,0x11,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0xd2,0x08,0x11,0x04,0x00,
+	0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0xd4,0x20,0xd3,
+	0x10,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x52,
+	0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x53,0x05,0x00,
+	0xff,0x00,0xd2,0x0d,0x91,0x09,0x10,0x05,0x00,0xff,0x00,0x04,0x00,0x04,0x00,0x91,
+	0x08,0x10,0x04,0x03,0x00,0x01,0x00,0x01,0x00,0x83,0xe2,0x46,0x3e,0xe1,0x1f,0x3b,
+	0xe0,0x9c,0x39,0xcf,0x86,0xe5,0x40,0x26,0xc4,0xe3,0x16,0x14,0xe2,0xef,0x11,0xe1,
+	0xd0,0x10,0xe0,0x60,0x07,0xcf,0x86,0xe5,0x53,0x03,0xe4,0x4c,0x02,0xe3,0x3d,0x01,
+	0xd2,0x94,0xd1,0x70,0xd0,0x4a,0xcf,0x86,0xd5,0x18,0x94,0x14,0x53,0x04,0x07,0x00,
+	0x52,0x04,0x07,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x07,0x00,0x07,0x00,0x07,0x00,
+	0xd4,0x14,0x93,0x10,0x52,0x04,0x07,0x00,0x51,0x04,0x07,0x00,0x10,0x04,0x07,0x00,
+	0x00,0x00,0x07,0x00,0x53,0x04,0x07,0x00,0xd2,0x0c,0x51,0x04,0x07,0x00,0x10,0x04,
+	0x07,0x00,0x00,0x00,0x51,0x04,0x07,0x00,0x10,0x04,0x00,0x00,0x07,0x00,0xcf,0x86,
+	0x95,0x20,0xd4,0x10,0x53,0x04,0x07,0x00,0x52,0x04,0x07,0x00,0x11,0x04,0x07,0x00,
+	0x00,0x00,0x53,0x04,0x07,0x00,0x52,0x04,0x07,0x00,0x11,0x04,0x07,0x00,0x00,0x00,
+	0x00,0x00,0xd0,0x06,0xcf,0x06,0x07,0x00,0xcf,0x86,0x55,0x04,0x07,0x00,0x54,0x04,
+	0x07,0x00,0x53,0x04,0x07,0x00,0x92,0x0c,0x51,0x04,0x07,0x00,0x10,0x04,0x07,0x00,
+	0x00,0x00,0x00,0x00,0xd1,0x40,0xd0,0x3a,0xcf,0x86,0xd5,0x20,0x94,0x1c,0x93,0x18,
+	0xd2,0x0c,0x51,0x04,0x07,0x00,0x10,0x04,0x07,0x00,0x00,0x00,0x51,0x04,0x00,0x00,
+	0x10,0x04,0x00,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x54,0x04,0x07,0x00,0x93,0x10,
+	0x52,0x04,0x07,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x07,0x00,0x07,0x00,
+	0xcf,0x06,0x08,0x00,0xd0,0x46,0xcf,0x86,0xd5,0x2c,0xd4,0x20,0x53,0x04,0x08,0x00,
+	0xd2,0x0c,0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x10,0x00,0xd1,0x08,0x10,0x04,
+	0x10,0x00,0x12,0x00,0x10,0x04,0x12,0x00,0x00,0x00,0x53,0x04,0x0a,0x00,0x12,0x04,
+	0x0a,0x00,0x00,0x00,0x94,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x10,0x00,
+	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0xd5,0x08,0x14,0x04,
+	0x00,0x00,0x0a,0x00,0x54,0x04,0x0a,0x00,0x53,0x04,0x0a,0x00,0x52,0x04,0x0a,0x00,
+	0x91,0x08,0x10,0x04,0x0a,0x00,0x0a,0xdc,0x00,0x00,0xd2,0x5e,0xd1,0x06,0xcf,0x06,
+	0x00,0x00,0xd0,0x1e,0xcf,0x86,0x95,0x18,0x54,0x04,0x0a,0x00,0x53,0x04,0x0a,0x00,
+	0x52,0x04,0x0a,0x00,0x91,0x08,0x10,0x04,0x0a,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,
+	0xcf,0x86,0xd5,0x18,0x54,0x04,0x0a,0x00,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,
+	0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd4,0x14,0x93,0x10,0x92,0x0c,
+	0x91,0x08,0x10,0x04,0x10,0xdc,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x53,0x04,
+	0x10,0x00,0x12,0x04,0x10,0x00,0x00,0x00,0xd1,0x70,0xd0,0x36,0xcf,0x86,0xd5,0x18,
+	0x54,0x04,0x05,0x00,0x53,0x04,0x05,0x00,0x52,0x04,0x05,0x00,0x51,0x04,0x05,0x00,
+	0x10,0x04,0x05,0x00,0x10,0x00,0x94,0x18,0xd3,0x08,0x12,0x04,0x05,0x00,0x00,0x00,
+	0x52,0x04,0x00,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x13,0x00,0x13,0x00,0x05,0x00,
+	0xcf,0x86,0xd5,0x18,0x94,0x14,0x53,0x04,0x05,0x00,0x92,0x0c,0x51,0x04,0x05,0x00,
+	0x10,0x04,0x05,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x54,0x04,0x10,0x00,0xd3,0x0c,
+	0x52,0x04,0x10,0x00,0x11,0x04,0x10,0x00,0x10,0xe6,0x92,0x0c,0x51,0x04,0x10,0xe6,
+	0x10,0x04,0x10,0xe6,0x00,0x00,0x00,0x00,0xd0,0x1e,0xcf,0x86,0x95,0x18,0x54,0x04,
+	0x07,0x00,0x53,0x04,0x07,0x00,0x52,0x04,0x07,0x00,0x51,0x04,0x07,0x00,0x10,0x04,
+	0x00,0x00,0x07,0x00,0x08,0x00,0xcf,0x86,0x95,0x1c,0xd4,0x0c,0x93,0x08,0x12,0x04,
+	0x08,0x00,0x00,0x00,0x08,0x00,0x93,0x0c,0x52,0x04,0x08,0x00,0x11,0x04,0x08,0x00,
+	0x00,0x00,0x00,0x00,0x00,0x00,0xd3,0xba,0xd2,0x80,0xd1,0x34,0xd0,0x1a,0xcf,0x86,
+	0x55,0x04,0x05,0x00,0x94,0x10,0x93,0x0c,0x52,0x04,0x05,0x00,0x11,0x04,0x05,0x00,
+	0x07,0x00,0x05,0x00,0x05,0x00,0xcf,0x86,0x95,0x14,0x94,0x10,0x53,0x04,0x05,0x00,
+	0x52,0x04,0x05,0x00,0x11,0x04,0x05,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0xd0,0x2a,
+	0xcf,0x86,0xd5,0x14,0x54,0x04,0x07,0x00,0x53,0x04,0x07,0x00,0x52,0x04,0x07,0x00,
+	0x11,0x04,0x07,0x00,0x00,0x00,0x94,0x10,0x53,0x04,0x07,0x00,0x92,0x08,0x11,0x04,
+	0x07,0x00,0x00,0x00,0x00,0x00,0x12,0x00,0xcf,0x86,0xd5,0x10,0x54,0x04,0x12,0x00,
+	0x93,0x08,0x12,0x04,0x12,0x00,0x00,0x00,0x12,0x00,0x54,0x04,0x12,0x00,0x53,0x04,
+	0x12,0x00,0x12,0x04,0x12,0x00,0x00,0x00,0xd1,0x34,0xd0,0x12,0xcf,0x86,0x55,0x04,
+	0x10,0x00,0x94,0x08,0x13,0x04,0x10,0x00,0x00,0x00,0x10,0x00,0xcf,0x86,0x55,0x04,
+	0x10,0x00,0x94,0x18,0xd3,0x08,0x12,0x04,0x10,0x00,0x00,0x00,0x52,0x04,0x00,0x00,
+	0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x10,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,
+	0xd2,0x06,0xcf,0x06,0x10,0x00,0xd1,0x40,0xd0,0x1e,0xcf,0x86,0x55,0x04,0x10,0x00,
+	0x54,0x04,0x10,0x00,0x93,0x10,0x52,0x04,0x10,0x00,0x51,0x04,0x10,0x00,0x10,0x04,
+	0x10,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0xd5,0x14,0x54,0x04,0x10,0x00,0x93,0x0c,
+	0x52,0x04,0x10,0x00,0x11,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x94,0x08,0x13,0x04,
+	0x10,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xe4,0xce,0x02,0xe3,0x45,0x01,
+	0xd2,0xd0,0xd1,0x70,0xd0,0x52,0xcf,0x86,0xd5,0x20,0x94,0x1c,0xd3,0x0c,0x52,0x04,
+	0x07,0x00,0x11,0x04,0x07,0x00,0x00,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x07,0x00,
+	0x00,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x54,0x04,0x07,0x00,0xd3,0x10,0x52,0x04,
+	0x07,0x00,0x51,0x04,0x07,0x00,0x10,0x04,0x00,0x00,0x07,0x00,0xd2,0x0c,0x91,0x08,
+	0x10,0x04,0x07,0x00,0x00,0x00,0x00,0x00,0xd1,0x08,0x10,0x04,0x07,0x00,0x00,0x00,
+	0x10,0x04,0x00,0x00,0x07,0x00,0xcf,0x86,0x95,0x18,0x54,0x04,0x0b,0x00,0x93,0x10,
+	0x52,0x04,0x0b,0x00,0x51,0x04,0x0b,0x00,0x10,0x04,0x00,0x00,0x0b,0x00,0x0b,0x00,
+	0x10,0x00,0xd0,0x32,0xcf,0x86,0xd5,0x18,0x54,0x04,0x10,0x00,0x53,0x04,0x10,0x00,
+	0x52,0x04,0x10,0x00,0x51,0x04,0x10,0x00,0x10,0x04,0x10,0x00,0x00,0x00,0x94,0x14,
+	0x93,0x10,0x52,0x04,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x10,0x00,
+	0x10,0x00,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x11,0x00,0xd3,0x14,
+	0xd2,0x0c,0x51,0x04,0x11,0x00,0x10,0x04,0x11,0x00,0x00,0x00,0x11,0x04,0x11,0x00,
+	0x00,0x00,0x92,0x0c,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x11,0x00,0x11,0x00,
+	0xd1,0x40,0xd0,0x3a,0xcf,0x86,0xd5,0x1c,0x54,0x04,0x09,0x00,0x53,0x04,0x09,0x00,
+	0xd2,0x08,0x11,0x04,0x09,0x00,0x0b,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,
+	0x09,0x00,0x54,0x04,0x0a,0x00,0x53,0x04,0x0a,0x00,0xd2,0x08,0x11,0x04,0x0a,0x00,
+	0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x0a,0x00,0xcf,0x06,0x00,0x00,
+	0xd0,0x1a,0xcf,0x86,0x55,0x04,0x0d,0x00,0x54,0x04,0x0d,0x00,0x53,0x04,0x0d,0x00,
+	0x52,0x04,0x00,0x00,0x11,0x04,0x11,0x00,0x0d,0x00,0xcf,0x86,0x95,0x14,0x54,0x04,
+	0x11,0x00,0x93,0x0c,0x92,0x08,0x11,0x04,0x00,0x00,0x11,0x00,0x11,0x00,0x11,0x00,
+	0x11,0x00,0xd2,0xec,0xd1,0xa4,0xd0,0x76,0xcf,0x86,0xd5,0x48,0xd4,0x28,0xd3,0x14,
+	0x52,0x04,0x08,0x00,0xd1,0x08,0x10,0x04,0x00,0x00,0x08,0x00,0x10,0x04,0x08,0x00,
+	0x00,0x00,0x52,0x04,0x00,0x00,0xd1,0x08,0x10,0x04,0x08,0x00,0x08,0xdc,0x10,0x04,
+	0x08,0x00,0x08,0xe6,0xd3,0x10,0x52,0x04,0x08,0x00,0x91,0x08,0x10,0x04,0x00,0x00,
+	0x08,0x00,0x08,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x08,0x00,0x08,0x00,
+	0x08,0x00,0x54,0x04,0x08,0x00,0xd3,0x0c,0x52,0x04,0x08,0x00,0x11,0x04,0x14,0x00,
+	0x00,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,0x08,0xe6,0x08,0x01,0x10,0x04,0x08,0xdc,
+	0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x08,0x09,0xcf,0x86,0x95,0x28,
+	0xd4,0x14,0x53,0x04,0x08,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x14,0x00,0x00,0x00,
+	0x00,0x00,0x00,0x00,0x53,0x04,0x08,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x08,0x00,
+	0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0x00,0xd0,0x0a,0xcf,0x86,0x15,0x04,0x10,0x00,
+	0x00,0x00,0xcf,0x86,0x55,0x04,0x10,0x00,0xd4,0x24,0xd3,0x14,0x52,0x04,0x10,0x00,
+	0xd1,0x08,0x10,0x04,0x10,0x00,0x10,0xe6,0x10,0x04,0x10,0xdc,0x00,0x00,0x92,0x0c,
+	0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x10,0x00,0x10,0x00,0x93,0x10,0x52,0x04,
+	0x10,0x00,0x51,0x04,0x10,0x00,0x10,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0xd1,0x54,
+	0xd0,0x26,0xcf,0x86,0x55,0x04,0x0b,0x00,0x54,0x04,0x0b,0x00,0xd3,0x0c,0x52,0x04,
+	0x0b,0x00,0x11,0x04,0x0b,0x00,0x00,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,
+	0x0b,0x00,0x0b,0x00,0x0b,0x00,0xcf,0x86,0xd5,0x14,0x54,0x04,0x0b,0x00,0x93,0x0c,
+	0x52,0x04,0x0b,0x00,0x11,0x04,0x0b,0x00,0x00,0x00,0x0b,0x00,0x54,0x04,0x0b,0x00,
+	0x93,0x10,0x92,0x0c,0x51,0x04,0x0b,0x00,0x10,0x04,0x0b,0x00,0x00,0x00,0x00,0x00,
+	0x0b,0x00,0xd0,0x42,0xcf,0x86,0xd5,0x28,0x54,0x04,0x10,0x00,0xd3,0x0c,0x92,0x08,
+	0x11,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0xd2,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,
+	0x10,0x00,0x10,0x00,0x91,0x08,0x10,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x94,0x14,
+	0x53,0x04,0x00,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x10,0x00,0x10,0x00,
+	0x10,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xd3,0x96,0xd2,0x68,0xd1,0x24,0xd0,0x06,
+	0xcf,0x06,0x0b,0x00,0xcf,0x86,0x95,0x18,0x94,0x14,0x53,0x04,0x0b,0x00,0x92,0x0c,
+	0x91,0x08,0x10,0x04,0x0b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+	0xd0,0x1e,0xcf,0x86,0x55,0x04,0x11,0x00,0x54,0x04,0x11,0x00,0x93,0x10,0x92,0x0c,
+	0x51,0x04,0x11,0x00,0x10,0x04,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,
+	0x55,0x04,0x11,0x00,0x54,0x04,0x11,0x00,0xd3,0x10,0x92,0x0c,0x51,0x04,0x11,0x00,
+	0x10,0x04,0x11,0x00,0x00,0x00,0x00,0x00,0x92,0x08,0x11,0x04,0x00,0x00,0x11,0x00,
+	0x11,0x00,0xd1,0x28,0xd0,0x22,0xcf,0x86,0x55,0x04,0x14,0x00,0xd4,0x0c,0x93,0x08,
+	0x12,0x04,0x14,0x00,0x14,0xe6,0x00,0x00,0x53,0x04,0x14,0x00,0x92,0x08,0x11,0x04,
+	0x14,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xd2,0x2a,
+	0xd1,0x24,0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,
+	0x0b,0x00,0x53,0x04,0x0b,0x00,0x52,0x04,0x0b,0x00,0x51,0x04,0x0b,0x00,0x10,0x04,
+	0x0b,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xd1,0x58,0xd0,0x12,0xcf,0x86,0x55,0x04,
+	0x14,0x00,0x94,0x08,0x13,0x04,0x14,0x00,0x00,0x00,0x14,0x00,0xcf,0x86,0x95,0x40,
+	0xd4,0x24,0xd3,0x0c,0x52,0x04,0x14,0x00,0x11,0x04,0x14,0x00,0x14,0xdc,0xd2,0x0c,
+	0x51,0x04,0x14,0xe6,0x10,0x04,0x14,0xe6,0x14,0xdc,0x91,0x08,0x10,0x04,0x14,0xe6,
+	0x14,0xdc,0x14,0xdc,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x14,0xdc,0x14,0x00,
+	0x14,0x00,0x14,0x00,0x92,0x08,0x11,0x04,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+	0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x15,0x00,
+	0x93,0x10,0x52,0x04,0x15,0x00,0x51,0x04,0x15,0x00,0x10,0x04,0x15,0x00,0x00,0x00,
+	0x00,0x00,0xcf,0x86,0xe5,0x0f,0x06,0xe4,0xf8,0x03,0xe3,0x02,0x02,0xd2,0xfb,0xd1,
+	0x4c,0xd0,0x06,0xcf,0x06,0x0c,0x00,0xcf,0x86,0xd5,0x2c,0xd4,0x1c,0xd3,0x10,0x52,
+	0x04,0x0c,0x00,0x51,0x04,0x0c,0x00,0x10,0x04,0x0c,0x09,0x0c,0x00,0x52,0x04,0x0c,
+	0x00,0x11,0x04,0x0c,0x00,0x00,0x00,0x93,0x0c,0x92,0x08,0x11,0x04,0x00,0x00,0x0c,
+	0x00,0x0c,0x00,0x0c,0x00,0x54,0x04,0x0c,0x00,0x53,0x04,0x00,0x00,0x52,0x04,0x00,
+	0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x10,0x09,0xd0,0x69,0xcf,0x86,0xd5,
+	0x32,0x54,0x04,0x0b,0x00,0x53,0x04,0x0b,0x00,0xd2,0x15,0x51,0x04,0x0b,0x00,0x10,
+	0x0d,0x0b,0xff,0xf0,0x91,0x82,0x99,0xf0,0x91,0x82,0xba,0x00,0x0b,0x00,0x91,0x11,
+	0x10,0x0d,0x0b,0xff,0xf0,0x91,0x82,0x9b,0xf0,0x91,0x82,0xba,0x00,0x0b,0x00,0x0b,
+	0x00,0xd4,0x1d,0x53,0x04,0x0b,0x00,0x92,0x15,0x51,0x04,0x0b,0x00,0x10,0x04,0x0b,
+	0x00,0x0b,0xff,0xf0,0x91,0x82,0xa5,0xf0,0x91,0x82,0xba,0x00,0x0b,0x00,0x53,0x04,
+	0x0b,0x00,0x92,0x10,0xd1,0x08,0x10,0x04,0x0b,0x00,0x0b,0x09,0x10,0x04,0x0b,0x07,
+	0x0b,0x00,0x0b,0x00,0xcf,0x86,0xd5,0x20,0x94,0x1c,0xd3,0x0c,0x92,0x08,0x11,0x04,
+	0x0b,0x00,0x00,0x00,0x00,0x00,0x52,0x04,0x00,0x00,0x91,0x08,0x10,0x04,0x00,0x00,
+	0x14,0x00,0x00,0x00,0x0d,0x00,0xd4,0x14,0x53,0x04,0x0d,0x00,0x92,0x0c,0x91,0x08,
+	0x10,0x04,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x04,0x0d,0x00,0x92,0x08,
+	0x11,0x04,0x0d,0x00,0x00,0x00,0x00,0x00,0xd1,0x96,0xd0,0x5c,0xcf,0x86,0xd5,0x18,
+	0x94,0x14,0x93,0x10,0x92,0x0c,0x51,0x04,0x0d,0xe6,0x10,0x04,0x0d,0xe6,0x0d,0x00,
+	0x0d,0x00,0x0d,0x00,0x0d,0x00,0xd4,0x26,0x53,0x04,0x0d,0x00,0x52,0x04,0x0d,0x00,
+	0x51,0x04,0x0d,0x00,0x10,0x0d,0x0d,0xff,0xf0,0x91,0x84,0xb1,0xf0,0x91,0x84,0xa7,
+	0x00,0x0d,0xff,0xf0,0x91,0x84,0xb2,0xf0,0x91,0x84,0xa7,0x00,0x93,0x18,0xd2,0x0c,
+	0x51,0x04,0x0d,0x00,0x10,0x04,0x0d,0x00,0x0d,0x09,0x91,0x08,0x10,0x04,0x0d,0x09,
+	0x00,0x00,0x0d,0x00,0x0d,0x00,0xcf,0x86,0xd5,0x18,0x94,0x14,0x93,0x10,0x52,0x04,
+	0x0d,0x00,0x51,0x04,0x14,0x00,0x10,0x04,0x14,0x00,0x00,0x00,0x00,0x00,0x10,0x00,
+	0x54,0x04,0x10,0x00,0x93,0x18,0xd2,0x0c,0x51,0x04,0x10,0x00,0x10,0x04,0x10,0x00,
+	0x10,0x07,0x51,0x04,0x10,0x00,0x10,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0xd0,0x06,
+	0xcf,0x06,0x0d,0x00,0xcf,0x86,0xd5,0x40,0xd4,0x2c,0xd3,0x10,0x92,0x0c,0x91,0x08,
+	0x10,0x04,0x0d,0x09,0x0d,0x00,0x0d,0x00,0x0d,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,
+	0x0d,0x00,0x11,0x00,0x10,0x04,0x11,0x07,0x11,0x00,0x91,0x08,0x10,0x04,0x11,0x00,
+	0x10,0x00,0x00,0x00,0x53,0x04,0x0d,0x00,0x92,0x0c,0x51,0x04,0x0d,0x00,0x10,0x04,
+	0x10,0x00,0x11,0x00,0x11,0x00,0xd4,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,
+	0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x93,0x10,0x52,0x04,0x10,0x00,
+	0x91,0x08,0x10,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd2,0xc8,0xd1,0x48,
+	0xd0,0x42,0xcf,0x86,0xd5,0x18,0x54,0x04,0x10,0x00,0x93,0x10,0x92,0x0c,0x51,0x04,
+	0x10,0x00,0x10,0x04,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x54,0x04,0x10,0x00,
+	0xd3,0x14,0x52,0x04,0x10,0x00,0xd1,0x08,0x10,0x04,0x10,0x00,0x10,0x09,0x10,0x04,
+	0x10,0x07,0x10,0x00,0x52,0x04,0x10,0x00,0x51,0x04,0x10,0x00,0x10,0x04,0x12,0x00,
+	0x00,0x00,0xcf,0x06,0x00,0x00,0xd0,0x52,0xcf,0x86,0xd5,0x3c,0xd4,0x28,0xd3,0x10,
+	0x52,0x04,0x11,0x00,0x51,0x04,0x11,0x00,0x10,0x04,0x11,0x00,0x00,0x00,0xd2,0x0c,
+	0x91,0x08,0x10,0x04,0x11,0x00,0x00,0x00,0x11,0x00,0x51,0x04,0x11,0x00,0x10,0x04,
+	0x00,0x00,0x11,0x00,0x53,0x04,0x11,0x00,0x52,0x04,0x11,0x00,0x51,0x04,0x11,0x00,
+	0x10,0x04,0x00,0x00,0x11,0x00,0x94,0x10,0x53,0x04,0x11,0x00,0x92,0x08,0x11,0x04,
+	0x11,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0xcf,0x86,0x55,0x04,0x10,0x00,0xd4,0x18,
+	0x53,0x04,0x10,0x00,0x92,0x10,0xd1,0x08,0x10,0x04,0x10,0x00,0x10,0x07,0x10,0x04,
+	0x10,0x09,0x00,0x00,0x00,0x00,0x53,0x04,0x10,0x00,0x92,0x08,0x11,0x04,0x10,0x00,
+	0x00,0x00,0x00,0x00,0xe1,0x27,0x01,0xd0,0x8a,0xcf,0x86,0xd5,0x44,0xd4,0x2c,0xd3,
+	0x18,0xd2,0x0c,0x91,0x08,0x10,0x04,0x11,0x00,0x10,0x00,0x10,0x00,0x91,0x08,0x10,
+	0x04,0x00,0x00,0x10,0x00,0x10,0x00,0x52,0x04,0x10,0x00,0xd1,0x08,0x10,0x04,0x10,
+	0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x10,0x00,0x93,0x14,0x92,0x10,0xd1,0x08,0x10,
+	0x04,0x10,0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0xd4,
+	0x14,0x53,0x04,0x10,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x10,0x00,0x00,0x00,0x10,
+	0x00,0x10,0x00,0xd3,0x18,0xd2,0x0c,0x91,0x08,0x10,0x04,0x10,0x00,0x00,0x00,0x10,
+	0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x10,0x00,0x10,0x00,0xd2,0x0c,0x51,0x04,0x10,
+	0x00,0x10,0x04,0x00,0x00,0x14,0x07,0x91,0x08,0x10,0x04,0x10,0x07,0x10,0x00,0x10,
+	0x00,0xcf,0x86,0xd5,0x6a,0xd4,0x42,0xd3,0x14,0x52,0x04,0x10,0x00,0xd1,0x08,0x10,
+	0x04,0x10,0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x10,0x00,0xd2,0x19,0xd1,0x08,0x10,
+	0x04,0x10,0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x10,0xff,0xf0,0x91,0x8d,0x87,0xf0,
+	0x91,0x8c,0xbe,0x00,0x91,0x11,0x10,0x0d,0x10,0xff,0xf0,0x91,0x8d,0x87,0xf0,0x91,
+	0x8d,0x97,0x00,0x10,0x09,0x00,0x00,0xd3,0x18,0xd2,0x0c,0x91,0x08,0x10,0x04,0x11,
+	0x00,0x00,0x00,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x10,0x00,0x52,
+	0x04,0x00,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x10,0x00,0x10,0x00,0xd4,0x1c,0xd3,
+	0x0c,0x52,0x04,0x10,0x00,0x11,0x04,0x00,0x00,0x10,0xe6,0x52,0x04,0x10,0xe6,0x91,
+	0x08,0x10,0x04,0x10,0xe6,0x00,0x00,0x00,0x00,0x93,0x10,0x52,0x04,0x10,0xe6,0x91,
+	0x08,0x10,0x04,0x10,0xe6,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xe3,
+	0x30,0x01,0xd2,0xb7,0xd1,0x48,0xd0,0x06,0xcf,0x06,0x12,0x00,0xcf,0x86,0x95,0x3c,
+	0xd4,0x1c,0x93,0x18,0xd2,0x0c,0x51,0x04,0x12,0x00,0x10,0x04,0x12,0x09,0x12,0x00,
+	0x51,0x04,0x12,0x00,0x10,0x04,0x12,0x07,0x12,0x00,0x12,0x00,0x53,0x04,0x12,0x00,
+	0xd2,0x0c,0x51,0x04,0x12,0x00,0x10,0x04,0x00,0x00,0x12,0x00,0xd1,0x08,0x10,0x04,
+	0x00,0x00,0x12,0x00,0x10,0x04,0x14,0xe6,0x15,0x00,0x00,0x00,0xd0,0x45,0xcf,0x86,
+	0x55,0x04,0x10,0x00,0x54,0x04,0x10,0x00,0x53,0x04,0x10,0x00,0xd2,0x15,0x51,0x04,
+	0x10,0x00,0x10,0x04,0x10,0x00,0x10,0xff,0xf0,0x91,0x92,0xb9,0xf0,0x91,0x92,0xba,
+	0x00,0xd1,0x11,0x10,0x0d,0x10,0xff,0xf0,0x91,0x92,0xb9,0xf0,0x91,0x92,0xb0,0x00,
+	0x10,0x00,0x10,0x0d,0x10,0xff,0xf0,0x91,0x92,0xb9,0xf0,0x91,0x92,0xbd,0x00,0x10,
+	0x00,0xcf,0x86,0x95,0x24,0xd4,0x14,0x93,0x10,0x92,0x0c,0x51,0x04,0x10,0x00,0x10,
+	0x04,0x10,0x09,0x10,0x07,0x10,0x00,0x00,0x00,0x53,0x04,0x10,0x00,0x92,0x08,0x11,
+	0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd1,0x06,0xcf,0x06,0x00,0x00,0xd0,
+	0x40,0xcf,0x86,0x55,0x04,0x10,0x00,0x54,0x04,0x10,0x00,0xd3,0x0c,0x52,0x04,0x10,
+	0x00,0x11,0x04,0x10,0x00,0x00,0x00,0xd2,0x1e,0x51,0x04,0x10,0x00,0x10,0x0d,0x10,
+	0xff,0xf0,0x91,0x96,0xb8,0xf0,0x91,0x96,0xaf,0x00,0x10,0xff,0xf0,0x91,0x96,0xb9,
+	0xf0,0x91,0x96,0xaf,0x00,0x51,0x04,0x10,0x00,0x10,0x04,0x10,0x00,0x10,0x09,0xcf,
+	0x86,0x95,0x2c,0xd4,0x1c,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x10,0x07,0x10,
+	0x00,0x10,0x00,0x10,0x00,0x92,0x08,0x11,0x04,0x10,0x00,0x11,0x00,0x11,0x00,0x53,
+	0x04,0x11,0x00,0x52,0x04,0x11,0x00,0x11,0x04,0x11,0x00,0x00,0x00,0x00,0x00,0xd2,
+	0xa0,0xd1,0x5c,0xd0,0x1e,0xcf,0x86,0x55,0x04,0x10,0x00,0x54,0x04,0x10,0x00,0x53,
+	0x04,0x10,0x00,0x52,0x04,0x10,0x00,0x51,0x04,0x10,0x00,0x10,0x04,0x10,0x00,0x10,
+	0x09,0xcf,0x86,0xd5,0x24,0xd4,0x14,0x93,0x10,0x52,0x04,0x10,0x00,0x91,0x08,0x10,
+	0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x04,0x10,0x00,0x92,0x08,0x11,
+	0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x94,0x14,0x53,0x04,0x12,0x00,0x52,0x04,0x12,
+	0x00,0x91,0x08,0x10,0x04,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd0,0x2a,0xcf,
+	0x86,0x55,0x04,0x0d,0x00,0x54,0x04,0x0d,0x00,0xd3,0x10,0x52,0x04,0x0d,0x00,0x51,
+	0x04,0x0d,0x00,0x10,0x04,0x0d,0x09,0x0d,0x07,0x92,0x0c,0x91,0x08,0x10,0x04,0x15,
+	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0x95,0x14,0x94,0x10,0x53,0x04,0x0d,
+	0x00,0x92,0x08,0x11,0x04,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd1,
+	0x40,0xd0,0x3a,0xcf,0x86,0xd5,0x20,0x54,0x04,0x11,0x00,0x53,0x04,0x11,0x00,0xd2,
+	0x0c,0x51,0x04,0x11,0x00,0x10,0x04,0x14,0x00,0x00,0x00,0x91,0x08,0x10,0x04,0x00,
+	0x00,0x11,0x00,0x11,0x00,0x94,0x14,0x53,0x04,0x11,0x00,0x92,0x0c,0x51,0x04,0x11,
+	0x00,0x10,0x04,0x11,0x00,0x11,0x09,0x00,0x00,0x11,0x00,0xcf,0x06,0x00,0x00,0xcf,
+	0x06,0x00,0x00,0xe4,0x59,0x01,0xd3,0xb2,0xd2,0x5c,0xd1,0x28,0xd0,0x22,0xcf,0x86,
+	0x55,0x04,0x14,0x00,0x54,0x04,0x14,0x00,0x53,0x04,0x14,0x00,0x92,0x10,0xd1,0x08,
+	0x10,0x04,0x14,0x00,0x14,0x09,0x10,0x04,0x14,0x07,0x14,0x00,0x00,0x00,0xcf,0x06,
+	0x00,0x00,0xd0,0x0a,0xcf,0x86,0x15,0x04,0x00,0x00,0x10,0x00,0xcf,0x86,0x55,0x04,
+	0x10,0x00,0x54,0x04,0x10,0x00,0xd3,0x10,0x92,0x0c,0x51,0x04,0x10,0x00,0x10,0x04,
+	0x10,0x00,0x00,0x00,0x00,0x00,0x52,0x04,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,
+	0x00,0x00,0x10,0x00,0xd1,0x06,0xcf,0x06,0x00,0x00,0xd0,0x1a,0xcf,0x86,0x55,0x04,
+	0x00,0x00,0x94,0x10,0x53,0x04,0x15,0x00,0x92,0x08,0x11,0x04,0x00,0x00,0x15,0x00,
+	0x15,0x00,0x15,0x00,0xcf,0x86,0xd5,0x14,0x54,0x04,0x15,0x00,0x53,0x04,0x15,0x00,
+	0x92,0x08,0x11,0x04,0x00,0x00,0x15,0x00,0x15,0x00,0x94,0x1c,0x93,0x18,0xd2,0x0c,
+	0x91,0x08,0x10,0x04,0x15,0x09,0x15,0x00,0x15,0x00,0x91,0x08,0x10,0x04,0x15,0x00,
+	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd2,0xa0,0xd1,0x3c,0xd0,0x1e,0xcf,0x86,
+	0x55,0x04,0x13,0x00,0x54,0x04,0x13,0x00,0x93,0x10,0x52,0x04,0x13,0x00,0x91,0x08,
+	0x10,0x04,0x13,0x09,0x13,0x00,0x13,0x00,0x13,0x00,0xcf,0x86,0x95,0x18,0x94,0x14,
+	0x93,0x10,0x52,0x04,0x13,0x00,0x51,0x04,0x13,0x00,0x10,0x04,0x13,0x00,0x13,0x09,
+	0x00,0x00,0x13,0x00,0x13,0x00,0xd0,0x46,0xcf,0x86,0xd5,0x2c,0xd4,0x10,0x93,0x0c,
+	0x52,0x04,0x13,0x00,0x11,0x04,0x15,0x00,0x13,0x00,0x13,0x00,0x53,0x04,0x13,0x00,
+	0xd2,0x0c,0x91,0x08,0x10,0x04,0x13,0x00,0x13,0x09,0x13,0x00,0x91,0x08,0x10,0x04,
+	0x13,0x00,0x14,0x00,0x13,0x00,0x94,0x14,0x93,0x10,0x92,0x0c,0x51,0x04,0x13,0x00,
+	0x10,0x04,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0x55,0x04,
+	0x10,0x00,0x54,0x04,0x10,0x00,0x53,0x04,0x10,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,
+	0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xe3,0xa9,0x01,0xd2,
+	0xb0,0xd1,0x6c,0xd0,0x3e,0xcf,0x86,0xd5,0x18,0x94,0x14,0x53,0x04,0x12,0x00,0x92,
+	0x0c,0x91,0x08,0x10,0x04,0x12,0x00,0x00,0x00,0x12,0x00,0x12,0x00,0x12,0x00,0x54,
+	0x04,0x12,0x00,0xd3,0x10,0x52,0x04,0x12,0x00,0x51,0x04,0x12,0x00,0x10,0x04,0x12,
+	0x00,0x00,0x00,0x52,0x04,0x12,0x00,0x51,0x04,0x12,0x00,0x10,0x04,0x12,0x00,0x12,
+	0x09,0xcf,0x86,0xd5,0x14,0x94,0x10,0x93,0x0c,0x52,0x04,0x12,0x00,0x11,0x04,0x12,
+	0x00,0x00,0x00,0x00,0x00,0x12,0x00,0x94,0x14,0x53,0x04,0x12,0x00,0x52,0x04,0x12,
+	0x00,0x91,0x08,0x10,0x04,0x12,0x00,0x00,0x00,0x00,0x00,0x12,0x00,0xd0,0x3e,0xcf,
+	0x86,0xd5,0x14,0x54,0x04,0x12,0x00,0x93,0x0c,0x92,0x08,0x11,0x04,0x00,0x00,0x12,
+	0x00,0x12,0x00,0x12,0x00,0xd4,0x14,0x53,0x04,0x12,0x00,0x92,0x0c,0x91,0x08,0x10,
+	0x04,0x00,0x00,0x12,0x00,0x12,0x00,0x12,0x00,0x93,0x10,0x52,0x04,0x12,0x00,0x51,
+	0x04,0x12,0x00,0x10,0x04,0x12,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xd1,
+	0xa0,0xd0,0x52,0xcf,0x86,0xd5,0x24,0x94,0x20,0xd3,0x10,0x52,0x04,0x13,0x00,0x51,
+	0x04,0x13,0x00,0x10,0x04,0x13,0x00,0x00,0x00,0x92,0x0c,0x51,0x04,0x13,0x00,0x10,
+	0x04,0x00,0x00,0x13,0x00,0x13,0x00,0x13,0x00,0x54,0x04,0x13,0x00,0xd3,0x10,0x52,
+	0x04,0x13,0x00,0x51,0x04,0x13,0x00,0x10,0x04,0x13,0x00,0x00,0x00,0xd2,0x0c,0x51,
+	0x04,0x00,0x00,0x10,0x04,0x13,0x00,0x00,0x00,0x51,0x04,0x13,0x00,0x10,0x04,0x00,
+	0x00,0x13,0x00,0xcf,0x86,0xd5,0x28,0xd4,0x18,0x93,0x14,0xd2,0x0c,0x51,0x04,0x13,
+	0x00,0x10,0x04,0x13,0x07,0x13,0x00,0x11,0x04,0x13,0x09,0x13,0x00,0x00,0x00,0x53,
+	0x04,0x13,0x00,0x92,0x08,0x11,0x04,0x13,0x00,0x00,0x00,0x00,0x00,0x94,0x20,0xd3,
+	0x10,0x52,0x04,0x14,0x00,0x51,0x04,0x14,0x00,0x10,0x04,0x00,0x00,0x14,0x00,0x92,
+	0x0c,0x91,0x08,0x10,0x04,0x14,0x00,0x00,0x00,0x14,0x00,0x14,0x00,0x14,0x00,0xd0,
+	0x52,0xcf,0x86,0xd5,0x3c,0xd4,0x14,0x53,0x04,0x14,0x00,0x52,0x04,0x14,0x00,0x51,
+	0x04,0x14,0x00,0x10,0x04,0x14,0x00,0x00,0x00,0xd3,0x18,0xd2,0x0c,0x51,0x04,0x14,
+	0x00,0x10,0x04,0x00,0x00,0x14,0x00,0x51,0x04,0x14,0x00,0x10,0x04,0x14,0x00,0x14,
+	0x09,0x92,0x0c,0x91,0x08,0x10,0x04,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x94,
+	0x10,0x53,0x04,0x14,0x00,0x92,0x08,0x11,0x04,0x14,0x00,0x00,0x00,0x00,0x00,0x00,
+	0x00,0xcf,0x06,0x00,0x00,0xd2,0x2a,0xd1,0x06,0xcf,0x06,0x00,0x00,0xd0,0x06,0xcf,
+	0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x14,0x00,0x53,0x04,0x14,
+	0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd1,
+	0x06,0xcf,0x06,0x00,0x00,0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x15,
+	0x00,0x54,0x04,0x15,0x00,0xd3,0x0c,0x92,0x08,0x11,0x04,0x15,0x00,0x00,0x00,0x00,
+	0x00,0x52,0x04,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x15,0x00,0xd0,
+	0xca,0xcf,0x86,0xd5,0xc2,0xd4,0x54,0xd3,0x06,0xcf,0x06,0x09,0x00,0xd2,0x06,0xcf,
+	0x06,0x09,0x00,0xd1,0x24,0xd0,0x06,0xcf,0x06,0x09,0x00,0xcf,0x86,0x55,0x04,0x09,
+	0x00,0x94,0x14,0x53,0x04,0x09,0x00,0x52,0x04,0x09,0x00,0x51,0x04,0x09,0x00,0x10,
+	0x04,0x09,0x00,0x10,0x00,0x10,0x00,0xd0,0x1e,0xcf,0x86,0x95,0x18,0x54,0x04,0x10,
+	0x00,0x53,0x04,0x10,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x10,0x00,0x11,0x00,0x00,
+	0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xd3,0x68,0xd2,0x46,0xd1,0x40,0xd0,
+	0x06,0xcf,0x06,0x09,0x00,0xcf,0x86,0x55,0x04,0x09,0x00,0xd4,0x20,0xd3,0x10,0x92,
+	0x0c,0x51,0x04,0x09,0x00,0x10,0x04,0x09,0x00,0x10,0x00,0x10,0x00,0x52,0x04,0x10,
+	0x00,0x51,0x04,0x10,0x00,0x10,0x04,0x10,0x00,0x00,0x00,0x93,0x10,0x52,0x04,0x09,
+	0x00,0x91,0x08,0x10,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x11,
+	0x00,0xd1,0x1c,0xd0,0x06,0xcf,0x06,0x11,0x00,0xcf,0x86,0x95,0x10,0x94,0x0c,0x93,
+	0x08,0x12,0x04,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,
+	0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x86,0xd5,0x4c,0xd4,0x06,0xcf,
+	0x06,0x0b,0x00,0xd3,0x40,0xd2,0x3a,0xd1,0x34,0xd0,0x2e,0xcf,0x86,0x55,0x04,0x0b,
+	0x00,0xd4,0x14,0x53,0x04,0x0b,0x00,0x52,0x04,0x0b,0x00,0x51,0x04,0x0b,0x00,0x10,
+	0x04,0x0b,0x00,0x00,0x00,0x53,0x04,0x15,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x15,
+	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,
+	0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xd1,0x4c,0xd0,0x44,0xcf,
+	0x86,0xd5,0x3c,0xd4,0x06,0xcf,0x06,0x00,0x00,0xd3,0x06,0xcf,0x06,0x11,0x00,0xd2,
+	0x2a,0xd1,0x24,0xd0,0x06,0xcf,0x06,0x11,0x00,0xcf,0x86,0x95,0x18,0x94,0x14,0x93,
+	0x10,0x52,0x04,0x11,0x00,0x51,0x04,0x11,0x00,0x10,0x04,0x11,0x00,0x00,0x00,0x00,
+	0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,
+	0x00,0xcf,0x86,0xcf,0x06,0x00,0x00,0xe0,0xd2,0x01,0xcf,0x86,0xd5,0x06,0xcf,0x06,
+	0x00,0x00,0xe4,0x0b,0x01,0xd3,0x06,0xcf,0x06,0x0c,0x00,0xd2,0x84,0xd1,0x50,0xd0,
+	0x1e,0xcf,0x86,0x55,0x04,0x0c,0x00,0x54,0x04,0x0c,0x00,0x53,0x04,0x0c,0x00,0x92,
+	0x0c,0x91,0x08,0x10,0x04,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0xd5,
+	0x18,0x54,0x04,0x10,0x00,0x53,0x04,0x10,0x00,0x52,0x04,0x10,0x00,0x51,0x04,0x10,
+	0x00,0x10,0x04,0x10,0x00,0x00,0x00,0x94,0x14,0x53,0x04,0x10,0x00,0xd2,0x08,0x11,
+	0x04,0x10,0x00,0x00,0x00,0x11,0x04,0x00,0x00,0x10,0x00,0x00,0x00,0xd0,0x06,0xcf,
+	0x06,0x00,0x00,0xcf,0x86,0xd5,0x08,0x14,0x04,0x00,0x00,0x10,0x00,0xd4,0x10,0x53,
+	0x04,0x10,0x00,0x52,0x04,0x10,0x00,0x11,0x04,0x10,0x00,0x00,0x00,0x93,0x10,0x52,
+	0x04,0x10,0x01,0x91,0x08,0x10,0x04,0x10,0x01,0x10,0x00,0x00,0x00,0x00,0x00,0xd1,
+	0x6c,0xd0,0x1e,0xcf,0x86,0x55,0x04,0x10,0x00,0x54,0x04,0x10,0x00,0x93,0x10,0x52,
+	0x04,0x10,0xe6,0x51,0x04,0x10,0xe6,0x10,0x04,0x10,0xe6,0x10,0x00,0x10,0x00,0xcf,
+	0x86,0xd5,0x24,0xd4,0x10,0x93,0x0c,0x52,0x04,0x10,0x00,0x11,0x04,0x10,0x00,0x00,
+	0x00,0x00,0x00,0x53,0x04,0x10,0x00,0x92,0x0c,0x51,0x04,0x10,0x00,0x10,0x04,0x00,
+	0x00,0x10,0x00,0x10,0x00,0xd4,0x14,0x93,0x10,0x92,0x0c,0x51,0x04,0x10,0x00,0x10,
+	0x04,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x53,0x04,0x10,0x00,0x52,0x04,0x00,
+	0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x10,0x00,0x10,0x00,0xd0,0x0e,0xcf,0x86,0x95,
+	0x08,0x14,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xd3,0x06,0xcf,
+	0x06,0x00,0x00,0xd2,0x30,0xd1,0x0c,0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x06,0x14,
+	0x00,0xd0,0x1e,0xcf,0x86,0x95,0x18,0x54,0x04,0x14,0x00,0x53,0x04,0x14,0x00,0x92,
+	0x0c,0x51,0x04,0x14,0x00,0x10,0x04,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,
+	0x06,0x00,0x00,0xd1,0x4c,0xd0,0x06,0xcf,0x06,0x0d,0x00,0xcf,0x86,0xd5,0x2c,0x94,
+	0x28,0xd3,0x10,0x52,0x04,0x0d,0x00,0x91,0x08,0x10,0x04,0x0d,0x00,0x15,0x00,0x15,
+	0x00,0xd2,0x0c,0x51,0x04,0x15,0x00,0x10,0x04,0x15,0x00,0x00,0x00,0x51,0x04,0x00,
+	0x00,0x10,0x04,0x00,0x00,0x15,0x00,0x0d,0x00,0x54,0x04,0x0d,0x00,0x53,0x04,0x0d,
+	0x00,0x52,0x04,0x0d,0x00,0x51,0x04,0x0d,0x00,0x10,0x04,0x0d,0x00,0x15,0x00,0xd0,
+	0x1e,0xcf,0x86,0x95,0x18,0x94,0x14,0x53,0x04,0x15,0x00,0x52,0x04,0x00,0x00,0x51,
+	0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x0d,0x00,0x0d,0x00,0x00,0x00,0xcf,0x86,0x55,
+	0x04,0x00,0x00,0x94,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x12,0x00,0x13,
+	0x00,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0xcf,0x06,0x12,0x00,0xe2,
+	0xc6,0x01,0xd1,0x8e,0xd0,0x86,0xcf,0x86,0xd5,0x48,0xd4,0x06,0xcf,0x06,0x12,0x00,
+	0xd3,0x06,0xcf,0x06,0x12,0x00,0xd2,0x06,0xcf,0x06,0x12,0x00,0xd1,0x06,0xcf,0x06,
+	0x12,0x00,0xd0,0x06,0xcf,0x06,0x12,0x00,0xcf,0x86,0x55,0x04,0x12,0x00,0xd4,0x14,
+	0x53,0x04,0x12,0x00,0x52,0x04,0x12,0x00,0x91,0x08,0x10,0x04,0x12,0x00,0x14,0x00,
+	0x14,0x00,0x93,0x0c,0x92,0x08,0x11,0x04,0x14,0x00,0x15,0x00,0x15,0x00,0x00,0x00,
+	0xd4,0x36,0xd3,0x06,0xcf,0x06,0x12,0x00,0xd2,0x2a,0xd1,0x06,0xcf,0x06,0x12,0x00,
+	0xd0,0x06,0xcf,0x06,0x12,0x00,0xcf,0x86,0x55,0x04,0x12,0x00,0x54,0x04,0x12,0x00,
+	0x93,0x10,0x92,0x0c,0x51,0x04,0x12,0x00,0x10,0x04,0x12,0x00,0x00,0x00,0x00,0x00,
+	0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x86,0xcf,0x06,0x00,0x00,
+	0xd0,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xcf,0x86,0xd5,0xa2,0xd4,0x9c,0xd3,0x74,
+	0xd2,0x26,0xd1,0x20,0xd0,0x1a,0xcf,0x86,0x95,0x14,0x94,0x10,0x93,0x0c,0x92,0x08,
+	0x11,0x04,0x0c,0x00,0x13,0x00,0x13,0x00,0x13,0x00,0x13,0x00,0x13,0x00,0xcf,0x06,
+	0x13,0x00,0xcf,0x06,0x13,0x00,0xd1,0x48,0xd0,0x1e,0xcf,0x86,0x95,0x18,0x54,0x04,
+	0x13,0x00,0x53,0x04,0x13,0x00,0x52,0x04,0x13,0x00,0x51,0x04,0x13,0x00,0x10,0x04,
+	0x13,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0xd5,0x18,0x54,0x04,0x00,0x00,0x93,0x10,
+	0x92,0x0c,0x51,0x04,0x15,0x00,0x10,0x04,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+	0x94,0x0c,0x93,0x08,0x12,0x04,0x00,0x00,0x15,0x00,0x00,0x00,0x13,0x00,0xcf,0x06,
+	0x13,0x00,0xd2,0x22,0xd1,0x06,0xcf,0x06,0x13,0x00,0xd0,0x06,0xcf,0x06,0x13,0x00,
+	0xcf,0x86,0x55,0x04,0x13,0x00,0x54,0x04,0x13,0x00,0x53,0x04,0x13,0x00,0x12,0x04,
+	0x13,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,0x06,
+	0x00,0x00,0xd3,0x7f,0xd2,0x79,0xd1,0x34,0xd0,0x06,0xcf,0x06,0x10,0x00,0xcf,0x86,
+	0x55,0x04,0x10,0x00,0xd4,0x14,0x53,0x04,0x10,0x00,0x92,0x0c,0x51,0x04,0x10,0x00,
+	0x10,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x53,0x04,0x10,0x00,0x52,0x04,0x10,0x00,
+	0x91,0x08,0x10,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0xd0,0x3f,0xcf,0x86,0xd5,0x2c,
+	0xd4,0x14,0x53,0x04,0x10,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x10,0x00,0x00,0x00,
+	0x00,0x00,0x00,0x00,0x53,0x04,0x10,0x00,0xd2,0x08,0x11,0x04,0x10,0x00,0x00,0x00,
+	0x51,0x04,0x10,0x00,0x10,0x04,0x10,0x01,0x10,0x00,0x94,0x0d,0x93,0x09,0x12,0x05,
+	0x10,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,
+	0x00,0xcf,0x06,0x00,0x00,0xe1,0x96,0x04,0xd0,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,
+	0xcf,0x86,0xe5,0x33,0x04,0xe4,0x83,0x02,0xe3,0xf8,0x01,0xd2,0x26,0xd1,0x06,0xcf,
+	0x06,0x05,0x00,0xd0,0x06,0xcf,0x06,0x05,0x00,0xcf,0x86,0x55,0x04,0x05,0x00,0x54,
+	0x04,0x05,0x00,0x93,0x0c,0x52,0x04,0x05,0x00,0x11,0x04,0x05,0x00,0x00,0x00,0x00,
+	0x00,0xd1,0xef,0xd0,0x2a,0xcf,0x86,0x55,0x04,0x05,0x00,0x94,0x20,0xd3,0x10,0x52,
+	0x04,0x05,0x00,0x51,0x04,0x05,0x00,0x10,0x04,0x05,0x00,0x00,0x00,0x92,0x0c,0x91,
+	0x08,0x10,0x04,0x00,0x00,0x0a,0x00,0x05,0x00,0x05,0x00,0x05,0x00,0xcf,0x86,0xd5,
+	0x2a,0x54,0x04,0x05,0x00,0x53,0x04,0x05,0x00,0x52,0x04,0x05,0x00,0x51,0x04,0x05,
+	0x00,0x10,0x0d,0x05,0xff,0xf0,0x9d,0x85,0x97,0xf0,0x9d,0x85,0xa5,0x00,0x05,0xff,
+	0xf0,0x9d,0x85,0x98,0xf0,0x9d,0x85,0xa5,0x00,0xd4,0x75,0xd3,0x61,0xd2,0x44,0xd1,
+	0x22,0x10,0x11,0x05,0xff,0xf0,0x9d,0x85,0x98,0xf0,0x9d,0x85,0xa5,0xf0,0x9d,0x85,
+	0xae,0x00,0x05,0xff,0xf0,0x9d,0x85,0x98,0xf0,0x9d,0x85,0xa5,0xf0,0x9d,0x85,0xaf,
+	0x00,0x10,0x11,0x05,0xff,0xf0,0x9d,0x85,0x98,0xf0,0x9d,0x85,0xa5,0xf0,0x9d,0x85,
+	0xb0,0x00,0x05,0xff,0xf0,0x9d,0x85,0x98,0xf0,0x9d,0x85,0xa5,0xf0,0x9d,0x85,0xb1,
+	0x00,0xd1,0x15,0x10,0x11,0x05,0xff,0xf0,0x9d,0x85,0x98,0xf0,0x9d,0x85,0xa5,0xf0,
+	0x9d,0x85,0xb2,0x00,0x05,0xd8,0x10,0x04,0x05,0xd8,0x05,0x01,0xd2,0x08,0x11,0x04,
+	0x05,0x01,0x05,0x00,0x91,0x08,0x10,0x04,0x05,0x00,0x05,0xe2,0x05,0xd8,0xd3,0x12,
+	0x92,0x0d,0x51,0x04,0x05,0xd8,0x10,0x04,0x05,0xd8,0x05,0xff,0x00,0x05,0xff,0x00,
+	0x92,0x0e,0x51,0x05,0x05,0xff,0x00,0x10,0x05,0x05,0xff,0x00,0x05,0xdc,0x05,0xdc,
+	0xd0,0x97,0xcf,0x86,0xd5,0x28,0x94,0x24,0xd3,0x18,0xd2,0x0c,0x51,0x04,0x05,0xdc,
+	0x10,0x04,0x05,0xdc,0x05,0x00,0x91,0x08,0x10,0x04,0x05,0x00,0x05,0xe6,0x05,0xe6,
+	0x92,0x08,0x11,0x04,0x05,0xe6,0x05,0xdc,0x05,0x00,0x05,0x00,0xd4,0x14,0x53,0x04,
+	0x05,0x00,0xd2,0x08,0x11,0x04,0x05,0x00,0x05,0xe6,0x11,0x04,0x05,0xe6,0x05,0x00,
+	0x53,0x04,0x05,0x00,0xd2,0x15,0x51,0x04,0x05,0x00,0x10,0x04,0x05,0x00,0x05,0xff,
+	0xf0,0x9d,0x86,0xb9,0xf0,0x9d,0x85,0xa5,0x00,0xd1,0x1e,0x10,0x0d,0x05,0xff,0xf0,
+	0x9d,0x86,0xba,0xf0,0x9d,0x85,0xa5,0x00,0x05,0xff,0xf0,0x9d,0x86,0xb9,0xf0,0x9d,
+	0x85,0xa5,0xf0,0x9d,0x85,0xae,0x00,0x10,0x11,0x05,0xff,0xf0,0x9d,0x86,0xba,0xf0,
+	0x9d,0x85,0xa5,0xf0,0x9d,0x85,0xae,0x00,0x05,0xff,0xf0,0x9d,0x86,0xb9,0xf0,0x9d,
+	0x85,0xa5,0xf0,0x9d,0x85,0xaf,0x00,0xcf,0x86,0xd5,0x31,0xd4,0x21,0x93,0x1d,0x92,
+	0x19,0x91,0x15,0x10,0x11,0x05,0xff,0xf0,0x9d,0x86,0xba,0xf0,0x9d,0x85,0xa5,0xf0,
+	0x9d,0x85,0xaf,0x00,0x05,0x00,0x05,0x00,0x05,0x00,0x05,0x00,0x53,0x04,0x05,0x00,
+	0x52,0x04,0x05,0x00,0x11,0x04,0x05,0x00,0x11,0x00,0x94,0x14,0x53,0x04,0x11,0x00,
+	0x92,0x0c,0x91,0x08,0x10,0x04,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+	0xd2,0x44,0xd1,0x28,0xd0,0x06,0xcf,0x06,0x08,0x00,0xcf,0x86,0x95,0x1c,0x94,0x18,
+	0x93,0x14,0xd2,0x08,0x11,0x04,0x08,0x00,0x08,0xe6,0x91,0x08,0x10,0x04,0x08,0xe6,
+	0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd0,0x06,0xcf,0x06,0x00,0x00,
+	0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x14,0x00,0x93,0x08,0x12,0x04,0x14,0x00,
+	0x00,0x00,0x00,0x00,0xd1,0x40,0xd0,0x06,0xcf,0x06,0x07,0x00,0xcf,0x86,0xd5,0x18,
+	0x54,0x04,0x07,0x00,0x93,0x10,0x52,0x04,0x07,0x00,0x51,0x04,0x07,0x00,0x10,0x04,
+	0x07,0x00,0x00,0x00,0x00,0x00,0x54,0x04,0x09,0x00,0xd3,0x0c,0x92,0x08,0x11,0x04,
+	0x09,0x00,0x14,0x00,0x14,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x14,0x00,0x00,0x00,
+	0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xe3,0x5f,0x01,0xd2,0xb4,0xd1,0x24,0xd0,
+	0x06,0xcf,0x06,0x05,0x00,0xcf,0x86,0x95,0x18,0x54,0x04,0x05,0x00,0x93,0x10,0x52,
+	0x04,0x05,0x00,0x91,0x08,0x10,0x04,0x05,0x00,0x00,0x00,0x05,0x00,0x05,0x00,0x05,
+	0x00,0xd0,0x6a,0xcf,0x86,0xd5,0x18,0x54,0x04,0x05,0x00,0x53,0x04,0x05,0x00,0x52,
+	0x04,0x05,0x00,0x91,0x08,0x10,0x04,0x05,0x00,0x00,0x00,0x05,0x00,0xd4,0x34,0xd3,
+	0x1c,0xd2,0x0c,0x51,0x04,0x00,0x00,0x10,0x04,0x05,0x00,0x00,0x00,0xd1,0x08,0x10,
+	0x04,0x00,0x00,0x05,0x00,0x10,0x04,0x05,0x00,0x00,0x00,0xd2,0x0c,0x91,0x08,0x10,
+	0x04,0x00,0x00,0x05,0x00,0x05,0x00,0x91,0x08,0x10,0x04,0x05,0x00,0x00,0x00,0x05,
+	0x00,0x53,0x04,0x05,0x00,0xd2,0x0c,0x51,0x04,0x05,0x00,0x10,0x04,0x00,0x00,0x05,
+	0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x05,0x00,0x05,0x00,0xcf,0x86,0x95,0x20,0x94,
+	0x1c,0x93,0x18,0xd2,0x0c,0x91,0x08,0x10,0x04,0x05,0x00,0x07,0x00,0x05,0x00,0x91,
+	0x08,0x10,0x04,0x00,0x00,0x05,0x00,0x05,0x00,0x05,0x00,0x05,0x00,0x05,0x00,0xd1,
+	0xa4,0xd0,0x6a,0xcf,0x86,0xd5,0x48,0xd4,0x28,0xd3,0x10,0x52,0x04,0x05,0x00,0x51,
+	0x04,0x05,0x00,0x10,0x04,0x00,0x00,0x05,0x00,0xd2,0x0c,0x51,0x04,0x05,0x00,0x10,
+	0x04,0x05,0x00,0x00,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x05,0x00,0x05,0x00,0xd3,
+	0x10,0x52,0x04,0x05,0x00,0x91,0x08,0x10,0x04,0x05,0x00,0x00,0x00,0x05,0x00,0x52,
+	0x04,0x05,0x00,0x91,0x08,0x10,0x04,0x05,0x00,0x00,0x00,0x05,0x00,0x54,0x04,0x05,
+	0x00,0x53,0x04,0x05,0x00,0xd2,0x0c,0x51,0x04,0x05,0x00,0x10,0x04,0x00,0x00,0x05,
+	0x00,0x51,0x04,0x05,0x00,0x10,0x04,0x05,0x00,0x00,0x00,0xcf,0x86,0x95,0x34,0xd4,
+	0x20,0xd3,0x14,0x52,0x04,0x05,0x00,0xd1,0x08,0x10,0x04,0x05,0x00,0x00,0x00,0x10,
+	0x04,0x05,0x00,0x00,0x00,0x92,0x08,0x11,0x04,0x00,0x00,0x05,0x00,0x05,0x00,0x93,
+	0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x05,0x00,0x00,0x00,0x05,0x00,0x05,0x00,0x05,
+	0x00,0x05,0x00,0xcf,0x06,0x05,0x00,0xd2,0x26,0xd1,0x06,0xcf,0x06,0x05,0x00,0xd0,
+	0x1a,0xcf,0x86,0x55,0x04,0x05,0x00,0x94,0x10,0x93,0x0c,0x52,0x04,0x05,0x00,0x11,
+	0x04,0x08,0x00,0x00,0x00,0x05,0x00,0x05,0x00,0xcf,0x06,0x05,0x00,0xd1,0x06,0xcf,
+	0x06,0x05,0x00,0xd0,0x06,0xcf,0x06,0x05,0x00,0xcf,0x86,0x95,0x18,0x94,0x14,0x53,
+	0x04,0x05,0x00,0xd2,0x08,0x11,0x04,0x05,0x00,0x09,0x00,0x11,0x04,0x00,0x00,0x05,
+	0x00,0x05,0x00,0x05,0x00,0xd4,0x52,0xd3,0x06,0xcf,0x06,0x11,0x00,0xd2,0x46,0xd1,
+	0x06,0xcf,0x06,0x11,0x00,0xd0,0x3a,0xcf,0x86,0xd5,0x20,0xd4,0x0c,0x53,0x04,0x11,
+	0x00,0x12,0x04,0x11,0x00,0x00,0x00,0x53,0x04,0x00,0x00,0x92,0x0c,0x51,0x04,0x00,
+	0x00,0x10,0x04,0x00,0x00,0x11,0x00,0x11,0x00,0x94,0x14,0x93,0x10,0x92,0x0c,0x91,
+	0x08,0x10,0x04,0x00,0x00,0x11,0x00,0x11,0x00,0x11,0x00,0x11,0x00,0x00,0x00,0xcf,
+	0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xe0,0xc2,0x03,0xcf,0x86,
+	0xe5,0x03,0x01,0xd4,0xfc,0xd3,0xc0,0xd2,0x66,0xd1,0x60,0xd0,0x5a,0xcf,0x86,0xd5,
+	0x2c,0xd4,0x14,0x93,0x10,0x52,0x04,0x12,0xe6,0x51,0x04,0x12,0xe6,0x10,0x04,0x12,
+	0xe6,0x00,0x00,0x12,0xe6,0x53,0x04,0x12,0xe6,0x92,0x10,0xd1,0x08,0x10,0x04,0x12,
+	0xe6,0x00,0x00,0x10,0x04,0x00,0x00,0x12,0xe6,0x12,0xe6,0x94,0x28,0xd3,0x18,0xd2,
+	0x0c,0x51,0x04,0x12,0xe6,0x10,0x04,0x00,0x00,0x12,0xe6,0x91,0x08,0x10,0x04,0x12,
+	0xe6,0x00,0x00,0x12,0xe6,0x92,0x0c,0x51,0x04,0x12,0xe6,0x10,0x04,0x12,0xe6,0x00,
+	0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xd1,0x54,0xd0,
+	0x36,0xcf,0x86,0x55,0x04,0x15,0x00,0xd4,0x14,0x53,0x04,0x15,0x00,0x52,0x04,0x15,
+	0x00,0x91,0x08,0x10,0x04,0x15,0x00,0x00,0x00,0x00,0x00,0xd3,0x10,0x52,0x04,0x15,
+	0xe6,0x51,0x04,0x15,0xe6,0x10,0x04,0x15,0xe6,0x15,0x00,0x52,0x04,0x15,0x00,0x11,
+	0x04,0x15,0x00,0x00,0x00,0xcf,0x86,0x95,0x18,0x94,0x14,0x53,0x04,0x15,0x00,0xd2,
+	0x08,0x11,0x04,0x15,0x00,0x00,0x00,0x11,0x04,0x00,0x00,0x15,0x00,0x00,0x00,0x00,
+	0x00,0xcf,0x06,0x00,0x00,0xd2,0x36,0xd1,0x06,0xcf,0x06,0x00,0x00,0xd0,0x06,0xcf,
+	0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x15,0x00,0xd4,0x0c,0x53,0x04,0x15,0x00,0x12,
+	0x04,0x15,0x00,0x15,0xe6,0x53,0x04,0x15,0x00,0xd2,0x08,0x11,0x04,0x15,0x00,0x00,
+	0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x15,0x00,0xcf,0x06,0x00,0x00,0xcf,
+	0x06,0x00,0x00,0xd4,0x82,0xd3,0x7c,0xd2,0x3e,0xd1,0x06,0xcf,0x06,0x10,0x00,0xd0,
+	0x06,0xcf,0x06,0x10,0x00,0xcf,0x86,0x95,0x2c,0xd4,0x18,0x93,0x14,0x52,0x04,0x10,
+	0x00,0xd1,0x08,0x10,0x04,0x10,0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x10,0x00,0x10,
+	0x00,0x93,0x10,0x52,0x04,0x10,0xdc,0x51,0x04,0x10,0xdc,0x10,0x04,0x10,0xdc,0x00,
+	0x00,0x00,0x00,0x00,0x00,0xd1,0x38,0xd0,0x06,0xcf,0x06,0x12,0x00,0xcf,0x86,0x95,
+	0x2c,0xd4,0x18,0xd3,0x08,0x12,0x04,0x12,0x00,0x12,0xe6,0x92,0x0c,0x51,0x04,0x12,
+	0xe6,0x10,0x04,0x12,0x07,0x15,0x00,0x00,0x00,0x53,0x04,0x12,0x00,0xd2,0x08,0x11,
+	0x04,0x12,0x00,0x00,0x00,0x11,0x04,0x00,0x00,0x12,0x00,0x00,0x00,0xcf,0x06,0x00,
+	0x00,0xcf,0x06,0x00,0x00,0xd3,0x82,0xd2,0x48,0xd1,0x24,0xd0,0x06,0xcf,0x06,0x00,
+	0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x00,0x00,0x93,0x10,0x92,0x0c,0x91,
+	0x08,0x10,0x04,0x00,0x00,0x14,0x00,0x14,0x00,0x14,0x00,0x14,0x00,0xd0,0x1e,0xcf,
+	0x86,0x55,0x04,0x14,0x00,0x54,0x04,0x14,0x00,0x93,0x10,0x52,0x04,0x14,0x00,0x91,
+	0x08,0x10,0x04,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xd1,
+	0x34,0xd0,0x2e,0xcf,0x86,0xd5,0x18,0x94,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,
+	0x04,0x00,0x00,0x15,0x00,0x15,0x00,0x15,0x00,0x15,0x00,0x15,0x00,0x54,0x04,0x15,
+	0x00,0x53,0x04,0x15,0x00,0x52,0x04,0x15,0x00,0x11,0x04,0x15,0x00,0x00,0x00,0xcf,
+	0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xe2,0xb2,0x01,0xe1,0x41,0x01,0xd0,0x6e,0xcf,
+	0x86,0xd5,0x18,0x94,0x14,0x93,0x10,0x52,0x04,0x0d,0x00,0x91,0x08,0x10,0x04,0x00,
+	0x00,0x0d,0x00,0x0d,0x00,0x0d,0x00,0x0d,0x00,0xd4,0x30,0xd3,0x20,0xd2,0x10,0xd1,
+	0x08,0x10,0x04,0x00,0x00,0x0d,0x00,0x10,0x04,0x0d,0x00,0x00,0x00,0xd1,0x08,0x10,
+	0x04,0x0d,0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x0d,0x00,0x92,0x0c,0x91,0x08,0x10,
+	0x04,0x00,0x00,0x0d,0x00,0x0d,0x00,0x0d,0x00,0xd3,0x10,0x92,0x0c,0x51,0x04,0x0d,
+	0x00,0x10,0x04,0x0d,0x00,0x00,0x00,0x0d,0x00,0x92,0x10,0xd1,0x08,0x10,0x04,0x00,
+	0x00,0x0d,0x00,0x10,0x04,0x00,0x00,0x0d,0x00,0x00,0x00,0xcf,0x86,0xd5,0x74,0xd4,
+	0x34,0xd3,0x18,0xd2,0x0c,0x51,0x04,0x00,0x00,0x10,0x04,0x0d,0x00,0x00,0x00,0x51,
+	0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x0d,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,0x00,
+	0x00,0x0d,0x00,0x10,0x04,0x00,0x00,0x0d,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x0d,
+	0x00,0x0d,0x00,0xd3,0x20,0xd2,0x10,0xd1,0x08,0x10,0x04,0x00,0x00,0x0d,0x00,0x10,
+	0x04,0x0d,0x00,0x00,0x00,0xd1,0x08,0x10,0x04,0x0d,0x00,0x00,0x00,0x10,0x04,0x00,
+	0x00,0x0d,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,0x00,0x00,0x0d,0x00,0x10,0x04,0x00,
+	0x00,0x0d,0x00,0xd1,0x08,0x10,0x04,0x00,0x00,0x0d,0x00,0x10,0x04,0x00,0x00,0x0d,
+	0x00,0xd4,0x30,0xd3,0x20,0xd2,0x10,0xd1,0x08,0x10,0x04,0x00,0x00,0x0d,0x00,0x10,
+	0x04,0x0d,0x00,0x00,0x00,0xd1,0x08,0x10,0x04,0x0d,0x00,0x00,0x00,0x10,0x04,0x00,
+	0x00,0x0d,0x00,0x92,0x0c,0x51,0x04,0x0d,0x00,0x10,0x04,0x0d,0x00,0x00,0x00,0x0d,
+	0x00,0xd3,0x10,0x92,0x0c,0x51,0x04,0x0d,0x00,0x10,0x04,0x0d,0x00,0x00,0x00,0x0d,
+	0x00,0xd2,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x0d,0x00,0x0d,0x00,0xd1,0x08,0x10,
+	0x04,0x0d,0x00,0x00,0x00,0x10,0x04,0x0d,0x00,0x00,0x00,0xd0,0x56,0xcf,0x86,0xd5,
+	0x20,0xd4,0x14,0x53,0x04,0x0d,0x00,0x92,0x0c,0x51,0x04,0x0d,0x00,0x10,0x04,0x00,
+	0x00,0x0d,0x00,0x0d,0x00,0x53,0x04,0x0d,0x00,0x12,0x04,0x0d,0x00,0x00,0x00,0xd4,
+	0x28,0xd3,0x18,0xd2,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x0d,0x00,0x0d,0x00,0x91,
+	0x08,0x10,0x04,0x00,0x00,0x0d,0x00,0x0d,0x00,0x92,0x0c,0x51,0x04,0x0d,0x00,0x10,
+	0x04,0x00,0x00,0x0d,0x00,0x0d,0x00,0x53,0x04,0x0d,0x00,0x12,0x04,0x0d,0x00,0x00,
+	0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x00,0x00,0x93,0x0c,0x92,0x08,0x11,
+	0x04,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x86,0xe5,
+	0x96,0x05,0xe4,0x28,0x03,0xe3,0xed,0x01,0xd2,0xa0,0xd1,0x1c,0xd0,0x16,0xcf,0x86,
+	0x55,0x04,0x0a,0x00,0x94,0x0c,0x53,0x04,0x0a,0x00,0x12,0x04,0x0a,0x00,0x00,0x00,
+	0x0a,0x00,0xcf,0x06,0x0a,0x00,0xd0,0x46,0xcf,0x86,0xd5,0x10,0x54,0x04,0x0a,0x00,
+	0x93,0x08,0x12,0x04,0x0a,0x00,0x00,0x00,0x00,0x00,0xd4,0x14,0x53,0x04,0x0c,0x00,
+	0x52,0x04,0x0c,0x00,0x51,0x04,0x0c,0x00,0x10,0x04,0x0c,0x00,0x00,0x00,0xd3,0x10,
+	0x92,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x0c,0x00,0x0c,0x00,0x0c,0x00,0x52,0x04,
+	0x0c,0x00,0x51,0x04,0x0c,0x00,0x10,0x04,0x0c,0x00,0x10,0x00,0xcf,0x86,0xd5,0x28,
+	0xd4,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x0c,0x00,0x0c,0x00,
+	0x0c,0x00,0x0c,0x00,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x0c,0x00,
+	0x0c,0x00,0x0c,0x00,0x0c,0x00,0x54,0x04,0x10,0x00,0x93,0x0c,0x52,0x04,0x10,0x00,
+	0x11,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0xd1,0xe4,0xd0,0x5a,0xcf,0x86,0xd5,0x20,
+	0x94,0x1c,0x53,0x04,0x0b,0x00,0xd2,0x0c,0x51,0x04,0x0b,0x00,0x10,0x04,0x0b,0x00,
+	0x10,0x00,0x91,0x08,0x10,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x0b,0x00,0xd4,0x14,
+	0x53,0x04,0x0b,0x00,0x52,0x04,0x0b,0x00,0x51,0x04,0x0b,0x00,0x10,0x04,0x0b,0x00,
+	0x14,0x00,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x0c,0x00,0x0b,0x00,0x0c,0x00,
+	0x0c,0x00,0x52,0x04,0x0c,0x00,0xd1,0x08,0x10,0x04,0x0c,0x00,0x0b,0x00,0x10,0x04,
+	0x0c,0x00,0x0b,0x00,0xcf,0x86,0xd5,0x4c,0xd4,0x2c,0xd3,0x18,0xd2,0x0c,0x51,0x04,
+	0x0c,0x00,0x10,0x04,0x0b,0x00,0x0c,0x00,0x51,0x04,0x0c,0x00,0x10,0x04,0x0b,0x00,
+	0x0c,0x00,0xd2,0x08,0x11,0x04,0x0c,0x00,0x0b,0x00,0x51,0x04,0x0b,0x00,0x10,0x04,
+	0x0b,0x00,0x0c,0x00,0xd3,0x10,0x52,0x04,0x0c,0x00,0x51,0x04,0x0c,0x00,0x10,0x04,
+	0x0c,0x00,0x0b,0x00,0x52,0x04,0x0c,0x00,0x51,0x04,0x0c,0x00,0x10,0x04,0x0c,0x00,
+	0x0b,0x00,0xd4,0x18,0x53,0x04,0x0c,0x00,0xd2,0x08,0x11,0x04,0x0c,0x00,0x0d,0x00,
+	0x91,0x08,0x10,0x04,0x15,0x00,0x00,0x00,0x00,0x00,0x53,0x04,0x0c,0x00,0xd2,0x10,
+	0xd1,0x08,0x10,0x04,0x0c,0x00,0x0b,0x00,0x10,0x04,0x0c,0x00,0x0b,0x00,0xd1,0x08,
+	0x10,0x04,0x0b,0x00,0x0c,0x00,0x10,0x04,0x0c,0x00,0x0b,0x00,0xd0,0x4e,0xcf,0x86,
+	0xd5,0x34,0xd4,0x14,0x53,0x04,0x0c,0x00,0xd2,0x08,0x11,0x04,0x0c,0x00,0x0b,0x00,
+	0x11,0x04,0x0b,0x00,0x0c,0x00,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x0b,0x00,
+	0x0c,0x00,0x0c,0x00,0x0c,0x00,0x92,0x0c,0x51,0x04,0x0c,0x00,0x10,0x04,0x0c,0x00,
+	0x12,0x00,0x12,0x00,0x94,0x14,0x53,0x04,0x12,0x00,0x52,0x04,0x12,0x00,0x91,0x08,
+	0x10,0x04,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,
+	0x94,0x10,0x93,0x0c,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x0c,0x00,0x0c,0x00,
+	0x0c,0x00,0xd2,0x7e,0xd1,0x78,0xd0,0x3e,0xcf,0x86,0xd5,0x1c,0x94,0x18,0x93,0x14,
+	0x92,0x10,0xd1,0x08,0x10,0x04,0x0b,0x00,0x0c,0x00,0x10,0x04,0x0c,0x00,0x00,0x00,
+	0x00,0x00,0x00,0x00,0x0b,0x00,0x54,0x04,0x0b,0x00,0xd3,0x0c,0x92,0x08,0x11,0x04,
+	0x0b,0x00,0x0c,0x00,0x0c,0x00,0x92,0x0c,0x51,0x04,0x0c,0x00,0x10,0x04,0x0c,0x00,
+	0x12,0x00,0x00,0x00,0xcf,0x86,0xd5,0x24,0xd4,0x14,0x53,0x04,0x0b,0x00,0x92,0x0c,
+	0x91,0x08,0x10,0x04,0x0b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x93,0x0c,0x92,0x08,
+	0x11,0x04,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x94,0x10,0x93,0x0c,0x52,0x04,
+	0x13,0x00,0x11,0x04,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,
+	0xd1,0x58,0xd0,0x3a,0xcf,0x86,0x55,0x04,0x0c,0x00,0xd4,0x20,0xd3,0x10,0x92,0x0c,
+	0x91,0x08,0x10,0x04,0x0c,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x52,0x04,0x10,0x00,
+	0x91,0x08,0x10,0x04,0x10,0x00,0x11,0x00,0x11,0x00,0x93,0x10,0x52,0x04,0x0c,0x00,
+	0x51,0x04,0x0c,0x00,0x10,0x04,0x10,0x00,0x0c,0x00,0x0c,0x00,0xcf,0x86,0x55,0x04,
+	0x0c,0x00,0x54,0x04,0x0c,0x00,0x53,0x04,0x0c,0x00,0x52,0x04,0x0c,0x00,0x91,0x08,
+	0x10,0x04,0x0c,0x00,0x10,0x00,0x11,0x00,0xd0,0x16,0xcf,0x86,0x95,0x10,0x54,0x04,
+	0x0c,0x00,0x93,0x08,0x12,0x04,0x0c,0x00,0x10,0x00,0x10,0x00,0x0c,0x00,0xcf,0x86,
+	0xd5,0x34,0xd4,0x28,0xd3,0x10,0x52,0x04,0x0c,0x00,0x91,0x08,0x10,0x04,0x0c,0x00,
+	0x10,0x00,0x0c,0x00,0xd2,0x0c,0x51,0x04,0x0c,0x00,0x10,0x04,0x0c,0x00,0x10,0x00,
+	0x51,0x04,0x10,0x00,0x10,0x04,0x10,0x00,0x11,0x00,0x93,0x08,0x12,0x04,0x11,0x00,
+	0x10,0x00,0x10,0x00,0x54,0x04,0x0c,0x00,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,
+	0x0c,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x11,0x00,0xd3,0xfc,0xd2,0x6c,0xd1,0x3c,
+	0xd0,0x1e,0xcf,0x86,0x55,0x04,0x0c,0x00,0x54,0x04,0x0c,0x00,0x53,0x04,0x0c,0x00,
+	0x52,0x04,0x0c,0x00,0x51,0x04,0x0c,0x00,0x10,0x04,0x0c,0x00,0x10,0x00,0xcf,0x86,
+	0x95,0x18,0x94,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x0c,0x00,0x10,0x00,
+	0x0c,0x00,0x0c,0x00,0x0c,0x00,0x0c,0x00,0x0c,0x00,0xd0,0x06,0xcf,0x06,0x0c,0x00,
+	0xcf,0x86,0x55,0x04,0x0c,0x00,0x54,0x04,0x0c,0x00,0x53,0x04,0x0c,0x00,0xd2,0x0c,
+	0x91,0x08,0x10,0x04,0x10,0x00,0x0c,0x00,0x0c,0x00,0xd1,0x08,0x10,0x04,0x0c,0x00,
+	0x10,0x00,0x10,0x04,0x10,0x00,0x11,0x00,0xd1,0x54,0xd0,0x1a,0xcf,0x86,0x55,0x04,
+	0x0c,0x00,0x54,0x04,0x0c,0x00,0x53,0x04,0x0c,0x00,0x52,0x04,0x0c,0x00,0x11,0x04,
+	0x0c,0x00,0x10,0x00,0xcf,0x86,0xd5,0x1c,0x94,0x18,0xd3,0x08,0x12,0x04,0x0d,0x00,
+	0x10,0x00,0x92,0x0c,0x51,0x04,0x10,0x00,0x10,0x04,0x10,0x00,0x11,0x00,0x11,0x00,
+	0x0c,0x00,0xd4,0x08,0x13,0x04,0x0c,0x00,0x10,0x00,0x53,0x04,0x10,0x00,0x92,0x0c,
+	0x51,0x04,0x10,0x00,0x10,0x04,0x12,0x00,0x10,0x00,0x10,0x00,0xd0,0x1e,0xcf,0x86,
+	0x55,0x04,0x10,0x00,0x94,0x14,0x93,0x10,0x52,0x04,0x10,0x00,0x91,0x08,0x10,0x04,
+	0x12,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0xcf,0x86,0x55,0x04,0x10,0x00,
+	0x54,0x04,0x10,0x00,0x53,0x04,0x10,0x00,0x92,0x0c,0x51,0x04,0x10,0x00,0x10,0x04,
+	0x10,0x00,0x0c,0x00,0x0c,0x00,0xe2,0x19,0x01,0xd1,0xa8,0xd0,0x7e,0xcf,0x86,0xd5,
+	0x4c,0xd4,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x0d,0x00,0x0c,0x00,0x0c,
+	0x00,0x0c,0x00,0x0c,0x00,0xd3,0x1c,0xd2,0x0c,0x91,0x08,0x10,0x04,0x0c,0x00,0x0d,
+	0x00,0x0c,0x00,0xd1,0x08,0x10,0x04,0x0c,0x00,0x0d,0x00,0x10,0x04,0x0c,0x00,0x0d,
+	0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,0x0c,0x00,0x0d,0x00,0x10,0x04,0x0c,0x00,0x0d,
+	0x00,0x51,0x04,0x0c,0x00,0x10,0x04,0x0c,0x00,0x0d,0x00,0xd4,0x1c,0xd3,0x0c,0x52,
+	0x04,0x0c,0x00,0x11,0x04,0x0c,0x00,0x0d,0x00,0x52,0x04,0x0c,0x00,0x91,0x08,0x10,
+	0x04,0x0d,0x00,0x0c,0x00,0x0d,0x00,0x93,0x10,0x52,0x04,0x0c,0x00,0x91,0x08,0x10,
+	0x04,0x0d,0x00,0x0c,0x00,0x0c,0x00,0x0c,0x00,0xcf,0x86,0x95,0x24,0x94,0x20,0x93,
+	0x1c,0xd2,0x10,0xd1,0x08,0x10,0x04,0x0c,0x00,0x10,0x00,0x10,0x04,0x10,0x00,0x11,
+	0x00,0x91,0x08,0x10,0x04,0x11,0x00,0x0c,0x00,0x0c,0x00,0x0c,0x00,0x10,0x00,0x10,
+	0x00,0xd0,0x06,0xcf,0x06,0x0c,0x00,0xcf,0x86,0xd5,0x30,0xd4,0x10,0x93,0x0c,0x52,
+	0x04,0x0c,0x00,0x11,0x04,0x0c,0x00,0x10,0x00,0x10,0x00,0x93,0x1c,0xd2,0x10,0xd1,
+	0x08,0x10,0x04,0x11,0x00,0x12,0x00,0x10,0x04,0x12,0x00,0x13,0x00,0x91,0x08,0x10,
+	0x04,0x13,0x00,0x15,0x00,0x00,0x00,0x00,0x00,0xd4,0x14,0x53,0x04,0x10,0x00,0x52,
+	0x04,0x10,0x00,0x91,0x08,0x10,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0xd3,0x10,0x52,
+	0x04,0x10,0x00,0x51,0x04,0x12,0x00,0x10,0x04,0x12,0x00,0x13,0x00,0x92,0x10,0xd1,
+	0x08,0x10,0x04,0x13,0x00,0x14,0x00,0x10,0x04,0x15,0x00,0x00,0x00,0x00,0x00,0xd1,
+	0x1c,0xd0,0x06,0xcf,0x06,0x0c,0x00,0xcf,0x86,0x55,0x04,0x0c,0x00,0x54,0x04,0x0c,
+	0x00,0x93,0x08,0x12,0x04,0x0c,0x00,0x00,0x00,0x00,0x00,0xd0,0x06,0xcf,0x06,0x10,
+	0x00,0xcf,0x86,0xd5,0x24,0x54,0x04,0x10,0x00,0xd3,0x10,0x52,0x04,0x10,0x00,0x91,
+	0x08,0x10,0x04,0x10,0x00,0x14,0x00,0x14,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x14,
+	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x94,0x0c,0x53,0x04,0x15,0x00,0x12,0x04,0x15,
+	0x00,0x00,0x00,0x00,0x00,0xe4,0x40,0x02,0xe3,0xc9,0x01,0xd2,0x5c,0xd1,0x34,0xd0,
+	0x16,0xcf,0x86,0x95,0x10,0x94,0x0c,0x53,0x04,0x10,0x00,0x12,0x04,0x10,0x00,0x00,
+	0x00,0x10,0x00,0x10,0x00,0xcf,0x86,0x95,0x18,0xd4,0x08,0x13,0x04,0x10,0x00,0x00,
+	0x00,0x53,0x04,0x10,0x00,0x92,0x08,0x11,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x10,
+	0x00,0xd0,0x22,0xcf,0x86,0xd5,0x0c,0x94,0x08,0x13,0x04,0x10,0x00,0x00,0x00,0x10,
+	0x00,0x94,0x10,0x53,0x04,0x10,0x00,0x52,0x04,0x10,0x00,0x11,0x04,0x10,0x00,0x00,
+	0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xd1,0xc0,0xd0,0x5e,0xcf,0x86,0xd5,0x30,0xd4,
+	0x14,0x53,0x04,0x13,0x00,0x52,0x04,0x13,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x15,
+	0x00,0x15,0x00,0x53,0x04,0x11,0x00,0xd2,0x0c,0x91,0x08,0x10,0x04,0x11,0x00,0x12,
+	0x00,0x12,0x00,0x51,0x04,0x12,0x00,0x10,0x04,0x12,0x00,0x13,0x00,0xd4,0x08,0x13,
+	0x04,0x12,0x00,0x13,0x00,0xd3,0x14,0x92,0x10,0xd1,0x08,0x10,0x04,0x12,0x00,0x13,
+	0x00,0x10,0x04,0x13,0x00,0x12,0x00,0x12,0x00,0x52,0x04,0x12,0x00,0x51,0x04,0x12,
+	0x00,0x10,0x04,0x12,0x00,0x15,0x00,0xcf,0x86,0xd5,0x28,0xd4,0x14,0x53,0x04,0x12,
+	0x00,0x52,0x04,0x12,0x00,0x91,0x08,0x10,0x04,0x13,0x00,0x14,0x00,0x14,0x00,0x53,
+	0x04,0x12,0x00,0x52,0x04,0x12,0x00,0x51,0x04,0x12,0x00,0x10,0x04,0x12,0x00,0x13,
+	0x00,0xd4,0x0c,0x53,0x04,0x13,0x00,0x12,0x04,0x13,0x00,0x14,0x00,0xd3,0x1c,0xd2,
+	0x10,0xd1,0x08,0x10,0x04,0x14,0x00,0x15,0x00,0x10,0x04,0x00,0x00,0x14,0x00,0x51,
+	0x04,0x14,0x00,0x10,0x04,0x14,0x00,0x00,0x00,0x92,0x0c,0x51,0x04,0x00,0x00,0x10,
+	0x04,0x14,0x00,0x15,0x00,0x14,0x00,0xd0,0x62,0xcf,0x86,0xd5,0x24,0xd4,0x14,0x93,
+	0x10,0x52,0x04,0x11,0x00,0x91,0x08,0x10,0x04,0x11,0x00,0x12,0x00,0x12,0x00,0x12,
+	0x00,0x93,0x0c,0x92,0x08,0x11,0x04,0x12,0x00,0x13,0x00,0x13,0x00,0x14,0x00,0xd4,
+	0x2c,0xd3,0x18,0xd2,0x0c,0x51,0x04,0x14,0x00,0x10,0x04,0x14,0x00,0x00,0x00,0x91,
+	0x08,0x10,0x04,0x00,0x00,0x15,0x00,0x15,0x00,0xd2,0x0c,0x51,0x04,0x15,0x00,0x10,
+	0x04,0x15,0x00,0x00,0x00,0x11,0x04,0x00,0x00,0x15,0x00,0x53,0x04,0x14,0x00,0x92,
+	0x08,0x11,0x04,0x14,0x00,0x15,0x00,0x15,0x00,0xcf,0x86,0xd5,0x30,0x94,0x2c,0xd3,
+	0x14,0x92,0x10,0xd1,0x08,0x10,0x04,0x11,0x00,0x14,0x00,0x10,0x04,0x14,0x00,0x15,
+	0x00,0x15,0x00,0xd2,0x0c,0x51,0x04,0x15,0x00,0x10,0x04,0x15,0x00,0x00,0x00,0x91,
+	0x08,0x10,0x04,0x00,0x00,0x15,0x00,0x15,0x00,0x13,0x00,0x94,0x14,0x93,0x10,0x52,
+	0x04,0x13,0x00,0x51,0x04,0x13,0x00,0x10,0x04,0x13,0x00,0x14,0x00,0x14,0x00,0x14,
+	0x00,0xd2,0x70,0xd1,0x40,0xd0,0x06,0xcf,0x06,0x15,0x00,0xcf,0x86,0xd5,0x10,0x54,
+	0x04,0x15,0x00,0x93,0x08,0x12,0x04,0x15,0x00,0x00,0x00,0x00,0x00,0xd4,0x10,0x53,
+	0x04,0x14,0x00,0x52,0x04,0x14,0x00,0x11,0x04,0x14,0x00,0x00,0x00,0xd3,0x08,0x12,
+	0x04,0x15,0x00,0x00,0x00,0x92,0x0c,0x51,0x04,0x15,0x00,0x10,0x04,0x15,0x00,0x00,
+	0x00,0x00,0x00,0xd0,0x2a,0xcf,0x86,0x95,0x24,0xd4,0x14,0x93,0x10,0x92,0x0c,0x51,
+	0x04,0x15,0x00,0x10,0x04,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x93,0x0c,0x52,
+	0x04,0x15,0x00,0x11,0x04,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,
+	0x00,0xcf,0x06,0x00,0x00,0xd3,0x06,0xcf,0x06,0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,
+	0x00,0xd1,0x06,0xcf,0x06,0x00,0x00,0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,
+	0x04,0x00,0x00,0x54,0x04,0x00,0x00,0x53,0x04,0x00,0x00,0x52,0x04,0x00,0x00,0x11,
+	0x04,0x00,0x00,0x02,0x00,0xe4,0xf9,0x12,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x05,0x00,
+	0xd2,0xc2,0xd1,0x08,0xcf,0x86,0xcf,0x06,0x05,0x00,0xd0,0x44,0xcf,0x86,0xd5,0x3c,
+	0xd4,0x06,0xcf,0x06,0x05,0x00,0xd3,0x06,0xcf,0x06,0x05,0x00,0xd2,0x2a,0xd1,0x06,
+	0xcf,0x06,0x05,0x00,0xd0,0x06,0xcf,0x06,0x05,0x00,0xcf,0x86,0x95,0x18,0x54,0x04,
+	0x05,0x00,0x93,0x10,0x52,0x04,0x05,0x00,0x51,0x04,0x05,0x00,0x10,0x04,0x05,0x00,
+	0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x0b,0x00,0xcf,0x06,0x0b,0x00,0xcf,0x86,
+	0xd5,0x3c,0xd4,0x06,0xcf,0x06,0x0b,0x00,0xd3,0x06,0xcf,0x06,0x0b,0x00,0xd2,0x06,
+	0xcf,0x06,0x0b,0x00,0xd1,0x24,0xd0,0x1e,0xcf,0x86,0x55,0x04,0x0b,0x00,0x54,0x04,
+	0x0b,0x00,0x93,0x10,0x52,0x04,0x0b,0x00,0x91,0x08,0x10,0x04,0x0b,0x00,0x00,0x00,
+	0x00,0x00,0x00,0x00,0xcf,0x06,0x0c,0x00,0xcf,0x06,0x0c,0x00,0xd4,0x32,0xd3,0x2c,
+	0xd2,0x26,0xd1,0x20,0xd0,0x1a,0xcf,0x86,0x95,0x14,0x54,0x04,0x0c,0x00,0x53,0x04,
+	0x0c,0x00,0x52,0x04,0x0c,0x00,0x11,0x04,0x0c,0x00,0x00,0x00,0x11,0x00,0xcf,0x06,
+	0x11,0x00,0xcf,0x06,0x11,0x00,0xcf,0x06,0x11,0x00,0xcf,0x06,0x11,0x00,0xcf,0x06,
+	0x11,0x00,0xd1,0x48,0xd0,0x40,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x11,0x00,0xd4,0x06,
+	0xcf,0x06,0x11,0x00,0xd3,0x06,0xcf,0x06,0x11,0x00,0xd2,0x26,0xd1,0x06,0xcf,0x06,
+	0x11,0x00,0xd0,0x1a,0xcf,0x86,0x55,0x04,0x11,0x00,0x94,0x10,0x93,0x0c,0x92,0x08,
+	0x11,0x04,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x13,0x00,0xcf,0x06,0x13,0x00,
+	0xcf,0x06,0x13,0x00,0xcf,0x86,0xcf,0x06,0x13,0x00,0xd0,0x44,0xcf,0x86,0xd5,0x06,
+	0xcf,0x06,0x13,0x00,0xd4,0x36,0xd3,0x06,0xcf,0x06,0x13,0x00,0xd2,0x06,0xcf,0x06,
+	0x13,0x00,0xd1,0x06,0xcf,0x06,0x13,0x00,0xd0,0x06,0xcf,0x06,0x13,0x00,0xcf,0x86,
+	0x55,0x04,0x13,0x00,0x94,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x13,0x00,
+	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x86,
+	0xd5,0x06,0xcf,0x06,0x00,0x00,0xe4,0x68,0x11,0xe3,0x51,0x10,0xe2,0x17,0x08,0xe1,
+	0x06,0x04,0xe0,0x03,0x02,0xcf,0x86,0xe5,0x06,0x01,0xd4,0x82,0xd3,0x41,0xd2,0x21,
+	0xd1,0x10,0x10,0x08,0x05,0xff,0xe4,0xb8,0xbd,0x00,0x05,0xff,0xe4,0xb8,0xb8,0x00,
+	0x10,0x08,0x05,0xff,0xe4,0xb9,0x81,0x00,0x05,0xff,0xf0,0xa0,0x84,0xa2,0x00,0xd1,
+	0x10,0x10,0x08,0x05,0xff,0xe4,0xbd,0xa0,0x00,0x05,0xff,0xe4,0xbe,0xae,0x00,0x10,
+	0x08,0x05,0xff,0xe4,0xbe,0xbb,0x00,0x05,0xff,0xe5,0x80,0x82,0x00,0xd2,0x20,0xd1,
+	0x10,0x10,0x08,0x05,0xff,0xe5,0x81,0xba,0x00,0x05,0xff,0xe5,0x82,0x99,0x00,0x10,
+	0x08,0x05,0xff,0xe5,0x83,0xa7,0x00,0x05,0xff,0xe5,0x83,0x8f,0x00,0xd1,0x11,0x10,
+	0x08,0x05,0xff,0xe3,0x92,0x9e,0x00,0x05,0xff,0xf0,0xa0,0x98,0xba,0x00,0x10,0x08,
+	0x05,0xff,0xe5,0x85,0x8d,0x00,0x05,0xff,0xe5,0x85,0x94,0x00,0xd3,0x42,0xd2,0x21,
+	0xd1,0x10,0x10,0x08,0x05,0xff,0xe5,0x85,0xa4,0x00,0x05,0xff,0xe5,0x85,0xb7,0x00,
+	0x10,0x09,0x05,0xff,0xf0,0xa0,0x94,0x9c,0x00,0x05,0xff,0xe3,0x92,0xb9,0x00,0xd1,
+	0x10,0x10,0x08,0x05,0xff,0xe5,0x85,0xa7,0x00,0x05,0xff,0xe5,0x86,0x8d,0x00,0x10,
+	0x09,0x05,0xff,0xf0,0xa0,0x95,0x8b,0x00,0x05,0xff,0xe5,0x86,0x97,0x00,0xd2,0x20,
+	0xd1,0x10,0x10,0x08,0x05,0xff,0xe5,0x86,0xa4,0x00,0x05,0xff,0xe4,0xbb,0x8c,0x00,
+	0x10,0x08,0x05,0xff,0xe5,0x86,0xac,0x00,0x05,0xff,0xe5,0x86,0xb5,0x00,0xd1,0x11,
+	0x10,0x09,0x05,0xff,0xf0,0xa9,0x87,0x9f,0x00,0x05,0xff,0xe5,0x87,0xb5,0x00,0x10,
+	0x08,0x05,0xff,0xe5,0x88,0x83,0x00,0x05,0xff,0xe3,0x93,0x9f,0x00,0xd4,0x80,0xd3,
+	0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe5,0x88,0xbb,0x00,0x05,0xff,0xe5,
+	0x89,0x86,0x00,0x10,0x08,0x05,0xff,0xe5,0x89,0xb2,0x00,0x05,0xff,0xe5,0x89,0xb7,
+	0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe3,0x94,0x95,0x00,0x05,0xff,0xe5,0x8b,0x87,
+	0x00,0x10,0x08,0x05,0xff,0xe5,0x8b,0x89,0x00,0x05,0xff,0xe5,0x8b,0xa4,0x00,0xd2,
+	0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe5,0x8b,0xba,0x00,0x05,0xff,0xe5,0x8c,0x85,
+	0x00,0x10,0x08,0x05,0xff,0xe5,0x8c,0x86,0x00,0x05,0xff,0xe5,0x8c,0x97,0x00,0xd1,
+	0x10,0x10,0x08,0x05,0xff,0xe5,0x8d,0x89,0x00,0x05,0xff,0xe5,0x8d,0x91,0x00,0x10,
+	0x08,0x05,0xff,0xe5,0x8d,0x9a,0x00,0x05,0xff,0xe5,0x8d,0xb3,0x00,0xd3,0x39,0xd2,
+	0x18,0x91,0x10,0x10,0x08,0x05,0xff,0xe5,0x8d,0xbd,0x00,0x05,0xff,0xe5,0x8d,0xbf,
+	0x00,0x05,0xff,0xe5,0x8d,0xbf,0x00,0xd1,0x11,0x10,0x09,0x05,0xff,0xf0,0xa0,0xa8,
+	0xac,0x00,0x05,0xff,0xe7,0x81,0xb0,0x00,0x10,0x08,0x05,0xff,0xe5,0x8f,0x8a,0x00,
+	0x05,0xff,0xe5,0x8f,0x9f,0x00,0xd2,0x21,0xd1,0x11,0x10,0x09,0x05,0xff,0xf0,0xa0,
+	0xad,0xa3,0x00,0x05,0xff,0xe5,0x8f,0xab,0x00,0x10,0x08,0x05,0xff,0xe5,0x8f,0xb1,
+	0x00,0x05,0xff,0xe5,0x90,0x86,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe5,0x92,0x9e,
+	0x00,0x05,0xff,0xe5,0x90,0xb8,0x00,0x10,0x08,0x05,0xff,0xe5,0x91,0x88,0x00,0x05,
+	0xff,0xe5,0x91,0xa8,0x00,0xcf,0x86,0xe5,0x02,0x01,0xd4,0x80,0xd3,0x40,0xd2,0x20,
+	0xd1,0x10,0x10,0x08,0x05,0xff,0xe5,0x92,0xa2,0x00,0x05,0xff,0xe5,0x93,0xb6,0x00,
+	0x10,0x08,0x05,0xff,0xe5,0x94,0x90,0x00,0x05,0xff,0xe5,0x95,0x93,0x00,0xd1,0x10,
+	0x10,0x08,0x05,0xff,0xe5,0x95,0xa3,0x00,0x05,0xff,0xe5,0x96,0x84,0x00,0x10,0x08,
+	0x05,0xff,0xe5,0x96,0x84,0x00,0x05,0xff,0xe5,0x96,0x99,0x00,0xd2,0x20,0xd1,0x10,
+	0x10,0x08,0x05,0xff,0xe5,0x96,0xab,0x00,0x05,0xff,0xe5,0x96,0xb3,0x00,0x10,0x08,
+	0x05,0xff,0xe5,0x97,0x82,0x00,0x05,0xff,0xe5,0x9c,0x96,0x00,0xd1,0x10,0x10,0x08,
+	0x05,0xff,0xe5,0x98,0x86,0x00,0x05,0xff,0xe5,0x9c,0x97,0x00,0x10,0x08,0x05,0xff,
+	0xe5,0x99,0x91,0x00,0x05,0xff,0xe5,0x99,0xb4,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,
+	0x10,0x08,0x05,0xff,0xe5,0x88,0x87,0x00,0x05,0xff,0xe5,0xa3,0xae,0x00,0x10,0x08,
+	0x05,0xff,0xe5,0x9f,0x8e,0x00,0x05,0xff,0xe5,0x9f,0xb4,0x00,0xd1,0x10,0x10,0x08,
+	0x05,0xff,0xe5,0xa0,0x8d,0x00,0x05,0xff,0xe5,0x9e,0x8b,0x00,0x10,0x08,0x05,0xff,
+	0xe5,0xa0,0xb2,0x00,0x05,0xff,0xe5,0xa0,0xb1,0x00,0xd2,0x21,0xd1,0x11,0x10,0x08,
+	0x05,0xff,0xe5,0xa2,0xac,0x00,0x05,0xff,0xf0,0xa1,0x93,0xa4,0x00,0x10,0x08,0x05,
+	0xff,0xe5,0xa3,0xb2,0x00,0x05,0xff,0xe5,0xa3,0xb7,0x00,0xd1,0x10,0x10,0x08,0x05,
+	0xff,0xe5,0xa4,0x86,0x00,0x05,0xff,0xe5,0xa4,0x9a,0x00,0x10,0x08,0x05,0xff,0xe5,
+	0xa4,0xa2,0x00,0x05,0xff,0xe5,0xa5,0xa2,0x00,0xd4,0x7b,0xd3,0x42,0xd2,0x22,0xd1,
+	0x12,0x10,0x09,0x05,0xff,0xf0,0xa1,0x9a,0xa8,0x00,0x05,0xff,0xf0,0xa1,0x9b,0xaa,
+	0x00,0x10,0x08,0x05,0xff,0xe5,0xa7,0xac,0x00,0x05,0xff,0xe5,0xa8,0x9b,0x00,0xd1,
+	0x10,0x10,0x08,0x05,0xff,0xe5,0xa8,0xa7,0x00,0x05,0xff,0xe5,0xa7,0x98,0x00,0x10,
+	0x08,0x05,0xff,0xe5,0xa9,0xa6,0x00,0x05,0xff,0xe3,0x9b,0xae,0x00,0xd2,0x18,0x91,
+	0x10,0x10,0x08,0x05,0xff,0xe3,0x9b,0xbc,0x00,0x05,0xff,0xe5,0xac,0x88,0x00,0x05,
+	0xff,0xe5,0xac,0xbe,0x00,0xd1,0x11,0x10,0x09,0x05,0xff,0xf0,0xa1,0xa7,0x88,0x00,
+	0x05,0xff,0xe5,0xaf,0x83,0x00,0x10,0x08,0x05,0xff,0xe5,0xaf,0x98,0x00,0x05,0xff,
+	0xe5,0xaf,0xa7,0x00,0xd3,0x41,0xd2,0x21,0xd1,0x11,0x10,0x08,0x05,0xff,0xe5,0xaf,
+	0xb3,0x00,0x05,0xff,0xf0,0xa1,0xac,0x98,0x00,0x10,0x08,0x05,0xff,0xe5,0xaf,0xbf,
+	0x00,0x05,0xff,0xe5,0xb0,0x86,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe5,0xbd,0x93,
+	0x00,0x05,0xff,0xe5,0xb0,0xa2,0x00,0x10,0x08,0x05,0xff,0xe3,0x9e,0x81,0x00,0x05,
+	0xff,0xe5,0xb1,0xa0,0x00,0xd2,0x21,0xd1,0x10,0x10,0x08,0x05,0xff,0xe5,0xb1,0xae,
+	0x00,0x05,0xff,0xe5,0xb3,0x80,0x00,0x10,0x08,0x05,0xff,0xe5,0xb2,0x8d,0x00,0x05,
+	0xff,0xf0,0xa1,0xb7,0xa4,0x00,0xd1,0x11,0x10,0x08,0x05,0xff,0xe5,0xb5,0x83,0x00,
+	0x05,0xff,0xf0,0xa1,0xb7,0xa6,0x00,0x10,0x08,0x05,0xff,0xe5,0xb5,0xae,0x00,0x05,
+	0xff,0xe5,0xb5,0xab,0x00,0xe0,0x04,0x02,0xcf,0x86,0xd5,0xfe,0xd4,0x82,0xd3,0x40,
+	0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe5,0xb5,0xbc,0x00,0x05,0xff,0xe5,0xb7,
+	0xa1,0x00,0x10,0x08,0x05,0xff,0xe5,0xb7,0xa2,0x00,0x05,0xff,0xe3,0xa0,0xaf,0x00,
+	0xd1,0x10,0x10,0x08,0x05,0xff,0xe5,0xb7,0xbd,0x00,0x05,0xff,0xe5,0xb8,0xa8,0x00,
+	0x10,0x08,0x05,0xff,0xe5,0xb8,0xbd,0x00,0x05,0xff,0xe5,0xb9,0xa9,0x00,0xd2,0x21,
+	0xd1,0x11,0x10,0x08,0x05,0xff,0xe3,0xa1,0xa2,0x00,0x05,0xff,0xf0,0xa2,0x86,0x83,
+	0x00,0x10,0x08,0x05,0xff,0xe3,0xa1,0xbc,0x00,0x05,0xff,0xe5,0xba,0xb0,0x00,0xd1,
+	0x10,0x10,0x08,0x05,0xff,0xe5,0xba,0xb3,0x00,0x05,0xff,0xe5,0xba,0xb6,0x00,0x10,
+	0x08,0x05,0xff,0xe5,0xbb,0x8a,0x00,0x05,0xff,0xf0,0xaa,0x8e,0x92,0x00,0xd3,0x3b,
+	0xd2,0x22,0xd1,0x11,0x10,0x08,0x05,0xff,0xe5,0xbb,0xbe,0x00,0x05,0xff,0xf0,0xa2,
+	0x8c,0xb1,0x00,0x10,0x09,0x05,0xff,0xf0,0xa2,0x8c,0xb1,0x00,0x05,0xff,0xe8,0x88,
+	0x81,0x00,0x51,0x08,0x05,0xff,0xe5,0xbc,0xa2,0x00,0x10,0x08,0x05,0xff,0xe3,0xa3,
+	0x87,0x00,0x05,0xff,0xf0,0xa3,0x8a,0xb8,0x00,0xd2,0x21,0xd1,0x11,0x10,0x09,0x05,
+	0xff,0xf0,0xa6,0x87,0x9a,0x00,0x05,0xff,0xe5,0xbd,0xa2,0x00,0x10,0x08,0x05,0xff,
+	0xe5,0xbd,0xab,0x00,0x05,0xff,0xe3,0xa3,0xa3,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,
+	0xe5,0xbe,0x9a,0x00,0x05,0xff,0xe5,0xbf,0x8d,0x00,0x10,0x08,0x05,0xff,0xe5,0xbf,
+	0x97,0x00,0x05,0xff,0xe5,0xbf,0xb9,0x00,0xd4,0x81,0xd3,0x41,0xd2,0x20,0xd1,0x10,
+	0x10,0x08,0x05,0xff,0xe6,0x82,0x81,0x00,0x05,0xff,0xe3,0xa4,0xba,0x00,0x10,0x08,
+	0x05,0xff,0xe3,0xa4,0x9c,0x00,0x05,0xff,0xe6,0x82,0x94,0x00,0xd1,0x11,0x10,0x09,
+	0x05,0xff,0xf0,0xa2,0x9b,0x94,0x00,0x05,0xff,0xe6,0x83,0x87,0x00,0x10,0x08,0x05,
+	0xff,0xe6,0x85,0x88,0x00,0x05,0xff,0xe6,0x85,0x8c,0x00,0xd2,0x20,0xd1,0x10,0x10,
+	0x08,0x05,0xff,0xe6,0x85,0x8e,0x00,0x05,0xff,0xe6,0x85,0x8c,0x00,0x10,0x08,0x05,
+	0xff,0xe6,0x85,0xba,0x00,0x05,0xff,0xe6,0x86,0x8e,0x00,0xd1,0x10,0x10,0x08,0x05,
+	0xff,0xe6,0x86,0xb2,0x00,0x05,0xff,0xe6,0x86,0xa4,0x00,0x10,0x08,0x05,0xff,0xe6,
+	0x86,0xaf,0x00,0x05,0xff,0xe6,0x87,0x9e,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,
+	0x08,0x05,0xff,0xe6,0x87,0xb2,0x00,0x05,0xff,0xe6,0x87,0xb6,0x00,0x10,0x08,0x05,
+	0xff,0xe6,0x88,0x90,0x00,0x05,0xff,0xe6,0x88,0x9b,0x00,0xd1,0x10,0x10,0x08,0x05,
+	0xff,0xe6,0x89,0x9d,0x00,0x05,0xff,0xe6,0x8a,0xb1,0x00,0x10,0x08,0x05,0xff,0xe6,
+	0x8b,0x94,0x00,0x05,0xff,0xe6,0x8d,0x90,0x00,0xd2,0x21,0xd1,0x11,0x10,0x09,0x05,
+	0xff,0xf0,0xa2,0xac,0x8c,0x00,0x05,0xff,0xe6,0x8c,0xbd,0x00,0x10,0x08,0x05,0xff,
+	0xe6,0x8b,0xbc,0x00,0x05,0xff,0xe6,0x8d,0xa8,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,
+	0xe6,0x8e,0x83,0x00,0x05,0xff,0xe6,0x8f,0xa4,0x00,0x10,0x09,0x05,0xff,0xf0,0xa2,
+	0xaf,0xb1,0x00,0x05,0xff,0xe6,0x90,0xa2,0x00,0xcf,0x86,0xe5,0x03,0x01,0xd4,0x81,
+	0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0x8f,0x85,0x00,0x05,0xff,
+	0xe6,0x8e,0xa9,0x00,0x10,0x08,0x05,0xff,0xe3,0xa8,0xae,0x00,0x05,0xff,0xe6,0x91,
+	0xa9,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0x91,0xbe,0x00,0x05,0xff,0xe6,0x92,
+	0x9d,0x00,0x10,0x08,0x05,0xff,0xe6,0x91,0xb7,0x00,0x05,0xff,0xe3,0xa9,0xac,0x00,
+	0xd2,0x21,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0x95,0x8f,0x00,0x05,0xff,0xe6,0x95,
+	0xac,0x00,0x10,0x09,0x05,0xff,0xf0,0xa3,0x80,0x8a,0x00,0x05,0xff,0xe6,0x97,0xa3,
+	0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0x9b,0xb8,0x00,0x05,0xff,0xe6,0x99,0x89,
+	0x00,0x10,0x08,0x05,0xff,0xe3,0xac,0x99,0x00,0x05,0xff,0xe6,0x9a,0x91,0x00,0xd3,
+	0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe3,0xac,0x88,0x00,0x05,0xff,0xe3,
+	0xab,0xa4,0x00,0x10,0x08,0x05,0xff,0xe5,0x86,0x92,0x00,0x05,0xff,0xe5,0x86,0x95,
+	0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0x9c,0x80,0x00,0x05,0xff,0xe6,0x9a,0x9c,
+	0x00,0x10,0x08,0x05,0xff,0xe8,0x82,0xad,0x00,0x05,0xff,0xe4,0x8f,0x99,0x00,0xd2,
+	0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0x9c,0x97,0x00,0x05,0xff,0xe6,0x9c,0x9b,
+	0x00,0x10,0x08,0x05,0xff,0xe6,0x9c,0xa1,0x00,0x05,0xff,0xe6,0x9d,0x9e,0x00,0xd1,
+	0x11,0x10,0x08,0x05,0xff,0xe6,0x9d,0x93,0x00,0x05,0xff,0xf0,0xa3,0x8f,0x83,0x00,
+	0x10,0x08,0x05,0xff,0xe3,0xad,0x89,0x00,0x05,0xff,0xe6,0x9f,0xba,0x00,0xd4,0x82,
+	0xd3,0x41,0xd2,0x21,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0x9e,0x85,0x00,0x05,0xff,
+	0xe6,0xa1,0x92,0x00,0x10,0x08,0x05,0xff,0xe6,0xa2,0x85,0x00,0x05,0xff,0xf0,0xa3,
+	0x91,0xad,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0xa2,0x8e,0x00,0x05,0xff,0xe6,
+	0xa0,0x9f,0x00,0x10,0x08,0x05,0xff,0xe6,0xa4,0x94,0x00,0x05,0xff,0xe3,0xae,0x9d,
+	0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0xa5,0x82,0x00,0x05,0xff,0xe6,
+	0xa6,0xa3,0x00,0x10,0x08,0x05,0xff,0xe6,0xa7,0xaa,0x00,0x05,0xff,0xe6,0xaa,0xa8,
+	0x00,0xd1,0x11,0x10,0x09,0x05,0xff,0xf0,0xa3,0x9a,0xa3,0x00,0x05,0xff,0xe6,0xab,
+	0x9b,0x00,0x10,0x08,0x05,0xff,0xe3,0xb0,0x98,0x00,0x05,0xff,0xe6,0xac,0xa1,0x00,
+	0xd3,0x42,0xd2,0x21,0xd1,0x11,0x10,0x09,0x05,0xff,0xf0,0xa3,0xa2,0xa7,0x00,0x05,
+	0xff,0xe6,0xad,0x94,0x00,0x10,0x08,0x05,0xff,0xe3,0xb1,0x8e,0x00,0x05,0xff,0xe6,
+	0xad,0xb2,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0xae,0x9f,0x00,0x05,0xff,0xe6,
+	0xae,0xba,0x00,0x10,0x08,0x05,0xff,0xe6,0xae,0xbb,0x00,0x05,0xff,0xf0,0xa3,0xaa,
+	0x8d,0x00,0xd2,0x23,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa1,0xb4,0x8b,0x00,0x05,
+	0xff,0xf0,0xa3,0xab,0xba,0x00,0x10,0x08,0x05,0xff,0xe6,0xb1,0x8e,0x00,0x05,0xff,
+	0xf0,0xa3,0xb2,0xbc,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0xb2,0xbf,0x00,0x05,
+	0xff,0xe6,0xb3,0x8d,0x00,0x10,0x08,0x05,0xff,0xe6,0xb1,0xa7,0x00,0x05,0xff,0xe6,
+	0xb4,0x96,0x00,0xe1,0x1d,0x04,0xe0,0x0c,0x02,0xcf,0x86,0xe5,0x08,0x01,0xd4,0x82,
+	0xd3,0x41,0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0xb4,0xbe,0x00,0x05,0xff,
+	0xe6,0xb5,0xb7,0x00,0x10,0x08,0x05,0xff,0xe6,0xb5,0x81,0x00,0x05,0xff,0xe6,0xb5,
+	0xa9,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0xb5,0xb8,0x00,0x05,0xff,0xe6,0xb6,
+	0x85,0x00,0x10,0x09,0x05,0xff,0xf0,0xa3,0xb4,0x9e,0x00,0x05,0xff,0xe6,0xb4,0xb4,
+	0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0xb8,0xaf,0x00,0x05,0xff,0xe6,
+	0xb9,0xae,0x00,0x10,0x08,0x05,0xff,0xe3,0xb4,0xb3,0x00,0x05,0xff,0xe6,0xbb,0x8b,
+	0x00,0xd1,0x11,0x10,0x08,0x05,0xff,0xe6,0xbb,0x87,0x00,0x05,0xff,0xf0,0xa3,0xbb,
+	0x91,0x00,0x10,0x08,0x05,0xff,0xe6,0xb7,0xb9,0x00,0x05,0xff,0xe6,0xbd,0xae,0x00,
+	0xd3,0x42,0xd2,0x22,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa3,0xbd,0x9e,0x00,0x05,
+	0xff,0xf0,0xa3,0xbe,0x8e,0x00,0x10,0x08,0x05,0xff,0xe6,0xbf,0x86,0x00,0x05,0xff,
+	0xe7,0x80,0xb9,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe7,0x80,0x9e,0x00,0x05,0xff,
+	0xe7,0x80,0x9b,0x00,0x10,0x08,0x05,0xff,0xe3,0xb6,0x96,0x00,0x05,0xff,0xe7,0x81,
+	0x8a,0x00,0xd2,0x21,0xd1,0x10,0x10,0x08,0x05,0xff,0xe7,0x81,0xbd,0x00,0x05,0xff,
+	0xe7,0x81,0xb7,0x00,0x10,0x08,0x05,0xff,0xe7,0x82,0xad,0x00,0x05,0xff,0xf0,0xa0,
+	0x94,0xa5,0x00,0xd1,0x11,0x10,0x08,0x05,0xff,0xe7,0x85,0x85,0x00,0x05,0xff,0xf0,
+	0xa4,0x89,0xa3,0x00,0x10,0x08,0x05,0xff,0xe7,0x86,0x9c,0x00,0x05,0xff,0xf0,0xa4,
+	0x8e,0xab,0x00,0xd4,0x7b,0xd3,0x43,0xd2,0x21,0xd1,0x10,0x10,0x08,0x05,0xff,0xe7,
+	0x88,0xa8,0x00,0x05,0xff,0xe7,0x88,0xb5,0x00,0x10,0x08,0x05,0xff,0xe7,0x89,0x90,
+	0x00,0x05,0xff,0xf0,0xa4,0x98,0x88,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe7,0x8a,
+	0x80,0x00,0x05,0xff,0xe7,0x8a,0x95,0x00,0x10,0x09,0x05,0xff,0xf0,0xa4,0x9c,0xb5,
+	0x00,0x05,0xff,0xf0,0xa4,0xa0,0x94,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,
+	0xe7,0x8d,0xba,0x00,0x05,0xff,0xe7,0x8e,0x8b,0x00,0x10,0x08,0x05,0xff,0xe3,0xba,
+	0xac,0x00,0x05,0xff,0xe7,0x8e,0xa5,0x00,0x51,0x08,0x05,0xff,0xe3,0xba,0xb8,0x00,
+	0x10,0x08,0x05,0xff,0xe7,0x91,0x87,0x00,0x05,0xff,0xe7,0x91,0x9c,0x00,0xd3,0x42,
+	0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe7,0x91,0xb1,0x00,0x05,0xff,0xe7,0x92,
+	0x85,0x00,0x10,0x08,0x05,0xff,0xe7,0x93,0x8a,0x00,0x05,0xff,0xe3,0xbc,0x9b,0x00,
+	0xd1,0x11,0x10,0x08,0x05,0xff,0xe7,0x94,0xa4,0x00,0x05,0xff,0xf0,0xa4,0xb0,0xb6,
+	0x00,0x10,0x08,0x05,0xff,0xe7,0x94,0xbe,0x00,0x05,0xff,0xf0,0xa4,0xb2,0x92,0x00,
+	0xd2,0x22,0xd1,0x11,0x10,0x08,0x05,0xff,0xe7,0x95,0xb0,0x00,0x05,0xff,0xf0,0xa2,
+	0x86,0x9f,0x00,0x10,0x08,0x05,0xff,0xe7,0x98,0x90,0x00,0x05,0xff,0xf0,0xa4,0xbe,
+	0xa1,0x00,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa4,0xbe,0xb8,0x00,0x05,0xff,0xf0,
+	0xa5,0x81,0x84,0x00,0x10,0x08,0x05,0xff,0xe3,0xbf,0xbc,0x00,0x05,0xff,0xe4,0x80,
+	0x88,0x00,0xcf,0x86,0xe5,0x04,0x01,0xd4,0x7d,0xd3,0x3c,0xd2,0x23,0xd1,0x11,0x10,
+	0x08,0x05,0xff,0xe7,0x9b,0xb4,0x00,0x05,0xff,0xf0,0xa5,0x83,0xb3,0x00,0x10,0x09,
+	0x05,0xff,0xf0,0xa5,0x83,0xb2,0x00,0x05,0xff,0xf0,0xa5,0x84,0x99,0x00,0x91,0x11,
+	0x10,0x09,0x05,0xff,0xf0,0xa5,0x84,0xb3,0x00,0x05,0xff,0xe7,0x9c,0x9e,0x00,0x05,
+	0xff,0xe7,0x9c,0x9f,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe7,0x9d,0x8a,
+	0x00,0x05,0xff,0xe4,0x80,0xb9,0x00,0x10,0x08,0x05,0xff,0xe7,0x9e,0x8b,0x00,0x05,
+	0xff,0xe4,0x81,0x86,0x00,0xd1,0x11,0x10,0x08,0x05,0xff,0xe4,0x82,0x96,0x00,0x05,
+	0xff,0xf0,0xa5,0x90,0x9d,0x00,0x10,0x08,0x05,0xff,0xe7,0xa1,0x8e,0x00,0x05,0xff,
+	0xe7,0xa2,0x8c,0x00,0xd3,0x43,0xd2,0x21,0xd1,0x10,0x10,0x08,0x05,0xff,0xe7,0xa3,
+	0x8c,0x00,0x05,0xff,0xe4,0x83,0xa3,0x00,0x10,0x09,0x05,0xff,0xf0,0xa5,0x98,0xa6,
+	0x00,0x05,0xff,0xe7,0xa5,0x96,0x00,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa5,0x9a,
+	0x9a,0x00,0x05,0xff,0xf0,0xa5,0x9b,0x85,0x00,0x10,0x08,0x05,0xff,0xe7,0xa6,0x8f,
+	0x00,0x05,0xff,0xe7,0xa7,0xab,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe4,
+	0x84,0xaf,0x00,0x05,0xff,0xe7,0xa9,0x80,0x00,0x10,0x08,0x05,0xff,0xe7,0xa9,0x8a,
+	0x00,0x05,0xff,0xe7,0xa9,0x8f,0x00,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa5,0xa5,
+	0xbc,0x00,0x05,0xff,0xf0,0xa5,0xaa,0xa7,0x00,0x10,0x09,0x05,0xff,0xf0,0xa5,0xaa,
+	0xa7,0x00,0x05,0xff,0xe7,0xab,0xae,0x00,0xd4,0x83,0xd3,0x42,0xd2,0x21,0xd1,0x11,
+	0x10,0x08,0x05,0xff,0xe4,0x88,0x82,0x00,0x05,0xff,0xf0,0xa5,0xae,0xab,0x00,0x10,
+	0x08,0x05,0xff,0xe7,0xaf,0x86,0x00,0x05,0xff,0xe7,0xaf,0x89,0x00,0xd1,0x11,0x10,
+	0x08,0x05,0xff,0xe4,0x88,0xa7,0x00,0x05,0xff,0xf0,0xa5,0xb2,0x80,0x00,0x10,0x08,
+	0x05,0xff,0xe7,0xb3,0x92,0x00,0x05,0xff,0xe4,0x8a,0xa0,0x00,0xd2,0x21,0xd1,0x10,
+	0x10,0x08,0x05,0xff,0xe7,0xb3,0xa8,0x00,0x05,0xff,0xe7,0xb3,0xa3,0x00,0x10,0x08,
+	0x05,0xff,0xe7,0xb4,0x80,0x00,0x05,0xff,0xf0,0xa5,0xbe,0x86,0x00,0xd1,0x10,0x10,
+	0x08,0x05,0xff,0xe7,0xb5,0xa3,0x00,0x05,0xff,0xe4,0x8c,0x81,0x00,0x10,0x08,0x05,
+	0xff,0xe7,0xb7,0x87,0x00,0x05,0xff,0xe7,0xb8,0x82,0x00,0xd3,0x44,0xd2,0x22,0xd1,
+	0x10,0x10,0x08,0x05,0xff,0xe7,0xb9,0x85,0x00,0x05,0xff,0xe4,0x8c,0xb4,0x00,0x10,
+	0x09,0x05,0xff,0xf0,0xa6,0x88,0xa8,0x00,0x05,0xff,0xf0,0xa6,0x89,0x87,0x00,0xd1,
+	0x11,0x10,0x08,0x05,0xff,0xe4,0x8d,0x99,0x00,0x05,0xff,0xf0,0xa6,0x8b,0x99,0x00,
+	0x10,0x08,0x05,0xff,0xe7,0xbd,0xba,0x00,0x05,0xff,0xf0,0xa6,0x8c,0xbe,0x00,0xd2,
+	0x21,0xd1,0x10,0x10,0x08,0x05,0xff,0xe7,0xbe,0x95,0x00,0x05,0xff,0xe7,0xbf,0xba,
+	0x00,0x10,0x08,0x05,0xff,0xe8,0x80,0x85,0x00,0x05,0xff,0xf0,0xa6,0x93,0x9a,0x00,
+	0xd1,0x11,0x10,0x09,0x05,0xff,0xf0,0xa6,0x94,0xa3,0x00,0x05,0xff,0xe8,0x81,0xa0,
+	0x00,0x10,0x09,0x05,0xff,0xf0,0xa6,0x96,0xa8,0x00,0x05,0xff,0xe8,0x81,0xb0,0x00,
+	0xe0,0x11,0x02,0xcf,0x86,0xe5,0x07,0x01,0xd4,0x85,0xd3,0x42,0xd2,0x21,0xd1,0x11,
+	0x10,0x09,0x05,0xff,0xf0,0xa3,0x8d,0x9f,0x00,0x05,0xff,0xe4,0x8f,0x95,0x00,0x10,
+	0x08,0x05,0xff,0xe8,0x82,0xb2,0x00,0x05,0xff,0xe8,0x84,0x83,0x00,0xd1,0x10,0x10,
+	0x08,0x05,0xff,0xe4,0x90,0x8b,0x00,0x05,0xff,0xe8,0x84,0xbe,0x00,0x10,0x08,0x05,
+	0xff,0xe5,0xaa,0xb5,0x00,0x05,0xff,0xf0,0xa6,0x9e,0xa7,0x00,0xd2,0x23,0xd1,0x12,
+	0x10,0x09,0x05,0xff,0xf0,0xa6,0x9e,0xb5,0x00,0x05,0xff,0xf0,0xa3,0x8e,0x93,0x00,
+	0x10,0x09,0x05,0xff,0xf0,0xa3,0x8e,0x9c,0x00,0x05,0xff,0xe8,0x88,0x81,0x00,0xd1,
+	0x10,0x10,0x08,0x05,0xff,0xe8,0x88,0x84,0x00,0x05,0xff,0xe8,0xbe,0x9e,0x00,0x10,
+	0x08,0x05,0xff,0xe4,0x91,0xab,0x00,0x05,0xff,0xe8,0x8a,0x91,0x00,0xd3,0x41,0xd2,
+	0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe8,0x8a,0x8b,0x00,0x05,0xff,0xe8,0x8a,0x9d,
+	0x00,0x10,0x08,0x05,0xff,0xe5,0x8a,0xb3,0x00,0x05,0xff,0xe8,0x8a,0xb1,0x00,0xd1,
+	0x10,0x10,0x08,0x05,0xff,0xe8,0x8a,0xb3,0x00,0x05,0xff,0xe8,0x8a,0xbd,0x00,0x10,
+	0x08,0x05,0xff,0xe8,0x8b,0xa6,0x00,0x05,0xff,0xf0,0xa6,0xac,0xbc,0x00,0xd2,0x20,
+	0xd1,0x10,0x10,0x08,0x05,0xff,0xe8,0x8b,0xa5,0x00,0x05,0xff,0xe8,0x8c,0x9d,0x00,
+	0x10,0x08,0x05,0xff,0xe8,0x8d,0xa3,0x00,0x05,0xff,0xe8,0x8e,0xad,0x00,0xd1,0x10,
+	0x10,0x08,0x05,0xff,0xe8,0x8c,0xa3,0x00,0x05,0xff,0xe8,0x8e,0xbd,0x00,0x10,0x08,
+	0x05,0xff,0xe8,0x8f,0xa7,0x00,0x05,0xff,0xe8,0x91,0x97,0x00,0xd4,0x85,0xd3,0x43,
+	0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe8,0x8d,0x93,0x00,0x05,0xff,0xe8,0x8f,
+	0x8a,0x00,0x10,0x08,0x05,0xff,0xe8,0x8f,0x8c,0x00,0x05,0xff,0xe8,0x8f,0x9c,0x00,
+	0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa6,0xb0,0xb6,0x00,0x05,0xff,0xf0,0xa6,0xb5,
+	0xab,0x00,0x10,0x09,0x05,0xff,0xf0,0xa6,0xb3,0x95,0x00,0x05,0xff,0xe4,0x94,0xab,
+	0x00,0xd2,0x21,0xd1,0x10,0x10,0x08,0x05,0xff,0xe8,0x93,0xb1,0x00,0x05,0xff,0xe8,
+	0x93,0xb3,0x00,0x10,0x08,0x05,0xff,0xe8,0x94,0x96,0x00,0x05,0xff,0xf0,0xa7,0x8f,
+	0x8a,0x00,0xd1,0x11,0x10,0x08,0x05,0xff,0xe8,0x95,0xa4,0x00,0x05,0xff,0xf0,0xa6,
+	0xbc,0xac,0x00,0x10,0x08,0x05,0xff,0xe4,0x95,0x9d,0x00,0x05,0xff,0xe4,0x95,0xa1,
+	0x00,0xd3,0x42,0xd2,0x22,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa6,0xbe,0xb1,0x00,
+	0x05,0xff,0xf0,0xa7,0x83,0x92,0x00,0x10,0x08,0x05,0xff,0xe4,0x95,0xab,0x00,0x05,
+	0xff,0xe8,0x99,0x90,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe8,0x99,0x9c,0x00,0x05,
+	0xff,0xe8,0x99,0xa7,0x00,0x10,0x08,0x05,0xff,0xe8,0x99,0xa9,0x00,0x05,0xff,0xe8,
+	0x9a,0xa9,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe8,0x9a,0x88,0x00,0x05,
+	0xff,0xe8,0x9c,0x8e,0x00,0x10,0x08,0x05,0xff,0xe8,0x9b,0xa2,0x00,0x05,0xff,0xe8,
+	0x9d,0xb9,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe8,0x9c,0xa8,0x00,0x05,0xff,0xe8,
+	0x9d,0xab,0x00,0x10,0x08,0x05,0xff,0xe8,0x9e,0x86,0x00,0x05,0xff,0xe4,0x97,0x97,
+	0x00,0xcf,0x86,0xe5,0x08,0x01,0xd4,0x83,0xd3,0x41,0xd2,0x20,0xd1,0x10,0x10,0x08,
+	0x05,0xff,0xe8,0x9f,0xa1,0x00,0x05,0xff,0xe8,0xa0,0x81,0x00,0x10,0x08,0x05,0xff,
+	0xe4,0x97,0xb9,0x00,0x05,0xff,0xe8,0xa1,0xa0,0x00,0xd1,0x11,0x10,0x08,0x05,0xff,
+	0xe8,0xa1,0xa3,0x00,0x05,0xff,0xf0,0xa7,0x99,0xa7,0x00,0x10,0x08,0x05,0xff,0xe8,
+	0xa3,0x97,0x00,0x05,0xff,0xe8,0xa3,0x9e,0x00,0xd2,0x21,0xd1,0x10,0x10,0x08,0x05,
+	0xff,0xe4,0x98,0xb5,0x00,0x05,0xff,0xe8,0xa3,0xba,0x00,0x10,0x08,0x05,0xff,0xe3,
+	0x92,0xbb,0x00,0x05,0xff,0xf0,0xa7,0xa2,0xae,0x00,0xd1,0x11,0x10,0x09,0x05,0xff,
+	0xf0,0xa7,0xa5,0xa6,0x00,0x05,0xff,0xe4,0x9a,0xbe,0x00,0x10,0x08,0x05,0xff,0xe4,
+	0x9b,0x87,0x00,0x05,0xff,0xe8,0xaa,0xa0,0x00,0xd3,0x41,0xd2,0x21,0xd1,0x10,0x10,
+	0x08,0x05,0xff,0xe8,0xab,0xad,0x00,0x05,0xff,0xe8,0xae,0x8a,0x00,0x10,0x08,0x05,
+	0xff,0xe8,0xb1,0x95,0x00,0x05,0xff,0xf0,0xa7,0xb2,0xa8,0x00,0xd1,0x10,0x10,0x08,
+	0x05,0xff,0xe8,0xb2,0xab,0x00,0x05,0xff,0xe8,0xb3,0x81,0x00,0x10,0x08,0x05,0xff,
+	0xe8,0xb4,0x9b,0x00,0x05,0xff,0xe8,0xb5,0xb7,0x00,0xd2,0x22,0xd1,0x12,0x10,0x09,
+	0x05,0xff,0xf0,0xa7,0xbc,0xaf,0x00,0x05,0xff,0xf0,0xa0,0xa0,0x84,0x00,0x10,0x08,
+	0x05,0xff,0xe8,0xb7,0x8b,0x00,0x05,0xff,0xe8,0xb6,0xbc,0x00,0xd1,0x11,0x10,0x08,
+	0x05,0xff,0xe8,0xb7,0xb0,0x00,0x05,0xff,0xf0,0xa0,0xa3,0x9e,0x00,0x10,0x08,0x05,
+	0xff,0xe8,0xbb,0x94,0x00,0x05,0xff,0xe8,0xbc,0xb8,0x00,0xd4,0x84,0xd3,0x43,0xd2,
+	0x22,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa8,0x97,0x92,0x00,0x05,0xff,0xf0,0xa8,
+	0x97,0xad,0x00,0x10,0x08,0x05,0xff,0xe9,0x82,0x94,0x00,0x05,0xff,0xe9,0x83,0xb1,
+	0x00,0xd1,0x11,0x10,0x08,0x05,0xff,0xe9,0x84,0x91,0x00,0x05,0xff,0xf0,0xa8,0x9c,
+	0xae,0x00,0x10,0x08,0x05,0xff,0xe9,0x84,0x9b,0x00,0x05,0xff,0xe9,0x88,0xb8,0x00,
+	0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe9,0x8b,0x97,0x00,0x05,0xff,0xe9,0x8b,
+	0x98,0x00,0x10,0x08,0x05,0xff,0xe9,0x89,0xbc,0x00,0x05,0xff,0xe9,0x8f,0xb9,0x00,
+	0xd1,0x11,0x10,0x08,0x05,0xff,0xe9,0x90,0x95,0x00,0x05,0xff,0xf0,0xa8,0xaf,0xba,
+	0x00,0x10,0x08,0x05,0xff,0xe9,0x96,0x8b,0x00,0x05,0xff,0xe4,0xa6,0x95,0x00,0xd3,
+	0x43,0xd2,0x21,0xd1,0x11,0x10,0x08,0x05,0xff,0xe9,0x96,0xb7,0x00,0x05,0xff,0xf0,
+	0xa8,0xb5,0xb7,0x00,0x10,0x08,0x05,0xff,0xe4,0xa7,0xa6,0x00,0x05,0xff,0xe9,0x9b,
+	0x83,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe5,0xb6,0xb2,0x00,0x05,0xff,0xe9,0x9c,
+	0xa3,0x00,0x10,0x09,0x05,0xff,0xf0,0xa9,0x85,0x85,0x00,0x05,0xff,0xf0,0xa9,0x88,
+	0x9a,0x00,0xd2,0x21,0xd1,0x10,0x10,0x08,0x05,0xff,0xe4,0xa9,0xae,0x00,0x05,0xff,
+	0xe4,0xa9,0xb6,0x00,0x10,0x08,0x05,0xff,0xe9,0x9f,0xa0,0x00,0x05,0xff,0xf0,0xa9,
+	0x90,0x8a,0x00,0x91,0x11,0x10,0x08,0x05,0xff,0xe4,0xaa,0xb2,0x00,0x05,0xff,0xf0,
+	0xa9,0x92,0x96,0x00,0x05,0xff,0xe9,0xa0,0x8b,0x00,0xe2,0x10,0x01,0xe1,0x09,0x01,
+	0xe0,0x02,0x01,0xcf,0x86,0x95,0xfb,0xd4,0x82,0xd3,0x41,0xd2,0x21,0xd1,0x11,0x10,
+	0x08,0x05,0xff,0xe9,0xa0,0xa9,0x00,0x05,0xff,0xf0,0xa9,0x96,0xb6,0x00,0x10,0x08,
+	0x05,0xff,0xe9,0xa3,0xa2,0x00,0x05,0xff,0xe4,0xac,0xb3,0x00,0xd1,0x10,0x10,0x08,
+	0x05,0xff,0xe9,0xa4,0xa9,0x00,0x05,0xff,0xe9,0xa6,0xa7,0x00,0x10,0x08,0x05,0xff,
+	0xe9,0xa7,0x82,0x00,0x05,0xff,0xe9,0xa7,0xbe,0x00,0xd2,0x21,0xd1,0x11,0x10,0x08,
+	0x05,0xff,0xe4,0xaf,0x8e,0x00,0x05,0xff,0xf0,0xa9,0xac,0xb0,0x00,0x10,0x08,0x05,
+	0xff,0xe9,0xac,0x92,0x00,0x05,0xff,0xe9,0xb1,0x80,0x00,0xd1,0x10,0x10,0x08,0x05,
+	0xff,0xe9,0xb3,0xbd,0x00,0x05,0xff,0xe4,0xb3,0x8e,0x00,0x10,0x08,0x05,0xff,0xe4,
+	0xb3,0xad,0x00,0x05,0xff,0xe9,0xb5,0xa7,0x00,0xd3,0x44,0xd2,0x23,0xd1,0x11,0x10,
+	0x09,0x05,0xff,0xf0,0xaa,0x83,0x8e,0x00,0x05,0xff,0xe4,0xb3,0xb8,0x00,0x10,0x09,
+	0x05,0xff,0xf0,0xaa,0x84,0x85,0x00,0x05,0xff,0xf0,0xaa,0x88,0x8e,0x00,0xd1,0x11,
+	0x10,0x09,0x05,0xff,0xf0,0xaa,0x8a,0x91,0x00,0x05,0xff,0xe9,0xba,0xbb,0x00,0x10,
+	0x08,0x05,0xff,0xe4,0xb5,0x96,0x00,0x05,0xff,0xe9,0xbb,0xb9,0x00,0xd2,0x20,0xd1,
+	0x10,0x10,0x08,0x05,0xff,0xe9,0xbb,0xbe,0x00,0x05,0xff,0xe9,0xbc,0x85,0x00,0x10,
+	0x08,0x05,0xff,0xe9,0xbc,0x8f,0x00,0x05,0xff,0xe9,0xbc,0x96,0x00,0x91,0x11,0x10,
+	0x08,0x05,0xff,0xe9,0xbc,0xbb,0x00,0x05,0xff,0xf0,0xaa,0x98,0x80,0x00,0x00,0x00,
+	0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xd3,0x06,
+	0xcf,0x06,0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,0x06,0xcf,0x06,0x00,0x00,
+	0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x00,0x00,
+	0x53,0x04,0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x02,0x00,0xd3,0x08,
+	0xcf,0x86,0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd1,0x08,
+	0xcf,0x86,0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xcf,0x86,
+	0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,0x06,0x00,0x00,0xd3,0x06,0xcf,0x06,
+	0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,0x06,0xcf,0x06,0x00,0x00,0xd0,0x06,
+	0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x00,0x00,0x53,0x04,
+	0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x02,0x00,0xcf,0x86,0xd5,0xc0,
+	0xd4,0x60,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf,0x86,0xcf,0x06,
+	0x00,0x00,0xd1,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf,0x86,0xcf,0x06,
+	0x00,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,0x06,0x00,0x00,
+	0xd3,0x06,0xcf,0x06,0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,0x06,0xcf,0x06,
+	0x00,0x00,0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,
+	0x00,0x00,0x53,0x04,0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x02,0x00,
+	0xd3,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,
+	0xd1,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,
+	0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,0x06,0x00,0x00,0xd3,0x06,
+	0xcf,0x06,0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,0x06,0xcf,0x06,0x00,0x00,
+	0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x00,0x00,
+	0x53,0x04,0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x02,0x00,0xd4,0x60,
+	0xd3,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,
+	0xd1,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,
+	0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,0x06,0x00,0x00,0xd3,0x06,
+	0xcf,0x06,0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,0x06,0xcf,0x06,0x00,0x00,
+	0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x00,0x00,
+	0x53,0x04,0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x02,0x00,0xd3,0x08,
+	0xcf,0x86,0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd1,0x08,
+	0xcf,0x86,0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xcf,0x86,
+	0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,0x06,0x00,0x00,0xd3,0x06,0xcf,0x06,
+	0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,0x06,0xcf,0x06,0x00,0x00,0xd0,0x06,
+	0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x00,0x00,0x53,0x04,
+	0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x02,0x00,0xe0,0x83,0x01,0xcf,
+	0x86,0xd5,0xc0,0xd4,0x60,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf,
+	0x86,0xcf,0x06,0x00,0x00,0xd1,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf,
+	0x86,0xcf,0x06,0x00,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,
+	0x06,0x00,0x00,0xd3,0x06,0xcf,0x06,0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,
+	0x06,0xcf,0x06,0x00,0x00,0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,
+	0x00,0x54,0x04,0x00,0x00,0x53,0x04,0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,
+	0x00,0x02,0x00,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf,0x86,0xcf,
+	0x06,0x00,0x00,0xd1,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf,0x86,0xcf,
+	0x06,0x00,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,0x06,0x00,
+	0x00,0xd3,0x06,0xcf,0x06,0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,0x06,0xcf,
+	0x06,0x00,0x00,0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,
+	0x04,0x00,0x00,0x53,0x04,0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x02,
+	0x00,0xd4,0x60,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf,0x86,0xcf,
+	0x06,0x00,0x00,0xd1,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf,0x86,0xcf,
+	0x06,0x00,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,0x06,0x00,
+	0x00,0xd3,0x06,0xcf,0x06,0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,0x06,0xcf,
+	0x06,0x00,0x00,0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,
+	0x04,0x00,0x00,0x53,0x04,0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x02,
+	0x00,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf,0x86,0xcf,0x06,0x00,
+	0x00,0xd1,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf,0x86,0xcf,0x06,0x00,
+	0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,0x06,0x00,0x00,0xd3,
+	0x06,0xcf,0x06,0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,0x06,0xcf,0x06,0x00,
+	0x00,0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x00,
+	0x00,0x53,0x04,0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x02,0x00,0xcf,
+	0x86,0xd5,0xc0,0xd4,0x60,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf,
+	0x86,0xcf,0x06,0x00,0x00,0xd1,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf,
+	0x86,0xcf,0x06,0x00,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,
+	0x06,0x00,0x00,0xd3,0x06,0xcf,0x06,0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,
+	0x06,0xcf,0x06,0x00,0x00,0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,
+	0x00,0x54,0x04,0x00,0x00,0x53,0x04,0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,
+	0x00,0x02,0x00,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf,0x86,0xcf,
+	0x06,0x00,0x00,0xd1,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf,0x86,0xcf,
+	0x06,0x00,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,0x06,0x00,
+	0x00,0xd3,0x06,0xcf,0x06,0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,0x06,0xcf,
+	0x06,0x00,0x00,0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,
+	0x04,0x00,0x00,0x53,0x04,0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x02,
+	0x00,0xd4,0xd9,0xd3,0x81,0xd2,0x79,0xd1,0x71,0xd0,0x69,0xcf,0x86,0xd5,0x60,0xd4,
+	0x59,0xd3,0x52,0xd2,0x33,0xd1,0x2c,0xd0,0x25,0xcf,0x86,0x95,0x1e,0x94,0x19,0x93,
+	0x14,0x92,0x0f,0x91,0x0a,0x10,0x05,0x00,0xff,0x00,0x05,0xff,0x00,0x00,0xff,0x00,
+	0x00,0xff,0x00,0x00,0xff,0x00,0x00,0xff,0x00,0x05,0xff,0x00,0xcf,0x06,0x05,0xff,
+	0x00,0xcf,0x06,0x00,0xff,0x00,0xd1,0x07,0xcf,0x06,0x07,0xff,0x00,0xd0,0x07,0xcf,
+	0x06,0x07,0xff,0x00,0xcf,0x86,0x55,0x05,0x07,0xff,0x00,0x14,0x05,0x07,0xff,0x00,
+	0x00,0xff,0x00,0xcf,0x06,0x00,0xff,0x00,0xcf,0x06,0x00,0xff,0x00,0xcf,0x06,0x00,
+	0xff,0x00,0xcf,0x86,0xcf,0x06,0x00,0x00,0xcf,0x86,0xcf,0x06,0x00,0x00,0xcf,0x86,
+	0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd1,0x08,0xcf,0x86,
+	0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xcf,0x86,0xd5,0x06,
+	0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,0x06,0x00,0x00,0xd3,0x06,0xcf,0x06,0x00,0x00,
+	0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,0x06,0xcf,0x06,0x00,0x00,0xd0,0x06,0xcf,0x06,
+	0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x00,0x00,0x53,0x04,0x00,0x00,
+	0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x02,0x00,0xcf,0x86,0xcf,0x06,0x02,0x00,
+	0x81,0x80,0xcf,0x86,0x85,0x84,0xcf,0x86,0xcf,0x06,0x02,0x00,0x00,0x00,0x00,0x00
+};
diff --git a/fs/unicode/utf8n.h b/fs/unicode/utf8n.h
new file mode 100644
index 0000000..a120638
--- /dev/null
+++ b/fs/unicode/utf8n.h
@@ -0,0 +1,117 @@
+/*
+ * Copyright (c) 2014 SGI.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it would be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#ifndef UTF8NORM_H
+#define UTF8NORM_H
+
+#include <linux/types.h>
+#include <linux/export.h>
+#include <linux/string.h>
+#include <linux/module.h>
+
+/* Encoding a unicode version number as a single unsigned int. */
+#define UNICODE_MAJ_SHIFT		(16)
+#define UNICODE_MIN_SHIFT		(8)
+
+#define UNICODE_AGE(MAJ, MIN, REV)			\
+	(((unsigned int)(MAJ) << UNICODE_MAJ_SHIFT) |	\
+	 ((unsigned int)(MIN) << UNICODE_MIN_SHIFT) |	\
+	 ((unsigned int)(REV)))
+
+/* Highest unicode version supported by the data tables. */
+extern int utf8version_is_supported(u8 maj, u8 min, u8 rev);
+extern int utf8version_latest(void);
+
+/*
+ * Look for the correct const struct utf8data for a unicode version.
+ * Returns NULL if the version requested is too new.
+ *
+ * Two normalization forms are supported: nfdi and nfdicf.
+ *
+ * nfdi:
+ *  - Apply unicode normalization form NFD.
+ *  - Remove any Default_Ignorable_Code_Point.
+ *
+ * nfdicf:
+ *  - Apply unicode normalization form NFD.
+ *  - Remove any Default_Ignorable_Code_Point.
+ *  - Apply a full casefold (C + F).
+ */
+extern const struct utf8data *utf8nfdi(unsigned int maxage);
+extern const struct utf8data *utf8nfdicf(unsigned int maxage);
+
+/*
+ * Determine the maximum age of any unicode character in the string.
+ * Returns 0 if only unassigned code points are present.
+ * Returns -1 if the input is not valid UTF-8.
+ */
+extern int utf8agemax(const struct utf8data *data, const char *s);
+extern int utf8nagemax(const struct utf8data *data, const char *s, size_t len);
+
+/*
+ * Determine the minimum age of any unicode character in the string.
+ * Returns 0 if any unassigned code points are present.
+ * Returns -1 if the input is not valid UTF-8.
+ */
+extern int utf8agemin(const struct utf8data *data, const char *s);
+extern int utf8nagemin(const struct utf8data *data, const char *s, size_t len);
+
+/*
+ * Determine the length of the normalized from of the string,
+ * excluding any terminating NULL byte.
+ * Returns 0 if only ignorable code points are present.
+ * Returns -1 if the input is not valid UTF-8.
+ */
+extern ssize_t utf8len(const struct utf8data *data, const char *s);
+extern ssize_t utf8nlen(const struct utf8data *data, const char *s, size_t len);
+
+/* Needed in struct utf8cursor below. */
+#define UTF8HANGULLEAF	(12)
+
+/*
+ * Cursor structure used by the normalizer.
+ */
+struct utf8cursor {
+	const struct utf8data	*data;
+	const char	*s;
+	const char	*p;
+	const char	*ss;
+	const char	*sp;
+	unsigned int	len;
+	unsigned int	slen;
+	short int	ccc;
+	short int	nccc;
+	unsigned char	hangul[UTF8HANGULLEAF];
+};
+
+/*
+ * Initialize a utf8cursor to normalize a string.
+ * Returns 0 on success.
+ * Returns -1 on failure.
+ */
+extern int utf8cursor(struct utf8cursor *u8c, const struct utf8data *data,
+		      const char *s);
+extern int utf8ncursor(struct utf8cursor *u8c, const struct utf8data *data,
+		       const char *s, size_t len);
+
+/*
+ * Get the next byte in the normalization.
+ * Returns a value > 0 && < 256 on success.
+ * Returns 0 when the end of the normalization is reached.
+ * Returns -1 if the string being normalized is not valid UTF-8.
+ */
+extern int utf8byte(struct utf8cursor *u8c);
+
+#endif /* UTF8NORM_H */
diff --git a/fs/userfaultfd.c b/fs/userfaultfd.c
index feb109a..330fb82 100644
--- a/fs/userfaultfd.c
+++ b/fs/userfaultfd.c
@@ -1279,21 +1279,23 @@
 }
 
 static __always_inline int validate_range(struct mm_struct *mm,
-					  __u64 start, __u64 len)
+					  __u64 *start, __u64 len)
 {
 	__u64 task_size = mm->task_size;
 
-	if (start & ~PAGE_MASK)
+	*start = untagged_addr(*start);
+
+	if (*start & ~PAGE_MASK)
 		return -EINVAL;
 	if (len & ~PAGE_MASK)
 		return -EINVAL;
 	if (!len)
 		return -EINVAL;
-	if (start < mmap_min_addr)
+	if (*start < mmap_min_addr)
 		return -EINVAL;
-	if (start >= task_size)
+	if (*start >= task_size)
 		return -EINVAL;
-	if (len > task_size - start)
+	if (len > task_size - *start)
 		return -EINVAL;
 	return 0;
 }
@@ -1343,7 +1345,7 @@
 		goto out;
 	}
 
-	ret = validate_range(mm, uffdio_register.range.start,
+	ret = validate_range(mm, &uffdio_register.range.start,
 			     uffdio_register.range.len);
 	if (ret)
 		goto out;
@@ -1535,7 +1537,7 @@
 	if (copy_from_user(&uffdio_unregister, buf, sizeof(uffdio_unregister)))
 		goto out;
 
-	ret = validate_range(mm, uffdio_unregister.start,
+	ret = validate_range(mm, &uffdio_unregister.start,
 			     uffdio_unregister.len);
 	if (ret)
 		goto out;
@@ -1689,7 +1691,7 @@
 	if (copy_from_user(&uffdio_wake, buf, sizeof(uffdio_wake)))
 		goto out;
 
-	ret = validate_range(ctx->mm, uffdio_wake.start, uffdio_wake.len);
+	ret = validate_range(ctx->mm, &uffdio_wake.start, uffdio_wake.len);
 	if (ret)
 		goto out;
 
@@ -1729,7 +1731,7 @@
 			   sizeof(uffdio_copy)-sizeof(__s64)))
 		goto out;
 
-	ret = validate_range(ctx->mm, uffdio_copy.dst, uffdio_copy.len);
+	ret = validate_range(ctx->mm, &uffdio_copy.dst, uffdio_copy.len);
 	if (ret)
 		goto out;
 	/*
@@ -1785,7 +1787,7 @@
 			   sizeof(uffdio_zeropage)-sizeof(__s64)))
 		goto out;
 
-	ret = validate_range(ctx->mm, uffdio_zeropage.range.start,
+	ret = validate_range(ctx->mm, &uffdio_zeropage.range.start,
 			     uffdio_zeropage.range.len);
 	if (ret)
 		goto out;
diff --git a/fs/verity/Kconfig b/fs/verity/Kconfig
new file mode 100644
index 0000000..88fb251
--- /dev/null
+++ b/fs/verity/Kconfig
@@ -0,0 +1,55 @@
+# SPDX-License-Identifier: GPL-2.0
+
+config FS_VERITY
+	bool "FS Verity (read-only file-based authenticity protection)"
+	select CRYPTO
+	# SHA-256 is selected as it's intended to be the default hash algorithm.
+	# To avoid bloat, other wanted algorithms must be selected explicitly.
+	select CRYPTO_SHA256
+	help
+	  This option enables fs-verity.  fs-verity is the dm-verity
+	  mechanism implemented at the file level.  On supported
+	  filesystems (currently EXT4 and F2FS), userspace can use an
+	  ioctl to enable verity for a file, which causes the filesystem
+	  to build a Merkle tree for the file.  The filesystem will then
+	  transparently verify any data read from the file against the
+	  Merkle tree.  The file is also made read-only.
+
+	  This serves as an integrity check, but the availability of the
+	  Merkle tree root hash also allows efficiently supporting
+	  various use cases where normally the whole file would need to
+	  be hashed at once, such as: (a) auditing (logging the file's
+	  hash), or (b) authenticity verification (comparing the hash
+	  against a known good value, e.g. from a digital signature).
+
+	  fs-verity is especially useful on large files where not all
+	  the contents may actually be needed.  Also, fs-verity verifies
+	  data each time it is paged back in, which provides better
+	  protection against malicious disks vs. an ahead-of-time hash.
+
+	  If unsure, say N.
+
+config FS_VERITY_DEBUG
+	bool "FS Verity debugging"
+	depends on FS_VERITY
+	help
+	  Enable debugging messages related to fs-verity by default.
+
+	  Say N unless you are an fs-verity developer.
+
+config FS_VERITY_BUILTIN_SIGNATURES
+	bool "FS Verity builtin signature support"
+	depends on FS_VERITY
+	select SYSTEM_DATA_VERIFICATION
+	help
+	  Support verifying signatures of verity files against the X.509
+	  certificates that have been loaded into the ".fs-verity"
+	  kernel keyring.
+
+	  This is meant as a relatively simple mechanism that can be
+	  used to provide an authenticity guarantee for verity files, as
+	  an alternative to IMA appraisal.  Userspace programs still
+	  need to check that the verity bit is set in order to get an
+	  authenticity guarantee.
+
+	  If unsure, say N.
diff --git a/fs/verity/Makefile b/fs/verity/Makefile
new file mode 100644
index 0000000..570e913
--- /dev/null
+++ b/fs/verity/Makefile
@@ -0,0 +1,10 @@
+# SPDX-License-Identifier: GPL-2.0
+
+obj-$(CONFIG_FS_VERITY) += enable.o \
+			   hash_algs.o \
+			   init.o \
+			   measure.o \
+			   open.o \
+			   verify.o
+
+obj-$(CONFIG_FS_VERITY_BUILTIN_SIGNATURES) += signature.o
diff --git a/fs/verity/enable.c b/fs/verity/enable.c
new file mode 100644
index 0000000..eabc6ac
--- /dev/null
+++ b/fs/verity/enable.c
@@ -0,0 +1,377 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * fs/verity/enable.c: ioctl to enable verity on a file
+ *
+ * Copyright 2019 Google LLC
+ */
+
+#include "fsverity_private.h"
+
+#include <crypto/hash.h>
+#include <linux/mount.h>
+#include <linux/pagemap.h>
+#include <linux/sched/signal.h>
+#include <linux/uaccess.h>
+
+static int build_merkle_tree_level(struct inode *inode, unsigned int level,
+				   u64 num_blocks_to_hash,
+				   const struct merkle_tree_params *params,
+				   u8 *pending_hashes,
+				   struct ahash_request *req)
+{
+	const struct fsverity_operations *vops = inode->i_sb->s_vop;
+	unsigned int pending_size = 0;
+	u64 dst_block_num;
+	u64 i;
+	int err;
+
+	if (WARN_ON(params->block_size != PAGE_SIZE)) /* checked earlier too */
+		return -EINVAL;
+
+	if (level < params->num_levels) {
+		dst_block_num = params->level_start[level];
+	} else {
+		if (WARN_ON(num_blocks_to_hash != 1))
+			return -EINVAL;
+		dst_block_num = 0; /* unused */
+	}
+
+	for (i = 0; i < num_blocks_to_hash; i++) {
+		struct page *src_page;
+
+		if ((pgoff_t)i % 10000 == 0 || i + 1 == num_blocks_to_hash)
+			pr_debug("Hashing block %llu of %llu for level %u\n",
+				 i + 1, num_blocks_to_hash, level);
+
+		if (level == 0) {
+			/* Leaf: hashing a data block */
+			src_page = read_mapping_page(inode->i_mapping, i, NULL);
+			if (IS_ERR(src_page)) {
+				err = PTR_ERR(src_page);
+				fsverity_err(inode,
+					     "Error %d reading data page %llu",
+					     err, i);
+				return err;
+			}
+		} else {
+			/* Non-leaf: hashing hash block from level below */
+			src_page = vops->read_merkle_tree_page(inode,
+					params->level_start[level - 1] + i);
+			if (IS_ERR(src_page)) {
+				err = PTR_ERR(src_page);
+				fsverity_err(inode,
+					     "Error %d reading Merkle tree page %llu",
+					     err, params->level_start[level - 1] + i);
+				return err;
+			}
+		}
+
+		err = fsverity_hash_page(params, inode, req, src_page,
+					 &pending_hashes[pending_size]);
+		put_page(src_page);
+		if (err)
+			return err;
+		pending_size += params->digest_size;
+
+		if (level == params->num_levels) /* Root hash? */
+			return 0;
+
+		if (pending_size + params->digest_size > params->block_size ||
+		    i + 1 == num_blocks_to_hash) {
+			/* Flush the pending hash block */
+			memset(&pending_hashes[pending_size], 0,
+			       params->block_size - pending_size);
+			err = vops->write_merkle_tree_block(inode,
+					pending_hashes,
+					dst_block_num,
+					params->log_blocksize);
+			if (err) {
+				fsverity_err(inode,
+					     "Error %d writing Merkle tree block %llu",
+					     err, dst_block_num);
+				return err;
+			}
+			dst_block_num++;
+			pending_size = 0;
+		}
+
+		if (fatal_signal_pending(current))
+			return -EINTR;
+		cond_resched();
+	}
+	return 0;
+}
+
+/*
+ * Build the Merkle tree for the given inode using the given parameters, and
+ * return the root hash in @root_hash.
+ *
+ * The tree is written to a filesystem-specific location as determined by the
+ * ->write_merkle_tree_block() method.  However, the blocks that comprise the
+ * tree are the same for all filesystems.
+ */
+static int build_merkle_tree(struct inode *inode,
+			     const struct merkle_tree_params *params,
+			     u8 *root_hash)
+{
+	u8 *pending_hashes;
+	struct ahash_request *req;
+	u64 blocks;
+	unsigned int level;
+	int err = -ENOMEM;
+
+	if (inode->i_size == 0) {
+		/* Empty file is a special case; root hash is all 0's */
+		memset(root_hash, 0, params->digest_size);
+		return 0;
+	}
+
+	pending_hashes = kmalloc(params->block_size, GFP_KERNEL);
+	req = ahash_request_alloc(params->hash_alg->tfm, GFP_KERNEL);
+	if (!pending_hashes || !req)
+		goto out;
+
+	/*
+	 * Build each level of the Merkle tree, starting at the leaf level
+	 * (level 0) and ascending to the root node (level 'num_levels - 1').
+	 * Then at the end (level 'num_levels'), calculate the root hash.
+	 */
+	blocks = (inode->i_size + params->block_size - 1) >>
+		 params->log_blocksize;
+	for (level = 0; level <= params->num_levels; level++) {
+		err = build_merkle_tree_level(inode, level, blocks, params,
+					      pending_hashes, req);
+		if (err)
+			goto out;
+		blocks = (blocks + params->hashes_per_block - 1) >>
+			 params->log_arity;
+	}
+	memcpy(root_hash, pending_hashes, params->digest_size);
+	err = 0;
+out:
+	kfree(pending_hashes);
+	ahash_request_free(req);
+	return err;
+}
+
+static int enable_verity(struct file *filp,
+			 const struct fsverity_enable_arg *arg)
+{
+	struct inode *inode = file_inode(filp);
+	const struct fsverity_operations *vops = inode->i_sb->s_vop;
+	struct merkle_tree_params params = { };
+	struct fsverity_descriptor *desc;
+	size_t desc_size = sizeof(*desc) + arg->sig_size;
+	struct fsverity_info *vi;
+	int err;
+
+	/* Start initializing the fsverity_descriptor */
+	desc = kzalloc(desc_size, GFP_KERNEL);
+	if (!desc)
+		return -ENOMEM;
+	desc->version = 1;
+	desc->hash_algorithm = arg->hash_algorithm;
+	desc->log_blocksize = ilog2(arg->block_size);
+
+	/* Get the salt if the user provided one */
+	if (arg->salt_size &&
+	    copy_from_user(desc->salt,
+			   (const u8 __user *)(uintptr_t)arg->salt_ptr,
+			   arg->salt_size)) {
+		err = -EFAULT;
+		goto out;
+	}
+	desc->salt_size = arg->salt_size;
+
+	/* Get the signature if the user provided one */
+	if (arg->sig_size &&
+	    copy_from_user(desc->signature,
+			   (const u8 __user *)(uintptr_t)arg->sig_ptr,
+			   arg->sig_size)) {
+		err = -EFAULT;
+		goto out;
+	}
+	desc->sig_size = cpu_to_le32(arg->sig_size);
+
+	desc->data_size = cpu_to_le64(inode->i_size);
+
+	/* Prepare the Merkle tree parameters */
+	err = fsverity_init_merkle_tree_params(&params, inode,
+					       arg->hash_algorithm,
+					       desc->log_blocksize,
+					       desc->salt, desc->salt_size);
+	if (err)
+		goto out;
+
+	/*
+	 * Start enabling verity on this file, serialized by the inode lock.
+	 * Fail if verity is already enabled or is already being enabled.
+	 */
+	inode_lock(inode);
+	if (IS_VERITY(inode))
+		err = -EEXIST;
+	else
+		err = vops->begin_enable_verity(filp);
+	inode_unlock(inode);
+	if (err)
+		goto out;
+
+	/*
+	 * Build the Merkle tree.  Don't hold the inode lock during this, since
+	 * on huge files this may take a very long time and we don't want to
+	 * force unrelated syscalls like chown() to block forever.  We don't
+	 * need the inode lock here because deny_write_access() already prevents
+	 * the file from being written to or truncated, and we still serialize
+	 * ->begin_enable_verity() and ->end_enable_verity() using the inode
+	 * lock and only allow one process to be here at a time on a given file.
+	 */
+	pr_debug("Building Merkle tree...\n");
+	BUILD_BUG_ON(sizeof(desc->root_hash) < FS_VERITY_MAX_DIGEST_SIZE);
+	err = build_merkle_tree(inode, &params, desc->root_hash);
+	if (err) {
+		fsverity_err(inode, "Error %d building Merkle tree", err);
+		goto rollback;
+	}
+	pr_debug("Done building Merkle tree.  Root hash is %s:%*phN\n",
+		 params.hash_alg->name, params.digest_size, desc->root_hash);
+
+	/*
+	 * Create the fsverity_info.  Don't bother trying to save work by
+	 * reusing the merkle_tree_params from above.  Instead, just create the
+	 * fsverity_info from the fsverity_descriptor as if it were just loaded
+	 * from disk.  This is simpler, and it serves as an extra check that the
+	 * metadata we're writing is valid before actually enabling verity.
+	 */
+	vi = fsverity_create_info(inode, desc, desc_size);
+	if (IS_ERR(vi)) {
+		err = PTR_ERR(vi);
+		goto rollback;
+	}
+
+	if (arg->sig_size)
+		pr_debug("Storing a %u-byte PKCS#7 signature alongside the file\n",
+			 arg->sig_size);
+
+	/*
+	 * Tell the filesystem to finish enabling verity on the file.
+	 * Serialized with ->begin_enable_verity() by the inode lock.
+	 */
+	inode_lock(inode);
+	err = vops->end_enable_verity(filp, desc, desc_size, params.tree_size);
+	inode_unlock(inode);
+	if (err) {
+		fsverity_err(inode, "%ps() failed with err %d",
+			     vops->end_enable_verity, err);
+		fsverity_free_info(vi);
+	} else if (WARN_ON(!IS_VERITY(inode))) {
+		err = -EINVAL;
+		fsverity_free_info(vi);
+	} else {
+		/* Successfully enabled verity */
+
+		/*
+		 * Readers can start using ->i_verity_info immediately, so it
+		 * can't be rolled back once set.  So don't set it until just
+		 * after the filesystem has successfully enabled verity.
+		 */
+		fsverity_set_info(inode, vi);
+	}
+out:
+	kfree(params.hashstate);
+	kfree(desc);
+	return err;
+
+rollback:
+	inode_lock(inode);
+	(void)vops->end_enable_verity(filp, NULL, 0, params.tree_size);
+	inode_unlock(inode);
+	goto out;
+}
+
+/**
+ * fsverity_ioctl_enable() - enable verity on a file
+ *
+ * Enable fs-verity on a file.  See the "FS_IOC_ENABLE_VERITY" section of
+ * Documentation/filesystems/fsverity.rst for the documentation.
+ *
+ * Return: 0 on success, -errno on failure
+ */
+int fsverity_ioctl_enable(struct file *filp, const void __user *uarg)
+{
+	struct inode *inode = file_inode(filp);
+	struct fsverity_enable_arg arg;
+	int err;
+
+	if (copy_from_user(&arg, uarg, sizeof(arg)))
+		return -EFAULT;
+
+	if (arg.version != 1)
+		return -EINVAL;
+
+	if (arg.__reserved1 ||
+	    memchr_inv(arg.__reserved2, 0, sizeof(arg.__reserved2)))
+		return -EINVAL;
+
+	if (arg.block_size != PAGE_SIZE)
+		return -EINVAL;
+
+	if (arg.salt_size > FIELD_SIZEOF(struct fsverity_descriptor, salt))
+		return -EMSGSIZE;
+
+	if (arg.sig_size > FS_VERITY_MAX_SIGNATURE_SIZE)
+		return -EMSGSIZE;
+
+	/*
+	 * Require a regular file with write access.  But the actual fd must
+	 * still be readonly so that we can lock out all writers.  This is
+	 * needed to guarantee that no writable fds exist to the file once it
+	 * has verity enabled, and to stabilize the data being hashed.
+	 */
+
+	err = inode_permission(inode, MAY_WRITE);
+	if (err)
+		return err;
+
+	if (IS_APPEND(inode))
+		return -EPERM;
+
+	if (S_ISDIR(inode->i_mode))
+		return -EISDIR;
+
+	if (!S_ISREG(inode->i_mode))
+		return -EINVAL;
+
+	err = mnt_want_write_file(filp);
+	if (err) /* -EROFS */
+		return err;
+
+	err = deny_write_access(filp);
+	if (err) /* -ETXTBSY */
+		goto out_drop_write;
+
+	err = enable_verity(filp, &arg);
+	if (err)
+		goto out_allow_write_access;
+
+	/*
+	 * Some pages of the file may have been evicted from pagecache after
+	 * being used in the Merkle tree construction, then read into pagecache
+	 * again by another process reading from the file concurrently.  Since
+	 * these pages didn't undergo verification against the file measurement
+	 * which fs-verity now claims to be enforcing, we have to wipe the
+	 * pagecache to ensure that all future reads are verified.
+	 */
+	filemap_write_and_wait(inode->i_mapping);
+	invalidate_inode_pages2(inode->i_mapping);
+
+	/*
+	 * allow_write_access() is needed to pair with deny_write_access().
+	 * Regardless, the filesystem won't allow writing to verity files.
+	 */
+out_allow_write_access:
+	allow_write_access(filp);
+out_drop_write:
+	mnt_drop_write_file(filp);
+	return err;
+}
+EXPORT_SYMBOL_GPL(fsverity_ioctl_enable);
diff --git a/fs/verity/fsverity_private.h b/fs/verity/fsverity_private.h
new file mode 100644
index 0000000..e74c79b
--- /dev/null
+++ b/fs/verity/fsverity_private.h
@@ -0,0 +1,185 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * fs-verity: read-only file-based authenticity protection
+ *
+ * Copyright 2019 Google LLC
+ */
+
+#ifndef _FSVERITY_PRIVATE_H
+#define _FSVERITY_PRIVATE_H
+
+#ifdef CONFIG_FS_VERITY_DEBUG
+#define DEBUG
+#endif
+
+#define pr_fmt(fmt) "fs-verity: " fmt
+
+#include <crypto/sha.h>
+#include <linux/fsverity.h>
+
+struct ahash_request;
+
+/*
+ * Implementation limit: maximum depth of the Merkle tree.  For now 8 is plenty;
+ * it's enough for over U64_MAX bytes of data using SHA-256 and 4K blocks.
+ */
+#define FS_VERITY_MAX_LEVELS		8
+
+/*
+ * Largest digest size among all hash algorithms supported by fs-verity.
+ * Currently assumed to be <= size of fsverity_descriptor::root_hash.
+ */
+#define FS_VERITY_MAX_DIGEST_SIZE	SHA512_DIGEST_SIZE
+
+/* A hash algorithm supported by fs-verity */
+struct fsverity_hash_alg {
+	struct crypto_ahash *tfm; /* hash tfm, allocated on demand */
+	const char *name;	  /* crypto API name, e.g. sha256 */
+	unsigned int digest_size; /* digest size in bytes, e.g. 32 for SHA-256 */
+	unsigned int block_size;  /* block size in bytes, e.g. 64 for SHA-256 */
+};
+
+/* Merkle tree parameters: hash algorithm, initial hash state, and topology */
+struct merkle_tree_params {
+	const struct fsverity_hash_alg *hash_alg; /* the hash algorithm */
+	const u8 *hashstate;		/* initial hash state or NULL */
+	unsigned int digest_size;	/* same as hash_alg->digest_size */
+	unsigned int block_size;	/* size of data and tree blocks */
+	unsigned int hashes_per_block;	/* number of hashes per tree block */
+	unsigned int log_blocksize;	/* log2(block_size) */
+	unsigned int log_arity;		/* log2(hashes_per_block) */
+	unsigned int num_levels;	/* number of levels in Merkle tree */
+	u64 tree_size;			/* Merkle tree size in bytes */
+
+	/*
+	 * Starting block index for each tree level, ordered from leaf level (0)
+	 * to root level ('num_levels - 1')
+	 */
+	u64 level_start[FS_VERITY_MAX_LEVELS];
+};
+
+/**
+ * fsverity_info - cached verity metadata for an inode
+ *
+ * When a verity file is first opened, an instance of this struct is allocated
+ * and stored in ->i_verity_info; it remains until the inode is evicted.  It
+ * caches information about the Merkle tree that's needed to efficiently verify
+ * data read from the file.  It also caches the file measurement.  The Merkle
+ * tree pages themselves are not cached here, but the filesystem may cache them.
+ */
+struct fsverity_info {
+	struct merkle_tree_params tree_params;
+	u8 root_hash[FS_VERITY_MAX_DIGEST_SIZE];
+	u8 measurement[FS_VERITY_MAX_DIGEST_SIZE];
+	const struct inode *inode;
+};
+
+/*
+ * Merkle tree properties.  The file measurement is the hash of this structure
+ * excluding the signature and with the sig_size field set to 0.
+ */
+struct fsverity_descriptor {
+	__u8 version;		/* must be 1 */
+	__u8 hash_algorithm;	/* Merkle tree hash algorithm */
+	__u8 log_blocksize;	/* log2 of size of data and tree blocks */
+	__u8 salt_size;		/* size of salt in bytes; 0 if none */
+	__le32 sig_size;	/* size of signature in bytes; 0 if none */
+	__le64 data_size;	/* size of file the Merkle tree is built over */
+	__u8 root_hash[64];	/* Merkle tree root hash */
+	__u8 salt[32];		/* salt prepended to each hashed block */
+	__u8 __reserved[144];	/* must be 0's */
+	__u8 signature[];	/* optional PKCS#7 signature */
+};
+
+/* Arbitrary limit to bound the kmalloc() size.  Can be changed. */
+#define FS_VERITY_MAX_DESCRIPTOR_SIZE	16384
+
+#define FS_VERITY_MAX_SIGNATURE_SIZE	(FS_VERITY_MAX_DESCRIPTOR_SIZE - \
+					 sizeof(struct fsverity_descriptor))
+
+/*
+ * Format in which verity file measurements are signed.  This is the same as
+ * 'struct fsverity_digest', except here some magic bytes are prepended to
+ * provide some context about what is being signed in case the same key is used
+ * for non-fsverity purposes, and here the fields have fixed endianness.
+ */
+struct fsverity_signed_digest {
+	char magic[8];			/* must be "FSVerity" */
+	__le16 digest_algorithm;
+	__le16 digest_size;
+	__u8 digest[];
+};
+
+/* hash_algs.c */
+
+extern struct fsverity_hash_alg fsverity_hash_algs[];
+
+const struct fsverity_hash_alg *fsverity_get_hash_alg(const struct inode *inode,
+						      unsigned int num);
+const u8 *fsverity_prepare_hash_state(const struct fsverity_hash_alg *alg,
+				      const u8 *salt, size_t salt_size);
+int fsverity_hash_page(const struct merkle_tree_params *params,
+		       const struct inode *inode,
+		       struct ahash_request *req, struct page *page, u8 *out);
+int fsverity_hash_buffer(const struct fsverity_hash_alg *alg,
+			 const void *data, size_t size, u8 *out);
+void __init fsverity_check_hash_algs(void);
+
+/* init.c */
+
+extern void __printf(3, 4) __cold
+fsverity_msg(const struct inode *inode, const char *level,
+	     const char *fmt, ...);
+
+#define fsverity_warn(inode, fmt, ...)		\
+	fsverity_msg((inode), KERN_WARNING, fmt, ##__VA_ARGS__)
+#define fsverity_err(inode, fmt, ...)		\
+	fsverity_msg((inode), KERN_ERR, fmt, ##__VA_ARGS__)
+
+/* open.c */
+
+int fsverity_init_merkle_tree_params(struct merkle_tree_params *params,
+				     const struct inode *inode,
+				     unsigned int hash_algorithm,
+				     unsigned int log_blocksize,
+				     const u8 *salt, size_t salt_size);
+
+struct fsverity_info *fsverity_create_info(const struct inode *inode,
+					   void *desc, size_t desc_size);
+
+void fsverity_set_info(struct inode *inode, struct fsverity_info *vi);
+
+void fsverity_free_info(struct fsverity_info *vi);
+
+int __init fsverity_init_info_cache(void);
+void __init fsverity_exit_info_cache(void);
+
+/* signature.c */
+
+#ifdef CONFIG_FS_VERITY_BUILTIN_SIGNATURES
+int fsverity_verify_signature(const struct fsverity_info *vi,
+			      const struct fsverity_descriptor *desc,
+			      size_t desc_size);
+
+int __init fsverity_init_signature(void);
+#else /* !CONFIG_FS_VERITY_BUILTIN_SIGNATURES */
+static inline int
+fsverity_verify_signature(const struct fsverity_info *vi,
+			  const struct fsverity_descriptor *desc,
+			  size_t desc_size)
+{
+	return 0;
+}
+
+static inline int fsverity_init_signature(void)
+{
+	return 0;
+}
+#endif /* !CONFIG_FS_VERITY_BUILTIN_SIGNATURES */
+
+/* verify.c */
+
+int __init fsverity_init_workqueue(void);
+void __init fsverity_exit_workqueue(void);
+
+#endif /* _FSVERITY_PRIVATE_H */
diff --git a/fs/verity/hash_algs.c b/fs/verity/hash_algs.c
new file mode 100644
index 0000000..31e6d7d
--- /dev/null
+++ b/fs/verity/hash_algs.c
@@ -0,0 +1,280 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * fs/verity/hash_algs.c: fs-verity hash algorithms
+ *
+ * Copyright 2019 Google LLC
+ */
+
+#include "fsverity_private.h"
+
+#include <crypto/hash.h>
+#include <linux/scatterlist.h>
+
+/* The hash algorithms supported by fs-verity */
+struct fsverity_hash_alg fsverity_hash_algs[] = {
+	[FS_VERITY_HASH_ALG_SHA256] = {
+		.name = "sha256",
+		.digest_size = SHA256_DIGEST_SIZE,
+		.block_size = SHA256_BLOCK_SIZE,
+	},
+	[FS_VERITY_HASH_ALG_SHA512] = {
+		.name = "sha512",
+		.digest_size = SHA512_DIGEST_SIZE,
+		.block_size = SHA512_BLOCK_SIZE,
+	},
+};
+
+/**
+ * fsverity_get_hash_alg() - validate and prepare a hash algorithm
+ * @inode: optional inode for logging purposes
+ * @num: the hash algorithm number
+ *
+ * Get the struct fsverity_hash_alg for the given hash algorithm number, and
+ * ensure it has a hash transform ready to go.  The hash transforms are
+ * allocated on-demand so that we don't waste resources unnecessarily, and
+ * because the crypto modules may be initialized later than fs/verity/.
+ *
+ * Return: pointer to the hash alg on success, else an ERR_PTR()
+ */
+const struct fsverity_hash_alg *fsverity_get_hash_alg(const struct inode *inode,
+						      unsigned int num)
+{
+	struct fsverity_hash_alg *alg;
+	struct crypto_ahash *tfm;
+	int err;
+
+	if (num >= ARRAY_SIZE(fsverity_hash_algs) ||
+	    !fsverity_hash_algs[num].name) {
+		fsverity_warn(inode, "Unknown hash algorithm number: %u", num);
+		return ERR_PTR(-EINVAL);
+	}
+	alg = &fsverity_hash_algs[num];
+
+	/* pairs with cmpxchg() below */
+	tfm = READ_ONCE(alg->tfm);
+	if (likely(tfm != NULL))
+		return alg;
+	/*
+	 * Using the shash API would make things a bit simpler, but the ahash
+	 * API is preferable as it allows the use of crypto accelerators.
+	 */
+	tfm = crypto_alloc_ahash(alg->name, 0, 0);
+	if (IS_ERR(tfm)) {
+		if (PTR_ERR(tfm) == -ENOENT) {
+			fsverity_warn(inode,
+				      "Missing crypto API support for hash algorithm \"%s\"",
+				      alg->name);
+			return ERR_PTR(-ENOPKG);
+		}
+		fsverity_err(inode,
+			     "Error allocating hash algorithm \"%s\": %ld",
+			     alg->name, PTR_ERR(tfm));
+		return ERR_CAST(tfm);
+	}
+
+	err = -EINVAL;
+	if (WARN_ON(alg->digest_size != crypto_ahash_digestsize(tfm)))
+		goto err_free_tfm;
+	if (WARN_ON(alg->block_size != crypto_ahash_blocksize(tfm)))
+		goto err_free_tfm;
+
+	pr_info("%s using implementation \"%s\"\n",
+		alg->name, crypto_ahash_driver_name(tfm));
+
+	/* pairs with READ_ONCE() above */
+	if (cmpxchg(&alg->tfm, NULL, tfm) != NULL)
+		crypto_free_ahash(tfm);
+
+	return alg;
+
+err_free_tfm:
+	crypto_free_ahash(tfm);
+	return ERR_PTR(err);
+}
+
+/**
+ * fsverity_prepare_hash_state() - precompute the initial hash state
+ * @alg: hash algorithm
+ * @salt: a salt which is to be prepended to all data to be hashed
+ * @salt_size: salt size in bytes, possibly 0
+ *
+ * Return: NULL if the salt is empty, otherwise the kmalloc()'ed precomputed
+ *	   initial hash state on success or an ERR_PTR() on failure.
+ */
+const u8 *fsverity_prepare_hash_state(const struct fsverity_hash_alg *alg,
+				      const u8 *salt, size_t salt_size)
+{
+	u8 *hashstate = NULL;
+	struct ahash_request *req = NULL;
+	u8 *padded_salt = NULL;
+	size_t padded_salt_size;
+	struct scatterlist sg;
+	DECLARE_CRYPTO_WAIT(wait);
+	int err;
+
+	if (salt_size == 0)
+		return NULL;
+
+	hashstate = kmalloc(crypto_ahash_statesize(alg->tfm), GFP_KERNEL);
+	if (!hashstate)
+		return ERR_PTR(-ENOMEM);
+
+	req = ahash_request_alloc(alg->tfm, GFP_KERNEL);
+	if (!req) {
+		err = -ENOMEM;
+		goto err_free;
+	}
+
+	/*
+	 * Zero-pad the salt to the next multiple of the input size of the hash
+	 * algorithm's compression function, e.g. 64 bytes for SHA-256 or 128
+	 * bytes for SHA-512.  This ensures that the hash algorithm won't have
+	 * any bytes buffered internally after processing the salt, thus making
+	 * salted hashing just as fast as unsalted hashing.
+	 */
+	padded_salt_size = round_up(salt_size, alg->block_size);
+	padded_salt = kzalloc(padded_salt_size, GFP_KERNEL);
+	if (!padded_salt) {
+		err = -ENOMEM;
+		goto err_free;
+	}
+	memcpy(padded_salt, salt, salt_size);
+
+	sg_init_one(&sg, padded_salt, padded_salt_size);
+	ahash_request_set_callback(req, CRYPTO_TFM_REQ_MAY_SLEEP |
+					CRYPTO_TFM_REQ_MAY_BACKLOG,
+				   crypto_req_done, &wait);
+	ahash_request_set_crypt(req, &sg, NULL, padded_salt_size);
+
+	err = crypto_wait_req(crypto_ahash_init(req), &wait);
+	if (err)
+		goto err_free;
+
+	err = crypto_wait_req(crypto_ahash_update(req), &wait);
+	if (err)
+		goto err_free;
+
+	err = crypto_ahash_export(req, hashstate);
+	if (err)
+		goto err_free;
+out:
+	ahash_request_free(req);
+	kfree(padded_salt);
+	return hashstate;
+
+err_free:
+	kfree(hashstate);
+	hashstate = ERR_PTR(err);
+	goto out;
+}
+
+/**
+ * fsverity_hash_page() - hash a single data or hash page
+ * @params: the Merkle tree's parameters
+ * @inode: inode for which the hashing is being done
+ * @req: preallocated hash request
+ * @page: the page to hash
+ * @out: output digest, size 'params->digest_size' bytes
+ *
+ * Hash a single data or hash block, assuming block_size == PAGE_SIZE.
+ * The hash is salted if a salt is specified in the Merkle tree parameters.
+ *
+ * Return: 0 on success, -errno on failure
+ */
+int fsverity_hash_page(const struct merkle_tree_params *params,
+		       const struct inode *inode,
+		       struct ahash_request *req, struct page *page, u8 *out)
+{
+	struct scatterlist sg;
+	DECLARE_CRYPTO_WAIT(wait);
+	int err;
+
+	if (WARN_ON(params->block_size != PAGE_SIZE))
+		return -EINVAL;
+
+	sg_init_table(&sg, 1);
+	sg_set_page(&sg, page, PAGE_SIZE, 0);
+	ahash_request_set_callback(req, CRYPTO_TFM_REQ_MAY_SLEEP |
+					CRYPTO_TFM_REQ_MAY_BACKLOG,
+				   crypto_req_done, &wait);
+	ahash_request_set_crypt(req, &sg, out, PAGE_SIZE);
+
+	if (params->hashstate) {
+		err = crypto_ahash_import(req, params->hashstate);
+		if (err) {
+			fsverity_err(inode,
+				     "Error %d importing hash state", err);
+			return err;
+		}
+		err = crypto_ahash_finup(req);
+	} else {
+		err = crypto_ahash_digest(req);
+	}
+
+	err = crypto_wait_req(err, &wait);
+	if (err)
+		fsverity_err(inode, "Error %d computing page hash", err);
+	return err;
+}
+
+/**
+ * fsverity_hash_buffer() - hash some data
+ * @alg: the hash algorithm to use
+ * @data: the data to hash
+ * @size: size of data to hash, in bytes
+ * @out: output digest, size 'alg->digest_size' bytes
+ *
+ * Hash some data which is located in physically contiguous memory (i.e. memory
+ * allocated by kmalloc(), not by vmalloc()).  No salt is used.
+ *
+ * Return: 0 on success, -errno on failure
+ */
+int fsverity_hash_buffer(const struct fsverity_hash_alg *alg,
+			 const void *data, size_t size, u8 *out)
+{
+	struct ahash_request *req;
+	struct scatterlist sg;
+	DECLARE_CRYPTO_WAIT(wait);
+	int err;
+
+	req = ahash_request_alloc(alg->tfm, GFP_KERNEL);
+	if (!req)
+		return -ENOMEM;
+
+	sg_init_one(&sg, data, size);
+	ahash_request_set_callback(req, CRYPTO_TFM_REQ_MAY_SLEEP |
+					CRYPTO_TFM_REQ_MAY_BACKLOG,
+				   crypto_req_done, &wait);
+	ahash_request_set_crypt(req, &sg, out, size);
+
+	err = crypto_wait_req(crypto_ahash_digest(req), &wait);
+
+	ahash_request_free(req);
+	return err;
+}
+
+void __init fsverity_check_hash_algs(void)
+{
+	size_t i;
+
+	/*
+	 * Sanity check the hash algorithms (could be a build-time check, but
+	 * they're in an array)
+	 */
+	for (i = 0; i < ARRAY_SIZE(fsverity_hash_algs); i++) {
+		const struct fsverity_hash_alg *alg = &fsverity_hash_algs[i];
+
+		if (!alg->name)
+			continue;
+
+		BUG_ON(alg->digest_size > FS_VERITY_MAX_DIGEST_SIZE);
+
+		/*
+		 * For efficiency, the implementation currently assumes the
+		 * digest and block sizes are powers of 2.  This limitation can
+		 * be lifted if the code is updated to handle other values.
+		 */
+		BUG_ON(!is_power_of_2(alg->digest_size));
+		BUG_ON(!is_power_of_2(alg->block_size));
+	}
+}
diff --git a/fs/verity/init.c b/fs/verity/init.c
new file mode 100644
index 0000000..94c104e
--- /dev/null
+++ b/fs/verity/init.c
@@ -0,0 +1,61 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * fs/verity/init.c: fs-verity module initialization and logging
+ *
+ * Copyright 2019 Google LLC
+ */
+
+#include "fsverity_private.h"
+
+#include <linux/ratelimit.h>
+
+void fsverity_msg(const struct inode *inode, const char *level,
+		  const char *fmt, ...)
+{
+	static DEFINE_RATELIMIT_STATE(rs, DEFAULT_RATELIMIT_INTERVAL,
+				      DEFAULT_RATELIMIT_BURST);
+	struct va_format vaf;
+	va_list args;
+
+	if (!__ratelimit(&rs))
+		return;
+
+	va_start(args, fmt);
+	vaf.fmt = fmt;
+	vaf.va = &args;
+	if (inode)
+		printk("%sfs-verity (%s, inode %lu): %pV\n",
+		       level, inode->i_sb->s_id, inode->i_ino, &vaf);
+	else
+		printk("%sfs-verity: %pV\n", level, &vaf);
+	va_end(args);
+}
+
+static int __init fsverity_init(void)
+{
+	int err;
+
+	fsverity_check_hash_algs();
+
+	err = fsverity_init_info_cache();
+	if (err)
+		return err;
+
+	err = fsverity_init_workqueue();
+	if (err)
+		goto err_exit_info_cache;
+
+	err = fsverity_init_signature();
+	if (err)
+		goto err_exit_workqueue;
+
+	pr_debug("Initialized fs-verity\n");
+	return 0;
+
+err_exit_workqueue:
+	fsverity_exit_workqueue();
+err_exit_info_cache:
+	fsverity_exit_info_cache();
+	return err;
+}
+late_initcall(fsverity_init)
diff --git a/fs/verity/measure.c b/fs/verity/measure.c
new file mode 100644
index 0000000..05049b6
--- /dev/null
+++ b/fs/verity/measure.c
@@ -0,0 +1,57 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * fs/verity/measure.c: ioctl to get a verity file's measurement
+ *
+ * Copyright 2019 Google LLC
+ */
+
+#include "fsverity_private.h"
+
+#include <linux/uaccess.h>
+
+/**
+ * fsverity_ioctl_measure() - get a verity file's measurement
+ *
+ * Retrieve the file measurement that the kernel is enforcing for reads from a
+ * verity file.  See the "FS_IOC_MEASURE_VERITY" section of
+ * Documentation/filesystems/fsverity.rst for the documentation.
+ *
+ * Return: 0 on success, -errno on failure
+ */
+int fsverity_ioctl_measure(struct file *filp, void __user *_uarg)
+{
+	const struct inode *inode = file_inode(filp);
+	struct fsverity_digest __user *uarg = _uarg;
+	const struct fsverity_info *vi;
+	const struct fsverity_hash_alg *hash_alg;
+	struct fsverity_digest arg;
+
+	vi = fsverity_get_info(inode);
+	if (!vi)
+		return -ENODATA; /* not a verity file */
+	hash_alg = vi->tree_params.hash_alg;
+
+	/*
+	 * The user specifies the digest_size their buffer has space for; we can
+	 * return the digest if it fits in the available space.  We write back
+	 * the actual size, which may be shorter than the user-specified size.
+	 */
+
+	if (get_user(arg.digest_size, &uarg->digest_size))
+		return -EFAULT;
+	if (arg.digest_size < hash_alg->digest_size)
+		return -EOVERFLOW;
+
+	memset(&arg, 0, sizeof(arg));
+	arg.digest_algorithm = hash_alg - fsverity_hash_algs;
+	arg.digest_size = hash_alg->digest_size;
+
+	if (copy_to_user(uarg, &arg, sizeof(arg)))
+		return -EFAULT;
+
+	if (copy_to_user(uarg->digest, vi->measurement, hash_alg->digest_size))
+		return -EFAULT;
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(fsverity_ioctl_measure);
diff --git a/fs/verity/open.c b/fs/verity/open.c
new file mode 100644
index 0000000..63d1004
--- /dev/null
+++ b/fs/verity/open.c
@@ -0,0 +1,356 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * fs/verity/open.c: opening fs-verity files
+ *
+ * Copyright 2019 Google LLC
+ */
+
+#include "fsverity_private.h"
+
+#include <linux/slab.h>
+
+static struct kmem_cache *fsverity_info_cachep;
+
+/**
+ * fsverity_init_merkle_tree_params() - initialize Merkle tree parameters
+ * @params: the parameters struct to initialize
+ * @inode: the inode for which the Merkle tree is being built
+ * @hash_algorithm: number of hash algorithm to use
+ * @log_blocksize: log base 2 of block size to use
+ * @salt: pointer to salt (optional)
+ * @salt_size: size of salt, possibly 0
+ *
+ * Validate the hash algorithm and block size, then compute the tree topology
+ * (num levels, num blocks in each level, etc.) and initialize @params.
+ *
+ * Return: 0 on success, -errno on failure
+ */
+int fsverity_init_merkle_tree_params(struct merkle_tree_params *params,
+				     const struct inode *inode,
+				     unsigned int hash_algorithm,
+				     unsigned int log_blocksize,
+				     const u8 *salt, size_t salt_size)
+{
+	const struct fsverity_hash_alg *hash_alg;
+	int err;
+	u64 blocks;
+	u64 offset;
+	int level;
+
+	memset(params, 0, sizeof(*params));
+
+	hash_alg = fsverity_get_hash_alg(inode, hash_algorithm);
+	if (IS_ERR(hash_alg))
+		return PTR_ERR(hash_alg);
+	params->hash_alg = hash_alg;
+	params->digest_size = hash_alg->digest_size;
+
+	params->hashstate = fsverity_prepare_hash_state(hash_alg, salt,
+							salt_size);
+	if (IS_ERR(params->hashstate)) {
+		err = PTR_ERR(params->hashstate);
+		params->hashstate = NULL;
+		fsverity_err(inode, "Error %d preparing hash state", err);
+		goto out_err;
+	}
+
+	if (log_blocksize != PAGE_SHIFT) {
+		fsverity_warn(inode, "Unsupported log_blocksize: %u",
+			      log_blocksize);
+		err = -EINVAL;
+		goto out_err;
+	}
+	params->log_blocksize = log_blocksize;
+	params->block_size = 1 << log_blocksize;
+
+	if (WARN_ON(!is_power_of_2(params->digest_size))) {
+		err = -EINVAL;
+		goto out_err;
+	}
+	if (params->block_size < 2 * params->digest_size) {
+		fsverity_warn(inode,
+			      "Merkle tree block size (%u) too small for hash algorithm \"%s\"",
+			      params->block_size, hash_alg->name);
+		err = -EINVAL;
+		goto out_err;
+	}
+	params->log_arity = params->log_blocksize - ilog2(params->digest_size);
+	params->hashes_per_block = 1 << params->log_arity;
+
+	pr_debug("Merkle tree uses %s with %u-byte blocks (%u hashes/block), salt=%*phN\n",
+		 hash_alg->name, params->block_size, params->hashes_per_block,
+		 (int)salt_size, salt);
+
+	/*
+	 * Compute the number of levels in the Merkle tree and create a map from
+	 * level to the starting block of that level.  Level 'num_levels - 1' is
+	 * the root and is stored first.  Level 0 is the level directly "above"
+	 * the data blocks and is stored last.
+	 */
+
+	/* Compute number of levels and the number of blocks in each level */
+	blocks = (inode->i_size + params->block_size - 1) >> log_blocksize;
+	pr_debug("Data is %lld bytes (%llu blocks)\n", inode->i_size, blocks);
+	while (blocks > 1) {
+		if (params->num_levels >= FS_VERITY_MAX_LEVELS) {
+			fsverity_err(inode, "Too many levels in Merkle tree");
+			err = -EINVAL;
+			goto out_err;
+		}
+		blocks = (blocks + params->hashes_per_block - 1) >>
+			 params->log_arity;
+		/* temporarily using level_start[] to store blocks in level */
+		params->level_start[params->num_levels++] = blocks;
+	}
+
+	/* Compute the starting block of each level */
+	offset = 0;
+	for (level = (int)params->num_levels - 1; level >= 0; level--) {
+		blocks = params->level_start[level];
+		params->level_start[level] = offset;
+		pr_debug("Level %d is %llu blocks starting at index %llu\n",
+			 level, blocks, offset);
+		offset += blocks;
+	}
+
+	params->tree_size = offset << log_blocksize;
+	return 0;
+
+out_err:
+	kfree(params->hashstate);
+	memset(params, 0, sizeof(*params));
+	return err;
+}
+
+/*
+ * Compute the file measurement by hashing the fsverity_descriptor excluding the
+ * signature and with the sig_size field set to 0.
+ */
+static int compute_file_measurement(const struct fsverity_hash_alg *hash_alg,
+				    struct fsverity_descriptor *desc,
+				    u8 *measurement)
+{
+	__le32 sig_size = desc->sig_size;
+	int err;
+
+	desc->sig_size = 0;
+	err = fsverity_hash_buffer(hash_alg, desc, sizeof(*desc), measurement);
+	desc->sig_size = sig_size;
+
+	return err;
+}
+
+/*
+ * Validate the given fsverity_descriptor and create a new fsverity_info from
+ * it.  The signature (if present) is also checked.
+ */
+struct fsverity_info *fsverity_create_info(const struct inode *inode,
+					   void *_desc, size_t desc_size)
+{
+	struct fsverity_descriptor *desc = _desc;
+	struct fsverity_info *vi;
+	int err;
+
+	if (desc_size < sizeof(*desc)) {
+		fsverity_err(inode, "Unrecognized descriptor size: %zu bytes",
+			     desc_size);
+		return ERR_PTR(-EINVAL);
+	}
+
+	if (desc->version != 1) {
+		fsverity_err(inode, "Unrecognized descriptor version: %u",
+			     desc->version);
+		return ERR_PTR(-EINVAL);
+	}
+
+	if (memchr_inv(desc->__reserved, 0, sizeof(desc->__reserved))) {
+		fsverity_err(inode, "Reserved bits set in descriptor");
+		return ERR_PTR(-EINVAL);
+	}
+
+	if (desc->salt_size > sizeof(desc->salt)) {
+		fsverity_err(inode, "Invalid salt_size: %u", desc->salt_size);
+		return ERR_PTR(-EINVAL);
+	}
+
+	if (le64_to_cpu(desc->data_size) != inode->i_size) {
+		fsverity_err(inode,
+			     "Wrong data_size: %llu (desc) != %lld (inode)",
+			     le64_to_cpu(desc->data_size), inode->i_size);
+		return ERR_PTR(-EINVAL);
+	}
+
+	vi = kmem_cache_zalloc(fsverity_info_cachep, GFP_KERNEL);
+	if (!vi)
+		return ERR_PTR(-ENOMEM);
+	vi->inode = inode;
+
+	err = fsverity_init_merkle_tree_params(&vi->tree_params, inode,
+					       desc->hash_algorithm,
+					       desc->log_blocksize,
+					       desc->salt, desc->salt_size);
+	if (err) {
+		fsverity_err(inode,
+			     "Error %d initializing Merkle tree parameters",
+			     err);
+		goto out;
+	}
+
+	memcpy(vi->root_hash, desc->root_hash, vi->tree_params.digest_size);
+
+	err = compute_file_measurement(vi->tree_params.hash_alg, desc,
+				       vi->measurement);
+	if (err) {
+		fsverity_err(inode, "Error %d computing file measurement", err);
+		goto out;
+	}
+	pr_debug("Computed file measurement: %s:%*phN\n",
+		 vi->tree_params.hash_alg->name,
+		 vi->tree_params.digest_size, vi->measurement);
+
+	err = fsverity_verify_signature(vi, desc, desc_size);
+out:
+	if (err) {
+		fsverity_free_info(vi);
+		vi = ERR_PTR(err);
+	}
+	return vi;
+}
+
+void fsverity_set_info(struct inode *inode, struct fsverity_info *vi)
+{
+	/*
+	 * Multiple processes may race to set ->i_verity_info, so use cmpxchg.
+	 * This pairs with the READ_ONCE() in fsverity_get_info().
+	 */
+	if (cmpxchg(&inode->i_verity_info, NULL, vi) != NULL)
+		fsverity_free_info(vi);
+}
+
+void fsverity_free_info(struct fsverity_info *vi)
+{
+	if (!vi)
+		return;
+	kfree(vi->tree_params.hashstate);
+	kmem_cache_free(fsverity_info_cachep, vi);
+}
+
+/* Ensure the inode has an ->i_verity_info */
+static int ensure_verity_info(struct inode *inode)
+{
+	struct fsverity_info *vi = fsverity_get_info(inode);
+	struct fsverity_descriptor *desc;
+	int res;
+
+	if (vi)
+		return 0;
+
+	res = inode->i_sb->s_vop->get_verity_descriptor(inode, NULL, 0);
+	if (res < 0) {
+		fsverity_err(inode,
+			     "Error %d getting verity descriptor size", res);
+		return res;
+	}
+	if (res > FS_VERITY_MAX_DESCRIPTOR_SIZE) {
+		fsverity_err(inode, "Verity descriptor is too large (%d bytes)",
+			     res);
+		return -EMSGSIZE;
+	}
+	desc = kmalloc(res, GFP_KERNEL);
+	if (!desc)
+		return -ENOMEM;
+	res = inode->i_sb->s_vop->get_verity_descriptor(inode, desc, res);
+	if (res < 0) {
+		fsverity_err(inode, "Error %d reading verity descriptor", res);
+		goto out_free_desc;
+	}
+
+	vi = fsverity_create_info(inode, desc, res);
+	if (IS_ERR(vi)) {
+		res = PTR_ERR(vi);
+		goto out_free_desc;
+	}
+
+	fsverity_set_info(inode, vi);
+	res = 0;
+out_free_desc:
+	kfree(desc);
+	return res;
+}
+
+/**
+ * fsverity_file_open() - prepare to open a verity file
+ * @inode: the inode being opened
+ * @filp: the struct file being set up
+ *
+ * When opening a verity file, deny the open if it is for writing.  Otherwise,
+ * set up the inode's ->i_verity_info if not already done.
+ *
+ * When combined with fscrypt, this must be called after fscrypt_file_open().
+ * Otherwise, we won't have the key set up to decrypt the verity metadata.
+ *
+ * Return: 0 on success, -errno on failure
+ */
+int fsverity_file_open(struct inode *inode, struct file *filp)
+{
+	if (!IS_VERITY(inode))
+		return 0;
+
+	if (filp->f_mode & FMODE_WRITE) {
+		pr_debug("Denying opening verity file (ino %lu) for write\n",
+			 inode->i_ino);
+		return -EPERM;
+	}
+
+	return ensure_verity_info(inode);
+}
+EXPORT_SYMBOL_GPL(fsverity_file_open);
+
+/**
+ * fsverity_prepare_setattr() - prepare to change a verity inode's attributes
+ * @dentry: dentry through which the inode is being changed
+ * @attr: attributes to change
+ *
+ * Verity files are immutable, so deny truncates.  This isn't covered by the
+ * open-time check because sys_truncate() takes a path, not a file descriptor.
+ *
+ * Return: 0 on success, -errno on failure
+ */
+int fsverity_prepare_setattr(struct dentry *dentry, struct iattr *attr)
+{
+	if (IS_VERITY(d_inode(dentry)) && (attr->ia_valid & ATTR_SIZE)) {
+		pr_debug("Denying truncate of verity file (ino %lu)\n",
+			 d_inode(dentry)->i_ino);
+		return -EPERM;
+	}
+	return 0;
+}
+EXPORT_SYMBOL_GPL(fsverity_prepare_setattr);
+
+/**
+ * fsverity_cleanup_inode() - free the inode's verity info, if present
+ *
+ * Filesystems must call this on inode eviction to free ->i_verity_info.
+ */
+void fsverity_cleanup_inode(struct inode *inode)
+{
+	fsverity_free_info(inode->i_verity_info);
+	inode->i_verity_info = NULL;
+}
+EXPORT_SYMBOL_GPL(fsverity_cleanup_inode);
+
+int __init fsverity_init_info_cache(void)
+{
+	fsverity_info_cachep = KMEM_CACHE_USERCOPY(fsverity_info,
+						   SLAB_RECLAIM_ACCOUNT,
+						   measurement);
+	if (!fsverity_info_cachep)
+		return -ENOMEM;
+	return 0;
+}
+
+void __init fsverity_exit_info_cache(void)
+{
+	kmem_cache_destroy(fsverity_info_cachep);
+	fsverity_info_cachep = NULL;
+}
diff --git a/fs/verity/signature.c b/fs/verity/signature.c
new file mode 100644
index 0000000..3dfc56f
--- /dev/null
+++ b/fs/verity/signature.c
@@ -0,0 +1,164 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * fs/verity/signature.c: verification of builtin signatures
+ *
+ * Copyright 2019 Google LLC
+ */
+
+#include "fsverity_private.h"
+
+#include <linux/cred.h>
+#include <linux/key.h>
+#include <linux/slab.h>
+#include <linux/verification.h>
+
+/*
+ * /proc/sys/fs/verity/require_signatures
+ * If 1, all verity files must have a valid builtin signature.
+ */
+static int fsverity_require_signatures;
+
+/*
+ * Keyring that contains the trusted X.509 certificates.
+ *
+ * Only root (kuid=0) can modify this.  Also, root may use
+ * keyctl_restrict_keyring() to prevent any more additions.
+ */
+static struct key *fsverity_keyring;
+
+/**
+ * fsverity_verify_signature() - check a verity file's signature
+ *
+ * If the file's fs-verity descriptor includes a signature of the file
+ * measurement, verify it against the certificates in the fs-verity keyring.
+ *
+ * Return: 0 on success (signature valid or not required); -errno on failure
+ */
+int fsverity_verify_signature(const struct fsverity_info *vi,
+			      const struct fsverity_descriptor *desc,
+			      size_t desc_size)
+{
+	const struct inode *inode = vi->inode;
+	const struct fsverity_hash_alg *hash_alg = vi->tree_params.hash_alg;
+	const u32 sig_size = le32_to_cpu(desc->sig_size);
+	struct fsverity_signed_digest *d;
+	int err;
+
+	if (sig_size == 0) {
+		if (fsverity_require_signatures) {
+			fsverity_err(inode,
+				     "require_signatures=1, rejecting unsigned file!");
+			return -EPERM;
+		}
+		return 0;
+	}
+
+	if (sig_size > desc_size - sizeof(*desc)) {
+		fsverity_err(inode, "Signature overflows verity descriptor");
+		return -EBADMSG;
+	}
+
+	d = kzalloc(sizeof(*d) + hash_alg->digest_size, GFP_KERNEL);
+	if (!d)
+		return -ENOMEM;
+	memcpy(d->magic, "FSVerity", 8);
+	d->digest_algorithm = cpu_to_le16(hash_alg - fsverity_hash_algs);
+	d->digest_size = cpu_to_le16(hash_alg->digest_size);
+	memcpy(d->digest, vi->measurement, hash_alg->digest_size);
+
+	err = verify_pkcs7_signature(d, sizeof(*d) + hash_alg->digest_size,
+				     desc->signature, sig_size,
+				     fsverity_keyring,
+				     VERIFYING_UNSPECIFIED_SIGNATURE,
+				     NULL, NULL);
+	kfree(d);
+
+	if (err) {
+		if (err == -ENOKEY)
+			fsverity_err(inode,
+				     "File's signing cert isn't in the fs-verity keyring");
+		else if (err == -EKEYREJECTED)
+			fsverity_err(inode, "Incorrect file signature");
+		else if (err == -EBADMSG)
+			fsverity_err(inode, "Malformed file signature");
+		else
+			fsverity_err(inode, "Error %d verifying file signature",
+				     err);
+		return err;
+	}
+
+	pr_debug("Valid signature for file measurement %s:%*phN\n",
+		 hash_alg->name, hash_alg->digest_size, vi->measurement);
+	return 0;
+}
+
+#ifdef CONFIG_SYSCTL
+static struct ctl_table_header *fsverity_sysctl_header;
+
+static const struct ctl_path fsverity_sysctl_path[] = {
+	{ .procname = "fs", },
+	{ .procname = "verity", },
+	{ }
+};
+
+/* shared constants to be used in various sysctls */
+static int sysctl_vals[] = { 0, 1, INT_MAX };
+
+#define SYSCTL_ZERO	((void *)&sysctl_vals[0])
+#define SYSCTL_ONE	((void *)&sysctl_vals[1])
+#define SYSCTL_INT_MAX	((void *)&sysctl_vals[2])
+
+static struct ctl_table fsverity_sysctl_table[] = {
+	{
+		.procname       = "require_signatures",
+		.data           = &fsverity_require_signatures,
+		.maxlen         = sizeof(int),
+		.mode           = 0644,
+		.proc_handler   = proc_dointvec_minmax,
+		.extra1         = SYSCTL_ZERO,
+		.extra2         = SYSCTL_ONE,
+	},
+	{ }
+};
+
+static int __init fsverity_sysctl_init(void)
+{
+	fsverity_sysctl_header = register_sysctl_paths(fsverity_sysctl_path,
+						       fsverity_sysctl_table);
+	if (!fsverity_sysctl_header) {
+		pr_err("sysctl registration failed!\n");
+		return -ENOMEM;
+	}
+	return 0;
+}
+#else /* !CONFIG_SYSCTL */
+static inline int __init fsverity_sysctl_init(void)
+{
+	return 0;
+}
+#endif /* !CONFIG_SYSCTL */
+
+int __init fsverity_init_signature(void)
+{
+	struct key *ring;
+	int err;
+
+	ring = keyring_alloc(".fs-verity", KUIDT_INIT(0), KGIDT_INIT(0),
+			     current_cred(), KEY_POS_SEARCH |
+				KEY_USR_VIEW | KEY_USR_READ | KEY_USR_WRITE |
+				KEY_USR_SEARCH | KEY_USR_SETATTR,
+			     KEY_ALLOC_NOT_IN_QUOTA, NULL, NULL);
+	if (IS_ERR(ring))
+		return PTR_ERR(ring);
+
+	err = fsverity_sysctl_init();
+	if (err)
+		goto err_put_ring;
+
+	fsverity_keyring = ring;
+	return 0;
+
+err_put_ring:
+	key_put(ring);
+	return err;
+}
diff --git a/fs/verity/verify.c b/fs/verity/verify.c
new file mode 100644
index 0000000..1818050
--- /dev/null
+++ b/fs/verity/verify.c
@@ -0,0 +1,281 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * fs/verity/verify.c: data verification functions, i.e. hooks for ->readpages()
+ *
+ * Copyright 2019 Google LLC
+ */
+
+#include "fsverity_private.h"
+
+#include <crypto/hash.h>
+#include <linux/bio.h>
+#include <linux/ratelimit.h>
+
+static struct workqueue_struct *fsverity_read_workqueue;
+
+/**
+ * hash_at_level() - compute the location of the block's hash at the given level
+ *
+ * @params:	(in) the Merkle tree parameters
+ * @dindex:	(in) the index of the data block being verified
+ * @level:	(in) the level of hash we want (0 is leaf level)
+ * @hindex:	(out) the index of the hash block containing the wanted hash
+ * @hoffset:	(out) the byte offset to the wanted hash within the hash block
+ */
+static void hash_at_level(const struct merkle_tree_params *params,
+			  pgoff_t dindex, unsigned int level, pgoff_t *hindex,
+			  unsigned int *hoffset)
+{
+	pgoff_t position;
+
+	/* Offset of the hash within the level's region, in hashes */
+	position = dindex >> (level * params->log_arity);
+
+	/* Index of the hash block in the tree overall */
+	*hindex = params->level_start[level] + (position >> params->log_arity);
+
+	/* Offset of the wanted hash (in bytes) within the hash block */
+	*hoffset = (position & ((1 << params->log_arity) - 1)) <<
+		   (params->log_blocksize - params->log_arity);
+}
+
+/* Extract a hash from a hash page */
+static void extract_hash(struct page *hpage, unsigned int hoffset,
+			 unsigned int hsize, u8 *out)
+{
+	void *virt = kmap_atomic(hpage);
+
+	memcpy(out, virt + hoffset, hsize);
+	kunmap_atomic(virt);
+}
+
+static inline int cmp_hashes(const struct fsverity_info *vi,
+			     const u8 *want_hash, const u8 *real_hash,
+			     pgoff_t index, int level)
+{
+	const unsigned int hsize = vi->tree_params.digest_size;
+
+	if (memcmp(want_hash, real_hash, hsize) == 0)
+		return 0;
+
+	fsverity_err(vi->inode,
+		     "FILE CORRUPTED! index=%lu, level=%d, want_hash=%s:%*phN, real_hash=%s:%*phN",
+		     index, level,
+		     vi->tree_params.hash_alg->name, hsize, want_hash,
+		     vi->tree_params.hash_alg->name, hsize, real_hash);
+	return -EBADMSG;
+}
+
+/*
+ * Verify a single data page against the file's Merkle tree.
+ *
+ * In principle, we need to verify the entire path to the root node.  However,
+ * for efficiency the filesystem may cache the hash pages.  Therefore we need
+ * only ascend the tree until an already-verified page is seen, as indicated by
+ * the PageChecked bit being set; then verify the path to that page.
+ *
+ * This code currently only supports the case where the verity block size is
+ * equal to PAGE_SIZE.  Doing otherwise would be possible but tricky, since we
+ * wouldn't be able to use the PageChecked bit.
+ *
+ * Note that multiple processes may race to verify a hash page and mark it
+ * Checked, but it doesn't matter; the result will be the same either way.
+ *
+ * Return: true if the page is valid, else false.
+ */
+static bool verify_page(struct inode *inode, const struct fsverity_info *vi,
+			struct ahash_request *req, struct page *data_page)
+{
+	const struct merkle_tree_params *params = &vi->tree_params;
+	const unsigned int hsize = params->digest_size;
+	const pgoff_t index = data_page->index;
+	int level;
+	u8 _want_hash[FS_VERITY_MAX_DIGEST_SIZE];
+	const u8 *want_hash;
+	u8 real_hash[FS_VERITY_MAX_DIGEST_SIZE];
+	struct page *hpages[FS_VERITY_MAX_LEVELS];
+	unsigned int hoffsets[FS_VERITY_MAX_LEVELS];
+	int err;
+
+	if (WARN_ON_ONCE(!PageLocked(data_page) || PageUptodate(data_page)))
+		return false;
+
+	pr_debug_ratelimited("Verifying data page %lu...\n", index);
+
+	/*
+	 * Starting at the leaf level, ascend the tree saving hash pages along
+	 * the way until we find a verified hash page, indicated by PageChecked;
+	 * or until we reach the root.
+	 */
+	for (level = 0; level < params->num_levels; level++) {
+		pgoff_t hindex;
+		unsigned int hoffset;
+		struct page *hpage;
+
+		hash_at_level(params, index, level, &hindex, &hoffset);
+
+		pr_debug_ratelimited("Level %d: hindex=%lu, hoffset=%u\n",
+				     level, hindex, hoffset);
+
+		hpage = inode->i_sb->s_vop->read_merkle_tree_page(inode,
+								  hindex);
+		if (IS_ERR(hpage)) {
+			err = PTR_ERR(hpage);
+			fsverity_err(inode,
+				     "Error %d reading Merkle tree page %lu",
+				     err, hindex);
+			goto out;
+		}
+
+		if (PageChecked(hpage)) {
+			extract_hash(hpage, hoffset, hsize, _want_hash);
+			want_hash = _want_hash;
+			put_page(hpage);
+			pr_debug_ratelimited("Hash page already checked, want %s:%*phN\n",
+					     params->hash_alg->name,
+					     hsize, want_hash);
+			goto descend;
+		}
+		pr_debug_ratelimited("Hash page not yet checked\n");
+		hpages[level] = hpage;
+		hoffsets[level] = hoffset;
+	}
+
+	want_hash = vi->root_hash;
+	pr_debug("Want root hash: %s:%*phN\n",
+		 params->hash_alg->name, hsize, want_hash);
+descend:
+	/* Descend the tree verifying hash pages */
+	for (; level > 0; level--) {
+		struct page *hpage = hpages[level - 1];
+		unsigned int hoffset = hoffsets[level - 1];
+
+		err = fsverity_hash_page(params, inode, req, hpage, real_hash);
+		if (err)
+			goto out;
+		err = cmp_hashes(vi, want_hash, real_hash, index, level - 1);
+		if (err)
+			goto out;
+		SetPageChecked(hpage);
+		extract_hash(hpage, hoffset, hsize, _want_hash);
+		want_hash = _want_hash;
+		put_page(hpage);
+		pr_debug("Verified hash page at level %d, now want %s:%*phN\n",
+			 level - 1, params->hash_alg->name, hsize, want_hash);
+	}
+
+	/* Finally, verify the data page */
+	err = fsverity_hash_page(params, inode, req, data_page, real_hash);
+	if (err)
+		goto out;
+	err = cmp_hashes(vi, want_hash, real_hash, index, -1);
+out:
+	for (; level > 0; level--)
+		put_page(hpages[level - 1]);
+
+	return err == 0;
+}
+
+/**
+ * fsverity_verify_page() - verify a data page
+ *
+ * Verify a page that has just been read from a verity file.  The page must be a
+ * pagecache page that is still locked and not yet uptodate.
+ *
+ * Return: true if the page is valid, else false.
+ */
+bool fsverity_verify_page(struct page *page)
+{
+	struct inode *inode = page->mapping->host;
+	const struct fsverity_info *vi = inode->i_verity_info;
+	struct ahash_request *req;
+	bool valid;
+
+	req = ahash_request_alloc(vi->tree_params.hash_alg->tfm, GFP_NOFS);
+	if (unlikely(!req))
+		return false;
+
+	valid = verify_page(inode, vi, req, page);
+
+	ahash_request_free(req);
+
+	return valid;
+}
+EXPORT_SYMBOL_GPL(fsverity_verify_page);
+
+#ifdef CONFIG_BLOCK
+/**
+ * fsverity_verify_bio() - verify a 'read' bio that has just completed
+ *
+ * Verify a set of pages that have just been read from a verity file.  The pages
+ * must be pagecache pages that are still locked and not yet uptodate.  Pages
+ * that fail verification are set to the Error state.  Verification is skipped
+ * for pages already in the Error state, e.g. due to fscrypt decryption failure.
+ *
+ * This is a helper function for use by the ->readpages() method of filesystems
+ * that issue bios to read data directly into the page cache.  Filesystems that
+ * populate the page cache without issuing bios (e.g. non block-based
+ * filesystems) must instead call fsverity_verify_page() directly on each page.
+ * All filesystems must also call fsverity_verify_page() on holes.
+ */
+void fsverity_verify_bio(struct bio *bio)
+{
+	struct inode *inode = bio_first_page_all(bio)->mapping->host;
+	const struct fsverity_info *vi = inode->i_verity_info;
+	struct ahash_request *req;
+	struct bio_vec *bv;
+	int i;
+
+	req = ahash_request_alloc(vi->tree_params.hash_alg->tfm, GFP_NOFS);
+	if (unlikely(!req)) {
+		bio_for_each_segment_all(bv, bio, i)
+			SetPageError(bv->bv_page);
+		return;
+	}
+
+	bio_for_each_segment_all(bv, bio, i) {
+		struct page *page = bv->bv_page;
+
+		if (!PageError(page) && !verify_page(inode, vi, req, page))
+			SetPageError(page);
+	}
+
+	ahash_request_free(req);
+}
+EXPORT_SYMBOL_GPL(fsverity_verify_bio);
+#endif /* CONFIG_BLOCK */
+
+/**
+ * fsverity_enqueue_verify_work() - enqueue work on the fs-verity workqueue
+ *
+ * Enqueue verification work for asynchronous processing.
+ */
+void fsverity_enqueue_verify_work(struct work_struct *work)
+{
+	queue_work(fsverity_read_workqueue, work);
+}
+EXPORT_SYMBOL_GPL(fsverity_enqueue_verify_work);
+
+int __init fsverity_init_workqueue(void)
+{
+	/*
+	 * Use an unbound workqueue to allow bios to be verified in parallel
+	 * even when they happen to complete on the same CPU.  This sacrifices
+	 * locality, but it's worthwhile since hashing is CPU-intensive.
+	 *
+	 * Also use a high-priority workqueue to prioritize verification work,
+	 * which blocks reads from completing, over regular application tasks.
+	 */
+	fsverity_read_workqueue = alloc_workqueue("fsverity_read_queue",
+						  WQ_UNBOUND | WQ_HIGHPRI,
+						  num_online_cpus());
+	if (!fsverity_read_workqueue)
+		return -ENOMEM;
+	return 0;
+}
+
+void __init fsverity_exit_workqueue(void)
+{
+	destroy_workqueue(fsverity_read_workqueue);
+	fsverity_read_workqueue = NULL;
+}
diff --git a/gen_headers_arm.bp b/gen_headers_arm.bp
index 8685f11..a8f40a7 100644
--- a/gen_headers_arm.bp
+++ b/gen_headers_arm.bp
@@ -1,7 +1,21 @@
 // ***** DO NOT EDIT *****
 // This file is generated by kernel_headers.py
 
-gen_headers_arm = [
+gen_headers_srcs_arm = [
+    "arch/arm/include/uapi/asm/Kbuild",
+    "include/uapi/asm-generic/Kbuild.asm",
+    "Makefile",
+    "arch/arm/tools/syscall.tbl",
+    "include/uapi/**/*.h",
+    "arch/arm/include/uapi/**/*.h",
+    "techpack/*/include/uapi/*/**/*.h",
+]
+
+gen_headers_exclude_srcs_arm = [
+    "include/uapi/linux/a.out.h",
+]
+
+gen_headers_out_arm = [
 
     // Matching generated-y:
 
@@ -220,6 +234,7 @@
     "linux/fsi.h",
     "linux/fsl_hypervisor.h",
     "linux/fsmap.h",
+    "linux/fsverity.h",
     "linux/fuse.h",
     "linux/futex.h",
     "linux/gameport.h",
@@ -697,6 +712,7 @@
     "xen/gntdev.h",
     "xen/privcmd.h",
     "linux/android/binder.h",
+    "linux/android/binderfs.h",
     "linux/byteorder/big_endian.h",
     "linux/byteorder/little_endian.h",
     "linux/caif/caif_socket.h",
@@ -939,7 +955,7 @@
     "asm/types.h",
     "asm/unistd.h",
 
-    // From techpack/*
+    // From techpack/*/include/uapi/*/**/*.h
 
     "media/cam_cpas.h",
     "media/cam_custom.h",
@@ -962,7 +978,8 @@
     // checked later to ensure that it matches the checked-
     // in version (this file).
     name: "qti_generate_gen_headers_arm",
-    srcs: ["arch/arm/include/uapi/asm/Kbuild", "include/uapi/asm-generic/Kbuild.asm", "arch/arm/include/uapi/**/*.h"],
+    srcs: gen_headers_srcs_arm,
+    exclude_srcs: gen_headers_exclude_srcs_arm,
     tool_files: ["kernel_headers.py"],
     cmd: "python3 $(location kernel_headers.py) " +
         kernel_headers_verbose +
@@ -970,8 +987,10 @@
         "--gen_dir $(genDir) " +
         "--arch_asm_kbuild $(location arch/arm/include/uapi/asm/Kbuild) " +
         "--arch_include_uapi $(locations arch/arm/include/uapi/**/*.h) " +
+        "--techpack_include_uapi $(locations techpack/*/include/uapi/*/**/*.h) " +
         "--asm_generic_kbuild $(location include/uapi/asm-generic/Kbuild.asm) " +
-        "blueprints",
+        "blueprints " +
+        "# $(in)",
     out: ["gen_headers_arm.bp"],
 }
 
@@ -982,25 +1001,18 @@
         "kernel_headers.py",
         "arch/arm/tools/syscallhdr.sh",
     ],
-    srcs: [
-        "arch/arm/include/uapi/asm/Kbuild",
-        "include/uapi/asm-generic/Kbuild.asm",
+    srcs: gen_headers_srcs_arm +[
         "gen_headers_arm.bp",
         ":qti_generate_gen_headers_arm",
-        "Makefile",
-        "arch/arm/tools/syscall.tbl",
-        "include/uapi/**/*.h",
-        "arch/arm/include/uapi/**/*.h",
     ],
-    exclude_srcs: [
-        "include/uapi/linux/a.out.h",
-    ],
+    exclude_srcs: gen_headers_exclude_srcs_arm,
     cmd: "python3 $(location kernel_headers.py) " +
         kernel_headers_verbose +
         "--header_arch arm " +
         "--gen_dir $(genDir) " +
         "--arch_asm_kbuild $(location arch/arm/include/uapi/asm/Kbuild) " +
         "--arch_include_uapi $(locations arch/arm/include/uapi/**/*.h) " +
+        "--techpack_include_uapi $(locations techpack/*/include/uapi/*/**/*.h) " +
         "--asm_generic_kbuild $(location include/uapi/asm-generic/Kbuild.asm) " +
         "headers " +
         "--old_gen_headers_bp $(location gen_headers_arm.bp) " +
@@ -1010,5 +1022,5 @@
         "--arch_syscall_tbl $(location arch/arm/tools/syscall.tbl) " +
         "--headers_install $(location headers_install.sh) " +
         "--include_uapi $(locations include/uapi/**/*.h)",
-    out: ["linux/version.h"] + gen_headers_arm,
+    out: ["linux/version.h"] + gen_headers_out_arm,
 }
diff --git a/gen_headers_arm64.bp b/gen_headers_arm64.bp
index 2ba2ac6..0b9d2ba 100644
--- a/gen_headers_arm64.bp
+++ b/gen_headers_arm64.bp
@@ -1,7 +1,21 @@
 // ***** DO NOT EDIT *****
 // This file is generated by kernel_headers.py
 
-gen_headers_arm64 = [
+gen_headers_srcs_arm64 = [
+    "arch/arm64/include/uapi/asm/Kbuild",
+    "include/uapi/asm-generic/Kbuild.asm",
+    "Makefile",
+    "include/uapi/**/*.h",
+    "arch/arm64/include/uapi/**/*.h",
+    "techpack/*/include/uapi/*/**/*.h",
+]
+
+gen_headers_exclude_srcs_arm64 = [
+    "include/uapi/linux/a.out.h",
+    "include/uapi/linux/kvm_para.h",
+]
+
+gen_headers_out_arm64 = [
 
     // Matching generic-y:
 
@@ -215,6 +229,7 @@
     "linux/fsi.h",
     "linux/fsl_hypervisor.h",
     "linux/fsmap.h",
+    "linux/fsverity.h",
     "linux/fuse.h",
     "linux/futex.h",
     "linux/gameport.h",
@@ -691,6 +706,7 @@
     "xen/gntdev.h",
     "xen/privcmd.h",
     "linux/android/binder.h",
+    "linux/android/binderfs.h",
     "linux/byteorder/big_endian.h",
     "linux/byteorder/little_endian.h",
     "linux/caif/caif_socket.h",
@@ -933,7 +949,7 @@
     "asm/ucontext.h",
     "asm/unistd.h",
 
-    // From techpack/*
+    // From techpack/*/include/uapi/*/**/*.h
 
     "media/cam_cpas.h",
     "media/cam_custom.h",
@@ -956,7 +972,8 @@
     // checked later to ensure that it matches the checked-
     // in version (this file).
     name: "qti_generate_gen_headers_arm64",
-    srcs: ["arch/arm64/include/uapi/asm/Kbuild", "include/uapi/asm-generic/Kbuild.asm", "arch/arm64/include/uapi/**/*.h"],
+    srcs: gen_headers_srcs_arm64,
+    exclude_srcs: gen_headers_exclude_srcs_arm64,
     tool_files: ["kernel_headers.py"],
     cmd: "python3 $(location kernel_headers.py) " +
         kernel_headers_verbose +
@@ -964,8 +981,10 @@
         "--gen_dir $(genDir) " +
         "--arch_asm_kbuild $(location arch/arm64/include/uapi/asm/Kbuild) " +
         "--arch_include_uapi $(locations arch/arm64/include/uapi/**/*.h) " +
+        "--techpack_include_uapi $(locations techpack/*/include/uapi/*/**/*.h) " +
         "--asm_generic_kbuild $(location include/uapi/asm-generic/Kbuild.asm) " +
-        "blueprints",
+        "blueprints " +
+        "# $(in)",
     out: ["gen_headers_arm64.bp"],
 }
 
@@ -975,25 +994,18 @@
     tool_files: [
         "kernel_headers.py",
     ],
-    srcs: [
-        "arch/arm64/include/uapi/asm/Kbuild",
-        "include/uapi/asm-generic/Kbuild.asm",
+    srcs: gen_headers_srcs_arm64 +[
         "gen_headers_arm64.bp",
         ":qti_generate_gen_headers_arm64",
-        "Makefile",
-        "include/uapi/**/*.h",
-        "arch/arm64/include/uapi/**/*.h",
     ],
-    exclude_srcs: [
-        "include/uapi/linux/a.out.h",
-        "include/uapi/linux/kvm_para.h",
-    ],
+    exclude_srcs: gen_headers_exclude_srcs_arm64,
     cmd: "python3 $(location kernel_headers.py) " +
         kernel_headers_verbose +
         "--header_arch arm64 " +
         "--gen_dir $(genDir) " +
         "--arch_asm_kbuild $(location arch/arm64/include/uapi/asm/Kbuild) " +
         "--arch_include_uapi $(locations arch/arm64/include/uapi/**/*.h) " +
+        "--techpack_include_uapi $(locations techpack/*/include/uapi/*/**/*.h) " +
         "--asm_generic_kbuild $(location include/uapi/asm-generic/Kbuild.asm) " +
         "headers " +
         "--old_gen_headers_bp $(location gen_headers_arm64.bp) " +
@@ -1001,5 +1013,5 @@
         "--version_makefile $(location Makefile) " +
         "--headers_install $(location headers_install.sh) " +
         "--include_uapi $(locations include/uapi/**/*.h)",
-    out: ["linux/version.h"] + gen_headers_arm64,
+    out: ["linux/version.h"] + gen_headers_out_arm64,
 }
diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
index 06768d1..93f3204 100644
--- a/include/drm/drm_connector.h
+++ b/include/drm/drm_connector.h
@@ -1192,6 +1192,7 @@
 		       struct drm_connector *connector,
 		       const struct drm_connector_funcs *funcs,
 		       int connector_type);
+void drm_connector_attach_edid_property(struct drm_connector *connector);
 int drm_connector_register(struct drm_connector *connector);
 void drm_connector_unregister(struct drm_connector *connector);
 int drm_connector_attach_encoder(struct drm_connector *connector,
diff --git a/include/drm/drm_fourcc.h b/include/drm/drm_fourcc.h
index f9c1584..fac831c 100644
--- a/include/drm/drm_fourcc.h
+++ b/include/drm/drm_fourcc.h
@@ -25,6 +25,28 @@
 #include <linux/types.h>
 #include <uapi/drm/drm_fourcc.h>
 
+/*
+ * DRM formats are little endian.  Define host endian variants for the
+ * most common formats here, to reduce the #ifdefs needed in drivers.
+ *
+ * Note that the DRM_FORMAT_BIG_ENDIAN flag should only be used in
+ * case the format can't be specified otherwise, so we don't end up
+ * with two values describing the same format.
+ */
+#ifdef __BIG_ENDIAN
+# define DRM_FORMAT_HOST_XRGB1555     (DRM_FORMAT_XRGB1555         |	\
+				       DRM_FORMAT_BIG_ENDIAN)
+# define DRM_FORMAT_HOST_RGB565       (DRM_FORMAT_RGB565           |	\
+				       DRM_FORMAT_BIG_ENDIAN)
+# define DRM_FORMAT_HOST_XRGB8888     DRM_FORMAT_BGRX8888
+# define DRM_FORMAT_HOST_ARGB8888     DRM_FORMAT_BGRA8888
+#else
+# define DRM_FORMAT_HOST_XRGB1555     DRM_FORMAT_XRGB1555
+# define DRM_FORMAT_HOST_RGB565       DRM_FORMAT_RGB565
+# define DRM_FORMAT_HOST_XRGB8888     DRM_FORMAT_XRGB8888
+# define DRM_FORMAT_HOST_ARGB8888     DRM_FORMAT_ARGB8888
+#endif
+
 struct drm_device;
 struct drm_mode_fb_cmd2;
 
diff --git a/include/drm/drm_prime.h b/include/drm/drm_prime.h
index d716d65..0c86d75 100644
--- a/include/drm/drm_prime.h
+++ b/include/drm/drm_prime.h
@@ -70,6 +70,7 @@
 int drm_gem_prime_handle_to_fd(struct drm_device *dev,
 			       struct drm_file *file_priv, uint32_t handle, uint32_t flags,
 			       int *prime_fd);
+int drm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma);
 struct drm_gem_object *drm_gem_prime_import(struct drm_device *dev,
 					    struct dma_buf *dma_buf);
 
diff --git a/include/dt-bindings/clock/mdss-10nm-pll-clk.h b/include/dt-bindings/clock/mdss-10nm-pll-clk.h
index bbc6ed9..2ab0d67 100644
--- a/include/dt-bindings/clock/mdss-10nm-pll-clk.h
+++ b/include/dt-bindings/clock/mdss-10nm-pll-clk.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
 /*
- * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
  */
 
 #ifndef __MDSS_10NM_PLL_CLK_H
@@ -45,10 +45,13 @@
 #define SHADOW_PCLK_SRC_1_CLK		35
 
 /* DP PLL clocks */
-#define	DP_VCO_CLK	0
-#define	DP_LINK_CLK_DIVSEL_TEN	1
+#define	DP_VCO_CLK			0
+#define	DP_PHY_PLL_LINK_CLK		1
 #define	DP_VCO_DIVIDED_TWO_CLK_SRC	2
 #define	DP_VCO_DIVIDED_FOUR_CLK_SRC	3
 #define	DP_VCO_DIVIDED_SIX_CLK_SRC	4
-#define	DP_VCO_DIVIDED_CLK_SRC_MUX	5
+#define	DP_PHY_PLL_VCO_DIV_CLK		5
+
+#define DP_LINK_CLK_DIVSEL_TEN		1
+#define DP_VCO_DIVIDED_CLK_SRC_MUX	5
 #endif
diff --git a/include/dt-bindings/clock/mdss-7nm-pll-clk.h b/include/dt-bindings/clock/mdss-7nm-pll-clk.h
index 79820b4..bb146d7 100644
--- a/include/dt-bindings/clock/mdss-7nm-pll-clk.h
+++ b/include/dt-bindings/clock/mdss-7nm-pll-clk.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
 /*
- * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
  */
 
 #ifndef __MDSS_7NM_PLL_CLK_H
@@ -25,24 +25,36 @@
 #define SHADOW_POST_VCO_DIV_0_CLK	15
 #define SHADOW_PCLK_SRC_MUX_0_CLK	16
 #define SHADOW_PCLK_SRC_0_CLK		17
-#define VCO_CLK_1		18
-#define PLL_OUT_DIV_1_CLK	19
-#define BITCLK_SRC_1_CLK	20
-#define BYTECLK_SRC_1_CLK	21
-#define POST_BIT_DIV_1_CLK	22
-#define POST_VCO_DIV_1_CLK	23
-#define BYTECLK_MUX_1_CLK	24
-#define PCLK_SRC_MUX_1_CLK	25
-#define PCLK_SRC_1_CLK		26
-#define PCLK_MUX_1_CLK		27
-#define SHADOW_VCO_CLK_1		28
-#define SHADOW_PLL_OUT_DIV_1_CLK	29
-#define SHADOW_BITCLK_SRC_1_CLK		30
-#define SHADOW_BYTECLK_SRC_1_CLK	31
-#define SHADOW_POST_BIT_DIV_1_CLK	32
-#define SHADOW_POST_VCO_DIV_1_CLK	33
-#define SHADOW_PCLK_SRC_MUX_1_CLK	34
-#define SHADOW_PCLK_SRC_1_CLK		35
+/* CPHY clocks for DSI-0 PLL */
+#define CPHY_BYTECLK_SRC_0_CLK	18
+#define POST_VCO_DIV3_5_0_CLK	19
+#define CPHY_PCLK_SRC_MUX_0_CLK	20
+#define CPHY_PCLK_SRC_0_CLK	21
+
+#define VCO_CLK_1		22
+#define PLL_OUT_DIV_1_CLK	23
+#define BITCLK_SRC_1_CLK	24
+#define BYTECLK_SRC_1_CLK	25
+#define POST_BIT_DIV_1_CLK	26
+#define POST_VCO_DIV_1_CLK	27
+#define BYTECLK_MUX_1_CLK	28
+#define PCLK_SRC_MUX_1_CLK	29
+#define PCLK_SRC_1_CLK		30
+#define PCLK_MUX_1_CLK		31
+#define SHADOW_VCO_CLK_1		32
+#define SHADOW_PLL_OUT_DIV_1_CLK	33
+#define SHADOW_BITCLK_SRC_1_CLK		34
+#define SHADOW_BYTECLK_SRC_1_CLK	35
+#define SHADOW_POST_BIT_DIV_1_CLK	36
+#define SHADOW_POST_VCO_DIV_1_CLK	37
+#define SHADOW_PCLK_SRC_MUX_1_CLK	38
+#define SHADOW_PCLK_SRC_1_CLK		39
+/* CPHY clocks for DSI-1 PLL */
+#define CPHY_BYTECLK_SRC_1_CLK	40
+#define POST_VCO_DIV3_5_1_CLK	41
+#define CPHY_PCLK_SRC_MUX_1_CLK	42
+#define CPHY_PCLK_SRC_1_CLK	43
+
 
 /* DP PLL clocks */
 #define	DP_VCO_CLK	0
diff --git a/include/dt-bindings/clock/qcom,gcc-bengal.h b/include/dt-bindings/clock/qcom,gcc-bengal.h
index f6d0eb4..2d3a317 100644
--- a/include/dt-bindings/clock/qcom,gcc-bengal.h
+++ b/include/dt-bindings/clock/qcom,gcc-bengal.h
@@ -185,5 +185,6 @@
 #define GCC_VIDEO_INTERFACE_BCR					8
 #define GCC_USB3PHY_PHY_PRIM_SP0_BCR				9
 #define GCC_USB3_PHY_PRIM_SP0_BCR				10
+#define GCC_SDCC2_BCR						11
 
 #endif
diff --git a/include/dt-bindings/clock/qcom,gcc-scuba.h b/include/dt-bindings/clock/qcom,gcc-scuba.h
index 3394a2a..f4eb89c 100644
--- a/include/dt-bindings/clock/qcom,gcc-scuba.h
+++ b/include/dt-bindings/clock/qcom,gcc-scuba.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
 /*
- * Copyright (c) 2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2019-2020, The Linux Foundation. All rights reserved.
  */
 
 #ifndef _DT_BINDINGS_CLK_QCOM_GCC_SCUBA_H
@@ -79,17 +79,17 @@
 #define GCC_CPUSS_THROTTLE_CORE_CLK			69
 #define GCC_CPUSS_THROTTLE_XO_CLK			70
 #define GCC_DISP_AHB_CLK				71
-#define GCC_DISP_GPLL0_DIV_CLK_SRC			72
-#define GCC_DISP_HF_AXI_CLK				73
-#define GCC_DISP_THROTTLE_CORE_CLK			74
-#define GCC_DISP_XO_CLK					75
-#define GCC_GP1_CLK					76
-#define GCC_GP1_CLK_SRC					77
-#define GCC_GP2_CLK					78
-#define GCC_GP2_CLK_SRC					79
-#define GCC_GP3_CLK					80
-#define GCC_GP3_CLK_SRC					81
-#define GCC_GPU_BIMC_AXI_CLK_SRC			82
+#define GCC_DISP_GPLL0_CLK_SRC				72
+#define GCC_DISP_GPLL0_DIV_CLK_SRC			73
+#define GCC_DISP_HF_AXI_CLK				74
+#define GCC_DISP_THROTTLE_CORE_CLK			75
+#define GCC_DISP_XO_CLK					76
+#define GCC_GP1_CLK					77
+#define GCC_GP1_CLK_SRC					78
+#define GCC_GP2_CLK					79
+#define GCC_GP2_CLK_SRC					80
+#define GCC_GP3_CLK					81
+#define GCC_GP3_CLK_SRC					82
 #define GCC_GPU_CFG_AHB_CLK				83
 #define GCC_GPU_GPLL0_CLK_SRC				84
 #define GCC_GPU_GPLL0_DIV_CLK_SRC			85
@@ -98,72 +98,63 @@
 #define GCC_GPU_SNOC_DVM_GFX_CLK			88
 #define GCC_GPU_THROTTLE_CORE_CLK			89
 #define GCC_GPU_THROTTLE_XO_CLK				90
-#define GCC_MSS_VS_CLK					91
-#define GCC_PDM2_CLK					92
-#define GCC_PDM2_CLK_SRC				93
-#define GCC_PDM_AHB_CLK					94
-#define GCC_PDM_XO4_CLK					95
-#define GCC_PWM0_XO512_CLK				96
-#define GCC_QMIP_CAMERA_NRT_AHB_CLK			97
-#define GCC_QMIP_CAMERA_RT_AHB_CLK			98
-#define GCC_QMIP_CPUSS_CFG_AHB_CLK			99
-#define GCC_QMIP_DISP_AHB_CLK				100
-#define GCC_QMIP_GPU_CFG_AHB_CLK			101
-#define GCC_QMIP_VIDEO_VCODEC_AHB_CLK			102
-#define GCC_QUPV3_WRAP0_CORE_2X_CLK			103
-#define GCC_QUPV3_WRAP0_CORE_CLK			104
-#define GCC_QUPV3_WRAP0_S0_CLK				105
-#define GCC_QUPV3_WRAP0_S0_CLK_SRC			106
-#define GCC_QUPV3_WRAP0_S1_CLK				107
-#define GCC_QUPV3_WRAP0_S1_CLK_SRC			108
-#define GCC_QUPV3_WRAP0_S2_CLK				109
-#define GCC_QUPV3_WRAP0_S2_CLK_SRC			110
-#define GCC_QUPV3_WRAP0_S3_CLK				111
-#define GCC_QUPV3_WRAP0_S3_CLK_SRC			112
-#define GCC_QUPV3_WRAP0_S4_CLK				113
-#define GCC_QUPV3_WRAP0_S4_CLK_SRC			114
-#define GCC_QUPV3_WRAP0_S5_CLK				115
-#define GCC_QUPV3_WRAP0_S5_CLK_SRC			116
-#define GCC_QUPV3_WRAP_0_M_AHB_CLK			117
-#define GCC_QUPV3_WRAP_0_S_AHB_CLK			118
-#define GCC_SDCC1_AHB_CLK				119
-#define GCC_SDCC1_APPS_CLK				120
-#define GCC_SDCC1_APPS_CLK_SRC				121
-#define GCC_SDCC1_ICE_CORE_CLK				122
-#define GCC_SDCC1_ICE_CORE_CLK_SRC			123
-#define GCC_SDCC2_AHB_CLK				124
-#define GCC_SDCC2_APPS_CLK				125
-#define GCC_SDCC2_APPS_CLK_SRC				126
-#define GCC_SYS_NOC_CPUSS_AHB_CLK			127
-#define GCC_SYS_NOC_USB3_PRIM_AXI_CLK			128
-#define GCC_USB30_PRIM_MASTER_CLK			129
-#define GCC_USB30_PRIM_MASTER_CLK_SRC			130
-#define GCC_USB30_PRIM_MOCK_UTMI_CLK			131
-#define GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC		132
-#define GCC_USB30_PRIM_MOCK_UTMI_POSTDIV		133
-#define GCC_USB30_PRIM_SLEEP_CLK			134
-#define GCC_USB3_PRIM_CLKREF_CLK			135
-#define GCC_USB3_PRIM_PHY_AUX_CLK_SRC			136
-#define GCC_USB3_PRIM_PHY_COM_AUX_CLK			137
-#define GCC_USB3_PRIM_PHY_PIPE_CLK			138
-#define GCC_VCODEC0_AXI_CLK				139
-#define GCC_VDDA_VS_CLK					140
-#define GCC_VDDCX_VS_CLK				141
-#define GCC_VDDMX_VS_CLK				142
-#define GCC_VENUS_AHB_CLK				143
-#define GCC_VENUS_CTL_AXI_CLK				144
-#define GCC_VIDEO_AHB_CLK				145
-#define GCC_VIDEO_AXI0_CLK				146
-#define GCC_VIDEO_THROTTLE_CORE_CLK			147
-#define GCC_VIDEO_VCODEC0_SYS_CLK			148
-#define GCC_VIDEO_VENUS_CLK_SRC				149
-#define GCC_VIDEO_VENUS_CTL_CLK				150
-#define GCC_VIDEO_XO_CLK				151
-#define GCC_VS_CTRL_AHB_CLK				152
-#define GCC_VS_CTRL_CLK					153
-#define GCC_VS_CTRL_CLK_SRC				154
-#define GCC_VSENSOR_CLK_SRC				155
-#define GCC_WCSS_VS_CLK					156
+#define GCC_PDM2_CLK					91
+#define GCC_PDM2_CLK_SRC				92
+#define GCC_PDM_AHB_CLK					93
+#define GCC_PDM_XO4_CLK					94
+#define GCC_PWM0_XO512_CLK				95
+#define GCC_QMIP_CAMERA_NRT_AHB_CLK			96
+#define GCC_QMIP_CAMERA_RT_AHB_CLK			97
+#define GCC_QMIP_CPUSS_CFG_AHB_CLK			98
+#define GCC_QMIP_DISP_AHB_CLK				99
+#define GCC_QMIP_GPU_CFG_AHB_CLK			100
+#define GCC_QMIP_VIDEO_VCODEC_AHB_CLK			101
+#define GCC_QUPV3_WRAP0_CORE_2X_CLK			102
+#define GCC_QUPV3_WRAP0_CORE_CLK			103
+#define GCC_QUPV3_WRAP0_S0_CLK				104
+#define GCC_QUPV3_WRAP0_S0_CLK_SRC			105
+#define GCC_QUPV3_WRAP0_S1_CLK				106
+#define GCC_QUPV3_WRAP0_S1_CLK_SRC			107
+#define GCC_QUPV3_WRAP0_S2_CLK				108
+#define GCC_QUPV3_WRAP0_S2_CLK_SRC			109
+#define GCC_QUPV3_WRAP0_S3_CLK				110
+#define GCC_QUPV3_WRAP0_S3_CLK_SRC			111
+#define GCC_QUPV3_WRAP0_S4_CLK				112
+#define GCC_QUPV3_WRAP0_S4_CLK_SRC			113
+#define GCC_QUPV3_WRAP0_S5_CLK				114
+#define GCC_QUPV3_WRAP0_S5_CLK_SRC			115
+#define GCC_QUPV3_WRAP_0_M_AHB_CLK			116
+#define GCC_QUPV3_WRAP_0_S_AHB_CLK			117
+#define GCC_SDCC1_AHB_CLK				118
+#define GCC_SDCC1_APPS_CLK				119
+#define GCC_SDCC1_APPS_CLK_SRC				120
+#define GCC_SDCC1_ICE_CORE_CLK				121
+#define GCC_SDCC1_ICE_CORE_CLK_SRC			122
+#define GCC_SDCC2_AHB_CLK				123
+#define GCC_SDCC2_APPS_CLK				124
+#define GCC_SDCC2_APPS_CLK_SRC				125
+#define GCC_SYS_NOC_CPUSS_AHB_CLK			126
+#define GCC_SYS_NOC_USB3_PRIM_AXI_CLK			127
+#define GCC_USB30_PRIM_MASTER_CLK			128
+#define GCC_USB30_PRIM_MASTER_CLK_SRC			129
+#define GCC_USB30_PRIM_MOCK_UTMI_CLK			130
+#define GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC		131
+#define GCC_USB30_PRIM_MOCK_UTMI_POSTDIV		132
+#define GCC_USB30_PRIM_SLEEP_CLK			133
+#define GCC_USB3_PRIM_CLKREF_CLK			134
+#define GCC_USB3_PRIM_PHY_AUX_CLK_SRC			135
+#define GCC_USB3_PRIM_PHY_COM_AUX_CLK			136
+#define GCC_USB3_PRIM_PHY_PIPE_CLK			137
+#define GCC_VCODEC0_AXI_CLK				138
+#define GCC_VENUS_AHB_CLK				139
+#define GCC_VENUS_CTL_AXI_CLK				140
+#define GCC_VIDEO_AHB_CLK				141
+#define GCC_VIDEO_AXI0_CLK				142
+#define GCC_VIDEO_THROTTLE_CORE_CLK			143
+#define GCC_VIDEO_VCODEC0_SYS_CLK			144
+#define GCC_VIDEO_VENUS_CLK_SRC				145
+#define GCC_VIDEO_VENUS_CTL_CLK				146
+#define GCC_VIDEO_XO_CLK				147
 
 /* GCC resets */
 #define GCC_CAMSS_OPE_BCR				0
@@ -173,16 +164,15 @@
 #define GCC_MMSS_BCR					4
 #define GCC_PDM_BCR					5
 #define GCC_QUPV3_WRAPPER_0_BCR				6
-#define GCC_QUPV3_WRAPPER_1_BCR				7
-#define GCC_QUSB2PHY_PRIM_BCR				8
-#define GCC_QUSB2PHY_SEC_BCR				9
-#define GCC_SDCC1_BCR					10
-#define GCC_SDCC2_BCR					11
-#define GCC_USB30_PRIM_BCR				12
-#define GCC_USB_PHY_CFG_AHB2PHY_BCR			13
-#define GCC_VCODEC0_BCR					14
-#define GCC_VENUS_BCR					15
-#define GCC_VIDEO_INTERFACE_BCR				16
-#define GCC_VS_BCR					17
+#define GCC_SDCC1_BCR					7
+#define GCC_SDCC2_BCR					8
+#define GCC_USB30_PRIM_BCR				9
+#define GCC_USB_PHY_CFG_AHB2PHY_BCR			10
+#define GCC_VCODEC0_BCR					11
+#define GCC_VENUS_BCR					12
+#define GCC_VIDEO_INTERFACE_BCR				13
+#define GCC_QUSB2PHY_PRIM_BCR				14
+#define GCC_USB3_PHY_PRIM_SP0_BCR			15
+#define GCC_USB3PHY_PHY_PRIM_SP0_BCR			16
 
 #endif
diff --git a/include/dt-bindings/clock/qcom,gpucc-scuba.h b/include/dt-bindings/clock/qcom,gpucc-scuba.h
index cb5211c..6fe6d95 100644
--- a/include/dt-bindings/clock/qcom,gpucc-scuba.h
+++ b/include/dt-bindings/clock/qcom,gpucc-scuba.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
 /*
- * Copyright (c) 2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2019-2020, The Linux Foundation. All rights reserved.
  */
 
 #ifndef _DT_BINDINGS_CLK_QCOM_GPU_CC_SCUBA_H
@@ -10,16 +10,16 @@
 #define GPU_CC_PLL0				0
 #define GPU_CC_AHB_CLK				1
 #define GPU_CC_CRC_AHB_CLK			2
-#define GPU_CC_CX_APB_CLK			3
-#define GPU_CC_CX_GFX3D_CLK			4
-#define GPU_CC_CX_GFX3D_SLV_CLK			5
-#define GPU_CC_CX_GMU_CLK			6
-#define GPU_CC_CX_SNOC_DVM_CLK			7
-#define GPU_CC_CXO_AON_CLK			8
-#define GPU_CC_CXO_CLK				9
-#define GPU_CC_GMU_CLK_SRC			10
-#define GPU_CC_GX_CXO_CLK			11
-#define GPU_CC_GX_GFX3D_CLK			12
-#define GPU_CC_SLEEP_CLK			13
+#define GPU_CC_CX_GFX3D_CLK			3
+#define GPU_CC_CX_GMU_CLK			4
+#define GPU_CC_CX_SNOC_DVM_CLK			5
+#define GPU_CC_CXO_AON_CLK			6
+#define GPU_CC_CXO_CLK				7
+#define GPU_CC_GMU_CLK_SRC			8
+#define GPU_CC_GX_CXO_CLK			9
+#define GPU_CC_GX_GFX3D_CLK			10
+#define GPU_CC_GX_GFX3D_CLK_SRC			11
+#define GPU_CC_SLEEP_CLK			12
+#define GPU_CC_HLOS1_VOTE_GPU_SMMU_CLK		13
 
 #endif
diff --git a/include/dt-bindings/clock/qcom,rpmcc.h b/include/dt-bindings/clock/qcom,rpmcc.h
index bdef14d..f0e0a66 100644
--- a/include/dt-bindings/clock/qcom,rpmcc.h
+++ b/include/dt-bindings/clock/qcom,rpmcc.h
@@ -127,88 +127,92 @@
 #define RPM_SMD_QPIC_A_CLK			75
 #define RPM_SMD_CE1_CLK				76
 #define RPM_SMD_CE1_A_CLK			77
-#define RPM_SMD_BIMC_GPU_CLK			78
-#define RPM_SMD_BIMC_GPU_A_CLK			79
-#define RPM_SMD_LN_BB_CLK			80
-#define RPM_SMD_LN_BB_CLK_A			81
-#define RPM_SMD_LN_BB_CLK_PIN			82
-#define RPM_SMD_LN_BB_CLK_A_PIN			83
-#define RPM_SMD_RF_CLK3				84
-#define RPM_SMD_RF_CLK3_A			85
-#define RPM_SMD_RF_CLK3_PIN			86
-#define RPM_SMD_RF_CLK3_A_PIN			87
-#define RPM_SMD_LN_BB_CLK1			88
-#define RPM_SMD_LN_BB_CLK1_A			89
-#define RPM_SMD_LN_BB_CLK2			90
-#define RPM_SMD_LN_BB_CLK2_A			91
-#define RPM_SMD_LN_BB_CLK3			92
-#define RPM_SMD_LN_BB_CLK3_A			93
-#define RPM_SMD_MMAXI_CLK			94
-#define RPM_SMD_MMAXI_A_CLK			95
-#define RPM_SMD_AGGR1_NOC_CLK			96
-#define RPM_SMD_AGGR1_NOC_A_CLK			97
-#define RPM_SMD_AGGR2_NOC_CLK			98
-#define RPM_SMD_AGGR2_NOC_A_CLK			99
-#define PNOC_MSMBUS_CLK				100
-#define PNOC_MSMBUS_A_CLK			101
-#define PNOC_KEEPALIVE_A_CLK			102
-#define SNOC_MSMBUS_CLK				103
-#define SNOC_MSMBUS_A_CLK			104
-#define BIMC_MSMBUS_CLK				105
-#define BIMC_MSMBUS_A_CLK			106
-#define PNOC_USB_CLK				107
-#define PNOC_USB_A_CLK				108
-#define SNOC_USB_CLK				109
-#define SNOC_USB_A_CLK				110
-#define BIMC_USB_CLK				111
-#define BIMC_USB_A_CLK				112
-#define SNOC_WCNSS_A_CLK			113
-#define BIMC_WCNSS_A_CLK			114
-#define MCD_CE1_CLK				115
-#define QCEDEV_CE1_CLK				116
-#define QCRYPTO_CE1_CLK				117
-#define QSEECOM_CE1_CLK				118
-#define SCM_CE1_CLK				119
-#define CXO_SMD_OTG_CLK				120
-#define CXO_SMD_LPM_CLK				121
-#define CXO_SMD_PIL_PRONTO_CLK			122
-#define CXO_SMD_PIL_MSS_CLK			123
-#define CXO_SMD_WLAN_CLK			124
-#define CXO_SMD_PIL_LPASS_CLK			125
-#define CXO_SMD_PIL_CDSP_CLK			126
-#define CNOC_MSMBUS_CLK				127
-#define CNOC_MSMBUS_A_CLK			128
-#define CNOC_KEEPALIVE_A_CLK			129
-#define SNOC_KEEPALIVE_A_CLK			130
-#define CPP_MMNRT_MSMBUS_CLK			131
-#define CPP_MMNRT_MSMBUS_A_CLK			132
-#define JPEG_MMNRT_MSMBUS_CLK			133
-#define JPEG_MMNRT_MSMBUS_A_CLK			134
-#define VENUS_MMNRT_MSMBUS_CLK			135
-#define VENUS_MMNRT_MSMBUS_A_CLK		136
-#define ARM9_MMNRT_MSMBUS_CLK			137
-#define ARM9_MMNRT_MSMBUS_A_CLK			138
-#define MDP_MMRT_MSMBUS_CLK			139
-#define MDP_MMRT_MSMBUS_A_CLK			140
-#define VFE_MMRT_MSMBUS_CLK			141
-#define VFE_MMRT_MSMBUS_A_CLK			142
-#define QUP0_MSMBUS_SNOC_PERIPH_CLK		143
-#define QUP0_MSMBUS_SNOC_PERIPH_A_CLK		144
-#define QUP1_MSMBUS_SNOC_PERIPH_CLK		145
-#define QUP1_MSMBUS_SNOC_PERIPH_A_CLK		146
-#define QUP2_MSMBUS_SNOC_PERIPH_CLK             147
-#define QUP2_MSMBUS_SNOC_PERIPH_A_CLK           148
-#define DAP_MSMBUS_SNOC_PERIPH_CLK		149
-#define DAP_MSMBUS_SNOC_PERIPH_A_CLK		150
-#define SDC1_MSMBUS_SNOC_PERIPH_CLK		151
-#define SDC1_MSMBUS_SNOC_PERIPH_A_CLK		152
-#define SDC2_MSMBUS_SNOC_PERIPH_CLK		153
-#define SDC2_MSMBUS_SNOC_PERIPH_A_CLK		154
-#define CRYPTO_MSMBUS_SNOC_PERIPH_CLK		155
-#define CRYPTO_MSMBUS_SNOC_PERIPH_A_CLK		156
-#define SDC1_SLV_MSMBUS_SNOC_PERIPH_CLK		157
-#define SDC1_SLV_MSMBUS_SNOC_PERIPH_A_CLK	158
-#define SDC2_SLV_MSMBUS_SNOC_PERIPH_CLK		159
-#define SDC2_SLV_MSMBUS_SNOC_PERIPH_A_CLK	160
+#define RPM_SMD_HWKM_CLK			78
+#define RPM_SMD_HWKM_A_CLK			79
+#define RPM_SMD_PKA_CLK				80
+#define RPM_SMD_PKA_A_CLK			81
+#define RPM_SMD_BIMC_GPU_CLK			82
+#define RPM_SMD_BIMC_GPU_A_CLK			83
+#define RPM_SMD_LN_BB_CLK			84
+#define RPM_SMD_LN_BB_CLK_A			85
+#define RPM_SMD_LN_BB_CLK_PIN			86
+#define RPM_SMD_LN_BB_CLK_A_PIN			87
+#define RPM_SMD_RF_CLK3				88
+#define RPM_SMD_RF_CLK3_A			89
+#define RPM_SMD_RF_CLK3_PIN			90
+#define RPM_SMD_RF_CLK3_A_PIN			91
+#define RPM_SMD_LN_BB_CLK1			92
+#define RPM_SMD_LN_BB_CLK1_A			93
+#define RPM_SMD_LN_BB_CLK2			94
+#define RPM_SMD_LN_BB_CLK2_A			95
+#define RPM_SMD_LN_BB_CLK3			96
+#define RPM_SMD_LN_BB_CLK3_A			97
+#define RPM_SMD_MMAXI_CLK			98
+#define RPM_SMD_MMAXI_A_CLK			99
+#define RPM_SMD_AGGR1_NOC_CLK			100
+#define RPM_SMD_AGGR1_NOC_A_CLK			101
+#define RPM_SMD_AGGR2_NOC_CLK			102
+#define RPM_SMD_AGGR2_NOC_A_CLK			103
+#define PNOC_MSMBUS_CLK				104
+#define PNOC_MSMBUS_A_CLK			105
+#define PNOC_KEEPALIVE_A_CLK			106
+#define SNOC_MSMBUS_CLK				107
+#define SNOC_MSMBUS_A_CLK			108
+#define BIMC_MSMBUS_CLK				109
+#define BIMC_MSMBUS_A_CLK			110
+#define PNOC_USB_CLK				111
+#define PNOC_USB_A_CLK				112
+#define SNOC_USB_CLK				113
+#define SNOC_USB_A_CLK				114
+#define BIMC_USB_CLK				115
+#define BIMC_USB_A_CLK				116
+#define SNOC_WCNSS_A_CLK			117
+#define BIMC_WCNSS_A_CLK			118
+#define MCD_CE1_CLK				119
+#define QCEDEV_CE1_CLK				120
+#define QCRYPTO_CE1_CLK				121
+#define QSEECOM_CE1_CLK				122
+#define SCM_CE1_CLK				123
+#define CXO_SMD_OTG_CLK				124
+#define CXO_SMD_LPM_CLK				125
+#define CXO_SMD_PIL_PRONTO_CLK			126
+#define CXO_SMD_PIL_MSS_CLK			127
+#define CXO_SMD_WLAN_CLK			128
+#define CXO_SMD_PIL_LPASS_CLK			129
+#define CXO_SMD_PIL_CDSP_CLK			130
+#define CNOC_MSMBUS_CLK				131
+#define CNOC_MSMBUS_A_CLK			132
+#define CNOC_KEEPALIVE_A_CLK			133
+#define SNOC_KEEPALIVE_A_CLK			134
+#define CPP_MMNRT_MSMBUS_CLK			135
+#define CPP_MMNRT_MSMBUS_A_CLK			136
+#define JPEG_MMNRT_MSMBUS_CLK			137
+#define JPEG_MMNRT_MSMBUS_A_CLK			138
+#define VENUS_MMNRT_MSMBUS_CLK			139
+#define VENUS_MMNRT_MSMBUS_A_CLK		140
+#define ARM9_MMNRT_MSMBUS_CLK			141
+#define ARM9_MMNRT_MSMBUS_A_CLK			142
+#define MDP_MMRT_MSMBUS_CLK			143
+#define MDP_MMRT_MSMBUS_A_CLK			144
+#define VFE_MMRT_MSMBUS_CLK			145
+#define VFE_MMRT_MSMBUS_A_CLK			146
+#define QUP0_MSMBUS_SNOC_PERIPH_CLK		147
+#define QUP0_MSMBUS_SNOC_PERIPH_A_CLK		148
+#define QUP1_MSMBUS_SNOC_PERIPH_CLK		149
+#define QUP1_MSMBUS_SNOC_PERIPH_A_CLK		150
+#define QUP2_MSMBUS_SNOC_PERIPH_CLK             151
+#define QUP2_MSMBUS_SNOC_PERIPH_A_CLK           152
+#define DAP_MSMBUS_SNOC_PERIPH_CLK		153
+#define DAP_MSMBUS_SNOC_PERIPH_A_CLK		154
+#define SDC1_MSMBUS_SNOC_PERIPH_CLK		155
+#define SDC1_MSMBUS_SNOC_PERIPH_A_CLK		156
+#define SDC2_MSMBUS_SNOC_PERIPH_CLK		157
+#define SDC2_MSMBUS_SNOC_PERIPH_A_CLK		158
+#define CRYPTO_MSMBUS_SNOC_PERIPH_CLK		159
+#define CRYPTO_MSMBUS_SNOC_PERIPH_A_CLK		160
+#define SDC1_SLV_MSMBUS_SNOC_PERIPH_CLK		161
+#define SDC1_SLV_MSMBUS_SNOC_PERIPH_A_CLK	162
+#define SDC2_SLV_MSMBUS_SNOC_PERIPH_CLK		163
+#define SDC2_SLV_MSMBUS_SNOC_PERIPH_A_CLK	164
 
 #endif
diff --git a/include/dt-bindings/clock/qcom,rpmh.h b/include/dt-bindings/clock/qcom,rpmh.h
index d6c1dff..31e63a7 100644
--- a/include/dt-bindings/clock/qcom,rpmh.h
+++ b/include/dt-bindings/clock/qcom,rpmh.h
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: GPL-2.0 */
-/* Copyright (c) 2018-2019, The Linux Foundation. All rights reserved. */
+/* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved. */
 
 #ifndef _DT_BINDINGS_CLK_MSM_RPMH_H
 #define _DT_BINDINGS_CLK_MSM_RPMH_H
@@ -25,5 +25,7 @@
 #define RPMH_RF_CLKD4_A				17
 #define RPMH_RF_CLK4				18
 #define RPMH_RF_CLK4_A				19
+#define RPMH_QLINK_CLK				20
+#define RPMH_QLINK_CLK_A			21
 
 #endif
diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h
index 6f878a1..f2040ae 100644
--- a/include/linux/blk_types.h
+++ b/include/linux/blk_types.h
@@ -229,14 +229,15 @@
 #define BIO_BOUNCED	3	/* bio is a bounce bio */
 #define BIO_USER_MAPPED 4	/* contains user pages */
 #define BIO_NULL_MAPPED 5	/* contains invalid user pages */
-#define BIO_QUIET	6	/* Make BIO Quiet */
-#define BIO_CHAIN	7	/* chained bio, ->bi_remaining in effect */
-#define BIO_REFFED	8	/* bio has elevated ->bi_cnt */
-#define BIO_THROTTLED	9	/* This bio has already been subjected to
+#define BIO_WORKINGSET	6	/* contains userspace workingset pages */
+#define BIO_QUIET	7	/* Make BIO Quiet */
+#define BIO_CHAIN	8	/* chained bio, ->bi_remaining in effect */
+#define BIO_REFFED	9	/* bio has elevated ->bi_cnt */
+#define BIO_THROTTLED	10	/* This bio has already been subjected to
 				 * throttling rules. Don't do it again. */
-#define BIO_TRACE_COMPLETION 10	/* bio_endio() should trace the final completion
+#define BIO_TRACE_COMPLETION 11	/* bio_endio() should trace the final completion
 				 * of this bio. */
-#define BIO_QUEUE_ENTERED 11	/* can use blk_queue_enter_live() */
+#define BIO_QUEUE_ENTERED 12	/* can use blk_queue_enter_live() */
 
 /* See BVEC_POOL_OFFSET below before adding new flags */
 
diff --git a/include/linux/bluetooth-power.h b/include/linux/bluetooth-power.h
index c80a3e9..8bcba91 100644
--- a/include/linux/bluetooth-power.h
+++ b/include/linux/bluetooth-power.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
 /*
- * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2020, The Linux Foundation. All rights reserved.
  */
 
 #ifndef __LINUX_BLUETOOTH_POWER_H
@@ -50,6 +50,10 @@
 struct bluetooth_power_platform_data {
 	/* Bluetooth reset gpio */
 	int bt_gpio_sys_rst;
+	/* Bluetooth sw_ctrl gpio */
+	int bt_gpio_sw_ctrl;
+	/* Bluetooth debug gpio */
+	int bt_gpio_debug;
 	struct device *slim_dev;
 	/* VDDIO voltage regulator */
 	struct bt_power_vreg_data *bt_vdd_io;
@@ -86,7 +90,13 @@
 int bt_register_slimdev(struct device *dev);
 int get_chipset_version(void);
 
-#define BT_CMD_SLIM_TEST		0xbfac
-#define BT_CMD_PWR_CTRL			0xbfad
-#define BT_CMD_CHIPSET_VERS		0xbfae
+#define BT_CMD_SLIM_TEST            0xbfac
+#define BT_CMD_PWR_CTRL             0xbfad
+#define BT_CMD_CHIPSET_VERS         0xbfae
+#define BT_CMD_GETVAL_RESET_GPIO    0xbfaf
+#define BT_CMD_GETVAL_SW_CTRL_GPIO  0xbfb0
+#define BT_CMD_GETVAL_VDD_AON_LDO   0xbfb1
+#define BT_CMD_GETVAL_VDD_DIG_LDO   0xbfb2
+#define BT_CMD_GETVAL_VDD_RFA1_LDO  0xbfb3
+#define BT_CMD_GETVAL_VDD_RFA2_LDO  0xbfb4
 #endif /* __LINUX_BLUETOOTH_POWER_H */
diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h
index 7fd81b7..42f0b78 100644
--- a/include/linux/cgroup.h
+++ b/include/linux/cgroup.h
@@ -62,6 +62,7 @@
 	struct list_head		*mg_tasks_head;
 	struct list_head		*dying_tasks_head;
 
+	struct list_head		*cur_tasks_head;
 	struct css_set			*cur_cset;
 	struct css_set			*cur_dcset;
 	struct task_struct		*cur_task;
diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h
index 8c4182a..7fd4a16 100644
--- a/include/linux/clk-provider.h
+++ b/include/linux/clk-provider.h
@@ -41,12 +41,13 @@
 #define CLK_OPS_PARENT_ENABLE	BIT(12)
 /* duty cycle call may be forwarded to the parent clock */
 #define CLK_DUTY_CYCLE_PARENT	BIT(13)
-#define CLK_ENABLE_HAND_OFF	BIT(14) /* enable clock when registered. */
+#define CLK_DONT_HOLD_STATE	BIT(14) /* Don't hold state */
+#define CLK_ENABLE_HAND_OFF	BIT(15) /* enable clock when registered. */
 					/*
 					 * hand-off enable_count & prepare_count
 					 * to first consumer that enables clk
 					 */
-#define CLK_IS_MEASURE          BIT(15) /* measure clock */
+#define CLK_IS_MEASURE          BIT(16) /* measure clock */
 
 struct clk;
 struct clk_hw;
@@ -862,6 +863,7 @@
 
 void clk_hw_unregister(struct clk_hw *hw);
 void devm_clk_hw_unregister(struct device *dev, struct clk_hw *hw);
+void clk_sync_state(struct device *dev);
 
 /* helper functions */
 const char *__clk_get_name(const struct clk *clk);
diff --git a/include/linux/compiler-clang.h b/include/linux/compiler-clang.h
index 1d063d9..6f80c8d 100644
--- a/include/linux/compiler-clang.h
+++ b/include/linux/compiler-clang.h
@@ -15,12 +15,17 @@
 /* all clang versions usable with the kernel support KASAN ABI version 5 */
 #define KASAN_ABI_VERSION 5
 
-/* emulate gcc's __SANITIZE_ADDRESS__ flag */
-#if __has_feature(address_sanitizer)
-#define __SANITIZE_ADDRESS__
-#endif
+/* __no_sanitize_address has been already defined compiler-gcc.h */
+#undef __no_sanitize_address
 
-#define __no_sanitize_address __attribute__((no_sanitize("address")))
+#if __has_feature(address_sanitizer) || __has_feature(hwaddress_sanitizer)
+/* emulate gcc's __SANITIZE_ADDRESS__ flag */
+#define __SANITIZE_ADDRESS__
+#define __no_sanitize_address \
+		__attribute__((no_sanitize("address", "hwaddress")))
+#else
+#define __no_sanitize_address
+#endif
 
 /*
  * Not all versions of clang implement the the type-generic versions
@@ -54,3 +59,9 @@
 	__attribute__((__section__(".text..ftrace")))
 #endif
 #endif
+
+#if __has_feature(shadow_call_stack)
+# define __noscs	__attribute__((__no_sanitize__("shadow-call-stack")))
+#else
+# define __noscs
+#endif
diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h
index 3ebee1c..ca37bdd0 100644
--- a/include/linux/compiler-gcc.h
+++ b/include/linux/compiler-gcc.h
@@ -183,13 +183,19 @@
 #define KASAN_ABI_VERSION 3
 #endif
 
-#if GCC_VERSION >= 40902
 /*
- * Tell the compiler that address safety instrumentation (KASAN)
- * should not be applied to that function.
- * Conflicts with inlining: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67368
+ * Older GCCs (< 5) don't support __has_attribute, so instead of checking
+ * __has_attribute(__no_sanitize_address__) do a GCC version check.
  */
+#ifndef __has_attribute
+# define __has_attribute(x) __GCC4_has_attribute_##x
+# define __GCC4_has_attribute___no_sanitize_address__ (__GNUC_MINOR__ >= 8)
+#endif
+
+#if __has_attribute(__no_sanitize_address__)
 #define __no_sanitize_address __attribute__((no_sanitize_address))
+#else
+#define __no_sanitize_address
 #endif
 
 #if GCC_VERSION >= 50100
diff --git a/include/linux/compiler.h b/include/linux/compiler.h
index b83456d..f8279ab 100644
--- a/include/linux/compiler.h
+++ b/include/linux/compiler.h
@@ -200,7 +200,7 @@
  * 	https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67368
  * '__maybe_unused' allows us to avoid defined-but-not-used warnings.
  */
-# define __no_kasan_or_inline __no_sanitize_address __maybe_unused
+# define __no_kasan_or_inline __no_sanitize_address notrace __maybe_unused
 #else
 # define __no_kasan_or_inline __always_inline
 #endif
diff --git a/include/linux/compiler_types.h b/include/linux/compiler_types.h
index 85e37a4..9e34eed 100644
--- a/include/linux/compiler_types.h
+++ b/include/linux/compiler_types.h
@@ -148,6 +148,10 @@
 #define __nocfi
 #endif
 
+#ifndef __noscs
+# define __noscs
+#endif
+
 /*
  * Assume alignment of return value.
  */
diff --git a/include/linux/coresight-pmu.h b/include/linux/coresight-pmu.h
index 756985f..65c51ed 100644
--- a/include/linux/coresight-pmu.h
+++ b/include/linux/coresight-pmu.h
@@ -12,11 +12,13 @@
 
 /* ETMv3.5/PTM's ETMCR config bit */
 #define ETM_OPT_CYCACC  12
+#define ETM_OPT_CTXTID	14
 #define ETM_OPT_TS      28
 #define ETM_OPT_RETSTK	29
 
 /* ETMv4 CONFIGR programming bits for the ETM OPTs */
 #define ETM4_CFG_BIT_CYCACC	4
+#define ETM4_CFG_BIT_CTXTID	6
 #define ETM4_CFG_BIT_TS		11
 #define ETM4_CFG_BIT_RETSTK	12
 
diff --git a/include/linux/coresight-stm.h b/include/linux/coresight-stm.h
index 8221606..a1ddd67 100644
--- a/include/linux/coresight-stm.h
+++ b/include/linux/coresight-stm.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0 */
 /*
- * Copyright (c) 2011-2012, 2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2012, 2017, 2020 The Linux Foundation. All rights reserved.
  */
 #ifndef __LINUX_CORESIGHT_STM_H_
 #define __LINUX_CORESIGHT_STM_H_
@@ -84,8 +84,6 @@
 	spinlock_t		spinlock;
 	struct channel_space	chs;
 	bool			enable;
-	struct channel_space	debug_status_chs;
-	bool			master_enable;
 	DECLARE_BITMAP(entities, OST_ENTITY_MAX);
 	struct stm_data		stm;
 	local_t			mode;
diff --git a/include/linux/coresight.h b/include/linux/coresight.h
index 39fad31..05f8350 100644
--- a/include/linux/coresight.h
+++ b/include/linux/coresight.h
@@ -185,6 +185,7 @@
 		happens when a source has been selected for that it.
  * @abort:     captures sink trace on abort.
  * @reg_clk:	as defined by @coresight_reg_clk.
+ * @ea:		Device attribute for sink representation under PMU directory.
  */
 struct coresight_device {
 	struct coresight_connection *conns;
@@ -198,7 +199,9 @@
 	struct coresight_path *node;
 	bool orphan;
 	bool enable;	/* true only if configured as part of a path */
+	/* sink specific fields */
 	bool activated;	/* true only if a sink is part of a path */
+	struct dev_ext_attribute *ea;
 	struct coresight_reg_clk *reg_clk;
 };
 
@@ -216,23 +219,16 @@
  * @disable:		disables the sink.
  * @alloc_buffer:	initialises perf's ring buffer for trace collection.
  * @free_buffer:	release memory allocated in @get_config.
- * @set_buffer:		initialises buffer mechanic before a trace session.
- * @reset_buffer:	finalises buffer mechanic after a trace session.
  * @update_buffer:	update buffer pointers after a trace session.
  */
 struct coresight_ops_sink {
-	int (*enable)(struct coresight_device *csdev, u32 mode);
-	void (*disable)(struct coresight_device *csdev);
-	void *(*alloc_buffer)(struct coresight_device *csdev, int cpu,
-			      void **pages, int nr_pages, bool overwrite);
+	int (*enable)(struct coresight_device *csdev, u32 mode, void *data);
+	int (*disable)(struct coresight_device *csdev);
+	void *(*alloc_buffer)(struct coresight_device *csdev,
+			      struct perf_event *event, void **pages,
+			      int nr_pages, bool overwrite);
 	void (*free_buffer)(void *config);
-	int (*set_buffer)(struct coresight_device *csdev,
-			  struct perf_output_handle *handle,
-			  void *sink_config);
-	unsigned long (*reset_buffer)(struct coresight_device *csdev,
-				      struct perf_output_handle *handle,
-				      void *sink_config);
-	void (*update_buffer)(struct coresight_device *csdev,
+	unsigned long (*update_buffer)(struct coresight_device *csdev,
 			      struct perf_output_handle *handle,
 			      void *sink_config);
 };
@@ -308,6 +304,14 @@
 }
 extern void coresight_disable_all_source_link(void);
 extern void coresight_enable_all_source_link(void);
+
+extern int coresight_claim_device(void __iomem *base);
+extern int coresight_claim_device_unlocked(void __iomem *base);
+
+extern void coresight_disclaim_device(void __iomem *base);
+extern void coresight_disclaim_device_unlocked(void __iomem *base);
+
+extern bool coresight_loses_context_with_cpu(struct device *dev);
 #else
 static inline struct coresight_device *
 coresight_register(struct coresight_desc *desc) { return NULL; }
@@ -323,6 +327,23 @@
 { return -EINVAL; }
 static void coresight_disable_all_source_link(void) {};
 static void coresight_enable_all_source_link(void) {};
+static inline int coresight_claim_device_unlocked(void __iomem *base)
+{
+	return -EINVAL;
+}
+
+static inline int coresight_claim_device(void __iomem *base)
+{
+	return -EINVAL;
+}
+
+static inline void coresight_disclaim_device(void __iomem *base) {}
+static inline void coresight_disclaim_device_unlocked(void __iomem *base) {}
+
+static inline bool coresight_loses_context_with_cpu(struct device *dev)
+{
+	return false;
+}
 #endif
 
 #if defined(CONFIG_OF) && defined(CONFIG_CORESIGHT)
diff --git a/include/linux/dcache.h b/include/linux/dcache.h
index bd19969..486fc3c 100644
--- a/include/linux/dcache.h
+++ b/include/linux/dcache.h
@@ -211,7 +211,7 @@
 
 #define DCACHE_MAY_FREE			0x00800000
 #define DCACHE_FALLTHRU			0x01000000 /* Fall through to lower layer */
-#define DCACHE_ENCRYPTED_WITH_KEY	0x02000000 /* dir is encrypted with a valid key */
+#define DCACHE_ENCRYPTED_NAME		0x02000000 /* Encrypted name (dir key was unavailable) */
 #define DCACHE_OP_REAL			0x04000000
 
 #define DCACHE_PAR_LOOKUP		0x10000000 /* being looked up (with parent locked shared) */
diff --git a/include/linux/debugfs.h b/include/linux/debugfs.h
index 3b0ba54..3bc1034 100644
--- a/include/linux/debugfs.h
+++ b/include/linux/debugfs.h
@@ -54,6 +54,8 @@
 	.llseek  = no_llseek,						\
 }
 
+typedef struct vfsmount *(*debugfs_automount_t)(struct dentry *, void *);
+
 #if defined(CONFIG_DEBUG_FS)
 
 struct dentry *debugfs_lookup(const char *name, struct dentry *parent);
@@ -75,7 +77,6 @@
 struct dentry *debugfs_create_symlink(const char *name, struct dentry *parent,
 				      const char *dest);
 
-typedef struct vfsmount *(*debugfs_automount_t)(struct dentry *, void *);
 struct dentry *debugfs_create_automount(const char *name,
 					struct dentry *parent,
 					debugfs_automount_t f,
@@ -204,7 +205,7 @@
 
 static inline struct dentry *debugfs_create_automount(const char *name,
 					struct dentry *parent,
-					struct vfsmount *(*f)(void *),
+					debugfs_automount_t f,
 					void *data)
 {
 	return ERR_PTR(-ENODEV);
diff --git a/include/linux/device.h b/include/linux/device.h
index 7e5c1e5..2c64731 100644
--- a/include/linux/device.h
+++ b/include/linux/device.h
@@ -81,6 +81,13 @@
  *		that generate uevents to add the environment variables.
  * @probe:	Called when a new device or driver add to this bus, and callback
  *		the specific driver's probe to initial the matched device.
+ * @sync_state:	Called to sync device state to software state after all the
+ *		state tracking consumers linked to this device (present at
+ *		the time of late_initcall) have successfully bound to a
+ *		driver. If the device has no consumers, this function will
+ *		be called at late_initcall_sync level. If the device has
+ *		consumers that are never bound to a driver, this function
+ *		will never get called until they do.
  * @remove:	Called when a device removed from this bus.
  * @shutdown:	Called at shut-down time to quiesce the device.
  *
@@ -124,6 +131,7 @@
 	int (*match)(struct device *dev, struct device_driver *drv);
 	int (*uevent)(struct device *dev, struct kobj_uevent_env *env);
 	int (*probe)(struct device *dev);
+	void (*sync_state)(struct device *dev);
 	int (*remove)(struct device *dev);
 	void (*shutdown)(struct device *dev);
 
@@ -253,6 +261,13 @@
  * @probe:	Called to query the existence of a specific device,
  *		whether this driver can work with it, and bind the driver
  *		to a specific device.
+ * @sync_state:	Called to sync device state to software state after all the
+ *		state tracking consumers linked to this device (present at
+ *		the time of late_initcall) have successfully bound to a
+ *		driver. If the device has no consumers, this function will
+ *		be called at late_initcall_sync level. If the device has
+ *		consumers that are never bound to a driver, this function
+ *		will never get called until they do.
  * @remove:	Called when the device is removed from the system to
  *		unbind a device from this driver.
  * @shutdown:	Called at shut-down time to quiesce the device.
@@ -290,6 +305,7 @@
 	const struct acpi_device_id	*acpi_match_table;
 
 	int (*probe) (struct device *dev);
+	void (*sync_state)(struct device *dev);
 	int (*remove) (struct device *dev);
 	void (*shutdown) (struct device *dev);
 	int (*suspend) (struct device *dev, pm_message_t state);
@@ -825,12 +841,14 @@
  * PM_RUNTIME: If set, the runtime PM framework will use this link.
  * RPM_ACTIVE: Run pm_runtime_get_sync() on the supplier during link creation.
  * AUTOREMOVE_SUPPLIER: Remove the link automatically on supplier driver unbind.
+ * SYNC_STATE_ONLY: Link only affects sync_state() behavior.
  */
 #define DL_FLAG_STATELESS		BIT(0)
 #define DL_FLAG_AUTOREMOVE_CONSUMER	BIT(1)
 #define DL_FLAG_PM_RUNTIME		BIT(2)
 #define DL_FLAG_RPM_ACTIVE		BIT(3)
 #define DL_FLAG_AUTOREMOVE_SUPPLIER	BIT(4)
+#define DL_FLAG_SYNC_STATE_ONLY		BIT(7)
 
 /**
  * struct device_link - Device link representation.
@@ -876,11 +894,18 @@
  * struct dev_links_info - Device data related to device links.
  * @suppliers: List of links to supplier devices.
  * @consumers: List of links to consumer devices.
+ * @needs_suppliers: Hook to global list of devices waiting for suppliers.
+ * @defer_sync: Hook to global list of devices that have deferred sync_state.
+ * @need_for_probe: If needs_suppliers is on a list, this indicates if the
+ *		    suppliers are needed for probe or not.
  * @status: Driver status information.
  */
 struct dev_links_info {
 	struct list_head suppliers;
 	struct list_head consumers;
+	struct list_head needs_suppliers;
+	struct list_head defer_sync;
+	bool need_for_probe;
 	enum dl_dev_state status;
 };
 
@@ -953,6 +978,9 @@
  * @offline:	Set after successful invocation of bus type's .offline().
  * @of_node_reused: Set if the device-tree node is shared with an ancestor
  *              device.
+ * @state_synced: The hardware state of this device has been synced to match
+ *		  the software state of this device by calling the driver/bus
+ *		  sync_state() callback.
  *
  * At the lowest level, every device in a Linux system is represented by an
  * instance of struct device. The device structure contains the information
@@ -1043,6 +1071,7 @@
 	bool			offline_disabled:1;
 	bool			offline:1;
 	bool			of_node_reused:1;
+	bool			state_synced:1;
 };
 
 static inline struct device *kobj_to_dev(struct kobject *kobj)
@@ -1147,6 +1176,16 @@
 	return !!dev->power.async_suspend;
 }
 
+static inline bool device_pm_not_required(struct device *dev)
+{
+	return dev->power.no_pm;
+}
+
+static inline void device_set_pm_not_required(struct device *dev)
+{
+	dev->power.no_pm = true;
+}
+
 static inline void dev_pm_syscore_device(struct device *dev, bool val)
 {
 #ifdef CONFIG_PM_SLEEP
@@ -1196,6 +1235,17 @@
 	return dev->of_node;
 }
 
+static inline bool dev_has_sync_state(struct device *dev)
+{
+	if (!dev)
+		return false;
+	if (dev->driver && dev->driver->sync_state)
+		return true;
+	if (dev->bus && dev->bus->sync_state)
+		return true;
+	return false;
+}
+
 void driver_init(void);
 
 /*
@@ -1359,6 +1409,8 @@
 				    struct device *supplier, u32 flags);
 void device_link_del(struct device_link *link);
 void device_link_remove(void *consumer, struct device *supplier);
+void device_links_supplier_sync_state_pause(void);
+void device_links_supplier_sync_state_resume(void);
 
 #ifndef dev_fmt
 #define dev_fmt(fmt) fmt
diff --git a/include/linux/diagchar.h b/include/linux/diagchar.h
index 29829974..fb222f2 100644
--- a/include/linux/diagchar.h
+++ b/include/linux/diagchar.h
@@ -142,7 +142,7 @@
  * a new RANGE of SSIDs to the msg_mask_tbl.
  */
 #define MSG_MASK_TBL_CNT		26
-#define APPS_EVENT_LAST_ID		0xCB9
+#define APPS_EVENT_LAST_ID		0xCC1
 
 #define MSG_SSID_0			0
 #define MSG_SSID_0_LAST			132
@@ -919,7 +919,7 @@
 /* LOG CODES */
 static const uint32_t log_code_last_tbl[] = {
 	0x0,	/* EQUIP ID 0 */
-	0x1CCA,	/* EQUIP ID 1 */
+	0x1CD6,	/* EQUIP ID 1 */
 	0x0,	/* EQUIP ID 2 */
 	0x0,	/* EQUIP ID 3 */
 	0x4910,	/* EQUIP ID 4 */
diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
index bfc781f..f6e7438 100644
--- a/include/linux/dma-buf.h
+++ b/include/linux/dma-buf.h
@@ -389,12 +389,14 @@
  * @file: file pointer used for sharing buffers across, and for refcounting.
  * @attachments: list of dma_buf_attachment that denotes all devices attached.
  * @ops: dma_buf_ops associated with this buffer object.
- * @lock: used internally to serialize list manipulation, attach/detach and vmap/unmap
+ * @lock: used internally to serialize list manipulation, attach/detach and
+ *        vmap/unmap, and accesses to name
  * @vmapping_counter: used internally to refcnt the vmaps
  * @vmap_ptr: the current vmap ptr if vmapping_counter > 0
  * @exp_name: name of the exporter; useful for debugging.
- * @name: unique name for the buffer
+ * @buf_name: unique name for the buffer
  * @ktime: time (in jiffies) at which the buffer was born
+ * @name: userspace-provided name; useful for accounting and debugging.
  * @owner: pointer to exporter module; used for refcounting when exporter is a
  *         kernel module.
  * @list_node: node for dma_buf accounting and debugging.
@@ -422,8 +424,9 @@
 	unsigned vmapping_counter;
 	void *vmap_ptr;
 	const char *exp_name;
-	char *name;
+	char *buf_name;
 	ktime_t ktime;
+	const char *name;
 	struct module *owner;
 	struct list_head list_node;
 	void *priv;
diff --git a/include/linux/f2fs_fs.h b/include/linux/f2fs_fs.h
index 6555990..2847389 100644
--- a/include/linux/f2fs_fs.h
+++ b/include/linux/f2fs_fs.h
@@ -36,11 +36,17 @@
 
 #define F2FS_MAX_QUOTAS		3
 
+#define F2FS_ENC_UTF8_12_1	1
+#define F2FS_ENC_STRICT_MODE_FL	(1 << 0)
+#define f2fs_has_strict_mode(sbi) \
+	(sbi->s_encoding_flags & F2FS_ENC_STRICT_MODE_FL)
+
 #define F2FS_IO_SIZE(sbi)	(1 << F2FS_OPTION(sbi).write_io_size_bits) /* Blocks */
 #define F2FS_IO_SIZE_KB(sbi)	(1 << (F2FS_OPTION(sbi).write_io_size_bits + 2)) /* KB */
 #define F2FS_IO_SIZE_BYTES(sbi)	(1 << (F2FS_OPTION(sbi).write_io_size_bits + 12)) /* B */
 #define F2FS_IO_SIZE_BITS(sbi)	(F2FS_OPTION(sbi).write_io_size_bits) /* power of 2 */
 #define F2FS_IO_SIZE_MASK(sbi)	(F2FS_IO_SIZE(sbi) - 1)
+#define F2FS_IO_ALIGNED(sbi)	(F2FS_IO_SIZE(sbi) > 1)
 
 /* This flag is used by node and meta inodes, and by recovery */
 #define GFP_F2FS_ZERO		(GFP_NOFS | __GFP_ZERO)
@@ -109,7 +115,9 @@
 	struct f2fs_device devs[MAX_DEVICES];	/* device list */
 	__le32 qf_ino[F2FS_MAX_QUOTAS];	/* quota inode numbers */
 	__u8 hot_ext_count;		/* # of hot file extension */
-	__u8 reserved[310];		/* valid reserved region */
+	__le16  s_encoding;		/* Filename charset encoding */
+	__le16  s_encoding_flags;	/* Filename charset encoding flags */
+	__u8 reserved[306];		/* valid reserved region */
 	__le32 crc;			/* checksum of superblock */
 } __packed;
 
diff --git a/include/linux/fs.h b/include/linux/fs.h
index f083217..a33dc31 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -61,6 +61,8 @@
 struct iov_iter;
 struct fscrypt_info;
 struct fscrypt_operations;
+struct fsverity_info;
+struct fsverity_operations;
 
 extern void __init inode_init(void);
 extern void __init inode_init_early(void);
@@ -692,6 +694,10 @@
 	struct fscrypt_info	*i_crypt_info;
 #endif
 
+#ifdef CONFIG_FS_VERITY
+	struct fsverity_info	*i_verity_info;
+#endif
+
 	void			*i_private; /* fs or device private pointer */
 } __randomize_layout;
 
@@ -1391,6 +1397,9 @@
 #ifdef CONFIG_FS_ENCRYPTION
 	const struct fscrypt_operations	*s_cop;
 #endif
+#ifdef CONFIG_FS_VERITY
+	const struct fsverity_operations *s_vop;
+#endif
 	struct hlist_bl_head	s_roots;	/* alternate root dentries for NFS */
 	struct list_head	s_mounts;	/* list of mounts; _not_ for fs use */
 	struct block_device	*s_bdev;
@@ -1928,6 +1937,8 @@
 #define S_DAX		0	/* Make all the DAX code disappear */
 #endif
 #define S_ENCRYPTED	16384	/* Encrypted file (using fs/crypto/) */
+#define S_CASEFOLD	32768	/* Casefolded file */
+#define S_VERITY	65536	/* Verity file (using fs/verity/) */
 
 /*
  * Note that nosuid etc flags are inode-specific: setting some file-system
@@ -1968,6 +1979,8 @@
 #define IS_NOSEC(inode)		((inode)->i_flags & S_NOSEC)
 #define IS_DAX(inode)		((inode)->i_flags & S_DAX)
 #define IS_ENCRYPTED(inode)	((inode)->i_flags & S_ENCRYPTED)
+#define IS_CASEFOLDED(inode)	((inode)->i_flags & S_CASEFOLD)
+#define IS_VERITY(inode)	((inode)->i_flags & S_VERITY)
 
 #define IS_WHITEOUT(inode)	(S_ISCHR(inode->i_mode) && \
 				 (inode)->i_rdev == WHITEOUT_DEV)
@@ -3495,4 +3508,27 @@
 extern int vfs_fadvise(struct file *file, loff_t offset, loff_t len,
 		       int advice);
 
+int vfs_ioc_setflags_prepare(struct inode *inode, unsigned int oldflags,
+			     unsigned int flags);
+
+int vfs_ioc_fssetxattr_check(struct inode *inode, const struct fsxattr *old_fa,
+			     struct fsxattr *fa);
+
+static inline void simple_fill_fsxattr(struct fsxattr *fa, __u32 xflags)
+{
+	memset(fa, 0, sizeof(*fa));
+	fa->fsx_xflags = xflags;
+}
+
+/*
+ * Flush file data before changing attributes.  Caller must hold any locks
+ * required to prevent further writes to this file until we're done setting
+ * flags.
+ */
+static inline int inode_drain_writes(struct inode *inode)
+{
+	inode_dio_wait(inode);
+	return filemap_write_and_wait(inode->i_mapping);
+}
+
 #endif /* _LINUX_FS_H */
diff --git a/include/linux/fscrypt.h b/include/linux/fscrypt.h
index cf8838c..53193af 100644
--- a/include/linux/fscrypt.h
+++ b/include/linux/fscrypt.h
@@ -38,6 +38,7 @@
 	u32 hash;
 	u32 minor_hash;
 	struct fscrypt_str crypto_buf;
+	bool is_ciphertext_name;
 };
 
 #define FSTR_INIT(n, l)		{ .name = n, .len = l }
@@ -68,16 +69,13 @@
 	bool (*is_encrypted)(struct inode *inode);
 };
 
+/* Decryption work */
 struct fscrypt_ctx {
 	union {
 		struct {
-			struct page *bounce_page;	/* Ciphertext page */
-			struct page *control_page;	/* Original page  */
-		} w;
-		struct {
 			struct bio *bio;
 			struct work_struct work;
-		} r;
+		};
 		struct list_head free_list;	/* Free list */
 	};
 	u8 flags;				/* Flags */
@@ -85,7 +83,8 @@
 
 static inline bool fscrypt_has_encryption_key(const struct inode *inode)
 {
-	return (inode->i_crypt_info != NULL);
+	/* pairs with cmpxchg_release() in fscrypt_get_encryption_info() */
+	return READ_ONCE(inode->i_crypt_info) != NULL;
 }
 
 static inline bool fscrypt_dummy_context_enabled(struct inode *inode)
@@ -94,22 +93,49 @@
 		inode->i_sb->s_cop->dummy_context(inode);
 }
 
-/* crypto.c */
-extern void fscrypt_enqueue_decrypt_work(struct work_struct *);
-extern struct fscrypt_ctx *fscrypt_get_ctx(const struct inode *, gfp_t);
-extern void fscrypt_release_ctx(struct fscrypt_ctx *);
-extern struct page *fscrypt_encrypt_page(const struct inode *, struct page *,
-						unsigned int, unsigned int,
-						u64, gfp_t);
-extern int fscrypt_decrypt_page(const struct inode *, struct page *, unsigned int,
-				unsigned int, u64);
-
-static inline struct page *fscrypt_control_page(struct page *page)
+/*
+ * When d_splice_alias() moves a directory's encrypted alias to its decrypted
+ * alias as a result of the encryption key being added, DCACHE_ENCRYPTED_NAME
+ * must be cleared.  Note that we don't have to support arbitrary moves of this
+ * flag because fscrypt doesn't allow encrypted aliases to be the source or
+ * target of a rename().
+ */
+static inline void fscrypt_handle_d_move(struct dentry *dentry)
 {
-	return ((struct fscrypt_ctx *)page_private(page))->w.control_page;
+	dentry->d_flags &= ~DCACHE_ENCRYPTED_NAME;
 }
 
-extern void fscrypt_restore_control_page(struct page *);
+/* crypto.c */
+extern void fscrypt_enqueue_decrypt_work(struct work_struct *);
+extern struct fscrypt_ctx *fscrypt_get_ctx(gfp_t);
+extern void fscrypt_release_ctx(struct fscrypt_ctx *);
+
+extern struct page *fscrypt_encrypt_pagecache_blocks(struct page *page,
+						     unsigned int len,
+						     unsigned int offs,
+						     gfp_t gfp_flags);
+extern int fscrypt_encrypt_block_inplace(const struct inode *inode,
+					 struct page *page, unsigned int len,
+					 unsigned int offs, u64 lblk_num,
+					 gfp_t gfp_flags);
+
+extern int fscrypt_decrypt_pagecache_blocks(struct page *page, unsigned int len,
+					    unsigned int offs);
+extern int fscrypt_decrypt_block_inplace(const struct inode *inode,
+					 struct page *page, unsigned int len,
+					 unsigned int offs, u64 lblk_num);
+
+static inline bool fscrypt_is_bounce_page(struct page *page)
+{
+	return page->mapping == NULL;
+}
+
+static inline struct page *fscrypt_pagecache_page(struct page *bounce_page)
+{
+	return (struct page *)page_private(bounce_page);
+}
+
+extern void fscrypt_free_bounce_page(struct page *bounce_page);
 
 /* policy.c */
 extern int fscrypt_ioctl_set_policy(struct file *, const void __user *);
@@ -120,6 +146,7 @@
 /* keyinfo.c */
 extern int fscrypt_get_encryption_info(struct inode *);
 extern void fscrypt_put_encryption_info(struct inode *);
+extern void fscrypt_free_inode(struct inode *);
 
 /* fname.c */
 extern int fscrypt_setup_filename(struct inode *, const struct qstr *,
@@ -214,19 +241,20 @@
 extern void fscrypt_decrypt_bio(struct bio *);
 extern void fscrypt_enqueue_decrypt_bio(struct fscrypt_ctx *ctx,
 					struct bio *bio);
-extern void fscrypt_pullback_bio_page(struct page **, bool);
 extern int fscrypt_zeroout_range(const struct inode *, pgoff_t, sector_t,
 				 unsigned int);
 
 /* hooks.c */
 extern int fscrypt_file_open(struct inode *inode, struct file *filp);
-extern int __fscrypt_prepare_link(struct inode *inode, struct inode *dir);
+extern int __fscrypt_prepare_link(struct inode *inode, struct inode *dir,
+				  struct dentry *dentry);
 extern int __fscrypt_prepare_rename(struct inode *old_dir,
 				    struct dentry *old_dentry,
 				    struct inode *new_dir,
 				    struct dentry *new_dentry,
 				    unsigned int flags);
-extern int __fscrypt_prepare_lookup(struct inode *dir, struct dentry *dentry);
+extern int __fscrypt_prepare_lookup(struct inode *dir, struct dentry *dentry,
+				    struct fscrypt_name *fname);
 extern int __fscrypt_prepare_symlink(struct inode *dir, unsigned int len,
 				     unsigned int max_len,
 				     struct fscrypt_str *disk_link);
@@ -248,13 +276,16 @@
 	return false;
 }
 
+static inline void fscrypt_handle_d_move(struct dentry *dentry)
+{
+}
+
 /* crypto.c */
 static inline void fscrypt_enqueue_decrypt_work(struct work_struct *work)
 {
 }
 
-static inline struct fscrypt_ctx *fscrypt_get_ctx(const struct inode *inode,
-						  gfp_t gfp_flags)
+static inline struct fscrypt_ctx *fscrypt_get_ctx(gfp_t gfp_flags)
 {
 	return ERR_PTR(-EOPNOTSUPP);
 }
@@ -264,32 +295,51 @@
 	return;
 }
 
-static inline struct page *fscrypt_encrypt_page(const struct inode *inode,
-						struct page *page,
-						unsigned int len,
-						unsigned int offs,
-						u64 lblk_num, gfp_t gfp_flags)
+static inline struct page *fscrypt_encrypt_pagecache_blocks(struct page *page,
+							    unsigned int len,
+							    unsigned int offs,
+							    gfp_t gfp_flags)
 {
 	return ERR_PTR(-EOPNOTSUPP);
 }
 
-static inline int fscrypt_decrypt_page(const struct inode *inode,
-				       struct page *page,
-				       unsigned int len, unsigned int offs,
-				       u64 lblk_num)
+static inline int fscrypt_encrypt_block_inplace(const struct inode *inode,
+						struct page *page,
+						unsigned int len,
+						unsigned int offs, u64 lblk_num,
+						gfp_t gfp_flags)
 {
 	return -EOPNOTSUPP;
 }
 
-static inline struct page *fscrypt_control_page(struct page *page)
+static inline int fscrypt_decrypt_pagecache_blocks(struct page *page,
+						   unsigned int len,
+						   unsigned int offs)
+{
+	return -EOPNOTSUPP;
+}
+
+static inline int fscrypt_decrypt_block_inplace(const struct inode *inode,
+						struct page *page,
+						unsigned int len,
+						unsigned int offs, u64 lblk_num)
+{
+	return -EOPNOTSUPP;
+}
+
+static inline bool fscrypt_is_bounce_page(struct page *page)
+{
+	return false;
+}
+
+static inline struct page *fscrypt_pagecache_page(struct page *bounce_page)
 {
 	WARN_ON_ONCE(1);
 	return ERR_PTR(-EINVAL);
 }
 
-static inline void fscrypt_restore_control_page(struct page *page)
+static inline void fscrypt_free_bounce_page(struct page *bounce_page)
 {
-	return;
 }
 
 /* policy.c */
@@ -328,6 +378,10 @@
 	return;
 }
 
+static inline void fscrypt_free_inode(struct inode *inode)
+{
+}
+
  /* fname.c */
 static inline int fscrypt_setup_filename(struct inode *dir,
 					 const struct qstr *iname,
@@ -336,7 +390,7 @@
 	if (IS_ENCRYPTED(dir))
 		return -EOPNOTSUPP;
 
-	memset(fname, 0, sizeof(struct fscrypt_name));
+	memset(fname, 0, sizeof(*fname));
 	fname->usr_fname = iname;
 	fname->disk_name.name = (unsigned char *)iname->name;
 	fname->disk_name.len = iname->len;
@@ -387,11 +441,6 @@
 {
 }
 
-static inline void fscrypt_pullback_bio_page(struct page **page, bool restore)
-{
-	return;
-}
-
 static inline int fscrypt_zeroout_range(const struct inode *inode, pgoff_t lblk,
 					sector_t pblk, unsigned int len)
 {
@@ -407,8 +456,8 @@
 	return 0;
 }
 
-static inline int __fscrypt_prepare_link(struct inode *inode,
-					 struct inode *dir)
+static inline int __fscrypt_prepare_link(struct inode *inode, struct inode *dir,
+					 struct dentry *dentry)
 {
 	return -EOPNOTSUPP;
 }
@@ -423,7 +472,8 @@
 }
 
 static inline int __fscrypt_prepare_lookup(struct inode *dir,
-					   struct dentry *dentry)
+					   struct dentry *dentry,
+					   struct fscrypt_name *fname)
 {
 	return -EOPNOTSUPP;
 }
@@ -503,7 +553,7 @@
 				       struct dentry *dentry)
 {
 	if (IS_ENCRYPTED(dir))
-		return __fscrypt_prepare_link(d_inode(old_dentry), dir);
+		return __fscrypt_prepare_link(d_inode(old_dentry), dir, dentry);
 	return 0;
 }
 
@@ -544,27 +594,32 @@
  * fscrypt_prepare_lookup - prepare to lookup a name in a possibly-encrypted directory
  * @dir: directory being searched
  * @dentry: filename being looked up
- * @flags: lookup flags
+ * @fname: (output) the name to use to search the on-disk directory
  *
- * Prepare for ->lookup() in a directory which may be encrypted.  Lookups can be
- * done with or without the directory's encryption key; without the key,
+ * Prepare for ->lookup() in a directory which may be encrypted by determining
+ * the name that will actually be used to search the directory on-disk.  Lookups
+ * can be done with or without the directory's encryption key; without the key,
  * filenames are presented in encrypted form.  Therefore, we'll try to set up
  * the directory's encryption key, but even without it the lookup can continue.
  *
- * To allow invalidating stale dentries if the directory's encryption key is
- * added later, we also install a custom ->d_revalidate() method and use the
- * DCACHE_ENCRYPTED_WITH_KEY flag to indicate whether a given dentry is a
- * plaintext name (flag set) or a ciphertext name (flag cleared).
+ * This also installs a custom ->d_revalidate() method which will invalidate the
+ * dentry if it was created without the key and the key is later added.
  *
- * Return: 0 on success, -errno if a problem occurred while setting up the
- * encryption key
+ * Return: 0 on success; -ENOENT if key is unavailable but the filename isn't a
+ * correctly formed encoded ciphertext name, so a negative dentry should be
+ * created; or another -errno code.
  */
 static inline int fscrypt_prepare_lookup(struct inode *dir,
 					 struct dentry *dentry,
-					 unsigned int flags)
+					 struct fscrypt_name *fname)
 {
 	if (IS_ENCRYPTED(dir))
-		return __fscrypt_prepare_lookup(dir, dentry);
+		return __fscrypt_prepare_lookup(dir, dentry, fname);
+
+	memset(fname, 0, sizeof(*fname));
+	fname->usr_fname = &dentry->d_name;
+	fname->disk_name.name = (unsigned char *)dentry->d_name.name;
+	fname->disk_name.len = dentry->d_name.len;
 	return 0;
 }
 
@@ -683,4 +738,16 @@
 		return true;
 }
 #endif
+
+/* If *pagep is a bounce page, free it and set *pagep to the pagecache page */
+static inline void fscrypt_finalize_bounce_page(struct page **pagep)
+{
+	struct page *page = *pagep;
+
+	if (fscrypt_is_bounce_page(page)) {
+		*pagep = fscrypt_pagecache_page(page);
+		fscrypt_free_bounce_page(page);
+	}
+}
+
 #endif	/* _LINUX_FSCRYPT_H */
diff --git a/include/linux/fsverity.h b/include/linux/fsverity.h
new file mode 100644
index 0000000..3b6b8cc
--- /dev/null
+++ b/include/linux/fsverity.h
@@ -0,0 +1,211 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * fs-verity: read-only file-based authenticity protection
+ *
+ * This header declares the interface between the fs/verity/ support layer and
+ * filesystems that support fs-verity.
+ *
+ * Copyright 2019 Google LLC
+ */
+
+#ifndef _LINUX_FSVERITY_H
+#define _LINUX_FSVERITY_H
+
+#include <linux/fs.h>
+#include <uapi/linux/fsverity.h>
+
+/* Verity operations for filesystems */
+struct fsverity_operations {
+
+	/**
+	 * Begin enabling verity on the given file.
+	 *
+	 * @filp: a readonly file descriptor for the file
+	 *
+	 * The filesystem must do any needed filesystem-specific preparations
+	 * for enabling verity, e.g. evicting inline data.  It also must return
+	 * -EBUSY if verity is already being enabled on the given file.
+	 *
+	 * i_rwsem is held for write.
+	 *
+	 * Return: 0 on success, -errno on failure
+	 */
+	int (*begin_enable_verity)(struct file *filp);
+
+	/**
+	 * End enabling verity on the given file.
+	 *
+	 * @filp: a readonly file descriptor for the file
+	 * @desc: the verity descriptor to write, or NULL on failure
+	 * @desc_size: size of verity descriptor, or 0 on failure
+	 * @merkle_tree_size: total bytes the Merkle tree took up
+	 *
+	 * If desc == NULL, then enabling verity failed and the filesystem only
+	 * must do any necessary cleanups.  Else, it must also store the given
+	 * verity descriptor to a fs-specific location associated with the inode
+	 * and do any fs-specific actions needed to mark the inode as a verity
+	 * inode, e.g. setting a bit in the on-disk inode.  The filesystem is
+	 * also responsible for setting the S_VERITY flag in the VFS inode.
+	 *
+	 * i_rwsem is held for write, but it may have been dropped between
+	 * ->begin_enable_verity() and ->end_enable_verity().
+	 *
+	 * Return: 0 on success, -errno on failure
+	 */
+	int (*end_enable_verity)(struct file *filp, const void *desc,
+				 size_t desc_size, u64 merkle_tree_size);
+
+	/**
+	 * Get the verity descriptor of the given inode.
+	 *
+	 * @inode: an inode with the S_VERITY flag set
+	 * @buf: buffer in which to place the verity descriptor
+	 * @bufsize: size of @buf, or 0 to retrieve the size only
+	 *
+	 * If bufsize == 0, then the size of the verity descriptor is returned.
+	 * Otherwise the verity descriptor is written to 'buf' and its actual
+	 * size is returned; -ERANGE is returned if it's too large.  This may be
+	 * called by multiple processes concurrently on the same inode.
+	 *
+	 * Return: the size on success, -errno on failure
+	 */
+	int (*get_verity_descriptor)(struct inode *inode, void *buf,
+				     size_t bufsize);
+
+	/**
+	 * Read a Merkle tree page of the given inode.
+	 *
+	 * @inode: the inode
+	 * @index: 0-based index of the page within the Merkle tree
+	 *
+	 * This can be called at any time on an open verity file, as well as
+	 * between ->begin_enable_verity() and ->end_enable_verity().  It may be
+	 * called by multiple processes concurrently, even with the same page.
+	 *
+	 * Note that this must retrieve a *page*, not necessarily a *block*.
+	 *
+	 * Return: the page on success, ERR_PTR() on failure
+	 */
+	struct page *(*read_merkle_tree_page)(struct inode *inode,
+					      pgoff_t index);
+
+	/**
+	 * Write a Merkle tree block to the given inode.
+	 *
+	 * @inode: the inode for which the Merkle tree is being built
+	 * @buf: block to write
+	 * @index: 0-based index of the block within the Merkle tree
+	 * @log_blocksize: log base 2 of the Merkle tree block size
+	 *
+	 * This is only called between ->begin_enable_verity() and
+	 * ->end_enable_verity().
+	 *
+	 * Return: 0 on success, -errno on failure
+	 */
+	int (*write_merkle_tree_block)(struct inode *inode, const void *buf,
+				       u64 index, int log_blocksize);
+};
+
+#ifdef CONFIG_FS_VERITY
+
+static inline struct fsverity_info *fsverity_get_info(const struct inode *inode)
+{
+	/* pairs with the cmpxchg() in fsverity_set_info() */
+	return READ_ONCE(inode->i_verity_info);
+}
+
+/* enable.c */
+
+extern int fsverity_ioctl_enable(struct file *filp, const void __user *arg);
+
+/* measure.c */
+
+extern int fsverity_ioctl_measure(struct file *filp, void __user *arg);
+
+/* open.c */
+
+extern int fsverity_file_open(struct inode *inode, struct file *filp);
+extern int fsverity_prepare_setattr(struct dentry *dentry, struct iattr *attr);
+extern void fsverity_cleanup_inode(struct inode *inode);
+
+/* verify.c */
+
+extern bool fsverity_verify_page(struct page *page);
+extern void fsverity_verify_bio(struct bio *bio);
+extern void fsverity_enqueue_verify_work(struct work_struct *work);
+
+#else /* !CONFIG_FS_VERITY */
+
+static inline struct fsverity_info *fsverity_get_info(const struct inode *inode)
+{
+	return NULL;
+}
+
+/* enable.c */
+
+static inline int fsverity_ioctl_enable(struct file *filp,
+					const void __user *arg)
+{
+	return -EOPNOTSUPP;
+}
+
+/* measure.c */
+
+static inline int fsverity_ioctl_measure(struct file *filp, void __user *arg)
+{
+	return -EOPNOTSUPP;
+}
+
+/* open.c */
+
+static inline int fsverity_file_open(struct inode *inode, struct file *filp)
+{
+	return IS_VERITY(inode) ? -EOPNOTSUPP : 0;
+}
+
+static inline int fsverity_prepare_setattr(struct dentry *dentry,
+					   struct iattr *attr)
+{
+	return IS_VERITY(d_inode(dentry)) ? -EOPNOTSUPP : 0;
+}
+
+static inline void fsverity_cleanup_inode(struct inode *inode)
+{
+}
+
+/* verify.c */
+
+static inline bool fsverity_verify_page(struct page *page)
+{
+	WARN_ON(1);
+	return false;
+}
+
+static inline void fsverity_verify_bio(struct bio *bio)
+{
+	WARN_ON(1);
+}
+
+static inline void fsverity_enqueue_verify_work(struct work_struct *work)
+{
+	WARN_ON(1);
+}
+
+#endif	/* !CONFIG_FS_VERITY */
+
+/**
+ * fsverity_active() - do reads from the inode need to go through fs-verity?
+ *
+ * This checks whether ->i_verity_info has been set.
+ *
+ * Filesystems call this from ->readpages() to check whether the pages need to
+ * be verified or not.  Don't use IS_VERITY() for this purpose; it's subject to
+ * a race condition where the file is being read concurrently with
+ * FS_IOC_ENABLE_VERITY completing.  (S_VERITY is set before ->i_verity_info.)
+ */
+static inline bool fsverity_active(const struct inode *inode)
+{
+	return fsverity_get_info(inode) != NULL;
+}
+
+#endif	/* _LINUX_FSVERITY_H */
diff --git a/include/linux/fwnode.h b/include/linux/fwnode.h
index faebf0c..0460523 100644
--- a/include/linux/fwnode.h
+++ b/include/linux/fwnode.h
@@ -20,6 +20,7 @@
 struct fwnode_handle {
 	struct fwnode_handle *secondary;
 	const struct fwnode_operations *ops;
+	struct device *dev;
 };
 
 /**
@@ -68,6 +69,44 @@
  *			       endpoint node.
  * @graph_get_port_parent: Return the parent node of a port node.
  * @graph_parse_endpoint: Parse endpoint for port and endpoint id.
+ * @add_links:	Called after the device corresponding to the fwnode is added
+ *		using device_add(). The function is expected to create device
+ *		links to all the suppliers of the device that are available at
+ *		the time this function is called.  The function must NOT stop
+ *		at the first failed device link if other unlinked supplier
+ *		devices are present in the system.  This is necessary for the
+ *		driver/bus sync_state() callbacks to work correctly.
+ *
+ *		For example, say Device-C depends on suppliers Device-S1 and
+ *		Device-S2 and the dependency is listed in that order in the
+ *		firmware.  Say, S1 gets populated from the firmware after
+ *		late_initcall_sync().  Say S2 is populated and probed way
+ *		before that in device_initcall(). When C is populated, if this
+ *		add_links() function doesn't continue past a "failed linking to
+ *		S1" and continue linking C to S2, then S2 will get a
+ *		sync_state() callback before C is probed. This is because from
+ *		the perspective of S2, C was never a consumer when its
+ *		sync_state() evaluation is done. To avoid this, the add_links()
+ *		function has to go through all available suppliers of the
+ *		device (that corresponds to this fwnode) and link to them
+ *		before returning.
+ *
+ *		If some suppliers are not yet available (indicated by an error
+ *		return value), this function will be called again when other
+ *		devices are added to allow creating device links to any newly
+ *		available suppliers.
+ *
+ *		Return 0 if device links have been successfully created to all
+ *		the known suppliers of this device or if the supplier
+ *		information is not known.
+ *
+ *		Return -ENODEV if the suppliers needed for probing this device
+ *		have not been registered yet (because device links can only be
+ *		created to devices registered with the driver core).
+ *
+ *		Return -EAGAIN if some of the suppliers of this device have not
+ *		been registered yet, but none of those suppliers are necessary
+ *		for probing the device.
  */
 struct fwnode_operations {
 	struct fwnode_handle *(*get)(struct fwnode_handle *fwnode);
@@ -105,6 +144,8 @@
 	(*graph_get_port_parent)(struct fwnode_handle *fwnode);
 	int (*graph_parse_endpoint)(const struct fwnode_handle *fwnode,
 				    struct fwnode_endpoint *endpoint);
+	int (*add_links)(const struct fwnode_handle *fwnode,
+			 struct device *dev);
 };
 
 #define fwnode_has_op(fwnode, op)				\
@@ -125,5 +166,6 @@
 		if (fwnode_has_op(fwnode, op))				\
 			(fwnode)->ops->op(fwnode, ## __VA_ARGS__);	\
 	} while (false)
+#define get_dev_from_fwnode(fwnode)	get_device((fwnode)->dev)
 
 #endif
diff --git a/include/linux/init.h b/include/linux/init.h
index a223531..bc719c7 100644
--- a/include/linux/init.h
+++ b/include/linux/init.h
@@ -167,20 +167,6 @@
 
 #ifndef __ASSEMBLY__
 
-#ifdef CONFIG_LTO_CLANG
-  /*
-   * Use __COUNTER__ prefix in the variable to help ensure ordering
-   * inside a compilation unit that defines multiple initcalls, and
-   * __LINE__ to help prevent naming collisions.
-   */
-  #define ___initcall_name2(c, l, fn, id) __initcall_##c##_##l##_##fn##id
-  #define ___initcall_name1(c, l, fn, id) ___initcall_name2(c, l, fn, id)
-  #define __initcall_name(fn, id) \
-		___initcall_name1(__COUNTER__, __LINE__, fn, id)
-#else
-  #define __initcall_name(fn, id) 	__initcall_##fn##id
-#endif
-
 /*
  * initcalls are now grouped by functionality into separate
  * subsections. Ordering inside the subsections is determined
@@ -201,14 +187,36 @@
 #define ___define_initcall(fn, id, __sec)			\
 	__ADDRESSABLE(fn)					\
 	asm(".section	\"" #__sec ".init\", \"a\"	\n"	\
-	__stringify(__initcall_name(fn, id)) ":		\n"	\
+	"__initcall_" #fn #id ":			\n"	\
 	    ".long	" #fn " - .			\n"	\
 	    ".previous					\n");
 #else
-#define ___define_initcall(fn, id, __sec) \
-	static initcall_t __initcall_name(fn, id) __used \
+#ifdef CONFIG_LTO_CLANG
+  /*
+   * With LTO, the compiler doesn't necessarily obey link order for
+   * initcalls, and the initcall variable needs to be globally unique
+   * to avoid naming collisions.  In order to preserve the correct
+   * order, we add each variable into its own section and generate a
+   * linker script (in scripts/link-vmlinux.sh) to ensure the order
+   * remains correct.  We also add a __COUNTER__ prefix to the name,
+   * so we can retain the order of initcalls within each compilation
+   * unit, and __LINE__ to make the names more unique.
+   */
+  #define ___lto_initcall(c, l, fn, id, __sec) \
+	static initcall_t __initcall_##c##_##l##_##fn##id __used \
+		__attribute__((__section__( #__sec \
+			__stringify(.init..##c##_##l##_##fn)))) = fn;
+  #define __lto_initcall(c, l, fn, id, __sec) \
+	___lto_initcall(c, l, fn, id, __sec)
+
+  #define ___define_initcall(fn, id, __sec) \
+	__lto_initcall(__COUNTER__, __LINE__, fn, id, __sec)
+#else
+  #define ___define_initcall(fn, id, __sec) \
+	static initcall_t __initcall_##fn##id __used \
 		__attribute__((__section__(#__sec ".init"))) = fn;
 #endif
+#endif
 
 #define __define_initcall(fn, id) ___define_initcall(fn, id, .initcall##id)
 
@@ -249,8 +257,8 @@
 #define __exitcall(fn)						\
 	static exitcall_t __exitcall_##fn __exit_call = fn
 
-#define console_initcall(fn)	___define_initcall(fn,, .con_initcall)
-#define security_initcall(fn)	___define_initcall(fn,, .security_initcall)
+#define console_initcall(fn)	___define_initcall(fn, con, .con_initcall)
+#define security_initcall(fn)	___define_initcall(fn, security, .security_initcall)
 
 struct obs_kernel_param {
 	const char *str;
diff --git a/drivers/iommu/io-pgtable.h b/include/linux/io-pgtable.h
similarity index 100%
rename from drivers/iommu/io-pgtable.h
rename to include/linux/io-pgtable.h
diff --git a/include/linux/iocontext.h b/include/linux/iocontext.h
index dba15ca..1dcd919 100644
--- a/include/linux/iocontext.h
+++ b/include/linux/iocontext.h
@@ -8,6 +8,7 @@
 
 enum {
 	ICQ_EXITED		= 1 << 2,
+	ICQ_DESTROYED		= 1 << 3,
 };
 
 /*
diff --git a/include/linux/iommu.h b/include/linux/iommu.h
index ac1962d..0be31a0 100644
--- a/include/linux/iommu.h
+++ b/include/linux/iommu.h
@@ -71,6 +71,15 @@
 	bool force_aperture;       /* DMA only allowed in mappable range? */
 };
 
+/* iommu transaction flags */
+#define IOMMU_TRANS_WRITE	BIT(0)	/* 1 Write, 0 Read */
+#define IOMMU_TRANS_PRIV	BIT(1)	/* 1 Privileged, 0 Unprivileged */
+#define IOMMU_TRANS_INST	BIT(2)	/* 1 Instruction fetch, 0 Data access */
+#define IOMMU_TRANS_SEC	BIT(3)	/* 1 Secure, 0 Non-secure access*/
+
+/* Non secure unprivileged Data read operation */
+#define IOMMU_TRANS_DEFAULT	(0U)
+
 struct iommu_pgtbl_info {
 	void *ops;
 };
@@ -162,10 +171,11 @@
 	DOMAIN_ATTR_EARLY_MAP,
 	DOMAIN_ATTR_PAGE_TABLE_IS_COHERENT,
 	DOMAIN_ATTR_PAGE_TABLE_FORCE_COHERENT,
-	DOMAIN_ATTR_CB_STALL_DISABLE,
 	DOMAIN_ATTR_BITMAP_IOVA_ALLOCATOR,
 	DOMAIN_ATTR_USE_LLC_NWA,
-	DOMAIN_ATTR_NO_CFRE,
+	DOMAIN_ATTR_FAULT_MODEL_NO_CFRE,
+	DOMAIN_ATTR_FAULT_MODEL_NO_STALL,
+	DOMAIN_ATTR_FAULT_MODEL_HUPCF,
 	DOMAIN_ATTR_MAX,
 };
 
@@ -258,7 +268,7 @@
 	void (*iotlb_sync)(struct iommu_domain *domain);
 	phys_addr_t (*iova_to_phys)(struct iommu_domain *domain, dma_addr_t iova);
 	phys_addr_t (*iova_to_phys_hard)(struct iommu_domain *domain,
-					 dma_addr_t iova);
+				 dma_addr_t iova, unsigned long trans_flags);
 	int (*add_device)(struct device *dev);
 	void (*remove_device)(struct device *dev);
 	struct iommu_group *(*device_group)(struct device *dev);
@@ -370,7 +380,7 @@
 			   struct scatterlist *sg,unsigned int nents, int prot);
 extern phys_addr_t iommu_iova_to_phys(struct iommu_domain *domain, dma_addr_t iova);
 extern phys_addr_t iommu_iova_to_phys_hard(struct iommu_domain *domain,
-					   dma_addr_t iova);
+				   dma_addr_t iova, unsigned long trans_flags);
 extern bool iommu_is_iova_coherent(struct iommu_domain *domain,
 				dma_addr_t iova);
 extern void iommu_set_fault_handler(struct iommu_domain *domain,
@@ -606,7 +616,7 @@
 }
 
 static inline phys_addr_t iommu_iova_to_phys_hard(struct iommu_domain *domain,
-						  dma_addr_t iova)
+				dma_addr_t iova, unsigned long trans_flags)
 {
 	return 0;
 }
@@ -626,7 +636,6 @@
 					struct list_head *list)
 {
 }
-
 static inline void iommu_put_resv_regions(struct device *dev,
 					struct list_head *list)
 {
diff --git a/include/linux/ipa.h b/include/linux/ipa.h
index dcab89e..9ad4cb0 100644
--- a/include/linux/ipa.h
+++ b/include/linux/ipa.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0 */
 /*
- * Copyright (c) 2012-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved.
  */
 
 #ifndef _IPA_H_
@@ -350,18 +350,28 @@
  * struct ipa_ep_cfg_deaggr - deaggregation configuration in IPA end-point
  * @deaggr_hdr_len: Deaggregation Header length in bytes. Valid only for Input
  *	Pipes, which are configured for 'Generic' deaggregation.
+ * @syspipe_err_detection - If set to 1, enables error detection for
+ *	de-aggregration. Valid only for Input Pipes, which are configured
+ *	for 'Generic' deaggregation.
+ *	Note: if this bit is set, de-aggregated frames must be contiguous
+ *	in memory.
  * @packet_offset_valid: - 0: PACKET_OFFSET is not used, 1: PACKET_OFFSET is
  *	used.
  * @packet_offset_location: Location of packet offset field, which specifies
  *	the offset to the packet from the start of the packet offset field.
+ * @ignore_min_pkt_err - Ignore packets smaller than header. This is intended
+ *	for use in RNDIS de-aggregated pipes, to silently ignore a redundant
+ *	1-byte trailer in MSFT implementation.
  * @max_packet_len: DEAGGR Max Packet Length in Bytes. A Packet with higher
  *	size wil be treated as an error. 0 - Packet Length is not Bound,
  *	IPA should not check for a Max Packet Length.
  */
 struct ipa_ep_cfg_deaggr {
 	u32 deaggr_hdr_len;
+	bool syspipe_err_detection;
 	bool packet_offset_valid;
 	u32 packet_offset_location;
+	bool ignore_min_pkt_err;
 	u32 max_packet_len;
 };
 
diff --git a/include/linux/kasan-checks.h b/include/linux/kasan-checks.h
index d314150..a61dc07 100644
--- a/include/linux/kasan-checks.h
+++ b/include/linux/kasan-checks.h
@@ -2,7 +2,7 @@
 #ifndef _LINUX_KASAN_CHECKS_H
 #define _LINUX_KASAN_CHECKS_H
 
-#ifdef CONFIG_KASAN
+#if defined(__SANITIZE_ADDRESS__) || defined(__KASAN_INTERNAL)
 void kasan_check_read(const volatile void *p, unsigned int size);
 void kasan_check_write(const volatile void *p, unsigned int size);
 #else
diff --git a/include/linux/kasan.h b/include/linux/kasan.h
index 46aae12..b40ea10 100644
--- a/include/linux/kasan.h
+++ b/include/linux/kasan.h
@@ -14,13 +14,13 @@
 #include <asm/kasan.h>
 #include <asm/pgtable.h>
 
-extern unsigned char kasan_zero_page[PAGE_SIZE];
-extern pte_t kasan_zero_pte[PTRS_PER_PTE];
-extern pmd_t kasan_zero_pmd[PTRS_PER_PMD];
-extern pud_t kasan_zero_pud[PTRS_PER_PUD];
-extern p4d_t kasan_zero_p4d[MAX_PTRS_PER_P4D];
+extern unsigned char kasan_early_shadow_page[PAGE_SIZE];
+extern pte_t kasan_early_shadow_pte[PTRS_PER_PTE];
+extern pmd_t kasan_early_shadow_pmd[PTRS_PER_PMD];
+extern pud_t kasan_early_shadow_pud[PTRS_PER_PUD];
+extern p4d_t kasan_early_shadow_p4d[MAX_PTRS_PER_P4D];
 
-int kasan_populate_zero_shadow(const void *shadow_start,
+int kasan_populate_early_shadow(const void *shadow_start,
 				const void *shadow_end);
 
 static inline void *kasan_mem_to_shadow(const void *addr)
@@ -45,22 +45,24 @@
 
 void kasan_cache_create(struct kmem_cache *cache, unsigned int *size,
 			slab_flags_t *flags);
-void kasan_cache_shrink(struct kmem_cache *cache);
-void kasan_cache_shutdown(struct kmem_cache *cache);
 
 void kasan_poison_slab(struct page *page);
 void kasan_unpoison_object_data(struct kmem_cache *cache, void *object);
 void kasan_poison_object_data(struct kmem_cache *cache, void *object);
-void kasan_init_slab_obj(struct kmem_cache *cache, const void *object);
+void * __must_check kasan_init_slab_obj(struct kmem_cache *cache,
+					const void *object);
 
-void kasan_kmalloc_large(const void *ptr, size_t size, gfp_t flags);
+void * __must_check kasan_kmalloc_large(const void *ptr, size_t size,
+						gfp_t flags);
 void kasan_kfree_large(void *ptr, unsigned long ip);
 void kasan_poison_kfree(void *ptr, unsigned long ip);
-void kasan_kmalloc(struct kmem_cache *s, const void *object, size_t size,
-		  gfp_t flags);
-void kasan_krealloc(const void *object, size_t new_size, gfp_t flags);
+void * __must_check kasan_kmalloc(struct kmem_cache *s, const void *object,
+					size_t size, gfp_t flags);
+void * __must_check kasan_krealloc(const void *object, size_t new_size,
+					gfp_t flags);
 
-void kasan_slab_alloc(struct kmem_cache *s, void *object, gfp_t flags);
+void * __must_check kasan_slab_alloc(struct kmem_cache *s, void *object,
+					gfp_t flags);
 bool kasan_slab_free(struct kmem_cache *s, void *object, unsigned long ip);
 
 struct kasan_cache {
@@ -97,27 +99,40 @@
 static inline void kasan_cache_create(struct kmem_cache *cache,
 				      unsigned int *size,
 				      slab_flags_t *flags) {}
-static inline void kasan_cache_shrink(struct kmem_cache *cache) {}
-static inline void kasan_cache_shutdown(struct kmem_cache *cache) {}
 
 static inline void kasan_poison_slab(struct page *page) {}
 static inline void kasan_unpoison_object_data(struct kmem_cache *cache,
 					void *object) {}
 static inline void kasan_poison_object_data(struct kmem_cache *cache,
 					void *object) {}
-static inline void kasan_init_slab_obj(struct kmem_cache *cache,
-				const void *object) {}
+static inline void *kasan_init_slab_obj(struct kmem_cache *cache,
+				const void *object)
+{
+	return (void *)object;
+}
 
-static inline void kasan_kmalloc_large(void *ptr, size_t size, gfp_t flags) {}
+static inline void *kasan_kmalloc_large(void *ptr, size_t size, gfp_t flags)
+{
+	return ptr;
+}
 static inline void kasan_kfree_large(void *ptr, unsigned long ip) {}
 static inline void kasan_poison_kfree(void *ptr, unsigned long ip) {}
-static inline void kasan_kmalloc(struct kmem_cache *s, const void *object,
-				size_t size, gfp_t flags) {}
-static inline void kasan_krealloc(const void *object, size_t new_size,
-				 gfp_t flags) {}
+static inline void *kasan_kmalloc(struct kmem_cache *s, const void *object,
+				size_t size, gfp_t flags)
+{
+	return (void *)object;
+}
+static inline void *kasan_krealloc(const void *object, size_t new_size,
+				 gfp_t flags)
+{
+	return (void *)object;
+}
 
-static inline void kasan_slab_alloc(struct kmem_cache *s, void *object,
-				   gfp_t flags) {}
+static inline void *kasan_slab_alloc(struct kmem_cache *s, void *object,
+				   gfp_t flags)
+{
+	return object;
+}
 static inline bool kasan_slab_free(struct kmem_cache *s, void *object,
 				   unsigned long ip)
 {
@@ -140,4 +155,40 @@
 
 #endif /* CONFIG_KASAN */
 
+#ifdef CONFIG_KASAN_GENERIC
+
+#define KASAN_SHADOW_INIT 0
+
+void kasan_cache_shrink(struct kmem_cache *cache);
+void kasan_cache_shutdown(struct kmem_cache *cache);
+
+#else /* CONFIG_KASAN_GENERIC */
+
+static inline void kasan_cache_shrink(struct kmem_cache *cache) {}
+static inline void kasan_cache_shutdown(struct kmem_cache *cache) {}
+
+#endif /* CONFIG_KASAN_GENERIC */
+
+#ifdef CONFIG_KASAN_SW_TAGS
+
+#define KASAN_SHADOW_INIT 0xFF
+
+void kasan_init_tags(void);
+
+void *kasan_reset_tag(const void *addr);
+
+void kasan_report(unsigned long addr, size_t size,
+		bool is_write, unsigned long ip);
+
+#else /* CONFIG_KASAN_SW_TAGS */
+
+static inline void kasan_init_tags(void) { }
+
+static inline void *kasan_reset_tag(const void *addr)
+{
+	return (void *)addr;
+}
+
+#endif /* CONFIG_KASAN_SW_TAGS */
+
 #endif /* LINUX_KASAN_H */
diff --git a/include/linux/leds-qpnp-flash.h b/include/linux/leds-qpnp-flash.h
index d6f0ee0..8c8417c 100644
--- a/include/linux/leds-qpnp-flash.h
+++ b/include/linux/leds-qpnp-flash.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0 */
 /*
- * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2020, The Linux Foundation. All rights reserved.
  */
 
 #ifndef __LEDS_QPNP_FLASH_H
@@ -15,14 +15,16 @@
 
 #define FLASH_LED_PREPARE_OPTIONS_MASK	GENMASK(3, 0)
 
-#ifdef CONFIG_LEDS_QPNP_FLASH_V2
+int qpnp_flash_register_led_prepare(struct device *dev, void *data);
+
+#if (defined CONFIG_LEDS_QTI_FLASH || defined CONFIG_LEDS_QPNP_FLASH_V2)
 int qpnp_flash_led_prepare(struct led_trigger *trig, int options,
 					int *max_current);
 #else
 static inline int qpnp_flash_led_prepare(struct led_trigger *trig, int options,
 					int *max_current)
 {
-	return -EINVAL;
+	return -ENODEV;
 }
 #endif
 
diff --git a/include/linux/leds-qti-flash.h b/include/linux/leds-qti-flash.h
index f313d79..56d6921 100644
--- a/include/linux/leds-qti-flash.h
+++ b/include/linux/leds-qti-flash.h
@@ -8,16 +8,21 @@
 
 #include <linux/leds.h>
 
-#define QUERY_MAX_AVAIL_CURRENT		BIT(0)
+#define ENABLE_REGULATOR		BIT(0)
+#define DISABLE_REGULATOR		BIT(1)
+#define QUERY_MAX_AVAIL_CURRENT		BIT(2)
+#define QUERY_MAX_CURRENT		BIT(3)
 
-#if IS_ENABLED(CONFIG_LEDS_QTI_FLASH)
-int qti_flash_led_prepare(struct led_trigger *trig,
-			int options, int *max_current);
+int qpnp_flash_register_led_prepare(struct device *dev, void *data);
+
+#if (defined CONFIG_LEDS_QTI_FLASH || defined CONFIG_LEDS_QPNP_FLASH_V2)
+int qpnp_flash_led_prepare(struct led_trigger *trig, int options,
+					int *max_current);
 #else
-static inline int qti_flash_led_prepare(struct led_trigger *trig,
-					int options, int *max_current)
+static inline int qpnp_flash_led_prepare(struct led_trigger *trig, int options,
+					int *max_current)
 {
-	return -EINVAL;
+	return -ENODEV;
 }
 #endif
 #endif
diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h
index ce16efb..8f29eb0 100644
--- a/include/linux/lsm_hooks.h
+++ b/include/linux/lsm_hooks.h
@@ -1779,6 +1779,14 @@
 	int (*bpf_prog_alloc_security)(struct bpf_prog_aux *aux);
 	void (*bpf_prog_free_security)(struct bpf_prog_aux *aux);
 #endif /* CONFIG_BPF_SYSCALL */
+#ifdef CONFIG_PERF_EVENTS
+	int (*perf_event_open)(struct perf_event_attr *attr, int type);
+	int (*perf_event_alloc)(struct perf_event *event);
+	void (*perf_event_free)(struct perf_event *event);
+	int (*perf_event_read)(struct perf_event *event);
+	int (*perf_event_write)(struct perf_event *event);
+
+#endif
 };
 
 struct security_hook_heads {
@@ -2014,6 +2022,13 @@
 	struct hlist_head bpf_prog_alloc_security;
 	struct hlist_head bpf_prog_free_security;
 #endif /* CONFIG_BPF_SYSCALL */
+#ifdef CONFIG_PERF_EVENTS
+	struct hlist_head perf_event_open;
+	struct hlist_head perf_event_alloc;
+	struct hlist_head perf_event_free;
+	struct hlist_head perf_event_read;
+	struct hlist_head perf_event_write;
+#endif
 } __randomize_layout;
 
 /*
diff --git a/include/linux/memblock.h b/include/linux/memblock.h
index 48b9b27..0fa57e9 100644
--- a/include/linux/memblock.h
+++ b/include/linux/memblock.h
@@ -342,6 +342,7 @@
 /* Flags for memblock_alloc_base() amd __memblock_alloc_base() */
 #define MEMBLOCK_ALLOC_ANYWHERE	(~(phys_addr_t)0)
 #define MEMBLOCK_ALLOC_ACCESSIBLE	0
+#define MEMBLOCK_ALLOC_KASAN		1
 
 phys_addr_t __init memblock_alloc_range(phys_addr_t size, phys_addr_t align,
 					phys_addr_t start, phys_addr_t end,
diff --git a/include/linux/mhi.h b/include/linux/mhi.h
index 1683035..7ce6a52 100644
--- a/include/linux/mhi.h
+++ b/include/linux/mhi.h
@@ -402,6 +402,7 @@
 	bool initiate_mhi_reset;
 	void *priv_data;
 	void *log_buf;
+	void *cntrl_log_buf;
 	struct dentry *dentry;
 	struct dentry *parent;
 
@@ -855,7 +856,7 @@
 #ifdef CONFIG_MHI_DEBUG
 
 #define MHI_VERB(fmt, ...) do { \
-		if (mhi_cntrl->klog_lvl <= MHI_MSG_VERBOSE) \
+		if (mhi_cntrl->klog_lvl <= MHI_MSG_LVL_VERBOSE) \
 			pr_dbg("[D][%s] " fmt, __func__, ##__VA_ARGS__);\
 } while (0)
 
@@ -865,8 +866,18 @@
 
 #endif
 
+#define MHI_CNTRL_LOG(fmt, ...) do {	\
+		if (mhi_cntrl->klog_lvl <= MHI_MSG_LVL_INFO) \
+			pr_info("[I][%s] " fmt, __func__, ##__VA_ARGS__);\
+} while (0)
+
+#define MHI_CNTRL_ERR(fmt, ...) do {	\
+		if (mhi_cntrl->klog_lvl <= MHI_MSG_LVL_ERROR) \
+			pr_err("[E][%s] " fmt, __func__, ##__VA_ARGS__); \
+} while (0)
+
 #define MHI_LOG(fmt, ...) do {	\
-		if (mhi_cntrl->klog_lvl <= MHI_MSG_INFO) \
+		if (mhi_cntrl->klog_lvl <= MHI_MSG_LVL_INFO) \
 			pr_info("[I][%s] " fmt, __func__, ##__VA_ARGS__);\
 } while (0)
 
@@ -906,6 +917,20 @@
 
 #endif
 
+#define MHI_CNTRL_LOG(fmt, ...) do { \
+		if (mhi_cntrl->klog_lvl <= MHI_MSG_LVL_INFO) \
+			pr_err("[I][%s] " fmt, __func__, ##__VA_ARGS__);\
+		ipc_log_string(mhi_cntrl->cntrl_log_buf, "[I][%s] " fmt, \
+			       __func__, ##__VA_ARGS__); \
+} while (0)
+
+#define MHI_CNTRL_ERR(fmt, ...) do { \
+		if (mhi_cntrl->klog_lvl <= MHI_MSG_LVL_ERROR) \
+			pr_err("[E][%s] " fmt, __func__, ##__VA_ARGS__); \
+		ipc_log_string(mhi_cntrl->cntrl_log_buf, "[E][%s] " fmt, \
+			       __func__, ##__VA_ARGS__); \
+} while (0)
+
 #define MHI_LOG(fmt, ...) do {	\
 		if (mhi_cntrl->klog_lvl <= MHI_MSG_LVL_INFO) \
 			pr_err("[I][%s] " fmt, __func__, ##__VA_ARGS__);\
diff --git a/include/linux/mm.h b/include/linux/mm.h
index be33bf8..8652399 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -73,6 +73,17 @@
 #include <asm/pgtable.h>
 #include <asm/processor.h>
 
+/*
+ * Architectures that support memory tagging (assigning tags to memory regions,
+ * embedding these tags into addresses that point to these memory regions, and
+ * checking that the memory and the pointer tags match on memory accesses)
+ * redefine this macro to strip tags from pointers.
+ * It's defined as noop for arcitectures that don't support memory tagging.
+ */
+#ifndef untagged_addr
+#define untagged_addr(addr) (addr)
+#endif
+
 #ifndef __pa_symbol
 #define __pa_symbol(x)  __pa(RELOC_HIDE((unsigned long)(x), 0))
 #endif
@@ -821,6 +832,7 @@
 #define NODES_PGOFF		(SECTIONS_PGOFF - NODES_WIDTH)
 #define ZONES_PGOFF		(NODES_PGOFF - ZONES_WIDTH)
 #define LAST_CPUPID_PGOFF	(ZONES_PGOFF - LAST_CPUPID_WIDTH)
+#define KASAN_TAG_PGOFF		(LAST_CPUPID_PGOFF - KASAN_TAG_WIDTH)
 
 /*
  * Define the bit shifts to access each section.  For non-existent
@@ -831,6 +843,7 @@
 #define NODES_PGSHIFT		(NODES_PGOFF * (NODES_WIDTH != 0))
 #define ZONES_PGSHIFT		(ZONES_PGOFF * (ZONES_WIDTH != 0))
 #define LAST_CPUPID_PGSHIFT	(LAST_CPUPID_PGOFF * (LAST_CPUPID_WIDTH != 0))
+#define KASAN_TAG_PGSHIFT	(KASAN_TAG_PGOFF * (KASAN_TAG_WIDTH != 0))
 
 /* NODE:ZONE or SECTION:ZONE is used to ID a zone for the buddy allocator */
 #ifdef NODE_NOT_IN_PAGE_FLAGS
@@ -853,6 +866,7 @@
 #define NODES_MASK		((1UL << NODES_WIDTH) - 1)
 #define SECTIONS_MASK		((1UL << SECTIONS_WIDTH) - 1)
 #define LAST_CPUPID_MASK	((1UL << LAST_CPUPID_SHIFT) - 1)
+#define KASAN_TAG_MASK		((1UL << KASAN_TAG_WIDTH) - 1)
 #define ZONEID_MASK		((1UL << ZONEID_SHIFT) - 1)
 
 static inline enum zone_type page_zonenum(const struct page *page)
@@ -1111,6 +1125,32 @@
 }
 #endif /* CONFIG_NUMA_BALANCING */
 
+#ifdef CONFIG_KASAN_SW_TAGS
+static inline u8 page_kasan_tag(const struct page *page)
+{
+	return (page->flags >> KASAN_TAG_PGSHIFT) & KASAN_TAG_MASK;
+}
+
+static inline void page_kasan_tag_set(struct page *page, u8 tag)
+{
+	page->flags &= ~(KASAN_TAG_MASK << KASAN_TAG_PGSHIFT);
+	page->flags |= (tag & KASAN_TAG_MASK) << KASAN_TAG_PGSHIFT;
+}
+
+static inline void page_kasan_tag_reset(struct page *page)
+{
+	page_kasan_tag_set(page, 0xff);
+}
+#else
+static inline u8 page_kasan_tag(const struct page *page)
+{
+	return 0xff;
+}
+
+static inline void page_kasan_tag_set(struct page *page, u8 tag) { }
+static inline void page_kasan_tag_reset(struct page *page) { }
+#endif
+
 static inline struct zone *page_zone(const struct page *page)
 {
 	return &NODE_DATA(page_to_nid(page))->node_zones[page_zonenum(page)];
@@ -1719,19 +1759,28 @@
 	return (unsigned long)val;
 }
 
+void mm_trace_rss_stat(struct mm_struct *mm, int member, long count,
+		       long value);
+
 static inline void add_mm_counter(struct mm_struct *mm, int member, long value)
 {
-	atomic_long_add(value, &mm->rss_stat.count[member]);
+	long count = atomic_long_add_return(value, &mm->rss_stat.count[member]);
+
+	mm_trace_rss_stat(mm, member, count, value);
 }
 
 static inline void inc_mm_counter(struct mm_struct *mm, int member)
 {
-	atomic_long_inc(&mm->rss_stat.count[member]);
+	long count = atomic_long_inc_return(&mm->rss_stat.count[member]);
+
+	mm_trace_rss_stat(mm, member, count, 1);
 }
 
 static inline void dec_mm_counter(struct mm_struct *mm, int member)
 {
-	atomic_long_dec(&mm->rss_stat.count[member]);
+	long count = atomic_long_dec_return(&mm->rss_stat.count[member]);
+
+	mm_trace_rss_stat(mm, member, count, -1);
 }
 
 /* Optimized variant when page is already known not to be PageAnon */
@@ -2738,6 +2787,30 @@
 					int enable) { }
 #endif
 
+#ifdef CONFIG_INIT_ON_ALLOC_DEFAULT_ON
+DECLARE_STATIC_KEY_TRUE(init_on_alloc);
+#else
+DECLARE_STATIC_KEY_FALSE(init_on_alloc);
+#endif
+static inline bool want_init_on_alloc(gfp_t flags)
+{
+	if (static_branch_unlikely(&init_on_alloc) &&
+	    !page_poisoning_enabled())
+		return true;
+	return flags & __GFP_ZERO;
+}
+
+#ifdef CONFIG_INIT_ON_FREE_DEFAULT_ON
+DECLARE_STATIC_KEY_TRUE(init_on_free);
+#else
+DECLARE_STATIC_KEY_FALSE(init_on_free);
+#endif
+static inline bool want_init_on_free(void)
+{
+	return static_branch_unlikely(&init_on_free) &&
+	       !page_poisoning_enabled();
+}
+
 #ifdef CONFIG_DEBUG_PAGEALLOC
 extern bool _debug_pagealloc_enabled;
 extern void __kernel_map_pages(struct page *page, int numpages, int enable);
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
index 3387294..cd5410d 100644
--- a/include/linux/mmc/host.h
+++ b/include/linux/mmc/host.h
@@ -199,6 +199,8 @@
 					 unsigned int max_dtr, int host_drv,
 					 int card_drv, int *drv_type);
 	void	(*hw_reset)(struct mmc_host *host);
+	void    (*enter_dbg_mode)(struct mmc_host *host);
+	void    (*exit_dbg_mode)(struct mmc_host *host);
 	void	(*card_event)(struct mmc_host *host);
 
 	/*
@@ -630,6 +632,7 @@
 	bool inlinecrypt_reset_needed;  /* Inline crypto reset */
 
 	bool crash_on_err;	/* crash the system on error */
+	bool need_hw_reset;
 	atomic_t active_reqs;
 	unsigned long		private[0] ____cacheline_aligned;
 };
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
index 03c4cf7..0be318e 100644
--- a/include/linux/mmzone.h
+++ b/include/linux/mmzone.h
@@ -144,6 +144,9 @@
 	NR_MLOCK,		/* mlock()ed pages found and moved off LRU */
 	NR_PAGETABLE,		/* used for pagetables */
 	NR_KERNEL_STACK_KB,	/* measured in KiB */
+#if IS_ENABLED(CONFIG_SHADOW_CALL_STACK)
+	NR_KERNEL_SCS_BYTES,	/* measured in bytes */
+#endif
 	/* Second 128 byte cacheline */
 	NR_BOUNCE,
 #if IS_ENABLED(CONFIG_ZSMALLOC)
@@ -183,7 +186,7 @@
 	NR_VMSCAN_IMMEDIATE,	/* Prioritise for reclaim when writeback ends */
 	NR_DIRTIED,		/* page dirtyings since bootup */
 	NR_WRITTEN,		/* page writings since bootup */
-	NR_INDIRECTLY_RECLAIMABLE_BYTES, /* measured in bytes */
+	NR_KERNEL_MISC_RECLAIMABLE,	/* reclaimable non-slab kernel pages */
 	NR_UNRECLAIMABLE_PAGES,
 	NR_VM_NODE_STAT_ITEMS
 };
diff --git a/include/linux/module.h b/include/linux/module.h
index 98e134e..b2ce73f 100644
--- a/include/linux/module.h
+++ b/include/linux/module.h
@@ -378,10 +378,12 @@
 	const s32 *unused_gpl_crcs;
 #endif
 
-#ifdef CONFIG_MODULE_SIG
-	/* Signature was verified. */
+	/*
+	 * Signature was verified. Unconditionally compiled in Android to
+	 * preserve ABI compatibility between kernels without module
+	 * signing enabled and signed modules.
+	 */
 	bool sig_ok;
-#endif
 
 	bool async_probe_requested;
 
diff --git a/include/linux/page-flags-layout.h b/include/linux/page-flags-layout.h
index 7ec86bf..1dda318 100644
--- a/include/linux/page-flags-layout.h
+++ b/include/linux/page-flags-layout.h
@@ -82,6 +82,16 @@
 #define LAST_CPUPID_WIDTH 0
 #endif
 
+#ifdef CONFIG_KASAN_SW_TAGS
+#define KASAN_TAG_WIDTH 8
+#if SECTIONS_WIDTH+NODES_WIDTH+ZONES_WIDTH+LAST_CPUPID_WIDTH+KASAN_TAG_WIDTH \
+	> BITS_PER_LONG - NR_PAGEFLAGS
+#error "KASAN: not enough bits in page flags for tag"
+#endif
+#else
+#define KASAN_TAG_WIDTH 0
+#endif
+
 /*
  * We are going to use the flags for the page to node mapping if its in
  * there.  This includes the case where there is no node, so it is implicit.
diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h
index dbd280f..358b70f 100644
--- a/include/linux/pagemap.h
+++ b/include/linux/pagemap.h
@@ -239,7 +239,7 @@
 	return mapping_gfp_mask(x) | __GFP_NORETRY | __GFP_NOWARN;
 }
 
-typedef int filler_t(struct file *, struct page *);
+typedef int filler_t(void *, struct page *);
 
 pgoff_t page_cache_next_hole(struct address_space *mapping,
 			     pgoff_t index, unsigned long max_scan);
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
index c2e5cf8..58952fa 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
@@ -55,6 +55,7 @@
 #include <linux/perf_regs.h>
 #include <linux/workqueue.h>
 #include <linux/cgroup.h>
+#include <linux/security.h>
 #include <asm/local.h>
 
 struct perf_callchain_entry {
@@ -496,6 +497,11 @@
 	unsigned int		nr_file_filters;
 };
 
+struct perf_addr_filter_range {
+	unsigned long		start;
+	unsigned long		size;
+};
+
 /**
  * enum perf_event_state - the states of an event:
  */
@@ -680,7 +686,7 @@
 	/* address range filters */
 	struct perf_addr_filters_head	addr_filters;
 	/* vma address array for file-based filders */
-	unsigned long			*addr_filters_offs;
+	struct perf_addr_filter_range	*addr_filter_ranges;
 	unsigned long			addr_filters_gen;
 
 	void (*destroy)(struct perf_event *);
@@ -709,6 +715,9 @@
 	struct perf_cgroup		*cgrp; /* cgroup event is attach to */
 #endif
 
+#ifdef CONFIG_SECURITY
+	void *security;
+#endif
 	struct list_head		sb_list;
 	/* Is this event shared with other events */
 	bool				shared;
@@ -1208,24 +1217,46 @@
 int perf_event_max_stack_handler(struct ctl_table *table, int write,
 				 void __user *buffer, size_t *lenp, loff_t *ppos);
 
+/* Access to perf_event_open(2) syscall. */
+#define PERF_SECURITY_OPEN		0
+
+/* Finer grained perf_event_open(2) access control. */
+#define PERF_SECURITY_CPU		1
+#define PERF_SECURITY_KERNEL		2
+#define PERF_SECURITY_TRACEPOINT	3
+
 static inline bool perf_paranoid_any(void)
 {
 	return sysctl_perf_event_paranoid > 2;
 }
 
-static inline bool perf_paranoid_tracepoint_raw(void)
+static inline int perf_is_paranoid(void)
 {
 	return sysctl_perf_event_paranoid > -1;
 }
 
-static inline bool perf_paranoid_cpu(void)
+static inline int perf_allow_kernel(struct perf_event_attr *attr)
 {
-	return sysctl_perf_event_paranoid > 0;
+	if (sysctl_perf_event_paranoid > 1 && !capable(CAP_SYS_ADMIN))
+		return -EACCES;
+
+	return security_perf_event_open(attr, PERF_SECURITY_KERNEL);
 }
 
-static inline bool perf_paranoid_kernel(void)
+static inline int perf_allow_cpu(struct perf_event_attr *attr)
 {
-	return sysctl_perf_event_paranoid > 1;
+	if (sysctl_perf_event_paranoid > 0 && !capable(CAP_SYS_ADMIN))
+		return -EACCES;
+
+	return security_perf_event_open(attr, PERF_SECURITY_CPU);
+}
+
+static inline int perf_allow_tracepoint(struct perf_event_attr *attr)
+{
+	if (sysctl_perf_event_paranoid > -1 && !capable(CAP_SYS_ADMIN))
+		return -EPERM;
+
+	return security_perf_event_open(attr, PERF_SECURITY_TRACEPOINT);
 }
 
 extern void perf_event_init(void);
diff --git a/include/linux/pid.h b/include/linux/pid.h
index 14a9a39..a82d2f7 100644
--- a/include/linux/pid.h
+++ b/include/linux/pid.h
@@ -3,6 +3,7 @@
 #define _LINUX_PID_H
 
 #include <linux/rculist.h>
+#include <linux/wait.h>
 
 enum pid_type
 {
@@ -60,12 +61,16 @@
 	unsigned int level;
 	/* lists of tasks that use this pid */
 	struct hlist_head tasks[PIDTYPE_MAX];
+	/* wait queue for pidfd notifications */
+	wait_queue_head_t wait_pidfd;
 	struct rcu_head rcu;
 	struct upid numbers[1];
 };
 
 extern struct pid init_struct_pid;
 
+extern const struct file_operations pidfd_fops;
+
 static inline struct pid *get_pid(struct pid *pid)
 {
 	if (pid)
diff --git a/include/linux/pm.h b/include/linux/pm.h
index e723b78..e573f95 100644
--- a/include/linux/pm.h
+++ b/include/linux/pm.h
@@ -591,6 +591,7 @@
 	bool			is_suspended:1;	/* Ditto */
 	bool			is_noirq_suspended:1;
 	bool			is_late_suspended:1;
+	bool			no_pm:1;
 	bool			early_init:1;	/* Owned by the PM core */
 	bool			direct_complete:1;	/* Owned by the PM core */
 	u32			driver_flags;
diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h
index e9a6d4d..e78b73b 100644
--- a/include/linux/power_supply.h
+++ b/include/linux/power_supply.h
@@ -361,6 +361,7 @@
 	POWER_SUPPLY_PROP_CP_ILIM,
 	POWER_SUPPLY_PROP_IRQ_STATUS,
 	POWER_SUPPLY_PROP_PARALLEL_OUTPUT_MODE,
+	POWER_SUPPLY_PROP_FG_TYPE,
 	/* Local extensions of type int64_t */
 	POWER_SUPPLY_PROP_CHARGE_COUNTER_EXT,
 	/* Properties of type `const char *' */
diff --git a/include/linux/proc_fs.h b/include/linux/proc_fs.h
index a50b1c9..0853d72 100644
--- a/include/linux/proc_fs.h
+++ b/include/linux/proc_fs.h
@@ -73,6 +73,7 @@
 						    int (*show)(struct seq_file *, void *),
 						    proc_write_t write,
 						    void *data);
+extern struct pid *tgid_pidfd_to_pid(const struct file *file);
 
 #else /* CONFIG_PROC_FS */
 
@@ -114,6 +115,11 @@
 #define proc_create_net(name, mode, parent, state_size, ops) ({NULL;})
 #define proc_create_net_single(name, mode, parent, show, data) ({NULL;})
 
+static inline struct pid *tgid_pidfd_to_pid(const struct file *file)
+{
+	return ERR_PTR(-EBADF);
+}
+
 #endif /* CONFIG_PROC_FS */
 
 #ifdef CONFIG_PROC_UID
diff --git a/include/linux/qcom-geni-se.h b/include/linux/qcom-geni-se.h
index c06d81d..3e2888a 100644
--- a/include/linux/qcom-geni-se.h
+++ b/include/linux/qcom-geni-se.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */
 /*
- * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
  */
 
 #ifndef _LINUX_QCOM_GENI_SE
@@ -50,6 +50,8 @@
  * @geni_pinctrl:	Handle to the pinctrl configuration.
  * @geni_gpio_active:	Handle to the default/active pinctrl state.
  * @geni_gpi_sleep:	Handle to the sleep pinctrl state.
+ * @num_clk_levels:	Number of valid clock levels in clk_perf_tbl.
+ * @clk_perf_tbl:	Table of clock frequency input to Serial Engine clock.
  */
 struct se_geni_rsc {
 	struct device *ctrl_dev;
@@ -69,6 +71,8 @@
 	struct pinctrl_state *geni_gpio_active;
 	struct pinctrl_state *geni_gpio_sleep;
 	int	clk_freq_out;
+	unsigned int num_clk_levels;
+	unsigned long *clk_perf_tbl;
 };
 
 #define PINCTRL_DEFAULT	"default"
@@ -326,6 +330,7 @@
 #define TX_EOT			(BIT(1))
 #define TX_SBE			(BIT(2))
 #define TX_RESET_DONE		(BIT(3))
+#define TX_GENI_CANCEL_IRQ	(BIT(14))
 
 /* SE_DMA_RX_IRQ_STAT Register fields */
 #define RX_DMA_DONE		(BIT(0))
@@ -334,9 +339,15 @@
 #define RX_RESET_DONE		(BIT(3))
 #define RX_FLUSH_DONE		(BIT(4))
 #define RX_GENI_GP_IRQ		(GENMASK(10, 5))
-#define RX_GENI_CANCEL_IRQ	(BIT(11))
+#define RX_GENI_CANCEL_IRQ	(BIT(14))
 #define RX_GENI_GP_IRQ_EXT	(GENMASK(13, 12))
 
+/* DMA DEBUG Register fields */
+#define DMA_TX_ACTIVE		(BIT(0))
+#define DMA_RX_ACTIVE		(BIT(1))
+#define DMA_TX_STATE		(GENMASK(7, 4))
+#define DMA_RX_STATE		(GENMASK(11, 8))
+
 #define DEFAULT_BUS_WIDTH	(4)
 #define DEFAULT_SE_CLK		(19200000)
 
diff --git a/include/linux/sched/sysctl.h b/include/linux/sched/sysctl.h
index fd9cfe9..1c4c5b6 100644
--- a/include/linux/sched/sysctl.h
+++ b/include/linux/sched/sysctl.h
@@ -56,6 +56,7 @@
 extern unsigned int sysctl_sched_window_stats_policy;
 extern unsigned int sysctl_sched_ravg_window_nr_ticks;
 extern unsigned int sysctl_sched_dynamic_ravg_window_enable;
+extern unsigned int sysctl_sched_prefer_spread;
 
 extern int
 walt_proc_group_thresholds_handler(struct ctl_table *table, int write,
diff --git a/include/linux/scs.h b/include/linux/scs.h
new file mode 100644
index 0000000..c5572fd
--- /dev/null
+++ b/include/linux/scs.h
@@ -0,0 +1,57 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Shadow Call Stack support.
+ *
+ * Copyright (C) 2019 Google LLC
+ */
+
+#ifndef _LINUX_SCS_H
+#define _LINUX_SCS_H
+
+#include <linux/gfp.h>
+#include <linux/sched.h>
+#include <asm/page.h>
+
+#ifdef CONFIG_SHADOW_CALL_STACK
+
+/*
+ * In testing, 1 KiB shadow stack size (i.e. 128 stack frames on a 64-bit
+ * architecture) provided ~40% safety margin on stack usage while keeping
+ * memory allocation overhead reasonable.
+ */
+#define SCS_SIZE	1024UL
+#define GFP_SCS		(GFP_KERNEL | __GFP_ZERO)
+
+/*
+ * A random number outside the kernel's virtual address space to mark the
+ * end of the shadow stack.
+ */
+#define SCS_END_MAGIC	0xaf0194819b1635f6UL
+
+#define task_scs(tsk)	(task_thread_info(tsk)->shadow_call_stack)
+
+static inline void task_set_scs(struct task_struct *tsk, void *s)
+{
+	task_scs(tsk) = s;
+}
+
+extern void scs_init(void);
+extern void scs_task_reset(struct task_struct *tsk);
+extern int scs_prepare(struct task_struct *tsk, int node);
+extern bool scs_corrupted(struct task_struct *tsk);
+extern void scs_release(struct task_struct *tsk);
+
+#else /* CONFIG_SHADOW_CALL_STACK */
+
+#define task_scs(tsk)	NULL
+
+static inline void task_set_scs(struct task_struct *tsk, void *s) {}
+static inline void scs_init(void) {}
+static inline void scs_task_reset(struct task_struct *tsk) {}
+static inline int scs_prepare(struct task_struct *tsk, int node) { return 0; }
+static inline bool scs_corrupted(struct task_struct *tsk) { return false; }
+static inline void scs_release(struct task_struct *tsk) {}
+
+#endif /* CONFIG_SHADOW_CALL_STACK */
+
+#endif /* _LINUX_SCS_H */
diff --git a/include/linux/security.h b/include/linux/security.h
index c115dd2..fee252f 100644
--- a/include/linux/security.h
+++ b/include/linux/security.h
@@ -1853,5 +1853,42 @@
 { }
 #endif /* CONFIG_SECURITY */
 
-#endif /* ! __LINUX_SECURITY_H */
+#ifdef CONFIG_PERF_EVENTS
+struct perf_event_attr;
+struct perf_event;
 
+#ifdef CONFIG_SECURITY
+extern int security_perf_event_open(struct perf_event_attr *attr, int type);
+extern int security_perf_event_alloc(struct perf_event *event);
+extern void security_perf_event_free(struct perf_event *event);
+extern int security_perf_event_read(struct perf_event *event);
+extern int security_perf_event_write(struct perf_event *event);
+#else
+static inline int security_perf_event_open(struct perf_event_attr *attr,
+					   int type)
+{
+	return 0;
+}
+
+static inline int security_perf_event_alloc(struct perf_event *event)
+{
+	return 0;
+}
+
+static inline void security_perf_event_free(struct perf_event *event)
+{
+}
+
+static inline int security_perf_event_read(struct perf_event *event)
+{
+	return 0;
+}
+
+static inline int security_perf_event_write(struct perf_event *event)
+{
+	return 0;
+}
+#endif /* CONFIG_SECURITY */
+#endif /* CONFIG_PERF_EVENTS */
+
+#endif /* ! __LINUX_SECURITY_H */
diff --git a/include/linux/slab.h b/include/linux/slab.h
index d639341..1409fae 100644
--- a/include/linux/slab.h
+++ b/include/linux/slab.h
@@ -297,11 +297,42 @@
 #define SLAB_OBJ_MIN_SIZE      (KMALLOC_MIN_SIZE < 16 ? \
                                (KMALLOC_MIN_SIZE) : 16)
 
-#ifndef CONFIG_SLOB
-extern struct kmem_cache *kmalloc_caches[KMALLOC_SHIFT_HIGH + 1];
+/*
+ * Whenever changing this, take care of that kmalloc_type() and
+ * create_kmalloc_caches() still work as intended.
+ */
+enum kmalloc_cache_type {
+	KMALLOC_NORMAL = 0,
+	KMALLOC_RECLAIM,
 #ifdef CONFIG_ZONE_DMA
-extern struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1];
+	KMALLOC_DMA,
 #endif
+	NR_KMALLOC_TYPES
+};
+
+#ifndef CONFIG_SLOB
+extern struct kmem_cache *
+kmalloc_caches[NR_KMALLOC_TYPES][KMALLOC_SHIFT_HIGH + 1];
+
+static __always_inline enum kmalloc_cache_type kmalloc_type(gfp_t flags)
+{
+#ifdef CONFIG_ZONE_DMA
+	/*
+	 * The most common case is KMALLOC_NORMAL, so test for it
+	 * with a single branch for both flags.
+	 */
+	if (likely((flags & (__GFP_DMA | __GFP_RECLAIMABLE)) == 0))
+		return KMALLOC_NORMAL;
+
+	/*
+	 * At least one of the flags has to be set. If both are, __GFP_DMA
+	 * is more important.
+	 */
+	return flags & __GFP_DMA ? KMALLOC_DMA : KMALLOC_RECLAIM;
+#else
+	return flags & __GFP_RECLAIMABLE ? KMALLOC_RECLAIM : KMALLOC_NORMAL;
+#endif
+}
 
 /*
  * Figure out which kmalloc slab an allocation of a certain size
@@ -415,7 +446,7 @@
 {
 	void *ret = kmem_cache_alloc(s, flags);
 
-	kasan_kmalloc(s, ret, size, flags);
+	ret = kasan_kmalloc(s, ret, size, flags);
 	return ret;
 }
 
@@ -426,7 +457,7 @@
 {
 	void *ret = kmem_cache_alloc_node(s, gfpflags, node);
 
-	kasan_kmalloc(s, ret, size, gfpflags);
+	ret = kasan_kmalloc(s, ret, size, gfpflags);
 	return ret;
 }
 #endif /* CONFIG_TRACING */
@@ -503,18 +534,20 @@
 static __always_inline void *kmalloc(size_t size, gfp_t flags)
 {
 	if (__builtin_constant_p(size)) {
+#ifndef CONFIG_SLOB
+		unsigned int index;
+#endif
 		if (size > KMALLOC_MAX_CACHE_SIZE)
 			return kmalloc_large(size, flags);
 #ifndef CONFIG_SLOB
-		if (!(flags & GFP_DMA)) {
-			unsigned int index = kmalloc_index(size);
+		index = kmalloc_index(size);
 
-			if (!index)
-				return ZERO_SIZE_PTR;
+		if (!index)
+			return ZERO_SIZE_PTR;
 
-			return kmem_cache_alloc_trace(kmalloc_caches[index],
-					flags, size);
-		}
+		return kmem_cache_alloc_trace(
+				kmalloc_caches[kmalloc_type(flags)][index],
+				flags, size);
 #endif
 	}
 	return __kmalloc(size, flags);
@@ -544,13 +577,14 @@
 {
 #ifndef CONFIG_SLOB
 	if (__builtin_constant_p(size) &&
-		size <= KMALLOC_MAX_CACHE_SIZE && !(flags & GFP_DMA)) {
+		size <= KMALLOC_MAX_CACHE_SIZE) {
 		unsigned int i = kmalloc_index(size);
 
 		if (!i)
 			return ZERO_SIZE_PTR;
 
-		return kmem_cache_alloc_node_trace(kmalloc_caches[i],
+		return kmem_cache_alloc_node_trace(
+				kmalloc_caches[kmalloc_type(flags)][i],
 						flags, node, size);
 	}
 #endif
diff --git a/include/linux/slab_def.h b/include/linux/slab_def.h
index 3485c58..9a5eafb 100644
--- a/include/linux/slab_def.h
+++ b/include/linux/slab_def.h
@@ -104,4 +104,17 @@
 		return object;
 }
 
+/*
+ * We want to avoid an expensive divide : (offset / cache->size)
+ *   Using the fact that size is a constant for a particular cache,
+ *   we can replace (offset / cache->size) by
+ *   reciprocal_divide(offset, cache->reciprocal_buffer_size)
+ */
+static inline unsigned int obj_to_index(const struct kmem_cache *cache,
+					const struct page *page, void *obj)
+{
+	u32 offset = (obj - page->s_mem);
+	return reciprocal_divide(offset, cache->reciprocal_buffer_size);
+}
+
 #endif	/* _LINUX_SLAB_DEF_H */
diff --git a/include/linux/soc/qcom/smd-rpm.h b/include/linux/soc/qcom/smd-rpm.h
index fb24896..500bc7e 100644
--- a/include/linux/soc/qcom/smd-rpm.h
+++ b/include/linux/soc/qcom/smd-rpm.h
@@ -34,6 +34,8 @@
 #define QCOM_SMD_RPM_AGGR_CLK	0x72676761
 #define QCOM_SMD_RPM_QUP_CLK    0x00707571
 #define QCOM_SMD_RPM_MMXI_CLK   0x69786D6D
+#define QCOM_SMD_RPM_HWKM_CLK	0x6D6B7768
+#define QCOM_SMD_RPM_PKA_CLK	0x616B70
 
 int qcom_rpm_smd_write(struct qcom_smd_rpm *rpm,
 		       int state,
diff --git a/include/linux/string.h b/include/linux/string.h
index f58e1ef..3c32b2f 100644
--- a/include/linux/string.h
+++ b/include/linux/string.h
@@ -205,6 +205,8 @@
 extern ssize_t memory_read_from_buffer(void *to, size_t count, loff_t *ppos,
 				       const void *from, size_t available);
 
+int ptr_to_hashval(const void *ptr, unsigned long *hashval_out);
+
 /**
  * strstarts - does @str start with @prefix?
  * @str: string to examine
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h
index 2ff814c..8e5b2c6d 100644
--- a/include/linux/syscalls.h
+++ b/include/linux/syscalls.h
@@ -850,6 +850,7 @@
 				struct timex __user *tx);
 asmlinkage long sys_syncfs(int fd);
 asmlinkage long sys_setns(int fd, int nstype);
+asmlinkage long sys_pidfd_open(pid_t pid, unsigned int flags);
 asmlinkage long sys_sendmmsg(int fd, struct mmsghdr __user *msg,
 			     unsigned int vlen, unsigned flags);
 asmlinkage long sys_process_vm_readv(pid_t pid,
@@ -906,6 +907,9 @@
 			  unsigned mask, struct statx __user *buffer);
 asmlinkage long sys_rseq(struct rseq __user *rseq, uint32_t rseq_len,
 			 int flags, uint32_t sig);
+asmlinkage long sys_pidfd_send_signal(int pidfd, int sig,
+				       siginfo_t __user *info,
+				       unsigned int flags);
 
 /*
  * Architecture-specific system calls
diff --git a/include/linux/uaccess.h b/include/linux/uaccess.h
index efe79c1..249ceef 100644
--- a/include/linux/uaccess.h
+++ b/include/linux/uaccess.h
@@ -267,10 +267,12 @@
 	probe_kernel_read(&retval, addr, sizeof(retval))
 
 #ifndef user_access_begin
-#define user_access_begin() do { } while (0)
+#define user_access_begin(type, ptr, len) access_ok(type, ptr, len)
 #define user_access_end() do { } while (0)
 #define unsafe_get_user(x, ptr, err) do { if (unlikely(__get_user(x, ptr))) goto err; } while (0)
 #define unsafe_put_user(x, ptr, err) do { if (unlikely(__put_user(x, ptr))) goto err; } while (0)
+static inline unsigned long user_access_save(void) { return 0UL; }
+static inline void user_access_restore(unsigned long flags) { }
 #endif
 
 #ifdef CONFIG_HARDENED_USERCOPY
diff --git a/include/linux/unicode.h b/include/linux/unicode.h
new file mode 100644
index 0000000..990aa97
--- /dev/null
+++ b/include/linux/unicode.h
@@ -0,0 +1,33 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _LINUX_UNICODE_H
+#define _LINUX_UNICODE_H
+
+#include <linux/init.h>
+#include <linux/dcache.h>
+
+struct unicode_map {
+	const char *charset;
+	int version;
+};
+
+int utf8_validate(const struct unicode_map *um, const struct qstr *str);
+
+int utf8_strncmp(const struct unicode_map *um,
+		 const struct qstr *s1, const struct qstr *s2);
+
+int utf8_strncasecmp(const struct unicode_map *um,
+		 const struct qstr *s1, const struct qstr *s2);
+int utf8_strncasecmp_folded(const struct unicode_map *um,
+			    const struct qstr *cf,
+			    const struct qstr *s1);
+
+int utf8_normalize(const struct unicode_map *um, const struct qstr *str,
+		   unsigned char *dest, size_t dlen);
+
+int utf8_casefold(const struct unicode_map *um, const struct qstr *str,
+		  unsigned char *dest, size_t dlen);
+
+struct unicode_map *utf8_load(const char *version);
+void utf8_unload(struct unicode_map *um);
+
+#endif /* _LINUX_UNICODE_H */
diff --git a/include/linux/usb/usb_qdss.h b/include/linux/usb/usb_qdss.h
index d42bd54..ae5cfa3 100644
--- a/include/linux/usb/usb_qdss.h
+++ b/include/linux/usb/usb_qdss.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
 /*
- * Copyright (c) 2012-2013, 2017-2019 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2013, 2017-2020 The Linux Foundation. All rights reserved.
  */
 
 #ifndef __LINUX_USB_QDSS_H
@@ -20,6 +20,7 @@
 	struct scatterlist *sg;
 	unsigned int num_sgs;
 	unsigned int num_mapped_sgs;
+	struct completion write_done;
 };
 
 struct usb_qdss_ch {
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 1495cd7..32b5612 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -46,6 +46,12 @@
 /* Indicate backport support for DH IE creation/update*/
 #define CFG80211_EXTERNAL_DH_UPDATE_SUPPORT 1
 
+/* Indicate backport support for supported AKM advertisement per interface*/
+#define CFG80211_IFTYPE_AKM_SUITES_SUPPORT 1
+
+/* Indicate backport support for key configuration for Beacon protection*/
+#define CFG80211_BIGTK_CONFIGURATION_SUPPORT 1
+
 /**
  * DOC: Introduction
  *
@@ -3015,6 +3021,8 @@
  * @set_default_key: set the default key on an interface
  *
  * @set_default_mgmt_key: set the default management frame key on an interface
+
+ * @set_default_beacon_key: set the default Beacon frame key on an interface
  *
  * @set_rekey_data: give the data necessary for GTK rekeying to the driver
  *
@@ -3337,6 +3345,9 @@
 	int	(*set_default_mgmt_key)(struct wiphy *wiphy,
 					struct net_device *netdev,
 					u8 key_index);
+	int	(*set_default_beacon_key)(struct wiphy *wiphy,
+					  struct net_device *netdev,
+					  u8 key_index);
 
 	int	(*start_ap)(struct wiphy *wiphy, struct net_device *dev,
 			    struct cfg80211_ap_settings *settings);
@@ -3984,6 +3995,21 @@
 };
 
 /**
+ * struct wiphy_iftype_akm_suites - This structure encapsulates supported akm
+ * suites for interface types defined in @iftypes_mask. Each type in the
+ * @iftypes_mask must be unique across all instances of iftype_akm_suites.
+ *
+ * @iftypes_mask: bitmask of interfaces types
+ * @akm_suites: points to an array of supported akm suites
+ * @n_akm_suites: number of supported AKM suites
+ */
+struct wiphy_iftype_akm_suites {
+	u16 iftypes_mask;
+	const u32 *akm_suites;
+	int n_akm_suites;
+};
+
+/**
  * struct wiphy - wireless hardware description
  * @reg_notifier: the driver's regulatory notification callback,
  *	note that if your driver uses wiphy_apply_custom_regulatory()
@@ -3995,6 +4021,12 @@
  * @signal_type: signal type reported in &struct cfg80211_bss.
  * @cipher_suites: supported cipher suites
  * @n_cipher_suites: number of supported cipher suites
+ * @iftype_akm_suites: array of supported akm suites info per interface type.
+ *	Note that the bits in @iftypes_mask inside this structure cannot
+ *	overlap (i.e. only one occurrence of each type is allowed across all
+ *	instances of iftype_akm_suites).
+ * @num_iftype_akm_suites: number of interface types for which supported akm
+ *	suites are specified separately.
  * @retry_short: Retry limit for short frames (dot11ShortRetryLimit)
  * @retry_long: Retry limit for long frames (dot11LongRetryLimit)
  * @frag_threshold: Fragmentation threshold (dot11FragmentationThreshold);
@@ -4198,6 +4230,9 @@
 	int n_cipher_suites;
 	const u32 *cipher_suites;
 
+	const struct wiphy_iftype_akm_suites *iftype_akm_suites;
+	unsigned int num_iftype_akm_suites;
+
 	u8 retry_short;
 	u8 retry_long;
 	u32 frag_threshold;
diff --git a/include/net/cnss_nl.h b/include/net/cnss_nl.h
index 5afe37e7..9e3e49a 100644
--- a/include/net/cnss_nl.h
+++ b/include/net/cnss_nl.h
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
-/* Copyright (c) 2018-2019, The Linux Foundation. All rights reserved. */
+/* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved. */
 
 #ifndef _NET_CNSS_GENETLINK_H_
 #define _NET_CNSS_GENETLINK_H_
@@ -17,6 +17,10 @@
  * @CLD80211_ATTR_META_DATA: Embed meta data for above data. This will help
  * wlan driver to peek into request message packet without opening up definition
  * of complete request message.
+ * @CLD80211_ATTR_CMD: cld80211 vendor subcommand in this attribute
+ * @CLD80211_ATTR_CMD_TAG_DATA: cld80211 vendor subcommand data is present in
+ * this attribute. It is a nested attribute with sub attributes of specified
+ * vendor sub command.
  *
  * Any new message in future can be added as another attribute
  */
@@ -24,6 +28,8 @@
 	CLD80211_ATTR_VENDOR_DATA = 1,
 	CLD80211_ATTR_DATA,
 	CLD80211_ATTR_META_DATA,
+	CLD80211_ATTR_CMD,
+	CLD80211_ATTR_CMD_TAG_DATA,
 	/* add new attributes above here */
 
 	__CLD80211_ATTR_AFTER_LAST,
diff --git a/include/net/tcp.h b/include/net/tcp.h
index 9275834..743412e 100644
--- a/include/net/tcp.h
+++ b/include/net/tcp.h
@@ -148,6 +148,9 @@
 						 * most likely due to retrans in 3WHS.
 						 */
 
+/* Number of full MSS to receive before Acking RFC2581 */
+#define TCP_DELACK_SEG          1
+
 #define TCP_RESOURCE_PROBE_INTERVAL ((unsigned)(HZ/2U)) /* Maximal interval between probes
 					                 * for local resources.
 					                 */
@@ -251,6 +254,11 @@
 #define TCP_RACK_NO_DUPTHRESH    0x4 /* Do not use DUPACK threshold in RACK */
 
 extern atomic_long_t tcp_memory_allocated;
+
+/* sysctl variables for controlling various tcp parameters */
+extern int sysctl_tcp_delack_seg;
+extern int sysctl_tcp_use_userconfig;
+
 extern struct percpu_counter tcp_sockets_allocated;
 extern unsigned long tcp_memory_pressure;
 
@@ -345,6 +353,14 @@
 			struct pipe_inode_info *pipe, size_t len,
 			unsigned int flags);
 
+/* sysctl master controller */
+extern int tcp_use_userconfig_sysctl_handler(struct ctl_table *table,
+				int write, void __user *buffer, size_t *length,
+				loff_t *ppos);
+extern int tcp_proc_delayed_ack_control(struct ctl_table *table, int write,
+				void __user *buffer, size_t *length,
+				loff_t *ppos);
+
 void tcp_enter_quickack_mode(struct sock *sk, unsigned int max_quickacks);
 static inline void tcp_dec_quickack_mode(struct sock *sk,
 					 const unsigned int pkts)
diff --git a/include/net/virt_wifi.h b/include/net/virt_wifi.h
new file mode 100644
index 0000000..343e739
--- /dev/null
+++ b/include/net/virt_wifi.h
@@ -0,0 +1,25 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/* include/net/virt_wifi.h
+ *
+ * Define the extension interface for the network data simulation
+ *
+ * Copyright (C) 2019 Google, Inc.
+ *
+ * Author: lesl@google.com
+ */
+#ifndef __VIRT_WIFI_H
+#define __VIRT_WIFI_H
+
+struct virt_wifi_network_simulation {
+	void (*notify_device_open)(struct net_device *dev);
+	void (*notify_device_stop)(struct net_device *dev);
+	void (*notify_scan_trigger)(struct wiphy *wiphy,
+				    struct cfg80211_scan_request *request);
+	int (*generate_virt_scan_result)(struct wiphy *wiphy);
+};
+
+int virt_wifi_register_network_simulation(
+	    struct virt_wifi_network_simulation *ops);
+int virt_wifi_unregister_network_simulation(void);
+#endif
+
diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h
index fe73e74..20c5d80 100644
--- a/include/scsi/scsi_host.h
+++ b/include/scsi/scsi_host.h
@@ -484,6 +484,9 @@
 	 */
 	unsigned int cmd_size;
 	struct scsi_host_cmd_pool *cmd_pool;
+
+	/* Delay for runtime autosuspend */
+	int rpm_autosuspend_delay;
 };
 
 /*
diff --git a/include/soc/qcom/icnss.h b/include/soc/qcom/icnss.h
index d6df17b..a5aeb97 100644
--- a/include/soc/qcom/icnss.h
+++ b/include/soc/qcom/icnss.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
 /*
- * Copyright (c) 2015-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2015-2020, The Linux Foundation. All rights reserved.
  */
 #ifndef _ICNSS_WLAN_H_
 #define _ICNSS_WLAN_H_
@@ -18,6 +18,12 @@
 enum icnss_uevent {
 	ICNSS_UEVENT_FW_CRASHED,
 	ICNSS_UEVENT_FW_DOWN,
+	ICNSS_UEVENT_HANG_DATA,
+};
+
+struct icnss_uevent_hang_data {
+	void *hang_event_data;
+	uint16_t hang_event_data_len;
 };
 
 struct icnss_uevent_fw_down_data {
@@ -134,6 +140,8 @@
 extern struct iommu_domain *icnss_smmu_get_domain(struct device *dev);
 extern int icnss_smmu_map(struct device *dev, phys_addr_t paddr,
 			  uint32_t *iova_addr, size_t size);
+extern int icnss_smmu_unmap(struct device *dev,
+			    uint32_t iova_addr, size_t size);
 extern unsigned int icnss_socinfo_get_serial_number(struct device *dev);
 extern bool icnss_is_qmi_disable(struct device *dev);
 extern bool icnss_is_fw_ready(void);
diff --git a/include/soc/qcom/icnss2.h b/include/soc/qcom/icnss2.h
index fa65926..fca498f 100644
--- a/include/soc/qcom/icnss2.h
+++ b/include/soc/qcom/icnss2.h
@@ -69,6 +69,14 @@
 	u16 reg_offset;
 };
 
+struct icnss_shadow_reg_v2_cfg {
+	u32 addr;
+};
+
+struct icnss_rri_over_ddr_cfg {
+	u32 base_addr_low;
+	u32 base_addr_high;
+};
 /* CE configuration to target */
 struct icnss_wlan_enable_cfg {
 	u32 num_ce_tgt_cfg;
@@ -77,6 +85,10 @@
 	struct ce_svc_pipe_cfg *ce_svc_cfg;
 	u32 num_shadow_reg_cfg;
 	struct icnss_shadow_reg_cfg *shadow_reg_cfg;
+	u32 num_shadow_reg_v2_cfg;
+	struct icnss_shadow_reg_v2_cfg *shadow_reg_v2_cfg;
+	bool rri_over_ddr_cfg_valid;
+	struct icnss_rri_over_ddr_cfg rri_over_ddr_cfg;
 };
 
 /* driver modes */
diff --git a/include/soc/qcom/mpm.h b/include/soc/qcom/mpm.h
index 835c94b..43bed05 100644
--- a/include/soc/qcom/mpm.h
+++ b/include/soc/qcom/mpm.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
 /*
- * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2018-2020, The Linux Foundation. All rights reserved.
  */
 
 #ifndef __QCOM_MPM_H__
@@ -15,4 +15,5 @@
 };
 
 extern const struct mpm_pin mpm_bengal_gic_chip_data[];
+extern const struct mpm_pin mpm_scuba_gic_chip_data[];
 #endif /* __QCOM_MPM_H__ */
diff --git a/include/soc/qcom/scm.h b/include/soc/qcom/scm.h
index a8d1b15..8f1a419b 100644
--- a/include/soc/qcom/scm.h
+++ b/include/soc/qcom/scm.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
 /*
- * Copyright (c) 2010-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2010-2020, The Linux Foundation. All rights reserved.
  */
 
 #ifndef __MACH_SCM_H
@@ -104,7 +104,6 @@
 extern u32 scm_io_read(phys_addr_t address);
 extern int scm_io_write(phys_addr_t address, u32 val);
 extern bool scm_is_secure_device(void);
-extern int scm_enable_mem_protection(void);
 extern int scm_get_feat_version(u32 feat);
 extern bool is_scm_armv8(void);
 
@@ -167,9 +166,5 @@
 	return false;
 }
 
-static inline int scm_enable_mem_protection(void)
-{
-	return 0;
-}
 #endif
 #endif
diff --git a/include/trace/events/f2fs.h b/include/trace/events/f2fs.h
index bd334ec..bcd512b 100644
--- a/include/trace/events/f2fs.h
+++ b/include/trace/events/f2fs.h
@@ -1029,8 +1029,8 @@
 	),
 
 	TP_fast_assign(
-		__entry->dev		= page->mapping->host->i_sb->s_dev;
-		__entry->ino		= page->mapping->host->i_ino;
+		__entry->dev		= page_file_mapping(page)->host->i_sb->s_dev;
+		__entry->ino		= page_file_mapping(page)->host->i_ino;
 		__entry->index		= page->index;
 		__entry->old_blkaddr	= fio->old_blkaddr;
 		__entry->new_blkaddr	= fio->new_blkaddr;
@@ -1217,10 +1217,11 @@
 	),
 
 	TP_fast_assign(
-		__entry->dev	= page->mapping->host->i_sb->s_dev;
-		__entry->ino	= page->mapping->host->i_ino;
+		__entry->dev	= page_file_mapping(page)->host->i_sb->s_dev;
+		__entry->ino	= page_file_mapping(page)->host->i_ino;
 		__entry->type	= type;
-		__entry->dir	= S_ISDIR(page->mapping->host->i_mode);
+		__entry->dir	=
+			S_ISDIR(page_file_mapping(page)->host->i_mode);
 		__entry->index	= page->index;
 		__entry->dirty	= PageDirty(page);
 		__entry->uptodate = PageUptodate(page);
diff --git a/include/trace/events/kmem.h b/include/trace/events/kmem.h
index d660982..1d5b27d 100644
--- a/include/trace/events/kmem.h
+++ b/include/trace/events/kmem.h
@@ -851,6 +851,54 @@
 
 	TP_ARGS(sec_id, num, va, pa, len)
 	);
+
+/*
+ * Required for uniquely and securely identifying mm in rss_stat tracepoint.
+ */
+#ifndef __PTR_TO_HASHVAL
+static unsigned int __maybe_unused mm_ptr_to_hash(const void *ptr)
+{
+	int ret;
+	unsigned long hashval;
+
+	ret = ptr_to_hashval(ptr, &hashval);
+	if (ret)
+		return 0;
+
+	/* The hashed value is only 32-bit */
+	return (unsigned int)hashval;
+}
+#define __PTR_TO_HASHVAL
+#endif
+
+TRACE_EVENT(rss_stat,
+
+	TP_PROTO(struct mm_struct *mm,
+		int member,
+		long count),
+
+	TP_ARGS(mm, member, count),
+
+	TP_STRUCT__entry(
+		__field(unsigned int, mm_id)
+		__field(unsigned int, curr)
+		__field(int, member)
+		__field(long, size)
+	),
+
+	TP_fast_assign(
+		__entry->mm_id = mm_ptr_to_hash(mm);
+		__entry->curr = !!(current->mm == mm);
+		__entry->member = member;
+		__entry->size = (count << PAGE_SHIFT);
+	),
+
+	TP_printk("mm_id=%u curr=%d member=%d size=%ldB",
+		__entry->mm_id,
+		__entry->curr,
+		__entry->member,
+		__entry->size)
+	);
 #endif /* _TRACE_KMEM_H */
 
 /* This part must be outside protection */
diff --git a/include/trace/events/namei.h b/include/trace/events/namei.h
new file mode 100644
index 0000000..e8c3e21
--- /dev/null
+++ b/include/trace/events/namei.h
@@ -0,0 +1,42 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM namei
+
+#if !defined(_TRACE_INODEPATH_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_INODEPATH_H
+
+#include <linux/types.h>
+#include <linux/tracepoint.h>
+#include <linux/mm.h>
+#include <linux/memcontrol.h>
+#include <linux/device.h>
+#include <linux/kdev_t.h>
+
+TRACE_EVENT(inodepath,
+		TP_PROTO(struct inode *inode, char *path),
+
+		TP_ARGS(inode, path),
+
+		TP_STRUCT__entry(
+			/* dev_t and ino_t are arch dependent bit width
+			 * so just use 64-bit
+			 */
+			__field(unsigned long, ino)
+			__field(unsigned long, dev)
+			__string(path, path)
+		),
+
+		TP_fast_assign(
+			__entry->ino = inode->i_ino;
+			__entry->dev = inode->i_sb->s_dev;
+			__assign_str(path, path);
+		),
+
+		TP_printk("dev %d:%d ino=%lu path=%s",
+			MAJOR(__entry->dev), MINOR(__entry->dev),
+			__entry->ino, __get_str(path))
+);
+#endif /* _TRACE_INODEPATH_H */
+
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/include/trace/events/sched.h b/include/trace/events/sched.h
index d19200e..56e7783 100644
--- a/include/trace/events/sched.h
+++ b/include/trace/events/sched.h
@@ -278,11 +278,11 @@
 		unsigned long group_mask, int busiest_nr_running,
 		unsigned long imbalance, unsigned int env_flags, int ld_moved,
 		unsigned int balance_interval, int active_balance,
-		int overutilized),
+		int overutilized, int prefer_spread),
 
 	TP_ARGS(cpu, idle, balance, group_mask, busiest_nr_running,
 		imbalance, env_flags, ld_moved, balance_interval,
-		active_balance, overutilized),
+		active_balance, overutilized, prefer_spread),
 
 	TP_STRUCT__entry(
 		__field(int,                    cpu)
@@ -296,6 +296,7 @@
 		__field(unsigned int,           balance_interval)
 		__field(int,                    active_balance)
 		__field(int,                    overutilized)
+		__field(int,                    prefer_spread)
 	),
 
 	TP_fast_assign(
@@ -310,9 +311,10 @@
 		__entry->balance_interval       = balance_interval;
 		__entry->active_balance		= active_balance;
 		__entry->overutilized		= overutilized;
+		__entry->prefer_spread		= prefer_spread;
 	),
 
-	TP_printk("cpu=%d state=%s balance=%d group=%#lx busy_nr=%d imbalance=%ld flags=%#x ld_moved=%d bal_int=%d active_balance=%d sd_overutilized=%d",
+	TP_printk("cpu=%d state=%s balance=%d group=%#lx busy_nr=%d imbalance=%ld flags=%#x ld_moved=%d bal_int=%d active_balance=%d sd_overutilized=%d prefer_spread=%d",
 		__entry->cpu,
 		__entry->idle == CPU_IDLE ? "idle" :
 		(__entry->idle == CPU_NEWLY_IDLE ? "newly_idle" : "busy"),
@@ -320,7 +322,7 @@
 		__entry->group_mask, __entry->busiest_nr_running,
 		__entry->imbalance, __entry->env_flags, __entry->ld_moved,
 		__entry->balance_interval, __entry->active_balance,
-		__entry->overutilized)
+		__entry->overutilized, __entry->prefer_spread)
 );
 
 TRACE_EVENT(sched_load_balance_nohz_kick,
@@ -1213,7 +1215,7 @@
 TRACE_EVENT(sched_task_util,
 
 	TP_PROTO(struct task_struct *p, unsigned long candidates,
-		int best_energy_cpu, bool sync, bool need_idle, int fastpath,
+		int best_energy_cpu, bool sync, int need_idle, int fastpath,
 		bool placement_boost, u64 start_t,
 		bool stune_boosted, bool is_rtg, bool rtg_skip_min,
 		int start_cpu),
@@ -1230,7 +1232,7 @@
 		__field(int,		prev_cpu)
 		__field(int,		best_energy_cpu)
 		__field(bool,		sync)
-		__field(bool,		need_idle)
+		__field(int,		need_idle)
 		__field(int,		fastpath)
 		__field(int,		placement_boost)
 		__field(int,		rtg_cpu)
diff --git a/include/uapi/asm-generic/unistd.h b/include/uapi/asm-generic/unistd.h
index df4bedb..be311b9 100644
--- a/include/uapi/asm-generic/unistd.h
+++ b/include/uapi/asm-generic/unistd.h
@@ -736,9 +736,13 @@
 __SC_COMP(__NR_io_pgetevents, sys_io_pgetevents, compat_sys_io_pgetevents)
 #define __NR_rseq 293
 __SYSCALL(__NR_rseq, sys_rseq)
+#define __NR_pidfd_send_signal 424
+__SYSCALL(__NR_pidfd_send_signal, sys_pidfd_send_signal)
+#define __NR_pidfd_open 434
+__SYSCALL(__NR_pidfd_open, sys_pidfd_open)
 
 #undef __NR_syscalls
-#define __NR_syscalls 294
+#define __NR_syscalls 435
 
 /*
  * 32 bit systems traditionally used different
diff --git a/include/uapi/drm/virtgpu_drm.h b/include/uapi/drm/virtgpu_drm.h
index 9a781f0..f06a789 100644
--- a/include/uapi/drm/virtgpu_drm.h
+++ b/include/uapi/drm/virtgpu_drm.h
@@ -47,6 +47,13 @@
 #define DRM_VIRTGPU_WAIT     0x08
 #define DRM_VIRTGPU_GET_CAPS  0x09
 
+#define VIRTGPU_EXECBUF_FENCE_FD_IN	0x01
+#define VIRTGPU_EXECBUF_FENCE_FD_OUT	0x02
+#define VIRTGPU_EXECBUF_FLAGS  (\
+		VIRTGPU_EXECBUF_FENCE_FD_IN |\
+		VIRTGPU_EXECBUF_FENCE_FD_OUT |\
+		0)
+
 struct drm_virtgpu_map {
 	__u64 offset; /* use for mmap system call */
 	__u32 handle;
@@ -54,12 +61,12 @@
 };
 
 struct drm_virtgpu_execbuffer {
-	__u32		flags;		/* for future use */
+	__u32 flags;
 	__u32 size;
 	__u64 command; /* void* */
 	__u64 bo_handles;
 	__u32 num_bo_handles;
-	__u32 pad;
+	__s32 fence_fd; /* in/out fence fd (see VIRTGPU_EXECBUF_FENCE_FD_IN/OUT) */
 };
 
 #define VIRTGPU_PARAM_3D_FEATURES 1 /* do we have 3D features in the hw */
@@ -137,7 +144,7 @@
 	DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_MAP, struct drm_virtgpu_map)
 
 #define DRM_IOCTL_VIRTGPU_EXECBUFFER \
-	DRM_IOW(DRM_COMMAND_BASE + DRM_VIRTGPU_EXECBUFFER,\
+	DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_EXECBUFFER,\
 		struct drm_virtgpu_execbuffer)
 
 #define DRM_IOCTL_VIRTGPU_GETPARAM \
diff --git a/include/uapi/linux/android/binderfs.h b/include/uapi/linux/android/binderfs.h
new file mode 100644
index 0000000..65b2efd
--- /dev/null
+++ b/include/uapi/linux/android/binderfs.h
@@ -0,0 +1,35 @@
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+/*
+ * Copyright (C) 2018 Canonical Ltd.
+ *
+ */
+
+#ifndef _UAPI_LINUX_BINDER_CTL_H
+#define _UAPI_LINUX_BINDER_CTL_H
+
+#include <linux/android/binder.h>
+#include <linux/types.h>
+#include <linux/ioctl.h>
+
+#define BINDERFS_MAX_NAME 255
+
+/**
+ * struct binderfs_device - retrieve information about a new binder device
+ * @name:   the name to use for the new binderfs binder device
+ * @major:  major number allocated for binderfs binder devices
+ * @minor:  minor number allocated for the new binderfs binder device
+ *
+ */
+struct binderfs_device {
+	char name[BINDERFS_MAX_NAME + 1];
+	__u8 major;
+	__u8 minor;
+};
+
+/**
+ * Allocate a new binder device.
+ */
+#define BINDER_CTL_ADD _IOWR('b', 1, struct binderfs_device)
+
+#endif /* _UAPI_LINUX_BINDER_CTL_H */
+
diff --git a/include/uapi/linux/dma-buf.h b/include/uapi/linux/dma-buf.h
index ba9d051..97d7573 100644
--- a/include/uapi/linux/dma-buf.h
+++ b/include/uapi/linux/dma-buf.h
@@ -37,7 +37,10 @@
 #define DMA_BUF_SYNC_VALID_FLAGS_MASK \
 	(DMA_BUF_SYNC_RW | DMA_BUF_SYNC_END | DMA_BUF_SYNC_USER_MAPPED)
 
+#define DMA_BUF_NAME_LEN	32
+
 #define DMA_BUF_BASE		'b'
 #define DMA_BUF_IOCTL_SYNC	_IOW(DMA_BUF_BASE, 0, struct dma_buf_sync)
+#define DMA_BUF_SET_NAME	_IOW(DMA_BUF_BASE, 1, const char *)
 
 #endif
diff --git a/include/uapi/linux/fs.h b/include/uapi/linux/fs.h
index 245f38c..6eb8e9f 100644
--- a/include/uapi/linux/fs.h
+++ b/include/uapi/linux/fs.h
@@ -353,11 +353,13 @@
 #define FS_TOPDIR_FL			0x00020000 /* Top of directory hierarchies*/
 #define FS_HUGE_FILE_FL			0x00040000 /* Reserved for ext4 */
 #define FS_EXTENT_FL			0x00080000 /* Extents */
+#define FS_VERITY_FL			0x00100000 /* Verity protected inode */
 #define FS_EA_INODE_FL			0x00200000 /* Inode used for large EA */
 #define FS_EOFBLOCKS_FL			0x00400000 /* Reserved for ext4 */
 #define FS_NOCOW_FL			0x00800000 /* Do not cow file */
 #define FS_INLINE_DATA_FL		0x10000000 /* Reserved for ext4 */
 #define FS_PROJINHERIT_FL		0x20000000 /* Create with parents projid */
+#define FS_CASEFOLD_FL			0x40000000 /* Folder is case insensitive */
 #define FS_RESERVED_FL			0x80000000 /* reserved for ext2 lib */
 
 #define FS_FL_USER_VISIBLE		0x0003DFFF /* User visible flags */
diff --git a/include/uapi/linux/fsverity.h b/include/uapi/linux/fsverity.h
new file mode 100644
index 0000000..da0daf6
--- /dev/null
+++ b/include/uapi/linux/fsverity.h
@@ -0,0 +1,40 @@
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+/*
+ * fs-verity user API
+ *
+ * These ioctls can be used on filesystems that support fs-verity.  See the
+ * "User API" section of Documentation/filesystems/fsverity.rst.
+ *
+ * Copyright 2019 Google LLC
+ */
+#ifndef _UAPI_LINUX_FSVERITY_H
+#define _UAPI_LINUX_FSVERITY_H
+
+#include <linux/ioctl.h>
+#include <linux/types.h>
+
+#define FS_VERITY_HASH_ALG_SHA256	1
+#define FS_VERITY_HASH_ALG_SHA512	2
+
+struct fsverity_enable_arg {
+	__u32 version;
+	__u32 hash_algorithm;
+	__u32 block_size;
+	__u32 salt_size;
+	__u64 salt_ptr;
+	__u32 sig_size;
+	__u32 __reserved1;
+	__u64 sig_ptr;
+	__u64 __reserved2[11];
+};
+
+struct fsverity_digest {
+	__u16 digest_algorithm;
+	__u16 digest_size; /* input/output */
+	__u8 digest[];
+};
+
+#define FS_IOC_ENABLE_VERITY	_IOW('f', 133, struct fsverity_enable_arg)
+#define FS_IOC_MEASURE_VERITY	_IOWR('f', 134, struct fsverity_digest)
+
+#endif /* _UAPI_LINUX_FSVERITY_H */
diff --git a/include/uapi/linux/magic.h b/include/uapi/linux/magic.h
index d723479..291f3f4 100644
--- a/include/uapi/linux/magic.h
+++ b/include/uapi/linux/magic.h
@@ -74,6 +74,7 @@
 #define DAXFS_MAGIC             0x64646178
 #define BINFMTFS_MAGIC          0x42494e4d
 #define DEVPTS_SUPER_MAGIC	0x1cd1
+#define BINDERFS_SUPER_MAGIC	0x6c6f6f70
 #define FUTEXFS_SUPER_MAGIC	0xBAD1DEA
 #define PIPEFS_MAGIC            0x50495045
 #define PROC_SUPER_MAGIC	0x9fa0
@@ -91,5 +92,6 @@
 #define UDF_SUPER_MAGIC		0x15013346
 #define BALLOON_KVM_MAGIC	0x13661366
 #define ZSMALLOC_MAGIC		0x58295829
+#define DMA_BUF_MAGIC		0x444d4142	/* "DMAB" */
 
 #endif /* __LINUX_MAGIC_H__ */
diff --git a/include/uapi/linux/msm_kgsl.h b/include/uapi/linux/msm_kgsl.h
index 7a98eed..9b9cd6e 100644
--- a/include/uapi/linux/msm_kgsl.h
+++ b/include/uapi/linux/msm_kgsl.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
 /*
- * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2018-2020, The Linux Foundation. All rights reserved.
  */
 
 #ifndef _UAPI_MSM_KGSL_H
@@ -462,7 +462,10 @@
 #define KGSL_PERFCOUNTER_GROUP_CP_PWR 0x21
 #define KGSL_PERFCOUNTER_GROUP_GPMU_PWR 0x22
 #define KGSL_PERFCOUNTER_GROUP_ALWAYSON_PWR 0x23
-#define KGSL_PERFCOUNTER_GROUP_MAX 0x24
+#define KGSL_PERFCOUNTER_GROUP_GLC 0x24
+#define KGSL_PERFCOUNTER_GROUP_FCHE 0x25
+#define KGSL_PERFCOUNTER_GROUP_MHUB 0x26
+#define KGSL_PERFCOUNTER_GROUP_MAX 0x27
 
 #define KGSL_PERFCOUNTER_NOT_USED 0xFFFFFFFF
 #define KGSL_PERFCOUNTER_BROKEN 0xFFFFFFFE
diff --git a/include/uapi/linux/msm_npu.h b/include/uapi/linux/msm_npu.h
index bd68c53..d55f475 100644
--- a/include/uapi/linux/msm_npu.h
+++ b/include/uapi/linux/msm_npu.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */
 /*
- * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2018-2020, The Linux Foundation. All rights reserved.
  */
 
 #ifndef _UAPI_MSM_NPU_H_
@@ -87,6 +87,7 @@
 #define MSM_NPU_PROP_ID_CLK_GATING_MODE (MSM_NPU_FW_PROP_ID_START + 2)
 #define MSM_NPU_PROP_ID_HW_VERSION (MSM_NPU_FW_PROP_ID_START + 3)
 #define MSM_NPU_PROP_ID_FW_VERSION (MSM_NPU_FW_PROP_ID_START + 4)
+#define MSM_NPU_PROP_ID_FW_GETCAPS (MSM_NPU_FW_PROP_ID_START + 5)
 
 /* features supported by driver */
 #define MSM_NPU_FEATURE_MULTI_EXECUTE  0x1
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
index 2f938db..c0861ef 100644
--- a/include/uapi/linux/nl80211.h
+++ b/include/uapi/linux/nl80211.h
@@ -2339,6 +2339,18 @@
  *      the allowed channel bandwidth configurations. (u8 attribute)
  *      Defined by IEEE P802.11ay/D4.0 section 9.4.2.251, Table 13.
  *
+ * @NL80211_ATTR_VLAN_ID: VLAN ID (1..4094) for the station and VLAN group key
+ *      (u16).
+ *
+ * @NL80211_ATTR_HE_BSS_COLOR: nested attribute for BSS Color Settings.
+ *
+ * @NL80211_ATTR_IFTYPE_AKM_SUITES: nested array attribute, with each entry
+ *	using attributes from &enum nl80211_iftype_akm_attributes. This
+ *	attribute is sent in a response to %NL80211_CMD_GET_WIPHY indicating
+ *	supported AKM suites capability per interface. AKMs advertised in
+ *	%NL80211_ATTR_AKM_SUITES are default capabilities if AKM suites not
+ *	advertised for a specific interface type.
+ *
  * @NUM_NL80211_ATTR: total number of nl80211_attrs available
  * @NL80211_ATTR_MAX: highest attribute number currently defined
  * @__NL80211_ATTR_AFTER_LAST: internal use
@@ -2801,6 +2813,12 @@
 	NL80211_ATTR_WIPHY_EDMG_CHANNELS,
 	NL80211_ATTR_WIPHY_EDMG_BW_CONFIG,
 
+	NL80211_ATTR_VLAN_ID,
+
+	NL80211_ATTR_HE_BSS_COLOR,
+
+	NL80211_ATTR_IFTYPE_AKM_SUITES,
+
 	/* add attributes here, update the policy in nl80211.c */
 
 	__NL80211_ATTR_AFTER_LAST,
@@ -4407,6 +4425,10 @@
  * @NL80211_KEY_DEFAULT_TYPES: A nested attribute containing flags
  *	attributes, specifying what a key should be set as default as.
  *	See &enum nl80211_key_default_types.
+ * @NL80211_KEY_MODE: the mode from enum nl80211_key_mode.
+ *	Defaults to @NL80211_KEY_RX_TX.
+ * @NL80211_KEY_DEFAULT_BEACON: flag indicating default Beacon frame key
+ *
  * @__NL80211_KEY_AFTER_LAST: internal
  * @NL80211_KEY_MAX: highest key attribute
  */
@@ -4420,6 +4442,8 @@
 	NL80211_KEY_DEFAULT_MGMT,
 	NL80211_KEY_TYPE,
 	NL80211_KEY_DEFAULT_TYPES,
+	NL80211_KEY_MODE,
+	NL80211_KEY_DEFAULT_BEACON,
 
 	/* keep last */
 	__NL80211_KEY_AFTER_LAST,
@@ -5374,6 +5398,26 @@
  * @NL80211_EXT_FEATURE_AP_PMKSA_CACHING: Driver/device supports PMKSA caching
  *	(set/del PMKSA operations) in AP mode.
  *
+ * @NL80211_EXT_FEATURE_SCHED_SCAN_BAND_SPECIFIC_RSSI_THOLD: Driver supports
+ *	filtering of sched scan results using band specific RSSI thresholds.
+ *
+ * @NL80211_EXT_FEATURE_STA_TX_PWR: This driver supports controlling tx power
+ *	to a station.
+ *
+ * @NL80211_EXT_FEATURE_SAE_OFFLOAD: Device wants to do SAE authentication in
+ *	station mode (SAE password is passed as part of the connect command).
+ *
+ * @NL80211_EXT_FEATURE_VLAN_OFFLOAD: The driver supports a single netdev
+ *	with VLAN tagged frames and separate VLAN-specific netdevs added using
+ *	vconfig similarly to the Ethernet case.
+ *
+ * @NL80211_EXT_FEATURE_AQL: The driver supports the Airtime Queue Limit (AQL)
+ *	feature, which prevents bufferbloat by using the expected transmission
+ *	time to limit the amount of data buffered in the hardware.
+ *
+ * @NL80211_EXT_FEATURE_BEACON_PROTECTION: The driver supports Beacon protection
+ *	and can receive key configuration for BIGTK using key indexes 6 and 7.
+ *
  * @NUM_NL80211_EXT_FEATURES: number of extended features.
  * @MAX_NL80211_EXT_FEATURES: highest extended feature index.
  */
@@ -5413,6 +5457,13 @@
 	NL80211_EXT_FEATURE_ENABLE_FTM_RESPONDER,
 	NL80211_EXT_FEATURE_AIRTIME_FAIRNESS,
 	NL80211_EXT_FEATURE_AP_PMKSA_CACHING,
+	NL80211_EXT_FEATURE_SCHED_SCAN_BAND_SPECIFIC_RSSI_THOLD,
+	NL80211_EXT_FEATURE_EXT_KEY_ID,
+	NL80211_EXT_FEATURE_STA_TX_PWR,
+	NL80211_EXT_FEATURE_SAE_OFFLOAD,
+	NL80211_EXT_FEATURE_VLAN_OFFLOAD,
+	NL80211_EXT_FEATURE_AQL,
+	NL80211_EXT_FEATURE_BEACON_PROTECTION,
 
 	/* add new features before the definition below */
 	NUM_NL80211_EXT_FEATURES,
@@ -5957,4 +6008,28 @@
 	NL80211_EXTERNAL_AUTH_ABORT,
 };
 
+/**
+ * enum nl80211_iftype_akm_attributes - interface type AKM attributes
+ * @__NL80211_IFTYPE_AKM_ATTR_INVALID: Invalid
+ *
+ * @NL80211_IFTYPE_AKM_ATTR_IFTYPES: nested attribute containing a flag
+ *	attribute for each interface type that supports AKM suites specified in
+ *	%NL80211_IFTYPE_AKM_ATTR_SUITES
+ * @NL80211_IFTYPE_AKM_ATTR_SUITES: an array of u32. Used to indicate supported
+ *	AKM suites for the specified interface types.
+ *
+ * @__NL80211_IFTYPE_AKM_ATTR_LAST: Internal
+ * @NL80211_IFTYPE_AKM_ATTR_MAX: highest interface type AKM attribute.
+ */
+enum nl80211_iftype_akm_attributes {
+	__NL80211_IFTYPE_AKM_ATTR_INVALID,
+
+	NL80211_IFTYPE_AKM_ATTR_IFTYPES,
+	NL80211_IFTYPE_AKM_ATTR_SUITES,
+
+	/* keep last */
+	__NL80211_IFTYPE_AKM_ATTR_LAST,
+	NL80211_IFTYPE_AKM_ATTR_MAX = __NL80211_IFTYPE_AKM_ATTR_LAST - 1,
+};
+
 #endif /* __LINUX_NL80211_H */
diff --git a/include/uapi/linux/prctl.h b/include/uapi/linux/prctl.h
index 5cdf234..9d34a52 100644
--- a/include/uapi/linux/prctl.h
+++ b/include/uapi/linux/prctl.h
@@ -223,4 +223,9 @@
 #define PR_SET_VMA		0x53564d41
 # define PR_SET_VMA_ANON_NAME		0
 
+/* Tagged user address controls for arm64 */
+#define PR_SET_TAGGED_ADDR_CTRL		55
+#define PR_GET_TAGGED_ADDR_CTRL		56
+# define PR_TAGGED_ADDR_ENABLE		(1UL << 0)
+
 #endif /* _LINUX_PRCTL_H */
diff --git a/include/uapi/linux/qg.h b/include/uapi/linux/qg.h
index 4df41be..8f95cfa 100644
--- a/include/uapi/linux/qg.h
+++ b/include/uapi/linux/qg.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
 /*
- * Copyright (c) 2018, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2018, 2020, The Linux Foundation. All rights reserved.
  */
 
 #ifndef __QG_H__
@@ -26,7 +26,7 @@
 	QG_FULL_SOC,
 	QG_CLEAR_LEARNT_DATA,
 	QG_SYS_SOC,
-	QG_RESERVED_10,
+	QG_V_IBAT,
 	QG_MAX,
 };
 
@@ -39,6 +39,7 @@
 #define QG_FULL_SOC QG_FULL_SOC
 #define QG_CLEAR_LEARNT_DATA QG_CLEAR_LEARNT_DATA
 #define QG_SYS_SOC QG_SYS_SOC
+#define QG_V_IBAT QG_V_IBAT
 
 struct fifo_data {
 	unsigned int			v;
diff --git a/include/uapi/linux/sched.h b/include/uapi/linux/sched.h
index 22627f8..ed4ee17 100644
--- a/include/uapi/linux/sched.h
+++ b/include/uapi/linux/sched.h
@@ -10,6 +10,7 @@
 #define CLONE_FS	0x00000200	/* set if fs info shared between processes */
 #define CLONE_FILES	0x00000400	/* set if open files shared between processes */
 #define CLONE_SIGHAND	0x00000800	/* set if signal handlers and blocked signals shared */
+#define CLONE_PIDFD	0x00001000	/* set if a pidfd should be placed in parent */
 #define CLONE_PTRACE	0x00002000	/* set if we want to let tracing continue on the child too */
 #define CLONE_VFORK	0x00004000	/* set if the parent wants the child to wake it up on mm_release */
 #define CLONE_PARENT	0x00008000	/* set if we want to have the same parent as the cloner */
diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
index b28995b..0d16050 100644
--- a/include/uapi/linux/v4l2-controls.h
+++ b/include/uapi/linux/v4l2-controls.h
@@ -1002,6 +1002,9 @@
 	V4L2_CID_MPEG_VIDC_VIDEO_ROI_TYPE_2BYTE = 2,
 };
 
+#define V4L2_CID_MPEG_VIDC_VENC_CHROMA_QP_OFFSET \
+	(V4L2_CID_MPEG_MSM_VIDC_BASE + 132)
+
 /*  Camera class control IDs */
 
 #define V4L2_CID_CAMERA_CLASS_BASE	(V4L2_CTRL_CLASS_CAMERA | 0x900)
diff --git a/include/uapi/linux/virtio_gpu.h b/include/uapi/linux/virtio_gpu.h
index f43c3c6..8e88eba 100644
--- a/include/uapi/linux/virtio_gpu.h
+++ b/include/uapi/linux/virtio_gpu.h
@@ -41,6 +41,7 @@
 #include <linux/types.h>
 
 #define VIRTIO_GPU_F_VIRGL 0
+#define VIRTIO_GPU_F_EDID  1
 
 enum virtio_gpu_ctrl_type {
 	VIRTIO_GPU_UNDEFINED = 0,
@@ -56,6 +57,7 @@
 	VIRTIO_GPU_CMD_RESOURCE_DETACH_BACKING,
 	VIRTIO_GPU_CMD_GET_CAPSET_INFO,
 	VIRTIO_GPU_CMD_GET_CAPSET,
+	VIRTIO_GPU_CMD_GET_EDID,
 
 	/* 3d commands */
 	VIRTIO_GPU_CMD_CTX_CREATE = 0x0200,
@@ -76,6 +78,7 @@
 	VIRTIO_GPU_RESP_OK_DISPLAY_INFO,
 	VIRTIO_GPU_RESP_OK_CAPSET_INFO,
 	VIRTIO_GPU_RESP_OK_CAPSET,
+	VIRTIO_GPU_RESP_OK_EDID,
 
 	/* error responses */
 	VIRTIO_GPU_RESP_ERR_UNSPEC = 0x1200,
@@ -291,6 +294,21 @@
 	__u8 capset_data[];
 };
 
+/* VIRTIO_GPU_CMD_GET_EDID */
+struct virtio_gpu_cmd_get_edid {
+	struct virtio_gpu_ctrl_hdr hdr;
+	__le32 scanout;
+	__le32 padding;
+};
+
+/* VIRTIO_GPU_RESP_OK_EDID */
+struct virtio_gpu_resp_edid {
+	struct virtio_gpu_ctrl_hdr hdr;
+	__le32 size;
+	__le32 padding;
+	__u8 edid[1024];
+};
+
 #define VIRTIO_GPU_EVENT_DISPLAY (1 << 0)
 
 struct virtio_gpu_config {
diff --git a/include/uapi/sound/compress_offload.h b/include/uapi/sound/compress_offload.h
index 493c676..8d00752 100644
--- a/include/uapi/sound/compress_offload.h
+++ b/include/uapi/sound/compress_offload.h
@@ -173,6 +173,7 @@
 	SNDRV_COMPRESS_ENABLE_ADJUST_SESSION_CLOCK = 10,
 	SNDRV_COMPRESS_ADJUST_SESSION_CLOCK = 11,
 	SNDRV_COMPRESS_LATENCY_MODE = 12,
+	SNDRV_COMPRESS_IN_TTP_OFFSET = 13,
 };
 
 #define SNDRV_COMPRESS_MIN_BLK_SIZE SNDRV_COMPRESS_MIN_BLK_SIZE
@@ -186,6 +187,7 @@
 		SNDRV_COMPRESS_ENABLE_ADJUST_SESSION_CLOCK
 #define SNDRV_COMPRESS_ADJUST_SESSION_CLOCK SNDRV_COMPRESS_ADJUST_SESSION_CLOCK
 #define SNDRV_COMPRESS_LATENCY_MODE SNDRV_COMPRESS_LATENCY_MODE
+#define SNDRV_COMPRESS_IN_TTP_OFFSET SNDRV_COMPRESS_IN_TTP_OFFSET
 
 /**
  * struct snd_compr_metadata - compressed stream metadata
diff --git a/include/uapi/sound/compress_params.h b/include/uapi/sound/compress_params.h
index 94dcae8..7e503c9 100644
--- a/include/uapi/sound/compress_params.h
+++ b/include/uapi/sound/compress_params.h
@@ -419,6 +419,13 @@
 	__u32 nap;
 };
 
+/** struct snd_dec_dsd - codec for DSD format
+ * @blk_size - dsd channel block size
+ */
+struct snd_dec_dsd {
+	__u32 blk_size;
+};
+
 /** struct snd_dec_pcm - codec options for PCM format
  * @num_channels: Number of channels
  * @ch_map: Channel map for the above corresponding channels
@@ -445,6 +452,7 @@
 	struct snd_dec_thd truehd;
 	struct snd_dec_pcm pcm_dec;
 	struct snd_dec_amrwb_plus amrwbplus;
+	struct snd_dec_dsd dsd_dec;
 };
 
 /** struct snd_codec_desc - description of codec capabilities
diff --git a/init/Kconfig b/init/Kconfig
index 8047951..5fe5082 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -29,6 +29,9 @@
 config CC_HAS_ASM_GOTO
 	def_bool $(success,$(srctree)/scripts/gcc-goto.sh $(CC))
 
+config TOOLS_SUPPORT_RELR
+	def_bool $(success,env "CC=$(CC)" "LD=$(LD)" "NM=$(NM)" "OBJCOPY=$(OBJCOPY)" $(srctree)/scripts/tools-support-relr.sh)
+
 config CONSTRUCTORS
 	bool
 	depends on !UML
@@ -1241,9 +1244,6 @@
 config SYSCTL
 	bool
 
-config ANON_INODES
-	bool
-
 config HAVE_UID16
 	bool
 
@@ -1448,14 +1448,12 @@
 config EPOLL
 	bool "Enable eventpoll support" if EXPERT
 	default y
-	select ANON_INODES
 	help
 	  Disabling this option will cause the kernel to be built without
 	  support for epoll family of system calls.
 
 config SIGNALFD
 	bool "Enable signalfd() system call" if EXPERT
-	select ANON_INODES
 	default y
 	help
 	  Enable the signalfd() system call that allows to receive signals
@@ -1465,7 +1463,6 @@
 
 config TIMERFD
 	bool "Enable timerfd() system call" if EXPERT
-	select ANON_INODES
 	default y
 	help
 	  Enable the timerfd() system call that allows to receive timer
@@ -1475,7 +1472,6 @@
 
 config EVENTFD
 	bool "Enable eventfd() system call" if EXPERT
-	select ANON_INODES
 	default y
 	help
 	  Enable the eventfd() system call that allows to receive both
@@ -1577,7 +1573,6 @@
 # syscall, maps, verifier
 config BPF_SYSCALL
 	bool "Enable bpf() system call"
-	select ANON_INODES
 	select BPF
 	select IRQ_WORK
 	default n
@@ -1594,7 +1589,6 @@
 
 config USERFAULTFD
 	bool "Enable userfaultfd() system call"
-	select ANON_INODES
 	depends on MMU
 	help
 	  Enable the userfaultfd() system call that allows to intercept and
@@ -1661,7 +1655,6 @@
 	bool "Kernel performance events and counters"
 	default y if PROFILING
 	depends on HAVE_PERF_EVENTS
-	select ANON_INODES
 	select IRQ_WORK
 	select SRCU
 	help
@@ -2151,3 +2144,5 @@
 # <asm/syscall_wrapper.h>.
 config ARCH_HAS_SYSCALL_WRAPPER
 	def_bool n
+
+source "init/Kconfig.gki"
diff --git a/init/Kconfig.gki b/init/Kconfig.gki
new file mode 100644
index 0000000..7bd91be
--- /dev/null
+++ b/init/Kconfig.gki
@@ -0,0 +1,76 @@
+config GKI_HIDDEN_DRM_CONFIGS
+	bool "Hidden DRM configs needed for GKI"
+	select DRM_KMS_HELPER if (HAS_IOMEM && DRM)
+	select DRM_GEM_CMA_HELPER
+	select DRM_KMS_CMA_HELPER
+	select DRM_MIPI_DSI
+	select VIDEOMODE_HELPERS
+	help
+	  Dummy config option used to enable hidden DRM configs.
+	  These are normally selected implicitely when including a
+	  DRM module, but for GKI, the modules are built out-of-tree.
+
+config GKI_HIDDEN_REGMAP_CONFIGS
+	bool "Hidden Regmap configs needed for GKI"
+	select REGMAP_IRQ
+	help
+	  Dummy config option used to enable hidden regmap configs.
+	  These are normally selected implicitely when a module
+	  that relies on it is configured.
+
+config GKI_HIDDEN_SND_SOC_CONFIGS
+	bool "Hidden SND_SOC configs needed for GKI"
+	select SND_SOC_GENERIC_DMAENGINE_PCM if (SND_SOC && SND)
+	help
+	  Dummy config option used to enable hidden SND_SOC configs.
+	  These are normally selected implicitely when a module
+	  that relies on it is configured.
+
+config GKI_HIDDEN_GPIO_CONFIGS
+	bool "Hidden GPIO configs needed for GKI"
+	select PINCTRL_SINGLE if (PINCTRL && OF && HAS_IOMEM)
+	select GPIO_PL061 if (HAS_IOMEM && ARM_AMBA && GPIOLIB)
+	help
+	  Dummy config option used to enable hidden GPIO configs.
+	  These are normally selected implicitely when a module
+	  that relies on it is configured.
+
+# LEGACY_WEXT_ALLCONFIG Discussed upstream, soundly rejected as a unique
+# problem for GKI to solve.  It should be noted that these extensions are
+# in-effect deprecated and generally unsupported and we should pressure
+# the SOC vendors to drop any modules that require these extensions.
+config GKI_LEGACY_WEXT_ALLCONFIG
+	bool "Hidden wireless extension configs needed for GKI"
+	select WIRELESS_EXT
+	select WEXT_CORE
+	select WEXT_PROC
+	select WEXT_SPY
+	select WEXT_PRIV
+	help
+	  Dummy config option used to enable all the hidden legacy wireless
+	  extensions to the core wireless network functionality used by
+	  add-in modules.
+
+	  If you are not building a kernel to be used for a variety of
+	  out-of-kernel built wireless modules, say N here.
+
+# Atrocities needed for
+# a) building GKI modules in separate tree, or
+# b) building drivers that are not modularizable
+#
+# All of these should be reworked into an upstream solution
+# if possible.
+#
+config GKI_HACKS_TO_FIX
+	bool "GKI Dummy config options"
+	select GKI_HIDDEN_DRM_CONFIGS
+	select GKI_HIDDEN_REGMAP_CONFIGS
+	select GKI_HIDDEN_SND_SOC_CONFIGS
+	select GKI_HIDDEN_GPIO_CONFIGS
+	select GKI_LEGACY_WEXT_ALLCONFIG
+	help
+	  Dummy config option used to enable core functionality used by
+	  modules that may not be selectable in this config.
+
+	  Unless you are building a GKI kernel to be used with modules
+	  built from a different config, say N here.
diff --git a/init/init_task.c b/init/init_task.c
index 44a7fc4..53e6e27 100644
--- a/init/init_task.c
+++ b/init/init_task.c
@@ -10,6 +10,7 @@
 #include <linux/fs.h>
 #include <linux/mm.h>
 #include <linux/audit.h>
+#include <linux/scs.h>
 
 #include <asm/pgtable.h>
 #include <linux/uaccess.h>
@@ -183,6 +184,13 @@
 };
 EXPORT_SYMBOL(init_task);
 
+#ifdef CONFIG_SHADOW_CALL_STACK
+unsigned long init_shadow_call_stack[SCS_SIZE / sizeof(long)] __init_task_data
+		__aligned(SCS_SIZE) = {
+	[(SCS_SIZE / sizeof(long)) - 1] = SCS_END_MAGIC
+};
+#endif
+
 /*
  * Initial thread structure. Alignment of this is handled by a special
  * linker map entry.
diff --git a/init/main.c b/init/main.c
index 38a603f..bc440bb 100644
--- a/init/main.c
+++ b/init/main.c
@@ -506,6 +506,29 @@
 }
 #endif
 
+/* Report memory auto-initialization states for this boot. */
+static void __init report_meminit(void)
+{
+	const char *stack;
+
+	if (IS_ENABLED(CONFIG_INIT_STACK_ALL))
+		stack = "all";
+	else if (IS_ENABLED(CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF_ALL))
+		stack = "byref_all";
+	else if (IS_ENABLED(CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF))
+		stack = "byref";
+	else if (IS_ENABLED(CONFIG_GCC_PLUGIN_STRUCTLEAK_USER))
+		stack = "__user";
+	else
+		stack = "off";
+
+	pr_info("mem auto-init: stack:%s, heap alloc:%s, heap free:%s\n",
+		stack, want_init_on_alloc(GFP_KERNEL) ? "on" : "off",
+		want_init_on_free() ? "on" : "off");
+	if (want_init_on_free())
+		pr_info("mem auto-init: clearing system memory may take some time...\n");
+}
+
 /*
  * Set up kernel memory allocators
  */
@@ -516,6 +539,7 @@
 	 * bigger than MAX_ORDER unless SPARSEMEM.
 	 */
 	page_ext_init_flatmem();
+	report_meminit();
 	mem_init();
 	kmem_cache_init();
 	pgtable_init();
diff --git a/kernel/Makefile b/kernel/Makefile
index a48ec6c..02f3b2d 100644
--- a/kernel/Makefile
+++ b/kernel/Makefile
@@ -111,6 +111,7 @@
 obj-$(CONFIG_CPU_PM) += cpu_pm.o
 obj-$(CONFIG_BPF) += bpf/
 obj-$(CONFIG_CFI_CLANG) += cfi.o
+obj-$(CONFIG_SHADOW_CALL_STACK) += scs.o
 
 obj-$(CONFIG_PERF_EVENTS) += events/
 
diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c
index 8e91dd0..eb8fdf9 100644
--- a/kernel/cgroup/cgroup.c
+++ b/kernel/cgroup/cgroup.c
@@ -4242,12 +4242,16 @@
 		}
 	} while (!css_set_populated(cset) && list_empty(&cset->dying_tasks));
 
-	if (!list_empty(&cset->tasks))
+	if (!list_empty(&cset->tasks)) {
 		it->task_pos = cset->tasks.next;
-	else if (!list_empty(&cset->mg_tasks))
+		it->cur_tasks_head = &cset->tasks;
+	} else if (!list_empty(&cset->mg_tasks)) {
 		it->task_pos = cset->mg_tasks.next;
-	else
+		it->cur_tasks_head = &cset->mg_tasks;
+	} else {
 		it->task_pos = cset->dying_tasks.next;
+		it->cur_tasks_head = &cset->dying_tasks;
+	}
 
 	it->tasks_head = &cset->tasks;
 	it->mg_tasks_head = &cset->mg_tasks;
@@ -4305,10 +4309,14 @@
 		else
 			it->task_pos = it->task_pos->next;
 
-		if (it->task_pos == it->tasks_head)
+		if (it->task_pos == it->tasks_head) {
 			it->task_pos = it->mg_tasks_head->next;
-		if (it->task_pos == it->mg_tasks_head)
+			it->cur_tasks_head = it->mg_tasks_head;
+		}
+		if (it->task_pos == it->mg_tasks_head) {
 			it->task_pos = it->dying_tasks_head->next;
+			it->cur_tasks_head = it->dying_tasks_head;
+		}
 		if (it->task_pos == it->dying_tasks_head)
 			css_task_iter_advance_css_set(it);
 	} else {
@@ -4327,11 +4335,12 @@
 			goto repeat;
 
 		/* and dying leaders w/o live member threads */
-		if (!atomic_read(&task->signal->live))
+		if (it->cur_tasks_head == it->dying_tasks_head &&
+		    !atomic_read(&task->signal->live))
 			goto repeat;
 	} else {
 		/* skip all dying ones */
-		if (task->flags & PF_EXITING)
+		if (it->cur_tasks_head == it->dying_tasks_head)
 			goto repeat;
 	}
 }
diff --git a/kernel/compat.c b/kernel/compat.c
index 8e40efc..e4548a9 100644
--- a/kernel/compat.c
+++ b/kernel/compat.c
@@ -354,10 +354,9 @@
 	bitmap_size = ALIGN(bitmap_size, BITS_PER_COMPAT_LONG);
 	nr_compat_longs = BITS_TO_COMPAT_LONGS(bitmap_size);
 
-	if (!access_ok(VERIFY_READ, umask, bitmap_size / 8))
+	if (!user_access_begin(VERIFY_READ, umask, bitmap_size / 8))
 		return -EFAULT;
 
-	user_access_begin();
 	while (nr_compat_longs > 1) {
 		compat_ulong_t l1, l2;
 		unsafe_get_user(l1, umask++, Efault);
@@ -384,10 +383,9 @@
 	bitmap_size = ALIGN(bitmap_size, BITS_PER_COMPAT_LONG);
 	nr_compat_longs = BITS_TO_COMPAT_LONGS(bitmap_size);
 
-	if (!access_ok(VERIFY_WRITE, umask, bitmap_size / 8))
+	if (!user_access_begin(VERIFY_WRITE, umask, bitmap_size / 8))
 		return -EFAULT;
 
-	user_access_begin();
 	while (nr_compat_longs > 1) {
 		unsigned long m = *mask++;
 		unsafe_put_user((compat_ulong_t)m, umask++, Efault);
diff --git a/kernel/events/core.c b/kernel/events/core.c
index c574f23..6b09899 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -1287,6 +1287,7 @@
  *	      perf_event_context::lock
  *	    perf_event::mmap_mutex
  *	    mmap_sem
+ *	      perf_addr_filters_head::lock
  *
  *    cpu_hotplug_lock
  *      pmus_lock
@@ -2891,7 +2892,7 @@
  *
  * (p1) when userspace mappings change as a result of (1) or (2) or (3) below,
  *      we update the addresses of corresponding vmas in
- *	event::addr_filters_offs array and bump the event::addr_filters_gen;
+ *	event::addr_filter_ranges array and bump the event::addr_filters_gen;
  * (p2) when an event is scheduled in (pmu::add), it calls
  *      perf_event_addr_filters_sync() which calls pmu::addr_filters_sync()
  *      if the generation has changed since the previous call.
@@ -4223,9 +4224,9 @@
 
 	if (!task) {
 		/* Must be root to operate on a CPU event: */
-		if (!is_kernel_event(event) && perf_paranoid_cpu() &&
-			!capable(CAP_SYS_ADMIN))
-			return ERR_PTR(-EACCES);
+		err = perf_allow_cpu(&event->attr);
+		if (err)
+			return ERR_PTR(err);
 
 		cpuctx = per_cpu_ptr(pmu->pmu_cpu_context, cpu);
 		ctx = &cpuctx->ctx;
@@ -4558,6 +4559,8 @@
 
 	unaccount_event(event);
 
+	security_perf_event_free(event);
+
 	if (event->rb) {
 		/*
 		 * Can happen when we close an event with re-directed output.
@@ -4580,7 +4583,7 @@
 
 	perf_event_free_bpf_prog(event);
 	perf_addr_filters_splice(event, NULL);
-	kfree(event->addr_filters_offs);
+	kfree(event->addr_filter_ranges);
 
 	if (event->destroy)
 		event->destroy(event);
@@ -5051,6 +5054,10 @@
 	spin_unlock(&dormant_event_list_lock);
 #endif
 
+	ret = security_perf_event_read(event);
+	if (ret)
+		return ret;
+
 	ctx = perf_event_ctx_lock(event);
 	ret = __perf_read(event, buf, count);
 	perf_event_ctx_unlock(event, ctx);
@@ -5312,6 +5319,11 @@
 	struct perf_event_context *ctx;
 	long ret;
 
+	/* Treat ioctl like writes as it is likely a mutating operation. */
+	ret = security_perf_event_write(event);
+	if (ret)
+		return ret;
+
 	ctx = perf_event_ctx_lock(event);
 	ret = _perf_ioctl(event, cmd, arg);
 	perf_event_ctx_unlock(event, ctx);
@@ -5774,6 +5786,10 @@
 	if (!(vma->vm_flags & VM_SHARED))
 		return -EINVAL;
 
+	ret = security_perf_event_read(event);
+	if (ret)
+		return ret;
+
 	vma_size = vma->vm_end - vma->vm_start;
 
 	if (vma->vm_pgoff == 0) {
@@ -5887,7 +5903,7 @@
 	lock_limit >>= PAGE_SHIFT;
 	locked = vma->vm_mm->pinned_vm + extra;
 
-	if ((locked > lock_limit) && perf_paranoid_tracepoint_raw() &&
+	if ((locked > lock_limit) && perf_is_paranoid() &&
 		!capable(CAP_IPC_LOCK)) {
 		ret = -EPERM;
 		goto unlock;
@@ -6915,7 +6931,8 @@
 	raw_spin_lock_irqsave(&ifh->lock, flags);
 	list_for_each_entry(filter, &ifh->list, entry) {
 		if (filter->path.dentry) {
-			event->addr_filters_offs[count] = 0;
+			event->addr_filter_ranges[count].start = 0;
+			event->addr_filter_ranges[count].size = 0;
 			restart++;
 		}
 
@@ -7597,28 +7614,47 @@
 	return true;
 }
 
+static bool perf_addr_filter_vma_adjust(struct perf_addr_filter *filter,
+					struct vm_area_struct *vma,
+					struct perf_addr_filter_range *fr)
+{
+	unsigned long vma_size = vma->vm_end - vma->vm_start;
+	unsigned long off = vma->vm_pgoff << PAGE_SHIFT;
+	struct file *file = vma->vm_file;
+
+	if (!perf_addr_filter_match(filter, file, off, vma_size))
+		return false;
+
+	if (filter->offset < off) {
+		fr->start = vma->vm_start;
+		fr->size = min(vma_size, filter->size - (off - filter->offset));
+	} else {
+		fr->start = vma->vm_start + filter->offset - off;
+		fr->size = min(vma->vm_end - fr->start, filter->size);
+	}
+
+	return true;
+}
+
 static void __perf_addr_filters_adjust(struct perf_event *event, void *data)
 {
 	struct perf_addr_filters_head *ifh = perf_event_addr_filters(event);
 	struct vm_area_struct *vma = data;
-	unsigned long off = vma->vm_pgoff << PAGE_SHIFT, flags;
-	struct file *file = vma->vm_file;
 	struct perf_addr_filter *filter;
 	unsigned int restart = 0, count = 0;
+	unsigned long flags;
 
 	if (!has_addr_filter(event))
 		return;
 
-	if (!file)
+	if (!vma->vm_file)
 		return;
 
 	raw_spin_lock_irqsave(&ifh->lock, flags);
 	list_for_each_entry(filter, &ifh->list, entry) {
-		if (perf_addr_filter_match(filter, file, off,
-					     vma->vm_end - vma->vm_start)) {
-			event->addr_filters_offs[count] = vma->vm_start;
+		if (perf_addr_filter_vma_adjust(filter, vma,
+						&event->addr_filter_ranges[count]))
 			restart++;
-		}
 
 		count++;
 	}
@@ -8980,26 +9016,19 @@
  * @filter; if so, adjust filter's address range.
  * Called with mm::mmap_sem down for reading.
  */
-static unsigned long perf_addr_filter_apply(struct perf_addr_filter *filter,
-					    struct mm_struct *mm)
+static void perf_addr_filter_apply(struct perf_addr_filter *filter,
+				   struct mm_struct *mm,
+				   struct perf_addr_filter_range *fr)
 {
 	struct vm_area_struct *vma;
 
 	for (vma = mm->mmap; vma; vma = vma->vm_next) {
-		struct file *file = vma->vm_file;
-		unsigned long off = vma->vm_pgoff << PAGE_SHIFT;
-		unsigned long vma_size = vma->vm_end - vma->vm_start;
-
-		if (!file)
+		if (!vma->vm_file)
 			continue;
 
-		if (!perf_addr_filter_match(filter, file, off, vma_size))
-			continue;
-
-		return vma->vm_start;
+		if (perf_addr_filter_vma_adjust(filter, vma, fr))
+			return;
 	}
-
-	return 0;
 }
 
 /*
@@ -9022,26 +9051,29 @@
 	if (task == TASK_TOMBSTONE)
 		return;
 
-	if (!ifh->nr_file_filters)
-		return;
+	if (ifh->nr_file_filters) {
+		mm = get_task_mm(event->ctx->task);
+		if (!mm)
+			goto restart;
 
-	mm = get_task_mm(event->ctx->task);
-	if (!mm)
-		goto restart;
-
-	down_read(&mm->mmap_sem);
+		down_read(&mm->mmap_sem);
+	}
 
 	raw_spin_lock_irqsave(&ifh->lock, flags);
 	list_for_each_entry(filter, &ifh->list, entry) {
-		event->addr_filters_offs[count] = 0;
+		if (filter->path.dentry) {
+			/*
+			 * Adjust base offset if the filter is associated to a
+			 * binary that needs to be mapped:
+			 */
+			event->addr_filter_ranges[count].start = 0;
+			event->addr_filter_ranges[count].size = 0;
 
-		/*
-		 * Adjust base offset if the filter is associated to a binary
-		 * that needs to be mapped:
-		 */
-		if (filter->path.dentry)
-			event->addr_filters_offs[count] =
-				perf_addr_filter_apply(filter, mm);
+			perf_addr_filter_apply(filter, mm, &event->addr_filter_ranges[count]);
+		} else {
+			event->addr_filter_ranges[count].start = filter->offset;
+			event->addr_filter_ranges[count].size  = filter->size;
+		}
 
 		count++;
 	}
@@ -9049,9 +9081,11 @@
 	event->addr_filters_gen++;
 	raw_spin_unlock_irqrestore(&ifh->lock, flags);
 
-	up_read(&mm->mmap_sem);
+	if (ifh->nr_file_filters) {
+		up_read(&mm->mmap_sem);
 
-	mmput(mm);
+		mmput(mm);
+	}
 
 restart:
 	perf_event_stop(event, 1);
@@ -10423,14 +10457,28 @@
 		goto err_pmu;
 
 	if (has_addr_filter(event)) {
-		event->addr_filters_offs = kcalloc(pmu->nr_addr_filters,
-						   sizeof(unsigned long),
-						   GFP_KERNEL);
-		if (!event->addr_filters_offs) {
+		event->addr_filter_ranges = kcalloc(pmu->nr_addr_filters,
+						    sizeof(struct perf_addr_filter_range),
+						    GFP_KERNEL);
+		if (!event->addr_filter_ranges) {
 			err = -ENOMEM;
 			goto err_per_task;
 		}
 
+		/*
+		 * Clone the parent's vma offsets: they are valid until exec()
+		 * even if the mm is not shared with the parent.
+		 */
+		if (event->parent) {
+			struct perf_addr_filters_head *ifh = perf_event_addr_filters(event);
+
+			raw_spin_lock_irq(&ifh->lock);
+			memcpy(event->addr_filter_ranges,
+			       event->parent->addr_filter_ranges,
+			       pmu->nr_addr_filters * sizeof(struct perf_addr_filter_range));
+			raw_spin_unlock_irq(&ifh->lock);
+		}
+
 		/* force hw sync on the address filters */
 		event->addr_filters_gen = 1;
 	}
@@ -10443,13 +10491,22 @@
 		}
 	}
 
+	err = security_perf_event_alloc(event);
+	if (err)
+		goto err_callchain_buffer;
+
 	/* symmetric to unaccount_event() in _free_event() */
 	account_event(event);
 
 	return event;
 
+err_callchain_buffer:
+	if (!event->parent) {
+		if (event->attr.sample_type & PERF_SAMPLE_CALLCHAIN)
+			put_callchain_buffers();
+	}
 err_addr_filters:
-	kfree(event->addr_filters_offs);
+	kfree(event->addr_filter_ranges);
 
 err_per_task:
 	exclusive_event_destroy(event);
@@ -10565,9 +10622,11 @@
 			attr->branch_sample_type = mask;
 		}
 		/* privileged levels capture (kernel, hv): check permissions */
-		if ((mask & PERF_SAMPLE_BRANCH_PERM_PLM)
-		    && perf_paranoid_kernel() && !capable(CAP_SYS_ADMIN))
-			return -EACCES;
+		if (mask & PERF_SAMPLE_BRANCH_PERM_PLM) {
+			ret = perf_allow_kernel(attr);
+			if (ret)
+				return ret;
+		}
 	}
 
 	if (attr->sample_type & PERF_SAMPLE_REGS_USER) {
@@ -10808,13 +10867,19 @@
 	if (perf_paranoid_any() && !capable(CAP_SYS_ADMIN))
 		return -EACCES;
 
+	/* Do we allow access to perf_event_open(2) ? */
+	err = security_perf_event_open(&attr, PERF_SECURITY_OPEN);
+	if (err)
+		return err;
+
 	err = perf_copy_attr(attr_uptr, &attr);
 	if (err)
 		return err;
 
 	if (!attr.exclude_kernel) {
-		if (perf_paranoid_kernel() && !capable(CAP_SYS_ADMIN))
-			return -EACCES;
+		err = perf_allow_kernel(&attr);
+		if (err)
+			return err;
 	}
 
 	if (attr.namespaces) {
@@ -10831,9 +10896,11 @@
 	}
 
 	/* Only privileged users can get physical addresses */
-	if ((attr.sample_type & PERF_SAMPLE_PHYS_ADDR) &&
-	    perf_paranoid_kernel() && !capable(CAP_SYS_ADMIN))
-		return -EACCES;
+	if ((attr.sample_type & PERF_SAMPLE_PHYS_ADDR)) {
+		err = perf_allow_kernel(&attr);
+		if (err)
+			return err;
+	}
 
 	/*
 	 * In cgroup mode, the pid argument is used to pass the fd
diff --git a/kernel/exit.c b/kernel/exit.c
index d8eb9c7..c73ebba 100644
--- a/kernel/exit.c
+++ b/kernel/exit.c
@@ -715,6 +715,7 @@
 	if (group_dead)
 		kill_orphaned_pgrp(tsk->group_leader, NULL);
 
+	tsk->exit_state = EXIT_ZOMBIE;
 	if (unlikely(tsk->ptrace)) {
 		int sig = thread_group_leader(tsk) &&
 				thread_group_empty(tsk) &&
@@ -1618,10 +1619,9 @@
 	if (!infop)
 		return err;
 
-	if (!access_ok(VERIFY_WRITE, infop, sizeof(*infop)))
+	if (!user_access_begin(VERIFY_WRITE, infop, sizeof(*infop)))
 		return -EFAULT;
 
-	user_access_begin();
 	unsafe_put_user(signo, &infop->si_signo, Efault);
 	unsafe_put_user(0, &infop->si_errno, Efault);
 	unsafe_put_user(info.cause, &infop->si_code, Efault);
@@ -1746,10 +1746,9 @@
 	if (!infop)
 		return err;
 
-	if (!access_ok(VERIFY_WRITE, infop, sizeof(*infop)))
+	if (!user_access_begin(VERIFY_WRITE, infop, sizeof(*infop)))
 		return -EFAULT;
 
-	user_access_begin();
 	unsafe_put_user(signo, &infop->si_signo, Efault);
 	unsafe_put_user(0, &infop->si_errno, Efault);
 	unsafe_put_user(info.cause, &infop->si_code, Efault);
diff --git a/kernel/fork.c b/kernel/fork.c
index 0834f34..a3a4e77 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -11,6 +11,7 @@
  * management can be a bitch. See 'mm/memory.c': 'copy_page_range()'
  */
 
+#include <linux/anon_inodes.h>
 #include <linux/slab.h>
 #include <linux/sched/autogroup.h>
 #include <linux/sched/mm.h>
@@ -21,6 +22,7 @@
 #include <linux/sched/task.h>
 #include <linux/sched/task_stack.h>
 #include <linux/sched/cputime.h>
+#include <linux/seq_file.h>
 #include <linux/rtmutex.h>
 #include <linux/init.h>
 #include <linux/unistd.h>
@@ -92,6 +94,7 @@
 #include <linux/livepatch.h>
 #include <linux/thread_info.h>
 #include <linux/cpufreq_times.h>
+#include <linux/scs.h>
 
 #include <asm/pgtable.h>
 #include <asm/pgalloc.h>
@@ -391,6 +394,7 @@
 void free_task(struct task_struct *tsk)
 {
 	cpufreq_task_times_exit(tsk);
+	scs_release(tsk);
 
 #ifndef CONFIG_THREAD_INFO_IN_TASK
 	/*
@@ -802,6 +806,8 @@
 			  NULL, free_vm_stack_cache);
 #endif
 
+	scs_init();
+
 	lockdep_init_task(&init_task);
 }
 
@@ -857,6 +863,10 @@
 	if (err)
 		goto free_stack;
 
+	err = scs_prepare(tsk, node);
+	if (err)
+		goto free_stack;
+
 #ifdef CONFIG_SECCOMP
 	/*
 	 * We must handle setting up seccomp filters once we're under
@@ -1675,6 +1685,84 @@
 		free_task(tsk);
 }
 
+static int pidfd_release(struct inode *inode, struct file *file)
+{
+	struct pid *pid = file->private_data;
+
+	file->private_data = NULL;
+	put_pid(pid);
+	return 0;
+}
+
+#ifdef CONFIG_PROC_FS
+static void pidfd_show_fdinfo(struct seq_file *m, struct file *f)
+{
+	struct pid_namespace *ns = proc_pid_ns(file_inode(m->file));
+	struct pid *pid = f->private_data;
+
+	seq_put_decimal_ull(m, "Pid:\t", pid_nr_ns(pid, ns));
+	seq_putc(m, '\n');
+}
+#endif
+
+/*
+ * Poll support for process exit notification.
+ */
+static unsigned int pidfd_poll(struct file *file, struct poll_table_struct *pts)
+{
+	struct task_struct *task;
+	struct pid *pid = file->private_data;
+	int poll_flags = 0;
+
+	poll_wait(file, &pid->wait_pidfd, pts);
+
+	rcu_read_lock();
+	task = pid_task(pid, PIDTYPE_PID);
+	/*
+	 * Inform pollers only when the whole thread group exits.
+	 * If the thread group leader exits before all other threads in the
+	 * group, then poll(2) should block, similar to the wait(2) family.
+	 */
+	if (!task || (task->exit_state && thread_group_empty(task)))
+		poll_flags = POLLIN | POLLRDNORM;
+	rcu_read_unlock();
+
+	return poll_flags;
+}
+
+const struct file_operations pidfd_fops = {
+	.release = pidfd_release,
+	.poll = pidfd_poll,
+#ifdef CONFIG_PROC_FS
+	.show_fdinfo = pidfd_show_fdinfo,
+#endif
+};
+
+/**
+ * pidfd_create() - Create a new pid file descriptor.
+ *
+ * @pid:  struct pid that the pidfd will reference
+ *
+ * This creates a new pid file descriptor with the O_CLOEXEC flag set.
+ *
+ * Note, that this function can only be called after the fd table has
+ * been unshared to avoid leaking the pidfd to the new process.
+ *
+ * Return: On success, a cloexec pidfd is returned.
+ *         On error, a negative errno number will be returned.
+ */
+static int pidfd_create(struct pid *pid)
+{
+	int fd;
+
+	fd = anon_inode_getfd("[pidfd]", &pidfd_fops, get_pid(pid),
+			      O_RDWR | O_CLOEXEC);
+	if (fd < 0)
+		put_pid(pid);
+
+	return fd;
+}
+
 /*
  * This creates a new process as a copy of the old one,
  * but does not actually start it yet.
@@ -1687,13 +1775,14 @@
 					unsigned long clone_flags,
 					unsigned long stack_start,
 					unsigned long stack_size,
+					int __user *parent_tidptr,
 					int __user *child_tidptr,
 					struct pid *pid,
 					int trace,
 					unsigned long tls,
 					int node)
 {
-	int retval;
+	int pidfd = -1, retval;
 	struct task_struct *p;
 	struct multiprocess_signals delayed;
 
@@ -1743,6 +1832,31 @@
 			return ERR_PTR(-EINVAL);
 	}
 
+	if (clone_flags & CLONE_PIDFD) {
+		int reserved;
+
+		/*
+		 * - CLONE_PARENT_SETTID is useless for pidfds and also
+		 *   parent_tidptr is used to return pidfds.
+		 * - CLONE_DETACHED is blocked so that we can potentially
+		 *   reuse it later for CLONE_PIDFD.
+		 * - CLONE_THREAD is blocked until someone really needs it.
+		 */
+		if (clone_flags &
+		    (CLONE_DETACHED | CLONE_PARENT_SETTID | CLONE_THREAD))
+			return ERR_PTR(-EINVAL);
+
+		/*
+		 * Verify that parent_tidptr is sane so we can potentially
+		 * reuse it later.
+		 */
+		if (get_user(reserved, parent_tidptr))
+			return ERR_PTR(-EFAULT);
+
+		if (reserved != 0)
+			return ERR_PTR(-EINVAL);
+	}
+
 	/*
 	 * Force any signals received before this point to be delivered
 	 * before the fork happens.  Collect up signals sent to multiple
@@ -1949,6 +2063,22 @@
 		}
 	}
 
+	/*
+	 * This has to happen after we've potentially unshared the file
+	 * descriptor table (so that the pidfd doesn't leak into the child
+	 * if the fd table isn't shared).
+	 */
+	if (clone_flags & CLONE_PIDFD) {
+		retval = pidfd_create(pid);
+		if (retval < 0)
+			goto bad_fork_free_pid;
+
+		pidfd = retval;
+		retval = put_user(pidfd, parent_tidptr);
+		if (retval)
+			goto bad_fork_put_pidfd;
+	}
+
 #ifdef CONFIG_BLOCK
 	p->plug = NULL;
 #endif
@@ -2009,7 +2139,7 @@
 	 */
 	retval = cgroup_can_fork(p);
 	if (retval)
-		goto bad_fork_free_pid;
+		goto bad_fork_cgroup_threadgroup_change_end;
 
 	/*
 	 * From this point on we must avoid any synchronous user-space
@@ -2124,8 +2254,12 @@
 	spin_unlock(&current->sighand->siglock);
 	write_unlock_irq(&tasklist_lock);
 	cgroup_cancel_fork(p);
-bad_fork_free_pid:
+bad_fork_cgroup_threadgroup_change_end:
 	cgroup_threadgroup_change_end(current);
+bad_fork_put_pidfd:
+	if (clone_flags & CLONE_PIDFD)
+		ksys_close(pidfd);
+bad_fork_free_pid:
 	if (pid != &init_struct_pid)
 		free_pid(pid);
 bad_fork_cleanup_thread:
@@ -2192,7 +2326,7 @@
 struct task_struct *fork_idle(int cpu)
 {
 	struct task_struct *task;
-	task = copy_process(CLONE_VM, 0, 0, NULL, &init_struct_pid, 0, 0,
+	task = copy_process(CLONE_VM, 0, 0, NULL, NULL, &init_struct_pid, 0, 0,
 			    cpu_to_node(cpu));
 	if (!IS_ERR(task)) {
 		init_idle_pids(task);
@@ -2239,7 +2373,7 @@
 			trace = 0;
 	}
 
-	p = copy_process(clone_flags, stack_start, stack_size,
+	p = copy_process(clone_flags, stack_start, stack_size, parent_tidptr,
 			 child_tidptr, NULL, trace, tls, NUMA_NO_NODE);
 	add_latent_entropy();
 
diff --git a/kernel/pid.c b/kernel/pid.c
index b88fe5e..e602858 100644
--- a/kernel/pid.c
+++ b/kernel/pid.c
@@ -38,6 +38,8 @@
 #include <linux/syscalls.h>
 #include <linux/proc_ns.h>
 #include <linux/proc_fs.h>
+#include <linux/anon_inodes.h>
+#include <linux/sched/signal.h>
 #include <linux/sched/task.h>
 #include <linux/idr.h>
 
@@ -214,6 +216,8 @@
 	for (type = 0; type < PIDTYPE_MAX; ++type)
 		INIT_HLIST_HEAD(&pid->tasks[type]);
 
+	init_waitqueue_head(&pid->wait_pidfd);
+
 	upid = pid->numbers + ns->level;
 	spin_lock_irq(&pidmap_lock);
 	if (!(ns->pid_allocated & PIDNS_ADDING))
@@ -451,6 +455,73 @@
 	return idr_get_next(&ns->idr, &nr);
 }
 
+/**
+ * pidfd_create() - Create a new pid file descriptor.
+ *
+ * @pid:  struct pid that the pidfd will reference
+ *
+ * This creates a new pid file descriptor with the O_CLOEXEC flag set.
+ *
+ * Note, that this function can only be called after the fd table has
+ * been unshared to avoid leaking the pidfd to the new process.
+ *
+ * Return: On success, a cloexec pidfd is returned.
+ *         On error, a negative errno number will be returned.
+ */
+static int pidfd_create(struct pid *pid)
+{
+	int fd;
+
+	fd = anon_inode_getfd("[pidfd]", &pidfd_fops, get_pid(pid),
+			      O_RDWR | O_CLOEXEC);
+	if (fd < 0)
+		put_pid(pid);
+
+	return fd;
+}
+
+/**
+ * pidfd_open() - Open new pid file descriptor.
+ *
+ * @pid:   pid for which to retrieve a pidfd
+ * @flags: flags to pass
+ *
+ * This creates a new pid file descriptor with the O_CLOEXEC flag set for
+ * the process identified by @pid. Currently, the process identified by
+ * @pid must be a thread-group leader. This restriction currently exists
+ * for all aspects of pidfds including pidfd creation (CLONE_PIDFD cannot
+ * be used with CLONE_THREAD) and pidfd polling (only supports thread group
+ * leaders).
+ *
+ * Return: On success, a cloexec pidfd is returned.
+ *         On error, a negative errno number will be returned.
+ */
+SYSCALL_DEFINE2(pidfd_open, pid_t, pid, unsigned int, flags)
+{
+	int fd, ret;
+	struct pid *p;
+
+	if (flags)
+		return -EINVAL;
+
+	if (pid <= 0)
+		return -EINVAL;
+
+	p = find_get_pid(pid);
+	if (!p)
+		return -ESRCH;
+
+	ret = 0;
+	rcu_read_lock();
+	if (!pid_task(p, PIDTYPE_TGID))
+		ret = -EINVAL;
+	rcu_read_unlock();
+
+	fd = ret ?: pidfd_create(p);
+	put_pid(p);
+	return fd;
+}
+
 void __init pid_idr_init(void)
 {
 	/* Verify no one has done anything silly: */
diff --git a/kernel/power/main.c b/kernel/power/main.c
index 35b5082..6bcb47d3 100644
--- a/kernel/power/main.c
+++ b/kernel/power/main.c
@@ -242,7 +242,6 @@
 power_attr(pm_test);
 #endif /* CONFIG_PM_SLEEP_DEBUG */
 
-#ifdef CONFIG_DEBUG_FS
 static char *suspend_step_name(enum suspend_stat_step step)
 {
 	switch (step) {
@@ -263,6 +262,92 @@
 	}
 }
 
+#define suspend_attr(_name)					\
+static ssize_t _name##_show(struct kobject *kobj,		\
+		struct kobj_attribute *attr, char *buf)		\
+{								\
+	return sprintf(buf, "%d\n", suspend_stats._name);	\
+}								\
+static struct kobj_attribute _name = __ATTR_RO(_name)
+
+suspend_attr(success);
+suspend_attr(fail);
+suspend_attr(failed_freeze);
+suspend_attr(failed_prepare);
+suspend_attr(failed_suspend);
+suspend_attr(failed_suspend_late);
+suspend_attr(failed_suspend_noirq);
+suspend_attr(failed_resume);
+suspend_attr(failed_resume_early);
+suspend_attr(failed_resume_noirq);
+
+static ssize_t last_failed_dev_show(struct kobject *kobj,
+		struct kobj_attribute *attr, char *buf)
+{
+	int index;
+	char *last_failed_dev = NULL;
+
+	index = suspend_stats.last_failed_dev + REC_FAILED_NUM - 1;
+	index %= REC_FAILED_NUM;
+	last_failed_dev = suspend_stats.failed_devs[index];
+
+	return sprintf(buf, "%s\n", last_failed_dev);
+}
+static struct kobj_attribute last_failed_dev = __ATTR_RO(last_failed_dev);
+
+static ssize_t last_failed_errno_show(struct kobject *kobj,
+		struct kobj_attribute *attr, char *buf)
+{
+	int index;
+	int last_failed_errno;
+
+	index = suspend_stats.last_failed_errno + REC_FAILED_NUM - 1;
+	index %= REC_FAILED_NUM;
+	last_failed_errno = suspend_stats.errno[index];
+
+	return sprintf(buf, "%d\n", last_failed_errno);
+}
+static struct kobj_attribute last_failed_errno = __ATTR_RO(last_failed_errno);
+
+static ssize_t last_failed_step_show(struct kobject *kobj,
+		struct kobj_attribute *attr, char *buf)
+{
+	int index;
+	enum suspend_stat_step step;
+	char *last_failed_step = NULL;
+
+	index = suspend_stats.last_failed_step + REC_FAILED_NUM - 1;
+	index %= REC_FAILED_NUM;
+	step = suspend_stats.failed_steps[index];
+	last_failed_step = suspend_step_name(step);
+
+	return sprintf(buf, "%s\n", last_failed_step);
+}
+static struct kobj_attribute last_failed_step = __ATTR_RO(last_failed_step);
+
+static struct attribute *suspend_attrs[] = {
+	&success.attr,
+	&fail.attr,
+	&failed_freeze.attr,
+	&failed_prepare.attr,
+	&failed_suspend.attr,
+	&failed_suspend_late.attr,
+	&failed_suspend_noirq.attr,
+	&failed_resume.attr,
+	&failed_resume_early.attr,
+	&failed_resume_noirq.attr,
+	&last_failed_dev.attr,
+	&last_failed_errno.attr,
+	&last_failed_step.attr,
+	NULL,
+};
+
+static struct attribute_group suspend_attr_group = {
+	.name = "suspend_stats",
+	.attrs = suspend_attrs,
+};
+
+#ifdef CONFIG_DEBUG_FS
 static int suspend_stats_show(struct seq_file *s, void *unused)
 {
 	int i, index, last_dev, last_errno, last_step;
@@ -793,6 +878,14 @@
 	.attrs = g,
 };
 
+static const struct attribute_group *attr_groups[] = {
+	&attr_group,
+#ifdef CONFIG_PM_SLEEP
+	&suspend_attr_group,
+#endif
+	NULL,
+};
+
 struct workqueue_struct *pm_wq;
 EXPORT_SYMBOL_GPL(pm_wq);
 
@@ -814,7 +907,7 @@
 	power_kobj = kobject_create_and_add("power", NULL);
 	if (!power_kobj)
 		return -ENOMEM;
-	error = sysfs_create_group(power_kobj, &attr_group);
+	error = sysfs_create_groups(power_kobj, attr_groups);
 	if (error)
 		return error;
 	pm_print_times_init();
diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c
index 36cb7ed..3ef2c53 100644
--- a/kernel/power/suspend.c
+++ b/kernel/power/suspend.c
@@ -496,7 +496,7 @@
  */
 int suspend_devices_and_enter(suspend_state_t state)
 {
-	int error;
+	int error, last_dev;
 	bool wakeup = false;
 
 	if (!sleep_state_supported(state))
@@ -512,8 +512,11 @@
 	suspend_test_start();
 	error = dpm_suspend_start(PMSG_SUSPEND);
 	if (error) {
+		last_dev = suspend_stats.last_failed_dev + REC_FAILED_NUM - 1;
+		last_dev %= REC_FAILED_NUM;
 		pr_err("Some devices failed to suspend, or early wake event detected\n");
-		log_suspend_abort_reason("Some devices failed to suspend, or early wake event detected");
+		log_suspend_abort_reason("%s device failed to suspend, or early wake event detected",
+			suspend_stats.failed_devs[last_dev]);
 		goto Recover_platform;
 	}
 	suspend_test_finish("suspend devices");
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 0e34c8d..db6ad21 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -12,6 +12,7 @@
 #include <linux/kcov.h>
 #include <linux/irq.h>
 #include <linux/delay.h>
+#include <linux/scs.h>
 
 #include <asm/switch_to.h>
 #include <asm/tlb.h>
@@ -5039,8 +5040,10 @@
 bool is_sched_lib_based_app(pid_t pid)
 {
 	const char *name = NULL;
+	char *libname, *lib_list;
 	struct vm_area_struct *vma;
 	char path_buf[LIB_PATH_LENGTH];
+	char tmp_lib_name[LIB_PATH_LENGTH];
 	bool found = false;
 	struct task_struct *p;
 	struct mm_struct *mm;
@@ -5072,10 +5075,15 @@
 			if (IS_ERR(name))
 				goto release_sem;
 
-			if (strnstr(name, sched_lib_name,
+			strlcpy(tmp_lib_name, sched_lib_name, LIB_PATH_LENGTH);
+			lib_list = tmp_lib_name;
+			while ((libname = strsep(&lib_list, ","))) {
+				libname = skip_spaces(libname);
+				if (strnstr(name, libname,
 					strnlen(name, LIB_PATH_LENGTH))) {
-				found = true;
-				break;
+					found = true;
+					goto release_sem;
+				}
 			}
 		}
 	}
@@ -5654,6 +5662,7 @@
 	idle->se.exec_start = sched_clock();
 	idle->flags |= PF_IDLE;
 
+	scs_task_reset(idle);
 	kasan_unpoison_task_stack(idle);
 
 #ifdef CONFIG_SMP
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 5d46f93..692d3fc 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -176,6 +176,7 @@
 /* 0.68ms default for 20ms window size scaled to 1024 */
 unsigned int sysctl_sched_min_task_util_for_colocation = 35;
 unsigned int sched_task_filter_util = 35;
+__read_mostly unsigned int sysctl_sched_prefer_spread;
 #endif
 unsigned int sched_small_task_threshold = 102;
 
@@ -3928,16 +3929,27 @@
 }
 
 struct find_best_target_env {
-	bool is_rtg;
 	int placement_boost;
-	bool need_idle;
-	bool boosted;
+	int need_idle;
 	int fastpath;
 	int start_cpu;
-	bool strict_max;
 	int skip_cpu;
+	bool is_rtg;
+	bool boosted;
+	bool strict_max;
 };
 
+static inline bool prefer_spread_on_idle(int cpu)
+{
+	if (likely(!sysctl_sched_prefer_spread))
+		return false;
+
+	if (is_min_capacity_cpu(cpu))
+		return sysctl_sched_prefer_spread >= 1;
+
+	return sysctl_sched_prefer_spread > 1;
+}
+
 static inline void adjust_cpus_for_packing(struct task_struct *p,
 			int *target_cpu, int *best_idle_cpu,
 			int shallowest_idle_cstate,
@@ -3949,8 +3961,11 @@
 	if (*best_idle_cpu == -1 || *target_cpu == -1)
 		return;
 
-	if (task_placement_boost_enabled(p) || fbt_env->need_idle || boosted ||
-			shallowest_idle_cstate <= 0) {
+	if (prefer_spread_on_idle(*best_idle_cpu))
+		fbt_env->need_idle |= 2;
+
+	if (fbt_env->need_idle || task_placement_boost_enabled(p) || boosted ||
+		shallowest_idle_cstate <= 0) {
 		*target_cpu = -1;
 		return;
 	}
@@ -6081,7 +6096,8 @@
 boosted_cpu_util(int cpu, unsigned long other_util,
 		 struct sched_walt_cpu_load *walt_load)
 {
-	unsigned long util = cpu_util_freq(cpu, walt_load) + other_util;
+	unsigned long util = min_t(unsigned long, SCHED_CAPACITY_SCALE,
+				   cpu_util_freq(cpu, walt_load) + other_util);
 	long margin = schedtune_cpu_margin(util, cpu);
 
 	trace_sched_boost_cpu(cpu, util, margin);
@@ -7582,6 +7598,7 @@
 	curr_is_rtg = task_in_related_thread_group(cpu_rq(cpu)->curr);
 
 	fbt_env.fastpath = 0;
+	fbt_env.need_idle = need_idle;
 
 	if (trace_sched_task_util_enabled())
 		start_t = sched_clock();
@@ -7629,7 +7646,6 @@
 	if (sched_feat(FIND_BEST_TARGET)) {
 		fbt_env.is_rtg = is_rtg;
 		fbt_env.placement_boost = placement_boost;
-		fbt_env.need_idle = need_idle;
 		fbt_env.start_cpu = start_cpu;
 		fbt_env.boosted = boosted;
 		fbt_env.strict_max = is_rtg &&
@@ -7659,7 +7675,7 @@
 	if (p->state == TASK_WAKING)
 		delta = task_util(p);
 #endif
-	if (task_placement_boost_enabled(p) || need_idle || boosted ||
+	if (task_placement_boost_enabled(p) || fbt_env.need_idle || boosted ||
 	    is_rtg || __cpu_overutilized(prev_cpu, delta) ||
 	    !task_fits_max(p, prev_cpu) || cpu_isolated(prev_cpu)) {
 		best_energy_cpu = cpu;
@@ -7703,8 +7719,9 @@
 done:
 
 	trace_sched_task_util(p, cpumask_bits(candidates)[0], best_energy_cpu,
-			sync, need_idle, fbt_env.fastpath, placement_boost,
-			start_t, boosted, is_rtg, get_rtg_status(p), start_cpu);
+			sync, fbt_env.need_idle, fbt_env.fastpath,
+			placement_boost, start_t, boosted, is_rtg,
+			get_rtg_status(p), start_cpu);
 
 	return best_energy_cpu;
 
@@ -8410,6 +8427,7 @@
 	unsigned int		loop;
 	unsigned int		loop_break;
 	unsigned int		loop_max;
+	bool			prefer_spread;
 
 	enum fbq_type		fbq_type;
 	enum group_type		src_grp_type;
@@ -8582,8 +8600,8 @@
 		struct root_domain *rd = env->dst_rq->rd;
 
 		if ((rcu_dereference(rd->pd) && !sd_overutilized(env->sd)) &&
-					env->idle == CPU_NEWLY_IDLE &&
-					!task_in_related_thread_group(p)) {
+		    env->idle == CPU_NEWLY_IDLE && !env->prefer_spread &&
+		    !task_in_related_thread_group(p)) {
 			long util_cum_dst, util_cum_src;
 			unsigned long demand;
 
@@ -8754,8 +8772,13 @@
 		 * So only when there is other tasks can be balanced or
 		 * there is situation to ignore big task, it is needed
 		 * to skip the task load bigger than 2*imbalance.
+		 *
+		 * And load based checks are skipped for prefer_spread in
+		 * finding busiest group, ignore the task's h_load.
 		 */
-		if (((cpu_rq(env->src_cpu)->nr_running > 2) ||
+
+		if (!env->prefer_spread &&
+			((cpu_rq(env->src_cpu)->nr_running > 2) ||
 			(env->flags & LBF_IGNORE_BIG_TASKS)) &&
 			((load / 2) > env->imbalance))
 			goto next;
@@ -9549,6 +9572,11 @@
 	if (sgs->group_type < busiest->group_type)
 		return false;
 
+	if (env->prefer_spread && env->idle != CPU_NOT_IDLE &&
+		(sgs->sum_nr_running > busiest->sum_nr_running) &&
+		(sgs->group_util > busiest->group_util))
+		return true;
+
 	if (sgs->avg_load <= busiest->avg_load)
 		return false;
 
@@ -9582,6 +9610,11 @@
 		return false;
 
 asym_packing:
+
+	if (env->prefer_spread &&
+		(sgs->sum_nr_running < busiest->sum_nr_running))
+		return false;
+
 	/* This is the busiest node in its class. */
 	if (!(env->sd->flags & SD_ASYM_PACKING))
 		return true;
@@ -10052,6 +10085,15 @@
 
 		return fix_small_imbalance(env, sds);
 	}
+
+	/*
+	 * If we couldn't find any imbalance, then boost the imbalance
+	 * with the group util.
+	 */
+	if (env->prefer_spread && !env->imbalance &&
+		env->idle != CPU_NOT_IDLE &&
+		busiest->sum_nr_running > busiest->group_weight)
+		env->imbalance = busiest->group_util;
 }
 
 /******* find_busiest_group() helpers end here *********************/
@@ -10439,6 +10481,11 @@
 		.loop		= 0,
 	};
 
+	env.prefer_spread = (prefer_spread_on_idle(this_cpu) &&
+				!((sd->flags & SD_ASYM_CPUCAPACITY) &&
+				 !cpumask_test_cpu(this_cpu,
+						 &asym_cap_sibling_cpus)));
+
 	cpumask_and(cpus, sched_domain_span(sd), cpu_active_mask);
 
 	schedstat_inc(sd->lb_count[idle]);
@@ -10728,7 +10775,7 @@
 				 busiest ? busiest->nr_running : 0,
 				 env.imbalance, env.flags, ld_moved,
 				 sd->balance_interval, active_balance,
-				 sd_overutilized(sd));
+				 sd_overutilized(sd), env.prefer_spread);
 	return ld_moved;
 }
 
@@ -10961,7 +11008,7 @@
 		}
 		max_cost += sd->max_newidle_lb_cost;
 
-		if (!sd_overutilized(sd))
+		if (!sd_overutilized(sd) && !prefer_spread_on_idle(cpu))
 			continue;
 
 		if (!(sd->flags & SD_LOAD_BALANCE))
@@ -11045,6 +11092,71 @@
 }
 
 #ifdef CONFIG_NO_HZ_COMMON
+static inline int find_energy_aware_new_ilb(void)
+{
+	int ilb = nr_cpu_ids;
+	struct sched_domain *sd;
+	int cpu = raw_smp_processor_id();
+	cpumask_t idle_cpus, tmp_cpus;
+	struct sched_group *sg;
+	unsigned long ref_cap = capacity_orig_of(cpu);
+	unsigned long best_cap = 0, best_cap_cpu = -1;
+
+	rcu_read_lock();
+	sd = rcu_dereference(per_cpu(sd_asym_cpucapacity, cpu));
+	if (!sd)
+		goto out;
+
+	cpumask_and(&idle_cpus, nohz.idle_cpus_mask,
+			housekeeping_cpumask(HK_FLAG_MISC));
+	cpumask_andnot(&idle_cpus, &idle_cpus, cpu_isolated_mask);
+
+	sg = sd->groups;
+	do {
+		int i;
+		unsigned long cap;
+
+		cpumask_and(&tmp_cpus, &idle_cpus, sched_group_span(sg));
+		i = cpumask_first(&tmp_cpus);
+
+		/* This sg did not have any idle CPUs */
+		if (i >= nr_cpu_ids)
+			continue;
+
+		cap = capacity_orig_of(i);
+
+		/* The first preference is for the same capacity CPU */
+		if (cap == ref_cap) {
+			ilb = i;
+			break;
+		}
+
+		/*
+		 * When there are no idle CPUs in the same capacity group,
+		 * we find the next best capacity CPU.
+		 */
+		if (best_cap > ref_cap) {
+			if (cap > ref_cap && cap < best_cap) {
+				best_cap = cap;
+				best_cap_cpu = i;
+			}
+			continue;
+		}
+
+		if (cap > best_cap) {
+			best_cap = cap;
+			best_cap_cpu = i;
+		}
+
+	} while (sg = sg->next, sg != sd->groups);
+
+	if (best_cap_cpu != -1)
+		ilb = best_cap_cpu;
+out:
+	rcu_read_unlock();
+	return ilb;
+}
+
 /*
  * idle load balancing details
  * - When one of the busy CPUs notice that there may be an idle rebalancing
@@ -11056,33 +11168,10 @@
 
 static inline int find_new_ilb(void)
 {
-	int ilb = nr_cpu_ids;
-	struct sched_domain *sd;
-	int cpu = raw_smp_processor_id();
-	struct rq *rq = cpu_rq(cpu);
-	cpumask_t cpumask;
+	int ilb;
 
-	rcu_read_lock();
-	sd = rcu_dereference_check_sched_domain(rq->sd);
-	if (sd) {
-		cpumask_and(&cpumask, nohz.idle_cpus_mask,
-				sched_domain_span(sd));
-		cpumask_andnot(&cpumask, &cpumask,
-				cpu_isolated_mask);
-		ilb = cpumask_first(&cpumask);
-	}
-	rcu_read_unlock();
-
-	if (sd && (ilb >= nr_cpu_ids || !idle_cpu(ilb))) {
-		if (!static_branch_unlikely(&sched_energy_present) ||
-				(capacity_orig_of(cpu) ==
-				cpu_rq(cpu)->rd->max_cpu_capacity.val ||
-				cpu_overutilized(cpu))) {
-			cpumask_andnot(&cpumask, nohz.idle_cpus_mask,
-					cpu_isolated_mask);
-			ilb = cpumask_first(&cpumask);
-		}
-	}
+	if (static_branch_likely(&sched_energy_present))
+		return find_energy_aware_new_ilb();
 
 	for_each_cpu_and(ilb, nohz.idle_cpus_mask,
 			      housekeeping_cpumask(HK_FLAG_MISC)) {
@@ -11166,7 +11255,19 @@
 	if (time_before(now, nohz.next_balance))
 		goto out;
 
-	if (rq->nr_running >= 2 || rq->misfit_task_load) {
+	/*
+	 * With EAS, no-hz idle balance is allowed only when the CPU
+	 * is overutilized and has 2 tasks. The misfit task migration
+	 * happens from the tickpath.
+	 */
+	if (static_branch_likely(&sched_energy_present)) {
+		if (rq->nr_running >= 2 && (cpu_overutilized(cpu) ||
+			prefer_spread_on_idle(cpu)))
+			flags = NOHZ_KICK_MASK;
+		goto out;
+	}
+
+	if (rq->nr_running >= 2) {
 		flags = NOHZ_KICK_MASK;
 		goto out;
 	}
@@ -11531,6 +11632,11 @@
 	int pulled_task = 0;
 	u64 curr_cost = 0;
 	u64 avg_idle = this_rq->avg_idle;
+	bool prefer_spread = prefer_spread_on_idle(this_cpu);
+	bool force_lb = (!is_min_capacity_cpu(this_cpu) &&
+				silver_has_big_tasks() &&
+				(atomic_read(&this_rq->nr_iowait) == 0));
+
 
 	if (cpu_isolated(this_cpu))
 		return 0;
@@ -11546,8 +11652,8 @@
 	 */
 	if (!cpu_active(this_cpu))
 		return 0;
-	if (!is_min_capacity_cpu(this_cpu) && silver_has_big_tasks()
-		&& (atomic_read(&this_rq->nr_iowait) == 0))
+
+	if (force_lb || prefer_spread)
 		avg_idle = ULLONG_MAX;
 	/*
 	 * This is OK, because current is on_cpu, which avoids it being picked
@@ -11582,6 +11688,11 @@
 		if (!(sd->flags & SD_LOAD_BALANCE))
 			continue;
 
+		if (prefer_spread && !force_lb &&
+			(sd->flags & SD_ASYM_CPUCAPACITY) &&
+			!(cpumask_test_cpu(this_cpu, &asym_cap_sibling_cpus)))
+			avg_idle = this_rq->avg_idle;
+
 		if (avg_idle < curr_cost + sd->max_newidle_lb_cost) {
 			update_next_balance(sd, &next_balance);
 			break;
diff --git a/kernel/sched/psi.c b/kernel/sched/psi.c
index d78f53b..101bb08 100644
--- a/kernel/sched/psi.c
+++ b/kernel/sched/psi.c
@@ -1167,7 +1167,7 @@
 
 	if (!rcu_access_pointer(group->poll_kworker)) {
 		struct sched_param param = {
-			.sched_priority = MAX_RT_PRIO - 1,
+			.sched_priority = 1,
 		};
 		struct kthread_worker *kworker;
 
@@ -1177,7 +1177,7 @@
 			mutex_unlock(&group->trigger_lock);
 			return ERR_CAST(kworker);
 		}
-		sched_setscheduler(kworker->task, SCHED_FIFO, &param);
+		sched_setscheduler_nocheck(kworker->task, SCHED_FIFO, &param);
 		kthread_init_delayed_work(&group->poll_work,
 				psi_poll_work);
 		rcu_assign_pointer(group->poll_kworker, kworker);
@@ -1248,7 +1248,15 @@
 	 * deadlock while waiting for psi_poll_work to acquire trigger_lock
 	 */
 	if (kworker_to_destroy) {
+		/*
+		 * After the RCU grace period has expired, the worker
+		 * can no longer be found through group->poll_kworker.
+		 * But it might have been already scheduled before
+		 * that - deschedule it cleanly before destroying it.
+		 */
 		kthread_cancel_delayed_work_sync(&group->poll_work);
+		atomic_set(&group->poll_scheduled, 0);
+
 		kthread_destroy_worker(kworker_to_destroy);
 	}
 	kfree(t);
diff --git a/kernel/sched/walt.c b/kernel/sched/walt.c
index 85a9f2a..f42c052 100644
--- a/kernel/sched/walt.c
+++ b/kernel/sched/walt.c
@@ -3558,6 +3558,9 @@
 	struct rq *rq = cpu_rq(cpumask_first(cpu_possible_mask));
 	unsigned long flags;
 
+	if (unlikely(num_sched_clusters <= 0))
+		return -EPERM;
+
 	mutex_lock(&mutex);
 	ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
 	if (ret || !write) {
diff --git a/kernel/scs.c b/kernel/scs.c
new file mode 100644
index 0000000..ad74d13
--- /dev/null
+++ b/kernel/scs.c
@@ -0,0 +1,246 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Shadow Call Stack support.
+ *
+ * Copyright (C) 2019 Google LLC
+ */
+
+#include <linux/cpuhotplug.h>
+#include <linux/kasan.h>
+#include <linux/mm.h>
+#include <linux/mmzone.h>
+#include <linux/scs.h>
+#include <linux/slab.h>
+#include <linux/vmalloc.h>
+#include <linux/vmstat.h>
+#include <asm/scs.h>
+
+static inline void *__scs_base(struct task_struct *tsk)
+{
+	/*
+	 * To minimize risk the of exposure, architectures may clear a
+	 * task's thread_info::shadow_call_stack while that task is
+	 * running, and only save/restore the active shadow call stack
+	 * pointer when the usual register may be clobbered (e.g. across
+	 * context switches).
+	 *
+	 * The shadow call stack is aligned to SCS_SIZE, and grows
+	 * upwards, so we can mask out the low bits to extract the base
+	 * when the task is not running.
+	 */
+	return (void *)((unsigned long)task_scs(tsk) & ~(SCS_SIZE - 1));
+}
+
+static inline unsigned long *scs_magic(void *s)
+{
+	return (unsigned long *)(s + SCS_SIZE) - 1;
+}
+
+static inline void scs_set_magic(void *s)
+{
+	*scs_magic(s) = SCS_END_MAGIC;
+}
+
+#ifdef CONFIG_SHADOW_CALL_STACK_VMAP
+
+/* Matches NR_CACHED_STACKS for VMAP_STACK */
+#define NR_CACHED_SCS 2
+static DEFINE_PER_CPU(void *, scs_cache[NR_CACHED_SCS]);
+
+static void *scs_alloc(int node)
+{
+	int i;
+	void *s;
+
+	for (i = 0; i < NR_CACHED_SCS; i++) {
+		s = this_cpu_xchg(scs_cache[i], NULL);
+		if (s) {
+			memset(s, 0, SCS_SIZE);
+			goto out;
+		}
+	}
+
+	/*
+	 * We allocate a full page for the shadow stack, which should be
+	 * more than we need. Check the assumption nevertheless.
+	 */
+	BUILD_BUG_ON(SCS_SIZE > PAGE_SIZE);
+
+	s = __vmalloc_node_range(PAGE_SIZE, SCS_SIZE,
+				 VMALLOC_START, VMALLOC_END,
+				 GFP_SCS, PAGE_KERNEL, 0,
+				 node, __builtin_return_address(0));
+
+out:
+	if (s)
+		scs_set_magic(s);
+	/* TODO: poison for KASAN, unpoison in scs_free */
+
+	return s;
+}
+
+static void scs_free(void *s)
+{
+	int i;
+
+	for (i = 0; i < NR_CACHED_SCS; i++)
+		if (this_cpu_cmpxchg(scs_cache[i], 0, s) == NULL)
+			return;
+
+	vfree_atomic(s);
+}
+
+static struct page *__scs_page(struct task_struct *tsk)
+{
+	return vmalloc_to_page(__scs_base(tsk));
+}
+
+static int scs_cleanup(unsigned int cpu)
+{
+	int i;
+	void **cache = per_cpu_ptr(scs_cache, cpu);
+
+	for (i = 0; i < NR_CACHED_SCS; i++) {
+		vfree(cache[i]);
+		cache[i] = NULL;
+	}
+
+	return 0;
+}
+
+void __init scs_init(void)
+{
+	WARN_ON(cpuhp_setup_state(CPUHP_BP_PREPARE_DYN, "scs:scs_cache", NULL,
+			scs_cleanup) < 0);
+}
+
+#else /* !CONFIG_SHADOW_CALL_STACK_VMAP */
+
+static struct kmem_cache *scs_cache;
+
+static inline void *scs_alloc(int node)
+{
+	void *s;
+
+	s = kmem_cache_alloc_node(scs_cache, GFP_SCS, node);
+	if (s) {
+		scs_set_magic(s);
+		/*
+		 * Poison the allocation to catch unintentional accesses to
+		 * the shadow stack when KASAN is enabled.
+		 */
+		kasan_poison_object_data(scs_cache, s);
+	}
+
+	return s;
+}
+
+static inline void scs_free(void *s)
+{
+	kasan_unpoison_object_data(scs_cache, s);
+	kmem_cache_free(scs_cache, s);
+}
+
+static struct page *__scs_page(struct task_struct *tsk)
+{
+	return virt_to_page(__scs_base(tsk));
+}
+
+void __init scs_init(void)
+{
+	scs_cache = kmem_cache_create("scs_cache", SCS_SIZE, SCS_SIZE,
+				0, NULL);
+	WARN_ON(!scs_cache);
+}
+
+#endif /* CONFIG_SHADOW_CALL_STACK_VMAP */
+
+void scs_task_reset(struct task_struct *tsk)
+{
+	/*
+	 * Reset the shadow stack to the base address in case the task
+	 * is reused.
+	 */
+	task_set_scs(tsk, __scs_base(tsk));
+}
+
+static void scs_account(struct task_struct *tsk, int account)
+{
+	mod_zone_page_state(page_zone(__scs_page(tsk)), NR_KERNEL_SCS_BYTES,
+		account * SCS_SIZE);
+}
+
+int scs_prepare(struct task_struct *tsk, int node)
+{
+	void *s;
+
+	s = scs_alloc(node);
+	if (!s)
+		return -ENOMEM;
+
+	task_set_scs(tsk, s);
+	scs_account(tsk, 1);
+
+	return 0;
+}
+
+#ifdef CONFIG_DEBUG_STACK_USAGE
+static inline unsigned long scs_used(struct task_struct *tsk)
+{
+	unsigned long *p = __scs_base(tsk);
+	unsigned long *end = scs_magic(p);
+	unsigned long s = (unsigned long)p;
+
+	while (p < end && READ_ONCE_NOCHECK(*p))
+		p++;
+
+	return (unsigned long)p - s;
+}
+
+static void scs_check_usage(struct task_struct *tsk)
+{
+	static DEFINE_SPINLOCK(lock);
+	static unsigned long highest;
+	unsigned long used = scs_used(tsk);
+
+	if (used <= highest)
+		return;
+
+	spin_lock(&lock);
+
+	if (used > highest) {
+		pr_info("%s (%d): highest shadow stack usage: %lu bytes\n",
+			tsk->comm, task_pid_nr(tsk), used);
+		highest = used;
+	}
+
+	spin_unlock(&lock);
+}
+#else
+static inline void scs_check_usage(struct task_struct *tsk)
+{
+}
+#endif
+
+bool scs_corrupted(struct task_struct *tsk)
+{
+	unsigned long *magic = scs_magic(__scs_base(tsk));
+
+	return READ_ONCE_NOCHECK(*magic) != SCS_END_MAGIC;
+}
+
+void scs_release(struct task_struct *tsk)
+{
+	void *s;
+
+	s = __scs_base(tsk);
+	if (!s)
+		return;
+
+	WARN_ON(scs_corrupted(tsk));
+	scs_check_usage(tsk);
+
+	scs_account(tsk, -1);
+	task_set_scs(tsk, NULL);
+	scs_free(s);
+}
diff --git a/kernel/signal.c b/kernel/signal.c
index 83f85af..12057b2 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -19,7 +19,9 @@
 #include <linux/sched/task.h>
 #include <linux/sched/task_stack.h>
 #include <linux/sched/cputime.h>
+#include <linux/file.h>
 #include <linux/fs.h>
+#include <linux/proc_fs.h>
 #include <linux/tty.h>
 #include <linux/binfmts.h>
 #include <linux/coredump.h>
@@ -1808,6 +1810,14 @@
 	return ret;
 }
 
+static void do_notify_pidfd(struct task_struct *task)
+{
+	struct pid *pid;
+
+	pid = task_pid(task);
+	wake_up_all(&pid->wait_pidfd);
+}
+
 /*
  * Let a parent know about the death of a child.
  * For a stopped/continued status change, use do_notify_parent_cldstop instead.
@@ -1831,6 +1841,9 @@
 	BUG_ON(!tsk->ptrace &&
 	       (tsk->group_leader != tsk || !thread_group_empty(tsk)));
 
+	/* Wake up all pidfd waiters */
+	do_notify_pidfd(tsk);
+
 	if (sig != SIGCHLD) {
 		/*
 		 * This is only possible if parent == real_parent.
@@ -3276,6 +3289,16 @@
 }
 #endif
 
+static inline void prepare_kill_siginfo(int sig, struct siginfo *info)
+{
+	clear_siginfo(info);
+	info->si_signo = sig;
+	info->si_errno = 0;
+	info->si_code = SI_USER;
+	info->si_pid = task_tgid_vnr(current);
+	info->si_uid = from_kuid_munged(current_user_ns(), current_uid());
+}
+
 /**
  *  sys_kill - send a signal to a process
  *  @pid: the PID of the process
@@ -3285,16 +3308,125 @@
 {
 	struct siginfo info;
 
-	clear_siginfo(&info);
-	info.si_signo = sig;
-	info.si_errno = 0;
-	info.si_code = SI_USER;
-	info.si_pid = task_tgid_vnr(current);
-	info.si_uid = from_kuid_munged(current_user_ns(), current_uid());
+	prepare_kill_siginfo(sig, &info);
 
 	return kill_something_info(sig, &info, pid);
 }
 
+/*
+ * Verify that the signaler and signalee either are in the same pid namespace
+ * or that the signaler's pid namespace is an ancestor of the signalee's pid
+ * namespace.
+ */
+static bool access_pidfd_pidns(struct pid *pid)
+{
+	struct pid_namespace *active = task_active_pid_ns(current);
+	struct pid_namespace *p = ns_of_pid(pid);
+
+	for (;;) {
+		if (!p)
+			return false;
+		if (p == active)
+			break;
+		p = p->parent;
+	}
+
+	return true;
+}
+
+static int copy_siginfo_from_user_any(siginfo_t *kinfo, siginfo_t __user *info)
+{
+#ifdef CONFIG_COMPAT
+	/*
+	 * Avoid hooking up compat syscalls and instead handle necessary
+	 * conversions here. Note, this is a stop-gap measure and should not be
+	 * considered a generic solution.
+	 */
+	if (in_compat_syscall())
+		return copy_siginfo_from_user32(
+			kinfo, (struct compat_siginfo __user *)info);
+#endif
+	return copy_from_user(kinfo, info, sizeof(siginfo_t));
+}
+
+static struct pid *pidfd_to_pid(const struct file *file)
+{
+	if (file->f_op == &pidfd_fops)
+		return file->private_data;
+
+	return tgid_pidfd_to_pid(file);
+}
+
+/**
+ * sys_pidfd_send_signal - Signal a process through a pidfd
+ * @pidfd:  file descriptor of the process
+ * @sig:    signal to send
+ * @info:   signal info
+ * @flags:  future flags
+ *
+ * The syscall currently only signals via PIDTYPE_PID which covers
+ * kill(<positive-pid>, <signal>. It does not signal threads or process
+ * groups.
+ * In order to extend the syscall to threads and process groups the @flags
+ * argument should be used. In essence, the @flags argument will determine
+ * what is signaled and not the file descriptor itself. Put in other words,
+ * grouping is a property of the flags argument not a property of the file
+ * descriptor.
+ *
+ * Return: 0 on success, negative errno on failure
+ */
+SYSCALL_DEFINE4(pidfd_send_signal, int, pidfd, int, sig,
+		siginfo_t __user *, info, unsigned int, flags)
+{
+	int ret;
+	struct fd f;
+	struct pid *pid;
+	siginfo_t kinfo;
+
+	/* Enforce flags be set to 0 until we add an extension. */
+	if (flags)
+		return -EINVAL;
+
+	f = fdget(pidfd);
+	if (!f.file)
+		return -EBADF;
+
+	/* Is this a pidfd? */
+	pid = pidfd_to_pid(f.file);
+	if (IS_ERR(pid)) {
+		ret = PTR_ERR(pid);
+		goto err;
+	}
+
+	ret = -EINVAL;
+	if (!access_pidfd_pidns(pid))
+		goto err;
+
+	if (info) {
+		ret = copy_siginfo_from_user_any(&kinfo, info);
+		if (unlikely(ret))
+			goto err;
+
+		ret = -EINVAL;
+		if (unlikely(sig != kinfo.si_signo))
+			goto err;
+
+		/* Only allow sending arbitrary signals to yourself. */
+		ret = -EPERM;
+		if ((task_pid(current) != pid) &&
+		    (kinfo.si_code >= 0 || kinfo.si_code == SI_TKILL))
+			goto err;
+	} else {
+		prepare_kill_siginfo(sig, &kinfo);
+	}
+
+	ret = kill_pid_info(sig, &kinfo, pid);
+
+err:
+	fdput(f);
+	return ret;
+}
+
 static int
 do_send_specific(pid_t tgid, pid_t pid, int sig, struct siginfo *info)
 {
diff --git a/kernel/sys.c b/kernel/sys.c
index 32b78d0..0a1cdee 100644
--- a/kernel/sys.c
+++ b/kernel/sys.c
@@ -123,6 +123,12 @@
 #ifndef SVE_GET_VL
 # define SVE_GET_VL()		(-EINVAL)
 #endif
+#ifndef SET_TAGGED_ADDR_CTRL
+# define SET_TAGGED_ADDR_CTRL(a)	(-EINVAL)
+#endif
+#ifndef GET_TAGGED_ADDR_CTRL
+# define GET_TAGGED_ADDR_CTRL()		(-EINVAL)
+#endif
 
 /*
  * this is where the system-wide overflow UID and GID are defined, for
@@ -2628,6 +2634,16 @@
 	case PR_SET_VMA:
 		error = prctl_set_vma(arg2, arg3, arg4, arg5);
 		break;
+	case PR_SET_TAGGED_ADDR_CTRL:
+		if (arg3 || arg4 || arg5)
+			return -EINVAL;
+		error = SET_TAGGED_ADDR_CTRL(arg2);
+		break;
+	case PR_GET_TAGGED_ADDR_CTRL:
+		if (arg2 || arg3 || arg4 || arg5)
+			return -EINVAL;
+		error = GET_TAGGED_ADDR_CTRL();
+		break;
 	default:
 		error = -EINVAL;
 		break;
diff --git a/kernel/sys_ni.c b/kernel/sys_ni.c
index df55617..7042383 100644
--- a/kernel/sys_ni.c
+++ b/kernel/sys_ni.c
@@ -162,8 +162,6 @@
 
 /* kernel/sched/core.c */
 
-/* kernel/signal.c */
-
 /* kernel/sys.c */
 COND_SYSCALL(setregid);
 COND_SYSCALL(setgid);
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index 410e3c1..23f49da 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -551,6 +551,15 @@
 		.mode		= 0644,
 		.proc_handler	= sched_updown_migrate_handler,
 	},
+	{
+		.procname	= "sched_prefer_spread",
+		.data		= &sysctl_sched_prefer_spread,
+		.maxlen		= sizeof(unsigned int),
+		.mode		= 0644,
+		.proc_handler   = proc_dointvec_minmax,
+		.extra1		= &zero,
+		.extra2		= &two,
+	},
 #endif
 #ifdef CONFIG_SCHED_DEBUG
 	{
diff --git a/kernel/taskstats.c b/kernel/taskstats.c
index cd709fe..d5b5f75 100644
--- a/kernel/taskstats.c
+++ b/kernel/taskstats.c
@@ -492,7 +492,7 @@
 	stats->version = SYSSTATS_VERSION;
 	stats->memtotal = K(i.totalram);
 	stats->reclaimable =
-		global_node_page_state(NR_INDIRECTLY_RECLAIMABLE_BYTES) >> 10;
+		K(global_node_page_state(NR_KERNEL_MISC_RECLAIMABLE));
 	stats->swap_used = K(i.totalswap - i.freeswap);
 	stats->swap_total = K(i.totalswap);
 	stats->vmalloc_total = K(vmalloc_nr_pages());
diff --git a/kernel/trace/trace_event_perf.c b/kernel/trace/trace_event_perf.c
index f5b3bf0..fb54fdc 100644
--- a/kernel/trace/trace_event_perf.c
+++ b/kernel/trace/trace_event_perf.c
@@ -8,6 +8,7 @@
 
 #include <linux/module.h>
 #include <linux/kprobes.h>
+#include <linux/security.h>
 #include "trace.h"
 #include "trace_probe.h"
 
@@ -26,8 +27,10 @@
 static int perf_trace_event_perm(struct trace_event_call *tp_event,
 				 struct perf_event *p_event)
 {
+	int ret;
+
 	if (tp_event->perf_perm) {
-		int ret = tp_event->perf_perm(tp_event, p_event);
+		ret = tp_event->perf_perm(tp_event, p_event);
 		if (ret)
 			return ret;
 	}
@@ -46,8 +49,9 @@
 
 	/* The ftrace function trace is allowed only for root. */
 	if (ftrace_event_is_function(tp_event)) {
-		if (perf_paranoid_tracepoint_raw() && !capable(CAP_SYS_ADMIN))
-			return -EPERM;
+		ret = perf_allow_tracepoint(&p_event->attr);
+		if (ret)
+			return ret;
 
 		if (!is_sampling_event(p_event))
 			return 0;
@@ -82,8 +86,9 @@
 	 * ...otherwise raw tracepoint data can be a severe data leak,
 	 * only allow root to have these.
 	 */
-	if (perf_paranoid_tracepoint_raw() && !capable(CAP_SYS_ADMIN))
-		return -EPERM;
+	ret = perf_allow_tracepoint(&p_event->attr);
+	if (ret)
+		return ret;
 
 	return 0;
 }
diff --git a/kernel_headers.py b/kernel_headers.py
index 52ccc1d..70ebe1a 100644
--- a/kernel_headers.py
+++ b/kernel_headers.py
@@ -522,7 +522,7 @@
   arch_prefix = os.path.join('arch', header_arch, generic_prefix)
   generic_src = os.path.join(generic_prefix, rel_glob)
   arch_src = os.path.join(arch_prefix, rel_glob)
-  techpack_src = 'techpack/*'
+  techpack_src = os.path.join('techpack/*',generic_prefix, '*',rel_glob)
 
   # Excluded sources, architecture specific.
   exclude_srcs = []
@@ -561,7 +561,28 @@
     f.write('// ***** DO NOT EDIT *****\n')
     f.write('// This file is generated by %s\n' % kernel_headers_py)
     f.write('\n')
-    f.write('gen_headers_%s = [\n' % header_arch)
+    f.write('gen_headers_srcs_%s = [\n' % header_arch)
+    f.write('    "%s",\n' % rel_arch_asm_kbuild)
+    f.write('    "%s",\n' % rel_asm_generic_kbuild)
+    f.write('    "%s",\n' % makefile)
+
+    if header_arch == "arm":
+      f.write('    "%s",\n' % arm_syscall_tbl)
+
+    f.write('    "%s",\n' % generic_src)
+    f.write('    "%s",\n' % arch_src)
+    f.write('    "%s",\n' % techpack_src)
+    f.write(']\n')
+    f.write('\n')
+
+    if exclude_srcs:
+      f.write('gen_headers_exclude_srcs_%s = [\n' % header_arch)
+      for h in exclude_srcs:
+        f.write('    "%s",\n' % os.path.join(generic_prefix, h))
+      f.write(']\n')
+      f.write('\n')
+
+    f.write('gen_headers_out_%s = [\n' % header_arch)
 
     if generated_list:
       f.write('\n')
@@ -616,7 +637,10 @@
     f.write('    // checked later to ensure that it matches the checked-\n')
     f.write('    // in version (this file).\n')
     f.write('    name: "%s",\n' % gen_blueprints_module_name)
-    f.write('    srcs: ["%s", "%s", "%s"],\n' % (rel_arch_asm_kbuild, rel_asm_generic_kbuild, arch_src))
+    f.write('    srcs: gen_headers_srcs_%s,\n' % header_arch)
+    if exclude_srcs:
+      f.write('    exclude_srcs: gen_headers_exclude_srcs_%s,\n' % header_arch)
+
     f.write('    tool_files: ["kernel_headers.py"],\n')
     f.write('    cmd: "python3 $(location kernel_headers.py) " +\n')
     f.write('        kernel_headers_verbose +\n')
@@ -624,8 +648,10 @@
     f.write('        "--gen_dir $(genDir) " +\n')
     f.write('        "--arch_asm_kbuild $(location %s) " +\n' % rel_arch_asm_kbuild)
     f.write('        "--arch_include_uapi $(locations %s) " +\n' % arch_src)
+    f.write('        "--techpack_include_uapi $(locations %s) " +\n' % techpack_src)
     f.write('        "--asm_generic_kbuild $(location %s) " +\n' % rel_asm_generic_kbuild)
-    f.write('        "blueprints",\n')
+    f.write('        "blueprints " +\n')
+    f.write('        "# $(in)",\n')
     f.write('    out: ["gen_headers_%s.bp"],\n' % header_arch)
     f.write('}\n')
     f.write('\n')
@@ -640,25 +666,13 @@
       f.write('        "%s",\n' % arm_syscall_tool)
 
     f.write('    ],\n')
-    f.write('    srcs: [\n')
-    f.write('        "%s",\n' % rel_arch_asm_kbuild)
-    f.write('        "%s",\n' % rel_asm_generic_kbuild)
+    f.write('    srcs: gen_headers_srcs_%s +[\n' % header_arch)
     f.write('        "%s",\n' % old_gen_headers_bp)
     f.write('        ":%s",\n' % gen_blueprints_module_name)
-    f.write('        "%s",\n' % makefile)
-
-    if header_arch == "arm":
-      f.write('        "%s",\n' % arm_syscall_tbl)
-
-    f.write('        "%s",\n' % generic_src)
-    f.write('        "%s",\n' % arch_src)
     f.write('    ],\n')
 
     if exclude_srcs:
-      f.write('    exclude_srcs: [\n')
-      for h in exclude_srcs:
-        f.write('        "%s",\n' % os.path.join(generic_prefix, h))
-      f.write('    ],\n')
+      f.write('    exclude_srcs: gen_headers_exclude_srcs_%s,\n' % header_arch)
 
     f.write('    cmd: "python3 $(location %s) " +\n' % kernel_headers_py)
     f.write('        kernel_headers_verbose +\n')
@@ -666,6 +680,7 @@
     f.write('        "--gen_dir $(genDir) " +\n')
     f.write('        "--arch_asm_kbuild $(location %s) " +\n' % rel_arch_asm_kbuild)
     f.write('        "--arch_include_uapi $(locations %s) " +\n' % arch_src)
+    f.write('        "--techpack_include_uapi $(locations %s) " +\n' % techpack_src)
     f.write('        "--asm_generic_kbuild $(location %s) " +\n' % rel_asm_generic_kbuild)
     f.write('        "headers " +\n')
     f.write('        "--old_gen_headers_bp $(location %s) " +\n' % old_gen_headers_bp)
@@ -678,14 +693,14 @@
 
     f.write('        "--headers_install $(location %s) " +\n' % headers_install_sh)
     f.write('        "--include_uapi $(locations %s)",\n' % generic_src)
-    f.write('    out: ["linux/version.h"] + gen_headers_%s,\n' % header_arch)
+    f.write('    out: ["linux/version.h"] + gen_headers_out_%s,\n' % header_arch)
     f.write('}\n')
 
     return 0
 
 def parse_bp_for_headers(file_name, headers):
   parsing_headers = False
-  pattern = re.compile("gen_headers_[a-zA-Z0-9]+\s*=\s*\[\s*")
+  pattern = re.compile("gen_headers_out_[a-zA-Z0-9]+\s*=\s*\[\s*")
   with open(file_name, 'r') as f:
     for line in f:
       line = line.strip()
@@ -763,7 +778,7 @@
     print('error: gen_headers blueprints file is out of date, suggested fix:')
     print('#######Please add or remove the above mentioned headers from %s' % (old_gen_headers_bp))
     print('then re-run the build')
-    return 1
+    #return 1
 
   error_count = 0
 
@@ -878,6 +893,11 @@
       required=True,
       nargs='*',
       help='The list of arch/<arch>/include/uapi header files.')
+  parser.add_argument(
+      '--techpack_include_uapi',
+      required=True,
+      nargs='*',
+      help='The list of techpack/*/include/uapi header files.')
 
   # The modes.
 
@@ -949,13 +969,11 @@
   if args.verbose:
     print('module_dir [%s]' % module_dir)
 
-  # Get list of techpack uapi headers to be exported from techpack/* directories.
-  techpack_uapi = extract_techpack_uapi_headers(args.verbose, module_dir)
 
   if args.mode == 'blueprints':
     return gen_blueprints(
         args.verbose, args.header_arch, args.gen_dir, args.arch_asm_kbuild,
-        args.asm_generic_kbuild, module_dir, rel_arch_asm_kbuild, rel_asm_generic_kbuild, args.arch_include_uapi, techpack_uapi)
+        args.asm_generic_kbuild, module_dir, rel_arch_asm_kbuild, rel_asm_generic_kbuild, args.arch_include_uapi, args.techpack_include_uapi)
 
   if args.mode == 'headers':
     if args.verbose:
@@ -970,7 +988,7 @@
         args.verbose, args.header_arch, args.gen_dir, args.arch_asm_kbuild,
         args.asm_generic_kbuild, module_dir, args.old_gen_headers_bp, args.new_gen_headers_bp,
         args.version_makefile, args.arch_syscall_tool, args.arch_syscall_tbl,
-        args.headers_install, args.include_uapi, args.arch_include_uapi, techpack_uapi)
+        args.headers_install, args.include_uapi, args.arch_include_uapi, args.techpack_include_uapi)
 
   print('error: unknown mode: %s' % args.mode)
   return 1
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index 488ae5a..adf7fb3 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -243,7 +243,6 @@
 config FRAME_WARN
 	int "Warn for stack frames larger than (needs gcc 4.4)"
 	range 0 8192
-	default 3072 if KASAN_EXTRA
 	default 2048 if GCC_PLUGIN_LATENT_ENTROPY
 	default 1280 if (!64BIT && PARISC)
 	default 1024 if (!64BIT && !PARISC)
@@ -2063,6 +2062,14 @@
 
 	  If unsure, say N.
 
+config TEST_MEMINIT
+	tristate "Test heap/page initialization"
+	help
+	  Test if the kernel is zero-initializing heap and page allocations.
+	  This can be useful to test init_on_alloc and init_on_free features.
+
+	  If unsure, say N.
+
 endif # RUNTIME_TESTING_MENU
 
 config MEMTEST
diff --git a/lib/Kconfig.kasan b/lib/Kconfig.kasan
index befb127..9defbca 100644
--- a/lib/Kconfig.kasan
+++ b/lib/Kconfig.kasan
@@ -1,36 +1,82 @@
+# This config refers to the generic KASAN mode.
 config HAVE_ARCH_KASAN
 	bool
 
-if HAVE_ARCH_KASAN
+config HAVE_ARCH_KASAN_SW_TAGS
+	bool
+
+config CC_HAS_KASAN_GENERIC
+	def_bool $(cc-option, -fsanitize=kernel-address)
+
+config CC_HAS_KASAN_SW_TAGS
+	def_bool $(cc-option, -fsanitize=kernel-hwaddress)
 
 config KASAN
-	bool "KASan: runtime memory debugger"
+	bool "KASAN: runtime memory debugger"
+	depends on (HAVE_ARCH_KASAN && CC_HAS_KASAN_GENERIC) || \
+		   (HAVE_ARCH_KASAN_SW_TAGS && CC_HAS_KASAN_SW_TAGS)
+	depends on (SLUB && SYSFS) || (SLAB && !DEBUG_SLAB)
+	help
+	  Enables KASAN (KernelAddressSANitizer) - runtime memory debugger,
+	  designed to find out-of-bounds accesses and use-after-free bugs.
+	  See Documentation/dev-tools/kasan.rst for details.
+
+choice
+	prompt "KASAN mode"
+	depends on KASAN
+	default KASAN_GENERIC
+	help
+	  KASAN has two modes: generic KASAN (similar to userspace ASan,
+	  x86_64/arm64/xtensa, enabled with CONFIG_KASAN_GENERIC) and
+	  software tag-based KASAN (a version based on software memory
+	  tagging, arm64 only, similar to userspace HWASan, enabled with
+	  CONFIG_KASAN_SW_TAGS).
+	  Both generic and tag-based KASAN are strictly debugging features.
+
+config KASAN_GENERIC
+	bool "Generic mode"
+	depends on HAVE_ARCH_KASAN && CC_HAS_KASAN_GENERIC
 	depends on (SLUB && SYSFS) || (SLAB && !DEBUG_SLAB)
 	select SLUB_DEBUG if SLUB
 	select CONSTRUCTORS
 	select STACKDEPOT
 	help
-	  Enables kernel address sanitizer - runtime memory debugger,
-	  designed to find out-of-bounds accesses and use-after-free bugs.
-	  This is strictly a debugging feature and it requires a gcc version
-	  of 4.9.2 or later. Detection of out of bounds accesses to stack or
-	  global variables requires gcc 5.0 or later.
-	  This feature consumes about 1/8 of available memory and brings about
-	  ~x3 performance slowdown.
+	  Enables generic KASAN mode.
+	  Supported in both GCC and Clang. With GCC it requires version 4.9.2
+	  or later for basic support and version 5.0 or later for detection of
+	  out-of-bounds accesses for stack and global variables and for inline
+	  instrumentation mode (CONFIG_KASAN_INLINE). With Clang it requires
+	  version 3.7.0 or later and it doesn't support detection of
+	  out-of-bounds accesses for global variables yet.
+	  This mode consumes about 1/8th of available memory at kernel start
+	  and introduces an overhead of ~x1.5 for the rest of the allocations.
+	  The performance slowdown is ~x3.
 	  For better error detection enable CONFIG_STACKTRACE.
-	  Currently CONFIG_KASAN doesn't work with CONFIG_DEBUG_SLAB
+	  Currently CONFIG_KASAN_GENERIC doesn't work with CONFIG_DEBUG_SLAB
 	  (the resulting kernel does not boot).
 
-config KASAN_EXTRA
-	bool "KAsan: extra checks"
-	depends on KASAN && DEBUG_KERNEL && !COMPILE_TEST
+config KASAN_SW_TAGS
+	bool "Software tag-based mode"
+	depends on HAVE_ARCH_KASAN_SW_TAGS && CC_HAS_KASAN_SW_TAGS
+	depends on (SLUB && SYSFS) || (SLAB && !DEBUG_SLAB)
+	select SLUB_DEBUG if SLUB
+	select CONSTRUCTORS
+	select STACKDEPOT
 	help
-	  This enables further checks in the kernel address sanitizer, for now
-	  it only includes the address-use-after-scope check that can lead
-	  to excessive kernel stack usage, frame size warnings and longer
-	  compile time.
-	  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81715 has more
+	  Enables software tag-based KASAN mode.
+	  This mode requires Top Byte Ignore support by the CPU and therefore
+	  is only supported for arm64.
+	  This mode requires Clang version 7.0.0 or later.
+	  This mode consumes about 1/16th of available memory at kernel start
+	  and introduces an overhead of ~20% for the rest of the allocations.
+	  This mode may potentially introduce problems relating to pointer
+	  casting and comparison, as it embeds tags into the top byte of each
+	  pointer.
+	  For better error detection enable CONFIG_STACKTRACE.
+	  Currently CONFIG_KASAN_SW_TAGS doesn't work with CONFIG_DEBUG_SLAB
+	  (the resulting kernel does not boot).
 
+endchoice
 
 choice
 	prompt "Instrumentation type"
@@ -53,16 +99,36 @@
 	  memory accesses. This is faster than outline (in some workloads
 	  it gives about x2 boost over outline instrumentation), but
 	  make kernel's .text size much bigger.
-	  This requires a gcc version of 5.0 or later.
+	  For CONFIG_KASAN_GENERIC this requires GCC 5.0 or later.
 
 endchoice
 
+config KASAN_STACK_ENABLE
+	bool "Enable stack instrumentation (unsafe)" if CC_IS_CLANG && !COMPILE_TEST
+	default !(CLANG_VERSION < 90000)
+	depends on KASAN
+	help
+	  The LLVM stack address sanitizer has a know problem that
+	  causes excessive stack usage in a lot of functions, see
+	  https://bugs.llvm.org/show_bug.cgi?id=38809
+	  Disabling asan-stack makes it safe to run kernels build
+	  with clang-8 with KASAN enabled, though it loses some of
+	  the functionality.
+	  This feature is always disabled when compile-testing with clang-8
+	  or earlier to avoid cluttering the output in stack overflow
+	  warnings, but clang-8 users can still enable it for builds without
+	  CONFIG_COMPILE_TEST.  On gcc and later clang versions it is
+	  assumed to always be safe to use and enabled by default.
+
+config KASAN_STACK
+	int
+	default 1 if KASAN_STACK_ENABLE || CC_IS_GCC
+	default 0
+
 config TEST_KASAN
-	tristate "Module for testing kasan for bug detection"
+	tristate "Module for testing KASAN for bug detection"
 	depends on m && KASAN
 	help
 	  This is a test module doing various nasty things like
 	  out of bounds accesses, use after free. It is useful for testing
-	  kernel debugging features like kernel address sanitizer.
-
-endif
+	  kernel debugging features like KASAN.
diff --git a/lib/Makefile b/lib/Makefile
index f3b3bdb..27a495a 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -83,6 +83,7 @@
 obj-$(CONFIG_TEST_PARMAN) += test_parman.o
 obj-$(CONFIG_TEST_KMOD) += test_kmod.o
 obj-$(CONFIG_TEST_DEBUG_VIRTUAL) += test_debug_virtual.o
+obj-$(CONFIG_TEST_MEMINIT) += test_meminit.o
 
 ifeq ($(CONFIG_DEBUG_KOBJECT),y)
 CFLAGS_kobject.o += -DDEBUG
diff --git a/lib/strncpy_from_user.c b/lib/strncpy_from_user.c
index e304b54..6cb80d4 100644
--- a/lib/strncpy_from_user.c
+++ b/lib/strncpy_from_user.c
@@ -6,6 +6,7 @@
 #include <linux/uaccess.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
+#include <linux/mm.h>
 
 #include <asm/byteorder.h>
 #include <asm/word-at-a-time.h>
@@ -108,17 +109,18 @@
 		return 0;
 
 	max_addr = user_addr_max();
-	src_addr = (unsigned long)src;
+	src_addr = (unsigned long)untagged_addr(src);
 	if (likely(src_addr < max_addr)) {
 		unsigned long max = max_addr - src_addr;
 		long retval;
 
 		kasan_check_write(dst, count);
 		check_object_size(dst, count, false);
-		user_access_begin();
-		retval = do_strncpy_from_user(dst, src, count, max);
-		user_access_end();
-		return retval;
+		if (user_access_begin(VERIFY_READ, src, max)) {
+			retval = do_strncpy_from_user(dst, src, count, max);
+			user_access_end();
+			return retval;
+		}
 	}
 	return -EFAULT;
 }
diff --git a/lib/strnlen_user.c b/lib/strnlen_user.c
index 184f80f..2764187 100644
--- a/lib/strnlen_user.c
+++ b/lib/strnlen_user.c
@@ -2,6 +2,7 @@
 #include <linux/kernel.h>
 #include <linux/export.h>
 #include <linux/uaccess.h>
+#include <linux/mm.h>
 
 #include <asm/word-at-a-time.h>
 
@@ -109,15 +110,16 @@
 		return 0;
 
 	max_addr = user_addr_max();
-	src_addr = (unsigned long)str;
+	src_addr = (unsigned long)untagged_addr(str);
 	if (likely(src_addr < max_addr)) {
 		unsigned long max = max_addr - src_addr;
 		long retval;
 
-		user_access_begin();
-		retval = do_strnlen_user(str, count, max);
-		user_access_end();
-		return retval;
+		if (user_access_begin(VERIFY_READ, str, max)) {
+			retval = do_strnlen_user(str, count, max);
+			user_access_end();
+			return retval;
+		}
 	}
 	return 0;
 }
diff --git a/lib/test_kasan.c b/lib/test_kasan.c
index ec65710..7de2702 100644
--- a/lib/test_kasan.c
+++ b/lib/test_kasan.c
@@ -480,29 +480,6 @@
 	kfree(kmem);
 }
 
-static noinline void __init use_after_scope_test(void)
-{
-	volatile char *volatile p;
-
-	pr_info("use-after-scope on int\n");
-	{
-		int local = 0;
-
-		p = (char *)&local;
-	}
-	p[0] = 1;
-	p[3] = 1;
-
-	pr_info("use-after-scope on array\n");
-	{
-		char local[1024] = {0};
-
-		p = local;
-	}
-	p[0] = 1;
-	p[1023] = 1;
-}
-
 static noinline void __init kasan_alloca_oob_left(void)
 {
 	volatile int i = 10;
@@ -579,6 +556,73 @@
 	kmem_cache_destroy(cache);
 }
 
+static noinline void __init kasan_memchr(void)
+{
+	char *ptr;
+	size_t size = 24;
+
+	pr_info("out-of-bounds in memchr\n");
+	ptr = kmalloc(size, GFP_KERNEL | __GFP_ZERO);
+	if (!ptr)
+		return;
+
+	memchr(ptr, '1', size + 1);
+	kfree(ptr);
+}
+
+static noinline void __init kasan_memcmp(void)
+{
+	char *ptr;
+	size_t size = 24;
+	int arr[9];
+
+	pr_info("out-of-bounds in memcmp\n");
+	ptr = kmalloc(size, GFP_KERNEL | __GFP_ZERO);
+	if (!ptr)
+		return;
+
+	memset(arr, 0, sizeof(arr));
+	memcmp(ptr, arr, size+1);
+	kfree(ptr);
+}
+
+static noinline void __init kasan_strings(void)
+{
+	char *ptr;
+	size_t size = 24;
+
+	pr_info("use-after-free in strchr\n");
+	ptr = kmalloc(size, GFP_KERNEL | __GFP_ZERO);
+	if (!ptr)
+		return;
+
+	kfree(ptr);
+
+	/*
+	 * Try to cause only 1 invalid access (less spam in dmesg).
+	 * For that we need ptr to point to zeroed byte.
+	 * Skip metadata that could be stored in freed object so ptr
+	 * will likely point to zeroed byte.
+	 */
+	ptr += 16;
+	strchr(ptr, '1');
+
+	pr_info("use-after-free in strrchr\n");
+	strrchr(ptr, '1');
+
+	pr_info("use-after-free in strcmp\n");
+	strcmp(ptr, "2");
+
+	pr_info("use-after-free in strncmp\n");
+	strncmp(ptr, "2", 1);
+
+	pr_info("use-after-free in strlen\n");
+	strlen(ptr);
+
+	pr_info("use-after-free in strnlen\n");
+	strnlen(ptr, 1);
+}
+
 static int __init kmalloc_tests_init(void)
 {
 	/*
@@ -615,9 +659,11 @@
 	kasan_alloca_oob_right();
 	ksize_unpoisons_memory();
 	copy_user_test();
-	use_after_scope_test();
 	kmem_cache_double_free();
 	kmem_cache_invalid_free();
+	kasan_memchr();
+	kasan_memcmp();
+	kasan_strings();
 
 	kasan_restore_multi_shot(multishot);
 
diff --git a/lib/test_meminit.c b/lib/test_meminit.c
new file mode 100644
index 0000000..9729f27
--- /dev/null
+++ b/lib/test_meminit.c
@@ -0,0 +1,364 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Test cases for SL[AOU]B/page initialization at alloc/free time.
+ */
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/mm.h>
+#include <linux/module.h>
+#include <linux/slab.h>
+#include <linux/string.h>
+#include <linux/vmalloc.h>
+
+#define GARBAGE_INT (0x09A7BA9E)
+#define GARBAGE_BYTE (0x9E)
+
+#define REPORT_FAILURES_IN_FN() \
+	do {	\
+		if (failures)	\
+			pr_info("%s failed %d out of %d times\n",	\
+				__func__, failures, num_tests);		\
+		else		\
+			pr_info("all %d tests in %s passed\n",		\
+				num_tests, __func__);			\
+	} while (0)
+
+/* Calculate the number of uninitialized bytes in the buffer. */
+static int __init count_nonzero_bytes(void *ptr, size_t size)
+{
+	int i, ret = 0;
+	unsigned char *p = (unsigned char *)ptr;
+
+	for (i = 0; i < size; i++)
+		if (p[i])
+			ret++;
+	return ret;
+}
+
+/* Fill a buffer with garbage, skipping |skip| first bytes. */
+static void __init fill_with_garbage_skip(void *ptr, int size, size_t skip)
+{
+	unsigned int *p = (unsigned int *)((char *)ptr + skip);
+	int i = 0;
+
+	WARN_ON(skip > size);
+	size -= skip;
+
+	while (size >= sizeof(*p)) {
+		p[i] = GARBAGE_INT;
+		i++;
+		size -= sizeof(*p);
+	}
+	if (size)
+		memset(&p[i], GARBAGE_BYTE, size);
+}
+
+static void __init fill_with_garbage(void *ptr, size_t size)
+{
+	fill_with_garbage_skip(ptr, size, 0);
+}
+
+static int __init do_alloc_pages_order(int order, int *total_failures)
+{
+	struct page *page;
+	void *buf;
+	size_t size = PAGE_SIZE << order;
+
+	page = alloc_pages(GFP_KERNEL, order);
+	buf = page_address(page);
+	fill_with_garbage(buf, size);
+	__free_pages(page, order);
+
+	page = alloc_pages(GFP_KERNEL, order);
+	buf = page_address(page);
+	if (count_nonzero_bytes(buf, size))
+		(*total_failures)++;
+	fill_with_garbage(buf, size);
+	__free_pages(page, order);
+	return 1;
+}
+
+/* Test the page allocator by calling alloc_pages with different orders. */
+static int __init test_pages(int *total_failures)
+{
+	int failures = 0, num_tests = 0;
+	int i;
+
+	for (i = 0; i < 10; i++)
+		num_tests += do_alloc_pages_order(i, &failures);
+
+	REPORT_FAILURES_IN_FN();
+	*total_failures += failures;
+	return num_tests;
+}
+
+/* Test kmalloc() with given parameters. */
+static int __init do_kmalloc_size(size_t size, int *total_failures)
+{
+	void *buf;
+
+	buf = kmalloc(size, GFP_KERNEL);
+	fill_with_garbage(buf, size);
+	kfree(buf);
+
+	buf = kmalloc(size, GFP_KERNEL);
+	if (count_nonzero_bytes(buf, size))
+		(*total_failures)++;
+	fill_with_garbage(buf, size);
+	kfree(buf);
+	return 1;
+}
+
+/* Test vmalloc() with given parameters. */
+static int __init do_vmalloc_size(size_t size, int *total_failures)
+{
+	void *buf;
+
+	buf = vmalloc(size);
+	fill_with_garbage(buf, size);
+	vfree(buf);
+
+	buf = vmalloc(size);
+	if (count_nonzero_bytes(buf, size))
+		(*total_failures)++;
+	fill_with_garbage(buf, size);
+	vfree(buf);
+	return 1;
+}
+
+/* Test kmalloc()/vmalloc() by allocating objects of different sizes. */
+static int __init test_kvmalloc(int *total_failures)
+{
+	int failures = 0, num_tests = 0;
+	int i, size;
+
+	for (i = 0; i < 20; i++) {
+		size = 1 << i;
+		num_tests += do_kmalloc_size(size, &failures);
+		num_tests += do_vmalloc_size(size, &failures);
+	}
+
+	REPORT_FAILURES_IN_FN();
+	*total_failures += failures;
+	return num_tests;
+}
+
+#define CTOR_BYTES (sizeof(unsigned int))
+#define CTOR_PATTERN (0x41414141)
+/* Initialize the first 4 bytes of the object. */
+static void test_ctor(void *obj)
+{
+	*(unsigned int *)obj = CTOR_PATTERN;
+}
+
+/*
+ * Check the invariants for the buffer allocated from a slab cache.
+ * If the cache has a test constructor, the first 4 bytes of the object must
+ * always remain equal to CTOR_PATTERN.
+ * If the cache isn't an RCU-typesafe one, or if the allocation is done with
+ * __GFP_ZERO, then the object contents must be zeroed after allocation.
+ * If the cache is an RCU-typesafe one, the object contents must never be
+ * zeroed after the first use. This is checked by memcmp() in
+ * do_kmem_cache_size().
+ */
+static bool __init check_buf(void *buf, int size, bool want_ctor,
+			     bool want_rcu, bool want_zero)
+{
+	int bytes;
+	bool fail = false;
+
+	bytes = count_nonzero_bytes(buf, size);
+	WARN_ON(want_ctor && want_zero);
+	if (want_zero)
+		return bytes;
+	if (want_ctor) {
+		if (*(unsigned int *)buf != CTOR_PATTERN)
+			fail = 1;
+	} else {
+		if (bytes)
+			fail = !want_rcu;
+	}
+	return fail;
+}
+
+/*
+ * Test kmem_cache with given parameters:
+ *  want_ctor - use a constructor;
+ *  want_rcu - use SLAB_TYPESAFE_BY_RCU;
+ *  want_zero - use __GFP_ZERO.
+ */
+static int __init do_kmem_cache_size(size_t size, bool want_ctor,
+				     bool want_rcu, bool want_zero,
+				     int *total_failures)
+{
+	struct kmem_cache *c;
+	int iter;
+	bool fail = false;
+	gfp_t alloc_mask = GFP_KERNEL | (want_zero ? __GFP_ZERO : 0);
+	void *buf, *buf_copy;
+
+	c = kmem_cache_create("test_cache", size, 1,
+			      want_rcu ? SLAB_TYPESAFE_BY_RCU : 0,
+			      want_ctor ? test_ctor : NULL);
+	for (iter = 0; iter < 10; iter++) {
+		buf = kmem_cache_alloc(c, alloc_mask);
+		/* Check that buf is zeroed, if it must be. */
+		fail = check_buf(buf, size, want_ctor, want_rcu, want_zero);
+		fill_with_garbage_skip(buf, size, want_ctor ? CTOR_BYTES : 0);
+
+		if (!want_rcu) {
+			kmem_cache_free(c, buf);
+			continue;
+		}
+
+		/*
+		 * If this is an RCU cache, use a critical section to ensure we
+		 * can touch objects after they're freed.
+		 */
+		rcu_read_lock();
+		/*
+		 * Copy the buffer to check that it's not wiped on
+		 * free().
+		 */
+		buf_copy = kmalloc(size, GFP_ATOMIC);
+		if (buf_copy)
+			memcpy(buf_copy, buf, size);
+
+		kmem_cache_free(c, buf);
+		/*
+		 * Check that |buf| is intact after kmem_cache_free().
+		 * |want_zero| is false, because we wrote garbage to
+		 * the buffer already.
+		 */
+		fail |= check_buf(buf, size, want_ctor, want_rcu,
+				  false);
+		if (buf_copy) {
+			fail |= (bool)memcmp(buf, buf_copy, size);
+			kfree(buf_copy);
+		}
+		rcu_read_unlock();
+	}
+	kmem_cache_destroy(c);
+
+	*total_failures += fail;
+	return 1;
+}
+
+/*
+ * Check that the data written to an RCU-allocated object survives
+ * reallocation.
+ */
+static int __init do_kmem_cache_rcu_persistent(int size, int *total_failures)
+{
+	struct kmem_cache *c;
+	void *buf, *buf_contents, *saved_ptr;
+	void **used_objects;
+	int i, iter, maxiter = 1024;
+	bool fail = false;
+
+	c = kmem_cache_create("test_cache", size, size, SLAB_TYPESAFE_BY_RCU,
+			      NULL);
+	buf = kmem_cache_alloc(c, GFP_KERNEL);
+	saved_ptr = buf;
+	fill_with_garbage(buf, size);
+	buf_contents = kmalloc(size, GFP_KERNEL);
+	if (!buf_contents)
+		goto out;
+	used_objects = kmalloc_array(maxiter, sizeof(void *), GFP_KERNEL);
+	if (!used_objects) {
+		kfree(buf_contents);
+		goto out;
+	}
+	memcpy(buf_contents, buf, size);
+	kmem_cache_free(c, buf);
+	/*
+	 * Run for a fixed number of iterations. If we never hit saved_ptr,
+	 * assume the test passes.
+	 */
+	for (iter = 0; iter < maxiter; iter++) {
+		buf = kmem_cache_alloc(c, GFP_KERNEL);
+		used_objects[iter] = buf;
+		if (buf == saved_ptr) {
+			fail = memcmp(buf_contents, buf, size);
+			for (i = 0; i <= iter; i++)
+				kmem_cache_free(c, used_objects[i]);
+			goto free_out;
+		}
+	}
+
+free_out:
+	kmem_cache_destroy(c);
+	kfree(buf_contents);
+	kfree(used_objects);
+out:
+	*total_failures += fail;
+	return 1;
+}
+
+/*
+ * Test kmem_cache allocation by creating caches of different sizes, with and
+ * without constructors, with and without SLAB_TYPESAFE_BY_RCU.
+ */
+static int __init test_kmemcache(int *total_failures)
+{
+	int failures = 0, num_tests = 0;
+	int i, flags, size;
+	bool ctor, rcu, zero;
+
+	for (i = 0; i < 10; i++) {
+		size = 8 << i;
+		for (flags = 0; flags < 8; flags++) {
+			ctor = flags & 1;
+			rcu = flags & 2;
+			zero = flags & 4;
+			if (ctor & zero)
+				continue;
+			num_tests += do_kmem_cache_size(size, ctor, rcu, zero,
+							&failures);
+		}
+	}
+	REPORT_FAILURES_IN_FN();
+	*total_failures += failures;
+	return num_tests;
+}
+
+/* Test the behavior of SLAB_TYPESAFE_BY_RCU caches of different sizes. */
+static int __init test_rcu_persistent(int *total_failures)
+{
+	int failures = 0, num_tests = 0;
+	int i, size;
+
+	for (i = 0; i < 10; i++) {
+		size = 8 << i;
+		num_tests += do_kmem_cache_rcu_persistent(size, &failures);
+	}
+	REPORT_FAILURES_IN_FN();
+	*total_failures += failures;
+	return num_tests;
+}
+
+/*
+ * Run the tests. Each test function returns the number of executed tests and
+ * updates |failures| with the number of failed tests.
+ */
+static int __init test_meminit_init(void)
+{
+	int failures = 0, num_tests = 0;
+
+	num_tests += test_pages(&failures);
+	num_tests += test_kvmalloc(&failures);
+	num_tests += test_kmemcache(&failures);
+	num_tests += test_rcu_persistent(&failures);
+
+	if (failures == 0)
+		pr_info("all %d tests passed!\n", num_tests);
+	else
+		pr_info("failures: %d out of %d\n", failures, num_tests);
+
+	return failures ? -EINVAL : 0;
+}
+module_init(test_meminit_init);
+
+MODULE_LICENSE("GPL");
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
index abe67c3..a6e36a2 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -1708,23 +1708,12 @@
 }
 early_initcall(initialize_ptr_random);
 
-/* Maps a pointer to a 32 bit unique identifier. */
-static char *ptr_to_id(char *buf, char *end, void *ptr, struct printf_spec spec)
+static inline int __ptr_to_hashval(const void *ptr, unsigned long *hashval_out)
 {
-	const char *str = sizeof(ptr) == 8 ? "(____ptrval____)" : "(ptrval)";
 	unsigned long hashval;
 
-	/* When debugging early boot use non-cryptographically secure hash. */
-	if (unlikely(debug_boot_weak_hash)) {
-		hashval = hash_long((unsigned long)ptr, 32);
-		return pointer_string(buf, end, (const void *)hashval, spec);
-	}
-
-	if (static_branch_unlikely(&not_filled_random_ptr_key)) {
-		spec.field_width = 2 * sizeof(ptr);
-		/* string length must be less than default_width */
-		return string(buf, end, str, spec);
-	}
+	if (static_branch_unlikely(&not_filled_random_ptr_key))
+		return -EAGAIN;
 
 #ifdef CONFIG_64BIT
 	hashval = (unsigned long)siphash_1u64((u64)ptr, &ptr_key);
@@ -1736,6 +1725,35 @@
 #else
 	hashval = (unsigned long)siphash_1u32((u32)ptr, &ptr_key);
 #endif
+	*hashval_out = hashval;
+	return 0;
+}
+
+int ptr_to_hashval(const void *ptr, unsigned long *hashval_out)
+{
+	return __ptr_to_hashval(ptr, hashval_out);
+}
+
+/* Maps a pointer to a 32 bit unique identifier. */
+static char *ptr_to_id(char *buf, char *end, void *ptr, struct printf_spec spec)
+{
+	const char *str = sizeof(ptr) == 8 ? "(____ptrval____)" : "(ptrval)";
+	unsigned long hashval;
+	int ret;
+
+	/* When debugging early boot use non-cryptographically secure hash. */
+	if (unlikely(debug_boot_weak_hash)) {
+		hashval = hash_long((unsigned long)ptr, 32);
+		return pointer_string(buf, end, (const void *)hashval, spec);
+	}
+
+	ret = __ptr_to_hashval(ptr, &hashval);
+	if (ret) {
+		spec.field_width = 2 * sizeof(ptr);
+		/* string length must be less than default_width */
+		return string(buf, end, str, spec);
+	}
+
 	return pointer_string(buf, end, (const void *)hashval, spec);
 }
 
diff --git a/mm/cma.c b/mm/cma.c
index 445902a..7af197c 100644
--- a/mm/cma.c
+++ b/mm/cma.c
@@ -453,6 +453,7 @@
 	unsigned long pfn = -1;
 	unsigned long start = 0;
 	unsigned long bitmap_maxno, bitmap_no, bitmap_count;
+	size_t i;
 	struct page *page = NULL;
 	int ret = -ENOMEM;
 	int retry_after_sleep = 0;
@@ -545,6 +546,16 @@
 
 	trace_cma_alloc(pfn, page, count, align);
 
+	/*
+	 * CMA can allocate multiple page blocks, which results in different
+	 * blocks being marked with different tags. Reset the tags to ignore
+	 * those page blocks.
+	 */
+	if (page) {
+		for (i = 0; i < count; i++)
+			page_kasan_tag_reset(page + i);
+	}
+
 	if (ret && !no_warn) {
 		pr_err("%s: %s: alloc failed, req-size: %zu pages, ret: %d\n",
 			__func__, cma->name, cma->count, ret);
diff --git a/mm/dmapool.c b/mm/dmapool.c
index 6d4b97e..d46b14e 100644
--- a/mm/dmapool.c
+++ b/mm/dmapool.c
@@ -379,7 +379,7 @@
 #endif
 	spin_unlock_irqrestore(&pool->lock, flags);
 
-	if (mem_flags & __GFP_ZERO)
+	if (want_init_on_alloc(mem_flags))
 		memset(retval, 0, pool->size);
 
 	return retval;
@@ -429,6 +429,8 @@
 	}
 
 	offset = vaddr - page->vaddr;
+	if (want_init_on_free())
+		memset(vaddr, 0, pool->size);
 #ifdef	DMAPOOL_DEBUG
 	if ((dma - page->dma) != offset) {
 		spin_unlock_irqrestore(&pool->lock, flags);
diff --git a/mm/filemap.c b/mm/filemap.c
index aef0f79..494a638 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -2888,7 +2888,7 @@
 
 static struct page *do_read_cache_page(struct address_space *mapping,
 				pgoff_t index,
-				int (*filler)(struct file *, struct page *),
+				int (*filler)(void *, struct page *),
 				void *data,
 				gfp_t gfp)
 {
@@ -2999,7 +2999,7 @@
  */
 struct page *read_cache_page(struct address_space *mapping,
 				pgoff_t index,
-				int (*filler)(struct file *, struct page *),
+				int (*filler)(void *, struct page *),
 				void *data)
 {
 	return do_read_cache_page(mapping, index, filler, data, mapping_gfp_mask(mapping));
@@ -3039,6 +3039,9 @@
 	unsigned long limit = rlimit(RLIMIT_FSIZE);
 	loff_t pos;
 
+	if (IS_SWAPFILE(inode))
+		return -ETXTBSY;
+
 	if (!iov_iter_count(from))
 		return 0;
 
diff --git a/mm/frame_vector.c b/mm/frame_vector.c
index c64dca6..c431ca8 100644
--- a/mm/frame_vector.c
+++ b/mm/frame_vector.c
@@ -46,6 +46,8 @@
 	if (WARN_ON_ONCE(nr_frames > vec->nr_allocated))
 		nr_frames = vec->nr_allocated;
 
+	start = untagged_addr(start);
+
 	down_read(&mm->mmap_sem);
 	locked = 1;
 	vma = find_vma_intersection(mm, start, start + 1);
diff --git a/mm/gup.c b/mm/gup.c
index f3088d2..91c2caa 100644
--- a/mm/gup.c
+++ b/mm/gup.c
@@ -678,6 +678,8 @@
 	if (!nr_pages)
 		return 0;
 
+	start = untagged_addr(start);
+
 	VM_BUG_ON(!!pages != !!(gup_flags & FOLL_GET));
 
 	/*
@@ -832,6 +834,8 @@
 	struct vm_area_struct *vma;
 	vm_fault_t ret, major = 0;
 
+	address = untagged_addr(address);
+
 	if (unlocked)
 		fault_flags |= FAULT_FLAG_ALLOW_RETRY;
 
diff --git a/mm/kasan/Makefile b/mm/kasan/Makefile
index 3289db3..613dfe6 100644
--- a/mm/kasan/Makefile
+++ b/mm/kasan/Makefile
@@ -1,11 +1,24 @@
 # SPDX-License-Identifier: GPL-2.0
 KASAN_SANITIZE := n
-UBSAN_SANITIZE_kasan.o := n
+UBSAN_SANITIZE_common.o := n
+UBSAN_SANITIZE_generic.o := n
+UBSAN_SANITIZE_generic_report.o := n
+UBSAN_SANITIZE_tags.o := n
 KCOV_INSTRUMENT := n
 
-CFLAGS_REMOVE_kasan.o = -pg
+CFLAGS_REMOVE_common.o = -pg
+CFLAGS_REMOVE_generic.o = -pg
+CFLAGS_REMOVE_generic_report.o = -pg
+CFLAGS_REMOVE_tags.o = -pg
+
 # Function splitter causes unnecessary splits in __asan_load1/__asan_store1
 # see: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63533
-CFLAGS_kasan.o := $(call cc-option, -fno-conserve-stack -fno-stack-protector)
 
-obj-y := kasan.o report.o kasan_init.o quarantine.o
+CFLAGS_common.o := $(call cc-option, -fno-conserve-stack -fno-stack-protector)
+CFLAGS_generic.o := $(call cc-option, -fno-conserve-stack -fno-stack-protector)
+CFLAGS_generic_report.o := $(call cc-option, -fno-conserve-stack -fno-stack-protector)
+CFLAGS_tags.o := $(call cc-option, -fno-conserve-stack -fno-stack-protector)
+
+obj-$(CONFIG_KASAN) := common.o init.o report.o
+obj-$(CONFIG_KASAN_GENERIC) += generic.o generic_report.o quarantine.o
+obj-$(CONFIG_KASAN_SW_TAGS) += tags.o tags_report.o
diff --git a/mm/kasan/common.c b/mm/kasan/common.c
new file mode 100644
index 0000000..9bac9c0
--- /dev/null
+++ b/mm/kasan/common.c
@@ -0,0 +1,741 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * This file contains common generic and tag-based KASAN code.
+ *
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Author: Andrey Ryabinin <ryabinin.a.a@gmail.com>
+ *
+ * Some code borrowed from https://github.com/xairy/kasan-prototype by
+ *        Andrey Konovalov <andreyknvl@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+#define __KASAN_INTERNAL
+
+#include <linux/export.h>
+#include <linux/interrupt.h>
+#include <linux/init.h>
+#include <linux/kasan.h>
+#include <linux/kernel.h>
+#include <linux/kmemleak.h>
+#include <linux/linkage.h>
+#include <linux/memblock.h>
+#include <linux/memory.h>
+#include <linux/mm.h>
+#include <linux/module.h>
+#include <linux/printk.h>
+#include <linux/sched.h>
+#include <linux/sched/task_stack.h>
+#include <linux/slab.h>
+#include <linux/stacktrace.h>
+#include <linux/string.h>
+#include <linux/types.h>
+#include <linux/vmalloc.h>
+#include <linux/bug.h>
+#include <linux/uaccess.h>
+
+#include "kasan.h"
+#include "../slab.h"
+
+static inline int in_irqentry_text(unsigned long ptr)
+{
+	return (ptr >= (unsigned long)&__irqentry_text_start &&
+		ptr < (unsigned long)&__irqentry_text_end) ||
+		(ptr >= (unsigned long)&__softirqentry_text_start &&
+		 ptr < (unsigned long)&__softirqentry_text_end);
+}
+
+static inline void filter_irq_stacks(struct stack_trace *trace)
+{
+	int i;
+
+	if (!trace->nr_entries)
+		return;
+	for (i = 0; i < trace->nr_entries; i++)
+		if (in_irqentry_text(trace->entries[i])) {
+			/* Include the irqentry function into the stack. */
+			trace->nr_entries = i + 1;
+			break;
+		}
+}
+
+static inline depot_stack_handle_t save_stack(gfp_t flags)
+{
+	unsigned long entries[KASAN_STACK_DEPTH];
+	struct stack_trace trace = {
+		.nr_entries = 0,
+		.entries = entries,
+		.max_entries = KASAN_STACK_DEPTH,
+		.skip = 0
+	};
+
+	save_stack_trace(&trace);
+	filter_irq_stacks(&trace);
+	if (trace.nr_entries != 0 &&
+	    trace.entries[trace.nr_entries-1] == ULONG_MAX)
+		trace.nr_entries--;
+
+	return depot_save_stack(&trace, flags);
+}
+
+static inline void set_track(struct kasan_track *track, gfp_t flags)
+{
+	track->pid = current->pid;
+	track->stack = save_stack(flags);
+}
+
+void kasan_enable_current(void)
+{
+	current->kasan_depth++;
+}
+
+void kasan_disable_current(void)
+{
+	current->kasan_depth--;
+}
+
+void kasan_check_read(const volatile void *p, unsigned int size)
+{
+	check_memory_region((unsigned long)p, size, false, _RET_IP_);
+}
+EXPORT_SYMBOL(kasan_check_read);
+
+void kasan_check_write(const volatile void *p, unsigned int size)
+{
+	check_memory_region((unsigned long)p, size, true, _RET_IP_);
+}
+EXPORT_SYMBOL(kasan_check_write);
+
+#undef memset
+void *memset(void *addr, int c, size_t len)
+{
+	check_memory_region((unsigned long)addr, len, true, _RET_IP_);
+
+	return __memset(addr, c, len);
+}
+
+#undef memmove
+void *memmove(void *dest, const void *src, size_t len)
+{
+	check_memory_region((unsigned long)src, len, false, _RET_IP_);
+	check_memory_region((unsigned long)dest, len, true, _RET_IP_);
+
+	return __memmove(dest, src, len);
+}
+
+#undef memcpy
+void *memcpy(void *dest, const void *src, size_t len)
+{
+	check_memory_region((unsigned long)src, len, false, _RET_IP_);
+	check_memory_region((unsigned long)dest, len, true, _RET_IP_);
+
+	return __memcpy(dest, src, len);
+}
+
+/*
+ * Poisons the shadow memory for 'size' bytes starting from 'addr'.
+ * Memory addresses should be aligned to KASAN_SHADOW_SCALE_SIZE.
+ */
+void kasan_poison_shadow(const void *address, size_t size, u8 value)
+{
+	void *shadow_start, *shadow_end;
+
+	/*
+	 * Perform shadow offset calculation based on untagged address, as
+	 * some of the callers (e.g. kasan_poison_object_data) pass tagged
+	 * addresses to this function.
+	 */
+	address = reset_tag(address);
+
+	shadow_start = kasan_mem_to_shadow(address);
+	shadow_end = kasan_mem_to_shadow(address + size);
+
+	__memset(shadow_start, value, shadow_end - shadow_start);
+}
+
+void kasan_unpoison_shadow(const void *address, size_t size)
+{
+	u8 tag = get_tag(address);
+
+	/*
+	 * Perform shadow offset calculation based on untagged address, as
+	 * some of the callers (e.g. kasan_unpoison_object_data) pass tagged
+	 * addresses to this function.
+	 */
+	address = reset_tag(address);
+
+	kasan_poison_shadow(address, size, tag);
+
+	if (size & KASAN_SHADOW_MASK) {
+		u8 *shadow = (u8 *)kasan_mem_to_shadow(address + size);
+
+		if (IS_ENABLED(CONFIG_KASAN_SW_TAGS))
+			*shadow = tag;
+		else
+			*shadow = size & KASAN_SHADOW_MASK;
+	}
+}
+
+static void __kasan_unpoison_stack(struct task_struct *task, const void *sp)
+{
+	void *base = task_stack_page(task);
+	size_t size = sp - base;
+
+	kasan_unpoison_shadow(base, size);
+}
+
+/* Unpoison the entire stack for a task. */
+void kasan_unpoison_task_stack(struct task_struct *task)
+{
+	__kasan_unpoison_stack(task, task_stack_page(task) + THREAD_SIZE);
+}
+
+/* Unpoison the stack for the current task beyond a watermark sp value. */
+asmlinkage void kasan_unpoison_task_stack_below(const void *watermark)
+{
+	/*
+	 * Calculate the task stack base address.  Avoid using 'current'
+	 * because this function is called by early resume code which hasn't
+	 * yet set up the percpu register (%gs).
+	 */
+	void *base = (void *)((unsigned long)watermark & ~(THREAD_SIZE - 1));
+
+	kasan_unpoison_shadow(base, watermark - base);
+}
+
+/*
+ * Clear all poison for the region between the current SP and a provided
+ * watermark value, as is sometimes required prior to hand-crafted asm function
+ * returns in the middle of functions.
+ */
+void kasan_unpoison_stack_above_sp_to(const void *watermark)
+{
+	const void *sp = __builtin_frame_address(0);
+	size_t size = watermark - sp;
+
+	if (WARN_ON(sp > watermark))
+		return;
+	kasan_unpoison_shadow(sp, size);
+}
+
+void kasan_alloc_pages(struct page *page, unsigned int order)
+{
+	u8 tag;
+	unsigned long i;
+
+	if (unlikely(PageHighMem(page)))
+		return;
+
+	tag = random_tag();
+	for (i = 0; i < (1 << order); i++)
+		page_kasan_tag_set(page + i, tag);
+	kasan_unpoison_shadow(page_address(page), PAGE_SIZE << order);
+}
+
+void kasan_free_pages(struct page *page, unsigned int order)
+{
+	if (likely(!PageHighMem(page)))
+		kasan_poison_shadow(page_address(page),
+				PAGE_SIZE << order,
+				KASAN_FREE_PAGE);
+}
+
+/*
+ * Adaptive redzone policy taken from the userspace AddressSanitizer runtime.
+ * For larger allocations larger redzones are used.
+ */
+static inline unsigned int optimal_redzone(unsigned int object_size)
+{
+	if (IS_ENABLED(CONFIG_KASAN_SW_TAGS))
+		return 0;
+
+	return
+		object_size <= 64        - 16   ? 16 :
+		object_size <= 128       - 32   ? 32 :
+		object_size <= 512       - 64   ? 64 :
+		object_size <= 4096      - 128  ? 128 :
+		object_size <= (1 << 14) - 256  ? 256 :
+		object_size <= (1 << 15) - 512  ? 512 :
+		object_size <= (1 << 16) - 1024 ? 1024 : 2048;
+}
+
+void kasan_cache_create(struct kmem_cache *cache, unsigned int *size,
+			slab_flags_t *flags)
+{
+	unsigned int orig_size = *size;
+	unsigned int redzone_size;
+	int redzone_adjust;
+
+	/* Add alloc meta. */
+	cache->kasan_info.alloc_meta_offset = *size;
+	*size += sizeof(struct kasan_alloc_meta);
+
+	/* Add free meta. */
+	if (IS_ENABLED(CONFIG_KASAN_GENERIC) &&
+	    (cache->flags & SLAB_TYPESAFE_BY_RCU || cache->ctor ||
+	     cache->object_size < sizeof(struct kasan_free_meta))) {
+		cache->kasan_info.free_meta_offset = *size;
+		*size += sizeof(struct kasan_free_meta);
+	}
+
+	redzone_size = optimal_redzone(cache->object_size);
+	redzone_adjust = redzone_size -	(*size - cache->object_size);
+	if (redzone_adjust > 0)
+		*size += redzone_adjust;
+
+	*size = min_t(unsigned int, KMALLOC_MAX_SIZE,
+			max(*size, cache->object_size + redzone_size));
+
+	/*
+	 * If the metadata doesn't fit, don't enable KASAN at all.
+	 */
+	if (*size <= cache->kasan_info.alloc_meta_offset ||
+			*size <= cache->kasan_info.free_meta_offset) {
+		cache->kasan_info.alloc_meta_offset = 0;
+		cache->kasan_info.free_meta_offset = 0;
+		*size = orig_size;
+		return;
+	}
+
+	*flags |= SLAB_KASAN;
+}
+
+size_t kasan_metadata_size(struct kmem_cache *cache)
+{
+	return (cache->kasan_info.alloc_meta_offset ?
+		sizeof(struct kasan_alloc_meta) : 0) +
+		(cache->kasan_info.free_meta_offset ?
+		sizeof(struct kasan_free_meta) : 0);
+}
+
+struct kasan_alloc_meta *get_alloc_info(struct kmem_cache *cache,
+					const void *object)
+{
+	BUILD_BUG_ON(sizeof(struct kasan_alloc_meta) > 32);
+	return (void *)object + cache->kasan_info.alloc_meta_offset;
+}
+
+struct kasan_free_meta *get_free_info(struct kmem_cache *cache,
+				      const void *object)
+{
+	BUILD_BUG_ON(sizeof(struct kasan_free_meta) > 32);
+	return (void *)object + cache->kasan_info.free_meta_offset;
+}
+
+void kasan_poison_slab(struct page *page)
+{
+	unsigned long i;
+
+	for (i = 0; i < (1 << compound_order(page)); i++)
+		page_kasan_tag_reset(page + i);
+	kasan_poison_shadow(page_address(page),
+			PAGE_SIZE << compound_order(page),
+			KASAN_KMALLOC_REDZONE);
+}
+
+void kasan_unpoison_object_data(struct kmem_cache *cache, void *object)
+{
+	kasan_unpoison_shadow(object, cache->object_size);
+}
+
+void kasan_poison_object_data(struct kmem_cache *cache, void *object)
+{
+	kasan_poison_shadow(object,
+			round_up(cache->object_size, KASAN_SHADOW_SCALE_SIZE),
+			KASAN_KMALLOC_REDZONE);
+}
+
+/*
+ * This function assigns a tag to an object considering the following:
+ * 1. A cache might have a constructor, which might save a pointer to a slab
+ *    object somewhere (e.g. in the object itself). We preassign a tag for
+ *    each object in caches with constructors during slab creation and reuse
+ *    the same tag each time a particular object is allocated.
+ * 2. A cache might be SLAB_TYPESAFE_BY_RCU, which means objects can be
+ *    accessed after being freed. We preassign tags for objects in these
+ *    caches as well.
+ * 3. For SLAB allocator we can't preassign tags randomly since the freelist
+ *    is stored as an array of indexes instead of a linked list. Assign tags
+ *    based on objects indexes, so that objects that are next to each other
+ *    get different tags.
+ */
+static u8 assign_tag(struct kmem_cache *cache, const void *object,
+			bool init, bool keep_tag)
+{
+	/*
+	 * 1. When an object is kmalloc()'ed, two hooks are called:
+	 *    kasan_slab_alloc() and kasan_kmalloc(). We assign the
+	 *    tag only in the first one.
+	 * 2. We reuse the same tag for krealloc'ed objects.
+	 */
+	if (keep_tag)
+		return get_tag(object);
+
+	/*
+	 * If the cache neither has a constructor nor has SLAB_TYPESAFE_BY_RCU
+	 * set, assign a tag when the object is being allocated (init == false).
+	 */
+	if (!cache->ctor && !(cache->flags & SLAB_TYPESAFE_BY_RCU))
+		return init ? KASAN_TAG_KERNEL : random_tag();
+
+	/* For caches that either have a constructor or SLAB_TYPESAFE_BY_RCU: */
+#ifdef CONFIG_SLAB
+	/* For SLAB assign tags based on the object index in the freelist. */
+	return (u8)obj_to_index(cache, virt_to_page(object), (void *)object);
+#else
+	/*
+	 * For SLUB assign a random tag during slab creation, otherwise reuse
+	 * the already assigned tag.
+	 */
+	return init ? random_tag() : get_tag(object);
+#endif
+}
+
+void * __must_check kasan_init_slab_obj(struct kmem_cache *cache,
+						const void *object)
+{
+	struct kasan_alloc_meta *alloc_info;
+
+	if (!(cache->flags & SLAB_KASAN))
+		return (void *)object;
+
+	alloc_info = get_alloc_info(cache, object);
+	__memset(alloc_info, 0, sizeof(*alloc_info));
+
+	if (IS_ENABLED(CONFIG_KASAN_SW_TAGS))
+		object = set_tag(object,
+				assign_tag(cache, object, true, false));
+
+	return (void *)object;
+}
+
+static inline bool shadow_invalid(u8 tag, s8 shadow_byte)
+{
+	if (IS_ENABLED(CONFIG_KASAN_GENERIC))
+		return shadow_byte < 0 ||
+			shadow_byte >= KASAN_SHADOW_SCALE_SIZE;
+
+	/* else CONFIG_KASAN_SW_TAGS: */
+	if ((u8)shadow_byte == KASAN_TAG_INVALID)
+		return true;
+	if ((tag != KASAN_TAG_KERNEL) && (tag != (u8)shadow_byte))
+		return true;
+
+	return false;
+}
+
+static bool __kasan_slab_free(struct kmem_cache *cache, void *object,
+			      unsigned long ip, bool quarantine)
+{
+	s8 shadow_byte;
+	u8 tag;
+	void *tagged_object;
+	unsigned long rounded_up_size;
+
+	tag = get_tag(object);
+	tagged_object = object;
+	object = reset_tag(object);
+
+	if (unlikely(nearest_obj(cache, virt_to_head_page(object), object) !=
+	    object)) {
+		kasan_report_invalid_free(tagged_object, ip);
+		return true;
+	}
+
+	/* RCU slabs could be legally used after free within the RCU period */
+	if (unlikely(cache->flags & SLAB_TYPESAFE_BY_RCU))
+		return false;
+
+	shadow_byte = READ_ONCE(*(s8 *)kasan_mem_to_shadow(object));
+	if (shadow_invalid(tag, shadow_byte)) {
+		kasan_report_invalid_free(tagged_object, ip);
+		return true;
+	}
+
+	rounded_up_size = round_up(cache->object_size, KASAN_SHADOW_SCALE_SIZE);
+	kasan_poison_shadow(object, rounded_up_size, KASAN_KMALLOC_FREE);
+
+	if ((IS_ENABLED(CONFIG_KASAN_GENERIC) && !quarantine) ||
+			unlikely(!(cache->flags & SLAB_KASAN)))
+		return false;
+
+	set_track(&get_alloc_info(cache, object)->free_track, GFP_NOWAIT);
+	quarantine_put(get_free_info(cache, object), cache);
+
+	return IS_ENABLED(CONFIG_KASAN_GENERIC);
+}
+
+bool kasan_slab_free(struct kmem_cache *cache, void *object, unsigned long ip)
+{
+	return __kasan_slab_free(cache, object, ip, true);
+}
+
+static void *__kasan_kmalloc(struct kmem_cache *cache, const void *object,
+				size_t size, gfp_t flags, bool keep_tag)
+{
+	unsigned long redzone_start;
+	unsigned long redzone_end;
+	u8 tag = 0xff;
+
+	if (gfpflags_allow_blocking(flags))
+		quarantine_reduce();
+
+	if (unlikely(object == NULL))
+		return NULL;
+
+	redzone_start = round_up((unsigned long)(object + size),
+				KASAN_SHADOW_SCALE_SIZE);
+	redzone_end = round_up((unsigned long)object + cache->object_size,
+				KASAN_SHADOW_SCALE_SIZE);
+
+	if (IS_ENABLED(CONFIG_KASAN_SW_TAGS))
+		tag = assign_tag(cache, object, false, keep_tag);
+
+	/* Tag is ignored in set_tag without CONFIG_KASAN_SW_TAGS */
+	kasan_unpoison_shadow(set_tag(object, tag), size);
+	kasan_poison_shadow((void *)redzone_start, redzone_end - redzone_start,
+		KASAN_KMALLOC_REDZONE);
+
+	if (cache->flags & SLAB_KASAN)
+		set_track(&get_alloc_info(cache, object)->alloc_track, flags);
+
+	return set_tag(object, tag);
+}
+
+void * __must_check kasan_slab_alloc(struct kmem_cache *cache, void *object,
+					gfp_t flags)
+{
+	return __kasan_kmalloc(cache, object, cache->object_size, flags, false);
+}
+
+void * __must_check kasan_kmalloc(struct kmem_cache *cache, const void *object,
+				size_t size, gfp_t flags)
+{
+	return __kasan_kmalloc(cache, object, size, flags, true);
+}
+EXPORT_SYMBOL(kasan_kmalloc);
+
+void * __must_check kasan_kmalloc_large(const void *ptr, size_t size,
+						gfp_t flags)
+{
+	struct page *page;
+	unsigned long redzone_start;
+	unsigned long redzone_end;
+
+	if (gfpflags_allow_blocking(flags))
+		quarantine_reduce();
+
+	if (unlikely(ptr == NULL))
+		return NULL;
+
+	page = virt_to_page(ptr);
+	redzone_start = round_up((unsigned long)(ptr + size),
+				KASAN_SHADOW_SCALE_SIZE);
+	redzone_end = (unsigned long)ptr + (PAGE_SIZE << compound_order(page));
+
+	kasan_unpoison_shadow(ptr, size);
+	kasan_poison_shadow((void *)redzone_start, redzone_end - redzone_start,
+		KASAN_PAGE_REDZONE);
+
+	return (void *)ptr;
+}
+
+void * __must_check kasan_krealloc(const void *object, size_t size, gfp_t flags)
+{
+	struct page *page;
+
+	if (unlikely(object == ZERO_SIZE_PTR))
+		return (void *)object;
+
+	page = virt_to_head_page(object);
+
+	if (unlikely(!PageSlab(page)))
+		return kasan_kmalloc_large(object, size, flags);
+	else
+		return __kasan_kmalloc(page->slab_cache, object, size,
+						flags, true);
+}
+
+void kasan_poison_kfree(void *ptr, unsigned long ip)
+{
+	struct page *page;
+
+	page = virt_to_head_page(ptr);
+
+	if (unlikely(!PageSlab(page))) {
+		if (ptr != page_address(page)) {
+			kasan_report_invalid_free(ptr, ip);
+			return;
+		}
+		kasan_poison_shadow(ptr, PAGE_SIZE << compound_order(page),
+				KASAN_FREE_PAGE);
+	} else {
+		__kasan_slab_free(page->slab_cache, ptr, ip, false);
+	}
+}
+
+void kasan_kfree_large(void *ptr, unsigned long ip)
+{
+	if (ptr != page_address(virt_to_head_page(ptr)))
+		kasan_report_invalid_free(ptr, ip);
+	/* The object will be poisoned by page_alloc. */
+}
+
+int kasan_module_alloc(void *addr, size_t size)
+{
+	void *ret;
+	size_t scaled_size;
+	size_t shadow_size;
+	unsigned long shadow_start;
+
+	shadow_start = (unsigned long)kasan_mem_to_shadow(addr);
+	scaled_size = (size + KASAN_SHADOW_MASK) >> KASAN_SHADOW_SCALE_SHIFT;
+	shadow_size = round_up(scaled_size, PAGE_SIZE);
+
+	if (WARN_ON(!PAGE_ALIGNED(shadow_start)))
+		return -EINVAL;
+
+	ret = __vmalloc_node_range(shadow_size, 1, shadow_start,
+			shadow_start + shadow_size,
+			GFP_KERNEL,
+			PAGE_KERNEL, VM_NO_GUARD, NUMA_NO_NODE,
+			__builtin_return_address(0));
+
+	if (ret) {
+		__memset(ret, KASAN_SHADOW_INIT, shadow_size);
+		find_vm_area(addr)->flags |= VM_KASAN;
+		kmemleak_ignore(ret);
+		return 0;
+	}
+
+	return -ENOMEM;
+}
+
+void kasan_free_shadow(const struct vm_struct *vm)
+{
+	if (vm->flags & VM_KASAN)
+		vfree(kasan_mem_to_shadow(vm->addr));
+}
+
+extern void __kasan_report(unsigned long addr, size_t size, bool is_write, unsigned long ip);
+
+void kasan_report(unsigned long addr, size_t size, bool is_write, unsigned long ip)
+{
+	unsigned long flags = user_access_save();
+	__kasan_report(addr, size, is_write, ip);
+	user_access_restore(flags);
+}
+
+#ifdef CONFIG_MEMORY_HOTPLUG
+static bool shadow_mapped(unsigned long addr)
+{
+	pgd_t *pgd = pgd_offset_k(addr);
+	p4d_t *p4d;
+	pud_t *pud;
+	pmd_t *pmd;
+	pte_t *pte;
+
+	if (pgd_none(*pgd))
+		return false;
+	p4d = p4d_offset(pgd, addr);
+	if (p4d_none(*p4d))
+		return false;
+	pud = pud_offset(p4d, addr);
+	if (pud_none(*pud))
+		return false;
+
+	/*
+	 * We can't use pud_large() or pud_huge(), the first one is
+	 * arch-specific, the last one depends on HUGETLB_PAGE.  So let's abuse
+	 * pud_bad(), if pud is bad then it's bad because it's huge.
+	 */
+	if (pud_bad(*pud))
+		return true;
+	pmd = pmd_offset(pud, addr);
+	if (pmd_none(*pmd))
+		return false;
+
+	if (pmd_bad(*pmd))
+		return true;
+	pte = pte_offset_kernel(pmd, addr);
+	return !pte_none(*pte);
+}
+
+static int __meminit kasan_mem_notifier(struct notifier_block *nb,
+			unsigned long action, void *data)
+{
+	struct memory_notify *mem_data = data;
+	unsigned long nr_shadow_pages, start_kaddr, shadow_start;
+	unsigned long shadow_end, shadow_size;
+
+	nr_shadow_pages = mem_data->nr_pages >> KASAN_SHADOW_SCALE_SHIFT;
+	start_kaddr = (unsigned long)pfn_to_kaddr(mem_data->start_pfn);
+	shadow_start = (unsigned long)kasan_mem_to_shadow((void *)start_kaddr);
+	shadow_size = nr_shadow_pages << PAGE_SHIFT;
+	shadow_end = shadow_start + shadow_size;
+
+	if (WARN_ON(mem_data->nr_pages % KASAN_SHADOW_SCALE_SIZE) ||
+		WARN_ON(start_kaddr % (KASAN_SHADOW_SCALE_SIZE << PAGE_SHIFT)))
+		return NOTIFY_BAD;
+
+	switch (action) {
+	case MEM_GOING_ONLINE: {
+		void *ret;
+
+		/*
+		 * If shadow is mapped already than it must have been mapped
+		 * during the boot. This could happen if we onlining previously
+		 * offlined memory.
+		 */
+		if (shadow_mapped(shadow_start))
+			return NOTIFY_OK;
+
+		ret = __vmalloc_node_range(shadow_size, PAGE_SIZE, shadow_start,
+					shadow_end, GFP_KERNEL | __GFP_ZERO,
+					PAGE_KERNEL, VM_NO_GUARD,
+					pfn_to_nid(mem_data->start_pfn),
+					__builtin_return_address(0));
+		if (!ret)
+			return NOTIFY_BAD;
+
+		kmemleak_ignore(ret);
+		return NOTIFY_OK;
+	}
+	case MEM_CANCEL_ONLINE:
+	case MEM_OFFLINE: {
+		struct vm_struct *vm;
+
+		/*
+		 * shadow_start was either mapped during boot by kasan_init()
+		 * or during memory online by __vmalloc_node_range().
+		 * In the latter case we can use vfree() to free shadow.
+		 * Non-NULL result of the find_vm_area() will tell us if
+		 * that was the second case.
+		 *
+		 * Currently it's not possible to free shadow mapped
+		 * during boot by kasan_init(). It's because the code
+		 * to do that hasn't been written yet. So we'll just
+		 * leak the memory.
+		 */
+		vm = find_vm_area((void *)shadow_start);
+		if (vm)
+			vfree((void *)shadow_start);
+	}
+	}
+
+	return NOTIFY_OK;
+}
+
+static int __init kasan_memhotplug_init(void)
+{
+	hotplug_memory_notifier(kasan_mem_notifier, 0);
+
+	return 0;
+}
+
+core_initcall(kasan_memhotplug_init);
+#endif
diff --git a/mm/kasan/generic.c b/mm/kasan/generic.c
new file mode 100644
index 0000000..504c7936
--- /dev/null
+++ b/mm/kasan/generic.c
@@ -0,0 +1,325 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * This file contains core generic KASAN code.
+ *
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Author: Andrey Ryabinin <ryabinin.a.a@gmail.com>
+ *
+ * Some code borrowed from https://github.com/xairy/kasan-prototype by
+ *        Andrey Konovalov <andreyknvl@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+#define DISABLE_BRANCH_PROFILING
+
+#include <linux/export.h>
+#include <linux/interrupt.h>
+#include <linux/init.h>
+#include <linux/kasan.h>
+#include <linux/kernel.h>
+#include <linux/kmemleak.h>
+#include <linux/linkage.h>
+#include <linux/memblock.h>
+#include <linux/memory.h>
+#include <linux/mm.h>
+#include <linux/module.h>
+#include <linux/printk.h>
+#include <linux/sched.h>
+#include <linux/sched/task_stack.h>
+#include <linux/slab.h>
+#include <linux/stacktrace.h>
+#include <linux/string.h>
+#include <linux/types.h>
+#include <linux/vmalloc.h>
+#include <linux/bug.h>
+
+#include "kasan.h"
+#include "../slab.h"
+
+/*
+ * All functions below always inlined so compiler could
+ * perform better optimizations in each of __asan_loadX/__assn_storeX
+ * depending on memory access size X.
+ */
+
+static __always_inline bool memory_is_poisoned_1(unsigned long addr)
+{
+	s8 shadow_value = *(s8 *)kasan_mem_to_shadow((void *)addr);
+
+	if (unlikely(shadow_value)) {
+		s8 last_accessible_byte = addr & KASAN_SHADOW_MASK;
+		return unlikely(last_accessible_byte >= shadow_value);
+	}
+
+	return false;
+}
+
+static __always_inline bool memory_is_poisoned_2_4_8(unsigned long addr,
+						unsigned long size)
+{
+	u8 *shadow_addr = (u8 *)kasan_mem_to_shadow((void *)addr);
+
+	/*
+	 * Access crosses 8(shadow size)-byte boundary. Such access maps
+	 * into 2 shadow bytes, so we need to check them both.
+	 */
+	if (unlikely(((addr + size - 1) & KASAN_SHADOW_MASK) < size - 1))
+		return *shadow_addr || memory_is_poisoned_1(addr + size - 1);
+
+	return memory_is_poisoned_1(addr + size - 1);
+}
+
+static __always_inline bool memory_is_poisoned_16(unsigned long addr)
+{
+	u16 *shadow_addr = (u16 *)kasan_mem_to_shadow((void *)addr);
+
+	/* Unaligned 16-bytes access maps into 3 shadow bytes. */
+	if (unlikely(!IS_ALIGNED(addr, KASAN_SHADOW_SCALE_SIZE)))
+		return *shadow_addr || memory_is_poisoned_1(addr + 15);
+
+	return *shadow_addr;
+}
+
+static __always_inline unsigned long bytes_is_nonzero(const u8 *start,
+					size_t size)
+{
+	while (size) {
+		if (unlikely(*start))
+			return (unsigned long)start;
+		start++;
+		size--;
+	}
+
+	return 0;
+}
+
+static __always_inline unsigned long memory_is_nonzero(const void *start,
+						const void *end)
+{
+	unsigned int words;
+	unsigned long ret;
+	unsigned int prefix = (unsigned long)start % 8;
+
+	if (end - start <= 16)
+		return bytes_is_nonzero(start, end - start);
+
+	if (prefix) {
+		prefix = 8 - prefix;
+		ret = bytes_is_nonzero(start, prefix);
+		if (unlikely(ret))
+			return ret;
+		start += prefix;
+	}
+
+	words = (end - start) / 8;
+	while (words) {
+		if (unlikely(*(u64 *)start))
+			return bytes_is_nonzero(start, 8);
+		start += 8;
+		words--;
+	}
+
+	return bytes_is_nonzero(start, (end - start) % 8);
+}
+
+static __always_inline bool memory_is_poisoned_n(unsigned long addr,
+						size_t size)
+{
+	unsigned long ret;
+
+	ret = memory_is_nonzero(kasan_mem_to_shadow((void *)addr),
+			kasan_mem_to_shadow((void *)addr + size - 1) + 1);
+
+	if (unlikely(ret)) {
+		unsigned long last_byte = addr + size - 1;
+		s8 *last_shadow = (s8 *)kasan_mem_to_shadow((void *)last_byte);
+
+		if (unlikely(ret != (unsigned long)last_shadow ||
+			((long)(last_byte & KASAN_SHADOW_MASK) >= *last_shadow)))
+			return true;
+	}
+	return false;
+}
+
+static __always_inline bool memory_is_poisoned(unsigned long addr, size_t size)
+{
+	if (__builtin_constant_p(size)) {
+		switch (size) {
+		case 1:
+			return memory_is_poisoned_1(addr);
+		case 2:
+		case 4:
+		case 8:
+			return memory_is_poisoned_2_4_8(addr, size);
+		case 16:
+			return memory_is_poisoned_16(addr);
+		default:
+			BUILD_BUG();
+		}
+	}
+
+	return memory_is_poisoned_n(addr, size);
+}
+
+static __always_inline void check_memory_region_inline(unsigned long addr,
+						size_t size, bool write,
+						unsigned long ret_ip)
+{
+	if (unlikely(size == 0))
+		return;
+
+	if (unlikely((void *)addr <
+		kasan_shadow_to_mem((void *)KASAN_SHADOW_START))) {
+		kasan_report(addr, size, write, ret_ip);
+		return;
+	}
+
+	if (likely(!memory_is_poisoned(addr, size)))
+		return;
+
+	kasan_report(addr, size, write, ret_ip);
+}
+
+void check_memory_region(unsigned long addr, size_t size, bool write,
+				unsigned long ret_ip)
+{
+	check_memory_region_inline(addr, size, write, ret_ip);
+}
+
+void kasan_cache_shrink(struct kmem_cache *cache)
+{
+	quarantine_remove_cache(cache);
+}
+
+void kasan_cache_shutdown(struct kmem_cache *cache)
+{
+	if (!__kmem_cache_empty(cache))
+		quarantine_remove_cache(cache);
+}
+
+static void register_global(struct kasan_global *global)
+{
+	size_t aligned_size = round_up(global->size, KASAN_SHADOW_SCALE_SIZE);
+
+	kasan_unpoison_shadow(global->beg, global->size);
+
+	kasan_poison_shadow(global->beg + aligned_size,
+		global->size_with_redzone - aligned_size,
+		KASAN_GLOBAL_REDZONE);
+}
+
+void __asan_register_globals(struct kasan_global *globals, size_t size)
+{
+	int i;
+
+	for (i = 0; i < size; i++)
+		register_global(&globals[i]);
+}
+EXPORT_SYMBOL(__asan_register_globals);
+
+void __asan_unregister_globals(struct kasan_global *globals, size_t size)
+{
+}
+EXPORT_SYMBOL(__asan_unregister_globals);
+
+#define DEFINE_ASAN_LOAD_STORE(size)					\
+	void __asan_load##size(unsigned long addr)			\
+	{								\
+		check_memory_region_inline(addr, size, false, _RET_IP_);\
+	}								\
+	EXPORT_SYMBOL(__asan_load##size);				\
+	__alias(__asan_load##size)					\
+	void __asan_load##size##_noabort(unsigned long);		\
+	EXPORT_SYMBOL(__asan_load##size##_noabort);			\
+	void __asan_store##size(unsigned long addr)			\
+	{								\
+		check_memory_region_inline(addr, size, true, _RET_IP_);	\
+	}								\
+	EXPORT_SYMBOL(__asan_store##size);				\
+	__alias(__asan_store##size)					\
+	void __asan_store##size##_noabort(unsigned long);		\
+	EXPORT_SYMBOL(__asan_store##size##_noabort)
+
+DEFINE_ASAN_LOAD_STORE(1);
+DEFINE_ASAN_LOAD_STORE(2);
+DEFINE_ASAN_LOAD_STORE(4);
+DEFINE_ASAN_LOAD_STORE(8);
+DEFINE_ASAN_LOAD_STORE(16);
+
+void __asan_loadN(unsigned long addr, size_t size)
+{
+	check_memory_region(addr, size, false, _RET_IP_);
+}
+EXPORT_SYMBOL(__asan_loadN);
+
+__alias(__asan_loadN)
+void __asan_loadN_noabort(unsigned long, size_t);
+EXPORT_SYMBOL(__asan_loadN_noabort);
+
+void __asan_storeN(unsigned long addr, size_t size)
+{
+	check_memory_region(addr, size, true, _RET_IP_);
+}
+EXPORT_SYMBOL(__asan_storeN);
+
+__alias(__asan_storeN)
+void __asan_storeN_noabort(unsigned long, size_t);
+EXPORT_SYMBOL(__asan_storeN_noabort);
+
+/* to shut up compiler complaints */
+void __asan_handle_no_return(void) {}
+EXPORT_SYMBOL(__asan_handle_no_return);
+
+/* Emitted by compiler to poison alloca()ed objects. */
+void __asan_alloca_poison(unsigned long addr, size_t size)
+{
+	size_t rounded_up_size = round_up(size, KASAN_SHADOW_SCALE_SIZE);
+	size_t padding_size = round_up(size, KASAN_ALLOCA_REDZONE_SIZE) -
+			rounded_up_size;
+	size_t rounded_down_size = round_down(size, KASAN_SHADOW_SCALE_SIZE);
+
+	const void *left_redzone = (const void *)(addr -
+			KASAN_ALLOCA_REDZONE_SIZE);
+	const void *right_redzone = (const void *)(addr + rounded_up_size);
+
+	WARN_ON(!IS_ALIGNED(addr, KASAN_ALLOCA_REDZONE_SIZE));
+
+	kasan_unpoison_shadow((const void *)(addr + rounded_down_size),
+			      size - rounded_down_size);
+	kasan_poison_shadow(left_redzone, KASAN_ALLOCA_REDZONE_SIZE,
+			KASAN_ALLOCA_LEFT);
+	kasan_poison_shadow(right_redzone,
+			padding_size + KASAN_ALLOCA_REDZONE_SIZE,
+			KASAN_ALLOCA_RIGHT);
+}
+EXPORT_SYMBOL(__asan_alloca_poison);
+
+/* Emitted by compiler to unpoison alloca()ed areas when the stack unwinds. */
+void __asan_allocas_unpoison(const void *stack_top, const void *stack_bottom)
+{
+	if (unlikely(!stack_top || stack_top > stack_bottom))
+		return;
+
+	kasan_unpoison_shadow(stack_top, stack_bottom - stack_top);
+}
+EXPORT_SYMBOL(__asan_allocas_unpoison);
+
+/* Emitted by the compiler to [un]poison local variables. */
+#define DEFINE_ASAN_SET_SHADOW(byte) \
+	void __asan_set_shadow_##byte(const void *addr, size_t size)	\
+	{								\
+		__memset((void *)addr, 0x##byte, size);			\
+	}								\
+	EXPORT_SYMBOL(__asan_set_shadow_##byte)
+
+DEFINE_ASAN_SET_SHADOW(00);
+DEFINE_ASAN_SET_SHADOW(f1);
+DEFINE_ASAN_SET_SHADOW(f2);
+DEFINE_ASAN_SET_SHADOW(f3);
+DEFINE_ASAN_SET_SHADOW(f5);
+DEFINE_ASAN_SET_SHADOW(f8);
diff --git a/mm/kasan/generic_report.c b/mm/kasan/generic_report.c
new file mode 100644
index 0000000..36c6459
--- /dev/null
+++ b/mm/kasan/generic_report.c
@@ -0,0 +1,150 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * This file contains generic KASAN specific error reporting code.
+ *
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Author: Andrey Ryabinin <ryabinin.a.a@gmail.com>
+ *
+ * Some code borrowed from https://github.com/xairy/kasan-prototype by
+ *        Andrey Konovalov <andreyknvl@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+#include <linux/bitops.h>
+#include <linux/ftrace.h>
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/mm.h>
+#include <linux/printk.h>
+#include <linux/sched.h>
+#include <linux/slab.h>
+#include <linux/stackdepot.h>
+#include <linux/stacktrace.h>
+#include <linux/string.h>
+#include <linux/types.h>
+#include <linux/kasan.h>
+#include <linux/module.h>
+
+#include <asm/sections.h>
+
+#include "kasan.h"
+#include "../slab.h"
+
+void *find_first_bad_addr(void *addr, size_t size)
+{
+	void *p = addr;
+
+	while (p < addr + size && !(*(u8 *)kasan_mem_to_shadow(p)))
+		p += KASAN_SHADOW_SCALE_SIZE;
+	return p;
+}
+
+static const char *get_shadow_bug_type(struct kasan_access_info *info)
+{
+	const char *bug_type = "unknown-crash";
+	u8 *shadow_addr;
+
+	shadow_addr = (u8 *)kasan_mem_to_shadow(info->first_bad_addr);
+
+	/*
+	 * If shadow byte value is in [0, KASAN_SHADOW_SCALE_SIZE) we can look
+	 * at the next shadow byte to determine the type of the bad access.
+	 */
+	if (*shadow_addr > 0 && *shadow_addr <= KASAN_SHADOW_SCALE_SIZE - 1)
+		shadow_addr++;
+
+	switch (*shadow_addr) {
+	case 0 ... KASAN_SHADOW_SCALE_SIZE - 1:
+		/*
+		 * In theory it's still possible to see these shadow values
+		 * due to a data race in the kernel code.
+		 */
+		bug_type = "out-of-bounds";
+		break;
+	case KASAN_PAGE_REDZONE:
+	case KASAN_KMALLOC_REDZONE:
+		bug_type = "slab-out-of-bounds";
+		break;
+	case KASAN_GLOBAL_REDZONE:
+		bug_type = "global-out-of-bounds";
+		break;
+	case KASAN_STACK_LEFT:
+	case KASAN_STACK_MID:
+	case KASAN_STACK_RIGHT:
+	case KASAN_STACK_PARTIAL:
+		bug_type = "stack-out-of-bounds";
+		break;
+	case KASAN_FREE_PAGE:
+	case KASAN_KMALLOC_FREE:
+		bug_type = "use-after-free";
+		break;
+	case KASAN_ALLOCA_LEFT:
+	case KASAN_ALLOCA_RIGHT:
+		bug_type = "alloca-out-of-bounds";
+		break;
+	}
+
+	return bug_type;
+}
+
+static const char *get_wild_bug_type(struct kasan_access_info *info)
+{
+	const char *bug_type = "unknown-crash";
+
+	if ((unsigned long)info->access_addr < PAGE_SIZE)
+		bug_type = "null-ptr-deref";
+	else if ((unsigned long)info->access_addr < TASK_SIZE)
+		bug_type = "user-memory-access";
+	else
+		bug_type = "wild-memory-access";
+
+	return bug_type;
+}
+
+const char *get_bug_type(struct kasan_access_info *info)
+{
+	if (addr_has_shadow(info->access_addr))
+		return get_shadow_bug_type(info);
+	return get_wild_bug_type(info);
+}
+
+#define DEFINE_ASAN_REPORT_LOAD(size)                     \
+void __asan_report_load##size##_noabort(unsigned long addr) \
+{                                                         \
+	kasan_report(addr, size, false, _RET_IP_);	  \
+}                                                         \
+EXPORT_SYMBOL(__asan_report_load##size##_noabort)
+
+#define DEFINE_ASAN_REPORT_STORE(size)                     \
+void __asan_report_store##size##_noabort(unsigned long addr) \
+{                                                          \
+	kasan_report(addr, size, true, _RET_IP_);	   \
+}                                                          \
+EXPORT_SYMBOL(__asan_report_store##size##_noabort)
+
+DEFINE_ASAN_REPORT_LOAD(1);
+DEFINE_ASAN_REPORT_LOAD(2);
+DEFINE_ASAN_REPORT_LOAD(4);
+DEFINE_ASAN_REPORT_LOAD(8);
+DEFINE_ASAN_REPORT_LOAD(16);
+DEFINE_ASAN_REPORT_STORE(1);
+DEFINE_ASAN_REPORT_STORE(2);
+DEFINE_ASAN_REPORT_STORE(4);
+DEFINE_ASAN_REPORT_STORE(8);
+DEFINE_ASAN_REPORT_STORE(16);
+
+void __asan_report_load_n_noabort(unsigned long addr, size_t size)
+{
+	kasan_report(addr, size, false, _RET_IP_);
+}
+EXPORT_SYMBOL(__asan_report_load_n_noabort);
+
+void __asan_report_store_n_noabort(unsigned long addr, size_t size)
+{
+	kasan_report(addr, size, true, _RET_IP_);
+}
+EXPORT_SYMBOL(__asan_report_store_n_noabort);
diff --git a/mm/kasan/kasan_init.c b/mm/kasan/init.c
similarity index 82%
rename from mm/kasan/kasan_init.c
rename to mm/kasan/init.c
index 7a2a2f1..1f2d7d8 100644
--- a/mm/kasan/kasan_init.c
+++ b/mm/kasan/init.c
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: GPL-2.0
 /*
  * This file contains some kasan initialization code.
  *
@@ -31,54 +32,54 @@
  *   - Latter it reused it as zero shadow to cover large ranges of memory
  *     that allowed to access, but not handled by kasan (vmalloc/vmemmap ...).
  */
-unsigned char kasan_zero_page[PAGE_SIZE] __page_aligned_bss;
+unsigned char kasan_early_shadow_page[PAGE_SIZE] __page_aligned_bss;
 
 #if CONFIG_PGTABLE_LEVELS > 4
-p4d_t kasan_zero_p4d[MAX_PTRS_PER_P4D] __page_aligned_bss;
+p4d_t kasan_early_shadow_p4d[MAX_PTRS_PER_P4D] __page_aligned_bss;
 static inline bool kasan_p4d_table(pgd_t pgd)
 {
-	return pgd_page(pgd) == virt_to_page(lm_alias(kasan_zero_p4d));
+	return pgd_page(pgd) == virt_to_page(lm_alias(kasan_early_shadow_p4d));
 }
 #else
 static inline bool kasan_p4d_table(pgd_t pgd)
 {
-	return 0;
+	return false;
 }
 #endif
 #if CONFIG_PGTABLE_LEVELS > 3
-pud_t kasan_zero_pud[PTRS_PER_PUD] __page_aligned_bss;
+pud_t kasan_early_shadow_pud[PTRS_PER_PUD] __page_aligned_bss;
 static inline bool kasan_pud_table(p4d_t p4d)
 {
-	return p4d_page(p4d) == virt_to_page(lm_alias(kasan_zero_pud));
+	return p4d_page(p4d) == virt_to_page(lm_alias(kasan_early_shadow_pud));
 }
 #else
 static inline bool kasan_pud_table(p4d_t p4d)
 {
-	return 0;
+	return false;
 }
 #endif
 #if CONFIG_PGTABLE_LEVELS > 2
-pmd_t kasan_zero_pmd[PTRS_PER_PMD] __page_aligned_bss;
+pmd_t kasan_early_shadow_pmd[PTRS_PER_PMD] __page_aligned_bss;
 static inline bool kasan_pmd_table(pud_t pud)
 {
-	return pud_page(pud) == virt_to_page(lm_alias(kasan_zero_pmd));
+	return pud_page(pud) == virt_to_page(lm_alias(kasan_early_shadow_pmd));
 }
 #else
 static inline bool kasan_pmd_table(pud_t pud)
 {
-	return 0;
+	return false;
 }
 #endif
-pte_t kasan_zero_pte[PTRS_PER_PTE] __page_aligned_bss;
+pte_t kasan_early_shadow_pte[PTRS_PER_PTE] __page_aligned_bss;
 
 static inline bool kasan_pte_table(pmd_t pmd)
 {
-	return pmd_page(pmd) == virt_to_page(lm_alias(kasan_zero_pte));
+	return pmd_page(pmd) == virt_to_page(lm_alias(kasan_early_shadow_pte));
 }
 
-static inline bool kasan_zero_page_entry(pte_t pte)
+static inline bool kasan_early_shadow_page_entry(pte_t pte)
 {
-	return pte_page(pte) == virt_to_page(lm_alias(kasan_zero_page));
+	return pte_page(pte) == virt_to_page(lm_alias(kasan_early_shadow_page));
 }
 
 static __init void *early_alloc(size_t size, int node)
@@ -93,7 +94,8 @@
 	pte_t *pte = pte_offset_kernel(pmd, addr);
 	pte_t zero_pte;
 
-	zero_pte = pfn_pte(PFN_DOWN(__pa_symbol(kasan_zero_page)), PAGE_KERNEL);
+	zero_pte = pfn_pte(PFN_DOWN(__pa_symbol(kasan_early_shadow_page)),
+				PAGE_KERNEL);
 	zero_pte = pte_wrprotect(zero_pte);
 
 	while (addr + PAGE_SIZE <= end) {
@@ -113,7 +115,8 @@
 		next = pmd_addr_end(addr, end);
 
 		if (IS_ALIGNED(addr, PMD_SIZE) && end - addr >= PMD_SIZE) {
-			pmd_populate_kernel(&init_mm, pmd, lm_alias(kasan_zero_pte));
+			pmd_populate_kernel(&init_mm, pmd,
+					lm_alias(kasan_early_shadow_pte));
 			continue;
 		}
 
@@ -146,9 +149,11 @@
 		if (IS_ALIGNED(addr, PUD_SIZE) && end - addr >= PUD_SIZE) {
 			pmd_t *pmd;
 
-			pud_populate(&init_mm, pud, lm_alias(kasan_zero_pmd));
+			pud_populate(&init_mm, pud,
+					lm_alias(kasan_early_shadow_pmd));
 			pmd = pmd_offset(pud, addr);
-			pmd_populate_kernel(&init_mm, pmd, lm_alias(kasan_zero_pte));
+			pmd_populate_kernel(&init_mm, pmd,
+					lm_alias(kasan_early_shadow_pte));
 			continue;
 		}
 
@@ -182,12 +187,14 @@
 			pud_t *pud;
 			pmd_t *pmd;
 
-			p4d_populate(&init_mm, p4d, lm_alias(kasan_zero_pud));
+			p4d_populate(&init_mm, p4d,
+					lm_alias(kasan_early_shadow_pud));
 			pud = pud_offset(p4d, addr);
-			pud_populate(&init_mm, pud, lm_alias(kasan_zero_pmd));
+			pud_populate(&init_mm, pud,
+					lm_alias(kasan_early_shadow_pmd));
 			pmd = pmd_offset(pud, addr);
 			pmd_populate_kernel(&init_mm, pmd,
-						lm_alias(kasan_zero_pte));
+					lm_alias(kasan_early_shadow_pte));
 			continue;
 		}
 
@@ -210,13 +217,13 @@
 }
 
 /**
- * kasan_populate_zero_shadow - populate shadow memory region with
- *                               kasan_zero_page
+ * kasan_populate_early_shadow - populate shadow memory region with
+ *                               kasan_early_shadow_page
  * @shadow_start - start of the memory range to populate
  * @shadow_end   - end of the memory range to populate
  */
-int __ref kasan_populate_zero_shadow(const void *shadow_start,
-				const void *shadow_end)
+int __ref kasan_populate_early_shadow(const void *shadow_start,
+					const void *shadow_end)
 {
 	unsigned long addr = (unsigned long)shadow_start;
 	unsigned long end = (unsigned long)shadow_end;
@@ -232,7 +239,7 @@
 			pmd_t *pmd;
 
 			/*
-			 * kasan_zero_pud should be populated with pmds
+			 * kasan_early_shadow_pud should be populated with pmds
 			 * at this moment.
 			 * [pud,pmd]_populate*() below needed only for
 			 * 3,2 - level page tables where we don't have
@@ -242,21 +249,25 @@
 			 * The ifndef is required to avoid build breakage.
 			 *
 			 * With 5level-fixup.h, pgd_populate() is not nop and
-			 * we reference kasan_zero_p4d. It's not defined
+			 * we reference kasan_early_shadow_p4d. It's not defined
 			 * unless 5-level paging enabled.
 			 *
 			 * The ifndef can be dropped once all KASAN-enabled
 			 * architectures will switch to pgtable-nop4d.h.
 			 */
 #ifndef __ARCH_HAS_5LEVEL_HACK
-			pgd_populate(&init_mm, pgd, lm_alias(kasan_zero_p4d));
+			pgd_populate(&init_mm, pgd,
+					lm_alias(kasan_early_shadow_p4d));
 #endif
 			p4d = p4d_offset(pgd, addr);
-			p4d_populate(&init_mm, p4d, lm_alias(kasan_zero_pud));
+			p4d_populate(&init_mm, p4d,
+					lm_alias(kasan_early_shadow_pud));
 			pud = pud_offset(p4d, addr);
-			pud_populate(&init_mm, pud, lm_alias(kasan_zero_pmd));
+			pud_populate(&init_mm, pud,
+					lm_alias(kasan_early_shadow_pmd));
 			pmd = pmd_offset(pud, addr);
-			pmd_populate_kernel(&init_mm, pmd, lm_alias(kasan_zero_pte));
+			pmd_populate_kernel(&init_mm, pmd,
+					lm_alias(kasan_early_shadow_pte));
 			continue;
 		}
 
@@ -351,7 +362,7 @@
 		if (!pte_present(*pte))
 			continue;
 
-		if (WARN_ON(!kasan_zero_page_entry(*pte)))
+		if (WARN_ON(!kasan_early_shadow_page_entry(*pte)))
 			continue;
 		pte_clear(&init_mm, addr, pte);
 	}
@@ -481,7 +492,7 @@
 	    WARN_ON(size % (KASAN_SHADOW_SCALE_SIZE * PAGE_SIZE)))
 		return -EINVAL;
 
-	ret = kasan_populate_zero_shadow(shadow_start, shadow_end);
+	ret = kasan_populate_early_shadow(shadow_start, shadow_end);
 	if (ret)
 		kasan_remove_zero_shadow(shadow_start,
 					size >> KASAN_SHADOW_SCALE_SHIFT);
diff --git a/mm/kasan/kasan.c b/mm/kasan/kasan.c
deleted file mode 100644
index 09732dd..0000000
--- a/mm/kasan/kasan.c
+++ /dev/null
@@ -1,903 +0,0 @@
-/*
- * This file contains shadow memory manipulation code.
- *
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
- * Author: Andrey Ryabinin <ryabinin.a.a@gmail.com>
- *
- * Some code borrowed from https://github.com/xairy/kasan-prototype by
- *        Andrey Konovalov <andreyknvl@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- */
-
-#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
-#define DISABLE_BRANCH_PROFILING
-
-#include <linux/export.h>
-#include <linux/interrupt.h>
-#include <linux/init.h>
-#include <linux/kasan.h>
-#include <linux/kernel.h>
-#include <linux/kmemleak.h>
-#include <linux/linkage.h>
-#include <linux/memblock.h>
-#include <linux/memory.h>
-#include <linux/mm.h>
-#include <linux/module.h>
-#include <linux/printk.h>
-#include <linux/sched.h>
-#include <linux/sched/task_stack.h>
-#include <linux/slab.h>
-#include <linux/stacktrace.h>
-#include <linux/string.h>
-#include <linux/types.h>
-#include <linux/vmalloc.h>
-#include <linux/bug.h>
-
-#include "kasan.h"
-#include "../slab.h"
-
-void kasan_enable_current(void)
-{
-	current->kasan_depth++;
-}
-
-void kasan_disable_current(void)
-{
-	current->kasan_depth--;
-}
-
-/*
- * Poisons the shadow memory for 'size' bytes starting from 'addr'.
- * Memory addresses should be aligned to KASAN_SHADOW_SCALE_SIZE.
- */
-static void kasan_poison_shadow(const void *address, size_t size, u8 value)
-{
-	void *shadow_start, *shadow_end;
-
-	shadow_start = kasan_mem_to_shadow(address);
-	shadow_end = kasan_mem_to_shadow(address + size);
-
-	memset(shadow_start, value, shadow_end - shadow_start);
-}
-
-void kasan_unpoison_shadow(const void *address, size_t size)
-{
-	kasan_poison_shadow(address, size, 0);
-
-	if (size & KASAN_SHADOW_MASK) {
-		u8 *shadow = (u8 *)kasan_mem_to_shadow(address + size);
-		*shadow = size & KASAN_SHADOW_MASK;
-	}
-}
-
-static void __kasan_unpoison_stack(struct task_struct *task, const void *sp)
-{
-	void *base = task_stack_page(task);
-	size_t size = sp - base;
-
-	kasan_unpoison_shadow(base, size);
-}
-
-/* Unpoison the entire stack for a task. */
-void kasan_unpoison_task_stack(struct task_struct *task)
-{
-	__kasan_unpoison_stack(task, task_stack_page(task) + THREAD_SIZE);
-}
-
-/* Unpoison the stack for the current task beyond a watermark sp value. */
-asmlinkage void kasan_unpoison_task_stack_below(const void *watermark)
-{
-	/*
-	 * Calculate the task stack base address.  Avoid using 'current'
-	 * because this function is called by early resume code which hasn't
-	 * yet set up the percpu register (%gs).
-	 */
-	void *base = (void *)((unsigned long)watermark & ~(THREAD_SIZE - 1));
-
-	kasan_unpoison_shadow(base, watermark - base);
-}
-
-/*
- * Clear all poison for the region between the current SP and a provided
- * watermark value, as is sometimes required prior to hand-crafted asm function
- * returns in the middle of functions.
- */
-void kasan_unpoison_stack_above_sp_to(const void *watermark)
-{
-	const void *sp = __builtin_frame_address(0);
-	size_t size = watermark - sp;
-
-	if (WARN_ON(sp > watermark))
-		return;
-	kasan_unpoison_shadow(sp, size);
-}
-
-/*
- * All functions below always inlined so compiler could
- * perform better optimizations in each of __asan_loadX/__assn_storeX
- * depending on memory access size X.
- */
-
-static __always_inline bool memory_is_poisoned_1(unsigned long addr)
-{
-	s8 shadow_value = *(s8 *)kasan_mem_to_shadow((void *)addr);
-
-	if (unlikely(shadow_value)) {
-		s8 last_accessible_byte = addr & KASAN_SHADOW_MASK;
-		return unlikely(last_accessible_byte >= shadow_value);
-	}
-
-	return false;
-}
-
-static __always_inline bool memory_is_poisoned_2_4_8(unsigned long addr,
-						unsigned long size)
-{
-	u8 *shadow_addr = (u8 *)kasan_mem_to_shadow((void *)addr);
-
-	/*
-	 * Access crosses 8(shadow size)-byte boundary. Such access maps
-	 * into 2 shadow bytes, so we need to check them both.
-	 */
-	if (unlikely(((addr + size - 1) & KASAN_SHADOW_MASK) < size - 1))
-		return *shadow_addr || memory_is_poisoned_1(addr + size - 1);
-
-	return memory_is_poisoned_1(addr + size - 1);
-}
-
-static __always_inline bool memory_is_poisoned_16(unsigned long addr)
-{
-	u16 *shadow_addr = (u16 *)kasan_mem_to_shadow((void *)addr);
-
-	/* Unaligned 16-bytes access maps into 3 shadow bytes. */
-	if (unlikely(!IS_ALIGNED(addr, KASAN_SHADOW_SCALE_SIZE)))
-		return *shadow_addr || memory_is_poisoned_1(addr + 15);
-
-	return *shadow_addr;
-}
-
-static __always_inline unsigned long bytes_is_nonzero(const u8 *start,
-					size_t size)
-{
-	while (size) {
-		if (unlikely(*start))
-			return (unsigned long)start;
-		start++;
-		size--;
-	}
-
-	return 0;
-}
-
-static __always_inline unsigned long memory_is_nonzero(const void *start,
-						const void *end)
-{
-	unsigned int words;
-	unsigned long ret;
-	unsigned int prefix = (unsigned long)start % 8;
-
-	if (end - start <= 16)
-		return bytes_is_nonzero(start, end - start);
-
-	if (prefix) {
-		prefix = 8 - prefix;
-		ret = bytes_is_nonzero(start, prefix);
-		if (unlikely(ret))
-			return ret;
-		start += prefix;
-	}
-
-	words = (end - start) / 8;
-	while (words) {
-		if (unlikely(*(u64 *)start))
-			return bytes_is_nonzero(start, 8);
-		start += 8;
-		words--;
-	}
-
-	return bytes_is_nonzero(start, (end - start) % 8);
-}
-
-static __always_inline bool memory_is_poisoned_n(unsigned long addr,
-						size_t size)
-{
-	unsigned long ret;
-
-	ret = memory_is_nonzero(kasan_mem_to_shadow((void *)addr),
-			kasan_mem_to_shadow((void *)addr + size - 1) + 1);
-
-	if (unlikely(ret)) {
-		unsigned long last_byte = addr + size - 1;
-		s8 *last_shadow = (s8 *)kasan_mem_to_shadow((void *)last_byte);
-
-		if (unlikely(ret != (unsigned long)last_shadow ||
-			((long)(last_byte & KASAN_SHADOW_MASK) >= *last_shadow)))
-			return true;
-	}
-	return false;
-}
-
-static __always_inline bool memory_is_poisoned(unsigned long addr, size_t size)
-{
-	if (__builtin_constant_p(size)) {
-		switch (size) {
-		case 1:
-			return memory_is_poisoned_1(addr);
-		case 2:
-		case 4:
-		case 8:
-			return memory_is_poisoned_2_4_8(addr, size);
-		case 16:
-			return memory_is_poisoned_16(addr);
-		default:
-			BUILD_BUG();
-		}
-	}
-
-	return memory_is_poisoned_n(addr, size);
-}
-
-static __always_inline void check_memory_region_inline(unsigned long addr,
-						size_t size, bool write,
-						unsigned long ret_ip)
-{
-	if (unlikely(size == 0))
-		return;
-
-	if (unlikely((void *)addr <
-		kasan_shadow_to_mem((void *)KASAN_SHADOW_START))) {
-		kasan_report(addr, size, write, ret_ip);
-		return;
-	}
-
-	if (likely(!memory_is_poisoned(addr, size)))
-		return;
-
-	kasan_report(addr, size, write, ret_ip);
-}
-
-static void check_memory_region(unsigned long addr,
-				size_t size, bool write,
-				unsigned long ret_ip)
-{
-	check_memory_region_inline(addr, size, write, ret_ip);
-}
-
-void kasan_check_read(const volatile void *p, unsigned int size)
-{
-	check_memory_region((unsigned long)p, size, false, _RET_IP_);
-}
-EXPORT_SYMBOL(kasan_check_read);
-
-void kasan_check_write(const volatile void *p, unsigned int size)
-{
-	check_memory_region((unsigned long)p, size, true, _RET_IP_);
-}
-EXPORT_SYMBOL(kasan_check_write);
-
-#undef memset
-void *memset(void *addr, int c, size_t len)
-{
-	check_memory_region((unsigned long)addr, len, true, _RET_IP_);
-
-	return __memset(addr, c, len);
-}
-
-#undef memmove
-void *memmove(void *dest, const void *src, size_t len)
-{
-	check_memory_region((unsigned long)src, len, false, _RET_IP_);
-	check_memory_region((unsigned long)dest, len, true, _RET_IP_);
-
-	return __memmove(dest, src, len);
-}
-
-#undef memcpy
-void *memcpy(void *dest, const void *src, size_t len)
-{
-	check_memory_region((unsigned long)src, len, false, _RET_IP_);
-	check_memory_region((unsigned long)dest, len, true, _RET_IP_);
-
-	return __memcpy(dest, src, len);
-}
-
-void kasan_alloc_pages(struct page *page, unsigned int order)
-{
-	if (likely(!PageHighMem(page)))
-		kasan_unpoison_shadow(page_address(page), PAGE_SIZE << order);
-}
-
-void kasan_free_pages(struct page *page, unsigned int order)
-{
-	if (likely(!PageHighMem(page)))
-		kasan_poison_shadow(page_address(page),
-				PAGE_SIZE << order,
-				KASAN_FREE_PAGE);
-}
-
-/*
- * Adaptive redzone policy taken from the userspace AddressSanitizer runtime.
- * For larger allocations larger redzones are used.
- */
-static unsigned int optimal_redzone(unsigned int object_size)
-{
-	return
-		object_size <= 64        - 16   ? 16 :
-		object_size <= 128       - 32   ? 32 :
-		object_size <= 512       - 64   ? 64 :
-		object_size <= 4096      - 128  ? 128 :
-		object_size <= (1 << 14) - 256  ? 256 :
-		object_size <= (1 << 15) - 512  ? 512 :
-		object_size <= (1 << 16) - 1024 ? 1024 : 2048;
-}
-
-void kasan_cache_create(struct kmem_cache *cache, unsigned int *size,
-			slab_flags_t *flags)
-{
-	unsigned int orig_size = *size;
-	int redzone_adjust;
-
-	/* Add alloc meta. */
-	cache->kasan_info.alloc_meta_offset = *size;
-	*size += sizeof(struct kasan_alloc_meta);
-
-	/* Add free meta. */
-	if (cache->flags & SLAB_TYPESAFE_BY_RCU || cache->ctor ||
-	    cache->object_size < sizeof(struct kasan_free_meta)) {
-		cache->kasan_info.free_meta_offset = *size;
-		*size += sizeof(struct kasan_free_meta);
-	}
-	redzone_adjust = optimal_redzone(cache->object_size) -
-		(*size - cache->object_size);
-
-	if (redzone_adjust > 0)
-		*size += redzone_adjust;
-
-	*size = min_t(unsigned int, KMALLOC_MAX_SIZE,
-			max(*size, cache->object_size +
-					optimal_redzone(cache->object_size)));
-
-	/*
-	 * If the metadata doesn't fit, don't enable KASAN at all.
-	 */
-	if (*size <= cache->kasan_info.alloc_meta_offset ||
-			*size <= cache->kasan_info.free_meta_offset) {
-		cache->kasan_info.alloc_meta_offset = 0;
-		cache->kasan_info.free_meta_offset = 0;
-		*size = orig_size;
-		return;
-	}
-
-	*flags |= SLAB_KASAN;
-}
-
-void kasan_cache_shrink(struct kmem_cache *cache)
-{
-	quarantine_remove_cache(cache);
-}
-
-void kasan_cache_shutdown(struct kmem_cache *cache)
-{
-	if (!__kmem_cache_empty(cache))
-		quarantine_remove_cache(cache);
-}
-
-size_t kasan_metadata_size(struct kmem_cache *cache)
-{
-	return (cache->kasan_info.alloc_meta_offset ?
-		sizeof(struct kasan_alloc_meta) : 0) +
-		(cache->kasan_info.free_meta_offset ?
-		sizeof(struct kasan_free_meta) : 0);
-}
-
-void kasan_poison_slab(struct page *page)
-{
-	kasan_poison_shadow(page_address(page),
-			PAGE_SIZE << compound_order(page),
-			KASAN_KMALLOC_REDZONE);
-}
-
-void kasan_unpoison_object_data(struct kmem_cache *cache, void *object)
-{
-	kasan_unpoison_shadow(object, cache->object_size);
-}
-
-void kasan_poison_object_data(struct kmem_cache *cache, void *object)
-{
-	kasan_poison_shadow(object,
-			round_up(cache->object_size, KASAN_SHADOW_SCALE_SIZE),
-			KASAN_KMALLOC_REDZONE);
-}
-
-static inline int in_irqentry_text(unsigned long ptr)
-{
-	return (ptr >= (unsigned long)&__irqentry_text_start &&
-		ptr < (unsigned long)&__irqentry_text_end) ||
-		(ptr >= (unsigned long)&__softirqentry_text_start &&
-		 ptr < (unsigned long)&__softirqentry_text_end);
-}
-
-static inline void filter_irq_stacks(struct stack_trace *trace)
-{
-	int i;
-
-	if (!trace->nr_entries)
-		return;
-	for (i = 0; i < trace->nr_entries; i++)
-		if (in_irqentry_text(trace->entries[i])) {
-			/* Include the irqentry function into the stack. */
-			trace->nr_entries = i + 1;
-			break;
-		}
-}
-
-static inline depot_stack_handle_t save_stack(gfp_t flags)
-{
-	unsigned long entries[KASAN_STACK_DEPTH];
-	struct stack_trace trace = {
-		.nr_entries = 0,
-		.entries = entries,
-		.max_entries = KASAN_STACK_DEPTH,
-		.skip = 0
-	};
-
-	save_stack_trace(&trace);
-	filter_irq_stacks(&trace);
-	if (trace.nr_entries != 0 &&
-	    trace.entries[trace.nr_entries-1] == ULONG_MAX)
-		trace.nr_entries--;
-
-	return depot_save_stack(&trace, flags);
-}
-
-static inline void set_track(struct kasan_track *track, gfp_t flags)
-{
-	track->pid = current->pid;
-	track->stack = save_stack(flags);
-}
-
-struct kasan_alloc_meta *get_alloc_info(struct kmem_cache *cache,
-					const void *object)
-{
-	BUILD_BUG_ON(sizeof(struct kasan_alloc_meta) > 32);
-	return (void *)object + cache->kasan_info.alloc_meta_offset;
-}
-
-struct kasan_free_meta *get_free_info(struct kmem_cache *cache,
-				      const void *object)
-{
-	BUILD_BUG_ON(sizeof(struct kasan_free_meta) > 32);
-	return (void *)object + cache->kasan_info.free_meta_offset;
-}
-
-void kasan_init_slab_obj(struct kmem_cache *cache, const void *object)
-{
-	struct kasan_alloc_meta *alloc_info;
-
-	if (!(cache->flags & SLAB_KASAN))
-		return;
-
-	alloc_info = get_alloc_info(cache, object);
-	__memset(alloc_info, 0, sizeof(*alloc_info));
-}
-
-void kasan_slab_alloc(struct kmem_cache *cache, void *object, gfp_t flags)
-{
-	kasan_kmalloc(cache, object, cache->object_size, flags);
-}
-
-static bool __kasan_slab_free(struct kmem_cache *cache, void *object,
-			      unsigned long ip, bool quarantine)
-{
-	s8 shadow_byte;
-	unsigned long rounded_up_size;
-
-	if (unlikely(nearest_obj(cache, virt_to_head_page(object), object) !=
-	    object)) {
-		kasan_report_invalid_free(object, ip);
-		return true;
-	}
-
-	/* RCU slabs could be legally used after free within the RCU period */
-	if (unlikely(cache->flags & SLAB_TYPESAFE_BY_RCU))
-		return false;
-
-	shadow_byte = READ_ONCE(*(s8 *)kasan_mem_to_shadow(object));
-	if (shadow_byte < 0 || shadow_byte >= KASAN_SHADOW_SCALE_SIZE) {
-		kasan_report_invalid_free(object, ip);
-		return true;
-	}
-
-	rounded_up_size = round_up(cache->object_size, KASAN_SHADOW_SCALE_SIZE);
-	kasan_poison_shadow(object, rounded_up_size, KASAN_KMALLOC_FREE);
-
-	if (!quarantine || unlikely(!(cache->flags & SLAB_KASAN)))
-		return false;
-
-	set_track(&get_alloc_info(cache, object)->free_track, GFP_NOWAIT);
-	quarantine_put(get_free_info(cache, object), cache);
-	return true;
-}
-
-bool kasan_slab_free(struct kmem_cache *cache, void *object, unsigned long ip)
-{
-	return __kasan_slab_free(cache, object, ip, true);
-}
-
-void kasan_kmalloc(struct kmem_cache *cache, const void *object, size_t size,
-		   gfp_t flags)
-{
-	unsigned long redzone_start;
-	unsigned long redzone_end;
-
-	if (gfpflags_allow_blocking(flags))
-		quarantine_reduce();
-
-	if (unlikely(object == NULL))
-		return;
-
-	redzone_start = round_up((unsigned long)(object + size),
-				KASAN_SHADOW_SCALE_SIZE);
-	redzone_end = round_up((unsigned long)object + cache->object_size,
-				KASAN_SHADOW_SCALE_SIZE);
-
-	kasan_unpoison_shadow(object, size);
-	kasan_poison_shadow((void *)redzone_start, redzone_end - redzone_start,
-		KASAN_KMALLOC_REDZONE);
-
-	if (cache->flags & SLAB_KASAN)
-		set_track(&get_alloc_info(cache, object)->alloc_track, flags);
-}
-EXPORT_SYMBOL(kasan_kmalloc);
-
-void kasan_kmalloc_large(const void *ptr, size_t size, gfp_t flags)
-{
-	struct page *page;
-	unsigned long redzone_start;
-	unsigned long redzone_end;
-
-	if (gfpflags_allow_blocking(flags))
-		quarantine_reduce();
-
-	if (unlikely(ptr == NULL))
-		return;
-
-	page = virt_to_page(ptr);
-	redzone_start = round_up((unsigned long)(ptr + size),
-				KASAN_SHADOW_SCALE_SIZE);
-	redzone_end = (unsigned long)ptr + (PAGE_SIZE << compound_order(page));
-
-	kasan_unpoison_shadow(ptr, size);
-	kasan_poison_shadow((void *)redzone_start, redzone_end - redzone_start,
-		KASAN_PAGE_REDZONE);
-}
-
-void kasan_krealloc(const void *object, size_t size, gfp_t flags)
-{
-	struct page *page;
-
-	if (unlikely(object == ZERO_SIZE_PTR))
-		return;
-
-	page = virt_to_head_page(object);
-
-	if (unlikely(!PageSlab(page)))
-		kasan_kmalloc_large(object, size, flags);
-	else
-		kasan_kmalloc(page->slab_cache, object, size, flags);
-}
-
-void kasan_poison_kfree(void *ptr, unsigned long ip)
-{
-	struct page *page;
-
-	page = virt_to_head_page(ptr);
-
-	if (unlikely(!PageSlab(page))) {
-		if (ptr != page_address(page)) {
-			kasan_report_invalid_free(ptr, ip);
-			return;
-		}
-		kasan_poison_shadow(ptr, PAGE_SIZE << compound_order(page),
-				KASAN_FREE_PAGE);
-	} else {
-		__kasan_slab_free(page->slab_cache, ptr, ip, false);
-	}
-}
-
-void kasan_kfree_large(void *ptr, unsigned long ip)
-{
-	if (ptr != page_address(virt_to_head_page(ptr)))
-		kasan_report_invalid_free(ptr, ip);
-	/* The object will be poisoned by page_alloc. */
-}
-
-int kasan_module_alloc(void *addr, size_t size)
-{
-	void *ret;
-	size_t scaled_size;
-	size_t shadow_size;
-	unsigned long shadow_start;
-
-	shadow_start = (unsigned long)kasan_mem_to_shadow(addr);
-	scaled_size = (size + KASAN_SHADOW_MASK) >> KASAN_SHADOW_SCALE_SHIFT;
-	shadow_size = round_up(scaled_size, PAGE_SIZE);
-
-	if (WARN_ON(!PAGE_ALIGNED(shadow_start)))
-		return -EINVAL;
-
-	ret = __vmalloc_node_range(shadow_size, 1, shadow_start,
-			shadow_start + shadow_size,
-			GFP_KERNEL | __GFP_ZERO,
-			PAGE_KERNEL, VM_NO_GUARD, NUMA_NO_NODE,
-			__builtin_return_address(0));
-
-	if (ret) {
-		find_vm_area(addr)->flags |= VM_KASAN;
-		kmemleak_ignore(ret);
-		return 0;
-	}
-
-	return -ENOMEM;
-}
-
-void kasan_free_shadow(const struct vm_struct *vm)
-{
-	if (vm->flags & VM_KASAN)
-		vfree(kasan_mem_to_shadow(vm->addr));
-}
-
-static void register_global(struct kasan_global *global)
-{
-	size_t aligned_size = round_up(global->size, KASAN_SHADOW_SCALE_SIZE);
-
-	kasan_unpoison_shadow(global->beg, global->size);
-
-	kasan_poison_shadow(global->beg + aligned_size,
-		global->size_with_redzone - aligned_size,
-		KASAN_GLOBAL_REDZONE);
-}
-
-void __asan_register_globals(struct kasan_global *globals, size_t size)
-{
-	int i;
-
-	for (i = 0; i < size; i++)
-		register_global(&globals[i]);
-}
-EXPORT_SYMBOL(__asan_register_globals);
-
-void __asan_unregister_globals(struct kasan_global *globals, size_t size)
-{
-}
-EXPORT_SYMBOL(__asan_unregister_globals);
-
-#define DEFINE_ASAN_LOAD_STORE(size)					\
-	void __asan_load##size(unsigned long addr)			\
-	{								\
-		check_memory_region_inline(addr, size, false, _RET_IP_);\
-	}								\
-	EXPORT_SYMBOL(__asan_load##size);				\
-	__alias(__asan_load##size)					\
-	void __asan_load##size##_noabort(unsigned long);		\
-	EXPORT_SYMBOL(__asan_load##size##_noabort);			\
-	void __asan_store##size(unsigned long addr)			\
-	{								\
-		check_memory_region_inline(addr, size, true, _RET_IP_);	\
-	}								\
-	EXPORT_SYMBOL(__asan_store##size);				\
-	__alias(__asan_store##size)					\
-	void __asan_store##size##_noabort(unsigned long);		\
-	EXPORT_SYMBOL(__asan_store##size##_noabort)
-
-DEFINE_ASAN_LOAD_STORE(1);
-DEFINE_ASAN_LOAD_STORE(2);
-DEFINE_ASAN_LOAD_STORE(4);
-DEFINE_ASAN_LOAD_STORE(8);
-DEFINE_ASAN_LOAD_STORE(16);
-
-void __asan_loadN(unsigned long addr, size_t size)
-{
-	check_memory_region(addr, size, false, _RET_IP_);
-}
-EXPORT_SYMBOL(__asan_loadN);
-
-__alias(__asan_loadN)
-void __asan_loadN_noabort(unsigned long, size_t);
-EXPORT_SYMBOL(__asan_loadN_noabort);
-
-void __asan_storeN(unsigned long addr, size_t size)
-{
-	check_memory_region(addr, size, true, _RET_IP_);
-}
-EXPORT_SYMBOL(__asan_storeN);
-
-__alias(__asan_storeN)
-void __asan_storeN_noabort(unsigned long, size_t);
-EXPORT_SYMBOL(__asan_storeN_noabort);
-
-/* to shut up compiler complaints */
-void __asan_handle_no_return(void) {}
-EXPORT_SYMBOL(__asan_handle_no_return);
-
-/* Emitted by compiler to poison large objects when they go out of scope. */
-void __asan_poison_stack_memory(const void *addr, size_t size)
-{
-	/*
-	 * Addr is KASAN_SHADOW_SCALE_SIZE-aligned and the object is surrounded
-	 * by redzones, so we simply round up size to simplify logic.
-	 */
-	kasan_poison_shadow(addr, round_up(size, KASAN_SHADOW_SCALE_SIZE),
-			    KASAN_USE_AFTER_SCOPE);
-}
-EXPORT_SYMBOL(__asan_poison_stack_memory);
-
-/* Emitted by compiler to unpoison large objects when they go into scope. */
-void __asan_unpoison_stack_memory(const void *addr, size_t size)
-{
-	kasan_unpoison_shadow(addr, size);
-}
-EXPORT_SYMBOL(__asan_unpoison_stack_memory);
-
-/* Emitted by compiler to poison alloca()ed objects. */
-void __asan_alloca_poison(unsigned long addr, size_t size)
-{
-	size_t rounded_up_size = round_up(size, KASAN_SHADOW_SCALE_SIZE);
-	size_t padding_size = round_up(size, KASAN_ALLOCA_REDZONE_SIZE) -
-			rounded_up_size;
-	size_t rounded_down_size = round_down(size, KASAN_SHADOW_SCALE_SIZE);
-
-	const void *left_redzone = (const void *)(addr -
-			KASAN_ALLOCA_REDZONE_SIZE);
-	const void *right_redzone = (const void *)(addr + rounded_up_size);
-
-	WARN_ON(!IS_ALIGNED(addr, KASAN_ALLOCA_REDZONE_SIZE));
-
-	kasan_unpoison_shadow((const void *)(addr + rounded_down_size),
-			      size - rounded_down_size);
-	kasan_poison_shadow(left_redzone, KASAN_ALLOCA_REDZONE_SIZE,
-			KASAN_ALLOCA_LEFT);
-	kasan_poison_shadow(right_redzone,
-			padding_size + KASAN_ALLOCA_REDZONE_SIZE,
-			KASAN_ALLOCA_RIGHT);
-}
-EXPORT_SYMBOL(__asan_alloca_poison);
-
-/* Emitted by compiler to unpoison alloca()ed areas when the stack unwinds. */
-void __asan_allocas_unpoison(const void *stack_top, const void *stack_bottom)
-{
-	if (unlikely(!stack_top || stack_top > stack_bottom))
-		return;
-
-	kasan_unpoison_shadow(stack_top, stack_bottom - stack_top);
-}
-EXPORT_SYMBOL(__asan_allocas_unpoison);
-
-/* Emitted by the compiler to [un]poison local variables. */
-#define DEFINE_ASAN_SET_SHADOW(byte) \
-	void __asan_set_shadow_##byte(const void *addr, size_t size)	\
-	{								\
-		__memset((void *)addr, 0x##byte, size);			\
-	}								\
-	EXPORT_SYMBOL(__asan_set_shadow_##byte)
-
-DEFINE_ASAN_SET_SHADOW(00);
-DEFINE_ASAN_SET_SHADOW(f1);
-DEFINE_ASAN_SET_SHADOW(f2);
-DEFINE_ASAN_SET_SHADOW(f3);
-DEFINE_ASAN_SET_SHADOW(f5);
-DEFINE_ASAN_SET_SHADOW(f8);
-
-#ifdef CONFIG_MEMORY_HOTPLUG
-static bool shadow_mapped(unsigned long addr)
-{
-	pgd_t *pgd = pgd_offset_k(addr);
-	p4d_t *p4d;
-	pud_t *pud;
-	pmd_t *pmd;
-	pte_t *pte;
-
-	if (pgd_none(*pgd))
-		return false;
-	p4d = p4d_offset(pgd, addr);
-	if (p4d_none(*p4d))
-		return false;
-	pud = pud_offset(p4d, addr);
-	if (pud_none(*pud))
-		return false;
-
-	/*
-	 * We can't use pud_large() or pud_huge(), the first one is
-	 * arch-specific, the last one depends on HUGETLB_PAGE.  So let's abuse
-	 * pud_bad(), if pud is bad then it's bad because it's huge.
-	 */
-	if (pud_bad(*pud))
-		return true;
-	pmd = pmd_offset(pud, addr);
-	if (pmd_none(*pmd))
-		return false;
-
-	if (pmd_bad(*pmd))
-		return true;
-	pte = pte_offset_kernel(pmd, addr);
-	return !pte_none(*pte);
-}
-
-static int __meminit kasan_mem_notifier(struct notifier_block *nb,
-			unsigned long action, void *data)
-{
-	struct memory_notify *mem_data = data;
-	unsigned long nr_shadow_pages, start_kaddr, shadow_start;
-	unsigned long shadow_end, shadow_size;
-
-	nr_shadow_pages = mem_data->nr_pages >> KASAN_SHADOW_SCALE_SHIFT;
-	start_kaddr = (unsigned long)pfn_to_kaddr(mem_data->start_pfn);
-	shadow_start = (unsigned long)kasan_mem_to_shadow((void *)start_kaddr);
-	shadow_size = nr_shadow_pages << PAGE_SHIFT;
-	shadow_end = shadow_start + shadow_size;
-
-	if (WARN_ON(mem_data->nr_pages % KASAN_SHADOW_SCALE_SIZE) ||
-		WARN_ON(start_kaddr % (KASAN_SHADOW_SCALE_SIZE << PAGE_SHIFT)))
-		return NOTIFY_BAD;
-
-	switch (action) {
-	case MEM_GOING_ONLINE: {
-		void *ret;
-
-		/*
-		 * If shadow is mapped already than it must have been mapped
-		 * during the boot. This could happen if we onlining previously
-		 * offlined memory.
-		 */
-		if (shadow_mapped(shadow_start))
-			return NOTIFY_OK;
-
-		ret = __vmalloc_node_range(shadow_size, PAGE_SIZE, shadow_start,
-					shadow_end, GFP_KERNEL | __GFP_ZERO,
-					PAGE_KERNEL, VM_NO_GUARD,
-					pfn_to_nid(mem_data->start_pfn),
-					__builtin_return_address(0));
-		if (!ret)
-			return NOTIFY_BAD;
-
-		kmemleak_ignore(ret);
-		return NOTIFY_OK;
-	}
-	case MEM_CANCEL_ONLINE:
-	case MEM_OFFLINE: {
-		struct vm_struct *vm;
-
-		/*
-		 * shadow_start was either mapped during boot by kasan_init()
-		 * or during memory online by __vmalloc_node_range().
-		 * In the latter case we can use vfree() to free shadow.
-		 * Non-NULL result of the find_vm_area() will tell us if
-		 * that was the second case.
-		 *
-		 * Currently it's not possible to free shadow mapped
-		 * during boot by kasan_init(). It's because the code
-		 * to do that hasn't been written yet. So we'll just
-		 * leak the memory.
-		 */
-		vm = find_vm_area((void *)shadow_start);
-		if (vm)
-			vfree((void *)shadow_start);
-	}
-	}
-
-	return NOTIFY_OK;
-}
-
-static int __init kasan_memhotplug_init(void)
-{
-	hotplug_memory_notifier(kasan_mem_notifier, 0);
-
-	return 0;
-}
-
-core_initcall(kasan_memhotplug_init);
-#endif
diff --git a/mm/kasan/kasan.h b/mm/kasan/kasan.h
index c12dcfd..3ce956e 100644
--- a/mm/kasan/kasan.h
+++ b/mm/kasan/kasan.h
@@ -8,10 +8,22 @@
 #define KASAN_SHADOW_SCALE_SIZE (1UL << KASAN_SHADOW_SCALE_SHIFT)
 #define KASAN_SHADOW_MASK       (KASAN_SHADOW_SCALE_SIZE - 1)
 
+#define KASAN_TAG_KERNEL	0xFF /* native kernel pointers tag */
+#define KASAN_TAG_INVALID	0xFE /* inaccessible memory tag */
+#define KASAN_TAG_MAX		0xFD /* maximum value for random tags */
+
+#ifdef CONFIG_KASAN_GENERIC
 #define KASAN_FREE_PAGE         0xFF  /* page was freed */
 #define KASAN_PAGE_REDZONE      0xFE  /* redzone for kmalloc_large allocations */
 #define KASAN_KMALLOC_REDZONE   0xFC  /* redzone inside slub object */
 #define KASAN_KMALLOC_FREE      0xFB  /* object was freed (kmem_cache_free/kfree) */
+#else
+#define KASAN_FREE_PAGE         KASAN_TAG_INVALID
+#define KASAN_PAGE_REDZONE      KASAN_TAG_INVALID
+#define KASAN_KMALLOC_REDZONE   KASAN_TAG_INVALID
+#define KASAN_KMALLOC_FREE      KASAN_TAG_INVALID
+#endif
+
 #define KASAN_GLOBAL_REDZONE    0xFA  /* redzone for global variable */
 
 /*
@@ -22,7 +34,6 @@
 #define KASAN_STACK_MID         0xF2
 #define KASAN_STACK_RIGHT       0xF3
 #define KASAN_STACK_PARTIAL     0xF4
-#define KASAN_USE_AFTER_SCOPE   0xF8
 
 /*
  * alloca redzone shadow values
@@ -105,11 +116,25 @@
 		<< KASAN_SHADOW_SCALE_SHIFT);
 }
 
+static inline bool addr_has_shadow(const void *addr)
+{
+	return (addr >= kasan_shadow_to_mem((void *)KASAN_SHADOW_START));
+}
+
+void kasan_poison_shadow(const void *address, size_t size, u8 value);
+
+void check_memory_region(unsigned long addr, size_t size, bool write,
+				unsigned long ret_ip);
+
+void *find_first_bad_addr(void *addr, size_t size);
+const char *get_bug_type(struct kasan_access_info *info);
+
 void kasan_report(unsigned long addr, size_t size,
 		bool is_write, unsigned long ip);
 void kasan_report_invalid_free(void *object, unsigned long ip);
 
-#if defined(CONFIG_SLAB) || defined(CONFIG_SLUB)
+#if defined(CONFIG_KASAN_GENERIC) && \
+	(defined(CONFIG_SLAB) || defined(CONFIG_SLUB))
 void quarantine_put(struct kasan_free_meta *info, struct kmem_cache *cache);
 void quarantine_reduce(void);
 void quarantine_remove_cache(struct kmem_cache *cache);
@@ -120,6 +145,40 @@
 static inline void quarantine_remove_cache(struct kmem_cache *cache) { }
 #endif
 
+#ifdef CONFIG_KASAN_SW_TAGS
+
+void print_tags(u8 addr_tag, const void *addr);
+
+u8 random_tag(void);
+
+#else
+
+static inline void print_tags(u8 addr_tag, const void *addr) { }
+
+static inline u8 random_tag(void)
+{
+	return 0;
+}
+
+#endif
+
+#ifndef arch_kasan_set_tag
+static inline const void *arch_kasan_set_tag(const void *addr, u8 tag)
+{
+	return addr;
+}
+#endif
+#ifndef arch_kasan_reset_tag
+#define arch_kasan_reset_tag(addr)	((void *)(addr))
+#endif
+#ifndef arch_kasan_get_tag
+#define arch_kasan_get_tag(addr)	0
+#endif
+
+#define set_tag(addr, tag)	((void *)arch_kasan_set_tag((addr), (tag)))
+#define reset_tag(addr)		((void *)arch_kasan_reset_tag(addr))
+#define get_tag(addr)		arch_kasan_get_tag(addr)
+
 /*
  * Exported functions for interfaces called from assembly or from generated
  * code. Declarations here to avoid warning about missing declarations.
@@ -130,8 +189,6 @@
 void __asan_loadN(unsigned long addr, size_t size);
 void __asan_storeN(unsigned long addr, size_t size);
 void __asan_handle_no_return(void);
-void __asan_poison_stack_memory(const void *addr, size_t size);
-void __asan_unpoison_stack_memory(const void *addr, size_t size);
 void __asan_alloca_poison(unsigned long addr, size_t size);
 void __asan_allocas_unpoison(const void *stack_top, const void *stack_bottom);
 
diff --git a/mm/kasan/quarantine.c b/mm/kasan/quarantine.c
index 3a8ddf8..57334ef 100644
--- a/mm/kasan/quarantine.c
+++ b/mm/kasan/quarantine.c
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: GPL-2.0
 /*
  * KASAN quarantine.
  *
@@ -103,7 +104,7 @@
 static int quarantine_tail;
 /* Total size of all objects in global_quarantine across all batches. */
 static unsigned long quarantine_size;
-static DEFINE_SPINLOCK(quarantine_lock);
+static DEFINE_RAW_SPINLOCK(quarantine_lock);
 DEFINE_STATIC_SRCU(remove_cache_srcu);
 
 /* Maximum size of the global queue. */
@@ -190,7 +191,7 @@
 	if (unlikely(q->bytes > QUARANTINE_PERCPU_SIZE)) {
 		qlist_move_all(q, &temp);
 
-		spin_lock(&quarantine_lock);
+		raw_spin_lock(&quarantine_lock);
 		WRITE_ONCE(quarantine_size, quarantine_size + temp.bytes);
 		qlist_move_all(&temp, &global_quarantine[quarantine_tail]);
 		if (global_quarantine[quarantine_tail].bytes >=
@@ -203,7 +204,7 @@
 			if (new_tail != quarantine_head)
 				quarantine_tail = new_tail;
 		}
-		spin_unlock(&quarantine_lock);
+		raw_spin_unlock(&quarantine_lock);
 	}
 
 	local_irq_restore(flags);
@@ -230,7 +231,7 @@
 	 * expected case).
 	 */
 	srcu_idx = srcu_read_lock(&remove_cache_srcu);
-	spin_lock_irqsave(&quarantine_lock, flags);
+	raw_spin_lock_irqsave(&quarantine_lock, flags);
 
 	/*
 	 * Update quarantine size in case of hotplug. Allocate a fraction of
@@ -254,7 +255,7 @@
 			quarantine_head = 0;
 	}
 
-	spin_unlock_irqrestore(&quarantine_lock, flags);
+	raw_spin_unlock_irqrestore(&quarantine_lock, flags);
 
 	qlist_free_all(&to_free, NULL);
 	srcu_read_unlock(&remove_cache_srcu, srcu_idx);
@@ -310,17 +311,17 @@
 	 */
 	on_each_cpu(per_cpu_remove_cache, cache, 1);
 
-	spin_lock_irqsave(&quarantine_lock, flags);
+	raw_spin_lock_irqsave(&quarantine_lock, flags);
 	for (i = 0; i < QUARANTINE_BATCHES; i++) {
 		if (qlist_empty(&global_quarantine[i]))
 			continue;
 		qlist_move_cache(&global_quarantine[i], &to_free, cache);
 		/* Scanning whole quarantine can take a while. */
-		spin_unlock_irqrestore(&quarantine_lock, flags);
+		raw_spin_unlock_irqrestore(&quarantine_lock, flags);
 		cond_resched();
-		spin_lock_irqsave(&quarantine_lock, flags);
+		raw_spin_lock_irqsave(&quarantine_lock, flags);
 	}
-	spin_unlock_irqrestore(&quarantine_lock, flags);
+	raw_spin_unlock_irqrestore(&quarantine_lock, flags);
 
 	qlist_free_all(&to_free, cache);
 
diff --git a/mm/kasan/report.c b/mm/kasan/report.c
index 5c169aa..0772820 100644
--- a/mm/kasan/report.c
+++ b/mm/kasan/report.c
@@ -1,5 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0
 /*
- * This file contains error reporting code.
+ * This file contains common generic and tag-based KASAN error reporting code.
  *
  * Copyright (c) 2014 Samsung Electronics Co., Ltd.
  * Author: Andrey Ryabinin <ryabinin.a.a@gmail.com>
@@ -39,129 +40,43 @@
 #define SHADOW_BYTES_PER_ROW (SHADOW_BLOCKS_PER_ROW * SHADOW_BYTES_PER_BLOCK)
 #define SHADOW_ROWS_AROUND_ADDR 2
 
-static const void *find_first_bad_addr(const void *addr, size_t size)
+static unsigned long kasan_flags;
+
+#define KASAN_BIT_REPORTED	0
+#define KASAN_BIT_MULTI_SHOT	1
+
+bool kasan_save_enable_multi_shot(void)
 {
-	u8 shadow_val = *(u8 *)kasan_mem_to_shadow(addr);
-	const void *first_bad_addr = addr;
-
-	while (!shadow_val && first_bad_addr < addr + size) {
-		first_bad_addr += KASAN_SHADOW_SCALE_SIZE;
-		shadow_val = *(u8 *)kasan_mem_to_shadow(first_bad_addr);
-	}
-	return first_bad_addr;
+	return test_and_set_bit(KASAN_BIT_MULTI_SHOT, &kasan_flags);
 }
+EXPORT_SYMBOL_GPL(kasan_save_enable_multi_shot);
 
-static bool addr_has_shadow(struct kasan_access_info *info)
+void kasan_restore_multi_shot(bool enabled)
 {
-	return (info->access_addr >=
-		kasan_shadow_to_mem((void *)KASAN_SHADOW_START));
+	if (!enabled)
+		clear_bit(KASAN_BIT_MULTI_SHOT, &kasan_flags);
 }
+EXPORT_SYMBOL_GPL(kasan_restore_multi_shot);
 
-static const char *get_shadow_bug_type(struct kasan_access_info *info)
+static int __init kasan_set_multi_shot(char *str)
 {
-	const char *bug_type = "unknown-crash";
-	u8 *shadow_addr;
-
-	info->first_bad_addr = find_first_bad_addr(info->access_addr,
-						info->access_size);
-
-	shadow_addr = (u8 *)kasan_mem_to_shadow(info->first_bad_addr);
-
-	/*
-	 * If shadow byte value is in [0, KASAN_SHADOW_SCALE_SIZE) we can look
-	 * at the next shadow byte to determine the type of the bad access.
-	 */
-	if (*shadow_addr > 0 && *shadow_addr <= KASAN_SHADOW_SCALE_SIZE - 1)
-		shadow_addr++;
-
-	switch (*shadow_addr) {
-	case 0 ... KASAN_SHADOW_SCALE_SIZE - 1:
-		/*
-		 * In theory it's still possible to see these shadow values
-		 * due to a data race in the kernel code.
-		 */
-		bug_type = "out-of-bounds";
-		break;
-	case KASAN_PAGE_REDZONE:
-	case KASAN_KMALLOC_REDZONE:
-		bug_type = "slab-out-of-bounds";
-		break;
-	case KASAN_GLOBAL_REDZONE:
-		bug_type = "global-out-of-bounds";
-		break;
-	case KASAN_STACK_LEFT:
-	case KASAN_STACK_MID:
-	case KASAN_STACK_RIGHT:
-	case KASAN_STACK_PARTIAL:
-		bug_type = "stack-out-of-bounds";
-		break;
-	case KASAN_FREE_PAGE:
-	case KASAN_KMALLOC_FREE:
-		bug_type = "use-after-free";
-		break;
-	case KASAN_USE_AFTER_SCOPE:
-		bug_type = "use-after-scope";
-		break;
-	case KASAN_ALLOCA_LEFT:
-	case KASAN_ALLOCA_RIGHT:
-		bug_type = "alloca-out-of-bounds";
-		break;
-	}
-
-	return bug_type;
+	set_bit(KASAN_BIT_MULTI_SHOT, &kasan_flags);
+	return 1;
 }
-
-static const char *get_wild_bug_type(struct kasan_access_info *info)
-{
-	const char *bug_type = "unknown-crash";
-
-	if ((unsigned long)info->access_addr < PAGE_SIZE)
-		bug_type = "null-ptr-deref";
-	else if ((unsigned long)info->access_addr < TASK_SIZE)
-		bug_type = "user-memory-access";
-	else
-		bug_type = "wild-memory-access";
-
-	return bug_type;
-}
-
-static const char *get_bug_type(struct kasan_access_info *info)
-{
-	if (addr_has_shadow(info))
-		return get_shadow_bug_type(info);
-	return get_wild_bug_type(info);
-}
+__setup("kasan_multi_shot", kasan_set_multi_shot);
 
 static void print_error_description(struct kasan_access_info *info)
 {
-	const char *bug_type = get_bug_type(info);
-
 	pr_err("BUG: KASAN: %s in %pS\n",
-		bug_type, (void *)info->ip);
+		get_bug_type(info), (void *)info->ip);
 	pr_err("%s of size %zu at addr %px by task %s/%d\n",
 		info->is_write ? "Write" : "Read", info->access_size,
 		info->access_addr, current->comm, task_pid_nr(current));
 }
 
-static inline bool kernel_or_module_addr(const void *addr)
-{
-	if (addr >= (void *)_stext && addr < (void *)_end)
-		return true;
-	if (is_module_address((unsigned long)addr))
-		return true;
-	return false;
-}
-
-static inline bool init_task_stack_addr(const void *addr)
-{
-	return addr >= (void *)&init_thread_union.stack &&
-		(addr <= (void *)&init_thread_union.stack +
-			sizeof(init_thread_union.stack));
-}
-
 static DEFINE_SPINLOCK(report_lock);
 
-static void kasan_start_report(unsigned long *flags)
+static void start_report(unsigned long *flags)
 {
 	/*
 	 * Make sure we don't end up in loop.
@@ -171,7 +86,7 @@
 	pr_err("==================================================================\n");
 }
 
-static void kasan_end_report(unsigned long *flags)
+static void end_report(unsigned long *flags)
 {
 	pr_err("==================================================================\n");
 	add_taint(TAINT_BAD_PAGE, LOCKDEP_NOW_UNRELIABLE);
@@ -249,6 +164,22 @@
 	describe_object_addr(cache, object, addr);
 }
 
+static inline bool kernel_or_module_addr(const void *addr)
+{
+	if (addr >= (void *)_stext && addr < (void *)_end)
+		return true;
+	if (is_module_address((unsigned long)addr))
+		return true;
+	return false;
+}
+
+static inline bool init_task_stack_addr(const void *addr)
+{
+	return addr >= (void *)&init_thread_union.stack &&
+		(addr <= (void *)&init_thread_union.stack +
+			sizeof(init_thread_union.stack));
+}
+
 static void print_address_description(void *addr)
 {
 	struct page *page = addr_to_page(addr);
@@ -326,65 +257,7 @@
 	}
 }
 
-void kasan_report_invalid_free(void *object, unsigned long ip)
-{
-	unsigned long flags;
-
-	kasan_start_report(&flags);
-	pr_err("BUG: KASAN: double-free or invalid-free in %pS\n", (void *)ip);
-	pr_err("\n");
-	print_address_description(object);
-	pr_err("\n");
-	print_shadow_for_address(object);
-	kasan_end_report(&flags);
-}
-
-static void kasan_report_error(struct kasan_access_info *info)
-{
-	unsigned long flags;
-
-	kasan_start_report(&flags);
-
-	print_error_description(info);
-	pr_err("\n");
-
-	if (!addr_has_shadow(info)) {
-		dump_stack();
-	} else {
-		print_address_description((void *)info->access_addr);
-		pr_err("\n");
-		print_shadow_for_address(info->first_bad_addr);
-	}
-
-	kasan_end_report(&flags);
-}
-
-static unsigned long kasan_flags;
-
-#define KASAN_BIT_REPORTED	0
-#define KASAN_BIT_MULTI_SHOT	1
-
-bool kasan_save_enable_multi_shot(void)
-{
-	return test_and_set_bit(KASAN_BIT_MULTI_SHOT, &kasan_flags);
-}
-EXPORT_SYMBOL_GPL(kasan_save_enable_multi_shot);
-
-void kasan_restore_multi_shot(bool enabled)
-{
-	if (!enabled)
-		clear_bit(KASAN_BIT_MULTI_SHOT, &kasan_flags);
-}
-EXPORT_SYMBOL_GPL(kasan_restore_multi_shot);
-
-static int __init kasan_set_multi_shot(char *str)
-{
-	set_bit(KASAN_BIT_MULTI_SHOT, &kasan_flags);
-	return 1;
-}
-__setup("kasan_multi_shot", kasan_set_multi_shot);
-
-static inline bool kasan_report_enabled(void)
+static bool report_enabled(void)
 {
 	if (current->kasan_depth)
 		return false;
@@ -393,59 +266,59 @@
 	return !test_and_set_bit(KASAN_BIT_REPORTED, &kasan_flags);
 }
 
-void kasan_report(unsigned long addr, size_t size,
-		bool is_write, unsigned long ip)
+void kasan_report_invalid_free(void *object, unsigned long ip)
+{
+	unsigned long flags;
+
+	start_report(&flags);
+	pr_err("BUG: KASAN: double-free or invalid-free in %pS\n", (void *)ip);
+	print_tags(get_tag(object), reset_tag(object));
+	object = reset_tag(object);
+	pr_err("\n");
+	print_address_description(object);
+	pr_err("\n");
+	print_shadow_for_address(object);
+	end_report(&flags);
+}
+
+void __kasan_report(unsigned long addr, size_t size, bool is_write, unsigned long ip)
 {
 	struct kasan_access_info info;
+	void *tagged_addr;
+	void *untagged_addr;
+	unsigned long flags;
 
-	if (likely(!kasan_report_enabled()))
+	if (likely(!report_enabled()))
 		return;
 
 	disable_trace_on_warning();
 
-	info.access_addr = (void *)addr;
-	info.first_bad_addr = (void *)addr;
+	tagged_addr = (void *)addr;
+	untagged_addr = reset_tag(tagged_addr);
+
+	info.access_addr = tagged_addr;
+	if (addr_has_shadow(untagged_addr))
+		info.first_bad_addr = find_first_bad_addr(tagged_addr, size);
+	else
+		info.first_bad_addr = untagged_addr;
 	info.access_size = size;
 	info.is_write = is_write;
 	info.ip = ip;
 
-	kasan_report_error(&info);
+	start_report(&flags);
+
+	print_error_description(&info);
+	if (addr_has_shadow(untagged_addr))
+		print_tags(get_tag(tagged_addr), info.first_bad_addr);
+	pr_err("\n");
+
+	if (addr_has_shadow(untagged_addr)) {
+		print_address_description(untagged_addr);
+		pr_err("\n");
+		print_shadow_for_address(info.first_bad_addr);
+	} else {
+		dump_stack();
+	}
+
+	end_report(&flags);
 }
-
-
-#define DEFINE_ASAN_REPORT_LOAD(size)                     \
-void __asan_report_load##size##_noabort(unsigned long addr) \
-{                                                         \
-	kasan_report(addr, size, false, _RET_IP_);	  \
-}                                                         \
-EXPORT_SYMBOL(__asan_report_load##size##_noabort)
-
-#define DEFINE_ASAN_REPORT_STORE(size)                     \
-void __asan_report_store##size##_noabort(unsigned long addr) \
-{                                                          \
-	kasan_report(addr, size, true, _RET_IP_);	   \
-}                                                          \
-EXPORT_SYMBOL(__asan_report_store##size##_noabort)
-
-DEFINE_ASAN_REPORT_LOAD(1);
-DEFINE_ASAN_REPORT_LOAD(2);
-DEFINE_ASAN_REPORT_LOAD(4);
-DEFINE_ASAN_REPORT_LOAD(8);
-DEFINE_ASAN_REPORT_LOAD(16);
-DEFINE_ASAN_REPORT_STORE(1);
-DEFINE_ASAN_REPORT_STORE(2);
-DEFINE_ASAN_REPORT_STORE(4);
-DEFINE_ASAN_REPORT_STORE(8);
-DEFINE_ASAN_REPORT_STORE(16);
-
-void __asan_report_load_n_noabort(unsigned long addr, size_t size)
-{
-	kasan_report(addr, size, false, _RET_IP_);
-}
-EXPORT_SYMBOL(__asan_report_load_n_noabort);
-
-void __asan_report_store_n_noabort(unsigned long addr, size_t size)
-{
-	kasan_report(addr, size, true, _RET_IP_);
-}
-EXPORT_SYMBOL(__asan_report_store_n_noabort);
diff --git a/mm/kasan/tags.c b/mm/kasan/tags.c
new file mode 100644
index 0000000..63fca31
--- /dev/null
+++ b/mm/kasan/tags.c
@@ -0,0 +1,161 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * This file contains core tag-based KASAN code.
+ *
+ * Copyright (c) 2018 Google, Inc.
+ * Author: Andrey Konovalov <andreyknvl@google.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+#define DISABLE_BRANCH_PROFILING
+
+#include <linux/export.h>
+#include <linux/interrupt.h>
+#include <linux/init.h>
+#include <linux/kasan.h>
+#include <linux/kernel.h>
+#include <linux/kmemleak.h>
+#include <linux/linkage.h>
+#include <linux/memblock.h>
+#include <linux/memory.h>
+#include <linux/mm.h>
+#include <linux/module.h>
+#include <linux/printk.h>
+#include <linux/random.h>
+#include <linux/sched.h>
+#include <linux/sched/task_stack.h>
+#include <linux/slab.h>
+#include <linux/stacktrace.h>
+#include <linux/string.h>
+#include <linux/types.h>
+#include <linux/vmalloc.h>
+#include <linux/bug.h>
+
+#include "kasan.h"
+#include "../slab.h"
+
+static DEFINE_PER_CPU(u32, prng_state);
+
+void kasan_init_tags(void)
+{
+	int cpu;
+
+	for_each_possible_cpu(cpu)
+		per_cpu(prng_state, cpu) = (u32)get_cycles();
+}
+
+/*
+ * If a preemption happens between this_cpu_read and this_cpu_write, the only
+ * side effect is that we'll give a few allocated in different contexts objects
+ * the same tag. Since tag-based KASAN is meant to be used a probabilistic
+ * bug-detection debug feature, this doesn't have significant negative impact.
+ *
+ * Ideally the tags use strong randomness to prevent any attempts to predict
+ * them during explicit exploit attempts. But strong randomness is expensive,
+ * and we did an intentional trade-off to use a PRNG. This non-atomic RMW
+ * sequence has in fact positive effect, since interrupts that randomly skew
+ * PRNG at unpredictable points do only good.
+ */
+u8 random_tag(void)
+{
+	u32 state = this_cpu_read(prng_state);
+
+	state = 1664525 * state + 1013904223;
+	this_cpu_write(prng_state, state);
+
+	return (u8)(state % (KASAN_TAG_MAX + 1));
+}
+
+void *kasan_reset_tag(const void *addr)
+{
+	return reset_tag(addr);
+}
+
+void check_memory_region(unsigned long addr, size_t size, bool write,
+				unsigned long ret_ip)
+{
+	u8 tag;
+	u8 *shadow_first, *shadow_last, *shadow;
+	void *untagged_addr;
+
+	if (unlikely(size == 0))
+		return;
+
+	tag = get_tag((const void *)addr);
+
+	/*
+	 * Ignore accesses for pointers tagged with 0xff (native kernel
+	 * pointer tag) to suppress false positives caused by kmap.
+	 *
+	 * Some kernel code was written to account for archs that don't keep
+	 * high memory mapped all the time, but rather map and unmap particular
+	 * pages when needed. Instead of storing a pointer to the kernel memory,
+	 * this code saves the address of the page structure and offset within
+	 * that page for later use. Those pages are then mapped and unmapped
+	 * with kmap/kunmap when necessary and virt_to_page is used to get the
+	 * virtual address of the page. For arm64 (that keeps the high memory
+	 * mapped all the time), kmap is turned into a page_address call.
+
+	 * The issue is that with use of the page_address + virt_to_page
+	 * sequence the top byte value of the original pointer gets lost (gets
+	 * set to KASAN_TAG_KERNEL (0xFF)).
+	 */
+	if (tag == KASAN_TAG_KERNEL)
+		return;
+
+	untagged_addr = reset_tag((const void *)addr);
+	if (unlikely(untagged_addr <
+			kasan_shadow_to_mem((void *)KASAN_SHADOW_START))) {
+		kasan_report(addr, size, write, ret_ip);
+		return;
+	}
+	shadow_first = kasan_mem_to_shadow(untagged_addr);
+	shadow_last = kasan_mem_to_shadow(untagged_addr + size - 1);
+	for (shadow = shadow_first; shadow <= shadow_last; shadow++) {
+		if (*shadow != tag) {
+			kasan_report(addr, size, write, ret_ip);
+			return;
+		}
+	}
+}
+
+#define DEFINE_HWASAN_LOAD_STORE(size)					\
+	void __hwasan_load##size##_noabort(unsigned long addr)		\
+	{								\
+		check_memory_region(addr, size, false, _RET_IP_);	\
+	}								\
+	EXPORT_SYMBOL(__hwasan_load##size##_noabort);			\
+	void __hwasan_store##size##_noabort(unsigned long addr)		\
+	{								\
+		check_memory_region(addr, size, true, _RET_IP_);	\
+	}								\
+	EXPORT_SYMBOL(__hwasan_store##size##_noabort)
+
+DEFINE_HWASAN_LOAD_STORE(1);
+DEFINE_HWASAN_LOAD_STORE(2);
+DEFINE_HWASAN_LOAD_STORE(4);
+DEFINE_HWASAN_LOAD_STORE(8);
+DEFINE_HWASAN_LOAD_STORE(16);
+
+void __hwasan_loadN_noabort(unsigned long addr, unsigned long size)
+{
+	check_memory_region(addr, size, false, _RET_IP_);
+}
+EXPORT_SYMBOL(__hwasan_loadN_noabort);
+
+void __hwasan_storeN_noabort(unsigned long addr, unsigned long size)
+{
+	check_memory_region(addr, size, true, _RET_IP_);
+}
+EXPORT_SYMBOL(__hwasan_storeN_noabort);
+
+void __hwasan_tag_memory(unsigned long addr, u8 tag, unsigned long size)
+{
+	kasan_poison_shadow((void *)addr, size, tag);
+}
+EXPORT_SYMBOL(__hwasan_tag_memory);
diff --git a/mm/kasan/tags_report.c b/mm/kasan/tags_report.c
new file mode 100644
index 0000000..8eaf5f7
--- /dev/null
+++ b/mm/kasan/tags_report.c
@@ -0,0 +1,58 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * This file contains tag-based KASAN specific error reporting code.
+ *
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Author: Andrey Ryabinin <ryabinin.a.a@gmail.com>
+ *
+ * Some code borrowed from https://github.com/xairy/kasan-prototype by
+ *        Andrey Konovalov <andreyknvl@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+#include <linux/bitops.h>
+#include <linux/ftrace.h>
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/mm.h>
+#include <linux/printk.h>
+#include <linux/sched.h>
+#include <linux/slab.h>
+#include <linux/stackdepot.h>
+#include <linux/stacktrace.h>
+#include <linux/string.h>
+#include <linux/types.h>
+#include <linux/kasan.h>
+#include <linux/module.h>
+
+#include <asm/sections.h>
+
+#include "kasan.h"
+#include "../slab.h"
+
+const char *get_bug_type(struct kasan_access_info *info)
+{
+	return "invalid-access";
+}
+
+void *find_first_bad_addr(void *addr, size_t size)
+{
+	u8 tag = get_tag(addr);
+	void *p = reset_tag(addr);
+	void *end = p + size;
+
+	while (p < end && tag == *(u8 *)kasan_mem_to_shadow(p))
+		p += KASAN_SHADOW_SCALE_SIZE;
+	return p;
+}
+
+void print_tags(u8 addr_tag, const void *addr)
+{
+	u8 *shadow = (u8 *)kasan_mem_to_shadow(addr);
+
+	pr_err("Pointer tag: [%02x], memory tag: [%02x]\n", addr_tag, *shadow);
+}
diff --git a/mm/madvise.c b/mm/madvise.c
index 47311d1..31b2a86d 100644
--- a/mm/madvise.c
+++ b/mm/madvise.c
@@ -812,6 +812,8 @@
 	size_t len;
 	struct blk_plug plug;
 
+	start = untagged_addr(start);
+
 	if (!madvise_behavior_valid(behavior))
 		return error;
 
diff --git a/mm/memblock.c b/mm/memblock.c
index feedf19..78855d4 100644
--- a/mm/memblock.c
+++ b/mm/memblock.c
@@ -253,7 +253,8 @@
 	phys_addr_t kernel_end, ret;
 
 	/* pump up @end */
-	if (end == MEMBLOCK_ALLOC_ACCESSIBLE)
+	if (end == MEMBLOCK_ALLOC_ACCESSIBLE ||
+	    end == MEMBLOCK_ALLOC_KASAN)
 		end = memblock.current_limit;
 
 	/* avoid allocating the first page */
@@ -1410,13 +1411,15 @@
 done:
 	ptr = phys_to_virt(alloc);
 
-	/*
-	 * The min_count is set to 0 so that bootmem allocated blocks
-	 * are never reported as leaks. This is because many of these blocks
-	 * are only referred via the physical address which is not
-	 * looked up by kmemleak.
-	 */
-	kmemleak_alloc(ptr, size, 0, 0);
+	/* Skip kmemleak for kasan_init() due to high volume. */
+	if (max_addr != MEMBLOCK_ALLOC_KASAN)
+		/*
+		 * The min_count is set to 0 so that bootmem allocated
+		 * blocks are never reported as leaks. This is because many
+		 * of these blocks are only referred via the physical
+		 * address which is not looked up by kmemleak.
+		 */
+		kmemleak_alloc(ptr, size, 0, 0);
 
 	return ptr;
 }
diff --git a/mm/memory.c b/mm/memory.c
index 88e6f14..cb7f36f 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -70,6 +70,8 @@
 #include <linux/dax.h>
 #include <linux/oom.h>
 
+#include <trace/events/kmem.h>
+
 #include <asm/io.h>
 #include <asm/mmu_context.h>
 #include <asm/pgalloc.h>
@@ -141,6 +143,22 @@
 }
 core_initcall(init_zero_pfn);
 
+/*
+ * Only trace rss_stat when there is a 512kb cross over.
+ * Smaller changes may be lost unless every small change is
+ * crossing into or returning to a 512kb boundary.
+ */
+#define TRACE_MM_COUNTER_THRESHOLD 128
+
+void mm_trace_rss_stat(struct mm_struct *mm, int member, long count,
+		       long value)
+{
+	long thresh_mask = ~(TRACE_MM_COUNTER_THRESHOLD - 1);
+
+	/* Threshold roll-over, trace it */
+	if ((count & thresh_mask) != ((count - value) & thresh_mask))
+		trace_rss_stat(mm, member, count);
+}
 
 #if defined(SPLIT_RSS_COUNTING)
 
@@ -2556,6 +2574,10 @@
 
 	vmf->flags = FAULT_FLAG_WRITE|FAULT_FLAG_MKWRITE;
 
+	if (vmf->vma->vm_file &&
+	    IS_SWAPFILE(vmf->vma->vm_file->f_mapping->host))
+		return VM_FAULT_SIGBUS;
+
 	ret = vmf->vma->vm_ops->page_mkwrite(vmf);
 	/* Restore original flags so that caller is not surprised */
 	vmf->flags = old_flags;
@@ -3145,8 +3167,8 @@
 
 	if (!page) {
 		if (skip_swapcache) {
-			page = alloc_page_vma(GFP_HIGHUSER_MOVABLE, vma,
-							vmf->address);
+			page = alloc_page_vma(GFP_HIGHUSER_MOVABLE | __GFP_CMA,
+					      vma, vmf->address);
 			if (page) {
 				__SetPageLocked(page);
 				__SetPageSwapBacked(page);
diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
index ab8f46c7..eb04479 100644
--- a/mm/memory_hotplug.c
+++ b/mm/memory_hotplug.c
@@ -1120,10 +1120,8 @@
 {
 	struct zone *zone = &NODE_DATA(nid)->node_zones[ZONE_MOVABLE];
 	bool onlined_block = false;
-	int ret = lock_device_hotplug_sysfs();
 
-	if (ret)
-		return false;
+	lock_device_hotplug();
 
 	walk_memory_range(zone->zone_start_pfn, zone_end_pfn(zone),
 			  &onlined_block, online_memory_one_block);
diff --git a/mm/mempolicy.c b/mm/mempolicy.c
index 9a90d49..4fe31d8 100644
--- a/mm/mempolicy.c
+++ b/mm/mempolicy.c
@@ -1409,6 +1409,7 @@
 	int err;
 	unsigned short mode_flags;
 
+	start = untagged_addr(start);
 	mode_flags = mode & MPOL_MODE_FLAGS;
 	mode &= ~MPOL_MODE_FLAGS;
 	if (mode >= MPOL_MAX)
@@ -1566,6 +1567,8 @@
 	int uninitialized_var(pval);
 	nodemask_t nodes;
 
+	addr = untagged_addr(addr);
+
 	if (nmask != NULL && maxnode < nr_node_ids)
 		return -EINVAL;
 
diff --git a/mm/migrate.c b/mm/migrate.c
index fddfaf0..57de458 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
@@ -1610,7 +1610,7 @@
 			goto out_flush;
 		if (get_user(node, nodes + i))
 			goto out_flush;
-		addr = (unsigned long)p;
+		addr = (unsigned long)untagged_addr(p);
 
 		err = -ENODEV;
 		if (node < 0 || node >= MAX_NUMNODES)
diff --git a/mm/mincore.c b/mm/mincore.c
index 2732c8c..7eb1491 100644
--- a/mm/mincore.c
+++ b/mm/mincore.c
@@ -249,6 +249,8 @@
 	unsigned long pages;
 	unsigned char *tmp;
 
+	start = untagged_addr(start);
+
 	/* Check the start address: needs to be page-aligned.. */
 	if (start & ~PAGE_MASK)
 		return -EINVAL;
diff --git a/mm/mlock.c b/mm/mlock.c
index 6027b44..622c845 100644
--- a/mm/mlock.c
+++ b/mm/mlock.c
@@ -677,6 +677,8 @@
 	unsigned long lock_limit;
 	int error = -ENOMEM;
 
+	start = untagged_addr(start);
+
 	if (!can_do_mlock())
 		return -EPERM;
 
@@ -738,6 +740,8 @@
 {
 	int ret;
 
+	start = untagged_addr(start);
+
 	len = PAGE_ALIGN(len + (offset_in_page(start)));
 	start &= PAGE_MASK;
 
diff --git a/mm/mmap.c b/mm/mmap.c
index 10b5f6e..c111771 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -211,6 +211,8 @@
 	bool populate;
 	LIST_HEAD(uf);
 
+	brk = untagged_addr(brk);
+
 	if (down_write_killable(&mm->mmap_sem))
 		return -EINTR;
 
@@ -1537,8 +1539,12 @@
 		case MAP_SHARED_VALIDATE:
 			if (flags & ~flags_mask)
 				return -EOPNOTSUPP;
-			if ((prot&PROT_WRITE) && !(file->f_mode&FMODE_WRITE))
-				return -EACCES;
+			if (prot & PROT_WRITE) {
+				if (!(file->f_mode & FMODE_WRITE))
+					return -EACCES;
+				if (IS_SWAPFILE(file->f_mapping->host))
+					return -ETXTBSY;
+			}
 
 			/*
 			 * Make sure we don't allow writing to an append-only
@@ -1627,6 +1633,8 @@
 	struct file *file = NULL;
 	unsigned long retval;
 
+	addr = untagged_addr(addr);
+
 	if (!(flags & MAP_ANONYMOUS)) {
 		audit_mmap_fd(fd, flags);
 		file = fget(fd);
@@ -2916,6 +2924,7 @@
 
 SYSCALL_DEFINE2(munmap, unsigned long, addr, size_t, len)
 {
+	addr = untagged_addr(addr);
 	profile_munmap(addr);
 	return vm_munmap(addr, len);
 }
diff --git a/mm/mprotect.c b/mm/mprotect.c
index d2b857d..d65edeb 100644
--- a/mm/mprotect.c
+++ b/mm/mprotect.c
@@ -465,6 +465,8 @@
 	const bool rier = (current->personality & READ_IMPLIES_EXEC) &&
 				(prot & PROT_READ);
 
+	start = untagged_addr(start);
+
 	prot &= ~(PROT_GROWSDOWN|PROT_GROWSUP);
 	if (grows == (PROT_GROWSDOWN|PROT_GROWSUP)) /* can't be both */
 		return -EINVAL;
diff --git a/mm/mremap.c b/mm/mremap.c
index e0d9ea6..65ddb8c 100644
--- a/mm/mremap.c
+++ b/mm/mremap.c
@@ -538,6 +538,9 @@
 	LIST_HEAD(uf_unmap_early);
 	LIST_HEAD(uf_unmap);
 
+	addr = untagged_addr(addr);
+	new_addr = untagged_addr(new_addr);
+
 	if (flags & ~(MREMAP_FIXED | MREMAP_MAYMOVE))
 		return ret;
 
diff --git a/mm/msync.c b/mm/msync.c
index ef30a42..c3bd3e7 100644
--- a/mm/msync.c
+++ b/mm/msync.c
@@ -37,6 +37,8 @@
 	int unmapped_error = 0;
 	int error = -EINVAL;
 
+	start = untagged_addr(start);
+
 	if (flags & ~(MS_ASYNC | MS_INVALIDATE | MS_SYNC))
 		goto out;
 	if (offset_in_page(start))
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 9357559..0efc1c5 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -132,6 +132,55 @@
 
 int percpu_pagelist_fraction;
 gfp_t gfp_allowed_mask __read_mostly = GFP_BOOT_MASK;
+#ifdef CONFIG_INIT_ON_ALLOC_DEFAULT_ON
+DEFINE_STATIC_KEY_TRUE(init_on_alloc);
+#else
+DEFINE_STATIC_KEY_FALSE(init_on_alloc);
+#endif
+EXPORT_SYMBOL(init_on_alloc);
+
+#ifdef CONFIG_INIT_ON_FREE_DEFAULT_ON
+DEFINE_STATIC_KEY_TRUE(init_on_free);
+#else
+DEFINE_STATIC_KEY_FALSE(init_on_free);
+#endif
+EXPORT_SYMBOL(init_on_free);
+
+static int __init early_init_on_alloc(char *buf)
+{
+	int ret;
+	bool bool_result;
+
+	if (!buf)
+		return -EINVAL;
+	ret = kstrtobool(buf, &bool_result);
+	if (bool_result && page_poisoning_enabled())
+		pr_info("mem auto-init: CONFIG_PAGE_POISONING is on, will take precedence over init_on_alloc\n");
+	if (bool_result)
+		static_branch_enable(&init_on_alloc);
+	else
+		static_branch_disable(&init_on_alloc);
+	return ret;
+}
+early_param("init_on_alloc", early_init_on_alloc);
+
+static int __init early_init_on_free(char *buf)
+{
+	int ret;
+	bool bool_result;
+
+	if (!buf)
+		return -EINVAL;
+	ret = kstrtobool(buf, &bool_result);
+	if (bool_result && page_poisoning_enabled())
+		pr_info("mem auto-init: CONFIG_PAGE_POISONING is on, will take precedence over init_on_free\n");
+	if (bool_result)
+		static_branch_enable(&init_on_free);
+	else
+		static_branch_disable(&init_on_free);
+	return ret;
+}
+early_param("init_on_free", early_init_on_free);
 
 /*
  * A cached value of the page's pageblock's migratetype, used when the page is
@@ -1090,6 +1139,14 @@
 	return ret;
 }
 
+static void kernel_init_free_pages(struct page *page, int numpages)
+{
+	int i;
+
+	for (i = 0; i < numpages; i++)
+		clear_highpage(page + i);
+}
+
 static __always_inline bool free_pages_prepare(struct page *page,
 					unsigned int order, bool check_free)
 {
@@ -1141,6 +1198,9 @@
 					   PAGE_SIZE << order);
 	}
 	arch_free_page(page, order);
+	if (want_init_on_free())
+		kernel_init_free_pages(page, 1 << order);
+
 	kernel_poison_pages(page, 1 << order, 0);
 	kernel_map_pages(page, 1 << order, 0);
 	kasan_free_nondeferred_pages(page, order);
@@ -1289,6 +1349,7 @@
 	init_page_count(page);
 	page_mapcount_reset(page);
 	page_cpupid_reset_last(page);
+	page_kasan_tag_reset(page);
 
 	INIT_LIST_HEAD(&page->lru);
 #ifdef WANT_PAGE_VIRTUAL
@@ -1969,8 +2030,8 @@
 
 static inline bool free_pages_prezeroed(void)
 {
-	return IS_ENABLED(CONFIG_PAGE_POISONING_ZERO) &&
-		page_poisoning_enabled();
+	return (IS_ENABLED(CONFIG_PAGE_POISONING_ZERO) &&
+		page_poisoning_enabled()) || want_init_on_free();
 }
 
 #ifdef CONFIG_DEBUG_VM
@@ -2023,13 +2084,10 @@
 static void prep_new_page(struct page *page, unsigned int order, gfp_t gfp_flags,
 							unsigned int alloc_flags)
 {
-	int i;
-
 	post_alloc_hook(page, order, gfp_flags);
 
-	if (!free_pages_prezeroed() && (gfp_flags & __GFP_ZERO))
-		for (i = 0; i < (1 << order); i++)
-			clear_highpage(page + i);
+	if (!free_pages_prezeroed() && want_init_on_alloc(gfp_flags))
+		kernel_init_free_pages(page, 1 << order);
 
 	if (order && (gfp_flags & __GFP_COMP))
 		prep_compound_page(page, order);
@@ -4588,7 +4646,8 @@
 	if (current->flags & PF_MEMALLOC)
 		goto nopage;
 
-	if (fatal_signal_pending(current) && !(gfp_mask & __GFP_NOFAIL))
+	if (fatal_signal_pending(current) && !(gfp_mask & __GFP_NOFAIL) &&
+			(gfp_mask & __GFP_FS))
 		goto nopage;
 
 	/* Try direct reclaim and then allocating */
@@ -5121,6 +5180,7 @@
 	unsigned long pagecache;
 	unsigned long wmark_low = 0;
 	unsigned long pages[NR_LRU_LISTS];
+	unsigned long reclaimable;
 	struct zone *zone;
 	int lru;
 
@@ -5146,19 +5206,13 @@
 	available += pagecache;
 
 	/*
-	 * Part of the reclaimable slab consists of items that are in use,
-	 * and cannot be freed. Cap this estimate at the low watermark.
+	 * Part of the reclaimable slab and other kernel memory consists of
+	 * items that are in use, and cannot be freed. Cap this estimate at the
+	 * low watermark.
 	 */
-	available += global_node_page_state(NR_SLAB_RECLAIMABLE) -
-		     min(global_node_page_state(NR_SLAB_RECLAIMABLE) / 2,
-			 wmark_low);
-
-	/*
-	 * Part of the kernel memory, which can be released under memory
-	 * pressure.
-	 */
-	available += global_node_page_state(NR_INDIRECTLY_RECLAIMABLE_BYTES) >>
-		PAGE_SHIFT;
+	reclaimable = global_node_page_state(NR_SLAB_RECLAIMABLE) +
+			global_node_page_state(NR_KERNEL_MISC_RECLAIMABLE);
+	available += reclaimable - min(reclaimable / 2, wmark_low);
 
 	if (available < 0)
 		available = 0;
@@ -5387,6 +5441,9 @@
 			" managed:%lukB"
 			" mlocked:%lukB"
 			" kernel_stack:%lukB"
+#ifdef CONFIG_SHADOW_CALL_STACK
+			" shadow_call_stack:%lukB"
+#endif
 			" pagetables:%lukB"
 			" bounce:%lukB"
 			" free_pcp:%lukB"
@@ -5408,6 +5465,9 @@
 			K(zone->managed_pages),
 			K(zone_page_state(zone, NR_MLOCK)),
 			zone_page_state(zone, NR_KERNEL_STACK_KB),
+#ifdef CONFIG_SHADOW_CALL_STACK
+			zone_page_state(zone, NR_KERNEL_SCS_BYTES) / 1024,
+#endif
 			K(zone_page_state(zone, NR_PAGETABLE)),
 			K(zone_page_state(zone, NR_BOUNCE)),
 			K(free_pcp),
diff --git a/mm/page_poison.c b/mm/page_poison.c
index 54a765b..9bec1f7 100644
--- a/mm/page_poison.c
+++ b/mm/page_poison.c
@@ -19,6 +19,11 @@
 }
 early_param("page_poison", early_page_poison_param);
 
+/**
+ * page_poisoning_enabled - check if page poisoning is enabled
+ *
+ * Return true if page poisoning is enabled, or false if not.
+ */
 bool page_poisoning_enabled(void)
 {
 	/*
@@ -31,6 +36,7 @@
 		(!IS_ENABLED(CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC) &&
 		debug_pagealloc_enabled()));
 }
+EXPORT_SYMBOL_GPL(page_poisoning_enabled);
 
 static void poison_page(struct page *page)
 {
diff --git a/mm/readahead.c b/mm/readahead.c
index 4b47bef..4e63014 100644
--- a/mm/readahead.c
+++ b/mm/readahead.c
@@ -83,7 +83,7 @@
  * Hides the details of the LRU cache etc from the filesystems.
  */
 int read_cache_pages(struct address_space *mapping, struct list_head *pages,
-			int (*filler)(struct file *, struct page *), void *data)
+			int (*filler)(void *, struct page *), void *data)
 {
 	struct page *page;
 	int ret = 0;
diff --git a/mm/slab.c b/mm/slab.c
index 46f21e7..fa53bb0 100644
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -406,19 +406,6 @@
 	return page->s_mem + cache->size * idx;
 }
 
-/*
- * We want to avoid an expensive divide : (offset / cache->size)
- *   Using the fact that size is a constant for a particular cache,
- *   we can replace (offset / cache->size) by
- *   reciprocal_divide(offset, cache->reciprocal_buffer_size)
- */
-static inline unsigned int obj_to_index(const struct kmem_cache *cache,
-					const struct page *page, void *obj)
-{
-	u32 offset = (obj - page->s_mem);
-	return reciprocal_divide(offset, cache->reciprocal_buffer_size);
-}
-
 #define BOOT_CPUCACHE_ENTRIES	1
 /* internal cache of cache description objs */
 static struct kmem_cache kmem_cache_boot = {
@@ -1291,7 +1278,7 @@
 	 * Initialize the caches that provide memory for the  kmem_cache_node
 	 * structures first.  Without this, further allocations will bug.
 	 */
-	kmalloc_caches[INDEX_NODE] = create_kmalloc_cache(
+	kmalloc_caches[KMALLOC_NORMAL][INDEX_NODE] = create_kmalloc_cache(
 				kmalloc_info[INDEX_NODE].name,
 				kmalloc_size(INDEX_NODE), ARCH_KMALLOC_FLAGS,
 				0, kmalloc_size(INDEX_NODE));
@@ -1307,7 +1294,7 @@
 		for_each_online_node(nid) {
 			init_list(kmem_cache, &init_kmem_cache_node[CACHE_CACHE + nid], nid);
 
-			init_list(kmalloc_caches[INDEX_NODE],
+			init_list(kmalloc_caches[KMALLOC_NORMAL][INDEX_NODE],
 					  &init_kmem_cache_node[SIZE_NODE + nid], nid);
 		}
 	}
@@ -1903,6 +1890,14 @@
 
 	cachep->num = 0;
 
+	/*
+	 * If slab auto-initialization on free is enabled, store the freelist
+	 * off-slab, so that its contents don't end up in one of the allocated
+	 * objects.
+	 */
+	if (unlikely(slab_want_init_on_free(cachep)))
+		return false;
+
 	if (cachep->ctor || flags & SLAB_TYPESAFE_BY_RCU)
 		return false;
 
@@ -2384,6 +2379,7 @@
 		/* Slab management obj is off-slab. */
 		freelist = kmem_cache_alloc_node(cachep->freelist_cache,
 					      local_flags, nodeid);
+		freelist = kasan_reset_tag(freelist);
 		if (!freelist)
 			return NULL;
 	} else {
@@ -2579,7 +2575,7 @@
 
 	for (i = 0; i < cachep->num; i++) {
 		objp = index_to_obj(cachep, page, i);
-		kasan_init_slab_obj(cachep, objp);
+		objp = kasan_init_slab_obj(cachep, objp);
 
 		/* constructor could break poison info */
 		if (DEBUG == 0 && cachep->ctor) {
@@ -2697,6 +2693,13 @@
 
 	offset *= cachep->colour_off;
 
+	/*
+	 * Call kasan_poison_slab() before calling alloc_slabmgmt(), so
+	 * page_address() in the latter returns a non-tagged pointer,
+	 * as it should be for slab pages.
+	 */
+	kasan_poison_slab(page);
+
 	/* Get slab management. */
 	freelist = alloc_slabmgmt(cachep, page, offset,
 			local_flags & ~GFP_CONSTRAINT_MASK, page_node);
@@ -2705,7 +2708,6 @@
 
 	slab_map_pages(cachep, page, freelist);
 
-	kasan_poison_slab(page);
 	cache_init_objs(cachep, page);
 
 	if (gfpflags_allow_blocking(local_flags))
@@ -3334,7 +3336,7 @@
 	local_irq_restore(save_flags);
 	ptr = cache_alloc_debugcheck_after(cachep, flags, ptr, caller);
 
-	if (unlikely(flags & __GFP_ZERO) && ptr)
+	if (unlikely(slab_want_init_on_alloc(flags, cachep)) && ptr)
 		memset(ptr, 0, cachep->object_size);
 
 	slab_post_alloc_hook(cachep, flags, 1, &ptr);
@@ -3391,7 +3393,7 @@
 	objp = cache_alloc_debugcheck_after(cachep, flags, objp, caller);
 	prefetchw(objp);
 
-	if (unlikely(flags & __GFP_ZERO) && objp)
+	if (unlikely(slab_want_init_on_alloc(flags, cachep)) && objp)
 		memset(objp, 0, cachep->object_size);
 
 	slab_post_alloc_hook(cachep, flags, 1, &objp);
@@ -3512,6 +3514,8 @@
 	struct array_cache *ac = cpu_cache_get(cachep);
 
 	check_irq_off();
+	if (unlikely(slab_want_init_on_free(cachep)))
+		memset(objp, 0, cachep->object_size);
 	kmemleak_free_recursive(objp, cachep->flags);
 	objp = cache_free_debugcheck(cachep, objp, caller);
 
@@ -3556,7 +3560,6 @@
 {
 	void *ret = slab_alloc(cachep, flags, _RET_IP_);
 
-	kasan_slab_alloc(cachep, ret, flags);
 	trace_kmem_cache_alloc(_RET_IP_, ret,
 			       cachep->object_size, cachep->size, flags);
 
@@ -3598,7 +3601,7 @@
 	cache_alloc_debugcheck_after_bulk(s, flags, size, p, _RET_IP_);
 
 	/* Clear memory outside IRQ disabled section */
-	if (unlikely(flags & __GFP_ZERO))
+	if (unlikely(slab_want_init_on_alloc(flags, s)))
 		for (i = 0; i < size; i++)
 			memset(p[i], 0, s->object_size);
 
@@ -3622,7 +3625,7 @@
 
 	ret = slab_alloc(cachep, flags, _RET_IP_);
 
-	kasan_kmalloc(cachep, ret, size, flags);
+	ret = kasan_kmalloc(cachep, ret, size, flags);
 	trace_kmalloc(_RET_IP_, ret,
 		      size, cachep->size, flags);
 	return ret;
@@ -3646,7 +3649,6 @@
 {
 	void *ret = slab_alloc_node(cachep, flags, nodeid, _RET_IP_);
 
-	kasan_slab_alloc(cachep, ret, flags);
 	trace_kmem_cache_alloc_node(_RET_IP_, ret,
 				    cachep->object_size, cachep->size,
 				    flags, nodeid);
@@ -3665,7 +3667,7 @@
 
 	ret = slab_alloc_node(cachep, flags, nodeid, _RET_IP_);
 
-	kasan_kmalloc(cachep, ret, size, flags);
+	ret = kasan_kmalloc(cachep, ret, size, flags);
 	trace_kmalloc_node(_RET_IP_, ret,
 			   size, cachep->size,
 			   flags, nodeid);
@@ -3686,7 +3688,7 @@
 	if (unlikely(ZERO_OR_NULL_PTR(cachep)))
 		return cachep;
 	ret = kmem_cache_alloc_node_trace(cachep, flags, node, size);
-	kasan_kmalloc(cachep, ret, size, flags);
+	ret = kasan_kmalloc(cachep, ret, size, flags);
 
 	return ret;
 }
@@ -3724,7 +3726,7 @@
 		return cachep;
 	ret = slab_alloc(cachep, flags, caller);
 
-	kasan_kmalloc(cachep, ret, size, flags);
+	ret = kasan_kmalloc(cachep, ret, size, flags);
 	trace_kmalloc(caller, ret,
 		      size, cachep->size, flags);
 
@@ -4429,6 +4431,8 @@
 	unsigned int objnr;
 	unsigned long offset;
 
+	ptr = kasan_reset_tag(ptr);
+
 	/* Find and validate object. */
 	cachep = page->slab_cache;
 	objnr = obj_to_index(cachep, page, (void *)ptr);
diff --git a/mm/slab.h b/mm/slab.h
index 9632772..803b124 100644
--- a/mm/slab.h
+++ b/mm/slab.h
@@ -438,11 +438,9 @@
 
 	flags &= gfp_allowed_mask;
 	for (i = 0; i < size; i++) {
-		void *object = p[i];
-
-		kmemleak_alloc_recursive(object, s->object_size, 1,
+		p[i] = kasan_slab_alloc(s, p[i], flags);
+		kmemleak_alloc_recursive(p[i], s->object_size, 1,
 					 s->flags, flags);
-		kasan_slab_alloc(s, object, flags);
 	}
 
 	if (memcg_kmem_enabled())
@@ -529,4 +527,24 @@
 static inline void cache_random_seq_destroy(struct kmem_cache *cachep) { }
 #endif /* CONFIG_SLAB_FREELIST_RANDOM */
 
+static inline bool slab_want_init_on_alloc(gfp_t flags, struct kmem_cache *c)
+{
+	if (static_branch_unlikely(&init_on_alloc)) {
+		if (c->ctor)
+			return false;
+		if (c->flags & (SLAB_TYPESAFE_BY_RCU | SLAB_POISON))
+			return flags & __GFP_ZERO;
+		return true;
+	}
+	return flags & __GFP_ZERO;
+}
+
+static inline bool slab_want_init_on_free(struct kmem_cache *c)
+{
+	if (static_branch_unlikely(&init_on_free))
+		return !(c->ctor ||
+			 (c->flags & (SLAB_TYPESAFE_BY_RCU | SLAB_POISON)));
+	return false;
+}
+
 #endif /* MM_SLAB_H */
diff --git a/mm/slab_common.c b/mm/slab_common.c
index 4d3c2e7..c6dbda5 100644
--- a/mm/slab_common.c
+++ b/mm/slab_common.c
@@ -973,14 +973,10 @@
 	return s;
 }
 
-struct kmem_cache *kmalloc_caches[KMALLOC_SHIFT_HIGH + 1] __ro_after_init;
+struct kmem_cache *
+kmalloc_caches[NR_KMALLOC_TYPES][KMALLOC_SHIFT_HIGH + 1] __ro_after_init;
 EXPORT_SYMBOL(kmalloc_caches);
 
-#ifdef CONFIG_ZONE_DMA
-struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1] __ro_after_init;
-EXPORT_SYMBOL(kmalloc_dma_caches);
-#endif
-
 /*
  * Conversion table for small slabs sizes / 8 to the index in the
  * kmalloc array. This is necessary for slabs < 192 since we have non power
@@ -1040,12 +1036,7 @@
 		index = fls(size - 1);
 	}
 
-#ifdef CONFIG_ZONE_DMA
-	if (unlikely((flags & GFP_DMA)))
-		return kmalloc_dma_caches[index];
-
-#endif
-	return kmalloc_caches[index];
+	return kmalloc_caches[kmalloc_type(flags)][index];
 }
 
 /*
@@ -1059,15 +1050,15 @@
 	{"kmalloc-16",             16},		{"kmalloc-32",             32},
 	{"kmalloc-64",             64},		{"kmalloc-128",           128},
 	{"kmalloc-256",           256},		{"kmalloc-512",           512},
-	{"kmalloc-1024",         1024},		{"kmalloc-2048",         2048},
-	{"kmalloc-4096",         4096},		{"kmalloc-8192",         8192},
-	{"kmalloc-16384",       16384},		{"kmalloc-32768",       32768},
-	{"kmalloc-65536",       65536},		{"kmalloc-131072",     131072},
-	{"kmalloc-262144",     262144},		{"kmalloc-524288",     524288},
-	{"kmalloc-1048576",   1048576},		{"kmalloc-2097152",   2097152},
-	{"kmalloc-4194304",   4194304},		{"kmalloc-8388608",   8388608},
-	{"kmalloc-16777216", 16777216},		{"kmalloc-33554432", 33554432},
-	{"kmalloc-67108864", 67108864}
+	{"kmalloc-1k",           1024},		{"kmalloc-2k",           2048},
+	{"kmalloc-4k",           4096},		{"kmalloc-8k",           8192},
+	{"kmalloc-16k",         16384},		{"kmalloc-32k",         32768},
+	{"kmalloc-64k",         65536},		{"kmalloc-128k",       131072},
+	{"kmalloc-256k",       262144},		{"kmalloc-512k",       524288},
+	{"kmalloc-1M",        1048576},		{"kmalloc-2M",        2097152},
+	{"kmalloc-4M",        4194304},		{"kmalloc-8M",        8388608},
+	{"kmalloc-16M",      16777216},		{"kmalloc-32M",      33554432},
+	{"kmalloc-64M",      67108864}
 };
 
 /*
@@ -1117,9 +1108,36 @@
 	}
 }
 
-static void __init new_kmalloc_cache(int idx, slab_flags_t flags)
+static const char *
+kmalloc_cache_name(const char *prefix, unsigned int size)
 {
-	kmalloc_caches[idx] = create_kmalloc_cache(kmalloc_info[idx].name,
+
+	static const char units[3] = "\0kM";
+	int idx = 0;
+
+	while (size >= 1024 && (size % 1024 == 0)) {
+		size /= 1024;
+		idx++;
+	}
+
+	return kasprintf(GFP_NOWAIT, "%s-%u%c", prefix, size, units[idx]);
+}
+
+static void __init
+new_kmalloc_cache(int idx, int type, slab_flags_t flags)
+{
+	const char *name;
+
+	if (type == KMALLOC_RECLAIM) {
+		flags |= SLAB_RECLAIM_ACCOUNT;
+		name = kmalloc_cache_name("kmalloc-rcl",
+						kmalloc_info[idx].size);
+		BUG_ON(!name);
+	} else {
+		name = kmalloc_info[idx].name;
+	}
+
+	kmalloc_caches[type][idx] = create_kmalloc_cache(name,
 					kmalloc_info[idx].size, flags, 0,
 					kmalloc_info[idx].size);
 }
@@ -1131,21 +1149,25 @@
  */
 void __init create_kmalloc_caches(slab_flags_t flags)
 {
-	int i;
+	int i, type;
 
-	for (i = KMALLOC_SHIFT_LOW; i <= KMALLOC_SHIFT_HIGH; i++) {
-		if (!kmalloc_caches[i])
-			new_kmalloc_cache(i, flags);
+	for (type = KMALLOC_NORMAL; type <= KMALLOC_RECLAIM; type++) {
+		for (i = KMALLOC_SHIFT_LOW; i <= KMALLOC_SHIFT_HIGH; i++) {
+			if (!kmalloc_caches[type][i])
+				new_kmalloc_cache(i, type, flags);
 
-		/*
-		 * Caches that are not of the two-to-the-power-of size.
-		 * These have to be created immediately after the
-		 * earlier power of two caches
-		 */
-		if (KMALLOC_MIN_SIZE <= 32 && !kmalloc_caches[1] && i == 6)
-			new_kmalloc_cache(1, flags);
-		if (KMALLOC_MIN_SIZE <= 64 && !kmalloc_caches[2] && i == 7)
-			new_kmalloc_cache(2, flags);
+			/*
+			 * Caches that are not of the two-to-the-power-of size.
+			 * These have to be created immediately after the
+			 * earlier power of two caches
+			 */
+			if (KMALLOC_MIN_SIZE <= 32 && i == 6 &&
+					!kmalloc_caches[type][1])
+				new_kmalloc_cache(1, type, flags);
+			if (KMALLOC_MIN_SIZE <= 64 && i == 7 &&
+					!kmalloc_caches[type][2])
+				new_kmalloc_cache(2, type, flags);
+		}
 	}
 
 	/* Kmalloc array is now usable */
@@ -1153,16 +1175,15 @@
 
 #ifdef CONFIG_ZONE_DMA
 	for (i = 0; i <= KMALLOC_SHIFT_HIGH; i++) {
-		struct kmem_cache *s = kmalloc_caches[i];
+		struct kmem_cache *s = kmalloc_caches[KMALLOC_NORMAL][i];
 
 		if (s) {
 			unsigned int size = kmalloc_size(i);
-			char *n = kasprintf(GFP_NOWAIT,
-				 "dma-kmalloc-%u", size);
+			const char *n = kmalloc_cache_name("dma-kmalloc", size);
 
 			BUG_ON(!n);
-			kmalloc_dma_caches[i] = create_kmalloc_cache(n,
-				size, SLAB_CACHE_DMA | flags, 0, 0);
+			kmalloc_caches[KMALLOC_DMA][i] = create_kmalloc_cache(
+				n, size, SLAB_CACHE_DMA | flags, 0, 0);
 		}
 	}
 #endif
@@ -1182,8 +1203,8 @@
 	flags |= __GFP_COMP;
 	page = alloc_pages(flags, order);
 	ret = page ? page_address(page) : NULL;
+	ret = kasan_kmalloc_large(ret, size, flags);
 	kmemleak_alloc(ret, size, 1, flags);
-	kasan_kmalloc_large(ret, size, flags);
 	return ret;
 }
 EXPORT_SYMBOL(kmalloc_order);
@@ -1461,7 +1482,7 @@
 		ks = ksize(p);
 
 	if (ks >= new_size) {
-		kasan_krealloc((void *)p, new_size, flags);
+		p = kasan_krealloc((void *)p, new_size, flags);
 		return (void *)p;
 	}
 
@@ -1513,7 +1534,7 @@
 	}
 
 	ret = __do_krealloc(p, new_size, flags);
-	if (ret && p != ret)
+	if (ret && kasan_reset_tag(p) != kasan_reset_tag(ret))
 		kfree(p);
 
 	return ret;
diff --git a/mm/slub.c b/mm/slub.c
index d5f745f..3285989 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -249,7 +249,18 @@
 				 unsigned long ptr_addr)
 {
 #ifdef CONFIG_SLAB_FREELIST_HARDENED
-	return (void *)((unsigned long)ptr ^ s->random ^ ptr_addr);
+	/*
+	 * When CONFIG_KASAN_SW_TAGS is enabled, ptr_addr might be tagged.
+	 * Normally, this doesn't cause any issues, as both set_freepointer()
+	 * and get_freepointer() are called with a pointer with the same tag.
+	 * However, there are some issues with CONFIG_SLUB_DEBUG code. For
+	 * example, when __free_slub() iterates over objects in a cache, it
+	 * passes untagged pointers to check_object(). check_object() in turns
+	 * calls get_freepointer() with an untagged pointer, which causes the
+	 * freepointer to be restored incorrectly.
+	 */
+	return (void *)((unsigned long)ptr ^ s->random ^
+			(unsigned long)kasan_reset_tag((void *)ptr_addr));
 #else
 	return ptr;
 #endif
@@ -303,15 +314,10 @@
 		__p < (__addr) + (__objects) * (__s)->size; \
 		__p += (__s)->size)
 
-#define for_each_object_idx(__p, __idx, __s, __addr, __objects) \
-	for (__p = fixup_red_left(__s, __addr), __idx = 1; \
-		__idx <= __objects; \
-		__p += (__s)->size, __idx++)
-
 /* Determine object index from a given position */
 static inline unsigned int slab_index(void *p, struct kmem_cache *s, void *addr)
 {
-	return (p - addr) / s->size;
+	return (kasan_reset_tag(p) - addr) / s->size;
 }
 
 static inline unsigned int order_objects(unsigned int order, unsigned int size)
@@ -507,6 +513,7 @@
 		return 1;
 
 	base = page_address(page);
+	object = kasan_reset_tag(object);
 	object = restore_red_left(s, object);
 	if (object < base || object >= base + page->objects * s->size ||
 		(object - base) % s->size) {
@@ -1087,6 +1094,16 @@
 	init_tracking(s, object);
 }
 
+static void setup_page_debug(struct kmem_cache *s, void *addr, int order)
+{
+	if (!(s->flags & SLAB_POISON))
+		return;
+
+	metadata_access_enable();
+	memset(addr, POISON_INUSE, PAGE_SIZE << order);
+	metadata_access_disable();
+}
+
 static inline int alloc_consistency_checks(struct kmem_cache *s,
 					struct page *page,
 					void *object, unsigned long addr)
@@ -1283,6 +1300,10 @@
 	if (*str == ',')
 		slub_debug_slabs = str + 1;
 out:
+	if ((static_branch_unlikely(&init_on_alloc) ||
+	     static_branch_unlikely(&init_on_free)) &&
+	    (slub_debug & SLAB_POISON))
+		pr_info("mem auto-init: SLAB_POISON will take precedence over init_on_alloc/init_on_free\n");
 	return 1;
 }
 
@@ -1304,6 +1325,8 @@
 #else /* !CONFIG_SLUB_DEBUG */
 static inline void setup_object_debug(struct kmem_cache *s,
 			struct page *page, void *object) {}
+static inline void setup_page_debug(struct kmem_cache *s,
+			void *addr, int order) {}
 
 static inline int alloc_debug_processing(struct kmem_cache *s,
 	struct page *page, void *object, unsigned long addr) { return 0; }
@@ -1346,10 +1369,11 @@
  * Hooks for other subsystems that check memory allocations. In a typical
  * production configuration these hooks all should produce no code at all.
  */
-static inline void kmalloc_large_node_hook(void *ptr, size_t size, gfp_t flags)
+static inline void *kmalloc_large_node_hook(void *ptr, size_t size, gfp_t flags)
 {
+	ptr = kasan_kmalloc_large(ptr, size, flags);
 	kmemleak_alloc(ptr, size, 1, flags);
-	kasan_kmalloc_large(ptr, size, flags);
+	return ptr;
 }
 
 static __always_inline void kfree_hook(void *x)
@@ -1386,18 +1410,11 @@
 static inline bool slab_free_freelist_hook(struct kmem_cache *s,
 					   void **head, void **tail)
 {
-/*
- * Compiler cannot detect this function can be removed if slab_free_hook()
- * evaluates to nothing.  Thus, catch all relevant config debug options here.
- */
-#if defined(CONFIG_LOCKDEP)	||		\
-	defined(CONFIG_DEBUG_KMEMLEAK) ||	\
-	defined(CONFIG_DEBUG_OBJECTS_FREE) ||	\
-	defined(CONFIG_KASAN)
 
 	void *object;
 	void *next = *head;
 	void *old_tail = *tail ? *tail : *head;
+	int rsize;
 
 	/* Head and tail of the reconstructed freelist */
 	*head = NULL;
@@ -1406,6 +1423,19 @@
 	do {
 		object = next;
 		next = get_freepointer(s, object);
+
+		if (slab_want_init_on_free(s)) {
+			/*
+			 * Clear the object and the metadata, but don't touch
+			 * the redzone.
+			 */
+			memset(object, 0, s->object_size);
+			rsize = (s->flags & SLAB_RED_ZONE) ? s->red_left_pad
+							   : 0;
+			memset((char *)object + s->inuse, 0,
+			       s->size - s->inuse - rsize);
+
+		}
 		/* If object's reuse doesn't have to be delayed */
 		if (!slab_free_hook(s, object)) {
 			/* Move object to the new freelist */
@@ -1420,21 +1450,19 @@
 		*tail = NULL;
 
 	return *head != NULL;
-#else
-	return true;
-#endif
 }
 
-static void setup_object(struct kmem_cache *s, struct page *page,
+static void *setup_object(struct kmem_cache *s, struct page *page,
 				void *object)
 {
 	setup_object_debug(s, page, object);
-	kasan_init_slab_obj(s, object);
+	object = kasan_init_slab_obj(s, object);
 	if (unlikely(s->ctor)) {
 		kasan_unpoison_object_data(s, object);
 		s->ctor(object);
 		kasan_poison_object_data(s, object);
 	}
+	return object;
 }
 
 /*
@@ -1561,16 +1589,16 @@
 	/* First entry is used as the base of the freelist */
 	cur = next_freelist_entry(s, page, &pos, start, page_limit,
 				freelist_count);
+	cur = setup_object(s, page, cur);
 	page->freelist = cur;
 
 	for (idx = 1; idx < page->objects; idx++) {
-		setup_object(s, page, cur);
 		next = next_freelist_entry(s, page, &pos, start, page_limit,
 			freelist_count);
+		next = setup_object(s, page, next);
 		set_freepointer(s, cur, next);
 		cur = next;
 	}
-	setup_object(s, page, cur);
 	set_freepointer(s, cur, NULL);
 
 	return true;
@@ -1596,7 +1624,7 @@
 	struct page *page;
 	struct kmem_cache_order_objects oo = s->oo;
 	gfp_t alloc_gfp;
-	void *start, *p;
+	void *start, *p, *next;
 	int idx, order;
 	bool shuffle;
 
@@ -1637,24 +1665,25 @@
 	if (page_is_pfmemalloc(page))
 		SetPageSlabPfmemalloc(page);
 
+	kasan_poison_slab(page);
+
 	start = page_address(page);
 
-	if (unlikely(s->flags & SLAB_POISON))
-		memset(start, POISON_INUSE, PAGE_SIZE << order);
-
-	kasan_poison_slab(page);
+	setup_page_debug(s, start, order);
 
 	shuffle = shuffle_freelist(s, page);
 
 	if (!shuffle) {
-		for_each_object_idx(p, idx, s, start, page->objects) {
-			setup_object(s, page, p);
-			if (likely(idx < page->objects))
-				set_freepointer(s, p, p + s->size);
-			else
-				set_freepointer(s, p, NULL);
+		start = fixup_red_left(s, start);
+		start = setup_object(s, page, start);
+		page->freelist = start;
+		for (idx = 0, p = start; idx < page->objects - 1; idx++) {
+			next = p + s->size;
+			next = setup_object(s, page, next);
+			set_freepointer(s, p, next);
+			p = next;
 		}
-		page->freelist = fixup_red_left(s, start);
+		set_freepointer(s, p, NULL);
 	}
 
 	page->inuse = page->objects;
@@ -2735,8 +2764,14 @@
 		prefetch_freepointer(s, next_object);
 		stat(s, ALLOC_FASTPATH);
 	}
+	/*
+	 * If the object has been wiped upon free, make sure it's fully
+	 * initialized by zeroing out freelist pointer.
+	 */
+	if (unlikely(slab_want_init_on_free(s)) && object)
+		memset(object + s->offset, 0, sizeof(void *));
 
-	if (unlikely(gfpflags & __GFP_ZERO) && object)
+	if (unlikely(slab_want_init_on_alloc(gfpflags, s)) && object)
 		memset(object, 0, s->object_size);
 
 	slab_post_alloc_hook(s, gfpflags, 1, &object);
@@ -2766,7 +2801,7 @@
 {
 	void *ret = slab_alloc(s, gfpflags, _RET_IP_);
 	trace_kmalloc(_RET_IP_, ret, size, s->size, gfpflags);
-	kasan_kmalloc(s, ret, size, gfpflags);
+	ret = kasan_kmalloc(s, ret, size, gfpflags);
 	return ret;
 }
 EXPORT_SYMBOL(kmem_cache_alloc_trace);
@@ -2794,7 +2829,7 @@
 	trace_kmalloc_node(_RET_IP_, ret,
 			   size, s->size, gfpflags, node);
 
-	kasan_kmalloc(s, ret, size, gfpflags);
+	ret = kasan_kmalloc(s, ret, size, gfpflags);
 	return ret;
 }
 EXPORT_SYMBOL(kmem_cache_alloc_node_trace);
@@ -2990,7 +3025,7 @@
 		do_slab_free(s, page, head, tail, cnt, addr);
 }
 
-#ifdef CONFIG_KASAN
+#ifdef CONFIG_KASAN_GENERIC
 void ___cache_free(struct kmem_cache *cache, void *x, unsigned long addr)
 {
 	do_slab_free(cache, virt_to_head_page(x), x, NULL, 1, addr);
@@ -3158,7 +3193,7 @@
 	local_irq_enable();
 
 	/* Clear memory outside IRQ disabled fastpath loop */
-	if (unlikely(flags & __GFP_ZERO)) {
+	if (unlikely(slab_want_init_on_alloc(flags, s))) {
 		int j;
 
 		for (j = 0; j < i; j++)
@@ -3362,16 +3397,16 @@
 
 	n = page->freelist;
 	BUG_ON(!n);
-	page->freelist = get_freepointer(kmem_cache_node, n);
-	page->inuse = 1;
-	page->frozen = 0;
-	kmem_cache_node->node[node] = n;
 #ifdef CONFIG_SLUB_DEBUG
 	init_object(kmem_cache_node, n, SLUB_RED_ACTIVE);
 	init_tracking(kmem_cache_node, n);
 #endif
-	kasan_kmalloc(kmem_cache_node, n, sizeof(struct kmem_cache_node),
+	n = kasan_kmalloc(kmem_cache_node, n, sizeof(struct kmem_cache_node),
 		      GFP_KERNEL);
+	page->freelist = get_freepointer(kmem_cache_node, n);
+	page->inuse = 1;
+	page->frozen = 0;
+	kmem_cache_node->node[node] = n;
 	init_kmem_cache_node(n);
 	inc_slabs_node(kmem_cache_node, node, page->objects);
 
@@ -3787,7 +3822,7 @@
 
 	trace_kmalloc(_RET_IP_, ret, size, s->size, flags);
 
-	kasan_kmalloc(s, ret, size, flags);
+	ret = kasan_kmalloc(s, ret, size, flags);
 
 	return ret;
 }
@@ -3804,8 +3839,7 @@
 	if (page)
 		ptr = page_address(page);
 
-	kmalloc_large_node_hook(ptr, size, flags);
-	return ptr;
+	return kmalloc_large_node_hook(ptr, size, flags);
 }
 
 void *__kmalloc_node(size_t size, gfp_t flags, int node)
@@ -3832,7 +3866,7 @@
 
 	trace_kmalloc_node(_RET_IP_, ret, size, s->size, flags, node);
 
-	kasan_kmalloc(s, ret, size, flags);
+	ret = kasan_kmalloc(s, ret, size, flags);
 
 	return ret;
 }
@@ -3855,6 +3889,8 @@
 	unsigned int offset;
 	size_t object_size;
 
+	ptr = kasan_reset_tag(ptr);
+
 	/* Find object and usable object size. */
 	s = page->slab_cache;
 
@@ -4697,6 +4733,7 @@
 static void __init resiliency_test(void)
 {
 	u8 *p;
+	int type = KMALLOC_NORMAL;
 
 	BUILD_BUG_ON(KMALLOC_MIN_SIZE > 16 || KMALLOC_SHIFT_HIGH < 10);
 
@@ -4709,7 +4746,7 @@
 	pr_err("\n1. kmalloc-16: Clobber Redzone/next pointer 0x12->0x%p\n\n",
 	       p + 16);
 
-	validate_slab_cache(kmalloc_caches[4]);
+	validate_slab_cache(kmalloc_caches[type][4]);
 
 	/* Hmmm... The next two are dangerous */
 	p = kzalloc(32, GFP_KERNEL);
@@ -4718,33 +4755,33 @@
 	       p);
 	pr_err("If allocated object is overwritten then not detectable\n\n");
 
-	validate_slab_cache(kmalloc_caches[5]);
+	validate_slab_cache(kmalloc_caches[type][5]);
 	p = kzalloc(64, GFP_KERNEL);
 	p += 64 + (get_cycles() & 0xff) * sizeof(void *);
 	*p = 0x56;
 	pr_err("\n3. kmalloc-64: corrupting random byte 0x56->0x%p\n",
 	       p);
 	pr_err("If allocated object is overwritten then not detectable\n\n");
-	validate_slab_cache(kmalloc_caches[6]);
+	validate_slab_cache(kmalloc_caches[type][6]);
 
 	pr_err("\nB. Corruption after free\n");
 	p = kzalloc(128, GFP_KERNEL);
 	kfree(p);
 	*p = 0x78;
 	pr_err("1. kmalloc-128: Clobber first word 0x78->0x%p\n\n", p);
-	validate_slab_cache(kmalloc_caches[7]);
+	validate_slab_cache(kmalloc_caches[type][7]);
 
 	p = kzalloc(256, GFP_KERNEL);
 	kfree(p);
 	p[50] = 0x9a;
 	pr_err("\n2. kmalloc-256: Clobber 50th byte 0x9a->0x%p\n\n", p);
-	validate_slab_cache(kmalloc_caches[8]);
+	validate_slab_cache(kmalloc_caches[type][8]);
 
 	p = kzalloc(512, GFP_KERNEL);
 	kfree(p);
 	p[512] = 0xab;
 	pr_err("\n3. kmalloc-512: Clobber redzone 0xab->0x%p\n\n", p);
-	validate_slab_cache(kmalloc_caches[9]);
+	validate_slab_cache(kmalloc_caches[type][9]);
 }
 #else
 #ifdef CONFIG_SYSFS
diff --git a/mm/swapfile.c b/mm/swapfile.c
index 5885f29..03ea500 100644
--- a/mm/swapfile.c
+++ b/mm/swapfile.c
@@ -2418,9 +2418,8 @@
  * requirements, they are simply tossed out - we will never use those blocks
  * for swapping.
  *
- * For S_ISREG swapfiles we set S_SWAPFILE across the life of the swapon.  This
- * prevents root from shooting her foot off by ftruncating an in-use swapfile,
- * which will scribble on the fs.
+ * For all swap devices we set S_SWAPFILE across the life of the swapon.  This
+ * prevents users from writing to the swap device, which will corrupt memory.
  *
  * The amount of disk space which a single swap extent represents varies.
  * Typically it is in the 1-4 megabyte range.  So we can have hundreds of
@@ -2683,13 +2682,14 @@
 	inode = mapping->host;
 	if (S_ISBLK(inode->i_mode)) {
 		struct block_device *bdev = I_BDEV(inode);
+
 		set_blocksize(bdev, old_block_size);
 		blkdev_put(bdev, FMODE_READ | FMODE_WRITE | FMODE_EXCL);
-	} else {
-		inode_lock(inode);
-		inode->i_flags &= ~S_SWAPFILE;
-		inode_unlock(inode);
 	}
+
+	inode_lock(inode);
+	inode->i_flags &= ~S_SWAPFILE;
+	inode_unlock(inode);
 	filp_close(swap_file, NULL);
 
 	/*
@@ -2913,11 +2913,11 @@
 		p->flags |= SWP_BLKDEV;
 	} else if (S_ISREG(inode->i_mode)) {
 		p->bdev = inode->i_sb->s_bdev;
-		inode_lock(inode);
-		if (IS_SWAPFILE(inode))
-			return -EBUSY;
-	} else
-		return -EINVAL;
+	}
+
+	inode_lock(inode);
+	if (IS_SWAPFILE(inode))
+		return -EBUSY;
 
 	return 0;
 }
@@ -3298,6 +3298,17 @@
 	if (error)
 		goto bad_swap;
 
+	/*
+	 * Flush any pending IO and dirty mappings before we start using this
+	 * swap device.
+	 */
+	inode->i_flags |= S_SWAPFILE;
+	error = inode_drain_writes(inode);
+	if (error) {
+		inode->i_flags &= ~S_SWAPFILE;
+		goto bad_swap;
+	}
+
 	mutex_lock(&swapon_mutex);
 	prio = -1;
 	if (swap_flags & SWAP_FLAG_PREFER) {
@@ -3320,8 +3331,6 @@
 	atomic_inc(&proc_poll_event);
 	wake_up_interruptible(&proc_poll_wait);
 
-	if (S_ISREG(inode->i_mode))
-		inode->i_flags |= S_SWAPFILE;
 	error = 0;
 	goto out;
 bad_swap:
@@ -3343,7 +3352,7 @@
 	if (inced_nr_rotate_swap)
 		atomic_dec(&nr_rotate_swap);
 	if (swap_file) {
-		if (inode && S_ISREG(inode->i_mode)) {
+		if (inode) {
 			inode_unlock(inode);
 			inode = NULL;
 		}
@@ -3356,7 +3365,7 @@
 	}
 	if (name)
 		putname(name);
-	if (inode && S_ISREG(inode->i_mode))
+	if (inode)
 		inode_unlock(inode);
 	if (!error)
 		enable_swap_slots_cache();
diff --git a/mm/util.c b/mm/util.c
index 6a24a10..725bc7f 100644
--- a/mm/util.c
+++ b/mm/util.c
@@ -685,8 +685,7 @@
 		 * Part of the kernel memory, which can be released
 		 * under memory pressure.
 		 */
-		free += global_node_page_state(
-			NR_INDIRECTLY_RECLAIMABLE_BYTES) >> PAGE_SHIFT;
+		free += global_node_page_state(NR_KERNEL_MISC_RECLAIMABLE);
 
 		/*
 		 * Leave reserved pages. The pages are not for anonymous pages.
diff --git a/mm/vmalloc.c b/mm/vmalloc.c
index 5c304f4..6160d80 100644
--- a/mm/vmalloc.c
+++ b/mm/vmalloc.c
@@ -455,6 +455,8 @@
 #endif
 EXPORT_SYMBOL(is_vmalloc_addr);
 
+static atomic_long_t nr_vmalloc_pages;
+
 static struct vmap_area *__find_vmap_area(unsigned long addr)
 {
 	struct rb_node *n = vmap_area_root.rb_node;
@@ -3438,6 +3440,9 @@
 
 	v = va->vm;
 
+	if (v->flags & VM_LOWMEM)
+		return 0;
+
 	seq_printf(m, "0x%pK-0x%pK %7ld",
 		v->addr, v->addr + v->size, v->size);
 
@@ -3465,9 +3470,6 @@
 	if (is_vmalloc_addr(v->pages))
 		seq_puts(m, " vpages");
 
-	if (v->flags & VM_LOWMEM)
-		seq_puts(m, " lowmem");
-
 	show_numa_info(m, v);
 	seq_putc(m, '\n');
 	return 0;
diff --git a/mm/vmstat.c b/mm/vmstat.c
index 6f05c71..bcd2f31 100644
--- a/mm/vmstat.c
+++ b/mm/vmstat.c
@@ -1117,6 +1117,9 @@
 	"nr_mlock",
 	"nr_page_table_pages",
 	"nr_kernel_stack",
+#if IS_ENABLED(CONFIG_SHADOW_CALL_STACK)
+	"nr_shadow_call_stack_bytes",
+#endif
 	"nr_bounce",
 #if IS_ENABLED(CONFIG_ZSMALLOC)
 	"nr_zspages",
@@ -1162,7 +1165,7 @@
 	"nr_vmscan_immediate_reclaim",
 	"nr_dirtied",
 	"nr_written",
-	"nr_indirectly_reclaimable",
+	"nr_kernel_misc_reclaimable",
 	"nr_unreclaimable_pages",
 
 	/* enum writeback_stat_item counters */
@@ -1712,10 +1715,6 @@
 	unsigned long *l = arg;
 	unsigned long off = l - (unsigned long *)m->private;
 
-	/* Skip hidden vmstat items. */
-	if (*vmstat_text[off] == '\0')
-		return 0;
-
 	seq_puts(m, vmstat_text[off]);
 	seq_put_decimal_ull(m, " ", *l);
 	seq_putc(m, '\n');
diff --git a/net/core/sock.c b/net/core/sock.c
index bbde5f6..13ce20f 100644
--- a/net/core/sock.c
+++ b/net/core/sock.c
@@ -1460,7 +1460,7 @@
 		sk = kmem_cache_alloc(slab, priority & ~__GFP_ZERO);
 		if (!sk)
 			return sk;
-		if (priority & __GFP_ZERO)
+		if (want_init_on_alloc(priority))
 			sk_prot_clear_nulls(sk, prot->obj_size);
 	} else
 		sk = kmalloc(prot->obj_size, priority);
diff --git a/net/ipv4/netfilter/nf_nat_l3proto_ipv4.c b/net/ipv4/netfilter/nf_nat_l3proto_ipv4.c
index 6115bf1..0fb3776 100644
--- a/net/ipv4/netfilter/nf_nat_l3proto_ipv4.c
+++ b/net/ipv4/netfilter/nf_nat_l3proto_ipv4.c
@@ -241,7 +241,7 @@
 }
 EXPORT_SYMBOL_GPL(nf_nat_icmp_reply_translation);
 
-static unsigned int
+unsigned int
 nf_nat_ipv4_fn(void *priv, struct sk_buff *skb,
 	       const struct nf_hook_state *state)
 {
diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c
index fb24284..4d473ea 100644
--- a/net/ipv4/sysctl_net_ipv4.c
+++ b/net/ipv4/sysctl_net_ipv4.c
@@ -52,6 +52,10 @@
 static int comp_sack_nr_max = 255;
 static u32 u32_max_div_HZ = UINT_MAX / HZ;
 static int one_day_secs = 24 * 3600;
+static int tcp_delack_seg_min = TCP_DELACK_MIN;
+static int tcp_delack_seg_max = 60;
+static int tcp_use_userconfig_min;
+static int tcp_use_userconfig_max = 1;
 
 /* obsolete */
 static int sysctl_tcp_low_latency __read_mostly;
@@ -552,6 +556,25 @@
 		.mode		= 0644,
 		.proc_handler	= proc_doulongvec_minmax,
 	},
+	{
+		.procname	= "tcp_delack_seg",
+		.data		= &sysctl_tcp_delack_seg,
+		.maxlen		= sizeof(sysctl_tcp_delack_seg),
+		.mode		= 0644,
+		.proc_handler	= tcp_proc_delayed_ack_control,
+		.extra1		= &tcp_delack_seg_min,
+		.extra2		= &tcp_delack_seg_max,
+	},
+	{
+		.procname       = "tcp_use_userconfig",
+		.data           = &sysctl_tcp_use_userconfig,
+		.maxlen         = sizeof(sysctl_tcp_use_userconfig),
+		.mode           = 0644,
+		.proc_handler   = tcp_use_userconfig_sysctl_handler,
+		.extra1		= &tcp_use_userconfig_min,
+		.extra2		= &tcp_use_userconfig_max,
+	},
+
 	{ }
 };
 
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
index 5986c2e..ddbfa79 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -296,6 +296,11 @@
 DEFINE_STATIC_KEY_FALSE(tcp_have_smc);
 EXPORT_SYMBOL(tcp_have_smc);
 #endif
+int sysctl_tcp_delack_seg __read_mostly = TCP_DELACK_SEG;
+EXPORT_SYMBOL(sysctl_tcp_delack_seg);
+
+int sysctl_tcp_use_userconfig __read_mostly;
+EXPORT_SYMBOL(sysctl_tcp_use_userconfig);
 
 /*
  * Current number of TCP sockets.
@@ -1554,8 +1559,11 @@
 		   /* Delayed ACKs frequently hit locked sockets during bulk
 		    * receive. */
 		if (icsk->icsk_ack.blocked ||
-		    /* Once-per-two-segments ACK was not sent by tcp_input.c */
-		    tp->rcv_nxt - tp->rcv_wup > icsk->icsk_ack.rcv_mss ||
+		/* Once-per-sysctl_tcp_delack_seg segments
+		 * ACK was not sent by tcp_input.c
+		 */
+		    tp->rcv_nxt - tp->rcv_wup > (icsk->icsk_ack.rcv_mss) *
+						sysctl_tcp_delack_seg ||
 		    /*
 		     * If this read emptied read buffer, we send ACK, if
 		     * connection is not bidirectional, user drained
@@ -2502,7 +2510,7 @@
 {
 	return (1 << state) &
 	       (TCPF_ESTABLISHED | TCPF_CLOSE_WAIT | TCPF_FIN_WAIT1 |
-		TCPF_FIN_WAIT2 | TCPF_SYN_RECV);
+		TCPF_FIN_WAIT2 | TCPF_SYN_RECV | TCPF_SYN_SENT);
 }
 
 static void tcp_rtx_queue_purge(struct sock *sk)
@@ -2564,8 +2572,7 @@
 		 */
 		tcp_send_active_reset(sk, gfp_any());
 		sk->sk_err = ECONNRESET;
-	} else if (old_state == TCP_SYN_SENT)
-		sk->sk_err = ECONNRESET;
+	}
 
 	tcp_clear_xmit_timers(sk);
 	__skb_queue_purge(&sk->sk_receive_queue);
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index 578b65e..d4cecd4 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -5167,7 +5167,8 @@
 	unsigned long rtt, delay;
 
 	    /* More than one full frame received... */
-	if (((tp->rcv_nxt - tp->rcv_wup) > inet_csk(sk)->icsk_ack.rcv_mss &&
+	if (((tp->rcv_nxt - tp->rcv_wup) > (inet_csk(sk)->icsk_ack.rcv_mss) *
+					sysctl_tcp_delack_seg &&
 	     /* ... and right edge of window advances far enough.
 	      * (tcp_recvmsg() will send ACK otherwise).
 	      * If application uses SO_RCVLOWAT, we want send ack now if
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
index 1cc20ed..b0e8970 100644
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -2029,6 +2029,9 @@
 	struct sk_buff *skb, *next;
 
 	skb = tcp_send_head(sk);
+	if (!skb)
+		return false;
+
 	tcp_for_write_queue_from_safe(skb, next, sk) {
 		if (len <= skb->len)
 			break;
diff --git a/net/ipv4/tcp_timer.c b/net/ipv4/tcp_timer.c
index 681882a..dda4e53 100644
--- a/net/ipv4/tcp_timer.c
+++ b/net/ipv4/tcp_timer.c
@@ -51,13 +51,45 @@
 		return min_t(u32, icsk->icsk_rto, msecs_to_jiffies(icsk->icsk_user_timeout - elapsed));
 }
 
+static void set_tcp_default(void)
+{
+	sysctl_tcp_delack_seg = TCP_DELACK_SEG;
+}
+
+/*sysctl handler for tcp_ack realted master control */
+int tcp_proc_delayed_ack_control(struct ctl_table *table, int write,
+				 void __user *buffer, size_t *length,
+				 loff_t *ppos)
+{
+	int ret = proc_dointvec_minmax(table, write, buffer, length, ppos);
+
+	/* The ret value will be 0 if the input validation is successful
+	 * and the values are written to sysctl table. If not, the stack
+	 * will continue to work with currently configured values
+	 */
+	return ret;
+}
+
+/*sysctl handler for tcp_ack realted master control */
+int tcp_use_userconfig_sysctl_handler(struct ctl_table *table, int write,
+				      void __user *buffer, size_t *length,
+				      loff_t *ppos)
+{
+	int ret = proc_dointvec_minmax(table, write, buffer, length, ppos);
+
+	if (write && ret == 0) {
+		if (!sysctl_tcp_use_userconfig)
+			set_tcp_default();
+	}
+	return ret;
+}
+
 /**
  *  tcp_write_err() - close socket and save error info
  *  @sk:  The socket the error has appeared on.
  *
  *  Returns: Nothing (void)
  */
-
 static void tcp_write_err(struct sock *sk)
 {
 	sk->sk_err = sk->sk_err_soft ? : ETIMEDOUT;
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 7500836..b1af67c 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -855,7 +855,7 @@
 	struct key_params p;
 	int idx;
 	int type;
-	bool def, defmgmt;
+	bool def, defmgmt, defbeacon;
 	bool def_uni, def_multi;
 };
 
@@ -870,12 +870,13 @@
 
 	k->def = !!tb[NL80211_KEY_DEFAULT];
 	k->defmgmt = !!tb[NL80211_KEY_DEFAULT_MGMT];
+	k->defbeacon = !!tb[NL80211_KEY_DEFAULT_BEACON];
 
 	if (k->def) {
 		k->def_uni = true;
 		k->def_multi = true;
 	}
-	if (k->defmgmt)
+	if (k->defmgmt || k->defbeacon)
 		k->def_multi = true;
 
 	if (tb[NL80211_KEY_IDX])
@@ -987,14 +988,17 @@
 	if (err)
 		return err;
 
-	if (k->def && k->defmgmt) {
-		GENL_SET_ERR_MSG(info, "key with def && defmgmt is invalid");
+	if ((k->def ? 1 : 0) + (k->defmgmt ? 1 : 0) +
+	    (k->defbeacon ? 1 : 0) > 1) {
+		GENL_SET_ERR_MSG(info,
+				 "key with multiple default flags is invalid");
 		return -EINVAL;
 	}
 
-	if (k->defmgmt) {
+	if (k->defmgmt || k->defbeacon) {
 		if (k->def_uni || !k->def_multi) {
-			GENL_SET_ERR_MSG(info, "defmgmt key must be mcast");
+			GENL_SET_ERR_MSG(info,
+					 "defmgmt/defbeacon key must be mcast");
 			return -EINVAL;
 		}
 	}
@@ -1006,14 +1010,20 @@
 						 "defmgmt key idx not 4 or 5");
 				return -EINVAL;
 			}
+		} else if (k->defbeacon) {
+			if (k->idx < 6 || k->idx > 7) {
+				GENL_SET_ERR_MSG(info,
+						 "defbeacon key idx not 6 or 7");
+				return -EINVAL;
+			}
 		} else if (k->def) {
 			if (k->idx < 0 || k->idx > 3) {
 				GENL_SET_ERR_MSG(info, "def key idx not 0-3");
 				return -EINVAL;
 			}
 		} else {
-			if (k->idx < 0 || k->idx > 5) {
-				GENL_SET_ERR_MSG(info, "key idx not 0-5");
+			if (k->idx < 0 || k->idx > 7) {
+				GENL_SET_ERR_MSG(info, "key idx not 0-7");
 				return -EINVAL;
 			}
 		}
@@ -1630,6 +1640,46 @@
 	return -ENOBUFS;
 }
 
+static int
+nl80211_put_iftype_akm_suites(struct cfg80211_registered_device *rdev,
+			      struct sk_buff *msg)
+{
+	int i;
+	struct nlattr *nested, *nested_akms;
+	const struct wiphy_iftype_akm_suites *iftype_akms;
+
+	if (!rdev->wiphy.num_iftype_akm_suites ||
+	    !rdev->wiphy.iftype_akm_suites)
+		return 0;
+
+	nested = nla_nest_start(msg, NL80211_ATTR_IFTYPE_AKM_SUITES);
+	if (!nested)
+		return -ENOBUFS;
+
+	for (i = 0; i < rdev->wiphy.num_iftype_akm_suites; i++) {
+		nested_akms = nla_nest_start(msg, i + 1);
+		if (!nested_akms)
+			return -ENOBUFS;
+
+		iftype_akms = &rdev->wiphy.iftype_akm_suites[i];
+
+		if (nl80211_put_iftypes(msg, NL80211_IFTYPE_AKM_ATTR_IFTYPES,
+					iftype_akms->iftypes_mask))
+			return -ENOBUFS;
+
+		if (nla_put(msg, NL80211_IFTYPE_AKM_ATTR_SUITES,
+			    sizeof(u32) * iftype_akms->n_akm_suites,
+			    iftype_akms->akm_suites)) {
+			return -ENOBUFS;
+		}
+		nla_nest_end(msg, nested_akms);
+	}
+
+	nla_nest_end(msg, nested);
+
+	return 0;
+}
+
 struct nl80211_dump_wiphy_state {
 	s64 filter_wiphy;
 	long start;
@@ -1871,6 +1921,7 @@
 				CMD(add_tx_ts, ADD_TX_TS);
 			CMD(set_multicast_to_unicast, SET_MULTICAST_TO_UNICAST);
 			CMD(update_connect_params, UPDATE_CONNECT_PARAMS);
+			CMD(update_ft_ies, UPDATE_FT_IES);
 		}
 #undef CMD
 
@@ -2133,6 +2184,13 @@
 				goto nla_put_failure;
 		}
 
+		state->split_start++;
+		break;
+	case 14:
+
+		if (nl80211_put_iftype_akm_suites(rdev, msg))
+			goto nla_put_failure;
+
 		/* done */
 		state->split_start = 0;
 		break;
@@ -3444,10 +3502,16 @@
 	void *hdr;
 	struct sk_buff *msg;
 
-	if (info->attrs[NL80211_ATTR_KEY_IDX])
+	if (info->attrs[NL80211_ATTR_KEY_IDX]) {
 		key_idx = nla_get_u8(info->attrs[NL80211_ATTR_KEY_IDX]);
+		if (key_idx > 5 &&
+		    !wiphy_ext_feature_isset(
+			    &rdev->wiphy,
+			    NL80211_EXT_FEATURE_BEACON_PROTECTION))
+			return -EINVAL;
+	}
 
-	if (key_idx > 5)
+	if (key_idx > 7)
 		return -EINVAL;
 
 	if (info->attrs[NL80211_ATTR_MAC])
@@ -3524,7 +3588,7 @@
 		return -EINVAL;
 
 	/* only support setting default key */
-	if (!key.def && !key.defmgmt)
+	if (!key.def && !key.defmgmt && !key.defbeacon)
 		return -EINVAL;
 
 	wdev_lock(dev->ieee80211_ptr);
@@ -3548,7 +3612,7 @@
 #ifdef CONFIG_CFG80211_WEXT
 		dev->ieee80211_ptr->wext.default_key = key.idx;
 #endif
-	} else {
+	} else if (key.defmgmt) {
 		if (key.def_uni || !key.def_multi) {
 			err = -EINVAL;
 			goto out;
@@ -3570,6 +3634,24 @@
 #ifdef CONFIG_CFG80211_WEXT
 		dev->ieee80211_ptr->wext.default_mgmt_key = key.idx;
 #endif
+	} else if (key.defbeacon) {
+		if (key.def_uni || !key.def_multi) {
+			err = -EINVAL;
+			goto out;
+		}
+
+		if (!rdev->ops->set_default_beacon_key) {
+			err = -EOPNOTSUPP;
+			goto out;
+		}
+
+		err = nl80211_key_allowed(dev->ieee80211_ptr);
+		if (err)
+			goto out;
+
+		err = rdev_set_default_beacon_key(rdev, dev, key.idx);
+		if (err)
+			goto out;
 	}
 
  out:
diff --git a/net/wireless/rdev-ops.h b/net/wireless/rdev-ops.h
index a3aeaf1..6aad763 100644
--- a/net/wireless/rdev-ops.h
+++ b/net/wireless/rdev-ops.h
@@ -135,6 +135,19 @@
 	return ret;
 }
 
+static inline int
+rdev_set_default_beacon_key(struct cfg80211_registered_device *rdev,
+			    struct net_device *netdev, u8 key_index)
+{
+	int ret;
+
+	trace_rdev_set_default_beacon_key(&rdev->wiphy, netdev, key_index);
+	ret = rdev->ops->set_default_beacon_key(&rdev->wiphy, netdev,
+						key_index);
+	trace_rdev_return_int(&rdev->wiphy, ret);
+	return ret;
+}
+
 static inline int rdev_start_ap(struct cfg80211_registered_device *rdev,
 				struct net_device *dev,
 				struct cfg80211_ap_settings *settings)
diff --git a/net/wireless/sme.c b/net/wireless/sme.c
index 07c2196..3c1b37e 100644
--- a/net/wireless/sme.c
+++ b/net/wireless/sme.c
@@ -1087,9 +1087,16 @@
 	 * Delete all the keys ... pairwise keys can't really
 	 * exist any more anyway, but default keys might.
 	 */
-	if (rdev->ops->del_key)
-		for (i = 0; i < 6; i++)
+	if (rdev->ops->del_key) {
+		int max_key_idx = 5;
+
+		if (wiphy_ext_feature_isset(
+			    wdev->wiphy,
+			    NL80211_EXT_FEATURE_BEACON_PROTECTION))
+			max_key_idx = 7;
+		for (i = 0; i <= max_key_idx; i++)
 			rdev_del_key(rdev, dev, i, false, NULL);
+	}
 
 	rdev_set_qos_map(rdev, dev, NULL);
 
diff --git a/net/wireless/trace.h b/net/wireless/trace.h
index cd229d6..f059ef5 100644
--- a/net/wireless/trace.h
+++ b/net/wireless/trace.h
@@ -471,6 +471,23 @@
 		  WIPHY_PR_ARG, NETDEV_PR_ARG, __entry->key_index)
 );
 
+TRACE_EVENT(rdev_set_default_beacon_key,
+	TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, u8 key_index),
+	TP_ARGS(wiphy, netdev, key_index),
+	TP_STRUCT__entry(
+		WIPHY_ENTRY
+		NETDEV_ENTRY
+		__field(u8, key_index)
+	),
+	TP_fast_assign(
+		WIPHY_ASSIGN;
+		NETDEV_ASSIGN;
+		__entry->key_index = key_index;
+	),
+	TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", key index: %u",
+		  WIPHY_PR_ARG, NETDEV_PR_ARG, __entry->key_index)
+);
+
 TRACE_EVENT(rdev_start_ap,
 	TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
 		 struct cfg80211_ap_settings *settings),
diff --git a/net/wireless/util.c b/net/wireless/util.c
index 8798e1c..c22373e 100644
--- a/net/wireless/util.c
+++ b/net/wireless/util.c
@@ -218,7 +218,12 @@
 				   struct key_params *params, int key_idx,
 				   bool pairwise, const u8 *mac_addr)
 {
-	if (key_idx < 0 || key_idx > 5)
+	int max_key_idx = 5;
+
+	if (wiphy_ext_feature_isset(&rdev->wiphy,
+				    NL80211_EXT_FEATURE_BEACON_PROTECTION))
+		max_key_idx = 7;
+	if (key_idx < 0 || key_idx > max_key_idx)
 		return -EINVAL;
 
 	if (!pairwise && mac_addr && !(rdev->wiphy.flags & WIPHY_FLAG_IBSS_RSN))
diff --git a/scripts/Makefile.kasan b/scripts/Makefile.kasan
index 69552a3..6410bd2 100644
--- a/scripts/Makefile.kasan
+++ b/scripts/Makefile.kasan
@@ -1,5 +1,6 @@
 # SPDX-License-Identifier: GPL-2.0
-ifdef CONFIG_KASAN
+ifdef CONFIG_KASAN_GENERIC
+
 ifdef CONFIG_KASAN_INLINE
 	call_threshold := 10000
 else
@@ -12,36 +13,39 @@
 
 cc-param = $(call cc-option, -mllvm -$(1), $(call cc-option, --param $(1)))
 
-ifeq ($(call cc-option, $(CFLAGS_KASAN_MINIMAL) -Werror),)
-   ifneq ($(CONFIG_COMPILE_TEST),y)
-        $(warning Cannot use CONFIG_KASAN: \
-            -fsanitize=kernel-address is not supported by compiler)
-   endif
-else
-   # -fasan-shadow-offset fails without -fsanitize
-   CFLAGS_KASAN_SHADOW := $(call cc-option, -fsanitize=kernel-address \
+# -fasan-shadow-offset fails without -fsanitize
+CFLAGS_KASAN_SHADOW := $(call cc-option, -fsanitize=kernel-address \
 			-fasan-shadow-offset=$(KASAN_SHADOW_OFFSET), \
 			$(call cc-option, -fsanitize=kernel-address \
 			-mllvm -asan-mapping-offset=$(KASAN_SHADOW_OFFSET)))
 
-   ifeq ($(strip $(CFLAGS_KASAN_SHADOW)),)
-      CFLAGS_KASAN := $(CFLAGS_KASAN_MINIMAL)
-   else
-      # Now add all the compiler specific options that are valid standalone
-      CFLAGS_KASAN := $(CFLAGS_KASAN_SHADOW) \
-	$(call cc-param,asan-globals=1) \
-	$(call cc-param,asan-instrumentation-with-call-threshold=$(call_threshold)) \
-	$(call cc-param,asan-stack=1) \
-	$(call cc-param,asan-use-after-scope=1) \
-	$(call cc-param,asan-instrument-allocas=1)
-   endif
-
+ifeq ($(strip $(CFLAGS_KASAN_SHADOW)),)
+	CFLAGS_KASAN := $(CFLAGS_KASAN_MINIMAL)
+else
+	# Now add all the compiler specific options that are valid standalone
+	CFLAGS_KASAN := $(CFLAGS_KASAN_SHADOW) \
+	 $(call cc-param,asan-globals=1) \
+	 $(call cc-param,asan-instrumentation-with-call-threshold=$(call_threshold)) \
+	 $(call cc-param,asan-stack=$(CONFIG_KASAN_STACK)) \
+	 $(call cc-param,asan-instrument-allocas=1)
 endif
 
-ifdef CONFIG_KASAN_EXTRA
-CFLAGS_KASAN += $(call cc-option, -fsanitize-address-use-after-scope)
+endif # CONFIG_KASAN_GENERIC
+
+ifdef CONFIG_KASAN_SW_TAGS
+
+ifdef CONFIG_KASAN_INLINE
+    instrumentation_flags := -mllvm -hwasan-mapping-offset=$(KASAN_SHADOW_OFFSET)
+else
+    instrumentation_flags := -mllvm -hwasan-instrument-with-calls=1
 endif
 
+CFLAGS_KASAN := -fsanitize=kernel-hwaddress \
+		-mllvm -hwasan-instrument-stack=0 \
+		$(instrumentation_flags)
+
+endif # CONFIG_KASAN_SW_TAGS
+
+ifdef CONFIG_KASAN
 CFLAGS_KASAN_NOSANITIZE := -fno-builtin
-
 endif
diff --git a/scripts/generate_initcall_order.pl b/scripts/generate_initcall_order.pl
new file mode 100755
index 0000000..f772b4a
--- /dev/null
+++ b/scripts/generate_initcall_order.pl
@@ -0,0 +1,250 @@
+#!/usr/bin/env perl
+# SPDX-License-Identifier: GPL-2.0
+#
+# Generates a linker script that specifies the correct initcall order.
+#
+# Copyright (C) 2019 Google LLC
+
+use strict;
+use warnings;
+use IO::Handle;
+
+my $nm = $ENV{'LLVM_NM'} || "llvm-nm";
+my $ar = $ENV{'AR'}	 || "llvm-ar";
+my $objtree = $ENV{'objtree'} || ".";
+
+## list of all object files to process, in link order
+my @objects;
+## currently active child processes
+my $jobs = {};		# child process pid -> file handle
+## results from child processes
+my $results = {};	# object index -> { level, function }
+
+## reads _NPROCESSORS_ONLN to determine the number of processes to start
+sub get_online_processors {
+	open(my $fh, "getconf _NPROCESSORS_ONLN 2>/dev/null |")
+		or die "$0: failed to execute getconf: $!";
+	my $procs = <$fh>;
+	close($fh);
+
+	if (!($procs =~ /^\d+$/)) {
+		return 1;
+	}
+
+	return int($procs);
+}
+
+## finds initcalls defined in an object file, parses level and function name,
+## and prints it out to the parent process
+sub find_initcalls {
+	my ($object) = @_;
+
+	die "$0: object file $object doesn't exist?" if (! -f $object);
+
+	open(my $fh, "\"$nm\" -just-symbol-name -defined-only \"$object\" 2>/dev/null |")
+		or die "$0: failed to execute \"$nm\": $!";
+
+	my $initcalls = {};
+
+	while (<$fh>) {
+		chomp;
+
+		my ($counter, $line, $symbol) = $_ =~ /^__initcall_(\d+)_(\d+)_(.*)$/;
+
+		if (!defined($counter) || !defined($line) || !defined($symbol)) {
+			next;
+		}
+
+		my ($function, $level) = $symbol =~
+			/^(.*)((early|rootfs|con|security|[0-9])s?)$/;
+
+		die "$0: duplicate initcall counter value in object $object: $_"
+			if exists($initcalls->{$counter});
+
+		$initcalls->{$counter} = {
+			'level'    => $level,
+			'line'     => $line,
+			'function' => $function
+		};
+	}
+
+	close($fh);
+
+	# sort initcalls in each object file numerically by the counter value
+	# to ensure they are in the order they were defined
+	foreach my $counter (sort { $a <=> $b } keys(%{$initcalls})) {
+		print $initcalls->{$counter}->{"level"} . " " .
+		      $counter . " " .
+		      $initcalls->{$counter}->{"line"} . " " .
+		      $initcalls->{$counter}->{"function"} . "\n";
+	}
+}
+
+## waits for any child process to complete, reads the results, and adds them to
+## the $results array for later processing
+sub wait_for_results {
+	my $pid = wait();
+	if ($pid > 0) {
+		my $fh = $jobs->{$pid};
+
+		# the child process prints out results in the following format:
+		#  line 1:    <object file index>
+		#  line 2..n: <level> <counter> <line> <function>
+
+		my $index = <$fh>;
+		chomp($index);
+
+		if (!($index =~ /^\d+$/)) {
+			die "$0: child $pid returned an invalid index: $index";
+		}
+		$index = int($index);
+
+		while (<$fh>) {
+			chomp;
+			my ($level, $counter, $line, $function) = $_ =~
+				/^([^\ ]+)\ (\d+)\ (\d+)\ (.*)$/;
+
+			if (!defined($level) ||
+				!defined($counter) ||
+				!defined($line) ||
+				!defined($function)) {
+				die "$0: child $pid returned invalid data";
+			}
+
+			if (!exists($results->{$index})) {
+				$results->{$index} = [];
+			}
+
+			push (@{$results->{$index}}, {
+				'level'    => $level,
+				'counter'  => $counter,
+				'line'     => $line,
+				'function' => $function
+			});
+		}
+
+		close($fh);
+		delete($jobs->{$pid});
+	}
+}
+
+## launches child processes to find initcalls from the object files, waits for
+## each process to complete and collects the results
+sub process_objects {
+	my $index = 0;	# link order index of the object file
+	my $njobs = get_online_processors();
+
+	while (scalar(@objects) > 0) {
+		my $object = shift(@objects);
+
+		# fork a child process and read it's stdout
+		my $pid = open(my $fh, '-|');
+
+		if (!defined($pid)) {
+			die "$0: failed to fork: $!";
+		} elsif ($pid) {
+			# save the child process pid and the file handle
+			$jobs->{$pid} = $fh;
+		} else {
+			STDOUT->autoflush(1);
+			print "$index\n";
+			find_initcalls("$objtree/$object");
+			exit;
+		}
+
+		$index++;
+
+		# if we reached the maximum number of processes, wait for one
+		# to complete before launching new ones
+		if (scalar(keys(%{$jobs})) >= $njobs && scalar(@objects) > 0) {
+			wait_for_results();
+		}
+	}
+
+	# wait for the remaining children to complete
+	while (scalar(keys(%{$jobs})) > 0) {
+		wait_for_results();
+	}
+}
+
+## gets a list of actual object files from thin archives, and adds them to
+## @objects in link order
+sub find_objects {
+	while (my $file = shift(@ARGV)) {
+		my $pid = open (my $fh, "\"$ar\" t \"$file\" 2>/dev/null |")
+			or die "$0: failed to execute $ar: $!";
+
+		my @output;
+
+		while (<$fh>) {
+			chomp;
+			push(@output, $_);
+		}
+
+		close($fh);
+
+		# if $ar failed, assume we have an object file
+		if ($? != 0) {
+			push(@objects, $file);
+			next;
+		}
+
+		# if $ar succeeded, read the list of object files
+		foreach (@output) {
+			push(@objects, $_);
+		}
+	}
+}
+
+## START
+find_objects();
+process_objects();
+
+## process results and add them to $sections in the correct order
+my $sections = {};
+
+foreach my $index (sort { $a <=> $b } keys(%{$results})) {
+	foreach my $result (@{$results->{$index}}) {
+		my $level = $result->{'level'};
+
+		if (!exists($sections->{$level})) {
+			$sections->{$level} = [];
+		}
+
+		my $fsname = $result->{'counter'} . '_' .
+			     $result->{'line'}    . '_' .
+			     $result->{'function'};
+
+		push(@{$sections->{$level}}, $fsname);
+	}
+}
+
+if (!keys(%{$sections})) {
+	exit(0); # no initcalls...?
+}
+
+## print out a linker script that defines the order of initcalls for each
+## level
+print "SECTIONS {\n";
+
+foreach my $level (sort(keys(%{$sections}))) {
+	my $section;
+
+	if ($level eq 'con') {
+		$section = '.con_initcall.init';
+	} elsif ($level eq 'security') {
+		$section = '.security_initcall.init';
+	} else {
+		$section = ".initcall${level}.init";
+	}
+
+	print "\t${section} : {\n";
+
+	foreach my $fsname (@{$sections->{$level}}) {
+		print "\t\t*(${section}..${fsname}) ;\n"
+	}
+
+	print "\t}\n";
+}
+
+print "}\n";
diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh
index ad55449..517c732 100755
--- a/scripts/link-vmlinux.sh
+++ b/scripts/link-vmlinux.sh
@@ -69,29 +69,30 @@
 	fi
 }
 
-# If CONFIG_LTO_CLANG is selected, collect generated symbol versions into
-# .tmp_symversions
-modversions()
+# If CONFIG_LTO_CLANG is selected, generate a linker script to ensure correct
+# ordering of initcalls, and with CONFIG_MODVERSIONS also enabled, collect the
+# previously generated symbol versions into the same script.
+lto_lds()
 {
 	if [ -z "${CONFIG_LTO_CLANG}" ]; then
 		return
 	fi
 
-	if [ -z "${CONFIG_MODVERSIONS}" ]; then
-		return
+	${srctree}/scripts/generate_initcall_order.pl \
+		built-in.a ${KBUILD_VMLINUX_LIBS} \
+		> .tmp_lto.lds
+
+	if [ -n "${CONFIG_MODVERSIONS}" ]; then
+		for a in built-in.a ${KBUILD_VMLINUX_LIBS}; do
+			for o in $(${AR} t $a); do
+				if [ -f ${o}.symversions ]; then
+					cat ${o}.symversions >> .tmp_lto.lds
+				fi
+			done
+		done
 	fi
 
-	rm -f .tmp_symversions
-
-	for a in built-in.a ${KBUILD_VMLINUX_LIBS}; do
-		for o in $(${AR} t $a); do
-			if [ -f ${o}.symversions ]; then
-				cat ${o}.symversions >> .tmp_symversions
-			fi
-		done
-	done
-
-	echo "-T .tmp_symversions"
+	echo "-T .tmp_lto.lds"
 }
 
 # Link of vmlinux.o used for section mismatch analysis
@@ -113,7 +114,7 @@
 		info LTO vmlinux.o
 	fi
 
-	${LD} ${KBUILD_LDFLAGS} -r -o ${1} $(modversions) ${objects}
+	${LD} ${KBUILD_LDFLAGS} -r -o ${1} $(lto_lds) ${objects}
 }
 
 # If CONFIG_LTO_CLANG is selected, we postpone running recordmcount until
@@ -241,7 +242,7 @@
 {
 	rm -f .tmp_System.map
 	rm -f .tmp_kallsyms*
-	rm -f .tmp_symversions
+	rm -f .tmp_lto.lds
 	rm -f .tmp_vmlinux*
 	rm -f built-in.a
 	rm -f System.map
diff --git a/scripts/module-lto.lds b/scripts/module-lto.lds
new file mode 100644
index 0000000..f5ee544
--- /dev/null
+++ b/scripts/module-lto.lds
@@ -0,0 +1,22 @@
+/*
+ * With CONFIG_LTO_CLANG, LLD always enables -fdata-sections and
+ * -ffunction-sections, which increases the size of the final module.
+ * Merge the split sections in the final binary.
+ */
+SECTIONS {
+	/*
+	 * LLVM may emit .eh_frame with CONFIG_CFI_CLANG despite
+	 * -fno-asynchronous-unwind-tables. Discard the section.
+	 */
+	/DISCARD/ : {
+		*(.eh_frame)
+	}
+
+	.bss : { *(.bss .bss[.0-9a-zA-Z_]*) }
+	.data : { *(.data .data[.0-9a-zA-Z_]*) }
+	.rela.data : { *(.rela.data .rela.data[.0-9a-zA-Z_]*) }
+	.rela.rodata : { *(.rela.rodata .rela.rodata[.0-9a-zA-Z_]*) }
+	.rela.text : { *(.rela.text .rela.text[.0-9a-zA-Z_]*) }
+	.rodata : { *(.rodata .rodata[.0-9a-zA-Z_]*) }
+	.text : { *(.text .text[.0-9a-zA-Z_]*) }
+}
diff --git a/scripts/tools-support-relr.sh b/scripts/tools-support-relr.sh
new file mode 100755
index 0000000..97a2c84
--- /dev/null
+++ b/scripts/tools-support-relr.sh
@@ -0,0 +1,16 @@
+#!/bin/sh -eu
+# SPDX-License-Identifier: GPL-2.0
+
+tmp_file=$(mktemp)
+trap "rm -f $tmp_file.o $tmp_file $tmp_file.bin" EXIT
+
+cat << "END" | "$CC" -c -x c - -o $tmp_file.o >/dev/null 2>&1
+void *p = &p;
+END
+"$LD" $tmp_file.o -shared -Bsymbolic --pack-dyn-relocs=relr -o $tmp_file
+
+# Despite printing an error message, GNU nm still exits with exit code 0 if it
+# sees a relr section. So we need to check that nothing is printed to stderr.
+test -z "$("$NM" $tmp_file 2>&1 >/dev/null)"
+
+"$OBJCOPY" -O binary $tmp_file $tmp_file.bin
diff --git a/security/Kconfig.hardening b/security/Kconfig.hardening
index 107cca4..b0e9cc0 100644
--- a/security/Kconfig.hardening
+++ b/security/Kconfig.hardening
@@ -2,17 +2,18 @@
 menu "Kernel hardening options"
 
 config GCC_PLUGIN_STRUCTLEAK
-	bool "Force initialization of variables containing userspace addresses"
-	# Currently STRUCTLEAK inserts initialization out of live scope of
-	# variables from KASAN point of view. This leads to KASAN false
-	# positive reports. Prohibit this combination for now.
-	depends on !KASAN_EXTRA
+	bool
 	help
-	  This plugin zero-initializes any structures containing a
-	  __user attribute. This can prevent some classes of information
-	  exposures.
+	  While the kernel is built with warnings enabled for any missed
+	  stack variable initializations, this warning is silenced for
+	  anything passed by reference to another function, under the
+	  occasionally misguided assumption that the function will do
+	  the initialization. As this regularly leads to exploitable
+	  flaws, this plugin is available to identify and zero-initialize
+	  such variables, depending on the chosen level of coverage.
 
-	  This plugin was ported from grsecurity/PaX. More information at:
+	  This plugin was originally ported from grsecurity/PaX. More
+	  information at:
 	   * https://grsecurity.net/
 	   * https://pax.grsecurity.net/
 
@@ -47,12 +48,15 @@
 		  and information exposures.
 
 	config GCC_PLUGIN_STRUCTLEAK_BYREF_ALL
-		bool "Force initialize all struct type variables passed by reference"
-		depends on GCC_PLUGIN_STRUCTLEAK
-		depends on !COMPILE_TEST
+		bool "zero-init anything passed by reference (very strong)"
+		depends on GCC_PLUGINS
+		select GCC_PLUGIN_STRUCTLEAK
 		help
-		  Zero initialize any struct type local variable that may
-		  be passed by reference without having been initialized.
+		  Zero-initialize any stack variables that may be passed
+		  by reference and had not already been explicitly
+		  initialized. This is intended to eliminate all classes
+		  of uninitialized stack variable exploits and information
+		  exposures.
 
 	config INIT_STACK_ALL
 		bool "0xAA-init everything on the stack (strongest)"
@@ -76,6 +80,35 @@
 	  initialized. Since not all existing initializers are detected
 	  by the plugin, this can produce false positive warnings.
 
+config INIT_ON_ALLOC_DEFAULT_ON
+	bool "Enable heap memory zeroing on allocation by default"
+	help
+	  This has the effect of setting "init_on_alloc=1" on the kernel
+	  command line. This can be disabled with "init_on_alloc=0".
+	  When "init_on_alloc" is enabled, all page allocator and slab
+	  allocator memory will be zeroed when allocated, eliminating
+	  many kinds of "uninitialized heap memory" flaws, especially
+	  heap content exposures. The performance impact varies by
+	  workload, but most cases see <1% impact. Some synthetic
+	  workloads have measured as high as 7%.
+
+config INIT_ON_FREE_DEFAULT_ON
+	bool "Enable heap memory zeroing on free by default"
+	help
+	  This has the effect of setting "init_on_free=1" on the kernel
+	  command line. This can be disabled with "init_on_free=0".
+	  Similar to "init_on_alloc", when "init_on_free" is enabled,
+	  all page allocator and slab allocator memory will be zeroed
+	  when freed, eliminating many kinds of "uninitialized heap memory"
+	  flaws, especially heap content exposures. The primary difference
+	  with "init_on_free" is that data lifetime in memory is reduced,
+	  as anything freed is wiped immediately, making live forensics or
+	  cold boot memory attacks unable to recover freed memory contents.
+	  The performance impact varies by workload, but is more expensive
+	  than "init_on_alloc" due to the negative cache effects of
+	  touching "cold" memory areas. Most cases see 3-5% impact. Some
+	  synthetic workloads have measured as high as 8%.
+
 endmenu
 
 endmenu
diff --git a/security/security.c b/security/security.c
index 70e38fb..1e8151d 100644
--- a/security/security.c
+++ b/security/security.c
@@ -1813,3 +1813,30 @@
 	call_void_hook(bpf_prog_free_security, aux);
 }
 #endif /* CONFIG_BPF_SYSCALL */
+
+#ifdef CONFIG_PERF_EVENTS
+int security_perf_event_open(struct perf_event_attr *attr, int type)
+{
+	return call_int_hook(perf_event_open, 0, attr, type);
+}
+
+int security_perf_event_alloc(struct perf_event *event)
+{
+	return call_int_hook(perf_event_alloc, 0, event);
+}
+
+void security_perf_event_free(struct perf_event *event)
+{
+	call_void_hook(perf_event_free, event);
+}
+
+int security_perf_event_read(struct perf_event *event)
+{
+	return call_int_hook(perf_event_read, 0, event);
+}
+
+int security_perf_event_write(struct perf_event *event)
+{
+	return call_int_hook(perf_event_write, 0, event);
+}
+#endif /* CONFIG_PERF_EVENTS */
diff --git a/security/selinux/Kconfig b/security/selinux/Kconfig
index 8af7a69..8297e48 100644
--- a/security/selinux/Kconfig
+++ b/security/selinux/Kconfig
@@ -99,3 +99,15 @@
 	  via /selinux/checkreqprot if authorized by policy.
 
 	  If you are unsure how to answer this question, answer 0.
+
+config SECURITY_SELINUX_SIDTAB_HASH_BITS
+	int "NSA SELinux sidtab hashtable size"
+	depends on SECURITY_SELINUX
+	range 8 13
+	default 9
+	help
+	  This option sets the number of buckets used in the sidtab hashtable
+	  to 2^SECURITY_SELINUX_SIDTAB_HASH_BITS buckets. The number of hash
+	  collisions may be viewed at /sys/fs/selinux/ss/sidtab_hash_stats. If
+	  chain lengths are high (e.g. > 20) then selecting a higher value here
+	  will ensure that lookups times are short and stable.
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
index b1a9ac9..d36e9c3 100644
--- a/security/selinux/hooks.c
+++ b/security/selinux/hooks.c
@@ -6940,6 +6940,68 @@
 }
 #endif
 
+
+#ifdef CONFIG_PERF_EVENTS
+static int selinux_perf_event_open(struct perf_event_attr *attr, int type)
+{
+	u32 requested, sid = current_sid();
+
+	if (type == PERF_SECURITY_OPEN)
+		requested = PERF_EVENT__OPEN;
+	else if (type == PERF_SECURITY_CPU)
+		requested = PERF_EVENT__CPU;
+	else if (type == PERF_SECURITY_KERNEL)
+		requested = PERF_EVENT__KERNEL;
+	else if (type == PERF_SECURITY_TRACEPOINT)
+		requested = PERF_EVENT__TRACEPOINT;
+	else
+		return -EINVAL;
+
+	return avc_has_perm(&selinux_state, sid, sid, SECCLASS_PERF_EVENT,
+			    requested, NULL);
+}
+
+static int selinux_perf_event_alloc(struct perf_event *event)
+{
+	struct perf_event_security_struct *perfsec;
+
+	perfsec = kzalloc(sizeof(*perfsec), GFP_KERNEL);
+	if (!perfsec)
+		return -ENOMEM;
+
+	perfsec->sid = current_sid();
+	event->security = perfsec;
+
+	return 0;
+}
+
+static void selinux_perf_event_free(struct perf_event *event)
+{
+	struct perf_event_security_struct *perfsec = event->security;
+
+	event->security = NULL;
+	kfree(perfsec);
+}
+
+static int selinux_perf_event_read(struct perf_event *event)
+{
+	struct perf_event_security_struct *perfsec = event->security;
+	u32 sid = current_sid();
+
+	return avc_has_perm(&selinux_state, sid, perfsec->sid,
+			    SECCLASS_PERF_EVENT, PERF_EVENT__READ, NULL);
+}
+
+static int selinux_perf_event_write(struct perf_event *event)
+{
+	struct perf_event_security_struct *perfsec = event->security;
+	u32 sid = current_sid();
+
+	return avc_has_perm(&selinux_state, sid, perfsec->sid,
+			    SECCLASS_PERF_EVENT, PERF_EVENT__WRITE, NULL);
+}
+#endif
+
 static struct security_hook_list selinux_hooks[] __lsm_ro_after_init = {
 	LSM_HOOK_INIT(binder_set_context_mgr, selinux_binder_set_context_mgr),
 	LSM_HOOK_INIT(binder_transaction, selinux_binder_transaction),
@@ -7175,6 +7237,14 @@
 	LSM_HOOK_INIT(bpf_map_free_security, selinux_bpf_map_free),
 	LSM_HOOK_INIT(bpf_prog_free_security, selinux_bpf_prog_free),
 #endif
+
+#ifdef CONFIG_PERF_EVENTS
+	LSM_HOOK_INIT(perf_event_open, selinux_perf_event_open),
+	LSM_HOOK_INIT(perf_event_alloc, selinux_perf_event_alloc),
+	LSM_HOOK_INIT(perf_event_free, selinux_perf_event_free),
+	LSM_HOOK_INIT(perf_event_read, selinux_perf_event_read),
+	LSM_HOOK_INIT(perf_event_write, selinux_perf_event_write),
+#endif
 };
 
 static __init int selinux_init(void)
diff --git a/security/selinux/include/classmap.h b/security/selinux/include/classmap.h
index 201f7e5..06e836b 100644
--- a/security/selinux/include/classmap.h
+++ b/security/selinux/include/classmap.h
@@ -115,7 +115,7 @@
 	  { COMMON_IPC_PERMS, NULL } },
 	{ "netlink_route_socket",
 	  { COMMON_SOCK_PERMS,
-	    "nlmsg_read", "nlmsg_write", NULL } },
+	    "nlmsg_read", "nlmsg_write", "nlmsg_readpriv", NULL } },
 	{ "netlink_tcpdiag_socket",
 	  { COMMON_SOCK_PERMS,
 	    "nlmsg_read", "nlmsg_write", NULL } },
@@ -243,6 +243,8 @@
 	  {"map_create", "map_read", "map_write", "prog_load", "prog_run"} },
 	{ "xdp_socket",
 	  { COMMON_SOCK_PERMS, NULL } },
+	{ "perf_event",
+	  {"open", "cpu", "kernel", "tracepoint", "read", "write"} },
 	{ NULL }
   };
 
diff --git a/security/selinux/include/objsec.h b/security/selinux/include/objsec.h
index 4b0da5f..17901da 100644
--- a/security/selinux/include/objsec.h
+++ b/security/selinux/include/objsec.h
@@ -156,7 +156,11 @@
 };
 
 struct bpf_security_struct {
-	u32 sid;  /*SID of bpf obj creater*/
+	u32 sid;  /* SID of bpf obj creator */
+};
+
+struct perf_event_security_struct {
+	u32 sid;  /* SID of perf_event obj creator */
 };
 
 #endif /* _SELINUX_OBJSEC_H_ */
diff --git a/security/selinux/include/security.h b/security/selinux/include/security.h
index ba68c43..cf931d8 100644
--- a/security/selinux/include/security.h
+++ b/security/selinux/include/security.h
@@ -80,7 +80,7 @@
 };
 #define POLICYDB_CAPABILITY_MAX (__POLICYDB_CAPABILITY_MAX - 1)
 
-extern char *selinux_policycap_names[__POLICYDB_CAPABILITY_MAX];
+extern const char *selinux_policycap_names[__POLICYDB_CAPABILITY_MAX];
 
 /*
  * type_datum properties
@@ -103,6 +103,7 @@
 	bool checkreqprot;
 	bool initialized;
 	bool policycap[__POLICYDB_CAPABILITY_MAX];
+	bool android_netlink_route;
 	struct selinux_avc *avc;
 	struct selinux_ss *ss;
 };
@@ -175,6 +176,13 @@
 	return state->policycap[POLICYDB_CAPABILITY_NNP_NOSUID_TRANSITION];
 }
 
+static inline bool selinux_android_nlroute_getlink(void)
+{
+	struct selinux_state *state = &selinux_state;
+
+	return state->android_netlink_route;
+}
+
 int security_mls_enabled(struct selinux_state *state);
 int security_load_policy(struct selinux_state *state,
 			 void *data, size_t len);
@@ -389,5 +397,7 @@
 extern void avtab_cache_init(void);
 extern void ebitmap_cache_init(void);
 extern void hashtab_cache_init(void);
+extern int security_sidtab_hash_stats(struct selinux_state *state, char *page);
+extern void selinux_nlmsg_init(void);
 
 #endif /* _SELINUX_SECURITY_H_ */
diff --git a/security/selinux/nlmsgtab.c b/security/selinux/nlmsgtab.c
index 9cec812..5c42997 100644
--- a/security/selinux/nlmsgtab.c
+++ b/security/selinux/nlmsgtab.c
@@ -28,7 +28,7 @@
 	u32	perm;
 };
 
-static const struct nlmsg_perm nlmsg_route_perms[] =
+static struct nlmsg_perm nlmsg_route_perms[] =
 {
 	{ RTM_NEWLINK,		NETLINK_ROUTE_SOCKET__NLMSG_WRITE },
 	{ RTM_DELLINK,		NETLINK_ROUTE_SOCKET__NLMSG_WRITE },
@@ -206,3 +206,27 @@
 
 	return err;
 }
+
+static void nlmsg_set_getlink_perm(u32 perm)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(nlmsg_route_perms); i++) {
+		if (nlmsg_route_perms[i].nlmsg_type == RTM_GETLINK) {
+			nlmsg_route_perms[i].perm = perm;
+			break;
+		}
+	}
+}
+
+/**
+ * Use nlmsg_readpriv as the permission for RTM_GETLINK messages if the
+ * netlink_route_getlink policy capability is set. Otherwise use nlmsg_read.
+ */
+void selinux_nlmsg_init(void)
+{
+	if (selinux_android_nlroute_getlink())
+		nlmsg_set_getlink_perm(NETLINK_ROUTE_SOCKET__NLMSG_READPRIV);
+	else
+		nlmsg_set_getlink_perm(NETLINK_ROUTE_SOCKET__NLMSG_READ);
+}
diff --git a/security/selinux/selinuxfs.c b/security/selinux/selinuxfs.c
index f3a5a13..4e4114d 100644
--- a/security/selinux/selinuxfs.c
+++ b/security/selinux/selinuxfs.c
@@ -1487,6 +1487,32 @@
 	return length;
 }
 
+static ssize_t sel_read_sidtab_hash_stats(struct file *filp, char __user *buf,
+					size_t count, loff_t *ppos)
+{
+	struct selinux_fs_info *fsi = file_inode(filp)->i_sb->s_fs_info;
+	struct selinux_state *state = fsi->state;
+	char *page;
+	ssize_t length;
+
+	page = (char *)__get_free_page(GFP_KERNEL);
+	if (!page)
+		return -ENOMEM;
+
+	length = security_sidtab_hash_stats(state, page);
+	if (length >= 0)
+		length = simple_read_from_buffer(buf, count, ppos, page,
+						length);
+	free_page((unsigned long)page);
+
+	return length;
+}
+
+static const struct file_operations sel_sidtab_hash_stats_ops = {
+	.read		= sel_read_sidtab_hash_stats,
+	.llseek		= generic_file_llseek,
+};
+
 static const struct file_operations sel_avc_cache_threshold_ops = {
 	.read		= sel_read_avc_cache_threshold,
 	.write		= sel_write_avc_cache_threshold,
@@ -1604,6 +1630,37 @@
 	return 0;
 }
 
+static int sel_make_ss_files(struct dentry *dir)
+{
+	struct super_block *sb = dir->d_sb;
+	struct selinux_fs_info *fsi = sb->s_fs_info;
+	int i;
+	static struct tree_descr files[] = {
+		{ "sidtab_hash_stats", &sel_sidtab_hash_stats_ops, S_IRUGO },
+	};
+
+	for (i = 0; i < ARRAY_SIZE(files); i++) {
+		struct inode *inode;
+		struct dentry *dentry;
+
+		dentry = d_alloc_name(dir, files[i].name);
+		if (!dentry)
+			return -ENOMEM;
+
+		inode = sel_make_inode(dir->d_sb, S_IFREG|files[i].mode);
+		if (!inode) {
+			dput(dentry);
+			return -ENOMEM;
+		}
+
+		inode->i_fop = files[i].ops;
+		inode->i_ino = ++fsi->last_ino;
+		d_add(dentry, inode);
+	}
+
+	return 0;
+}
+
 static ssize_t sel_read_initcon(struct file *file, char __user *buf,
 				size_t count, loff_t *ppos)
 {
@@ -1968,6 +2025,14 @@
 	}
 
 	ret = sel_make_avc_files(dentry);
+
+	dentry = sel_make_dir(sb->s_root, "ss", &fsi->last_ino);
+	if (IS_ERR(dentry)) {
+		ret = PTR_ERR(dentry);
+		goto err;
+	}
+
+	ret = sel_make_ss_files(dentry);
 	if (ret)
 		goto err;
 
diff --git a/security/selinux/ss/context.h b/security/selinux/ss/context.h
index 2260c44..69fd194 100644
--- a/security/selinux/ss/context.h
+++ b/security/selinux/ss/context.h
@@ -31,6 +31,7 @@
 	u32 len;        /* length of string in bytes */
 	struct mls_range range;
 	char *str;	/* string representation if context cannot be mapped. */
+	u32 hash;	/* a hash of the string representation */
 };
 
 static inline void mls_context_init(struct context *c)
@@ -136,12 +137,13 @@
 		kfree(dst->str);
 		return rc;
 	}
+	dst->hash = src->hash;
 	return 0;
 }
 
 static inline void context_destroy(struct context *c)
 {
-	c->user = c->role = c->type = 0;
+	c->user = c->role = c->type = c->hash = 0;
 	kfree(c->str);
 	c->str = NULL;
 	c->len = 0;
@@ -150,6 +152,8 @@
 
 static inline int context_cmp(struct context *c1, struct context *c2)
 {
+	if (c1->hash && c2->hash && (c1->hash != c2->hash))
+		return 0;
 	if (c1->len && c2->len)
 		return (c1->len == c2->len && !strcmp(c1->str, c2->str));
 	if (c1->len || c2->len)
@@ -160,5 +164,10 @@
 		mls_context_cmp(c1, c2));
 }
 
+static inline unsigned int context_compute_hash(const char *s)
+{
+	return full_name_hash(NULL, s, strlen(s));
+}
+
 #endif	/* _SS_CONTEXT_H_ */
 
diff --git a/security/selinux/ss/mls.c b/security/selinux/ss/mls.c
index 39475fb..18ba0c2 100644
--- a/security/selinux/ss/mls.c
+++ b/security/selinux/ss/mls.c
@@ -218,9 +218,7 @@
 /*
  * Set the MLS fields in the security context structure
  * `context' based on the string representation in
- * the string `*scontext'.  Update `*scontext' to
- * point to the end of the string representation of
- * the MLS fields.
+ * the string `scontext'.
  *
  * This function modifies the string in place, inserting
  * NULL characters to terminate the MLS fields.
@@ -235,22 +233,21 @@
  */
 int mls_context_to_sid(struct policydb *pol,
 		       char oldc,
-		       char **scontext,
+		       char *scontext,
 		       struct context *context,
 		       struct sidtab *s,
 		       u32 def_sid)
 {
-
-	char delim;
-	char *scontextp, *p, *rngptr;
+	char *sensitivity, *cur_cat, *next_cat, *rngptr;
 	struct level_datum *levdatum;
 	struct cat_datum *catdatum, *rngdatum;
-	int l, rc = -EINVAL;
+	int l, rc, i;
+	char *rangep[2];
 
 	if (!pol->mls_enabled) {
-		if (def_sid != SECSID_NULL && oldc)
-			*scontext += strlen(*scontext) + 1;
-		return 0;
+		if ((def_sid != SECSID_NULL && oldc) || (*scontext) == '\0')
+			return 0;
+		return -EINVAL;
 	}
 
 	/*
@@ -261,113 +258,94 @@
 		struct context *defcon;
 
 		if (def_sid == SECSID_NULL)
-			goto out;
+			return -EINVAL;
 
 		defcon = sidtab_search(s, def_sid);
 		if (!defcon)
-			goto out;
+			return -EINVAL;
 
-		rc = mls_context_cpy(context, defcon);
-		goto out;
+		return mls_context_cpy(context, defcon);
 	}
 
-	/* Extract low sensitivity. */
-	scontextp = p = *scontext;
-	while (*p && *p != ':' && *p != '-')
-		p++;
+	/*
+	 * If we're dealing with a range, figure out where the two parts
+	 * of the range begin.
+	 */
+	rangep[0] = scontext;
+	rangep[1] = strchr(scontext, '-');
+	if (rangep[1]) {
+		rangep[1][0] = '\0';
+		rangep[1]++;
+	}
 
-	delim = *p;
-	if (delim != '\0')
-		*p++ = '\0';
-
+	/* For each part of the range: */
 	for (l = 0; l < 2; l++) {
-		levdatum = hashtab_search(pol->p_levels.table, scontextp);
-		if (!levdatum) {
-			rc = -EINVAL;
-			goto out;
-		}
+		/* Split sensitivity and category set. */
+		sensitivity = rangep[l];
+		if (sensitivity == NULL)
+			break;
+		next_cat = strchr(sensitivity, ':');
+		if (next_cat)
+			*(next_cat++) = '\0';
 
+		/* Parse sensitivity. */
+		levdatum = hashtab_search(pol->p_levels.table, sensitivity);
+		if (!levdatum)
+			return -EINVAL;
 		context->range.level[l].sens = levdatum->level->sens;
 
-		if (delim == ':') {
-			/* Extract category set. */
-			while (1) {
-				scontextp = p;
-				while (*p && *p != ',' && *p != '-')
-					p++;
-				delim = *p;
-				if (delim != '\0')
-					*p++ = '\0';
+		/* Extract category set. */
+		while (next_cat != NULL) {
+			cur_cat = next_cat;
+			next_cat = strchr(next_cat, ',');
+			if (next_cat != NULL)
+				*(next_cat++) = '\0';
 
-				/* Separate into range if exists */
-				rngptr = strchr(scontextp, '.');
-				if (rngptr != NULL) {
-					/* Remove '.' */
-					*rngptr++ = '\0';
-				}
+			/* Separate into range if exists */
+			rngptr = strchr(cur_cat, '.');
+			if (rngptr != NULL) {
+				/* Remove '.' */
+				*rngptr++ = '\0';
+			}
 
-				catdatum = hashtab_search(pol->p_cats.table,
-							  scontextp);
-				if (!catdatum) {
-					rc = -EINVAL;
-					goto out;
-				}
+			catdatum = hashtab_search(pol->p_cats.table, cur_cat);
+			if (!catdatum)
+				return -EINVAL;
 
-				rc = ebitmap_set_bit(&context->range.level[l].cat,
-						     catdatum->value - 1, 1);
+			rc = ebitmap_set_bit(&context->range.level[l].cat,
+					     catdatum->value - 1, 1);
+			if (rc)
+				return rc;
+
+			/* If range, set all categories in range */
+			if (rngptr == NULL)
+				continue;
+
+			rngdatum = hashtab_search(pol->p_cats.table, rngptr);
+			if (!rngdatum)
+				return -EINVAL;
+
+			if (catdatum->value >= rngdatum->value)
+				return -EINVAL;
+
+			for (i = catdatum->value; i < rngdatum->value; i++) {
+				rc = ebitmap_set_bit(&context->range.level[l].cat, i, 1);
 				if (rc)
-					goto out;
-
-				/* If range, set all categories in range */
-				if (rngptr) {
-					int i;
-
-					rngdatum = hashtab_search(pol->p_cats.table, rngptr);
-					if (!rngdatum) {
-						rc = -EINVAL;
-						goto out;
-					}
-
-					if (catdatum->value >= rngdatum->value) {
-						rc = -EINVAL;
-						goto out;
-					}
-
-					for (i = catdatum->value; i < rngdatum->value; i++) {
-						rc = ebitmap_set_bit(&context->range.level[l].cat, i, 1);
-						if (rc)
-							goto out;
-					}
-				}
-
-				if (delim != ',')
-					break;
+					return rc;
 			}
 		}
-		if (delim == '-') {
-			/* Extract high sensitivity. */
-			scontextp = p;
-			while (*p && *p != ':')
-				p++;
-
-			delim = *p;
-			if (delim != '\0')
-				*p++ = '\0';
-		} else
-			break;
 	}
 
-	if (l == 0) {
+	/* If we didn't see a '-', the range start is also the range end. */
+	if (rangep[1] == NULL) {
 		context->range.level[1].sens = context->range.level[0].sens;
 		rc = ebitmap_cpy(&context->range.level[1].cat,
 				 &context->range.level[0].cat);
 		if (rc)
-			goto out;
+			return rc;
 	}
-	*scontext = ++p;
-	rc = 0;
-out:
-	return rc;
+
+	return 0;
 }
 
 /*
@@ -379,21 +357,19 @@
 int mls_from_string(struct policydb *p, char *str, struct context *context,
 		    gfp_t gfp_mask)
 {
-	char *tmpstr, *freestr;
+	char *tmpstr;
 	int rc;
 
 	if (!p->mls_enabled)
 		return -EINVAL;
 
-	/* we need freestr because mls_context_to_sid will change
-	   the value of tmpstr */
-	tmpstr = freestr = kstrdup(str, gfp_mask);
+	tmpstr = kstrdup(str, gfp_mask);
 	if (!tmpstr) {
 		rc = -ENOMEM;
 	} else {
-		rc = mls_context_to_sid(p, ':', &tmpstr, context,
+		rc = mls_context_to_sid(p, ':', tmpstr, context,
 					NULL, SECSID_NULL);
-		kfree(freestr);
+		kfree(tmpstr);
 	}
 
 	return rc;
@@ -460,16 +436,17 @@
 
 /*
  * Convert the MLS fields in the security context
- * structure `c' from the values specified in the
- * policy `oldp' to the values specified in the policy `newp'.
+ * structure `oldc' from the values specified in the
+ * policy `oldp' to the values specified in the policy `newp',
+ * storing the resulting context in `newc'.
  */
 int mls_convert_context(struct policydb *oldp,
 			struct policydb *newp,
-			struct context *c)
+			struct context *oldc,
+			struct context *newc)
 {
 	struct level_datum *levdatum;
 	struct cat_datum *catdatum;
-	struct ebitmap bitmap;
 	struct ebitmap_node *node;
 	int l, i;
 
@@ -479,28 +456,25 @@
 	for (l = 0; l < 2; l++) {
 		levdatum = hashtab_search(newp->p_levels.table,
 					  sym_name(oldp, SYM_LEVELS,
-						   c->range.level[l].sens - 1));
+						   oldc->range.level[l].sens - 1));
 
 		if (!levdatum)
 			return -EINVAL;
-		c->range.level[l].sens = levdatum->level->sens;
+		newc->range.level[l].sens = levdatum->level->sens;
 
-		ebitmap_init(&bitmap);
-		ebitmap_for_each_positive_bit(&c->range.level[l].cat, node, i) {
+		ebitmap_for_each_positive_bit(&oldc->range.level[l].cat,
+					      node, i) {
 			int rc;
 
 			catdatum = hashtab_search(newp->p_cats.table,
 						  sym_name(oldp, SYM_CATS, i));
 			if (!catdatum)
 				return -EINVAL;
-			rc = ebitmap_set_bit(&bitmap, catdatum->value - 1, 1);
+			rc = ebitmap_set_bit(&newc->range.level[l].cat,
+					     catdatum->value - 1, 1);
 			if (rc)
 				return rc;
-
-			cond_resched();
 		}
-		ebitmap_destroy(&c->range.level[l].cat);
-		c->range.level[l].cat = bitmap;
 	}
 
 	return 0;
diff --git a/security/selinux/ss/mls.h b/security/selinux/ss/mls.h
index 9a3ff7a..7954b1e 100644
--- a/security/selinux/ss/mls.h
+++ b/security/selinux/ss/mls.h
@@ -34,7 +34,7 @@
 
 int mls_context_to_sid(struct policydb *p,
 		       char oldc,
-		       char **scontext,
+		       char *scontext,
 		       struct context *context,
 		       struct sidtab *s,
 		       u32 def_sid);
@@ -46,7 +46,8 @@
 
 int mls_convert_context(struct policydb *oldp,
 			struct policydb *newp,
-			struct context *context);
+			struct context *oldc,
+			struct context *newc);
 
 int mls_compute_sid(struct policydb *p,
 		    struct context *scontext,
diff --git a/security/selinux/ss/policydb.c b/security/selinux/ss/policydb.c
index 91d259c..9fc103c 100644
--- a/security/selinux/ss/policydb.c
+++ b/security/selinux/ss/policydb.c
@@ -914,13 +914,26 @@
 		if (!c->context[0].user) {
 			pr_err("SELinux:  SID %s was never defined.\n",
 				c->u.name);
+			sidtab_destroy(s);
+			goto out;
+		}
+		if (c->sid[0] == SECSID_NULL || c->sid[0] > SECINITSID_NUM) {
+			pr_err("SELinux:  Initial SID %s out of range.\n",
+				c->u.name);
+			sidtab_destroy(s);
+			goto out;
+		}
+		rc = context_add_hash(p, &c->context[0]);
+		if (rc) {
+			sidtab_destroy(s);
 			goto out;
 		}
 
-		rc = sidtab_insert(s, c->sid[0], &c->context[0]);
+		rc = sidtab_set_initial(s, c->sid[0], &c->context[0]);
 		if (rc) {
 			pr_err("SELinux:  unable to load initial SID %s.\n",
 				c->u.name);
+			sidtab_destroy(s);
 			goto out;
 		}
 	}
@@ -2387,6 +2400,10 @@
 	p->reject_unknown = !!(le32_to_cpu(buf[1]) & REJECT_UNKNOWN);
 	p->allow_unknown = !!(le32_to_cpu(buf[1]) & ALLOW_UNKNOWN);
 
+	if ((le32_to_cpu(buf[1]) & POLICYDB_CONFIG_ANDROID_NETLINK_ROUTE)) {
+		p->android_netlink_route = 1;
+	}
+
 	if (p->policyvers >= POLICYDB_VERSION_POLCAP) {
 		rc = ebitmap_read(&p->policycaps, fp);
 		if (rc)
diff --git a/security/selinux/ss/policydb.h b/security/selinux/ss/policydb.h
index 215f8f3..dbb0ed5 100644
--- a/security/selinux/ss/policydb.h
+++ b/security/selinux/ss/policydb.h
@@ -238,6 +238,7 @@
 /* The policy database */
 struct policydb {
 	int mls_enabled;
+	int android_netlink_route;
 
 	/* symbol tables */
 	struct symtab symtab[SYM_NUM];
@@ -324,6 +325,7 @@
 #define PERM_SYMTAB_SIZE 32
 
 #define POLICYDB_CONFIG_MLS    1
+#define POLICYDB_CONFIG_ANDROID_NETLINK_ROUTE    (1 << 31)
 
 /* the config flags related to unknown classes/perms are bits 2 and 3 */
 #define REJECT_UNKNOWN	0x00000002
diff --git a/security/selinux/ss/services.c b/security/selinux/ss/services.c
index f3def29..9a13c78 100644
--- a/security/selinux/ss/services.c
+++ b/security/selinux/ss/services.c
@@ -71,7 +71,7 @@
 #include "audit.h"
 
 /* Policy capability names */
-char *selinux_policycap_names[__POLICYDB_CAPABILITY_MAX] = {
+const char *selinux_policycap_names[__POLICYDB_CAPABILITY_MAX] = {
 	"network_peer_controls",
 	"open_perms",
 	"extended_socket_class",
@@ -776,7 +776,7 @@
 	read_lock(&state->ss->policy_rwlock);
 
 	policydb = &state->ss->policydb;
-	sidtab = &state->ss->sidtab;
+	sidtab = state->ss->sidtab;
 
 	if (!user)
 		tclass = unmap_class(&state->ss->map, orig_tclass);
@@ -876,7 +876,7 @@
 	read_lock(&state->ss->policy_rwlock);
 
 	policydb = &state->ss->policydb;
-	sidtab = &state->ss->sidtab;
+	sidtab = state->ss->sidtab;
 
 	rc = -EINVAL;
 	old_context = sidtab_search(sidtab, old_sid);
@@ -1034,7 +1034,7 @@
 		goto allow;
 
 	policydb = &state->ss->policydb;
-	sidtab = &state->ss->sidtab;
+	sidtab = state->ss->sidtab;
 
 	scontext = sidtab_search(sidtab, ssid);
 	if (!scontext) {
@@ -1123,7 +1123,7 @@
 		goto allow;
 
 	policydb = &state->ss->policydb;
-	sidtab = &state->ss->sidtab;
+	sidtab = state->ss->sidtab;
 
 	scontext = sidtab_search(sidtab, ssid);
 	if (!scontext) {
@@ -1177,7 +1177,7 @@
 		goto allow;
 
 	policydb = &state->ss->policydb;
-	sidtab = &state->ss->sidtab;
+	sidtab = state->ss->sidtab;
 
 	scontext = sidtab_search(sidtab, ssid);
 	if (!scontext) {
@@ -1272,6 +1272,17 @@
 
 #include "initial_sid_to_string.h"
 
+int security_sidtab_hash_stats(struct selinux_state *state, char *page)
+{
+	int rc;
+
+	read_lock(&state->ss->policy_rwlock);
+	rc = sidtab_hash_stats(state->ss->sidtab, page);
+	read_unlock(&state->ss->policy_rwlock);
+
+	return rc;
+}
+
 const char *security_get_initial_sid_context(u32 sid)
 {
 	if (unlikely(sid > SECINITSID_NUM))
@@ -1315,7 +1326,7 @@
 	}
 	read_lock(&state->ss->policy_rwlock);
 	policydb = &state->ss->policydb;
-	sidtab = &state->ss->sidtab;
+	sidtab = state->ss->sidtab;
 	if (force)
 		context = sidtab_search_force(sidtab, sid);
 	else
@@ -1365,7 +1376,6 @@
 static int string_to_context_struct(struct policydb *pol,
 				    struct sidtab *sidtabp,
 				    char *scontext,
-				    u32 scontext_len,
 				    struct context *ctx,
 				    u32 def_sid)
 {
@@ -1426,15 +1436,12 @@
 
 	ctx->type = typdatum->value;
 
-	rc = mls_context_to_sid(pol, oldc, &p, ctx, sidtabp, def_sid);
+	rc = mls_context_to_sid(pol, oldc, p, ctx, sidtabp, def_sid);
 	if (rc)
 		goto out;
 
-	rc = -EINVAL;
-	if ((p - scontext) < scontext_len)
-		goto out;
-
 	/* Check the validity of the new context. */
+	rc = -EINVAL;
 	if (!policydb_context_isvalid(pol, ctx))
 		goto out;
 	rc = 0;
@@ -1444,6 +1451,42 @@
 	return rc;
 }
 
+int context_add_hash(struct policydb *policydb,
+		     struct context *context)
+{
+	int rc;
+	char *str;
+	int len;
+
+	if (context->str) {
+		context->hash = context_compute_hash(context->str);
+	} else {
+		rc = context_struct_to_string(policydb, context,
+					      &str, &len);
+		if (rc)
+			return rc;
+		context->hash = context_compute_hash(str);
+		kfree(str);
+	}
+	return 0;
+}
+
+static int context_struct_to_sid(struct selinux_state *state,
+				 struct context *context, u32 *sid)
+{
+	int rc;
+	struct sidtab *sidtab = state->ss->sidtab;
+	struct policydb *policydb = &state->ss->policydb;
+
+	if (!context->hash) {
+		rc = context_add_hash(policydb, context);
+		if (rc)
+			return rc;
+	}
+
+	return sidtab_context_to_sid(sidtab, context, sid);
+}
+
 static int security_context_to_sid_core(struct selinux_state *state,
 					const char *scontext, u32 scontext_len,
 					u32 *sid, u32 def_sid, gfp_t gfp_flags,
@@ -1487,16 +1530,16 @@
 	}
 	read_lock(&state->ss->policy_rwlock);
 	policydb = &state->ss->policydb;
-	sidtab = &state->ss->sidtab;
+	sidtab = state->ss->sidtab;
 	rc = string_to_context_struct(policydb, sidtab, scontext2,
-				      scontext_len, &context, def_sid);
+				      &context, def_sid);
 	if (rc == -EINVAL && force) {
 		context.str = str;
 		context.len = strlen(str) + 1;
 		str = NULL;
 	} else if (rc)
 		goto out_unlock;
-	rc = sidtab_context_to_sid(sidtab, &context, sid);
+	rc = context_struct_to_sid(state, &context, sid);
 	context_destroy(&context);
 out_unlock:
 	read_unlock(&state->ss->policy_rwlock);
@@ -1672,7 +1715,7 @@
 	}
 
 	policydb = &state->ss->policydb;
-	sidtab = &state->ss->sidtab;
+	sidtab = state->ss->sidtab;
 
 	scontext = sidtab_search(sidtab, ssid);
 	if (!scontext) {
@@ -1797,7 +1840,7 @@
 			goto out_unlock;
 	}
 	/* Obtain the sid for the context. */
-	rc = sidtab_context_to_sid(sidtab, &newcontext, out_sid);
+	rc = context_struct_to_sid(state, &newcontext, out_sid);
 out_unlock:
 	read_unlock(&state->ss->policy_rwlock);
 	context_destroy(&newcontext);
@@ -1884,19 +1927,6 @@
 				    out_sid, false);
 }
 
-/* Clone the SID into the new SID table. */
-static int clone_sid(u32 sid,
-		     struct context *context,
-		     void *arg)
-{
-	struct sidtab *s = arg;
-
-	if (sid > SECINITSID_NUM)
-		return sidtab_insert(s, sid, context);
-	else
-		return 0;
-}
-
 static inline int convert_context_handle_invalid_context(
 	struct selinux_state *state,
 	struct context *context)
@@ -1924,101 +1954,92 @@
 
 /*
  * Convert the values in the security context
- * structure `c' from the values specified
+ * structure `oldc' from the values specified
  * in the policy `p->oldp' to the values specified
- * in the policy `p->newp'.  Verify that the
- * context is valid under the new policy.
+ * in the policy `p->newp', storing the new context
+ * in `newc'.  Verify that the context is valid
+ * under the new policy.
  */
-static int convert_context(u32 key,
-			   struct context *c,
-			   void *p)
+static int convert_context(struct context *oldc, struct context *newc, void *p)
 {
 	struct convert_context_args *args;
-	struct context oldc;
 	struct ocontext *oc;
-	struct mls_range *range;
 	struct role_datum *role;
 	struct type_datum *typdatum;
 	struct user_datum *usrdatum;
 	char *s;
 	u32 len;
-	int rc = 0;
-
-	if (key <= SECINITSID_NUM)
-		goto out;
+	int rc;
 
 	args = p;
 
-	if (c->str) {
-		struct context ctx;
-
-		rc = -ENOMEM;
-		s = kstrdup(c->str, GFP_KERNEL);
+	if (oldc->str) {
+		s = kstrdup(oldc->str, GFP_KERNEL);
 		if (!s)
-			goto out;
+			return -ENOMEM;
 
 		rc = string_to_context_struct(args->newp, NULL, s,
-					      c->len, &ctx, SECSID_NULL);
+					      newc, SECSID_NULL);
+		if (rc == -EINVAL) {
+			/*
+			 * Retain string representation for later mapping.
+			 *
+			 * IMPORTANT: We need to copy the contents of oldc->str
+			 * back into s again because string_to_context_struct()
+			 * may have garbled it.
+			 */
+			memcpy(s, oldc->str, oldc->len);
+			context_init(newc);
+			newc->str = s;
+			newc->len = oldc->len;
+			newc->hash = oldc->hash;
+			return 0;
+		}
 		kfree(s);
-		if (!rc) {
-			pr_info("SELinux:  Context %s became valid (mapped).\n",
-			       c->str);
-			/* Replace string with mapped representation. */
-			kfree(c->str);
-			memcpy(c, &ctx, sizeof(*c));
-			goto out;
-		} else if (rc == -EINVAL) {
-			/* Retain string representation for later mapping. */
-			rc = 0;
-			goto out;
-		} else {
+		if (rc) {
 			/* Other error condition, e.g. ENOMEM. */
 			pr_err("SELinux:   Unable to map context %s, rc = %d.\n",
-			       c->str, -rc);
-			goto out;
+			       oldc->str, -rc);
+			return rc;
 		}
+		pr_info("SELinux:  Context %s became valid (mapped).\n",
+			oldc->str);
+		return 0;
 	}
 
-	rc = context_cpy(&oldc, c);
-	if (rc)
-		goto out;
+	context_init(newc);
 
 	/* Convert the user. */
 	rc = -EINVAL;
 	usrdatum = hashtab_search(args->newp->p_users.table,
-				  sym_name(args->oldp, SYM_USERS, c->user - 1));
+				  sym_name(args->oldp,
+					   SYM_USERS, oldc->user - 1));
 	if (!usrdatum)
 		goto bad;
-	c->user = usrdatum->value;
+	newc->user = usrdatum->value;
 
 	/* Convert the role. */
 	rc = -EINVAL;
 	role = hashtab_search(args->newp->p_roles.table,
-			      sym_name(args->oldp, SYM_ROLES, c->role - 1));
+			      sym_name(args->oldp, SYM_ROLES, oldc->role - 1));
 	if (!role)
 		goto bad;
-	c->role = role->value;
+	newc->role = role->value;
 
 	/* Convert the type. */
 	rc = -EINVAL;
 	typdatum = hashtab_search(args->newp->p_types.table,
-				  sym_name(args->oldp, SYM_TYPES, c->type - 1));
+				  sym_name(args->oldp,
+					   SYM_TYPES, oldc->type - 1));
 	if (!typdatum)
 		goto bad;
-	c->type = typdatum->value;
+	newc->type = typdatum->value;
 
 	/* Convert the MLS fields if dealing with MLS policies */
 	if (args->oldp->mls_enabled && args->newp->mls_enabled) {
-		rc = mls_convert_context(args->oldp, args->newp, c);
+		rc = mls_convert_context(args->oldp, args->newp, oldc, newc);
 		if (rc)
 			goto bad;
-	} else if (args->oldp->mls_enabled && !args->newp->mls_enabled) {
-		/*
-		 * Switching between MLS and non-MLS policy:
-		 * free any storage used by the MLS fields in the
-		 * context for all existing entries in the sidtab.
-		 */
-		mls_context_destroy(c);
 	} else if (!args->oldp->mls_enabled && args->newp->mls_enabled) {
 		/*
 		 * Switching between non-MLS and MLS policy:
@@ -2036,38 +2057,35 @@
 				" the initial SIDs list\n");
 			goto bad;
 		}
-		range = &oc->context[0].range;
-		rc = mls_range_set(c, range);
+		rc = mls_range_set(newc, &oc->context[0].range);
 		if (rc)
 			goto bad;
 	}
 
 	/* Check the validity of the new context. */
-	if (!policydb_context_isvalid(args->newp, c)) {
-		rc = convert_context_handle_invalid_context(args->state,
-							    &oldc);
+	if (!policydb_context_isvalid(args->newp, newc)) {
+		rc = convert_context_handle_invalid_context(args->state, oldc);
 		if (rc)
 			goto bad;
 	}
 
-	context_destroy(&oldc);
+	rc = context_add_hash(args->newp, newc);
+	if (rc)
+		goto bad;
 
-	rc = 0;
-out:
-	return rc;
+	return 0;
 bad:
 	/* Map old representation to string and save it. */
-	rc = context_struct_to_string(args->oldp, &oldc, &s, &len);
+	rc = context_struct_to_string(args->oldp, oldc, &s, &len);
 	if (rc)
 		return rc;
-	context_destroy(&oldc);
-	context_destroy(c);
-	c->str = s;
-	c->len = len;
+	context_destroy(newc);
+	newc->str = s;
+	newc->len = len;
+	newc->hash = context_compute_hash(s);
 	pr_info("SELinux:  Context %s became invalid (unmapped).\n",
-	       c->str);
-	rc = 0;
-	goto out;
+		newc->str);
+	return 0;
 }
 
 static void security_load_policycaps(struct selinux_state *state)
@@ -2089,6 +2107,9 @@
 			pr_info("SELinux:  unknown policy capability %u\n",
 				i);
 	}
+
+	state->android_netlink_route = p->android_netlink_route;
+	selinux_nlmsg_init();
 }
 
 static int security_preserve_bools(struct selinux_state *state,
@@ -2107,11 +2128,11 @@
 int security_load_policy(struct selinux_state *state, void *data, size_t len)
 {
 	struct policydb *policydb;
-	struct sidtab *sidtab;
+	struct sidtab *oldsidtab, *newsidtab;
 	struct policydb *oldpolicydb, *newpolicydb;
-	struct sidtab oldsidtab, newsidtab;
 	struct selinux_mapping *oldmapping;
 	struct selinux_map newmap;
+	struct sidtab_convert_params convert_params;
 	struct convert_context_args args;
 	u32 seqno;
 	int rc = 0;
@@ -2125,27 +2146,37 @@
 	newpolicydb = oldpolicydb + 1;
 
 	policydb = &state->ss->policydb;
-	sidtab = &state->ss->sidtab;
+
+	newsidtab = kmalloc(sizeof(*newsidtab), GFP_KERNEL);
+	if (!newsidtab) {
+		rc = -ENOMEM;
+		goto out;
+	}
 
 	if (!state->initialized) {
 		rc = policydb_read(policydb, fp);
-		if (rc)
+		if (rc) {
+			kfree(newsidtab);
 			goto out;
+		}
 
 		policydb->len = len;
 		rc = selinux_set_mapping(policydb, secclass_map,
 					 &state->ss->map);
 		if (rc) {
+			kfree(newsidtab);
 			policydb_destroy(policydb);
 			goto out;
 		}
 
-		rc = policydb_load_isids(policydb, sidtab);
+		rc = policydb_load_isids(policydb, newsidtab);
 		if (rc) {
+			kfree(newsidtab);
 			policydb_destroy(policydb);
 			goto out;
 		}
 
+		state->ss->sidtab = newsidtab;
 		security_load_policycaps(state);
 		state->initialized = 1;
 		seqno = ++state->ss->latest_granting;
@@ -2158,13 +2189,11 @@
 		goto out;
 	}
 
-#if 0
-	sidtab_hash_eval(sidtab, "sids");
-#endif
-
 	rc = policydb_read(newpolicydb, fp);
-	if (rc)
+	if (rc) {
+		kfree(newsidtab);
 		goto out;
+	}
 
 	newpolicydb->len = len;
 	/* If switching between different policy types, log MLS status */
@@ -2173,10 +2202,11 @@
 	else if (!policydb->mls_enabled && newpolicydb->mls_enabled)
 		pr_info("SELinux: Enabling MLS support...\n");
 
-	rc = policydb_load_isids(newpolicydb, &newsidtab);
+	rc = policydb_load_isids(newpolicydb, newsidtab);
 	if (rc) {
 		pr_err("SELinux:  unable to load the initial SIDs\n");
 		policydb_destroy(newpolicydb);
+		kfree(newsidtab);
 		goto out;
 	}
 
@@ -2190,12 +2220,7 @@
 		goto err;
 	}
 
-	/* Clone the SID table. */
-	sidtab_shutdown(sidtab);
-
-	rc = sidtab_map(sidtab, clone_sid, &newsidtab);
-	if (rc)
-		goto err;
+	oldsidtab = state->ss->sidtab;
 
 	/*
 	 * Convert the internal representations of contexts
@@ -2204,7 +2229,12 @@
 	args.state = state;
 	args.oldp = policydb;
 	args.newp = newpolicydb;
-	rc = sidtab_map(&newsidtab, convert_context, &args);
+
+	convert_params.func = convert_context;
+	convert_params.args = &args;
+	convert_params.target = newsidtab;
+
+	rc = sidtab_convert(oldsidtab, &convert_params);
 	if (rc) {
 		pr_err("SELinux:  unable to convert the internal"
 			" representation of contexts in the new SID"
@@ -2214,12 +2244,11 @@
 
 	/* Save the old policydb and SID table to free later. */
 	memcpy(oldpolicydb, policydb, sizeof(*policydb));
-	sidtab_set(&oldsidtab, sidtab);
 
 	/* Install the new policydb and SID table. */
 	write_lock_irq(&state->ss->policy_rwlock);
 	memcpy(policydb, newpolicydb, sizeof(*policydb));
-	sidtab_set(sidtab, &newsidtab);
+	state->ss->sidtab = newsidtab;
 	security_load_policycaps(state);
 	oldmapping = state->ss->map.mapping;
 	state->ss->map.mapping = newmap.mapping;
@@ -2229,7 +2258,8 @@
 
 	/* Free the old policydb and SID table. */
 	policydb_destroy(oldpolicydb);
-	sidtab_destroy(&oldsidtab);
+	sidtab_destroy(oldsidtab);
+	kfree(oldsidtab);
 	kfree(oldmapping);
 
 	avc_ss_reset(state->avc, seqno);
@@ -2243,7 +2273,8 @@
 
 err:
 	kfree(newmap.mapping);
-	sidtab_destroy(&newsidtab);
+	sidtab_destroy(newsidtab);
+	kfree(newsidtab);
 	policydb_destroy(newpolicydb);
 
 out:
@@ -2280,7 +2311,7 @@
 	read_lock(&state->ss->policy_rwlock);
 
 	policydb = &state->ss->policydb;
-	sidtab = &state->ss->sidtab;
+	sidtab = state->ss->sidtab;
 
 	c = policydb->ocontexts[OCON_PORT];
 	while (c) {
@@ -2293,8 +2324,7 @@
 
 	if (c) {
 		if (!c->sid[0]) {
-			rc = sidtab_context_to_sid(sidtab,
-						   &c->context[0],
+			rc = context_struct_to_sid(state, &c->context[0],
 						   &c->sid[0]);
 			if (rc)
 				goto out;
@@ -2319,14 +2349,12 @@
 			 u64 subnet_prefix, u16 pkey_num, u32 *out_sid)
 {
 	struct policydb *policydb;
-	struct sidtab *sidtab;
 	struct ocontext *c;
 	int rc = 0;
 
 	read_lock(&state->ss->policy_rwlock);
 
 	policydb = &state->ss->policydb;
-	sidtab = &state->ss->sidtab;
 
 	c = policydb->ocontexts[OCON_IBPKEY];
 	while (c) {
@@ -2340,7 +2368,7 @@
 
 	if (c) {
 		if (!c->sid[0]) {
-			rc = sidtab_context_to_sid(sidtab,
+			rc = context_struct_to_sid(state,
 						   &c->context[0],
 						   &c->sid[0]);
 			if (rc)
@@ -2372,7 +2400,7 @@
 	read_lock(&state->ss->policy_rwlock);
 
 	policydb = &state->ss->policydb;
-	sidtab = &state->ss->sidtab;
+	sidtab = state->ss->sidtab;
 
 	c = policydb->ocontexts[OCON_IBENDPORT];
 	while (c) {
@@ -2387,8 +2415,7 @@
 
 	if (c) {
 		if (!c->sid[0]) {
-			rc = sidtab_context_to_sid(sidtab,
-						   &c->context[0],
+			rc = context_struct_to_sid(state, &c->context[0],
 						   &c->sid[0]);
 			if (rc)
 				goto out;
@@ -2418,7 +2445,7 @@
 	read_lock(&state->ss->policy_rwlock);
 
 	policydb = &state->ss->policydb;
-	sidtab = &state->ss->sidtab;
+	sidtab = state->ss->sidtab;
 
 	c = policydb->ocontexts[OCON_NETIF];
 	while (c) {
@@ -2429,13 +2456,11 @@
 
 	if (c) {
 		if (!c->sid[0] || !c->sid[1]) {
-			rc = sidtab_context_to_sid(sidtab,
-						  &c->context[0],
-						  &c->sid[0]);
+			rc = context_struct_to_sid(state, &c->context[0],
+						   &c->sid[0]);
 			if (rc)
 				goto out;
-			rc = sidtab_context_to_sid(sidtab,
-						   &c->context[1],
+			rc = context_struct_to_sid(state, &c->context[1],
 						   &c->sid[1]);
 			if (rc)
 				goto out;
@@ -2476,14 +2501,12 @@
 		      u32 *out_sid)
 {
 	struct policydb *policydb;
-	struct sidtab *sidtab;
 	int rc;
 	struct ocontext *c;
 
 	read_lock(&state->ss->policy_rwlock);
 
 	policydb = &state->ss->policydb;
-	sidtab = &state->ss->sidtab;
 
 	switch (domain) {
 	case AF_INET: {
@@ -2525,7 +2548,7 @@
 
 	if (c) {
 		if (!c->sid[0]) {
-			rc = sidtab_context_to_sid(sidtab,
+			rc = context_struct_to_sid(state,
 						   &c->context[0],
 						   &c->sid[0]);
 			if (rc)
@@ -2583,7 +2606,7 @@
 	read_lock(&state->ss->policy_rwlock);
 
 	policydb = &state->ss->policydb;
-	sidtab = &state->ss->sidtab;
+	sidtab = state->ss->sidtab;
 
 	context_init(&usercon);
 
@@ -2609,12 +2632,17 @@
 		usercon.role = i + 1;
 		ebitmap_for_each_positive_bit(&role->types, tnode, j) {
 			usercon.type = j + 1;
+			/*
+			 * The same context struct is reused here so the hash
+			 * must be reset.
+			 */
+			usercon.hash = 0;
 
 			if (mls_setup_user_range(policydb, fromcon, user,
 						 &usercon))
 				continue;
 
-			rc = sidtab_context_to_sid(sidtab, &usercon, &sid);
+			rc = context_struct_to_sid(state, &usercon, &sid);
 			if (rc)
 				goto out_unlock;
 			if (mynel < maxnel) {
@@ -2685,7 +2713,6 @@
 				       u32 *sid)
 {
 	struct policydb *policydb = &state->ss->policydb;
-	struct sidtab *sidtab = &state->ss->sidtab;
 	int len;
 	u16 sclass;
 	struct genfs *genfs;
@@ -2720,7 +2747,7 @@
 		goto out;
 
 	if (!c->sid[0]) {
-		rc = sidtab_context_to_sid(sidtab, &c->context[0], &c->sid[0]);
+		rc = context_struct_to_sid(state, &c->context[0], &c->sid[0]);
 		if (rc)
 			goto out;
 	}
@@ -2771,7 +2798,7 @@
 	read_lock(&state->ss->policy_rwlock);
 
 	policydb = &state->ss->policydb;
-	sidtab = &state->ss->sidtab;
+	sidtab = state->ss->sidtab;
 
 	c = policydb->ocontexts[OCON_FSUSE];
 	while (c) {
@@ -2783,7 +2810,7 @@
 	if (c) {
 		sbsec->behavior = c->v.behavior;
 		if (!c->sid[0]) {
-			rc = sidtab_context_to_sid(sidtab, &c->context[0],
+			rc = context_struct_to_sid(state, &c->context[0],
 						   &c->sid[0]);
 			if (rc)
 				goto out;
@@ -2977,7 +3004,7 @@
 			  u32 sid, u32 mls_sid, u32 *new_sid)
 {
 	struct policydb *policydb = &state->ss->policydb;
-	struct sidtab *sidtab = &state->ss->sidtab;
+	struct sidtab *sidtab = state->ss->sidtab;
 	struct context *context1;
 	struct context *context2;
 	struct context newcon;
@@ -3033,8 +3060,7 @@
 			goto out_unlock;
 		}
 	}
-
-	rc = sidtab_context_to_sid(sidtab, &newcon, new_sid);
+	rc = context_struct_to_sid(state, &newcon, new_sid);
 out_unlock:
 	read_unlock(&state->ss->policy_rwlock);
 	context_destroy(&newcon);
@@ -3068,7 +3094,7 @@
 				 u32 *peer_sid)
 {
 	struct policydb *policydb = &state->ss->policydb;
-	struct sidtab *sidtab = &state->ss->sidtab;
+	struct sidtab *sidtab = state->ss->sidtab;
 	int rc;
 	struct context *nlbl_ctx;
 	struct context *xfrm_ctx;
@@ -3429,7 +3455,7 @@
 		goto out;
 	}
 
-	ctxt = sidtab_search(&state->ss->sidtab, sid);
+	ctxt = sidtab_search(state->ss->sidtab, sid);
 	if (unlikely(!ctxt)) {
 		WARN_ONCE(1, "selinux_audit_rule_match: unrecognized SID %d\n",
 			  sid);
@@ -3592,7 +3618,7 @@
 				   u32 *sid)
 {
 	struct policydb *policydb = &state->ss->policydb;
-	struct sidtab *sidtab = &state->ss->sidtab;
+	struct sidtab *sidtab = state->ss->sidtab;
 	int rc;
 	struct context *ctx;
 	struct context ctx_new;
@@ -3628,7 +3654,7 @@
 		if (!mls_context_isvalid(policydb, &ctx_new))
 			goto out_free;
 
-		rc = sidtab_context_to_sid(sidtab, &ctx_new, sid);
+		rc = context_struct_to_sid(state, &ctx_new, sid);
 		if (rc)
 			goto out_free;
 
@@ -3670,7 +3696,7 @@
 	read_lock(&state->ss->policy_rwlock);
 
 	rc = -ENOENT;
-	ctx = sidtab_search(&state->ss->sidtab, sid);
+	ctx = sidtab_search(state->ss->sidtab, sid);
 	if (ctx == NULL)
 		goto out;
 
diff --git a/security/selinux/ss/services.h b/security/selinux/ss/services.h
index 24c7bdc..fc40640 100644
--- a/security/selinux/ss/services.h
+++ b/security/selinux/ss/services.h
@@ -8,7 +8,7 @@
 #define _SS_SERVICES_H_
 
 #include "policydb.h"
-#include "sidtab.h"
+#include "context.h"
 
 /* Mapping for a single class */
 struct selinux_mapping {
@@ -24,7 +24,7 @@
 };
 
 struct selinux_ss {
-	struct sidtab sidtab;
+	struct sidtab *sidtab;
 	struct policydb policydb;
 	rwlock_t policy_rwlock;
 	u32 latest_granting;
@@ -39,4 +39,6 @@
 void services_compute_xperms_decision(struct extended_perms_decision *xpermd,
 					struct avtab_node *node);
 
+int context_add_hash(struct policydb *policydb, struct context *context);
+
 #endif	/* _SS_SERVICES_H_ */
diff --git a/security/selinux/ss/sidtab.c b/security/selinux/ss/sidtab.c
index fd75a12..d9d8599 100644
--- a/security/selinux/ss/sidtab.c
+++ b/security/selinux/ss/sidtab.c
@@ -2,108 +2,226 @@
 /*
  * Implementation of the SID table type.
  *
- * Author : Stephen Smalley, <sds@tycho.nsa.gov>
+ * Original author: Stephen Smalley, <sds@tycho.nsa.gov>
+ * Author: Ondrej Mosnacek, <omosnacek@gmail.com>
+ *
+ * Copyright (C) 2018 Red Hat, Inc.
  */
+#include <linux/errno.h>
 #include <linux/kernel.h>
 #include <linux/slab.h>
+#include <linux/sched.h>
 #include <linux/spinlock.h>
-#include <linux/errno.h>
+#include <asm/barrier.h>
 #include "flask.h"
 #include "security.h"
 #include "sidtab.h"
 
-#define SIDTAB_HASH(sid) \
-(sid & SIDTAB_HASH_MASK)
+#define index_to_sid(index) (index + SECINITSID_NUM + 1)
+#define sid_to_index(sid) (sid - (SECINITSID_NUM + 1))
 
 int sidtab_init(struct sidtab *s)
 {
-	int i;
+	u32 i;
 
-	s->htable = kmalloc_array(SIDTAB_SIZE, sizeof(*s->htable), GFP_ATOMIC);
-	if (!s->htable)
-		return -ENOMEM;
-	for (i = 0; i < SIDTAB_SIZE; i++)
-		s->htable[i] = NULL;
-	s->nel = 0;
-	s->next_sid = 1;
-	s->shutdown = 0;
+	memset(s->roots, 0, sizeof(s->roots));
+
+	for (i = 0; i < SECINITSID_NUM; i++)
+		s->isids[i].set = 0;
+
+	s->count = 0;
+	s->convert = NULL;
+	hash_init(s->context_to_sid);
+
 	spin_lock_init(&s->lock);
 	return 0;
 }
 
-int sidtab_insert(struct sidtab *s, u32 sid, struct context *context)
+static u32 context_to_sid(struct sidtab *s, struct context *context)
 {
-	int hvalue;
-	struct sidtab_node *prev, *cur, *newnode;
+	struct sidtab_entry_leaf *entry;
+	u32 sid = 0;
 
-	if (!s)
-		return -ENOMEM;
+	rcu_read_lock();
+	hash_for_each_possible_rcu(s->context_to_sid, entry, list,
+				   context->hash) {
+		if (context_cmp(&entry->context, context)) {
+			sid = entry->sid;
+			break;
+		}
+	}
+	rcu_read_unlock();
+	return sid;
+}
 
-	hvalue = SIDTAB_HASH(sid);
-	prev = NULL;
-	cur = s->htable[hvalue];
-	while (cur && sid > cur->sid) {
-		prev = cur;
-		cur = cur->next;
+int sidtab_set_initial(struct sidtab *s, u32 sid, struct context *context)
+{
+	struct sidtab_isid_entry *entry;
+	int rc;
+
+	if (sid == 0 || sid > SECINITSID_NUM)
+		return -EINVAL;
+
+	entry = &s->isids[sid - 1];
+
+	rc = context_cpy(&entry->leaf.context, context);
+	if (rc)
+		return rc;
+
+	entry->set = 1;
+
+	/*
+	 * Multiple initial sids may map to the same context. Check that this
+	 * context is not already represented in the context_to_sid hashtable
+	 * to avoid duplicate entries and long linked lists upon hash
+	 * collision.
+	 */
+	if (!context_to_sid(s, context)) {
+		entry->leaf.sid = sid;
+		hash_add(s->context_to_sid, &entry->leaf.list, context->hash);
 	}
 
-	if (cur && sid == cur->sid)
-		return -EEXIST;
-
-	newnode = kmalloc(sizeof(*newnode), GFP_ATOMIC);
-	if (!newnode)
-		return -ENOMEM;
-
-	newnode->sid = sid;
-	if (context_cpy(&newnode->context, context)) {
-		kfree(newnode);
-		return -ENOMEM;
-	}
-
-	if (prev) {
-		newnode->next = prev->next;
-		wmb();
-		prev->next = newnode;
-	} else {
-		newnode->next = s->htable[hvalue];
-		wmb();
-		s->htable[hvalue] = newnode;
-	}
-
-	s->nel++;
-	if (sid >= s->next_sid)
-		s->next_sid = sid + 1;
 	return 0;
 }
 
+int sidtab_hash_stats(struct sidtab *sidtab, char *page)
+{
+	int i;
+	int chain_len = 0;
+	int slots_used = 0;
+	int entries = 0;
+	int max_chain_len = 0;
+	int cur_bucket = 0;
+	struct sidtab_entry_leaf *entry;
+
+	rcu_read_lock();
+	hash_for_each_rcu(sidtab->context_to_sid, i, entry, list) {
+		entries++;
+		if (i == cur_bucket) {
+			chain_len++;
+			if (chain_len == 1)
+				slots_used++;
+		} else {
+			cur_bucket = i;
+			if (chain_len > max_chain_len)
+				max_chain_len = chain_len;
+			chain_len = 0;
+		}
+	}
+	rcu_read_unlock();
+
+	if (chain_len > max_chain_len)
+		max_chain_len = chain_len;
+
+	return scnprintf(page, PAGE_SIZE, "entries: %d\nbuckets used: %d/%d\n"
+			 "longest chain: %d\n", entries,
+			 slots_used, SIDTAB_HASH_BUCKETS, max_chain_len);
+}
+
+static u32 sidtab_level_from_count(u32 count)
+{
+	u32 capacity = SIDTAB_LEAF_ENTRIES;
+	u32 level = 0;
+
+	while (count > capacity) {
+		capacity <<= SIDTAB_INNER_SHIFT;
+		++level;
+	}
+	return level;
+}
+
+static int sidtab_alloc_roots(struct sidtab *s, u32 level)
+{
+	u32 l;
+
+	if (!s->roots[0].ptr_leaf) {
+		s->roots[0].ptr_leaf = kzalloc(SIDTAB_NODE_ALLOC_SIZE,
+					       GFP_ATOMIC);
+		if (!s->roots[0].ptr_leaf)
+			return -ENOMEM;
+	}
+	for (l = 1; l <= level; ++l)
+		if (!s->roots[l].ptr_inner) {
+			s->roots[l].ptr_inner = kzalloc(SIDTAB_NODE_ALLOC_SIZE,
+							GFP_ATOMIC);
+			if (!s->roots[l].ptr_inner)
+				return -ENOMEM;
+			s->roots[l].ptr_inner->entries[0] = s->roots[l - 1];
+		}
+	return 0;
+}
+
+static struct sidtab_entry_leaf *sidtab_do_lookup(struct sidtab *s, u32 index,
+						  int alloc)
+{
+	union sidtab_entry_inner *entry;
+	u32 level, capacity_shift, leaf_index = index / SIDTAB_LEAF_ENTRIES;
+
+	/* find the level of the subtree we need */
+	level = sidtab_level_from_count(index + 1);
+	capacity_shift = level * SIDTAB_INNER_SHIFT;
+
+	/* allocate roots if needed */
+	if (alloc && sidtab_alloc_roots(s, level) != 0)
+		return NULL;
+
+	/* lookup inside the subtree */
+	entry = &s->roots[level];
+	while (level != 0) {
+		capacity_shift -= SIDTAB_INNER_SHIFT;
+		--level;
+
+		entry = &entry->ptr_inner->entries[leaf_index >> capacity_shift];
+		leaf_index &= ((u32)1 << capacity_shift) - 1;
+
+		if (!entry->ptr_inner) {
+			if (alloc)
+				entry->ptr_inner = kzalloc(SIDTAB_NODE_ALLOC_SIZE,
+							   GFP_ATOMIC);
+			if (!entry->ptr_inner)
+				return NULL;
+		}
+	}
+	if (!entry->ptr_leaf) {
+		if (alloc)
+			entry->ptr_leaf = kzalloc(SIDTAB_NODE_ALLOC_SIZE,
+						  GFP_ATOMIC);
+		if (!entry->ptr_leaf)
+			return NULL;
+	}
+	return &entry->ptr_leaf->entries[index % SIDTAB_LEAF_ENTRIES];
+}
+
+static struct context *sidtab_lookup(struct sidtab *s, u32 index)
+{
+	/* read entries only after reading count */
+	u32 count = smp_load_acquire(&s->count);
+
+	if (index >= count)
+		return NULL;
+
+	return &sidtab_do_lookup(s, index, 0)->context;
+}
+
+static struct context *sidtab_lookup_initial(struct sidtab *s, u32 sid)
+{
+	return s->isids[sid - 1].set ? &s->isids[sid - 1].leaf.context : NULL;
+}
+
 static struct context *sidtab_search_core(struct sidtab *s, u32 sid, int force)
 {
-	int hvalue;
-	struct sidtab_node *cur;
+	struct context *context;
 
-	if (!s)
-		return NULL;
-
-	hvalue = SIDTAB_HASH(sid);
-	cur = s->htable[hvalue];
-	while (cur && sid > cur->sid)
-		cur = cur->next;
-
-	if (force && cur && sid == cur->sid && cur->context.len)
-		return &cur->context;
-
-	if (!cur || sid != cur->sid || cur->context.len) {
-		/* Remap invalid SIDs to the unlabeled SID. */
-		sid = SECINITSID_UNLABELED;
-		hvalue = SIDTAB_HASH(sid);
-		cur = s->htable[hvalue];
-		while (cur && sid > cur->sid)
-			cur = cur->next;
-		if (!cur || sid != cur->sid)
-			return NULL;
+	if (sid != 0) {
+		if (sid > SECINITSID_NUM)
+			context = sidtab_lookup(s, sid_to_index(sid));
+		else
+			context = sidtab_lookup_initial(s, sid);
+		if (context && (!context->len || force))
+			return context;
 	}
 
-	return &cur->context;
+	return sidtab_lookup_initial(s, SECINITSID_UNLABELED);
 }
 
 struct context *sidtab_search(struct sidtab *s, u32 sid)
@@ -116,191 +234,252 @@
 	return sidtab_search_core(s, sid, 1);
 }
 
-int sidtab_map(struct sidtab *s,
-	       int (*apply) (u32 sid,
-			     struct context *context,
-			     void *args),
-	       void *args)
+int sidtab_context_to_sid(struct sidtab *s, struct context *context,
+			  u32 *sid)
 {
-	int i, rc = 0;
-	struct sidtab_node *cur;
+	unsigned long flags;
+	u32 count;
+	struct sidtab_convert_params *convert;
+	struct sidtab_entry_leaf *dst, *dst_convert;
+	int rc;
 
-	if (!s)
-		goto out;
+	*sid = context_to_sid(s, context);
+	if (*sid)
+		return 0;
 
-	for (i = 0; i < SIDTAB_SIZE; i++) {
-		cur = s->htable[i];
-		while (cur) {
-			rc = apply(cur->sid, &cur->context, args);
-			if (rc)
-				goto out;
-			cur = cur->next;
+	/* lock-free search failed: lock, re-search, and insert if not found */
+	spin_lock_irqsave(&s->lock, flags);
+
+	rc = 0;
+	*sid = context_to_sid(s, context);
+	if (*sid)
+		goto out_unlock;
+
+	/* read entries only after reading count */
+	count = smp_load_acquire(&s->count);
+	convert = s->convert;
+
+	/* bail out if we already reached max entries */
+	rc = -EOVERFLOW;
+	if (count >= SIDTAB_MAX)
+		goto out_unlock;
+
+	/* insert context into new entry */
+	rc = -ENOMEM;
+	dst = sidtab_do_lookup(s, count, 1);
+	if (!dst)
+		goto out_unlock;
+
+	dst->sid = index_to_sid(count);
+
+	rc = context_cpy(&dst->context, context);
+	if (rc)
+		goto out_unlock;
+
+	/*
+	 * if we are building a new sidtab, we need to convert the context
+	 * and insert it there as well
+	 */
+	if (convert) {
+		rc = -ENOMEM;
+		dst_convert = sidtab_do_lookup(convert->target, count, 1);
+		if (!dst_convert) {
+			context_destroy(&dst->context);
+			goto out_unlock;
 		}
+
+		rc = convert->func(context, &dst_convert->context,
+				convert->args);
+		if (rc) {
+			context_destroy(&dst->context);
+			goto out_unlock;
+		}
+		dst_convert->sid = index_to_sid(count);
+		convert->target->count = count + 1;
+
+		hash_add_rcu(convert->target->context_to_sid,
+				&dst_convert->list, dst_convert->context.hash);
 	}
-out:
+
+	if (context->len)
+		pr_info("SELinux:  Context %s is not valid (left unmapped).\n",
+			context->str);
+
+	*sid = index_to_sid(count);
+
+	/* write entries before updating count */
+	smp_store_release(&s->count, count + 1);
+	hash_add_rcu(s->context_to_sid, &dst->list, dst->context.hash);
+
+	rc = 0;
+out_unlock:
+	spin_unlock_irqrestore(&s->lock, flags);
 	return rc;
 }
 
-static void sidtab_update_cache(struct sidtab *s, struct sidtab_node *n, int loc)
+static void sidtab_convert_hashtable(struct sidtab *s, u32 count)
 {
-	BUG_ON(loc >= SIDTAB_CACHE_LEN);
+	struct sidtab_entry_leaf *entry;
+	u32 i;
 
-	while (loc > 0) {
-		s->cache[loc] = s->cache[loc - 1];
-		loc--;
+	for (i = 0; i < count; i++) {
+		entry = sidtab_do_lookup(s, i, 0);
+		entry->sid = index_to_sid(i);
+
+		hash_add_rcu(s->context_to_sid, &entry->list,
+				entry->context.hash);
+
 	}
-	s->cache[0] = n;
 }
 
-static inline u32 sidtab_search_context(struct sidtab *s,
-						  struct context *context)
+static int sidtab_convert_tree(union sidtab_entry_inner *edst,
+			       union sidtab_entry_inner *esrc,
+			       u32 *pos, u32 count, u32 level,
+			       struct sidtab_convert_params *convert)
 {
-	int i;
-	struct sidtab_node *cur;
+	int rc;
+	u32 i;
 
-	for (i = 0; i < SIDTAB_SIZE; i++) {
-		cur = s->htable[i];
-		while (cur) {
-			if (context_cmp(&cur->context, context)) {
-				sidtab_update_cache(s, cur, SIDTAB_CACHE_LEN - 1);
-				return cur->sid;
-			}
-			cur = cur->next;
+	if (level != 0) {
+		if (!edst->ptr_inner) {
+			edst->ptr_inner = kzalloc(SIDTAB_NODE_ALLOC_SIZE,
+						  GFP_KERNEL);
+			if (!edst->ptr_inner)
+				return -ENOMEM;
 		}
+		i = 0;
+		while (i < SIDTAB_INNER_ENTRIES && *pos < count) {
+			rc = sidtab_convert_tree(&edst->ptr_inner->entries[i],
+						 &esrc->ptr_inner->entries[i],
+						 pos, count, level - 1,
+						 convert);
+			if (rc)
+				return rc;
+			i++;
+		}
+	} else {
+		if (!edst->ptr_leaf) {
+			edst->ptr_leaf = kzalloc(SIDTAB_NODE_ALLOC_SIZE,
+						 GFP_KERNEL);
+			if (!edst->ptr_leaf)
+				return -ENOMEM;
+		}
+		i = 0;
+		while (i < SIDTAB_LEAF_ENTRIES && *pos < count) {
+			rc = convert->func(&esrc->ptr_leaf->entries[i].context,
+					   &edst->ptr_leaf->entries[i].context,
+					   convert->args);
+			if (rc)
+				return rc;
+			(*pos)++;
+			i++;
+		}
+		cond_resched();
 	}
+
 	return 0;
 }
 
-static inline u32 sidtab_search_cache(struct sidtab *s, struct context *context)
+int sidtab_convert(struct sidtab *s, struct sidtab_convert_params *params)
 {
-	int i;
-	struct sidtab_node *node;
-
-	for (i = 0; i < SIDTAB_CACHE_LEN; i++) {
-		node = s->cache[i];
-		if (unlikely(!node))
-			return 0;
-		if (context_cmp(&node->context, context)) {
-			sidtab_update_cache(s, node, i);
-			return node->sid;
-		}
-	}
-	return 0;
-}
-
-int sidtab_context_to_sid(struct sidtab *s,
-			  struct context *context,
-			  u32 *out_sid)
-{
-	u32 sid;
-	int ret = 0;
 	unsigned long flags;
+	u32 count, level, pos;
+	int rc;
 
-	*out_sid = SECSID_NULL;
+	spin_lock_irqsave(&s->lock, flags);
 
-	sid  = sidtab_search_cache(s, context);
-	if (!sid)
-		sid = sidtab_search_context(s, context);
-	if (!sid) {
-		spin_lock_irqsave(&s->lock, flags);
-		/* Rescan now that we hold the lock. */
-		sid = sidtab_search_context(s, context);
-		if (sid)
-			goto unlock_out;
-		/* No SID exists for the context.  Allocate a new one. */
-		if (s->next_sid == UINT_MAX || s->shutdown) {
-			ret = -ENOMEM;
-			goto unlock_out;
-		}
-		sid = s->next_sid++;
-		if (context->len)
-			pr_info("SELinux:  Context %s is not valid (left unmapped).\n",
-			       context->str);
-		ret = sidtab_insert(s, sid, context);
-		if (ret)
-			s->next_sid--;
-unlock_out:
+	/* concurrent policy loads are not allowed */
+	if (s->convert) {
 		spin_unlock_irqrestore(&s->lock, flags);
+		return -EBUSY;
 	}
 
-	if (ret)
-		return ret;
+	count = s->count;
+	level = sidtab_level_from_count(count);
 
-	*out_sid = sid;
+	/* allocate last leaf in the new sidtab (to avoid race with
+	 * live convert)
+	 */
+	rc = sidtab_do_lookup(params->target, count - 1, 1) ? 0 : -ENOMEM;
+	if (rc) {
+		spin_unlock_irqrestore(&s->lock, flags);
+		return rc;
+	}
+
+	/* set count in case no new entries are added during conversion */
+	params->target->count = count;
+
+	/* enable live convert of new entries */
+	s->convert = params;
+
+	/* we can safely convert the tree outside the lock */
+	spin_unlock_irqrestore(&s->lock, flags);
+
+	pr_info("SELinux:  Converting %u SID table entries...\n", count);
+
+	/* convert all entries not covered by live convert */
+	pos = 0;
+	rc = sidtab_convert_tree(&params->target->roots[level],
+				 &s->roots[level], &pos, count, level, params);
+	if (rc) {
+		/* we need to keep the old table - disable live convert */
+		spin_lock_irqsave(&s->lock, flags);
+		s->convert = NULL;
+		spin_unlock_irqrestore(&s->lock, flags);
+		return rc;
+	}
+	/*
+	 * The hashtable can also be modified in sidtab_context_to_sid()
+	 * so we must re-acquire the lock here.
+	 */
+	spin_lock_irqsave(&s->lock, flags);
+	sidtab_convert_hashtable(params->target, count);
+	spin_unlock_irqrestore(&s->lock, flags);
+
 	return 0;
 }
 
-void sidtab_hash_eval(struct sidtab *h, char *tag)
+static void sidtab_destroy_tree(union sidtab_entry_inner entry, u32 level)
 {
-	int i, chain_len, slots_used, max_chain_len;
-	struct sidtab_node *cur;
+	u32 i;
 
-	slots_used = 0;
-	max_chain_len = 0;
-	for (i = 0; i < SIDTAB_SIZE; i++) {
-		cur = h->htable[i];
-		if (cur) {
-			slots_used++;
-			chain_len = 0;
-			while (cur) {
-				chain_len++;
-				cur = cur->next;
-			}
+	if (level != 0) {
+		struct sidtab_node_inner *node = entry.ptr_inner;
 
-			if (chain_len > max_chain_len)
-				max_chain_len = chain_len;
-		}
+		if (!node)
+			return;
+
+		for (i = 0; i < SIDTAB_INNER_ENTRIES; i++)
+			sidtab_destroy_tree(node->entries[i], level - 1);
+		kfree(node);
+	} else {
+		struct sidtab_node_leaf *node = entry.ptr_leaf;
+
+		if (!node)
+			return;
+
+		for (i = 0; i < SIDTAB_LEAF_ENTRIES; i++)
+			context_destroy(&node->entries[i].context);
+		kfree(node);
 	}
-
-	pr_debug("%s:  %d entries and %d/%d buckets used, longest "
-	       "chain length %d\n", tag, h->nel, slots_used, SIDTAB_SIZE,
-	       max_chain_len);
 }
 
 void sidtab_destroy(struct sidtab *s)
 {
-	int i;
-	struct sidtab_node *cur, *temp;
+	u32 i, level;
 
-	if (!s)
-		return;
+	for (i = 0; i < SECINITSID_NUM; i++)
+		if (s->isids[i].set)
+			context_destroy(&s->isids[i].leaf.context);
 
-	for (i = 0; i < SIDTAB_SIZE; i++) {
-		cur = s->htable[i];
-		while (cur) {
-			temp = cur;
-			cur = cur->next;
-			context_destroy(&temp->context);
-			kfree(temp);
-		}
-		s->htable[i] = NULL;
-	}
-	kfree(s->htable);
-	s->htable = NULL;
-	s->nel = 0;
-	s->next_sid = 1;
-}
+	level = SIDTAB_MAX_LEVEL;
+	while (level && !s->roots[level].ptr_inner)
+		--level;
 
-void sidtab_set(struct sidtab *dst, struct sidtab *src)
-{
-	unsigned long flags;
-	int i;
-
-	spin_lock_irqsave(&src->lock, flags);
-	dst->htable = src->htable;
-	dst->nel = src->nel;
-	dst->next_sid = src->next_sid;
-	dst->shutdown = 0;
-	for (i = 0; i < SIDTAB_CACHE_LEN; i++)
-		dst->cache[i] = NULL;
-	spin_unlock_irqrestore(&src->lock, flags);
-}
-
-void sidtab_shutdown(struct sidtab *s)
-{
-	unsigned long flags;
-
-	spin_lock_irqsave(&s->lock, flags);
-	s->shutdown = 1;
-	spin_unlock_irqrestore(&s->lock, flags);
+	sidtab_destroy_tree(s->roots[level], level);
+	/*
+	 * The context_to_sid hashtable's objects are all shared
+	 * with the isids array and context tree, and so don't need
+	 * to be cleaned up here.
+	 */
 }
diff --git a/security/selinux/ss/sidtab.h b/security/selinux/ss/sidtab.h
index a1a1d26..8564ec0 100644
--- a/security/selinux/ss/sidtab.h
+++ b/security/selinux/ss/sidtab.h
@@ -1,56 +1,112 @@
 /* SPDX-License-Identifier: GPL-2.0 */
 /*
- * A security identifier table (sidtab) is a hash table
+ * A security identifier table (sidtab) is a lookup table
  * of security context structures indexed by SID value.
  *
- * Author : Stephen Smalley, <sds@tycho.nsa.gov>
+ * Original author: Stephen Smalley, <sds@tycho.nsa.gov>
+ * Author: Ondrej Mosnacek, <omosnacek@gmail.com>
+ *
+ * Copyright (C) 2018 Red Hat, Inc.
  */
 #ifndef _SS_SIDTAB_H_
 #define _SS_SIDTAB_H_
 
-#include "context.h"
+#include <linux/spinlock_types.h>
+#include <linux/log2.h>
+#include <linux/hashtable.h>
 
-struct sidtab_node {
-	u32 sid;		/* security identifier */
-	struct context context;	/* security context structure */
-	struct sidtab_node *next;
+#include "context.h"
+#include "flask.h"
+
+struct sidtab_entry_leaf {
+	u32 sid;
+	struct context context;
+	struct hlist_node list;
 };
 
-#define SIDTAB_HASH_BITS 7
-#define SIDTAB_HASH_BUCKETS (1 << SIDTAB_HASH_BITS)
-#define SIDTAB_HASH_MASK (SIDTAB_HASH_BUCKETS-1)
+struct sidtab_node_inner;
+struct sidtab_node_leaf;
 
-#define SIDTAB_SIZE SIDTAB_HASH_BUCKETS
+union sidtab_entry_inner {
+	struct sidtab_node_inner *ptr_inner;
+	struct sidtab_node_leaf  *ptr_leaf;
+};
+
+/* align node size to page boundary */
+#define SIDTAB_NODE_ALLOC_SHIFT PAGE_SHIFT
+#define SIDTAB_NODE_ALLOC_SIZE  PAGE_SIZE
+
+#define size_to_shift(size) ((size) == 1 ? 1 : (const_ilog2((size) - 1) + 1))
+
+#define SIDTAB_INNER_SHIFT \
+	(SIDTAB_NODE_ALLOC_SHIFT - size_to_shift(sizeof(union sidtab_entry_inner)))
+#define SIDTAB_INNER_ENTRIES ((size_t)1 << SIDTAB_INNER_SHIFT)
+#define SIDTAB_LEAF_ENTRIES \
+	(SIDTAB_NODE_ALLOC_SIZE / sizeof(struct sidtab_entry_leaf))
+
+#define SIDTAB_MAX_BITS 32
+#define SIDTAB_MAX U32_MAX
+/* ensure enough tree levels for SIDTAB_MAX entries */
+#define SIDTAB_MAX_LEVEL \
+	DIV_ROUND_UP(SIDTAB_MAX_BITS - size_to_shift(SIDTAB_LEAF_ENTRIES), \
+		     SIDTAB_INNER_SHIFT)
+
+struct sidtab_node_leaf {
+	struct sidtab_entry_leaf entries[SIDTAB_LEAF_ENTRIES];
+};
+
+struct sidtab_node_inner {
+	union sidtab_entry_inner entries[SIDTAB_INNER_ENTRIES];
+};
+
+struct sidtab_isid_entry {
+	int set;
+	struct sidtab_entry_leaf leaf;
+};
+
+struct sidtab_convert_params {
+	int (*func)(struct context *oldc, struct context *newc, void *args);
+	void *args;
+	struct sidtab *target;
+};
+
+#define SIDTAB_HASH_BITS CONFIG_SECURITY_SELINUX_SIDTAB_HASH_BITS
+#define SIDTAB_HASH_BUCKETS (1 << SIDTAB_HASH_BITS)
 
 struct sidtab {
-	struct sidtab_node **htable;
-	unsigned int nel;	/* number of elements */
-	unsigned int next_sid;	/* next SID to allocate */
-	unsigned char shutdown;
-#define SIDTAB_CACHE_LEN	3
-	struct sidtab_node *cache[SIDTAB_CACHE_LEN];
+	/*
+	 * lock-free read access only for as many items as a prior read of
+	 * 'count'
+	 */
+	union sidtab_entry_inner roots[SIDTAB_MAX_LEVEL + 1];
+	/*
+	 * access atomically via {READ|WRITE}_ONCE(); only increment under
+	 * spinlock
+	 */
+	u32 count;
+	/* access only under spinlock */
+	struct sidtab_convert_params *convert;
 	spinlock_t lock;
+
+	/* index == SID - 1 (no entry for SECSID_NULL) */
+	struct sidtab_isid_entry isids[SECINITSID_NUM];
+
+	/* Hash table for fast reverse context-to-sid lookups. */
+	DECLARE_HASHTABLE(context_to_sid, SIDTAB_HASH_BITS);
 };
 
 int sidtab_init(struct sidtab *s);
-int sidtab_insert(struct sidtab *s, u32 sid, struct context *context);
+int sidtab_set_initial(struct sidtab *s, u32 sid, struct context *context);
 struct context *sidtab_search(struct sidtab *s, u32 sid);
 struct context *sidtab_search_force(struct sidtab *s, u32 sid);
 
-int sidtab_map(struct sidtab *s,
-	       int (*apply) (u32 sid,
-			     struct context *context,
-			     void *args),
-	       void *args);
+int sidtab_convert(struct sidtab *s, struct sidtab_convert_params *params);
 
-int sidtab_context_to_sid(struct sidtab *s,
-			  struct context *context,
-			  u32 *sid);
+int sidtab_context_to_sid(struct sidtab *s, struct context *context, u32 *sid);
 
-void sidtab_hash_eval(struct sidtab *h, char *tag);
 void sidtab_destroy(struct sidtab *s);
-void sidtab_set(struct sidtab *dst, struct sidtab *src);
-void sidtab_shutdown(struct sidtab *s);
+
+int sidtab_hash_stats(struct sidtab *sidtab, char *page);
 
 #endif	/* _SS_SIDTAB_H_ */
 
diff --git a/tools/include/linux/coresight-pmu.h b/tools/include/linux/coresight-pmu.h
index a1a959b..b0e35ee 100644
--- a/tools/include/linux/coresight-pmu.h
+++ b/tools/include/linux/coresight-pmu.h
@@ -12,11 +12,13 @@
 
 /* ETMv3.5/PTM's ETMCR config bit */
 #define ETM_OPT_CYCACC  12
+#define ETM_OPT_CTXTID	14
 #define ETM_OPT_TS      28
 #define ETM_OPT_RETSTK	29
 
 /* ETMv4 CONFIGR programming bits for the ETM OPTs */
 #define ETM4_CFG_BIT_CYCACC	4
+#define ETM4_CFG_BIT_CTXTID	6
 #define ETM4_CFG_BIT_TS		11
 #define ETM4_CFG_BIT_RETSTK	12
 
diff --git a/tools/testing/selftests/arm64/.gitignore b/tools/testing/selftests/arm64/.gitignore
new file mode 100644
index 0000000..e8fae8d
--- /dev/null
+++ b/tools/testing/selftests/arm64/.gitignore
@@ -0,0 +1 @@
+tags_test
diff --git a/tools/testing/selftests/arm64/Makefile b/tools/testing/selftests/arm64/Makefile
new file mode 100644
index 0000000..f9f79fb
--- /dev/null
+++ b/tools/testing/selftests/arm64/Makefile
@@ -0,0 +1,12 @@
+# SPDX-License-Identifier: GPL-2.0
+
+# ARCH can be overridden by the user for cross compiling
+ARCH ?= $(shell uname -m 2>/dev/null || echo not)
+
+ifneq (,$(filter $(ARCH),aarch64 arm64))
+CFLAGS += -I../../../../usr/include/
+TEST_GEN_PROGS := tags_test
+TEST_PROGS := run_tags_test.sh
+endif
+
+include ../lib.mk
diff --git a/tools/testing/selftests/arm64/run_tags_test.sh b/tools/testing/selftests/arm64/run_tags_test.sh
new file mode 100755
index 0000000..745f113
--- /dev/null
+++ b/tools/testing/selftests/arm64/run_tags_test.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0
+
+echo "--------------------"
+echo "running tags test"
+echo "--------------------"
+./tags_test
+if [ $? -ne 0 ]; then
+	echo "[FAIL]"
+else
+	echo "[PASS]"
+fi
diff --git a/tools/testing/selftests/arm64/tags_test.c b/tools/testing/selftests/arm64/tags_test.c
new file mode 100644
index 0000000..5701163
--- /dev/null
+++ b/tools/testing/selftests/arm64/tags_test.c
@@ -0,0 +1,31 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdint.h>
+#include <sys/prctl.h>
+#include <sys/utsname.h>
+
+#define SHIFT_TAG(tag)		((uint64_t)(tag) << 56)
+#define SET_TAG(ptr, tag)	(((uint64_t)(ptr) & ~SHIFT_TAG(0xff)) | \
+					SHIFT_TAG(tag))
+
+int main(void)
+{
+	static int tbi_enabled = 0;
+	unsigned long tag = 0;
+	struct utsname *ptr;
+	int err;
+
+	if (prctl(PR_SET_TAGGED_ADDR_CTRL, PR_TAGGED_ADDR_ENABLE, 0, 0, 0) == 0)
+		tbi_enabled = 1;
+	ptr = (struct utsname *)malloc(sizeof(*ptr));
+	if (tbi_enabled)
+		tag = 0x42;
+	ptr = (struct utsname *)SET_TAG(ptr, tag);
+	err = uname(ptr);
+	free(ptr);
+
+	return err;
+}